Skip to main content
Zubin Khavarian

Writing

RSS

Notes on front-end work, TypeScript, and the overlap with games and audio.

Soundscapes for Web Games: A Pluggable Howler Implementation, Part 2

12 min read

The soundscape engine is one class under a hundred lines. A six-function adapter is the seam.

#audio#game-dev

Soundscapes for Web Games: The Layer Beneath Your SFX, Part 1

7 min read

Web games sound flat because they treat audio as event SFX. A soundscape is the layer that fills the silence.

#audio#game-dev

switch(true): The Stylish Way to Simplify Complex Conditionals in React

4 min read

switch(true) is an ordered list of boolean cases. First true wins. Use it when precedence matters. Use a lookup, or a normal switch, when it does not.

#react#javascript

Crafting Quality Code with Conventional Comments

4 min read

A code review comment needs two things: what kind of feedback this is, and whether it blocks the merge. Conventional Comments is a prefix that says both.

#git#process

To Yak Shave or Not: The Art of Procrastination in Software Development

4 min read

Yak shaving is a dependency chain, not a personality flaw. Bike shedding is a meeting. Shave it, stash it, or skip it.

#process

Turn on skipLibCheck

4 min read

skipLibCheck stops TypeScript from type-checking .d.ts files. Your code is still checked. Leave it on.

#javascript#typescript

Use ESM

5 min read

JavaScript has a standard module system. CommonJS is still the default for unmarked .js files. AMD and UMD are history. Node decides which one a file is by extension and package.json.

#javascript#typescript

Prefer named exports

4 min read

Named exports rename with the compiler. Default exports let every file pick a different name. Use named exports unless a framework forces a default.

#javascript#typescript

TypeScript has two decorator systems

4 min read

Standard decorators take (value, context) and need no tsconfig flag. experimentalDecorators is the 2015 API. They are not compatible. Pick one.

#javascript#typescript