Skip to content

Instantly share code, notes, and snippets.

View dy's full-sized avatar
🙌
you're doing good

Dmitry Iv. dy

🙌
you're doing good
View GitHub Profile
@dy
dy / web-codec-decode.js
Created January 26, 2023 14:33
Web Codec API
// web codec API (one day, hopefully)
const codecConfig = {
codec: 'mp3',
sampleRate: 48000,
numberOfChannels: 2,
description: new ArrayBuffer
}
let chunk = new EncodedAudioChunk({
type: 'key',
@dy
dy / record-audio.js
Last active January 14, 2023 13:25
Record youtube / any <video>/<audio> clip
// paste the code below into browser console in any youtube page and call `record(from, to)`
// from and to are in seconds
async function record(from, to) {
var mediaElement=document.querySelector('video')
var recordedChunks = [];
var mimeType = 'audio/webm;codecs="opus"'
var ac = new AudioContext();
var mediaSource = new MediaElementAudioSourceNode(ac, {mediaElement});
@dy
dy / no-prettier.md
Last active January 9, 2023 15:11
Why not prettier
  1. If there is //@ts-ignore on the first line, prettier may split it to multiple lines and break ts this way.
  2. Prettier expands inline constructs into ugly multiline vertical parts (myriads of examples)
  3. Prettier breaks matrices formatting
  4. It produces redundant diff logs, making it hard to analyze logic changes
@dy
dy / no-stackgl.md
Last active January 9, 2023 15:04
why-not-stackgl

Why not stackgl

Learning WebGL is difficult.

What I’ve understood so far, after 3+ months experience with WebGL? stackgl is a set of tools somewhere in-between raw WebGL API and graphic frameworks like three.js. But the purpose of these tools is not completely clear.

I guess the motive behing things like gl-shader

glslify

@dy
dy / scoped-script.html
Created September 15, 2020 13:36
Scoped script polyfill
<!DOCTYPE html>
<script id='scoped-script'>
let i = 0;
(new MutationObserver(rx=>rx.forEach(({target:s}) => {
if (s.tagName !== 'SCRIPT' || s.scoped || !s.hasAttribute('scoped')) return
s.scoped=true
if (!s.id) s.id='__s'+i++
s.innerHTML=`(function(){${s.innerHTML}}).call(document.getElementById('${s.id}').parentNode)`
}))).observe(document, {childList:true,subtree:true,attributes:true,attributeFilter:['scoped']})
@dy
dy / element-render.jsx
Last active November 16, 2022 21:38
element.render
// what if we had simple method on elements, taking in VDOM pieces?
// * it makes sure there's no internal content that messes up rendering
// * it allows simple function as input - something prohibited by preact
// * it enables element existence check
element?.render(({props}) => <div></div>);
element?.render(<div></div>);
element?.render(<Element></Element>);
function Element({props}) { ... }
@dy
dy / array.wat
Last active February 7, 2022 20:15
WASM array fill performance
;; test passing array to and back
(module
(import "js" "mem" (memory 1))
(import "console" "log" (func $log (param i32 f32)))
(global $blockSize (import "js" "blockSize") (mut i32))
(global $len (mut i32) (i32.const 0))
;; len = blockSize * 4
(func (global.set $len (i32.mul (global.get $blockSize) (i32.const 4))))
(start 1)
@dy
dy / stacker.html
Created January 14, 2022 21:27
Stacker debug
<!DOCTYPE html>
<a href="https://twitter.com/jviide/status/1257755526722662405">ref</a>
<script type="module">
import t from './libs/tst.js'
// function μ(h,...d){for(var a=[],g=0,f=0,b=-1,c;c=h[g++];)c--?c--?c--?c--?c--?a[++b]=c--?c--?[d[f++],c?{}:null]:1<g||[]:d[f++]:a[b]=this(...a[b]):Object.assign(a[b][1],d[f++]):a[b-1].push(a[b--]):a[b-2][1][a[b--]]=a[b--]:a[b-1]+=""+a[b--];return a[0]}
function μ(hash, ...fields){
// [root, tag, props, ...children]
var stack=[], i=0, f=0, d=-1, c
@dy
dy / git-issues.md
Created September 24, 2021 17:01
Git issues
  1. Adding/removing indentation of large blocks creates huge diff-log, although that's simply spaces.
  2. Renaming a file doesn't come along with diff-log, it must be a separate commit, otherwise log is huge.
@dy
dy / find-ops-combinations.js
Last active September 5, 2021 00:26
Do prime sums and products ever intersect?
(() => {
// play around with initial sequences / operator combinations
let seqs = {}, ops = {'+':(a,b)=>a+b,'-':(a,b)=>a-b}//'/':(a,b)=>a/b,'*':(a,b)=>a*b}
const results = new Proxy({}, {
set(results, prop, value){
if (results[prop]) {
if (!results[prop].includes(value)) console.error('set', prop, ':', value, 'exists as', results[prop])