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% изображений эта тупая недо-пргоа не смогла загрузить. А какой ХВ без пикч, эм ай райт?! Это ж как рыба без мяса.
Ну что же, учитывая мой недавний опыт использования сторонних недо-утилит, я решил сделать свой собственный загрузчик пикч с хэртстоуном и дамами из высшего общества. В конце концов — хочешь, чтобы было сделано правильно — сделай это сам. В общем, вот мой алгоритм действий:
- Своим собственным движком поиска в файлах я нашел ВСЕ ссылки во всем ХВ (все что начинается на
http/https
). Получился 47 МБ-ный файл.1 539 095
линков. - Отфильтровал все пикчи —
74 313
линков. - Протестил каждый линк — был ли он уже загружен
httrack
-ом, или нет —51 486
пикч зафейлились. - Запилил крутой мультипоточный загрузчик линков (теоретически может грузить не только пикчи) и начал массово грузить ИНТЕРНЕТ (ЛИТЕРАЛИ).
- Перезапускал этот процесс раз 30, так как меня постоянно что-то блочило. Я так и не понял, что — провайдер, рутер или же сама сетевая карта ПК вырубалась, но мне приходилось отрубать соединение и выжидать какое-то время, потом возобновлять загрузку. Анноинг.
- Фиксил много багов в загрузчике, такие как неправильный парсинг редиректов (пришлось создавать case-insensitive поиск в моих
ТЕКСТ
-ах, и многие другие функции улучшать), детектинг бесконечных редиректов, ошибки парсинга и т.д. - Часто вместо пикчи сайт выдавал HTML или какой-то другой мусор, их все я сохранял с расширением
.not_an_image
. - Просканировал все
.not_an_image
что бы наверняка знать, что это не изображение (проверка первых байтов), удалил весь мусор. После всех этих бесконечных загрузок получилось схоронить25 682
изображения (это включая возможные дубликаты). - Сделал так же проход загрузки с VPN-а Нидерландов. Это позволило загрузить пикчи с ресурсов, которые, гады, блочат украинский трафик (вк, яндукс, рамблер и т.д.).
- Используя инфу из
.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
- В 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…</span> ---> … — это 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
:
- Супер-резкий поиск по всем заголовкам варов (стандартный режим, просто запустите
hwfind.exe
): - Более медленный, но всевидящий поиск по всему контенту (включая описания варов и все комменты/аргументы, запуск —
hwfind_in_comments.cmd
или аргумент командной строки-fincom
): - Поиск ВСЕХ варов и аргументов (исключая обычные комменты) юзера (запуск —
hwfind_all_user_arguments.cmd
или аргумент командной строки-fauargs
): - Поиск ВСЕГО КОНТЕНТА сгенерированного юзером (запуск —
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.ruholywars.local
Сколько времени на это ушло:
- Начало проекта около
2023.08.01
(первая загрузка ХВ с вэб архива) - Потом было несколько перерывов пока я грузил сайт с local host и переключался на другие свои проекты
- Самая активная фаза — начало
2023.08.25
(вытаскивание всех ссылок на изображения) - Конец
2023-09-09 12:33:16
— момент написания этой строки
+ Еще нужно много оформлять это все и делать видосики\гифки =(
Исходники созданных программ (предупреждение: так как я очень спешил, код не очень красивый):
- web2loc — "локализатор" сайтов
- linkd — мультипоточный загрузчик линков
- hwfind — GOOGLE с MTG и баллеринами заточенный под ХВ
Кастомные библиотеки от которых зависят эти программы:
- ScienceDiscoverer's STD Libraries — базовые низкоуровневые библиотеки оптимизированные под Windows
- Notepad++ MSVC IDE — Integrated Development Environment где я это все делал
Comments