ZX-Art интеграции: ZXDB, Virtual TR-DOS и внешнее API
Итак, наступило время поговорить об очередных этапах развития ZX-Art. В результате недавно прошедшей напряженной разработки, удалось слить воедино базы софта ZXDB и Virtual TR-DOS.
Как я уже писал раньше, в определенный момент ко мне пришла идея, что ZX-Art не должен ограничиваться только графикой и музыкой, но должен также послужить надежным архивом программ, со всеми их версиями и релизами. Событием, которое натолкнули на мысль, что имеющиеся архивы ненадежны и нуждаются в грамотном резервировании, послужило эмоциональное удаление архива ААА, о котором он вполне открыто объявил, и которое сейчас пытается повсюду выставить как «переезд на другой хостинг», длившийся более трех месяцев, за время которых VBI поднял bbb.retroscene.org, сделав поступок Алексея полностью бессмысленным. Правду ли говорит Алексей, логично ли, что переезд занял в итоге чуть не полгода, разбираться большого желания нет. На результат это уже не влияет, а результатом был вывод, что архив дем в имеющемся виде хрупок и уязвим. Я уже не говорю о том фонтане дерьма, которые ААА и гоблин устроили в комментариях, и смотреть на который большой радости не доставляло.
С другой стороны, примерно в это же время разработчик и владелец World Of Spectrum отошел от дел, оставив архив и софт на попечение команды добровольцев. WOS был написан очень давно, в его основе лежала какая-то экзотическая база данных, и компилировалось-запускалось это всё на невероятно устаревшем окружении. Закономерно, при какой-то серьезной неполадке, весь архив на полгода ушел в страну вечной охоты. Надо отдать должное команде разработчиков, которым в итоге, после долгих кормлений завтраками, хамства, обещаний, драм и разборок, удалось-таки запустить по большей части работоспособную версию. Губительный эффект, который это событие оказало на западной спектрум-сцене, недооценить невозможно. Обновленная версия архива всё еще находится в разработке: несмотря на то, что её формально пилит целая команда энтузиастов, объем работы настолько огромный, что неудивительно, что оно всё еще не стартовало. Полюбоваться на свежий билд можно по адресу live.worldofspectrum.org но там пока еще нет самого основного.
Эти события закономерно натолкнули сразу нескольких людей на мысль, что доверять наследие целой платформы одному единственному источнику — неразумно, и возникшие проблемы вполне закономерны. Я в том время общался с Einar Saukas, озабоченным теми же проблемами, и ему очень понравилась мысль сделать из ZX-Art параллельный архив софта. Поскольку я достаточно много времени посвящаю другим проектам, и не мог так быстро перемолоть весь объем работы, Эйнар не стал дожидаться моих результатов, и распарсил весь WOS прямо из HTML-исходников, сделав это максимально точно и полно, дабы не потерять ни байта, за что ему всяческое уважение. Результат работы он назвал ZXDB. Я писал параллельно свой парсер WOS, и могу представить, насколько огромная работа была проделана Эйнаром.
К сожалению, разработчики нового WOS этих усилий не оценили, так как им явно хотелось сохранять монополию на софтовый архив, да и архитектурное видение базы данных Эйнара было, судя по всему, далеко от того, чего хотелось добиться им самим. Как бы то ни было, дело было сделано, и усилиями еще нескольких разработчиков был запущен https://spectrumcomputing.co.uk/ в основе которого лежит тот самый дамп базы ZXDB.
Реальность стала таковой, что в спектрумовском мире появилось несколько мест, куда можно закачать свой новый релиз, и закономерно встал вопрос: а как быть, чтобы избежать дублирования усилий? У меня примерно в то время появилось представление о сети распределенных ZX-ресурсов, реализующих внешние шлюзы для автоматического обмена информацией. Например, на ресурс А добавляется новая игра. Ресурс Б периодически опрашивает шлюз ресурса А, определяет, что такой игры у него нет, и импортирует всю информацию автоматически. Хорошо звучит, правда? Все в профите, информация движется, нет лишних усилий, никто ни от кого не зависит. Реальность оказалось совершенно иной.
То есть, сейчас я уже понимаю, что идея множества архивов, обменивающихся информацией в автоматическом режиме, это утопия. Помимо вышеперечисленной тотальной незаинтересованности разработчиков заниматься подобным большим и трудным проектом, есть еще пара сложностей. Во-первых, это требует senior fullstack девелопера с опытом интеграции платформ. Много ли у нас на Спекки таких спецов, готовых убить кучу времени на эту идею? Едва ли больше двух-трех.
Во-вторых, такая интеграция накладывает множество обязательств по работе с архитектурой проекта. Практически все архитектурные косяки подлежат устранению и решению, иначе обмениваться станет возможным только самой базовой информацией. Как вы понимаете, мало кто готов переписать кучу кода под изменения базы только ради идеи упрощения синхронизации с каким-то чужим проектом.
Исходя из всего вышеперечисленного, я пришел к выводу, что нужно не тянуть никого за уши, а стоит просто разработать максимально эффективный многоразовый агрегатор, который будет красиво и ненапряжно забирать информацию с других источников, не мешая им жить. Если никто в действительности не хочет/не может сделать красиво на благо всей платформе, то не очень-то, наверное, это и необходимо.
Общий алгоритм импорта в таком случае сводится к следующему:
Такой алгоритм позволяет даже восстанавливать ID чужих баз при их потере, так как сами TRD/TAP/TZX/DSK файлы остаются прежними, и по их контрольной сумме можно выяснить, к какой программе этот файл относится.
В общем, об этих нюансах я могу написать целый трактат, и всё равно будет мало. Глядя на текущее состояние и архитектуру большинства решений, я понимаю, насколько нереальной была первоначальная затея систематизировать внешние шлюзы у всех архивов — это просто невозможно и утопично.
Итого, на данный момент импортированы все основные программы из WOS (ZXDB) и Virtual TR-DOS. В любой момент процедура может быть повторена, чтобы получить только обновления без дублирования информации.
zxart.ee/eng/software/game/abu-simbel-profanation — Abu Simbel Profanation, примерно так выглядит результат, здесь и материалы с WOS, и релизы с VTRDOS.
zxart.ee/api/action:filter/export:zxProdCategory/language:rus/start:0/limit:2/filter:zxProdCategoryAll/ — дерево категорий ZX-Art
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177/ — программы с первой по десятую для категории Игры (92177)
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177/preset:apiShort — то же самое, но кратко, удобно для быстрого поиска изменений
zxart.ee/api/action:filter/export:zxProd/types:zxProd,zxRelease/filter:zxProdId=92841 — программа с ID 92841 и её релизы.
zxart.ee/api/action:filter/export:zxProd/types:zxProd/filter:zxProdId=92841 — отдельно программа с ID 92841.
zxart.ee/api/action:filter/export:zxRelease/types:zxRelease/filter:zxReleaseId=92849 — отдельно релиз с ID 92849.
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177;structureDateModified=1545324636/ — к любому запросу можно прибавить фильтр structureDateModified=..., он выдаст только результаты, изменившиеся с указанного таймстемпа.
Этого должно хватить всем спецам, кто захочет забрать весь архив. Остальные просто не найдут, не стоит вскрывать эту тему (c)
Подробнее разжевывать не хочу, пока нет ни у кого конкретного интереса. Обращайтесь, если захочется:
Всем удачи! Пользуясь случаем, передаю отдельный пламенный привет всем, кто желанием единоличного обладания и чувством собственничества безуспешно хотел бы затормозить неминуемый прогресс.
Как я уже писал раньше, в определенный момент ко мне пришла идея, что ZX-Art не должен ограничиваться только графикой и музыкой, но должен также послужить надежным архивом программ, со всеми их версиями и релизами. Событием, которое натолкнули на мысль, что имеющиеся архивы ненадежны и нуждаются в грамотном резервировании, послужило эмоциональное удаление архива ААА, о котором он вполне открыто объявил, и которое сейчас пытается повсюду выставить как «переезд на другой хостинг», длившийся более трех месяцев, за время которых VBI поднял bbb.retroscene.org, сделав поступок Алексея полностью бессмысленным. Правду ли говорит Алексей, логично ли, что переезд занял в итоге чуть не полгода, разбираться большого желания нет. На результат это уже не влияет, а результатом был вывод, что архив дем в имеющемся виде хрупок и уязвим. Я уже не говорю о том фонтане дерьма, которые ААА и гоблин устроили в комментариях, и смотреть на который большой радости не доставляло.
С другой стороны, примерно в это же время разработчик и владелец World Of Spectrum отошел от дел, оставив архив и софт на попечение команды добровольцев. WOS был написан очень давно, в его основе лежала какая-то экзотическая база данных, и компилировалось-запускалось это всё на невероятно устаревшем окружении. Закономерно, при какой-то серьезной неполадке, весь архив на полгода ушел в страну вечной охоты. Надо отдать должное команде разработчиков, которым в итоге, после долгих кормлений завтраками, хамства, обещаний, драм и разборок, удалось-таки запустить по большей части работоспособную версию. Губительный эффект, который это событие оказало на западной спектрум-сцене, недооценить невозможно. Обновленная версия архива всё еще находится в разработке: несмотря на то, что её формально пилит целая команда энтузиастов, объем работы настолько огромный, что неудивительно, что оно всё еще не стартовало. Полюбоваться на свежий билд можно по адресу live.worldofspectrum.org но там пока еще нет самого основного.
Эти события закономерно натолкнули сразу нескольких людей на мысль, что доверять наследие целой платформы одному единственному источнику — неразумно, и возникшие проблемы вполне закономерны. Я в том время общался с Einar Saukas, озабоченным теми же проблемами, и ему очень понравилась мысль сделать из ZX-Art параллельный архив софта. Поскольку я достаточно много времени посвящаю другим проектам, и не мог так быстро перемолоть весь объем работы, Эйнар не стал дожидаться моих результатов, и распарсил весь WOS прямо из HTML-исходников, сделав это максимально точно и полно, дабы не потерять ни байта, за что ему всяческое уважение. Результат работы он назвал ZXDB. Я писал параллельно свой парсер WOS, и могу представить, насколько огромная работа была проделана Эйнаром.
К сожалению, разработчики нового WOS этих усилий не оценили, так как им явно хотелось сохранять монополию на софтовый архив, да и архитектурное видение базы данных Эйнара было, судя по всему, далеко от того, чего хотелось добиться им самим. Как бы то ни было, дело было сделано, и усилиями еще нескольких разработчиков был запущен https://spectrumcomputing.co.uk/ в основе которого лежит тот самый дамп базы ZXDB.
Реальность стала таковой, что в спектрумовском мире появилось несколько мест, куда можно закачать свой новый релиз, и закономерно встал вопрос: а как быть, чтобы избежать дублирования усилий? У меня примерно в то время появилось представление о сети распределенных ZX-ресурсов, реализующих внешние шлюзы для автоматического обмена информацией. Например, на ресурс А добавляется новая игра. Ресурс Б периодически опрашивает шлюз ресурса А, определяет, что такой игры у него нет, и импортирует всю информацию автоматически. Хорошо звучит, правда? Все в профите, информация движется, нет лишних усилий, никто ни от кого не зависит. Реальность оказалось совершенно иной.
Гладко было на бумаге
Я так или иначе приходил с этой идеей к разным людям, озвучивал её, и, кроме Вовы VBI, не нашел ни у кого ни малейшего отклика.- ZXDB, по своему формату, вообще не предполагает интеграции на лету. Кроме того, он не предполагает преемственности версий — в новой версии может, к примеру, поменяться ID группы или автора, меняются таблицы и структуры данных. Сама по себе структура ZXDB не содержит ничего лишнего, кроме публичной информации из WOS, то есть нет готовности к системе пользователей, нет привилегий и разграничения доступа, нет логов действий, и прочего, и прочего. Более того, разработчикам неинтересны наши дисковые адаптации с крактро, им мало интересна демосцена, им не сильно любопытно заняться тем же системным софтом под TR-DOS
- Virtual TR-DOS в текущем виде технически непригоден к интеграциям. Я переписывался с Shadow Maker, и он рассказывал, что имеет наработки по анализу содержимого софта для объединения баз, схожие в чем-то с моими, но на момент переписки он высказался, что нет смысла реализовывать один и тот же функционал двум людям. Я не совсем с этим согласен, но факт в том, что сейчас VTRDOS в шлюзах не нуждается.
- ZXAAA едва ли имеет спеца, способного справиться с задачей реализации такой интеграции, не говоря уже о том, в какое пешее эротическое меня пошлет Алексей, если я ему это предложу.
То есть, сейчас я уже понимаю, что идея множества архивов, обменивающихся информацией в автоматическом режиме, это утопия. Помимо вышеперечисленной тотальной незаинтересованности разработчиков заниматься подобным большим и трудным проектом, есть еще пара сложностей. Во-первых, это требует senior fullstack девелопера с опытом интеграции платформ. Много ли у нас на Спекки таких спецов, готовых убить кучу времени на эту идею? Едва ли больше двух-трех.
Во-вторых, такая интеграция накладывает множество обязательств по работе с архитектурой проекта. Практически все архитектурные косяки подлежат устранению и решению, иначе обмениваться станет возможным только самой базовой информацией. Как вы понимаете, мало кто готов переписать кучу кода под изменения базы только ради идеи упрощения синхронизации с каким-то чужим проектом.
Исходя из всего вышеперечисленного, я пришел к выводу, что нужно не тянуть никого за уши, а стоит просто разработать максимально эффективный многоразовый агрегатор, который будет красиво и ненапряжно забирать информацию с других источников, не мешая им жить. Если никто в действительности не хочет/не может сделать красиво на благо всей платформе, то не очень-то, наверное, это и необходимо.
Принцип работы
Соответственно, основные принципы интеграции должны быть такими:- Под каждый источник требуется свой внутренний шлюз на ZX-Art.
- Этот шлюз парсит информацию, приводя её в систематизированный вид, подходящий к формату внутреннего интегратора.
- Шлюз должен поддерживать многократный запуск без создания дублей. Это в свою очередь требует хранения всех оригинальных идентификаторов со всех интегрируемых баз, дабы в последующие запуски находить уже ранее созданные единицы информации. Более того, эти идентификаторы нужно переносить при объединении программ, дабы не опираться на имена файлов или программ.
- Информацию с некоторой степенью точности нужно объединять, чтобы одни и те же программы не появлялись в базе дважды, если они пришли с разных источников.
- Структура базы должна по максимуму позволять хранить информацию без деградации структуры. Грубо говоря, если где-то сканы обложек и сканы рекламных постеров хранятся отдельно, то и мне нельзя сводить их в единую «галерею», а нужно разумными мерами обеспечить возможность их все-таки позднее отобразить раздельно.
Общий алгоритм импорта в таком случае сводится к следующему:
- Заранее сопоставляем категории софта.
- Парсим список софта для категории, раздельно собирая информацию о программе и её релизах.
- Для каждой программы и релиза парсим/запрашиваем всю возможную дополнительную информацию — издателей, графические материалы, поддерживаемое железо, год, авторов и их роли, и прочее, и прочее, и прочее, приводя это всё к единому формату данных.
- Обработанные данные передаются в интегратор, который ищет уже готовую программу в ZX-Art по ID из чужой базы. Вот для этого и необходимо хранить все оригинальные ID.
- Если таковая не найдена, то интегратор берет все релизы, и по очереди раскладывает каждый из них на содержимое, сравнивая только файлы с данными (диски, ленты), но не тексты. Таким образом, если в ZX-Art уже есть релиз, в составе которого есть все эти trd/tap из импортируемого файла, то мы знаем, какой программе в ZX-Art соответствует импортируемая программа. Сами понимаете, что это требует наличия базы данных контрольных кодов всех файлов из всех имеющихся в наличии релизов.
- Если программа всё еще не найдена, то следует поискать в базе программу с таким же именем и годом публикации. Здесь можно применить алгоритма поиска схожих названий, но, боюсь, что они дадут не меньше ложных срабатываний, чем без них. Куда как хуже объединить star wars со star paws, чем иметь в базе два star wars, которые впоследствии можно будет объединить вручную.
- Если всё еще нет результата, то необходимо создать новую программу в базе.
- После этого интегратор проходится по всем свойствам и какие-то обновляет, а какие-то проверяет на наличие и не трогает, если они уже импортированы ранее. Каждый файл картинок/инструкций сравнивается по имени и обновляется только в случае необходимости.
- Схожим образом ищется и обновляется каждый релиз этой программы.
Такой алгоритм позволяет даже восстанавливать ID чужих баз при их потере, так как сами TRD/TAP/TZX/DSK файлы остаются прежними, и по их контрольной сумме можно выяснить, к какой программе этот файл относится.
Немного о трудностях
Разумеется, всё не так гладко, и на каждом микрошажке приходится решать по двадцать проблем. Я перечислю некоторые из них просто для понятия сложности задачи.- ZXDB однажды взяли и поменяли все ID у всех релизов, из-за чего наступила путаница при повторном импорте. Я говорил с Эйнаром, он понял, почему так делать не стоит, и мы договорились о некоторых конвенциях.
- ZXDB любят менять структуру базы. Еще вчера способы управления игрой хранились в отдельной таблице, а сегодня они уже объединены в «группы» с другими сущностями, бывшими ранее тегами. То есть, перед каждым импортом надо прогонять отдельно небольшие тесты, чтобы увидеть, что работает по-старому, а что нужно переписывать под новую логику.
- В том же ZXDB логика такая: есть программа, есть релизы, есть файлы. У одного релиза может быть несколько файлов (например, разные языки). Я же придерживаюсь логики «один релиз — один архив», а еще одна версия, один издатель, один автор. Следовательно, пришлось делать достаточно хитрый алгоритм по комбинированию.
- Запустив впервые импорт Virtual Tr-DOS, я обнаружил, что многие программы не находятся в базе, хотя имя совпадает. Выяснил, что не у всех программ с ZXDB импортирован год, поэтому сопоставление не срабатывало. Пришлось вернуться к импорту ZXDB и обнаружить, что его надо сильно переписывать, чтобы получить всё желаемое и заодно слить дополнительные материалы, до которых не доходили руки. Это почти на неделю растянуло момент импорта VTRDOS.
- В одной базе La Abadia Del Crimen, в другой Abadia Del Crimen, La. Привел к единому стандарту.
- After The War, After The War 1, After The War (Demo) — это всё одна и та же игра. Пришлось вписать обработку названия программ, дабы приводить к единой схеме хотя бы в некоторых случаях.
- Spectrum Computing не хранит у себя большую часть файлов. Да-да, они раньше хотлинковали все материалы из WOS. WOS по той или иной причине поменяли формат линков, и больше эти линки не открываются. Какой решение? Хотлинковать все файлы с archive.org, где эти файлы чуть ли не из зипа налету берутся, например:
archive.org/download/World_of_Spectrum_June_2017_Mirror/World%20of%20Spectrum%20June%202017%20Mirror.zip/World%20of%20Spectrum%20June%202017%20Mirror/sinclair/games-adverts/b/BlackHoleThe.jpg
То есть, каждый рефреш страницы игры на Spectrum Computing засылает кучу запросов в и без того нагруженный archive.org. Таким образом, импорт почти 100000 файлов, каждый из которых может скачиваться чуть ли не 30 секунд, может занять дней тридцать. Выходом является написание костыля, который будет сначала искать файл в копии WOS, слитой с торрентов, потом на самом WOS, и уже потом с медленного archive.org. - Virtual TR-DOS отображает информацию без особого структурирования. Например:
Agent Orange — Icon Design Ltd, A'n'F Software'87 — goodboy, Slider, tiboh'15
Отсюда надо понять, что разработчик — Icon Design Ltd, издатель A'n'F Software, программа 1987го года, релиз от goodboy, Slider, tiboh 2015го года. Всё вроде просто, но половина этой информации необязательна, и определить, речь идет о группе или авторе, исходя из строчки «TAW, SAW'94», практически нереально, поэтому парсер просто парсит лейблы без ролей, а интегратор уже смотрит по базе, что уже ранее известно. - Virtual TR-DOS использует для софта совсем другую структуру HTML, даже не таблицу. Парсить её — отдельное развлечение.
Advanced Disk Service v2.2 (for Profi, ATM Turbo) by MIPh&T Hacker Club'93, Spectrum World'95
Из такой вот строчки, надо отдельно вытащить:
Advanced Disk Service
2.2
Profi, ATM Turbo
MIPh&T Hacker Club
1993
Spectrum World
1995
И он всё равно в итоге не совпал с Advanced Disk Service, взятым из WOS, потому что год публикации в базе WOS другой. Отдельный привет Virtual TR-DOS за привычку конвертировать оригинальные TRD в SCL, с таким даже мой парсер не справится. - ZX-Art сейчас весит 16 гигабайт и состоит из 301 тысячи файлов. Сюда, конечно же, входят всякие файловые кэши для конвертеров и процессора картинок. База данных весит почти полгигабайта, но там большую часть составляет агрегированная статистика прослушиваний/просмотров за несколько лет, которую, наверное, пора бы уже начать автоматически подчищать с конца.
В базе 30 тысяч программ и 56 тысяч релизов.
- В запарке я случайно удалил не только криво импортировавшиеся релизы, но и порядка пятидесяти авторов. Ночью мне пишет MAC: Дмитрий, куда-то пропала моя галерея. Я поглядел, и правда — и моя пропала, и Фила, и еще кучи человек. Утром пришлось тормознуть проект, спокойно сравнить данные с бэкапом и повосстанавливать записи в пяти-шести таблицах.
В общем, об этих нюансах я могу написать целый трактат, и всё равно будет мало. Глядя на текущее состояние и архитектуру большинства решений, я понимаю, насколько нереальной была первоначальная затея систематизировать внешние шлюзы у всех архивов — это просто невозможно и утопично.
Итого, на данный момент импортированы все основные программы из WOS (ZXDB) и Virtual TR-DOS. В любой момент процедура может быть повторена, чтобы получить только обновления без дублирования информации.
zxart.ee/eng/software/game/abu-simbel-profanation — Abu Simbel Profanation, примерно так выглядит результат, здесь и материалы с WOS, и релизы с VTRDOS.
Как не страдать и жить счастливо
Чтобы не повторять мои приключения, можно забрать всю информацию прямиком из внешнего API ZX-Art. Удобно, гибко, в красивом и понятном JSON.zxart.ee/api/action:filter/export:zxProdCategory/language:rus/start:0/limit:2/filter:zxProdCategoryAll/ — дерево категорий ZX-Art
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177/ — программы с первой по десятую для категории Игры (92177)
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177/preset:apiShort — то же самое, но кратко, удобно для быстрого поиска изменений
zxart.ee/api/action:filter/export:zxProd/types:zxProd,zxRelease/filter:zxProdId=92841 — программа с ID 92841 и её релизы.
zxart.ee/api/action:filter/export:zxProd/types:zxProd/filter:zxProdId=92841 — отдельно программа с ID 92841.
zxart.ee/api/action:filter/export:zxRelease/types:zxRelease/filter:zxReleaseId=92849 — отдельно релиз с ID 92849.
zxart.ee/api/action:filter/export:zxProd/language:rus/start:0/limit:10/filter:zxProdCategory=92177;structureDateModified=1545324636/ — к любому запросу можно прибавить фильтр structureDateModified=..., он выдаст только результаты, изменившиеся с указанного таймстемпа.
Этого должно хватить всем спецам, кто захочет забрать весь архив. Остальные просто не найдут, не стоит вскрывать эту тему (c)
Подробнее разжевывать не хочу, пока нет ни у кого конкретного интереса. Обращайтесь, если захочется:
- Дополнительных полей
- Хитрых фильтров
- Поправок и разъяснений
Дальнейшая дорожная карта
Путь неблизкий, годик как минимум еще пойдет.- Аналогично забираем информацию из остальных архивов.
- Убираем дубли из базы, сливая разные записи об одних и тех же программах и авторах воедино.
- Пересматриваем дерево категорий в сторону логичности.
- Работаем над удобным доступом: рейтинги, новинки, фильтры по форматам, датам, языкам, поддерживаемому железу.
Всем удачи! Пользуясь случаем, передаю отдельный пламенный привет всем, кто желанием единоличного обладания и чувством собственничества безуспешно хотел бы затормозить неминуемый прогресс.
37 комментариев
Все описанные проблемы сугубо прикладного плана, то есть на бумаге их можно решать хоть в фидо, хоть в статском физкультурнике, но без написания конкретного программного решения в данном случае всей этой болтовне грош цена.
Теоретиков и концептологов объединения баз кругом хоть жопой жуй, а что имеем по факту?
* Старый WOS на кодобазе двадцатилетней давности
* Новый WOS, который за три или четыре года не готов показать ни одной программы
* ZXAAA, в котором даже админки нет
* ZXDB, который не является платформой, а являет собой просто отдельный дамп базы
* Sinclair Computing, который является принципиально фронтендом для ZXDB, то есть не предполагает администрирования и пополнения.
* ZXN, который продвинулся дальше всех, но едва ли ставит перед собой цели шире демоархива
* Virtual TR-DOS, идеологически застрявший году эдак в 1998ом.
Если все такие заслуженные элитные сценеры, то где наш аналог CSDB?
Ну, не знаю я истории FIDO, и что я должен был сделать?
Всё бросить и надеяться, что кто-то со знанием истории возьмется за задачу? Не возьмется, пиздеть не камушки ворочать.
Пойти читать архивы замшелых переписок каких-то чуваков из фидо? Как это приблизит к написанию кода?
Что я должен делать, чтобы не изобретать велосипед? Пойти в велосипедный магазин и купить? Где-то продают готовые базы спектрумовского софта, или что?
Конкретику, пожалуйста.
ИМХО озвученные вами проблемы носят исключительно технический характер. Задачу нужно сократить до пунктов:
1. Сбор всей имеющейся информации из разных баз в единую.
2. Дальнейшее единовременное обновление информации на всех ресурсах.
Без пункта 1 второй невозможен, а без второго первый теряет большую часть смысла, так как рано или поздно мы вернемся к нему. Следовательно решать их нужно комплексно.
Опыт FIDO может помочь решить именно второй пункт, и да же расширить его до рассылки информации всем подписчикам (а их может быть сотни и тысячи, и список может постоянно меняться). Главное проблемой при решения п.2 будет то, что нужно договариваться со всеми участниками, о механизмах обмена и синхронизации данных. Что будет скорее весьма проблемно, так как на спекки всегда отдельные группы и индивиды стремились тянуть одеяло на себя. И согласись, всё это выводит разрешение задачи п.2 далеко за рамки технических решений.
Если договориться не удастся (в чем лично я убежден), нужно создать несколько зеркал на разных площадках (так что бы они одновременно не накрылись) с обновлением информацией между собой. А механизм доступа к потокам обновляемой информации сделать отрытым, так что бы любой желающий мог не только получать новую информацию, но сам её генерировать (вот тут и нужен опыт FIDO).
Первый пункт, решается классическими методами объединения баз. Собственно их уже описали.
Его трудоемкость зависит от качества структуры и описания исходных баз данных. Чем оно ниже, тем выше трудоемкость, вплоть до ручной разборки. Но всё равно это чисто технические решения (да, весьма геморройное).
Но за «трудоемкость» я сказать не могу, так как не обладаю информацией о структурах исходных баз данных.
Часть из них я так же слили себе себе на комп, путем полного копирования сайтов wget'ом. Но мои личные задачи отличны о ведения архива программ.
1. Объединить все базы в одну.
2. Раздавать всем желающим через внешнее API.
Проблема такого подхода в его централизации, но децентрализованное решение писать ни у кого желания нет, это факт, поэтому делаем как можем.
Так же не раскрыта тема внутренней структуры твоей базы. Начинать нужно её детальной проработки. Это большая часть (но не весь) ответа на вопрос «что хотим получить на выходе?».
Проблема забора информации из других источников решается очень просто. Для этого придется для каждого внешнего источника вести свою базу. Будет это полноценная база или только индексный список, вопрос далеко не самый важный. Но новые данные однозначно должны быть храниться полностью и их структура максимально приближаться к утвержденной для основной базы. После чего отдельный скрипт проверят информацию на дупы, на полноту и в случае чего пытаться сам найти недостающее. Если информация прошла фильтрацию (то есть уникальна) и полна на 100% она автоматически добавляется в основную базу. Иначе подаем сигнал админу, что есть новая инфа, но с ней возникли проблемы «иди, разбирайся в ручном режиме». Возможны варианты, например пришли новый скриншоты или описание для программы которая уже есть в основной базе. Но это все уже твои проблемы, раз взялся за это неблагодарное дело.
Мне же непонятно какое место у меня в этом круговороте информации? Я бы не отказался получить новьё, и желательно оно должно приходить сама, без телодвижений с моей стороны (как это происходит в FIDO).
Таким образом, внутренняя структура базы не играет особой роли, играет роль структура JSON-ответа.
Вести отдельную базу для каждого источника — это непрактично, но индексный список уже есть. Новые данные уже приближаются к структуре базы, именно для этого внутренние парсеры и нужны.
Отдельный скрипт-интегратор уже проверяет информацию на дупы и уже пытается найти и подвязать информацию из имеющегося набора.
Стопроцентной полноты в реальном мире не существует, есть минимальный набор, без которого нет смысла что-то импортировать. Это уже делается, именно об этом и есть статья.
Сигнал админу — это непрактично, никто на зарплате не работает, чтобы информация месяцами дожидалась, когда у админа дойдут руки. Поэтому импортируем что есть, а потом разруливаем проблемы.
Мне тоже непонятно, какое место у тебя в этом круговороте информации. В каком виде и куда должно приходить новье? На почту? На телеграф? В приложение? В фидо?
Я советую еще раз перечитать всю статью, там ровно об этом и говорится. По крайне мере, веб-разработчику с минимадбным стажем должно хватить с лихвой данных мной ссылок на JSON, остальным они в любом случае полезны не будут.
2. У меня будет только одна просьбы, сделай сайт как можно проще, без современных наворотов — что бы его можно было выкачать wget'ом. Я сильно сомневаюсь, что кто-то будет (и я в том числе) писать ни каких приблуд и использовать твой API, так как это геморрой, а в жизни его и так много. Проще подправить строчку в батнике и за ночь выкачать весь сайт. Или вообще настроить запуск по таймеру раз в неделю, новьё само будет падать на комп. Интернет сейчас безлимитный, а диски большие.
3. Мне удобнее работать через фидо. Копиться информация и копиться. Глянешь на индикатор «о новье пришло» дайка взгляну. Несколько кликов мышкой, пара секунд и уже все работает. Но это мне удобно, не говорю за других. Фидо предлагал исключительно в качестве «правильного» примера «как нужно делать». Экономиться время и нервы пользователя, ведутся куча резервных копий (из которых «если что» база восстанавливаться автоматически) и потеря главного источника уже не катастрофа (разве не это декларировалась как одна из главных целей?). НО конечная реализация всегда за автором проекта.
1. Гораздо легче распарсить, чем даже самый простой сайт. И я уж не говорю, что в большинстве языков есть готовые json-декодеры.
2. Твой скрипт не будет зависеть от дизайна сайта. А дизайн не меняется только у мертвых сайтов.
3. Получаешь кучу дополнительных возможностей на твой вкус. ЛЮБЫХ. В первом письме Дима прямо написал, что готов идти навстречу.
Ты пробовал выкачивать wget'ом сайты где все на скриптах реализовано? Как удачно? У меня вот нет.
Да я из 90х, и мне влом да же на копку нажать, хочу что бы всё само делалось, тем более что это возможно. Зачем мне геморой в изучении чего-то без чего могу нормально жить? Я давно вырос из возраста когда нужно доказывать свою «крутость» или решать проблемы ради решения.
Проблем мне в реальной жизни хватает и в бизнесе, вон уже почти седой. У самого проектов вагон и меленькая тележка, и лучше время на них потрачу.
Парень делает хорошее дело, я разве говорю что-то против?
Только вот гладя на реализация, понимаю что через N число лет, когда мне потребляться решить похожу задачу, его ресурс пополнит приведенный выше список баз данных, которые нужно будет слить. Ну будет с ним чуть проще работать, это кардинально ни чего не меняет.
дима — супербизон
в свое время, когда ааа упал, я его базу цеплял к стороннему скрипту по-своему, по-сельски. получалось что-то вроде инет магазина без денег — фильтрация по годам, издателям, релизерам — как в битриксе, не к ночи будет помянут. )
например, нас интересуют демки производства pipiskasoft выставленные на popaparty и nepopa-fest в период с 1999 по 2001
zxn.ru парсить по-тупому нет смысла, надо нормально интегрировать через API.
По главной странице вообще нужны идеи — что показывать, сколько, как. Информации в базе очень много, соорудить можно довольно немало всего.
Моя мотивация продолжать что-то упала ниже плинтуса.
Пусть Мороз занимается VT.
Спасибо.
Просто подумай и признайся себе, что и раньше-то не очень-то хотелось этим заниматься и всё это было в тягость.
Тогда получается, что moroz1999 тебе жизнь облегчает, а ты вместо радости испытываешь смешанные чувства =)
1. Никто не удосужился сделать кросс-линки на то, откуда стырен релиз. Ни одного упоминания Virtual TR-DOS на странице примера. Это скотство, я считаю.
2. Мороз, где апи на zxart.ee? Дай доступ. Я тоже себе сделаю на VT галереи, пусть хранится.
1. Ссылки расставляю автоматически, если есть на что. Насколько мне известно, на Virtual TR-DOS у программ нет своей страницы, есть только прямой список. Пример такой страницы для игры Satisfaction:
spectrumcomputing.co.uk/index.php?cat=96&id=12707
www.worldofspectrum.org/infoseekid.cgi?id=0012707
zxaaa.net/view_demo.php?id=7535
2. API на софт есть в статье. На графику/музыку есть готовые ссылки в формах детального поиска (например — zxart.ee/rus/grafika/poisk-po-baze/). Если что не работает, дай знать — починю. Ребята, я с самого начала сделал открытое апи, через него УЖЕ всю графику забрал и забирает здоровенный межплатформенный архив. У меня нет абсолютно ничего против того, чтобы всё это максимально дублировалось и разбредалось по сайтам и галлереям, мне не надо даже обратных ссылок. Если про галереи на VT было сказано не для красного словца, то я буду только рад, если где-то будет еще один обновляемый и синхронизируемый архив.
3. Теперь про скотство. Давай я просто опубликую тут нашу последнюю переписку в отдельном комментарии, а то не влезет.
А опускать руки из-за того, что кто-то что-то похожее даже ещё не сделал, а собирается сделать… Это драмаквинство =)
1. Он настраивает синхронизацию картинок и выкачивает полный архив графики на VT, все форматы, всех авторов.
2. У него есть и свои новые разработки на тему софт-архива, которые, возможно, мы в ближайшие месяцы или годы увидим.
3. Под уже конкретные требования я очень многое дополнил и отладил в API, позднее выложу примеры всех типов данных, фильтров и запросов.
[На всякий случай — Shadow Maker — молодец. Признание, респекты и восхищение ему (тебе, SM, если ты читаешь это) за труд.]
Now, kiss!
Сирил, так вся отечественная спектрум-сцена — это один большой драмакингдом)