docs(plan): update roadmap with security layer (auth, sessions, rate-limit) and general english scope
This commit is contained in:
+45
-51
@@ -1,76 +1,70 @@
|
|||||||
# Методология и педагогическая концепция проекта
|
# Методология и педагогическая концепция проекта
|
||||||
|
|
||||||
> **Цель**: Быстро, качественно и без стресса вывести чтение и понимание технической англоязычной литературы (RFC, вендорная документация Cisco/Juniper, Linux networking, сетевые протоколы) на уровень свободного владения.
|
> **Цель**: Быстро, качественно и без стресса освоить живой английский язык (словарный запас, фразовые глаголы, идиомы, устойчивые обороты) и сформировать крепкий фундамент, на который впоследствии легко ляжет любая специализированная литература.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. В чём главная проблема традиционного подхода?
|
## 1. В чём главная проблема традиционного изучения слов?
|
||||||
|
|
||||||
Студенты и инженеры, читая техническую документацию, регулярно сталкиваются с двумя ловушками:
|
Студенты, пытаясь расширить словарный запас при чтении или просмотре контента, регулярно сталкиваются с типичными барьерами:
|
||||||
|
|
||||||
1. **Разрыв фокуса (Context Switching Friction)**:
|
1. **Разрыв фокуса (Context Switching Friction)**:
|
||||||
Встретив незнакомое слово (*deprecate*, *overhead*, *stale*, *propagate*), инженер переключается в переводчик, читает перевод, возвращается к тексту. Теряется мысль статьи, процесс чтения превращается в мучение.
|
Встретив незнакомое слово или идиому (*inevitable*, *figure out*, *out of the blue*, *reluctant*), человек переключается в переводчик, читает перевод, возвращается к тексту. Мысль потеряна, чтение превращается в мучение.
|
||||||
2. **«Кладбище слов» (Passive Word Graveyard)**:
|
2. **«Кладбище слов» (Passive Word Graveyard)**:
|
||||||
Если слово записывается в блокнот или текстовый файл, оно никогда не повторяется по правильной кривой памяти. Пассивный список из 100 слов бесполезен: через неделю мозг помнит максимум 10–15% из них.
|
Если слово просто выписывается в блокнот или заметки на телефоне, оно никогда не повторяется по научной кривой памяти. Пассивный список из 100 слов бесполезен: через пару недель мозг забывает до 85% записанного.
|
||||||
3. **Изолированный перевод без доменного контекста**:
|
3. **Изолированный перевод vs. Живая речь**:
|
||||||
В сетевых технологиях слова имеют специфические значения:
|
В английском языке изолированное слово часто вводит в заблуждение:
|
||||||
- *Stale* (не «чёрствый», а «устаревший/неактуальный маршрут»);
|
- Фразовые глаголы полностью меняют смысл в связке с предлогами (*give up*, *turn down*, *look forward to*);
|
||||||
- *Drop* (не просто «уронить», а «отбросить пакет»);
|
- Идиомы не переводятся дословно (*hit the nail on the head*, *piece of cake*);
|
||||||
- *Graceful* (не «изящный», а «корректный/штатный останов сервиса без потери данных»);
|
- У каждого слова есть свои «партнёры» (collocations) — нельзя сказать *make a photo*, говорят *take a photo*.
|
||||||
- *Flapping* (не «хлопанье крыльями», а «нестабильное падение и подъем интерфейса/маршрута»).
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Пять золотых правил методики
|
## 2. Пять золотых правил преподавательской методики
|
||||||
|
|
||||||
### Правило 1. Лексический подход и коллокации (The Lexical Approach)
|
### Правило 1. Лексический подход (The Lexical Approach)
|
||||||
*Мозг думает не отдельными словами, а блоками (chunks).*
|
*Мозг думает не отдельными изолированными словами, а речевыми блоками (chunks).*
|
||||||
- Не учите изолированное `overhead` — учите `encapsulation overhead`.
|
- Не учите голое `reluctant` — учите связку `be reluctant to do something` (неохотно делать что-то).
|
||||||
- Не учите изолированное `handshake` — учите `three-way handshake`.
|
- Не учите голое `look` — учите `look forward to hearing from you`.
|
||||||
- Не учите изолированное `bottleneck` — учите `throughput bottleneck`.
|
- Не учите голое `conclusion` — учите `jump to conclusions` (делать поспешные выводы).
|
||||||
В сервисе сохраняется не просто голое слово, а **готовое терминологическое словосочетание**.
|
Сервис проектируется так, чтобы фиксировать как отдельные слова, так и целые **устойчивые обороты**.
|
||||||
|
|
||||||
### Правило 2. Контекстный якорь (Contextual Anchoring)
|
### Правило 2. Контекстный якорь (Contextual Anchoring)
|
||||||
*Память работает через ассоциации.*
|
*Человеческая память держится за сюжет и ассоциации.*
|
||||||
Когда вы сохраняете слово вместе с реальным предложением из статьи или RFC:
|
Когда вы сохраняете слово вместе с реальным предложением:
|
||||||
> *"The router drops the packet due to TTL expiration."*
|
> *"He was reluctant to admit his mistake during the meeting."*
|
||||||
Ваш мозг связывает слово `drop` с конкретным сетевым процессом (TTL, router, packet). При повторении вы мгновенно вспоминаете живую ситуацию, а не абстрактный перевод.
|
Мозг связывает слово `reluctant` с конкретным жизненным образом (митинг, ошибка, признание). При повторении вы мгновенно вспоминаете живую ситуацию, а не сухой перевод из словаря.
|
||||||
|
|
||||||
### Правило 3. Аудиальный и фонетический якорь (Phonetic Anchor)
|
### Правило 3. Аудиальный и фонетический якорь (Phonetic Anchor)
|
||||||
*Нельзя знать слово «только глазами».*
|
*Нельзя знать слово «только глазами».*
|
||||||
Инженеры часто произносят термины неправильно:
|
Если не слышать, как слово звучит, мозг читает его «внутренним голосом» с ошибками. В английском языке орфография исторически не совпадает с произношением (*subtle* -> `/ˈsʌtəl/`, *thorough* -> `/ˈθʌr.ə/`, *receipt* -> `/rɪˈsiːt/`).
|
||||||
- *route* — `/ruːt/` или `/raʊt/`
|
Сервис сразу предоставляет:
|
||||||
- *cache* — `/kæʃ/` (а не «кеш-е»)
|
- **Нативную аудио-озвучку** (диктор US / UK);
|
||||||
- *queue* — `/kjuː/`
|
- **Международную фонетическую транскрипцию IPA**;
|
||||||
- *latency* — `/ˈleɪ.tən.si/`
|
- Понимание на слух исключает ступор при просмотре видео и живом общении.
|
||||||
- *chassis* — `/ˈʃæsi/` (а не «шассис»)
|
|
||||||
- *tuple* — `/ˈtʌpəl/` (а не «тьюпл»)
|
|
||||||
Сервис сразу предоставляет **нативную аудио-озвучку** и **международную транскрипцию IPA**. Это формирует уверенность для общения с зарубежными коллегами и прохождения технических собеседований.
|
|
||||||
|
|
||||||
### Правило 4. Интервальные повторения (SRS / SM-2)
|
### Правило 4. Интервальные повторения (SRS / SM-2)
|
||||||
*Кривая забывания Германа Эббингауза неумолима: за первые 24 часа стирается до 70% новой информации.*
|
*Кривая забывания Германа Эббингауза: за первые 24 часа мозг стирает до 70% новой информации, если не произошло повторения.*
|
||||||
Алгоритм интервальных повторений (SuperMemo SM-2, лежащий в основе Anki) показывает карточку **ровно в тот момент, когда мозг готов её забыть**:
|
Алгоритм интервальных повторений (SuperMemo SM-2, лежащий в основе Anki) напоминает карточку **ровно в тот момент, когда мозг готов её забыть**:
|
||||||
- День 1 (первое знакомство)
|
- День 1 (первое знакомство);
|
||||||
- День 2 (+1 день)
|
- День 2 (+1 день);
|
||||||
- День 5 (+3 дня)
|
- День 5 (+3 дня);
|
||||||
- День 12 (+7 дней)
|
- День 12 (+7 дней);
|
||||||
- День 28 (+16 дней)
|
- День 28 (+16 дней);
|
||||||
- День 65 (+37 дней)
|
- День 65 (+37 дней)...
|
||||||
**Результат**: 5–7 минут повторений в день гарантируют 95%+ долговременного удержания без переутомления и «зубрёжки».
|
**Результат**: 5–7 минут повторений в день гарантируют переход 95%+ слов в долговременную активную память.
|
||||||
|
|
||||||
### Правило 5. Активное припоминание (Active Recall) вместо иллюзии знания
|
### Правило 5. Активное припоминание (Active Recall)
|
||||||
Просто перечитывать список слов — это иллюзия («Да, я вроде это знаю»). Настоящее запоминание происходит только тогда, когда мозгу приходится **напрячься и вспомнить**:
|
Пассивное перечитывание списка слов создаёт иллюзию знания («О, да, я это видел»). Настоящее обучение происходит только тогда, когда память совершает усилие по извлечению:
|
||||||
- **Прямая карточка**: видишь английский термин + слушаешь аудио $\rightarrow$ вспоминаешь значение и контекст.
|
- **Прямая карточка**: видишь английское слово + слышишь аудио $\rightarrow$ вспоминаешь значение и контекст;
|
||||||
- **Обратная карточка**: видишь русский технический смысл $\rightarrow$ формулируешь правильный английский термин.
|
- **Обратная карточка**: видишь русский смысл $\rightarrow$ формулируешь правильное английское выражение;
|
||||||
- **Cloze Deletion (Пропуски)**: *"The router [_____] the packet due to TTL expiration"* $\rightarrow$ подставляешь пропущенное слово.
|
- **Пропуски (Cloze Deletion)**: *"He was [_____] to admit his mistake."* $\rightarrow$ подставляешь нужное слово.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Рекомендации студенту по ежедневной практике
|
## 3. Рекомендации по ежедневным занятиям
|
||||||
|
|
||||||
1. **Не сохраняйте всё подряд**:
|
1. **Оптимальная дозировка**: от 5 до 12 новых качественных карточек в день. Лучше 7 слов каждый день, чем 100 слов раз в месяц.
|
||||||
Сохраняйте только те слова и обороты, которые реально мешают пониманию мысли автора или встречаются вам повторно. Оптимальный темп — от 5 до 15 новых качественных карточек в день.
|
2. **Всегда фиксируйте контекст**: увидели незнакомое слово в тексте — скопируйте всё предложение целиком.
|
||||||
2. **Всегда вставляйте предложение-источник**:
|
3. **Разделяйте тегами**: `#general` (общий), `#phrasal-verb` (фразовые глаголы), `#idiom` (идиомы), `#work` (работа), `#tech` (технический язык).
|
||||||
В поле ввода достаточно скопировать предложение целиком или слово + предложение.
|
4. **Утренний / вечерний спринт (3-5 минут)**: закрывайте карточки дня по алгоритму повторений без пропусков.
|
||||||
3. **Утренний / вечерний спринт (3-5 минут)**:
|
|
||||||
Открывайте сервис с телефона или рабочего компьютера раз в день для прохождения очереди карточек, готовых к повторению по алгоритму SRS.
|
|
||||||
|
|||||||
@@ -1,18 +1,28 @@
|
|||||||
# План развития проекта Notes (notes.qpid.pro)
|
# План развития проекта Notes (notes.qpid.pro)
|
||||||
|
|
||||||
> **Принцип проектирования**: *«Работает как автомат Калашникова»* — сверхнадёжно, мгновенно, без раздутых зависимостей и необходимости постоянного ручного обслуживания.
|
> **Принцип проектирования**: *«Работает как автомат Калашникова»* — сверхнадёжно, мгновенно, защищено для публичного интернета, без раздутых зависимостей и постоянного ручного обслуживания.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Архитектура и стек решений
|
## 1. Архитектура и защита системы
|
||||||
|
|
||||||
|
Сервис разворачивается на публичном сервере с белым IP (`31.77.203.213`). Вся система проектируется с учётом сетевой безопасности и изоляции личных данных.
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
│ notes.qpid.pro │
|
│ notes.qpid.pro │
|
||||||
│ (Nginx Reverse Proxy + Let's Encrypt) │
|
│ Nginx (HTTPS / Let's Encrypt / Security Headers) │
|
||||||
└──────────────────────────────┬──────────────────────────────┘
|
└──────────────────────────────┬──────────────────────────────┘
|
||||||
│ proxy_pass :8002
|
│ proxy_pass :8002
|
||||||
┌──────────────────────────────▼──────────────────────────────┐
|
┌──────────────────────────────▼──────────────────────────────┐
|
||||||
|
│ Слой безопасности (Auth) │
|
||||||
|
│ • Аутентификация: сессионные токены (HTTP-only cookies) │
|
||||||
|
│ • Хэширование паролей: PBKDF2-HMAC-SHA256 (соль + 100k) │
|
||||||
|
│ • Защита от перебора (Rate Limiter: макс 5 попыток/мин) │
|
||||||
|
│ • Закрытый доступ: все эндпоинты требуют авторизации │
|
||||||
|
└──────────────────────────────┬──────────────────────────────┘
|
||||||
|
│
|
||||||
|
┌──────────────────────────────▼──────────────────────────────┐
|
||||||
│ Backend: Python 3.12 │
|
│ Backend: Python 3.12 │
|
||||||
│ FastAPI / Uvicorn + SQLite (WAL mode) + Dictionary APIs │
|
│ FastAPI / Uvicorn + SQLite (WAL mode) + Dictionary APIs │
|
||||||
└──────────────────────────────┬──────────────────────────────┘
|
└──────────────────────────────┬──────────────────────────────┘
|
||||||
@@ -21,104 +31,106 @@
|
|||||||
▼ ▼
|
▼ ▼
|
||||||
┌─────────────────────────────┐ ┌─────────────────────────────┐
|
┌─────────────────────────────┐ ┌─────────────────────────────┐
|
||||||
│ Внешние открытые API │ │ Локальная БД SQLite │
|
│ Внешние открытые API │ │ Локальная БД SQLite │
|
||||||
│ • Free Dictionary API │ │ • vocabulary_cards │
|
│ • Free Dictionary API │ │ • users (аккаунт, пароль) │
|
||||||
│ (IPA, audio, definitions) │ │ • search_history │
|
│ (IPA, audio, definitions) │ │ • vocabulary_cards │
|
||||||
│ • MyMemory / Context Trans. │ │ • srs_reviews (SM-2) │
|
│ • MyMemory / Translation │ │ • sessions (активные входы) │
|
||||||
│ (перевод на русский) │ │ • tags & categories │
|
│ (русский перевод фразы) │ │ • tags & categories │
|
||||||
└─────────────────────────────┘ └─────────────────────────────┘
|
└─────────────────────────────┘ └─────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
### Выбор технологий:
|
### Выбор технологий:
|
||||||
- **Backend**: Python 3.12 + FastAPI (асинхронный, лёгкий, типизированный, мгновенный запуск).
|
- **Безопасность**: Защищённые сессии (Signed HTTP-only cookie `SameSite=Lax`, `Secure`). Защита от CSRF, XSS и брутфорс-атак через встроенный rate limiter.
|
||||||
- **База данных**: SQLite в режиме `WAL` (Write-Ahead Logging). Полная транзакционность, нулевые затраты на администрирование, бэкап копированием одного файла.
|
- **Backend**: Python 3.12 + FastAPI (асинхронный, легковесный, моментальный старт).
|
||||||
- **Frontend**: Vanilla ES6+ / Modern CSS / HTML5. Без тяжелых бандлеров и node_modules. Адаптивный мобильный интерфейс (PWA), оффлайн-кэш на LocalStorage/CacheStorage, поддержка хоткеев.
|
- **База данных**: SQLite в режиме `WAL` (Write-Ahead Logging). Идеальная транзакционная надежность, автономность, бэкап в один файл.
|
||||||
|
- **Frontend**: Чистый Vanilla ES6+ / Modern CSS / HTML5. Мгновенная загрузка (< 50 мс), оффлайн-кэш, адаптивность (смартфон + десктоп), поддержка хоткеев.
|
||||||
- **Внешние API (Zero-cost & Open)**:
|
- **Внешние API (Zero-cost & Open)**:
|
||||||
1. *Free Dictionary API* (`api.dictionaryapi.dev`): официальная фонетическая транскрипция IPA, аудио-файлы нативного произношения (US/UK), английские определения и примеры.
|
1. *Free Dictionary API* (`api.dictionaryapi.dev`): фонетическая транскрипция IPA, аудио-произношение нативных дикторов (US/UK), части речи, толкования и примеры.
|
||||||
2. *MyMemory Translated API*: качественный перевод фраз и предложений на русский язык.
|
2. *MyMemory Translation API*: литературный перевод фраз, идиом и предложений на русский язык.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Этапы реализации (Roadmap)
|
## 2. Этапы реализации (Roadmap)
|
||||||
|
|
||||||
### Этап 1: Ядро системы (MVP) — Быстрый поиск, перевод и фиксация
|
### Этап 1 (Текущая итерация): Безопасное ядро (MVP) — Общий английский, перевод и фиксация
|
||||||
*Цель: закрыть боль переключения контекста при чтении документации.*
|
*Цель: создать защищённый, сверхбыстрый и надёжный персональный словарь для повседневного и профессионального английского языка.*
|
||||||
|
|
||||||
- [ ] **1.1. Базовый интерфейс ввода**:
|
- [ ] **1.1. Модуль защиты и авторизации**:
|
||||||
- Строка поиска в фокусе при открытии страницы.
|
- Страница авторизации (минималистичный дизайн, вход по логину и паролю).
|
||||||
|
- Защита всех API эндпоинтов: неавторизованные запросы блокируются (`401 Unauthorized`).
|
||||||
|
- Надежное хранение паролей в SQLite (`PBKDF2-HMAC-SHA256` с уникальной солью).
|
||||||
|
- Rate Limiter на эндпоинт `/api/login` (не более 5 неудачных попыток в минуту с IP).
|
||||||
|
- Сессии через зашифрованные `HttpOnly` cookie.
|
||||||
|
- Кнопка «Выйти из аккаунта» в шапке сервиса.
|
||||||
|
- [ ] **1.2. Быстрый поиск и каскадный перевод (General & Idiomatic English)**:
|
||||||
|
- Строка поиска в фокусе сразу при открытии страницы.
|
||||||
|
- Поддержка любых форм языка:
|
||||||
|
- Отдельные слова (существительные, глаголы, прилагательные);
|
||||||
|
- Фразовые глаголы (*run into*, *figure out*, *call off*);
|
||||||
|
- Идиомы и разговорные фразы (*once in a blue moon*, *take for granted*);
|
||||||
|
- Предложения целиком (из книг, сериалов, документации).
|
||||||
|
- Автоматическое получение:
|
||||||
|
- Фонетической транскрипции (IPA);
|
||||||
|
- Нативного аудио-произношения (US/UK);
|
||||||
|
- Частей речи и толкования на английском;
|
||||||
|
- Русского перевода.
|
||||||
|
- Кэширование словарных запросов в локальной базе для мгновенных повторных ответов.
|
||||||
|
- [ ] **1.3. Контекстное сохранение слова в 1 клик**:
|
||||||
- Горячие клавиши:
|
- Горячие клавиши:
|
||||||
- `Enter` — мгновенный перевод.
|
- `Enter` — мгновенный перевод;
|
||||||
- `Ctrl + Enter` (или `Cmd + Enter`) — сохранить карточку.
|
- `Ctrl + Enter` (или `Cmd + Enter`) — мгновенное сохранение в словарь;
|
||||||
- `Esc` — очистить поле ввода.
|
- `Esc` — очистить ввод;
|
||||||
- `Ctrl + P` (или пробел на карточке) — воспроизвести аудио-произношение.
|
- `Ctrl + P` или клик на динамик — прослушать произношение.
|
||||||
- [ ] **1.2. Каскадный переводчик (Backend API)**:
|
- Возможность подправить перевод перед сохранением под свой контекст.
|
||||||
- Автоопределение ввода: отдельное слово или предложение/фраза.
|
- Поле для ввода контекстного предложения (где встретилось слово/выражение).
|
||||||
- Запрос словарных данных (транскрипция, аудио mp3, толкование, русский перевод).
|
- Выбор/ввод тегов (`#general`, `#phrasal-verb`, `#idiom`, `#daily`, `#networking`).
|
||||||
- Кэширование запросов в локальной SQLite для мгновенного повторного показа.
|
- [ ] **1.4. Журнал личного словаря (History & Words List)**:
|
||||||
- [ ] **1.3. Контекстное сохранение**:
|
- Хронологическая лента всех сохраненных слов с датой и временем.
|
||||||
- Поле для ввода контекстного предложения (откуда взято слово).
|
- Живой поиск по английским словам, русскому переводу и контексту.
|
||||||
- Быстрый выбор тега (по умолчанию `#networking`, `#general`, `#protocol`).
|
- Фильтр по тегам в один клик.
|
||||||
- Возможность подправить перевод перед сохранением.
|
- Воспроизведение аудио прямо из списка.
|
||||||
- [ ] **1.4. Журнал истории и база слов**:
|
- Удаление / редактирование карточек.
|
||||||
- Хронологическая лента сохраненных слов с датой и временем.
|
- [ ] **1.5. Инфраструктурное развертывание**:
|
||||||
- Поиск и фильтрация по сохранённым словам.
|
- Конфигурация Nginx для `notes.qpid.pro` с proxy на бэкенд (`127.0.0.1:8002`).
|
||||||
- Мгновенное удаление / редактирование.
|
- Systemd-сервис для автозапуска и перезапуска при сбоях.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Этап 2: Организация, теги и экспорт
|
### Этап 2: Организация, теги, экспорт и PWA
|
||||||
*Цель: структурирование профессионального глоссария инженера.*
|
*Цель: гибкое управление растущим словарным запасом и удобство на мобильных.*
|
||||||
|
|
||||||
- [ ] **2.1. Система тегов и коллекций**:
|
- [ ] **2.1. Расширенная организация**:
|
||||||
- Тегирование по направлениям: `#routing`, `#switching`, `#security`, `#bgp`, `#linux-kernel`, `#troubleshooting`.
|
- Коллекции и папки (например, «Разговорный», «Работа», «Книги/Сериалы», «Сети/IT»).
|
||||||
- Фильтрация в один клик.
|
- Быстрое массовое тегирование.
|
||||||
- [ ] **2.2. Экспорт данных**:
|
- [ ] **2.2. Экспорт данных**:
|
||||||
- Экспорт в CSV / Markdown.
|
- Экспорт базы в CSV / JSON / Markdown.
|
||||||
- Экспорт готовой колоды для Anki (`.csv` / `.apkg`) с аудио и контекстом.
|
- Экспорт в колоду Anki (`.apkg` / `.csv`) с аудио и контекстными предложениями.
|
||||||
- Резервное копирование базы данных в 1 клик.
|
- Резервное копирование SQLite в один клик.
|
||||||
- [ ] **2.3. PWA (Progressive Web App)**:
|
- [ ] **2.3. PWA (Progressive Web App)**:
|
||||||
- Возможность установки на смартфон / десктоп как самостоятельное приложение.
|
- Установка на экран смартфона (iOS / Android) как нативное приложение.
|
||||||
- Работа со списком слов в режиме оффлайн.
|
- Оффлайн-доступ к сохранённым словам.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Этап 3: Встроенный тренажер интервальных повторений (SRS / SM-2)
|
### Этап 3: Встроенный тренажер интервальных повторений (SRS / SM-2)
|
||||||
*Цель: гарантированное запоминание без необходимости устанавливать сторонние программы.*
|
*Цель: перевод слов из пассивного словаря в активную долговременную память.*
|
||||||
|
|
||||||
- [ ] **3.1. Движок алгоритма SuperMemo-2 (SM-2)**:
|
- [ ] **3.1. Движок SuperMemo-2 (SM-2)**:
|
||||||
- Расчет фактора легкости (Ease Factor, $EF$).
|
- Расчет интервалов забывания Эббингауза: `Again`, `Hard`, `Good`, `Easy`.
|
||||||
- Очередь повторений на сегодня: карточки со статусом `Due`.
|
- Очередь на сегодня: карточки, готовые к повторению.
|
||||||
- 4 кнопки оценки:
|
- [ ] **3.2. Режим Flashcards**:
|
||||||
- `Again` (< 10 минут)
|
- Карточка En $\rightarrow$ Ru и Ru $\rightarrow$ En с озвучкой.
|
||||||
- `Hard` (+12 часов)
|
- [ ] **3.3. Режим Cloze Deletion (Пропуски)**:
|
||||||
- `Good` (+1 день $\rightarrow$ +3 дня $\rightarrow$ +7 дней...)
|
- Заполнение пропущенного слова прямо в живом предложении.
|
||||||
- `Easy` (+4 дня $\rightarrow$ геометрическая прогрессия)
|
- [ ] **3.4. Аудио-тренажёр (Dictation)**:
|
||||||
- [ ] **3.2. Режим карточек (Flashcards)**:
|
- Слушаем слово $\rightarrow$ печатаем правильный спеллинг.
|
||||||
- Лицевая сторона: английский термин + аудио.
|
|
||||||
- Оборотная сторона: русский перевод + контекстное предложение + определение.
|
|
||||||
- [ ] **3.3. Режим Cloze Deletion (Вставка пропущенного слова)**:
|
|
||||||
- Мозг тренируется вспоминать термин прямо в техническом предложении:
|
|
||||||
> *"The switch [ ... ] the packet if the VLAN tag is invalid."*
|
|
||||||
- [ ] **3.4. Аудио-диктант (Active Spelling)**:
|
|
||||||
- Сервис проигрывает произношение термина, пользователь печатает его на слух.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Этап 4: Профессиональный инструментарий сетевого инженера
|
### Этап 4: Интеллектуальный помощник и аналитика
|
||||||
*Цель: превратить сервис в персонального ментора по сетевому английскому.*
|
*Цель: отслеживание динамики и поддержка мотивации.*
|
||||||
|
|
||||||
- [ ] **4.1. Встроенный сетевой глоссарий и акронимы**:
|
- [ ] **4.1. Статистика и Daily Streak**:
|
||||||
- База популярных сетевых акронимов и аббревиатур (MTU, MSS, BFD, ECMP, CIDR, STP, SYN/ACK) с расшифровкой и техническим смыслом.
|
- Учёт непрерывных дней занятий.
|
||||||
- [ ] **4.2. Статистика и аналитика прогресса**:
|
- График роста активного словарного запаса по уровням (A1-C1).
|
||||||
- Счётчик дней непрерывного обучения (Daily Streak).
|
- [ ] **4.2. Быстрый захват из браузера**:
|
||||||
- График объёма активного словарного запаса.
|
- Букмарклет для выделения текста на любой странице и отправки в словарь.
|
||||||
- Коэффициент удержания памяти (% успешно вспомненных слов).
|
|
||||||
- [ ] **4.3. Быстрый захват из браузера**:
|
|
||||||
- Букмарклет (Bookmarklet) для выделения слова на любой веб-странице документации и мгновенной отправки в `notes.qpid.pro`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Критерии качества («Автомат Калашникова»)
|
|
||||||
1. **Скорость**: Открытие страницы $< 100$ мс, поиск $< 300$ мс.
|
|
||||||
2. **Отказоустойчивость**: Если внешний API словаря недоступен, сервис предлагает ручной ввод без блокировки интерфейса.
|
|
||||||
3. **Безопасность данных**: Данные хранятся в надежной локальной SQLite, регулярный автоматический snapshot базы.
|
|
||||||
4. **Удобство**: Управление полностью доступно с клавиатуры (без необходимости тянуться к мыши).
|
|
||||||
|
|||||||
@@ -1,57 +1,44 @@
|
|||||||
# Notes (notes.qpid.pro)
|
# Notes (notes.qpid.pro)
|
||||||
|
|
||||||
> **Персональный тренажёр и словарь технического английского языка для сетевого инженера.**
|
> **Защищённый персональный тренажёр и словарь английского языка.**
|
||||||
> Создан для быстрого снятия языкового барьера при чтении RFC, документации Cisco/Juniper, Linux networking и технических статей.
|
> Создан для быстрого и надёжного расширения словарного запаса (общий английский, фразовые глаголы, идиомы, профессиональные термины) без отвлечения от чтения и просмотра контента.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🎯 Миссия проекта
|
## 🎯 Концепция и методика
|
||||||
При чтении технической документации постоянные переключения на переводчик выбивают из мысли, а ручная запись слов в блокнот превращается в «кладбище информации».
|
Чтение статей, книг или просмотр видео на английском часто тормозится незнакомыми словами и выражениями. Обычный переводчик даёт мгновенный ответ, но слово сразу забывается. Ручные списки превращаются в «кладбище информации».
|
||||||
|
|
||||||
Проект решает эту проблему по принципу **«автомата Калашникова»**:
|
Проект решает эту проблему по принципу **«автомата Калашникова»**:
|
||||||
1. **Мгновенный поиск и перевод** без отвлечения от чтения.
|
1. **Безопасность**: сервис работает на белом IP, защищён авторизацией (сессии, хэширование паролей, защита от брутфорса).
|
||||||
2. **Контекстный якорь**: сохранение слова вместе с живым предложением из документации.
|
2. **Мгновенный поиск и перевод**: фокус на строке ввода, каскадный перевод (словарная статья + толкование + русский перевод).
|
||||||
3. **Фонетическое закрепление**: нативное произношение (US/UK) и транскрипция IPA, чтобы говорить на митингах уверенно.
|
3. **Контекстный якорь**: сохранение слова вместе с живым предложением (где встретилось выражение).
|
||||||
4. **Интервальные повторения (SRS / SM-2)**: умная система карточек (как в Anki), напоминая слова ровно тогда, когда мозг готов их забыть.
|
4. **Фонетическое закрепление**: нативное аудио-произношение (US/UK) и транскрипция IPA.
|
||||||
|
5. **Интервальные повторения (SRS / SM-2)**: встроенные карточки для перевода слов в долговременную память.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📂 Документация проекта
|
## 📂 Документация проекта
|
||||||
|
|
||||||
- 📋 [**План функционала и архитектура (PLAN.md)**](file:///home/kopri/notes.qpid.pro/PLAN.md) — детальный роадмап от базового MVP до умных тренажёров памяти.
|
- 📋 [**План функционала и архитектура (PLAN.md)**](file:///home/kopri/notes.qpid.pro/PLAN.md) — детальный план итераций: от защищённого MVP до умных интервальных тренажёров.
|
||||||
- 🎓 [**Методология и педагогика (PEDAGOGY.md)**](file:///home/kopri/notes.qpid.pro/PEDAGOGY.md) — руководство по эффективному изучению сетевого английского: почему изолированные слова не работают, сила лексических связок (chunks), алгоритм SM-2.
|
- 🎓 [**Методология и педагогика (PEDAGOGY.md)**](file:///home/kopri/notes.qpid.pro/PEDAGOGY.md) — методические правила эффективного освоения языка: лексические связки (chunks), контекст, фонетика, кривая забывания Эббингауза.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠 Технический стек
|
## 🛠 Технический стек
|
||||||
|
|
||||||
- **Backend**: Python 3.12 (FastAPI / Uvicorn)
|
- **Backend**: Python 3.12 (FastAPI / Uvicorn)
|
||||||
- **Database**: SQLite (WAL mode, надёжность и быстрые снимки)
|
- **Database**: SQLite (WAL mode — надёжность, автономность, бэкап в один файл)
|
||||||
- **Frontend**: Vanilla HTML5 / Modern CSS / JavaScript (PWA, мгновенная загрузка, поддержка горячих клавиш)
|
- **Безопасность**: Защищённые сессии (HttpOnly cookies), PBKDF2-HMAC-SHA256, Rate Limiting
|
||||||
|
- **Frontend**: Vanilla HTML5 / Modern CSS / ES6+ JavaScript (PWA, горячие клавиши, мгновенный отклик)
|
||||||
- **Внешние API**: Free Dictionary API (IPA + audio), MyMemory Translation API
|
- **Внешние API**: Free Dictionary API (IPA + audio), MyMemory Translation API
|
||||||
- **Веб-сервер**: Nginx Reverse Proxy + SSL Let's Encrypt (`notes.qpid.pro`)
|
- **Веб-сервер**: Nginx Reverse Proxy + SSL Let's Encrypt (`notes.qpid.pro`)
|
||||||
- **Репозиторий проекта**: [Gitea (ai.qpid.pro/gitea/Antigravity/notes-qpid-pro)](https://ai.qpid.pro/gitea/Antigravity/notes-qpid-pro)
|
- **Репозиторий проекта**: [Gitea (ai.qpid.pro/gitea/Antigravity/notes-qpid-pro)](https://ai.qpid.pro/gitea/Antigravity/notes-qpid-pro)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Быстрый старт (Разработка)
|
## 🌐 Информация об окружении
|
||||||
|
|
||||||
```bash
|
|
||||||
# Клонирование / переход в каталог проекта:
|
|
||||||
cd /home/kopri/notes.qpid.pro
|
|
||||||
|
|
||||||
# Создание виртуального окружения Python:
|
|
||||||
python3 -m venv venv
|
|
||||||
source venv/bin/activate
|
|
||||||
|
|
||||||
# Запуск будет доступен после развертывания Фазы 1
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🌐 Информация о сервере и инфраструктуре
|
|
||||||
|
|
||||||
- **URL сервиса**: [https://notes.qpid.pro](https://notes.qpid.pro)
|
- **URL сервиса**: [https://notes.qpid.pro](https://notes.qpid.pro)
|
||||||
- **IP-адрес сервера**: `31.77.203.213`
|
- **IP сервера**: `31.77.203.213`
|
||||||
- **Каталог на сервере**: `/home/kopri/notes.qpid.pro`
|
- **Каталог проекта**: [`/home/kopri/notes.qpid.pro`](file:///home/kopri/notes.qpid.pro)
|
||||||
- **Git Remote**: `http://127.0.0.1:3000/Antigravity/notes-qpid-pro.git` (зеркалируется в Gitea)
|
- **Git Remote**: `http://127.0.0.1:3000/Antigravity/notes-qpid-pro.git`
|
||||||
|
|||||||
Reference in New Issue
Block a user