Личные проекты

Вне работы я всегда увлекался изучением и созданием чего-то нового. Кулинария, столярное дело, восхождение на Эльбрус, организация сплавов, строительство дома, программирование — всё это позволяло мне расти и осваивать новые области. На этой странице я хочу поделиться некоторыми проектами разного масштаба и сложности, которые имеют для меня ценность. Они стали площадкой для соединения знаний из различных сфер, позволили мне на практике применять новые технологии и решать реальные творческие задачи в новых для меня областях.

Умный стеллаж

В каждом доме необходимо место для хранения вещей, особенно если есть увлечения, требующие дополнительного оборудования и материалов. Когда вещей много, необходимо продумать удобную организацию хранения, чтобы любой предмет можно было быстро найти. Решение, которое я разработал и использую по сей день - это стеллаж с пронумерованными коробками и приложением для учета и поиска предметов.

https://github.com/st-coding-gh/boxes

ножовкашуруповертсаморезыкраскакистьJavaScriptExpressReactWebpackPrisma ORMSQLite
Rack one
Rack two
Rack three
Rack four
0 / 0

Подходящего по размерам решения в продаже не нашлось, поэтому пришлось сделать его самостоятельно. В sketchup был создан чертеж, по которому из досок был собран стеллаж.

Boxes one
Boxes two
0 / 0

Предметы были разложены в пронумерованные коробки

Boxes app one
Boxes app two
Boxes app three
0 / 0

Для учета предметов было разработано веб-приложение с простым интерфейсом, которое позволяет вносить предметы в коробки, редактировать название и расположение, удалять и искать предметы.

Приложение для запоминания английских слов

Одним из моих увлечения является чтение фантастики и фэнтези. Так получилось, что большинство интересных книг в этой области написаны на английском языке. Чтение в оригинале позволяет лучше понять стиль автора, избежать потери смысла при переводе и поддерживать уровень языка. Я начинал с авторов, у которых достаточно простой стиль, например, Джо Аберкромби, которых можно читать со словарем и получать удовольствие от сюжета. Но потом я столкнулся с таким автором, как Тэд Уильямс, где приходилось смотреть в словарь несколько раз в каждом предложении. Стало ясно, что для комфортного чтения авторов подобного уровня необходимо значительно расширить словарный запас. Я пробовал различные приложения для запоминания слов, но ни одно из них не решало мою проблему. Поэтому я решил разработать собственное приложение, которое бы соответствовало моим требованиям и поставленной задаче.

Wordenstein app
TypescriptNext.jsTailwind CSSAntDPrisma ORMSQLitePythonFastAPIspaCy
Проблема №1

Существует множество приложений для запоминания слов, такие как Anki, Quizlet и Memrise, которые имеют возможности для создания карточек и тренировки. Однако они не решали мою главную проблему - мне хотелось читать книгу, не отвлекаясь слишком часто на поиск слов в словаре. На изучение всего словарного запаса Тэда Уильямса у меня ушли бы годы, а книгу хотелось читать уже сейчас. Мне нужен был другой подход для изучения слов.

Проблему можно было бы решить, если найти все неизвестные слова из следующей главы, выучить их, а потом прочитать главу от начала до конца без остановок. Но вручную находить и выписывать слова из каждой главы было бы слишком трудоемко. Этот процесс необходимо было автоматизировать.

Проблема №2

Для автоматизации нужно было сравнивать слова из следующей главы со списком известных мне слов. Проблема была в том, что у меня не было такого списка.

Для решения этой проблемы я принял следующий подход: на этапе инициации приложения я взял список из 5000 наиболее часто используемых английских слов, и внес их в базу данных известных мне слов, полагаясь на то, что я скорее всего их уже знаю. Затем по мере чтения книги я дополнял этот список новыми словами, как уже известными, так и новыми. Таким образом, со временем база растет и все более точно отражает мой реальный словарный запас.

Проблема №3

Для сравнения слов друг с другом необходимо было привести их к единому виду. Например, слова 'running', 'ran' и 'runs' должны быть приведены к одной форме 'run'. Как выяснилось, это называется лемматизацией и является довольно сложной задачей в области обработки естественного языка (NLP).

Библиотеки на Node.js для лемматизации не дали удовлетворительного результата. В связи с этим пришлось использовать Python и библиотеку spaCy, которая хорошо справляется с этой задачей. Было написано небольшое приложение на Python, которое принимает на вход текст главы, выполняет лемматизацию всех слов и возвращает список уникальных лемм. Это приложение работает как отдельный сервис, с которым взаимодействует основное приложение на Node.js. Код данного приложения доступен на GitHub по ссылке в начале данного раздела.

