HOLYWARS.RU — ВОЗРОЖДЕНИЕ

Все (включая меня самого) почему-то забыли про web.archive.org (Wayback Machine). Для начала небольшой экскурс в особенности этого суперпроекта. Непосвященному может показаться что вэб архив работает так: 2007.11.02-11:42:34 сохранил сайт, и пошел гулять. Потом 2008.10.01-12:34:42 сохранил, и т.д. На самом деле все намного сложнее. Робот (crawler) вэб архива сканирует и сохраняет не весь сайт целиком, а лишь какие-то его куски, отельные страницы. То-есть, например — 2007.11.02-11:42:34 бот пришел, сохранил вар 11223, 3441, 133, главную страницу, страницы юзеров 443, 12334, 9833 и свалил сканировать другие сайты. Потом 2008.10.01-12:34:42 опять пришел, сохранил вары 1123, 5441, 1, 14, 34, 42, 69, юзеров 1, 34, 42, 69, ну вы поняли принцип. Таким образом, сайт в архиве не единое целое, а совокупность кучи "снапшотов" с рандомных времен. Например, вар 42 может иметь 69 снапшотов с 2009 по 2022.

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

Теперь зная эту жесть, вы, так же, как и я, когда затевал все это безумство, должны понимать, что просто взять и загрузить сайт с вэб архива обычным сайт-риппером не выйдет. Слишком много нюансов, в сравнении с обычным сайтом. Все же, в глубинах StackExchange мне удалось нарыть небольшой гем (ЛИТЕРАЛИ). Эта штука берет и грузит самые последние снапшоты каждой страницы сайта и каким-то магическим образом сшивает это все в единое целое, так что оно работает как будто это нормальный сайт. Для того чтобы ее юзать нужен Руби. Я не захотел устанавливать Руби на главный СПК, так как какого хрена оно мне нужно кроме как для этой затеи? Поэтому я решил, что будет "легче" и "быстрее" установить его на вирт. машину линуксовую...

И тут началось. У меня была машина на Lubuntu которую я юзал давно чтобы играть с самим собой в стим игру для получения мультиплеерной ачивки без взаимодействия с другими хуманами. Прежде чем устанавливать wayback_machine_downloader я захотел врубить дарк-мод. Пол часа разбирался как это сделать. Пришлось сделать apt-upgrade (обновить весь софт системы). Это сломало к чертям весь граф. интерфейс, загрузка только в терминал. Норм да? После 2 лет обновил систему, и это все к чертям сломало. Норм система. ОК. Я переустановил эту тупую Лубунту. Установил прогу которая должна была включить дарк-мод. Ни хрена не работает. Исправить невозможно, 0 инфы в инете. Вау. ОК. Я посылаю к черту Лубунту, Бубунту и любые другие Убунты раз и навсегда. Устанавливаю последний Debian (впервые) с XFCE граф. оболочкой. Даркмод с коробки. Все работает. ОК, фрикин файналли. Урок на будущее — никогда не используйте Бубунту. Я, правда умудрился как-то сломать и Debian, пришлось переустанавливать разок, ну то такое. Короче с этим линуском головной боли просто тьма... Угх.

Кстати, несколько месяцев спустя, мне таки пришлось установить Руби, но не на основной СПК, а на вспомогательный Мобильный Персональный Компьютер на котором у меня стоит VPN. Это пришлось сделать, так как мне нужно было грузить поломанные страницы варов, а вэб архив, гад, меня почему-то забанил по IP. Не понятно почему, так как я ничего с него не грузил в больших количествах, хм. Ну так вот, установил этот ваш Руби за какие-то 10 минут. И все работает. Такі справи.

Но опять же, все далеко не так просто, как хотелось бы. Много дней спустя, я заметил, что около 30 варов сломаны — страница просто обрезана, половины или больше контента нету, просто обрыв и все. Пришлось анализировать все файлы, находить эти страницы, и грузить ВСЕ снапшоты сломанных страниц за ВСЕ время, потом среди сотен этих снапшотов находить самый последний, который не сломанный, и заменять им сломанный. Жесть та еще.

