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