BOB CHEN

POST  ·  2026-07-09

KANA
DRILL

PLAY ▶ KANA
LOG FILE / SAVE 001

五十音还没背熟,练习页倒是先做好了

想练五十音,我先去找了一圈工具。有的非要装 app,有的广告比假名还多,还有的得点完三层菜单才看得到题。我只想记几个字,不想先熟悉一套产品。

后来看到一个「打开就能练」的网页,这思路就很对。干脆在自己站上也放一个。AI 先撸,我负责不断挑毛病,一来二去就有了现在这版。

地址:bobchen.net/kana.html。打开就是题目,输罗马音,回车判定。不用登录,也没往里面塞广告。页面打开后不会先弹一屏教程。

功能没按教程网站的模板凑,都是我自己练的时候会用到的。

平假名、片假名和混合模式可以直接切。行也能自己勾,今天只想练さ行和た行,就别让其他字进来混。浊音、半浊音和拗音都有单独开关,易错题里则专门放 し/ち/つじ/ぢず/づ 这些看久了就开始互相伪装的家伙。

想练词就切到「词」模式。N5 到 N1、日常词和短句现在一共有 337 条,看着假名输罗马音。这不是考试,就是给还没背熟的人慢慢磨。

手机上不想打字,假名模式还能改成四选一。真要打字时,键盘弹出来会把题目和输入框收紧到同一屏,不用边做题边上下找框。

答对有 8-bit 的「叮」,答错有「咚」。音效是代码合成的,没有音频文件。

输入不较真流派。し 答 shi 或 si 都算对,ち 答 chi 或 ti 也行,つ 是 tsu 或 tu。练的是记没记住,不是考输入法。

错的字会记仇。答错的假名和单词会提高出题权重,2 到 4 题之内还会强制回来一次。答对一次,它才少记一点仇。计分、错题和勾选过的范围都存在浏览器里,关掉再开也跑不了。

页面还是全站这套红白机的样子。没引框架,也没数据库,几个静态文件就能跑。

真想自己跑一份

最小结构就是 kana.html + kana-practice.js + style.css。本地临时看一眼,python3 -m http.server 8000 就够。想让它常驻,又不想在宿主机上装一堆 Web Server,可以丢给 Nginx 容器。compose.yml 放在站点根目录:

compose.ymlYAML
services:
  kana:
    image: nginx:alpine
    container_name: kana-static
    ports:
      - "8080:80"
    volumes:
      - ./:/usr/share/nginx/html:ro
    restart: unless-stopped

启动后直接验收 kana.html

启动静态站并检查响应SHELL
docker compose config
docker compose up -d
curl -I http://127.0.0.1:8080/kana.html

错题「记仇」也没有神秘模型。每错一次就把抽题权重往上加,最高 9;然后再往复习队列里塞一份,让它在 2 到 4 题后强制回来:

加权抽题和复习队列JS
const weight = 1 + Math.min(misses * 2, 8);
const due = questionCount + 2 + Math.floor(Math.random() * 3);
reviewQueue.push({ item: current.item, due });

计分、错题和筛选项用 localStorage 存在浏览器里。这个页面没有账号系统,所以数据也不会自动跑到另一台设备上。清浏览器数据之前,别把这点记忆当成云备份。

页面现在每天都能打开。至于我每天会不会打开,暂时别问。

02

COMMENTS 留言

PLAYER MESSAGES 留言

READING MEMORY CARD…