Закреплённые посты

сделал читалку книг для себя: открывается на любом утюге, работает без интернета и хранит всю библиотеку

32
Читалка

Всем привет! На создание этого проекта меня подтолкнула банальная проблема: я читаю очень много (в среднем по книге каждые 2-3 дня) и со временем начал путаться в авторах, сериях и том, что уже прочитано, а что нет. Существующие решения либо обрастали лишним функционалом, либо не давали нормального контроля над личной библиотекой.

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

Архитектура и стек: почему PWA и браузерные технологии?

Главное требование к читалке - полная независимость от платформы и доступность с любого устройства (ПК, смартфон, планшет, телевизор) без необходимости ставить отдельные нативные приложения под каждую ОС.

  • PWA (Progressive Web App): Приложение устанавливается в систему прямо из браузера и работает в отдельном окне.
  • Оффлайн-доступ: За кэширование статики и работу без подключения к сети отвечает Service Worker.
  • Хранилище данных: Все книги и файлы обрабатываются исключительно на стороне клиента.

Что под капотом: архитектура, оффлайн и хранение гигабайт в браузере

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

  1. Service Worker и PWA: Приложение упаковано как прогрессивное веб-приложение. За кэширование статики и мгновенную загрузку интерфейса отвечает Service Worker. Интернетом для самого процесса чтения пользоваться не нужно вообще - закачал базу и можно читать хоть в автономном режиме.
  2. IndexedDB + OPFS (Origin Private File System): Забудьте про костыли с локальным хранилищем (localStorage с его убогим лимитом в 5 МБ). Для работы с файлами книг используется IndexedDB и современная файловая система браузера OPFS.
  3. Гибридная синхронизация метаданных: Так как вся тяжелая база книг живет локально на устройстве пользователя, по сети гоняются исключительно легкие метаданные (текущая позиция чтения, настройки, оценки и статистика для облачного профиля - если пользователь решил авторизоваться). Сами файлы книг на сервер не отправляются вообще. Для передачи конкретной книги между устройствами используется генерация временных хэш-ссылок с позицией чтения.

Основной функционал

  1. OPDS-каталоги: «Из коробки» встроена поддержка легальных каталогов (например, Библиотека Мошкова), при этом пользователь может подключать любые сторонние OPDS-источники.
  2. Учет и статистика: Проект создавался в первую очередь ради структурирования прочитанного. Реализована сортировка по жанрам, авторам, сериям, выставление оценок и ведение детальной истории чтения.
  3. Синхронизация и шаринг: На текущем этапе реализована генерация уникальных ссылок с привязкой к конкретной позиции в тексте (через метаданные), что позволяет переносить прогресс или делиться книгой. В планах - полноценная фоновая автосинхронизация метаданных между девайсами.
  4. Интегрированная озвучка (TTS): Реализован режим чтения вслух с помощью встроенных в браузер речевых движков с сохранением позиции воспроизведения.
  5. Поддерживаемые форматы: Фокус сделан на .fb2 как на основной стандарт для текстовой русскоязычной литературы. В перспективе планируется расширение форматов (включая .epub).

Безопасность, приватность и серверная часть

Один из частых вопросов касается безопасности и хранения пользовательских данных.

  • Где лежат файлы книг? Серверная часть не хранит, не индексирует и не передает файлы пользовательских книг. Вся обработка и хранение текстовых файлов происходят изолированно в песочнице браузера на устройстве пользователя.
  • Зачем нужна авторизация? Регистрация полностью опциональна и используется исключительно для привязки облачного профиля, в котором хранятся легкие метаданные: настройки интерфейса, общий прогресс чтения и оценки. Читать книги с локального диска можно полностью без регистрации и создания аккаунтов.

Ссылки на проект

  • Главная страница приложения: libd.eu

Проект развивается открыто и пишется под практические нужды. Буду рад конструктивной технической критике, идеям и пожеланиям в комментариях!

Потрясающие снимки горизонта Марса с высоты 400 километров

31
Читалка

Астронавты и космонавты, имевшие опыт пребывания на Международной космической станции (МКС), постоянно испытывают благоговение, когда видят под собой кривизну Земли. Нечто подобное время от времени испытывают ученые, изучающие Красную планету, благодаря все еще действующему космическому аппарату NASA "Марс Одиссей".

© NASA/JPL-Caltech/ASU
© NASA/JPL-Caltech/ASU

Все снимки, представленные в статье, были получены в конце ноября 2023 года с высоты около 400 километров — примерно на той же орбите, где сегодня работает МКС. Изображения получились весьма атмосферными в прямом смысле слова.

Когда десять изображений объединили в одну панораму, исследователи получили совершенно непривычный вид Марса: испещренная горами и кратерами поверхность планеты под слоями облаков и пыли, парящими в атмосфере.

© NASA/JPL-Caltech/ASU
© NASA/JPL-Caltech/ASU

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

Камера THEMIS, установленная на борту "Марса Одиссей", в основном смотрит непосредственно вниз. Ее инфракрасные датчики позволяют определять состав пород, идентифицировать лед, песок и пыль, а также фиксировать суточные и сезонные перепады температуры.

© NASA/JPL-Caltech/ASU
© NASA/JPL-Caltech/ASU

Кроме того, прибор помогает исследовать и атмосферу — например, определять количество кристаллов водяного льда и пыли. Однако при обычной ориентации аппарата он получает информацию лишь из относительно узкого столба атмосферы непосредственно под собой.

Исследователям хотелось увидеть гораздо больше. Для этого THEMIS пришлось направить не привычно вниз, а под углом к поверхности. Подготовка к такому сеансу наблюдений заняла три месяца. Почему так долго? Все дело в том, что инженерам NASA и Lockheed Martin нужно было рассчитать, как именно повернуть аппарат для получения желаемой перспективы, но при этом не нарушить его орбиту или, что еще хуже, случайно не уронить его на поверхность планеты. Даже незначительная ошибка могла бы похоронить миссию, которая трудится на благо науки без малого четверть века (выход на орбиту состоялся 24 октября 2001 года).

© NASA/JPL-Caltech/ASU
© NASA/JPL-Caltech/ASU

В итоге "Марс Одиссей" запечатлел не просто поверхность Марса, но и срез его атмосферы. На снимках отчетливо видно, где находятся слои облаков и пыли относительно друг друга. Наблюдения подтвердили, что чрезвычайно разреженная атмосфера Марса представляет собой многослойную структуру, где слои облачности чередуются со слоями пыли разной концентрации.

Джонатон Хилл из Университета штата Аризона, ответственный за операции с камерой THEMIS, отметил, что до этого момента ни одному марсианскому космическому аппарату еще не удавалось получить подобный вид.

Дополнительные данные — это бесценный вклад в наше понимание климатической истории Красной планеты, которая в далеком прошлом была куда более комфортным местом, потенциально пригодным для зарождения простейшей жизни.