lemmatization example

Полученный список лемм сравнивается со списком известных слов, что позволяет выделить потенциально неизвестные слова. "Потенциально" потому что некоторые слова могут быть просто еще не внесены в базу известных слов. Также, лемматизация часто проходит с ошибками, и некоторые слова могут быть пропущены или неправильно обработаны. Тем не менее, данный подход позволяет значительно сократить количество слов, которые нужно изучить перед чтением главы.

word sorting example

Далее слова вручную распределяются по категориям: действительно неизвестные, известные и ошибки лемматизации (ignore). Что в конечном итоге позволяет составить список слов для изучения перед чтением главы.

Автоматическая генерация карточек слов

Итак, получен список слов из следующей главы для изучения. Поначалу данный список был достаточно длинным, даже для одной главы - около 200 слов (Тэд Уильямс действительно любит редкие слова). Вручную создавать карточки для такого количества слов было бы слишком трудозатратно, поэтому данный процесс также нужно было автоматизировать.

Для этого был использован API сервиса vsegpt.ru, который позволяет использовать разные модели для генерации, как текста, так и изображений. При генерации используется режим ответа в JSON, что позволяет избежать ошибок парсинга.

card one
card two
card three
0 / 0

Вначале для каждого неизвестного слова генерируется карточка с определенной структурой: слово, транскрипция, перевод, определение, примеры использования, и другие поля, а также промпт для генерации изображения. Затем на основе промпта генерируется изображение, которое добавляется в карточку. В итоге получается готовая карточка, которую можно сразу использовать для изучения слова. Так как для генерации изображений использовалась самая простая модель, многие изображения грешат типичными артефактами (например, неправильное количество ног или пальцев). Однако, для цели запоминания это оказывается даже полезным, так как необычное изображение лучше запоминается.

training one
training two
training three
0 / 0

Наконец, карточки используются для тренировки. Подход к изучению основан на интервальном повторении (spaced repetition) и повышении рейтинга слов в случае успешного ответа, а также понижении рейтинга в случае ошибки. Мне за неделю удается выучить 50-60 новых слов

stats

Со временем количество неизвестных слов падает, что отражается в статистике созданных карточек. Данное приложение используется с марта 2025 года, на данный момент среднее количество неизвестных слов в новой главе упало до 20-30, что позволяет читать уже не одну главу в неделю, а две. Возможно, словарный запас в будущем вырастет настолько, что можно будет загружать в приложение целую книгу, получать список неизвестных слов, учить их и потом целиком ее читать.

Водные проекты

Не могу сказать точно, почему и когда появилось эта тяга к воде. Сначала байдарки, потом прогулки с друзьями на парусных лодках по Волге, потом права и самостоятельный яхтинг. В данном разделе объединены несколько проектов, которые удалось осуществить.

splav photo one
splav photo two
splav photo three
0 / 0

Я ежегодно организую сплавы для компании друзей. Каждый сплав это полноценный проект, требующий внимательного планирования: маршрут, байдарки, транспорт, снаряжение, одежда, еда. Все сплавы были успешно выполнены, никто из участников не пострадал!

boat one image
boat two image
boat three image
0 / 0

В 2019 году я прошел обучение в Черногории и получил лицензию IYT на управление яхтой bareboat skipper. В этом же году получил права ГИМС и стал владельцем лодки Maxi 77. Личная лодка потребовала погружения в массу новых областей, от лакокрасочных материалов до электротехники.

/i-ya-three
nn-ya-one
nn-ya-two
/n-ya-four
0 / 0

В 2020 году я спланировал и совершил одиночное путешествие на парусной лодке из Нижнего Новгорода в Ярославль. Общее время в пути составило 9 дней, всего было пройдено около 800 км.

turkey-three
turkey-one
turkey-two
0 / 0

В 2023 году было спланировано и успешно совершено самостоятельно прибрежное путешествие в Турции на чартерной лодке, в районе Фетхие-Мармарис. С командой друзей было пройдено около 300 миль за 5 дней.

Представленные на странице проекты это далеко не полный список всего, чем я увлекаюсь в свободное от работы время. Любое увлечение я стараюсь довести до осязаемого результата, получив при этом новые знания и опыт.