Jim Cheung

Thursday, January 08, 2026

clean up event listeners with AbortController:

const controller = new AbortController();

const btn = document.createElement("button");
btn.addEventListener("click", () => console.log("Clicked"), { signal: controller.signal });
document.body.appendChild(btn);

controller.abort();


TIL emacs has tab bar mode: (tab-bar-mode 1)


adding to my toolbox: pranshuparmar/witr: Why is this running?


Friday, January 23, 2026

this talk is so good: From Tomorrow Back to Yesterday: A Tale of Two Web Architectures

I can't wait to try out Datastar

some readings first:


also another good talk: A ClojureScript Survival Kit

no wonder cljs was so difficult for me, because I didn't use the google closure library!

goog.date
goog.i18n.DateTimeFormat
goog.ally.aria
goog.dom.selection
goog.dom.animation (split read/write)
goog.dom.safe (XSS sanitization)
goog.math.Integer (arbitrary precision)
goog.ui.* (autocomplete, tooltips, treecontrol, datepicker ...)
goog.math.vec
goog.userAgent
goog.history
goog.uri
goog.crypt.*

note, even google doesn't maintain closure library anymore, clojure team maintained a fork of it

the talk also mentioned morphing:

Blog Archive
    Newer Entries
  • N/A