Cheng Yang

1 min read

Hello, world

Why this site exists, how often it will change, and a small tour of what a post here can do.

I’ve wanted a place for longer thoughts for a while. Not a feed, not a newsletter: just a quiet corner of the internet where an idea can sit for a few years and still be found.

So the plan is modest. A post every season or so, written when something has been rattling around in my head long enough that writing it down is the only way to stop thinking about it.

Posts can be interactive#

Writing about systems is easier when the reader can poke at them. Building a small interactive piece is cheap now, so some posts here will have one. Here’s a field of columns rippling like water. Drag it around, or click somewhere to drop a ripple:

Drag to orbit · click to drop a ripple

That’s three.js inside an ordinary component. The library is only downloaded when you scroll to it, so the rest of the page stays plain, fast HTML.

Bigger experiments can live as standalone HTML pages that get embedded in a post. This one is a flow field that swirls around your cursor:

A flow field that bends around your pointerOpen full screen ↗

Also: math and code#

Sometimes an equation is the shortest way to say something. Attention, for example:

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

And sometimes it’s code:

const posts = await getCollection('posts', ({ data }) => !data.draft);

That’s it for now. See you next season.