TutorLoom
기업·대학·교육기관을 위한 학습 플랫폼, 무료 오픈소스이며 엔터프라이즈 버전 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Словарь для студентов, которые идут в data science: как читать вслух по-английски формулы
математики, статистики и машинного обучения, названия библиотек (NumPy, scikit-learn, PyTorch…)
и код на Python (__init__, **kwargs, lambda, скобки…).
Для каждого термина есть английская фраза для чтения вслух с кнопкой озвучки, русская транскрипция (где нужна), формула (KaTeX, если есть), перевод на русский, короткий пример на Python и ссылки на связанные термины.
data/terms.jsonderivitive → derivative)speechSynthesis с языком en-US, без API-ключейSpeechRecognition (Chrome на Android, Safari на iOS 14.5+), без ключей. Распознаватель отдаёт до 10 вариантов, засчитывается лучший; сравнение нечёткое: по буквам (расстояние Левенштейна) и по звучанию для длинных слов (упрощённый Metaphone, поэтому «snake keys» = «snake case»); буквы-переменные и короткие слова (sub, bar) — только точно или по названию буквы («eye» = i). Символы из распознавателя («√x», «x²») переводятся в слова, плюс список допустимых вариантов acceptВсе страницы генерируются статически при сборке (generateStaticParams).
npm install
npm run dev # http://localhost:3000
npm run build # продакшен-сборка (то же самое делает Vercel)
npm run typecheck # проверка типов
Деплой на Vercel: импортируйте репозиторий, никаких настроек не нужно.
app/
layout.tsx общий макет, подключение стилей KaTeX
page.tsx список терминов
term/[id]/page.tsx страница термина
globals.css светлая тема
components/
Formula.tsx рендер LaTeX через KaTeX
SpeakButton.tsx кнопка озвучки (speechSynthesis)
TermList.tsx поиск (Fuse.js) и фильтр по категориям
Practice.tsx тренировка по ступени: карточки, озвучка, проверка произношения
SpeechCheck.tsx запись с микрофона и вывод оценки
data/terms.json все термины
lib/terms.ts типы, категории, доступ к данным
lib/levels.ts ступени: Foundations → Essentials → Practitioner → Expert
lib/recognition.ts распознавание речи (Web Speech API) и нечёткая проверка произношения
lib/exam.ts состав экзамена по ступени
lib/generate.ts генератор новых формул и строк кода для экзамена
lib/progress.ts прогресс в localStorage: выученные, ошибки, экзамены, где остановились,
цель на день, серия дней, интервальное повторение (1, 3, 7, 14, 30 дней)
app/manifest.ts PWA: установка на телефон как приложение
public/sw.js service worker: офлайн-режим (страницы, скрипты, шрифты KaTeX)
app/precache.json/ список всех страниц, которые service worker скачивает заранее
components/OfflineStatus.tsx регистрация service worker, ход скачивания, плашка «Нет интернета»
android/ — маленькое приложение: сайт в WebView плюс мост window.AndroidSpeech к системным
SpeechRecognizer и TextToSpeech (в WebView нет Web Speech API). Веб-часть моста — lib/android.ts.
Готовый файл лежит в public/math-aloud.apk, страница со ссылкой и инструкциями — /install.
Сборка (нужны JDK 17+, Android SDK 35, Gradle 8.11+):
cd android
echo "sdk.dir=/путь/к/android-sdk" > local.properties
MATH_ALOUD_KEYSTORE=/путь/к/keystore.properties gradle assembleRelease
cp app/build/outputs/apk/release/app-release.apk ../public/math-aloud.apk
Обновления ставятся поверх только с тем же ключом подписи — его нельзя терять; в репозиторий
он не попадает. При изменении приложения увеличьте versionCode в android/app/build.gradle.kts.
При первом заходе service worker скачивает все страницы (~25 МБ в хранилище браузера), после этого карточки, словарь, формулы, игры и прогресс работают без интернета. Новые страницы попадают в офлайн автоматически: список берётся из тех же данных, что и сами страницы. Проверка произношения в Chrome на Android требует интернета (звук распознаётся на серверах Google); на компьютере свежий Chrome может распознавать на устройстве — тогда сайт предложит скачать языковой пакет. Озвучка без сети использует голоса, установленные на телефоне.
Откройте data/terms.json и добавьте в массив объект:
{
"id": "median",
"english": "median",
"russian": "медиана",
"spoken": "the median of x",
"latex": "\\operatorname{median}(x)",
"python": "import numpy as np\nnp.median([1, 3, 7]) # 3.0",
"category": "statistics",
"level": "foundations",
"say": "median",
"related": ["mean"]
}
Правила для полей:
| Поле | Что писать |
|---|---|
id | уникальный, латиница в нижнем регистре через дефис; это часть URL /term/<id> |
english | название термина по-английски |
russian | перевод на русский |
spoken | как это читается вслух, словами (именно этот текст озвучивается). Для названий пишите так, чтобы синтезатор прочитал правильно: "num pie", а не "NumPy" |
transcription | необязательно. Русская транскрипция: "нам-пай" |
latex | необязательно (у библиотек формулы нет). Формула в LaTeX. В JSON каждый \ удваивается: \frac → "\\frac" |
python | короткий пример; перенос строки — \n |
category | одна из: notation, statistics, linear algebra, calculus, ML basics, Python/pandas, Python syntax, libraries, geometry, complex numbers, series, differential equations |
level | ступень обучения: foundations, essentials, practitioner, expert. Порядок в тренировке — как в файле |
say | что пользователь произносит в тренировке: короткое название без скобок ("L2 norm", а не "L2 norm (vector length)") |
accept | необязательно. Как распознаватель может записать правильное произношение: для NumPy |
Формулу удобно проверять в онлайн-редакторе KaTeX. Если KaTeX не поймёт формулу, он покажет её красным текстом, а сборка не упадёт.
Чтобы добавить новую категорию, допишите её в CATEGORIES и CATEGORY_LABELS в lib/terms.ts.
Термины высшей математики (матрицы, векторы, аналитическая геометрия, пределы, производные, интегралы, ряды, дифференциальные уравнения, теория поля, комплексный анализ, преобразование Лапласа) взяты по главам «Конспекта лекций по высшей математике» Д. Т. Письменного.
["num pie", "numb pie"]unit | тема внутри ступени (список тем — units в lib/levels.ts). Темы есть у всех ступеней: каждая тренируется отдельным уроком /level/<ступень>/practice/<тема> |
related | массив id других терминов (они должны существовать) |
Проверьте: npm run build. Новая страница появится по адресу /term/<id>.