Ну ОК. Загрузил я ХВ, радости полные штаны. Но радость быстро обрывается, так как сайт полностью сломан если открывать его как локальный ресурс. Все линки сохранились как они и были на сервере. Хм. Я установил АПАЧ сервер, долго разбирался как же его поднять, и наконец поднял локальный сервер, и вуаля, холиварс полностью рабочий! Все линки работают, все стили и джаваскрипты рабочие, прелесть прям. Но блин, этот хреновый сервер та еще головная боль. Мне и самому он не нужен и многим холиварщикам тоже, наверно, будет впадло его устанавливать (или же не будет возможности, времени и т.д.). Поэтому мне приходит в голову "гениальная" идея. Почему бы не натравить обычный сайт-риппер на 127.0.0.1/ и не "локализировать" сайт? Я уже несколько раз грузил сайты этой прогой — httrack. Вроде норм загружала, сайты были рабочие. Ну я и натравил. Грузила очень долго, около 4-5 дней (она пыталась грузить все внешние изображения). В результате выдала овер 9000 ошибок, но типо, "справилась". ОК. Ну я запускаю, смотрю. ОК. Вроде норм, стили робят, джаваскрипт робит. Пару штук сломано, но оверолл все более-менее приемлемо. Но вот проблема, около 90% изображений эта тупая недо-пргоа не смогла загрузить. А какой ХВ без пикч, эм ай райт?! Это ж как рыба без мяса.

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

  1. Своим собственным движком поиска в файлах я нашел ВСЕ ссылки во всем ХВ (все что начинается на http/https). Получился 47 МБ-ный файл. 1 539 095 линков.
  2. Отфильтровал все пикчи — 74 313 линков.
  3. Протестил каждый линк — был ли он уже загружен httrack-ом, или нет — 51 486 пикч зафейлились.
  4. Запилил крутой мультипоточный загрузчик линков (теоретически может грузить не только пикчи) и начал массово грузить ИНТЕРНЕТ (ЛИТЕРАЛИ).
  5. Перезапускал этот процесс раз 30, так как меня постоянно что-то блочило. Я так и не понял, что — провайдер, рутер или же сама сетевая карта ПК вырубалась, но мне приходилось отрубать соединение и выжидать какое-то время, потом возобновлять загрузку. Анноинг.
  6. Фиксил много багов в загрузчике, такие как неправильный парсинг редиректов (пришлось создавать case-insensitive поиск в моих ТЕКСТ-ах, и многие другие функции улучшать), детектинг бесконечных редиректов, ошибки парсинга и т.д.
  7. Часто вместо пикчи сайт выдавал HTML или какой-то другой мусор, их все я сохранял с расширением .not_an_image.
  8. Просканировал все .not_an_image что бы наверняка знать, что это не изображение (проверка первых байтов), удалил весь мусор. После всех этих бесконечных загрузок получилось схоронить 25 682 изображения (это включая возможные дубликаты).
  9. Сделал так же проход загрузки с VPN-а Нидерландов. Это позволило загрузить пикчи с ресурсов, которые, гады, блочат украинский трафик (вк, яндукс, рамблер и т.д.).
  10. Используя инфу из .txt файлов которые я сохранял вместе с пикчами, сформировал вложенные папки для каждого пикча таким образом: http://foo.com/bar/baka/lol.jpg ---> D:\holywars.ru\foo.com\bar\baka\lol.jpg, при этом заменив все байты типа %3F%AB%33 в корректный юникод 8 и обрезав хвост у линков типа http://foo.com/lol.jpg?some-useless-crap=1
  11. В HTML файле откуда был линк я также фиксил расширение файла, так как тупой httrack, если не смог найти пикчу заменял расширение с .jpg на .htm...

Я использовал исключительно свои собственные лоу-левел библиотеки которые я разработал еще в прошлом году, и СУЩЕСТВЕННО улучшил в последние 3-4 месяца. Это такие базовые штуки как свои собственные стринги (я их называют ТЕКСТЫ), динамические массивы, поиск, замена, удаление и все возможные операции с текстами, загрузка\сохранение файлов, печать в консоль, и т.д. Все написано с нуля и на самом низком уровне, который я смог (пока) осилить. Из стандартных функций я юзаю только VirtualAlloc/HeapAlloc, да и memmove/memset. Я даже умудрился запилить свои собственные memcopy/memcmp. Они работают быстрее чем стандартные, вот. memmove/memset я тоже сделал, но они медленнее стандартных в 4 раза где-то. Так и не смог понять почему, видимо какие-то хардвэр читы юзают стандартные либы. Исключение — curllib. Я пока слишком тупой чтобы понять, как работает RSA криптография, поэтому я не могу запилить свою собственную HTTPS либу. HTTP это легко, но какие сайты его юзают сейчас? Отож...

