Code Monkey home page Code Monkey logo

omoideold's Introduction

Omoide

Система просмотра медиа данных. Например, хранение личного архива фотографий и быстрая навигация по нему.

Название с японского переводится как "воспоминания", а именно такие воспоминания, которые объединяют с кем то и вызывают ностальгию.

Посмотреть систему в работе: omoide.ru

Основная идея

Система задумана как максимально легковесное решение, способное работать на микрокомпьютере. Изначально написана для raspberry pi4 с 1Gb памяти на борту и хранением данных на flash/ssd. Чтобы не вызывать разрушение чипов памяти, omoide не подразумевает наличие операций записи, добавление данных доступно только системному администратору.

Omoide не рассчитана на то, что вы будете поднимать из неё свой pinterest или заниматься хостингом произвольных чужих картинок. Она предполагает удобный доступ к фотоальбомам и тому подобным большим и редко обновляемым массивам медиа данных.

Практика показывает, что фотоальбомы, артбуки и сборники картин люди охотно скачивают, но по факту толком не смотрят поскольку фильтровать и просматривать контент в них довольно неудобно. Omoide решает как раз эту проблему.

Подробнее

  1. Добавление контента (для пользователя)
  2. Добавление контента (для администратора)
  3. Стоимость и расходы на содержание
  4. Архитектура

omoideold's People

Contributors

igorzyktin avatar

Watchers

James Cloos avatar  avatar

Forkers

taxeh

omoideold's Issues

Изменить основной веб сервер

Текущая версия проекта написана на flask. Мне не очень нравится история с тем как он запускается и невозможность поднять продовый сервер просто из питоновского файла. Поэтому хотелось бы переписать на starlette + uvicorn.

Добавить в индекс метаданных название группы

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

Развязка команд по импорту

Надо отказаться от стандартного режима обработки команд и перейти к ручным импортам внутри функций запуска.

Сейчас разом импортируется весь проект, поэтому для запуска продакшен сервера, например, нужен установленный pillow. Хотя он там абсолютно не нужен, но он импортирован и без него проект не запустится. То же самое касается других зависимостей.

Написать свой rsync

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

Убрать стартовую страницу

Стартовая страница была добавлена вместо страницы с помощью. Она была нужна т.к. там описывалась логика поиска. Практика показывает, что народ всё-равно толком ничего не ищет, а пустая страница в начале только раздражает.
Надо вернуть отдельную страницу помощи, а стартовую страницу убрать.

Рефакторинг кнопок пагинации

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

Добавить кнопку фолдинга верхнего меню

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

Сделать кастомный ресайз thumbnail

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

Управление корневым каталогом

Изначально предполагалось, что проект можно будет запускать в произвольном каталоге. Каждая папка была бы мини-проектом со всем необходимым. Но также предусмотрена возможность кастомизации любого каталога. Кроме того, предполагалось что приложение будет установлено в систему и для всех проектов будет использовать один набор шаблонов/статики.

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

Что требуется сделать: убрать из кастомизации пути к шаблонам и статике, жёстко зашить их в коде.
Убрать из кастомизации настройки каждого из каталогов. Можно в принципе оставить их как дополнительные опции, но важно добиться, чтобы проекту для запуска требовалось указать только один параметр --root, который указывал бы на папку с контентом. Зная папку, проект сам должен найти все необходимые ресурсы.

Изменение коснётся ключей запуска:

  • sources-folder
  • storage-folder
  • content-folder
  • database-folder
  • templates-folder
  • static-folder

Сделать операцию релокации групповой

Сейчас релокации выполняются по одному файлу из-за чего проверка дубликатов идёт очень долго.
Надо сделать, чтобы операция была атомарной для целой группы (с возможностью выбрать перезаписывать ли существующие файлы).

Сделать футер

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

Выделить индекс в отдельный микросервис

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

Сделать паспорт миграции

Сейчас регулярно возникает проблема с добавлением новых данных т.к. нет способа понять, что что то обновлялось.
Стоит сделать дополнительный json файл, который позволял бы понять, что в каталог внесены изменения и его надо обработать заново.

Убрать проблему пикселизации thumbnails

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

Кеширование UUID по имени файла

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

Что надо сделать - кешировать UUID не по порядку следования а просто по имени файла, аналогично тому как это сделано для переменных. Но важно продолжать учитывать порядок. Если мы добавляем новый элемент в середину коллекции, UUID должен быть подобран так, чтобы порядок следования сохранялся.

Рефакторинг пагинатора

Проект использует самописный пагинатор, содержимое которого вызывает вопросы в части своей костыльности.

Есть два вида пагинации - постраничная и по UUID. Их разграничение весьма размыто, есть риск ошибок при работе.
Надо переписать пагинатор, возможно разделить на несколько классов, чтобы он был более читаем.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.