Представлен открытый проект ISBN Visualization, целью которого является визуализация свыше 97 миллионов книг со всего мира в контексте системы ISBN. Реализация данного решения выполнена на языках TypeScript и Rust, а его исходный код доступен на GitHub под лицензией GNU Affero General Public License. Международный стандартный книжный номер (ISBN) — это уникальный идентификатор, необходимый для продажи и технической обработки книг в торговых сетях.
«С момента появления письменности библиотеки стремились сохранить знания человечества. В эпоху цифровых технологий, возможно, мы сможем создать всестороннюю коллекцию всех произведений человека, соответствующую определённым стандартам.
Этим как раз и занимаются теневые библиотеки, которые стремятся собрать и поделиться максимальным количеством книг. Одна из таких библиотек, Anna’s Archive (на которую я не буду ссылаться из-за вопросов авторского права), недавно задала себе вопрос: как можно эффективно визуализировать одновременно 100 000 000 книг или больше?
Существует множество доступных данных: названия, авторы, страны происхождения, издательства и их возраст, количество библиотек, где книги хранятся, доступность в цифровом формате и так далее. Международные стандартные номера для книг (ISBN) — это 13-значные коды, которые присваиваются почти всем изданным книгам.
Так как первые три цифры фиксированы (в настоящее время это только 978- и 979-), а последняя цифра является контрольной, общее пространство ISBN13-Space содержит всего два миллиарда возможных слотов. Вот моя интерактивная визуализация этого пространства», — объяснил автор проекта под ником phiresky.
На данный момент в базе данных проекта представлено 97 380 212 книг.
Архитектура проекта:
– **Бэкенд**: поскольку изображения можно просто хранить в формате PNG, а данные деревьев — как JSON, в бэкенде нет необходимости. Просто нужен статический хостинг для файлов, например, GitHub Pages, чтобы загрузить HTML, JS, CSS, PNG и JSON.
– **Фронтенд**: используется комбинация ThreeJS, React и MobX. Это удобный набор технологий для разработки реактивных декларативных 2D и 3D сцен с использованием графического ускорения и возможности повторного использования компонентов.
– **Скрипты обработки**: набор скриптов для обработки данных в основном написан на JavaScript (который непосредственно записывает файлы JSON и PNG), но один из скриптов написан на Rust, поскольку ему нужно обработать исходный файл размером 250 ГБ и записать результат в SQLite.