И вот я уже почти в полном восторге! Неужели? Все эти муки позади?! Наконец все закончено???!!

Не тут-то было... Внезапно выяснилось, что httrack оказался еще более тупой хренью чем я думал. Видите ли, эта тварь посмела пропустить около 3000 варов! И кто знает сколько юзеров и другого контента. Да. Тупо не загрузила их и все. И это с локального сервера, КАРЛ!.. Нет слов.

Ну что, ж, подумал я:

Сделал "локализатор" сайтов 2000, с нуля (а как же еще?). Ну, не совсем с полного нуля. Я использовал наработки своих прошлых программ. По крайней мере, проанализировав то как httrack изменил файлы, я смог понять, что нужно делать, вообще. Принцип довольно простой, но реализация та еще жесть. Нужно "всего лишь" заменить все линки типа href="/comments/125/" на href="../../comments/125/index.html". index.html нужен так как браузер сам тупой, и без сервера не может, бедный, найти индекс файл страницы. Если кто не знает, .. возвращают на папку назад. Так что, выходит, что браузер из папки какого-то вара идет назад один раз, оказывается в comments, потом еще раз, оказывается в корневой папке сайта, потом уже идет по /comments/125/index.html и открывает вар 125. О, ну да, еще есть линки типа href="http://holywars.ru/comments/125/", их тоже нужно было заменить на относительные... Жесть кароче. Нюансов туча. Например, если линк ссылается на коммент href="http://holywars.ru/comments/125/#comment_224554", то /index.html нужно вставлять перед #, иначе ни черта не сработает.

После всей этой жести, вроде как получилось. Неужели? Вот только не фурычил JavaScript генерации линков на комменты (ну знаете, значок цепочки над каждым комментом). В нем там были, опять же, относительные ссылки для сайта, я их поменял, добавил /index.html и вуаля, ссылки на комменты заработали!

Еще я сделал ХВ даже лучше, чем он был. А именно, я полностью выпилил идиотскую практику обрезания. Да. Обрезания хреновых юзернеймов. Ох, как же меня это бесило в свое время... Например:


<span class="name" title="ScienceDiscoverer">ScienceDisco…</span> ---> вот как было
<span class="name" title="ScienceDiscoverer">ScienceDisco&#133;</span> ---> &#133 — это HTML ENTITY ...
<span class="name" title="ScienceDiscoverer">ScienceDiscoverer</span> --->  как я это поправил

Конечно же, для всех обрезанных, не только для себя =)

В страницах юзеров почему-то не было линка на страницу Её комментарии (562) / Его комментарии (36780), вставил ее всем юзерам.
Удалил бесстыжую рекламу ютуб канала восьмого со всех страниц.
Удалил яндекс метрику со всех страниц.

Это все я делал, при этом не трогая никаких внешних ссылок (пикчи, сайты, ютуб видео и т.д.), все они сохранились в оригинальном виде и работают. Конечно же, если у вас есть интернет и трафик не блочит рашка. В результате вышла такая себе, "онлайновая" оффлайновая локальная версия холивар.сру. Карманный холиварс, можно сказать. Эта версия занимает минимум места, и не есть очень жирной. Это меня даже удивило, что все те тонны инфы, которые мы нагенерили на ХВ за все эти годы, занимает всего каких-то 3 ГБ в распакованном виде и около 500 МБ в архиве. Конечно "ВСЕ" это не очень точно, так как я не могу быть уверен на 100% что вэб архив сохранил прям все. Но большинство, точно.

Из 18 330 варов в присутствии 17 497. То есть, 833 вара или были удалены из сайта, или же вэб архив их не схоронил. В любом случае, это не такой уж плохой результат — 95.5% варов были спасены! Опять же, повторюсь, что они в разной степени актуальности. С юзерами все намного более печально (но может оно так на самом ХВ и было?). Из 11 854 юзеров присутствуют 4 574. 7 280 (61.4%) кануло в Лету. Каких-то может вэб архив не схоронил, каких-то может злые админы удалили, кто знает? При чем, только у 130-и сохранились страницы комментов, а страница варов у 689 (опять же, например, моя страница очень старая и не актуальна). Похоже, сохранились только самые "продуктивные" ¯\_(ツ)_/¯

Еще я сделал первый "официальный" дарк-мод для холиварсру!


Он далеко не идеален, и может кому-то не зайдет, но глазам все равно значительно легче читать весь наш криндж. По умолчанию стоит стандартный режим. Чтобы переключится в тёмный, запустите dark_mode_toggle.cmd, он заменит все нужные файлы. Чтобы вернуть светлый режим, опять запустите его. Но обязательно перезапустите браузер после смены, так как он кеширует пикчи и ХВ будет некорректно выглядеть если не перезапустить.

Еще пришлось много фиксить мелких багов в CSS файлах... С ними какой-то полный хаос вообще. Я не понимаю, что это за хрень. Большинство страниц юзают файлы из pulic/cache/css в виде каких-то странных бандлов типа bundle_54c4c1ecb9a390d2b35d095dfe6f513a.css_1480526241 или bundle_54c4c1ecb9a390d2b35d095dfe6f513a.css_1480709488. Непонятно толи это вэб архив их посоздавал или это ХВ так и был криво сделан? При чем этих бандлов куча, и они разные. И разные страницы юзают разные бандлы. Жесть какая-то, кароче. Так-сяк пофиксил их. Еще некоторые очень старые страницы юзают CSS из public/css. Да уж.

Не верится, что я дошел до этого, но вот. Но погодите, ведь еще нужно сделать полностью оффлайновою версию ХВ!

АААА! ЭТО НИКОДА НЕ КОНЧИТСЯ!!!!!!!!!!!!!11111

Для этого я опять прогнал свою супер-прогу по всем файлам и заменил во всех тегах <img> и <a> ссылки таким образом: http://foo.com/lol.jpg ---> ../../web/foo.com/lol.jpg Осталось только прогнать мою прошлую прогу которая рекурсивно создает папки и копирует пикчи, но уже не в корень папки созданной тупым httrack, а в папку web нашего карманного ХВ. Таким образом, все внешние пикчи будут в отдельной папке, что делает всю эту структуру намного более адекватной.

В результате всей этой чёрной магии было создано 27 565 папок и скопировано туда 19 162 изображения. То-есть, 19 162 пикчи и есть финальное число уникальных пикч которые удалось загрузить. Размер всего этого добра составил 2 715 502 137 байт (2.52 ГБ). Добавьте до этого 2 540 352 578 байт (2.36 ГБ) чистого ХВ и получается 5 255 854 715 байт (4.89 ГБ). То есть, почти 5 гигов в распакованном виде. Опять же, я ожидал намного большего суммарного размера пикч. Интересно.

Многие, наверное, могли догадаться что такой "локальный" сайт никогда не сможет работать 100% так же, как и вэб версия. Проблема в том, что очень много активного функционала работало на PHP, который в свою очередь, может исполнятся только на сервере (да и PHP код вэб архив все равно никак бы не сохранил). Как результат, например, невозможно увидеть кто именно поставил +1 или -1 комментам/аргументам, так как инфа, похоже, хранилась в какой-то базе данных на серваке, и вэб архив ее конечно же не сохранил (а вот голосование за вары, видно ¯\_(ツ)_/¯). Но это не слишком критично. Что удручает так это то что поиск не робит. Без него сложно будет что-то найти, а прыгать по ссылкам АЛЯ The Wiki Game долго и тупо. Но не удручайтесь напрасно! ScienceDiscoverer спешит на помощь!

Короче говоря, я создал свой собственный ГУГЛ, специально заточенный под ХВ, да. Как ни странно, это заняло даже больше времени и усилий чем сама локализация сайта. Рууусишь языкъ создал море проблем. Искать в юникоде игнорируя большие буквы — это ужас =((. Алгоритм конвертации буквы для юникода на 38% медленнее чем для чистого ASCII. И это удручает. Пришлось фиксить море багов, скрытых нюансов еще большая тьма чем была раньше. Даже удалось отловить и придушить несколько ниндзя-багов в моих базовых библиотеках. Так что да, поиск в HTML это тот еще NightMareZ на яву.

Я предусмотрел 4 режима работы программы hwfind.exe:

  1. Супер-резкий поиск по всем заголовкам варов (стандартный режим, просто запустите hwfind.exe):
  2. Более медленный, но всевидящий поиск по всему контенту (включая описания варов и все комменты/аргументы, запуск — hwfind_in_comments.cmd или аргумент командной строки -fincom):
  3. Поиск ВСЕХ варов и аргументов (исключая обычные комменты) юзера (запуск — hwfind_all_user_arguments.cmd или аргумент командной строки -fauargs):
  4. Поиск ВСЕГО КОНТЕНТА сгенерированного юзером (запуск — hwfind_all_user_content.cmd или аргумент командной строки -faucont):

Вы можете создать линки себе на hwfind.exe с этими аргументами и юзать их вместо .cmd файлов для быстрого запуска разных видов поиска.

Для вашего удобства, я так же вытащил все все заголовки варов в файл all_war_titles.txt и всех всех юзеров и их ID в all_users.txt. Можете искать там, если вам так будет удобнее.

Примеры результатов поиска:

Найдено моих (ScienceDiscoverer ID9833):

  • Варов 168
  • Всех комментов 25805
  • Аргументов 1753

В то же время, на моей странице значится:

  • Его холивары (168)
  • Его комментарии (25994)

То есть, 189 комментов куда-то испарились. Толи вэб архив не сохранил вары с ними, толи их втихаря удалил злой ВОСЬМОЙ, кто знает? Но опять же, это только 0.7% от всех комментов. Не так уж и плохо.

Найдено симпловых (Simple_Not ID8616):

  • Варов 257
  • Всех комментов 54361
  • Аргументов 5414

В то же время, на его странице значится:

  • Её холивары (257) (ХАХА, СИМПОЛ ДЕВОЧКА!)
  • Её комментарии (54837)

476 утеряно (0.9%).

ЦП: Ryzen 7 3700X. Поиск всех комментов и варов симпла занял около 22-х секунд. Поиск моих занял 14 секунд. Честно говоря, я без понятия быстро это или медленно. Как думаете? Учтите, что все это на 1 ядре (нет мультипоточности).

Кстати, да, вы можете заметить, что введение поискового запроса очень примитивное, не так ли? Хехе. О да! Оно сделано с нуля и без ничего лишнего. Можно печатать, удалять бэкспейсом и вставлять CTRL+V. ВСЕ. А разве больше нужно для данной задачи? Вот-вот. Это кстати, моя первая имплементация текстового редактора. Я был просто в шоке насколько это просто сделать.

О и еще. Как ни странно, но вэб архив каким-то образом сумел выловить и схоронить ВСЕ .mp3 файлы с записями ваших гиперсоциальных конференций! Ну надо же. Все равно их невозможно было прослушать на сайте, так как флэш плеер уже давно браузеры не поддерживают. Я их выложу отдельным архивом, так как они довольно жирные 2 806 911 188 байт (2.61 ГБ).

В общем, without further ado:

GOOGLE DRIVE

holywars.ru без каких-либо изменений или модификаций (серверная версия) 438 МБ
holywars.local локальная версия без изображений 433 МБ
holywars.offline полностью оффлайновая локальная версия 2.94 ГБ
hw_audio собственно, гиперсоциальные конференции 2.16 ГБ

YANDEX DRIVE

holywars.ru
holywars.local

Сколько времени на это ушло:

  • Начало проекта около 2023.08.01 (первая загрузка ХВ с вэб архива)
  • Потом было несколько перерывов пока я грузил сайт с local host и переключался на другие свои проекты
  • Самая активная фаза — начало 2023.08.25 (вытаскивание всех ссылок на изображения)
  • Конец 2023-09-09 12:33:16 — момент написания этой строки

+ Еще нужно много оформлять это все и делать видосики\гифки =(

Исходники созданных программ (предупреждение: так как я очень спешил, код не очень красивый):

  • web2loc — "локализатор" сайтов
  • linkd — мультипоточный загрузчик линков
  • hwfind — GOOGLE с MTG и баллеринами заточенный под ХВ

Кастомные библиотеки от которых зависят эти программы:

Comments