ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Static HTML/CSS/JS site for generating:
The app reads question files from questions/v1 and runs without a backend, so it works on GitHub Pages and local static hosting.
validatedBy = human)Use a local static server for normal hosted-like behavior.
python3 -m http.server 8000
Then open http://localhost:8000.
Open index.html with Live Server.
This project now supports opening index.html directly from file:// by using a generated JS data bundle.
node scripts/build-local-bundle.mjs
index.html directly in your browser.The app will use questions/v1/local-data.bundle.js automatically when present, and use fetch-based JSON loading when hosted or served.
No build step is required.
questions/v1/manifest.jsonquestions/v1/by-chapter/<book-id>/<chapter>.jsonquestions/v1/years.jsonquestions/v1/practice-books.json, practice-chapters-by-year.jsonIf years.json has no scope for a year, that year defaults to all books and chapters in the manifest.
{
"schema": "pbe.year.scope.v1",
"version": 1,
"years": [
{
"id": "2026-current",
"name": "2026-2027",
"scope": {
"41-mark": [1, 2, 3],
"60-1-peter": [1, 2, 3, 4, 5]
}
}
]
}
scope is optional. If omitted, all manifest chapters are included for that year.
All verses as the default.All, Clear, and Range (start + end + Apply).Fill in the Blank questions are generated from the verses themselves, so every verse in your scope can
become a question. The blanked words are the most meaningful ones (names, nouns, verbs) chosen with the
compromise NLP library plus TF-IDF scoring, ported from the PBE Study Tool.
Verse text is downloaded from bolls.life when a chapter is first needed and cached in IndexedDB, so repeat visits are instant and work offline for chapters you've already used.
Each blank is a text box in the verse; Tab or Enter moves between them and Enter on the last one submits.
Tap a blank to type in it, then tap its ? once for the first letter and length and again for the whole word.
A blank given away by a hint counts as incorrect in the default score (you can still
adjust the points on the answer page), and the answer page notes how many hints were used. Using a hint on every
blank submits the question automatically.
Spelling slips are forgiven: answers are compared with Double Metaphone (sounds alike) and Jaro-Winkler (close
spelling), vendored in assets/vendor/spelling.js (rebuild with npm run build:vendor-spelling; licenses in
licenses/spelling/). Words that sound alike but are a different answer (Jude/Judah) or appear elsewhere in the
question, verse or quiz are not forgiven. Right and wrong answers differ by weight, underline and strike-through as well
as color, so they read without telling red from green.
Typed answers earn partial credit by their key words (names, nouns, verbs, numbers; small words like "why are you so"
earn nothing), judged in assets/js/answer-grader.js with the NLP library's word types, a stemmer (make/making) and the
spelling check above. A multi-point answer is split into one part per point where it can be ("...fearful? ...faith?"), and
a part needs about two thirds of its key words. The points are only a starting point: the answer card still lets you change them.
In the interactive quiz the answer timer waits for the question to be read, as in PBE: it starts when the estimated
reading time is up or as soon as you tap an answer box, whichever comes first (assets/js/reading-time.js). Reading speed
was checked against the 2026 NAD testing broadcast: English is read at 1.93 words/s (off by about 1.2 s on average), and
NAD's English-and-Spanish lead-in runs at 0.83 words/s. State testing (Florida and Custom) is English only, so its lead-in is half
of NAD's; NAD and Nearpod use the full one. The fixture of counts and seconds is in tests/fixtures/.
Finishing a quiz celebrates with confetti (not shown if your system asks for reduced motion) and offers
Practice again with new blanks: the same verses with different words blanked.
Each person keeps their own year, scope, verses, filters and fill-in-the-blank settings. Drag a person (or use the arrow buttons) to reorder; names, order and settings save as you change them. Tick Print to include someone in the printed quiz.
The study tool links here with its presets in the URL (#import=...). The quiz builder asks before adding
them as people set up for fill in the blank practice (same chapters, verses and blank counts).
npm install
npm test
npm run test:coverage
The PowerPoint and interactive timers offer Florida (10 s first point, 5 s each additional), NAD and a custom setting.
The NAD competition runs on Nearpod, which times in 15-second steps. Measured from the 2025 and 2026 broadcasts (98
questions), 1-2 points ran 30 s, 3-5 points 45 s and 6-7 points 60 s, so NAD is 30 s plus 5 s per extra point, rounded to the
nearest step (86% of the questions; the earlier 30 s plus 10 s, rounded mostly up, matched 59%). The counts behind this are
in tests/fixtures/nad-nearpod-steps.json. A timer choice saved as "Nearpod" now loads as NAD.
The interactive timer also waits for the question to be read (see above): Florida and Custom wait the English reading time, NAD waits
twice as long (English then Spanish), and Custom lets you pick either.
difficulty field in each question (easy, medium, or hard) and can include any combination of those values.assets/vendor/jszip.min.js, loaded when you download a deck, so CDN access is not required. (assets/vendor/pptxgen.min.js is still vendored but nothing loads it.)2023-NAD-PBE-Practice-Test.pptx) is used as style direction, not binary template injection.manifest.json references a missing chapter file, bundling skips that chapter and logs it.THIRD_PARTY_NOTICES.mdlicenses/Everything derived from questions/v1/by-chapter/** is generated, not hand-edited:
manifest.json: books, chapters, verse/question counts and a content hash per chapterpacks/<season>.<hash>.json and packs/index.json: one pack per season with all of its chapterspractice-years.bundle.js, practice-books.bundle.js: script-tag copies of the practice JSON filesSeasons are defined in practice-chapters-by-year.json (upcoming seasons through 2035-2036 are already listed).
To add questions or a season, edit the source files and push to main: the
Build question data GitHub Action regenerates and commits the rest. To do it locally run
npm run build:data; npm run check:data fails when generated files are stale (the test suite checks this too).
Questions load one season at a time from questions/v1/packs/ and are cached in IndexedDB, so the first
load stays the same size as the question bank grows. See docs/PERFORMANCE.md for the design,
how to measure it (npm run bench) and the before/after numbers.
sw.js (the service worker) and the packs are generated by npm run build:data; the service worker only registers over https, or with ?sw=1 when testing.
To open index.html straight from disk, run node scripts/build-local-bundle.mjs first; the app falls back to those bundles when fetch is blocked.