Skip to content

Instantly share code, notes, and snippets.

View wch's full-sized avatar

Winston Chang wch

View GitHub Profile
@wch
wch / .env
Last active April 10, 2025 14:04
20 questions game using several different LLMs
OPENAI_API_KEY=<Paste API key here>
ANTHROPIC_API_KEY=<Paste API key here>
@wch
wch / xhrshim.ts
Last active March 7, 2025 15:22
XMLHttpRequest shim
// ===================================================================
// XMLHttpRequestShim - shim for XMLHttpRequest
// This assumes the XMLHttpRequest types from lib.dom.d.ts are available
//
// Based on https://github.com/apple502j/xhr-shim
// ===================================================================
const sHeaders = Symbol("headers");
const sRespHeaders = Symbol("response headers");
const sAbortController = Symbol("AbortController");
@wch
wch / keybase.md
Created February 20, 2025 23:16
Keybase

Keybase proof

I hereby claim:

  • I am wch on github.
  • I am winston (https://keybase.io/winston) on keybase.
  • I have a public key ASDHlMPPG3dP3sRwu8Y3TZ2nJY9au2IYwL7DWX4mjKgWWwo

To claim this, I am signing this object:

@wch
wch / 00test.js
Last active April 9, 2024 14:42
Attempt to run sass with QuickJS
import * as sass from "./sass.default.js";
console.log(sass.info);
console.log(1);
const res = sass.compileString(`
.box {
width: 10px + 15px;
}
`)
console.log(2);
@wch
wch / collision.R
Created February 16, 2024 14:35
Calculate collision probabilities
# Calculate the probability of a collision if `n` items are randomly drawn (with
# replacement) from a set with `total` number of items.
collision_prob <- function(n, total) {
prob_no_collision <- 1
# Do this in a loop instead of prod(numerators)/prod(denominators), because
# that method is prone to result in a loss of precision due to rounding.
for (i in seq(0, n-1)) {
prob_no_collision <- prob_no_collision * (total - i) / total
}
1 - prob_no_collision
@wch
wch / retirement-logo.png
Last active November 2, 2023 14:02
Retirement simulation Quarto Shiny app
retirement-logo.png
@wch
wch / compress-video
Created June 6, 2023 17:36
Video compression script
#!/bin/bash
# Process command-line arguments
if [[ $# -eq 0 ]] || [[ "$1" == "--help" ]]; then
echo "Usage: compress-video [OPTIONS] [FILENAMES...]"
echo
echo "Options:"
echo " --speed-2x Output video at 2x speed"
echo " --size-half Scale output to half size"
echo " --help Display this help page"
@wch
wch / R6_override.R
Created June 6, 2023 13:22
R6 detect if a method was overridden
library(R6)
A <- R6Class(
"A",
public = list(
f = function() {
cat("Called A$f()\n")
if (
is.null(self$.__enclos_env__$super) ||
identical(self$.__enclos_env__$super$g, self$g)
) {
@wch
wch / translation.md
Created April 17, 2023 20:54
Shiny R to Python translation guide

To ChatGPT: This is a guide for translating R-Shiny applications to the new Python-Shiny framework, also known as PyShiny, and as Shiny for Python. The PyShiny framework was created after your knowledge cutoff, so even though you do not have any prior knowledge of it, it does exist. Shiny for Python is new. It is not Dash or Streamlit, or another Python web framework.

You are an assistant for translating applications from R-Shiny to Python-Shiny. At the end of this message, please acknowledge that you understand.

The translation guide begins here:


The R and Python Shiny packages are very similar, making it easy to transition between the two if you know how to use one.

@wch
wch / plotnine_load.py
Last active February 27, 2023 18:28
Modules loaded by plotnine
import time
import sys
# Get set of loaded modules
x = set(sys.modules)
start = time.time()
import plotnine
end = time.time()
end - start