# πŸ“‹ Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: study.qpid.pro (Backlog & Execution Queue) Бписок Π·Π°Π΄Π°Ρ‡ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² **Ponytail** (максимальная Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ срСдства ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, zero-dependency, высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ). --- ## πŸš€ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½) ### 1. πŸ“‘ ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Markdown (.md) Π² Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ - [x] **Π‘Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° (Fenced Code Blocks ```` ```language ````)**: - Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ `
`.
  - ΠœΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ (`JetBrains Mono`, `Consolas`), сохранСниС отступов ΠΈ табуляции (`white-space: pre`).
  - Вёмная ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΠ°, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ скролл ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ красной строки (`text-indent: 0`).
  - Кнопка Β«ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Β» Π² шапкС Π±Π»ΠΎΠΊΠ°.
  - ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ создания ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… словарных спанов `` для ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ синтаксис Π½Π΅ Π»ΠΎΠΌΠ°Π» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
- [x] **Инлайн-код (`` `variable` ``)**:
  - ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚Π΅Π³ `` с Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊ-стилСм.
- [x] **Бписки ΠΈ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹**:
  - ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… (`- `, `* `) ΠΈ Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… (`1. `) списков Π² `
  • ` / `
    1. `. - ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΡ‚Π°Ρ‚ (`> `) Π² `
      ` с Π°ΠΊΡ†Π΅Π½Ρ‚Π½ΠΎΠΉ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ. - **Π‘Π»ΠΎΠ²Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ списков ΠΈ Ρ†ΠΈΡ‚Π°Ρ‚ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ** (ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!). - [x] **Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Markdown (`##`, `###`)**: - ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ Π² `

      `, `

      ` с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ сырых Ρ€Π΅ΡˆΡ‘Ρ‚ΠΎΠΊ `#`. - [x] **Π’Π°Π±Π»ΠΈΡ†Ρ‹ Markdown (`| col | col |`)**: - АдаптивныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ, стилизациСй Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ``, Π·Π΅Π±Ρ€Π°-подсвСткой строк ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ скроллом Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…. - КаТдая ячСйка ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ слова для изучСния ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½-ΠΊΠΎΠ΄. - [x] **HTML-Π±Π»ΠΎΠΊΠΈ ΠΈ Ρ‚Π΅Π³ΠΈ Π² Markdown (`

      `, `

      `, ``, ``, ``, `
      `)**: - Нативный парсинг Ρ‡Π΅Ρ€Π΅Π· встроСнный `DOMParser` Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. - УстранСна ΡƒΡ‚Π΅Ρ‡ΠΊΠ° сырых Ρ‚Π΅Π³ΠΎΠ² (``, ``, `

      `) Π² словарныС слова. - [x] **Бсылки ΠΈ изобраТСния (`[text](url)`, `![alt](url)`, ``)**: - ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Π΅ΠΉΠ΄ΠΆΠ΅ΠΉ shields.io, Ρ‚Ρ€Π΅Π½Π΄-Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. - АвтоматичСскоС скрытиС Π±ΠΈΡ‚Ρ‹Ρ…/ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ (`assets/...`) Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onerror`. - [x] **Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρƒ курсора/слова (Popup Positioning)**: - Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ Π±Π°Π³ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ смСщСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚: ΡƒΠ±Ρ€Π°Π½ `window.scrollY` ΠΏΡ€ΠΈ `position: fixed`. - Окно пСрСнСсСно Π² ΠΊΠΎΡ€Π΅Π½ΡŒ `` для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ искаТСний контСкста позиционирования. - ПлавноС отслСТиваниС скролла Ρ‡Π΅Ρ€Π΅Π· `requestAnimationFrame` с Π°Π²Ρ‚ΠΎΠ·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ ΡƒΡ…ΠΎΠ΄Π΅ слова Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΠΏΠΊΡƒΡŽ ΡˆΠ°ΠΏΠΊΡƒ. - [x] **Бтилизация Π² CSS ([`app/static/css/style.css`](file:///home/ai-projects/services/study.qpid.pro/app/static/css/style.css))**: - Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ стили для `.reader-content-body pre`, `code`, `blockquote`, `ul`, `ol`, `.reader-table`, `.reader-heading`, `.reader-link`, `.reader-img`. --- ### 2. πŸ—œοΈ Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ статичСского Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° (`GZipMiddleware`) - [x] ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ `GZipMiddleware(minimum_size=1000)` Π² [`app/main.py`](file:///home/ai-projects/services/study.qpid.pro/app/main.py). - [x] Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² `app.js` (111.8 ΠšΠ‘ -> 21.5 ΠšΠ‘), `index.html` (55.2 ΠšΠ‘ -> 10.3 ΠšΠ‘) ΠΈ `style.css` (58.2 ΠšΠ‘ -> 9.4 ΠšΠ‘) Π½Π° 81.7% (суммарно с 225.2 ΠšΠ‘ Π΄ΠΎ 41.2 ΠšΠ‘). - [x] ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ `Content-Encoding: gzip` Π² ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ рСгрСссионный тСст Π² `tests/test_api.py`. --- ### 3. πŸ›‘οΈ ДСдупликация слов ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ добавлСния (Reader + API) - [x] **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π½Π° бэкСндС (`POST /api/cards`)**: - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° слова Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра `lower(trim(term))`. - ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½Π΅ создаётся Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚, Π° дополняСтся контСкстноС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Ρ‚Π΅Π³ΠΈ, возвращаСтся `already_exists: True`. - [x] **Π˜Π½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡ Π² Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ поиска**: - Π’ Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ΅ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° слово ΠΈ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ поиска выводится Π±Π΅ΠΉΠ΄ΠΆ `⭐ Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅`. - Кнопка Β«+ Π’ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒΒ» замСняСтся Π½Π° Π±Π΅ΠΉΠ΄ΠΆ `⭐ Π‘Π»ΠΎΠ²ΠΎ ΡƒΠΆΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅` с ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ `+ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эту Ρ†ΠΈΡ‚Π°Ρ‚Ρƒ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅`. - [x] **ИндСкс цСлостности Π² SQLite**: - Π‘ΠΎΠ·Π΄Π°Π½ `UNIQUE INDEX idx_vocab_user_term_nocase ON vocabulary_cards(user_id, term COLLATE NOCASE);` Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ отсутствиС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π²ΠΈΠΆΠΊΠ° Π‘Π” Π·Π° $O(\log N)$. - [x] **БлияниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π² Π±Π°Π·Π΅**: - ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ `admired` (ID 5 ΠΈ ID 7) ΠΈ `suddenly`/`Suddenly` (ID 2 ΠΈ ID 9) с объСдинСниСм контСкстных ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, слияниСм Ρ‚Π΅Π³ΠΎΠ² ΠΈ сохранСниСм прогрСсса SRS. --- ### 4. πŸ”Œ ΠŸΡƒΠ» соСдинСний HTTP (`httpx.AsyncClient` с Keep-Alive) - [ ] Π’ [`app/dictionary.py`](file:///home/ai-projects/services/study.qpid.pro/app/dictionary.py) ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ синглтон-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ `get_http_client()` с ΠΏΡƒΠ»ΠΎΠΌ соСдинСний: ```python limits = httpx.Limits(max_keepalive_connections=10, max_connections=20) ``` - [ ] Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ `async with httpx.AsyncClient()` Π² парсСрах Π½Π° ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. - [ ] Π£ΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ 5 ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… TCP/TLS Ρ…ΡΠ½Π΄ΡˆΠ΅ΠΉΠΊΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово, сократив ΠΏΠΈΠ½Π³ Π²Π½Π΅ΡˆΠ½ΠΈΡ… запросов Π½Π° 300–600 мс. --- ### 5. πŸ—„οΈ Вюнинг SQLite PRAGMA ΠΈ составных индСксов - [ ] Π’ [`app/database.py`](file:///home/ai-projects/services/study.qpid.pro/app/database.py): - ВынСсти `PRAGMA journal_mode=WAL;` Π² `init_db()` (ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запросС). - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ памяти Linux: ```python conn.execute("PRAGMA synchronous = NORMAL;") conn.execute("PRAGMA mmap_size = 268435456;") # 256MB mmap conn.execute("PRAGMA cache_size = -32000;") # 32MB cache ``` - [ ] ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Zero-copy Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ страниц Π‘Π” ядром Linux. --- ### 6. βœ‚οΈ Π”Π΅-Π±Π»ΠΎΠ°Ρ‚ΠΈΠ½Π³ Π²Π½Π΅ΡˆΠ½ΠΈΡ… парсСров (YAGNI) - [ ] Π£Π΄Π°Π»ΠΈΡ‚ΡŒ лишний сСтСвой опрос Datamuse (`fetch_datamuse`) β€” ΠΎΠ½ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ опрСдСлСния ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹ΠΌΠΈ Ρ€ΠΈΡ„ΠΌΠ°ΠΌΠΈ. - [ ] Π£ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΉ regex-парсинг Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Wikitext, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ REST JSON эндпоинты. --- ### 7. πŸ“š Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ„Ρ„Π»Π°ΠΉΠ½-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (99%+ покрытия со словоформами, SQLite 10–20 ΠœΠ‘) - [ ] Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² SQLite Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ: ```sql CREATE TABLE IF NOT EXISTS offline_dictionary ( term TEXT PRIMARY KEY COLLATE NOCASE, translation TEXT NOT NULL, phonetic TEXT DEFAULT '', pos TEXT DEFAULT '' ); CREATE INDEX IF NOT EXISTS idx_offline_dict_term ON offline_dictionary(term COLLATE NOCASE); ``` - [ ] Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π½Π° 120 000–180 000 статСй (~10–20 ΠœΠ‘ Π² SQLite, сТатый Π°Ρ€Ρ…ΠΈΠ² ~3.5–5 ΠœΠ‘): - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС словоформы (past tense, irregular verbs, plurals, participles). - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π·ΠΎΠ²Ρ‹Π΅ Π³Π»Π°Π³ΠΎΠ»Ρ‹, соврСмСнный слСнг ΠΈ IT/Tech Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ. - [ ] Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ **Zero Daemon**: Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ SQLite с `PRAGMA mmap_size` (Π±Π΅Π· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Redis, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ < 0.1 мс прямо ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти процСсса). - [ ] Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ словарного поиска: 1. Π‘Π½Π°Ρ‡Π°Π»Π° запрос Π² `offline_dictionary` $\rightarrow$ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π·Π° 0.1 мс. 2. Волько ΠΏΡ€ΠΈ отсутствии слова Π² Π±Π°Π·Π΅ $\rightarrow$ fallback-запрос Π²ΠΎ внСшнюю ΡΠ΅Ρ‚ΡŒ. - [ ] ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ исчСрпаниС Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… API (MyMemory 100 req/day). --- ### 8. 🧩 ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ES-модулях (Π±Π΅Π· Webpack/Vite) - [ ] ΠŸΠ΅Ρ€Π΅Π²Π΅ΡΡ‚ΠΈ [`app/static/js/app.js`](file:///home/ai-projects/services/study.qpid.pro/app/static/js/app.js) Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹ΠΉ синтаксис `