DJ BOOSTER 4 — версия 4.15

Автор: | 04.12.2018

Вместо тысячи слов. На видео демонстрируется накрутка для всех сайтов и скорость работы программы. Полезные примечания размещены в описании к видео.

Под катом — история этого обновления и бесплатная трехдневная лицензия — в конце поста.

Видео

У меня подозрения, что многие люди, как и я, не читают описания к видео на YouTube, поэтому очень кратко о важном (полностью повторяться не буду).

Видео записано одним дублем и идет в реальном времени, без ускорения видеопотока. Для накрутки используется публичные прокси, проверенные лицензионным коммерческим ПО, со скоростью отклика до 1200 мс. Скорость работы на приватных прокси с меньшим временем отклика будет выше.

Скорость накрутки на видео доставляет достигает (прослушиваний и скачиваний в час соответственно):

  • Soundcloud — более 10 тысяч
  • Showbiza — 15 и 10 тысяч
  • Freshrecords — 25 и 20 тысяч
  • Promodj — ну тут поменьше, да

Это не предел, так что я планирую снять видео с накруткой на максимально возможной скорости (широкий канал доступа + быстрые приватные прокси). Будет интересно.

Обновление 4.14

Во вступлении к посту, посвященному этому обновлению я написал «Очень полезное обновление» (уже зачеркнул). Что ж, будем честны, это было очень хреновое обновление.

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

Конечно, это не реальный скриншот, а метафора. На самом деле все было не настолько ужасно (но и не очень хорошо).

А теперь я расскажу Вам фантасмагорическую историю в нескольких главах.

Фантасмагорическая история в семи главах

Ни в коем случае я не пытаюсь оправдаться. Это не оправдания. Я просто хочу, чтобы Вы знали, что мне пришлось пережить, и какие реальные действия были произведены, чтобы восстановить работоспособность приложения.

Это максимально краткое изложение того, как прошла моя неделя между обновлениями.

Глава 1 — Первый час после обновления 4.14

Разработку я веду на отдельном ПК, на котором и произвожу основные тесты. После всех тех замечательных вещей, о которых было рассказано в предыдущем посте, я проверил работу новой версии и загрузил ее для обновления. Написал пост.

После чего немного собой погордился (10-15 минут).

На второй машине обнаружилось, что при при работе с https ссылками могла появиться замечательная ошибка (лицезреть которую Вы можете на изображении сверху). В очень редких случаях она возникала во время работы в случае если поток был подвешен http соединением из-за хренового прокси, вследствие чего соединение принудительно завершалось, что и приводило к ошибке. Также она могла возникнуть неопределенное количество раз (реже ее не было совсем, чаще возникала в 1-4 потоках) при завершении работы.

Отмечу, что перед загрузкой обновления я проводил тесты на второй машине, и встретил этот баг. Затем я внес исправления в исходные коды и сделал повторные тесты — и ошибка в этот раз случайным образом не возникла. Я подумал, что баг исправлен, но мне просто повезло.

Осознав всю парадоксальную прелесть ситуации я принялся судорожно искать ошибку в надежде, что успею исправить ее, пока никто не заметил. И вот уже обновление скачали 1 раз, вот уже 3 загрузки, а вот и 8 скачиваний. А я вижу цифры и думаю: «Бл%ть!».

Где-то у меня был программистский комикс на эту тему, но я не могу его найти.

На попытки заставить работать новый код ушли сутки.

Глава 2 — Работает, не трогай

Есть такая шутка у программистов, и даже не одна, но сейчас не об этом.

Работая над обновлением 4.14 передо мной встала дилемма.

В версии 4.14  я переписал код потоков, изменил логику их работы и исправил несколько потенциально уязвимых мест. Благодаря внесенным изменениям стал не нужен костыль очень хитрый и умный код, отвечающий за завершение http соединений в случае, если они подвесили работу потока, который тянулся еще из DJ Helper 3. И это было очень круто. По крайней мере, мне так казалось.

Оказалось, что зря казалось. Совершенно правильно написанный код отказывался работать без этого костыля кусочка гения программистской мысли.

Тогда я попытался вернуть все обратно, чтобы понять, в каком же месте все поломалось. Сначала вернул старый код частично, а потом и целиком, вернул старые SSL библиотеки (которые были обновлены в версии 4.14), скачивал их разные официальные версии и пытался использовать даже нечто необычное, пробовал разные комбинации из всего этого и занимался особенным и утонченным сексом с Google.

