STILL CODING / NOTES
JavaScript 개발 노트
JavaScript
여러 앱에서 JavaScript을(를) 다루며 남긴 노트 10편입니다.
-
'소리가 안 바뀌었다'를 어떻게 증명하나 — 모든 리듬을 실제 엔진에 돌려 기록하는 골든 테스트
Guitar Auto-Strum은 모든 시스템 리듬을 실제 트랜스포트에 돌려, 엔진이 예약한 모든 음의 시각·세기·줄을 파일로 기록하고 비교합니다. 가짜 오디오 하네스, 결정적인 시간 진행, 의도한 변경일 때만 갱신하는 규칙, 스냅샷과 별개로 두는 성질 검사를 정리합니다.
-
정확한 박자는 기계처럼 들린다 — 스윙과 사람 같은 어긋남, 그리고 '랜덤이 랜덤이면 안 되는' 이유
Guitar Auto-Strum의 스윙과 휴머나이즈 기능이 어떻게 박자를 일부러 흔드는지 정리합니다. 뒷박을 늦추는 스윙 비율, 타이밍·세기·스트럼 속도의 미세한 변화, 그리고 난수 대신 '스트로크 번호와 시드로 정해지는 값'을 쓴 이유를 코드로 설명합니다.
-
카포를 마이너스로 — 진짜 카포에는 없는 방향을 넣은 이유
Guitar Auto-Strum의 카포는 −5에서 +7까지 움직입니다. 실제 카포로는 불가능한 낮추는 방향을 넣은 이유, 범위를 손과 귀의 한계로 정한 방법, 그리고 'C (→D)'처럼 두 이름을 함께 보여 주는 표기를 코드 주석과 함께 정리합니다.
-
박자가 흔들리지 않는 자동 반주 — 타이머는 흔들리고 오디오 시계는 흔들리지 않는다
브라우저의 setInterval로 음을 직접 울리면 박자가 흔들립니다. Guitar Auto-Strum이 오디오 시계 위에 음을 미리 예약하는 look-ahead 스케줄러로 박자를 지키고, 코드 변경과 마디 경계에서 생기는 문제를 다룬 방법을 코드로 정리합니다.
-
게임을 아홉 개로 늘려도 로비가 가벼운 이유 — Direct Play의 게임 모듈 구조
Direct Play가 게임 10개를 하나의 로비에서 다루기 위해 만든 카탈로그와 지연 로딩 레지스트리, 게임 모듈 계약, 순수 로직 분리를 설명합니다. 독립 앱 두 개를 같은 계약에 맞춰 옮긴 코드도 다룹니다.
-
6×6 미니 스도쿠: 해가 하나뿐인 문제를 비트마스크 솔버로 만들어 내기
Direct Play의 6×6 미니 스도쿠가 문제를 만드는 방법을 정리합니다. 6비트 후보 마스크, 후보가 가장 적은 칸부터 푸는 백트래킹, 해를 두 개까지만 세는 유일성 검사, 180도 대칭 제거를 코드로 보이고 난이도 평가의 한계도 적습니다.
-
숫자 야구: 판정은 스무 줄이고, 나머지는 입력을 막고 상태를 복원하는 일이었다
Direct Play 숫자 야구의 비밀 숫자 생성, 스트라이크·볼 판정, 중복 입력 차단, 세 상태 메모, 힌트, 새로고침 뒤 복원과 순위 정렬을 실제 코드로 정리합니다. 참가자가 정답을 볼 수 있다는 한계도 함께 적습니다.
-
사진 퍼즐: 제자리에 붙은 조각은 한 덩어리로 — Union-Find로 묶고 옮기기
Direct Play 사진퍼즐이 정답 옆에 놓인 조각을 하나의 그룹으로 묶어 함께 옮기는 방법을 설명합니다. Union-Find로 그룹을 찾고, 옮길 자리를 만들어 주는 이동 규칙, 세 단계 힌트, 멀티터치에서 보드가 잠기던 버그의 원인을 코드로 정리합니다.
-
숫자합 퍼즐: 판을 거꾸로 만들면 시작하자마자 막히지 않는다
Direct Play 숫자합 퍼즐이 합이 목표인 조합을 먼저 만들고 판을 채우는 방식, 부분집합 합 DP로 종료를 판정하고 힌트를 찾는 방법, 그리고 완벽한 클리어가 보장되지 않는 이유를 코드로 설명합니다.
-
브라우저에서 목소리 음정 읽기 — Vocal Check의 YIN 피치 검출
마이크 소리에서 음이름과 센트를 계산하는 과정을 Vocal Check의 실제 코드로 설명합니다. YIN 차이 함수, 누적 평균 정규화, 포물선 보간, 중앙값 필터까지.