Skip to content

Instantly share code, notes, and snippets.


swyx sw-yx

View GitHub Profile
sw-yx / 01 - sample workflow.ts
Last active Feb 15, 2022
sample Temporal workflow - see for context and full video!
View 01 - sample workflow.ts
import * as wf from '@temporalio/workflow';
import differenceInMilliseconds from 'date-fns/differenceInMilliseconds';
import type * as activities from './activities';
import { sub } from 'date-fns'
const {
} = wf.proxyActivities<typeof activities>({
// remember to adjust timeouts!
sw-yx / AutoHotkey.ahk
Last active Dec 7, 2021
swyx's autohotkey circa 2014. i used this thing extensively from 2010-2014. In one case it was at least responsible for automating away part of my own job.
View AutoHotkey.ahk
Settitlematchmode, 2
winmove, A,, 1,1,600,600
#IfWinActive, Microsoft Word
;Send {Backspace 1}
View extra.css
.site-intro {
font-size: 1.25rem;
width: 60ch;
margin: 0 auto;
.site-credits {
position: fixed;
width: 100vw;
bottom: 0;
sw-yx / workflow apis
Last active Oct 25, 2021
workflow apis
View workflow apis

now that we have a cohesive look at workflow APIs, some issues remain:

  • createActivityHandle isnt really a handle, in the way that createWorkflowHandle and createChildWorkflowHandle are. it returns a function that you call.
    • users are confused by the proxy destructure which a very fancy way of doing type safety and ensuring consistent naming
  • defineSignal/Query dont add much value since they just create an object
    • extra setListener api that is doing the real work, basically 2 different functions branching by def.type

just taking another crack at api design.

simplified query and signal api

sw-yx / sample.go
Created Jul 6, 2021
old Temporal code samples
View sample.go
func mainWorkflow(ctx workflow.Context, userId) error {
// ...
selector.AddReceive(signalChannel, func(c workflow.ReceiveChannel, more bool) {
c.Receive(ctx, &signalVal) // receive user signals!
timerFuture := workflow.NewTimer(childCtx, 30 * time.Day) // sleep for 30 days!
selector.AddFuture(timerFuture, func(f workflow.Future) {
_ = workflow.ExecuteActivity(ctx, SendEmailActivity).Get(ctx, nil) // timeouts and retries!
// Scale to Millions + Write Tests + Encrypt Data + Migrate Versions + ...
sw-yx / useLocalStorage.js
Last active Jul 2, 2021
SSR friendly version of useLocalStorage hook. you can also use this in a library
View useLocalStorage.js
// usage
function Comp() {
const [language, setLanguage] = useLocalStorage('mykey', 'typescript')
// definition
function useLocalStorage(key, initialValue) {
const [storedValue, setStoredValue] = React.useState(initialValue);
React.useEffect(() => {
// Get from local storage by key
View clubhouse blogpost

Clubhouse is a great way to access celebrities but a terrible listening experience. They got all the growth factors right, but none of the retention and compounding factors.

Andrew Chen, Ryan Hoover, Michael Grinich and Sahil Lavingia think it could be a $100b company — and they have insider knowledge of metrics. I don't think Clubhouse is a zero - it has genuinely created a new category - it's just not very valuable. I'm taking the other side of that bet (but of course wish them well).


View manual typography plugin since i got fed up with dark

this is what i use so far, its obviously not a 100% replica of the typography plugin but looks good enough on my site

  /* replace typography plugin */
  .prose {
    @apply text-gray-700 dark:text-gray-300
  .prose {
 &amp; p {
sw-yx /
Last active Nov 20, 2020
Svelte micro-RFC: configurable event modifiers

This is a micro RFC because i'm just jotting down an idea that I would love to have for Svelte, but I'm not sure if it belongs as an official RFC yet. the official RFC process offers no room for lightweight proposals so i am writing a gist.

see also Twitter discussion

The Problem

Svelte offers very useful event modifiers like preventDefault and once.