На это было затрачено два дня. Ничего не помогло. Нечто, что приводило всю эту систему в равновесие, было безвозвратно утеряно.

Глава 3 — Synapse идет нахер

Ясно было только одно: проблема в Synapse — библиотеке, которая используется для работы с сетью. Она просто не работала правильно.

Я уже писал о том, какая эта библиотека замечательная и как с ней приятно работать. Но самый главный ее недостаток в том, что она уже много лет не обновляется — и это корень всех остальных проблем. Но весь код DJ Helper 3 был написан с ее использованием, поэтому и DJ BOOSTER, являясь разработкой на основе исходных кодов DJ Helper 3, вынужденно использует именно библиотеку Synapse (но не везде, об этом ниже).

DJ BOOSTER 4 во многих местах кода для работы с сетью использует библиотеку ICS — например, модули для работы с лицензиями и для проверки обновлений написаны на ее основе изначально, а некоторые модули были переписаны под нее уже позже.

Но некоторые модули так завязаны на Synapse, что изменить их под ICS — значит переписать целые простыни кода. Один из таких модулей — поток накрутки.

Synapse идет нахер. За два дня Synapse так выбесил меня, что я наконец-то на это решился. И все переписал.

Глава 4 — ICS торт, но не очень

Я давно хотел это сделать. И на это было несколько основных причин:

  1. Лучшая стабильность и отсутствие глюков (как оказалось, не на 100%, об этом ниже)
  2. Разработка все еще идет (последняя версия вышла в ноябре 2018)
  3. Асинхронный режим работы (удобен для использования не в потоках)
  4. Наличие важных возможностей, без которых невозможно реализовать некоторый функционал (например, ограничение занимаемой пропускной способности канала доступа в Интернет — программа может запросто занять всю доступную вам скорость вашего интернет соединения)
  5. Местами более удобный функционал (например, встроенные поля для заголовков запросов и встроенные возможности по работе с gzip)
  6. Нормальная работа с SSL
  7. Потенциальная возможность перейти на Delphi XE | RAD (и бонус к этому — возможность разработки версии под MacOS, но с условием экспериментальной поддержки этой платформы библиотекой ICS)

А теперь о минусах:

  1. Хреновая документация. Это не документация, а огрызок. Огрызок от черновика наброска оглавления документации.
  2. Очень мало информации и в русскоязычном, и в англоязычном сегменте Интернета. Мало, блеать! Это значит почти ничего, а даже в том, что есть присутствуют ошибки в коде или, например, в описании того, что делают те или иные методы.
  3. Демо-примеров много, но они не демонстрируют многих очень важных аспектов работы.
  4. Иногда совершенно полоумная логика работы, понять которую можно только методом тыка (см. предыдущие пункты).
  5. Никакая работа с Cookies, серьезно?
  6. Еще некоторые прикольные вещи, лень писать.
  7. Баги или фичи — я не понял.

Что ж, несколько дней я занимался сексом с ICS.

Секс делался веселее благодаря паре веселеньких вещей:

  1. Сниффер, которым я обычно пользовался для проверки запросов не видит запросы ICS, или видит, но не все. И даже Charles без задротских настроек также не видит (или не видит даже с ними).
  2. Моя рабочая машинка на Windows XP (не спрашивайте) и ICS не умеет работать с SSL под Windows XP из-за отсутствующих библиотек. Я пытался это исправить, но это не исправляется, или же я рано сдался, где-то на третьей библиотеке (в любом случае таскать их все вместе с DJ BOOSTER и распихивать по всем системным папкам — идея не очень).

Сначала я написал небольшой класс-обертку над ICS, чтобы облегчить некоторые простейшие действия, и вот эту прелесть (для тестирования):

Изображение кликабельно

Всего в результате немного больше 500 строк кода (тут важнее количество времени, которое было потрачено на это).  Все замечательно работало. После этого я произвел необходимые изменения в коде потока и начал тестирование.

Несмотря на то, что все отлично работало в тестовом приложении, в DJ BOOSTER возникали ошибки, но опять очень странные (ссылка меняла вид, а после нескольких итерации превращалась в белиберду, после чего можно было наблюдать вышеуказанное окошко). К этой ошибке мы еще вернемся.

Конечно, я не сдался сразу и еще немного потанцевал с бубном. Мой танец ICS не впечатлил.

Глава 5 — Может быть, это CR?

