Melin's Blog

Latest posts

See all posts
  • First Impressions of Vap, Tencent’s Open-Source Solution for Playing Cool Animations
    A colleague recently mentioned Vap in our group chat. The description was simple: it can play flashy animation effects, and more importantly, it supports transparent animation b...
  • JS Video Decoding: An Out-of-the-Box Review of JSMpeg and Broadway
    Last week, I tried Vap , a player that can use WebGL to decode and play videos, and wrote an article documenting the experience. Someone commented under that article: if all I w...
  • Safari Does Not Support Built-In Custom Elements: A Practical Compatibility Strategy
    Based on Zhang Xinxu’s discussion of Safari’s Web Components limitations, with practical implementation examples from the demo code. Safari supports autonomous custom elements ,...
  • Understanding `Promise.all()`, `Promise.race()`, and `Promise.any()`
    JavaScript gives us several ways to coordinate multiple asynchronous operations. Three of the most useful are Promise.all() , Promise.race() , and Promise.any() . They all accep...
  • Triggering a JavaScript `change` Event When Assigning `input.value`
    In the browser, user interaction and JavaScript assignment are not treated the same way. When a user types, pastes, or drops text into an , the browser fires an input event. Whe...
© 2026 • Melin
Press Esc or click anywhere to close