Однажды я уже встречался с багом, когда все работало очень странно, хотя с кодом все было в порядке. В тот раз после долгих поисков я обнаружил, что причина этим странностям — непонятно откуда взявшиеся (возможно, после копирования-вставки) непечатные символы, из-за которых компилятор сходил с ума.

Я загрузил исходный код модуля в Notepad++, нажал магические комбинации Ctrl+A и Ctrl+J и проверил результат.

На скриншоте виден модуль OverbyteIcsWSocket в разделе uses

С надеждой я удалил этот символ и привел код в порядок. Может быть, дело в CR?

Нет.

Глава 5 — ICS часть 2

Ок, подумал я. Тогда нахер все эти классы-обертки и прочие прелести. Будем работать с ICS напрямую внутри потока. Про красоту кода можно забыть, но сейчас главное — восстановить работу приложения, а уже после этого я все сделаю мило и красиво.

Я сделал файл с уже пятой версией модуля потока накрутки, перенес туда новый код потока, закомментировал код во всех методах, оставив только метод Execute, и начал работать с самого начала. Начал я с режима посещений, как с наиболее простого (нужно только получить указанную ссылку с помощью GET запроса) — и………… все получилось. Я протестировал работу с несколькими ссылками и все работало отлично.

Я воспрял духом и продолжил работу. Закончил метод, отвечающий за загрузку ссылок и начал тестировать работу.

Ссылки с переадресацией не загружались.

Глава 6 (короткая) — Суббота

Исходники я видеть уже не мог. Я весь день спал.

Глава 7 — Фантастические твари и где они обитают

Я сделаль.

Сие чудесное творение с творческим дизайном было рождено в процессе тестирования ICS. С помощью этого супер крутого приложения были протестированы все режимы работы ICS во всех возможных комбинациях.

Мне удалось обнаружить одну замечательную особенность работы этой библиотеки, связанную с параметром «FollowRelocation», которая осуществляет автоматическую переадресацию.

Она отлично работает вне потоков, что можно увидеть на скриншоте вверху.

Она отлично работает в режиме MultiThreaded, если запущена в одном потоке.

Но если в том же самом режиме выполнить тот же самый код с идентичными параметрами, но в нескольких потоках, то ICS уходит в цикл бесконечной переадресации, а при достижении их лимита завершает запрос с кодом 301 (или другим HTTP статус кодом 3xx, полученному при первом запросе).

Кроме того, выяснилось, что возникает неясная ошибка, если передать переменную с ссылкой переадресации при рекурсивном вызове:

  1. Get(redirect_url) — Ошибка!

Но все работает прекрасно, если сделать вот так:

  1. str = redirect_url
  2. get(str)

Так что мой первый модуль для ICS вполне мог бы работать, если бы я добавил эту строку. Это уличная магия.

И вся эта вкусняха приправлена увлекательным квестом по работе ICS с Cookies.

DJ BOOSTER 4 — Обновление 4.15

Результатом всех моих приключений стало обновление 4.15.9, build 115.

  1. Программа работает. Ошибки версии 4.14 исправлены. Работа приложения демонстрируется на видео в начале поста.
  2. Потоки накрутки и модуль для работы с Soundcloud переписаны под ICS. Понять, что DJ BOOSTER 4 перешел на ICS можно по наличию двух новых файлов в папке программы — «libcrypto-1_1.dll» и «libssl-1_1.dll». Две другие dll оставлены для той части кода, который все еще работает на Synapse.
  3. Из дополнительных плюсов перехода — возможность использовать работающий таймаут для прокси, ограничивать занимаемую пропускную способность канала доступа, реагировать на ошибки при запросах (например, менять прокси при соответствующей ошибке сразу вместо того, чтобы делать несколько попыток соединения).
  4. Потоки теперь завершаются нормально в течение 20-30 секунд без необходимости принудительно прерывать соединение и убивать поток.
  5. Потоки не подвисают при http запросах на некоторых прокси. Удален костыль, отвечавший за их разморозку.
  6. Багфиксы и небольшие изменения.

История версий

Бесплатная трехдневная лицензия

Идентификатор — demo[demo@djcheat.ru]
Ключ — 74AW2-A2HAR-I4PQR-R57LS-J2HL5-3Y0SS-F48A2-QK98P-5GML6-28HV

Вы можете использовать эту лицензию, чтобы протестировать работу новой версии DJ BOOSTER. Лицензия действует со субботы, 8 декабря.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.