Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Те, кто на Хабре не первый день, наверняка знают, как мы в RUVDS любим устраивать всякие активности. Что мы уже только не делали. Запускали сервер в облака, делали коллаб с создателем Дюк Нюкема, даже варили свое админское пиво и готовили хабрабургеры, всего и не упомнить. Все эти проекты рождаются из малого — простой идеи. Так и здесь, все началось с того, что захотелось посмотреть как наши читатели мигрировали на удаленку, и как они там удобно устроились. От простой идеи «а давайте сделаем пост, где будем в комменты постить фотки», затея выросла в полноценный конкурс, со специально написанным для него телеграм ботом, лендингом и даже призовым фондом. В этом посте мы подведем итоги конкурса, объявим победителя и расскажем, с какой войной накруток нам пришлось столкнуться и как мы из этого выбирались.
Несколько недель призывали вас делиться фотографиями своих рабочих мест и модерируя конкурс, чувствовали, что сидя дома за мониторами, нам удалось побывать в гостях у нескольких сотен людей. Всего в конкурсе приняло участие более 700 человек из 211 городов со всего мира. Были забавные моменты, например, когда участник присылал фото из тех мест, где жил модератор.
Рабочее место Михаила, работающего на Тенерифе
Каждое присланное вами фото рабочего места, было так же индивидуально, как и люди, которые за ними работают. Иной раз было даже интересно пофантазировать о личности человека, который умудряется фронтендить за экраном небольшого ноутбука или человека, спокойно работающего среди горы проводов, микросхем и всего такого.
Рабочее место Ильи, инженера-электронщика из Нью-Джерси
Но не обошлось и без неприятных моментов. Накрутки голосов себе, пакости участникам, выходящим в топ честно. Будет не лишним рассказать, как справлялись с этим.
Механика конкурса и борьба с накрутками
Накрутки — это классическая проблема конкурсов с лайками. Обычно их проводят в ВК, Instagram или Facebook, которые не любят отдавать данные разработчику и не позволяют организаторам редактировать голосование. Поэтому решено было использовать Telegram — сразу после отправки фото на конкурс, пользователю предлагалось подписаться на канал и быть в курсе новостей.
Проголосовать в конкурсе можно было двумя способами: поставив лайк на сайте (с авторизацией через Telegram) или прямо на канале, где публиковались фото новых участников.
Голосование на канале
Мы написали специального бота, который агрегировал лайки с канала и сайта. В самописной системе голосования можно было отследить буквально каждый лайк и не просто банить тех, кто накручивал голоса, а выборочно удалять лайки от ботов.
В начале конкурса мы особо не проверяли логи, наивно веря, что находимся в своей закрытой, дружелюбной тусовке айтишников. Но за несколько дней до конца конкурса у нескольких участников резко появилось +1000 голосов. А когда мы открыли логи, чтобы отследить накрутки — началось настоящее мясо.
Интриги, подставы, расследования
С началом борьбы за главный приз PlayStation4, лайки начали накручиваться просто нещадно. За час у игроков из первой десятки начало появляться по 100-300 лайков в час. Тогда взяли только трех, которые внезапно приобрели по +1000 лайков, просмотрели их логи и забанили, удалив из конкурса.
Так выглядит лог с очевидной накруткой: по правому столбцу, видно, сколько лайков добавлялось в минуту. Даже если у человека есть популярный канал, в котором он себя прорекламирует, такой сплоченности и наплыва сможет добиться разве что Елизавета II, сделав обращение к нации.
Поняв, что накруток много, перепроверили всех, кто выигрывал промежуточные призы — почти у всех нашлись множество лайков от ботов и их пришлось удалить из конкурса.
Но мы допустили стратегическую ошибку, рассказав об этом на канале. После этого началось какое-то безумие — у каждого из участников первой десятки добавилось буквально сотни очевидных бото-лайков, разом и у всех. Стало очевидно, что кто-то пытается массово подставить игроков, которые вырвались вперед. Отследив, на ком заканчивалась бешеная накрутка, поставили в уме звездочку на этом участнике — скорее всего, это его рук дело.
Просто банить участников уже было нельзя и мы начали чистить голосование, убирая лайки от ботов. Приходилось отслеживать логи по 2000 строк и под раздачу могли попасть и настоящие голоса. Пришлось составить алгоритм определения, бот поставил лайк или человек. Для удаления ботов сделали специальную команду в телеграм — достаточно было ввести команду и вставить уникальные ID лайков, которые надо удалить.
Читаем логи, вычисляем ботов
В рамках этого конкурса, лог — это простой xls файл, в котором указаны все данные конкретного участника. Внутри каждого лога:
- уникальный id поставленного лайка
- имя пользователя в телеграм, поставившего лайк
- его ник в телеграм
- точные дата и время лайка
Самый простой отсев происходит через дату и время. Если есть четкий паттерн (например, по 11 лайков в минуту), то это, скорее всего, накрутка и эти голоса можно смело удалять.
Виден четкий паттерн — ровно по 10 в минуту. Это 100%-я накрутка.
Если четкого паттерна не видно, но все равно лайки набирались слишком быстро, приходилось писать участнику и напрямую спрашивать, где и как он пиарил свой пост. Если игрок занимал в это время первое место (а оно постоянно менялось, когда мы чистили ботов), то могли и попросить скриншоты или ссылку на призыв голосовать в чате или канале. Потом мы соотносили время поста, количество просмотров и сколько лайков с этого момента прибыло. Если данные не сходились, это становилось причиной страйка.
Один участник со слишком подозрительным скачком голосов прислал в подтверждение скрины своего Whatsapp, где он в личке просил проголосовать друзей. На скриншоте люди отписывались, что проголосовали и желали удачи. Сообщения «поставил лайк, удачи!» были датированы 13 числом, но в файле не было ни одного голоса за 13 число — все начинались от 14-го апреля.
Люди массово отписываются, что поставили лайк.
А в логах нет ни одного лайка за это время — вполне возможно, что кто-то отписался и не проголосовал, но так массово — маловероятно. Если опираться на Бритву Оккама, то это просто попытка надуть остальных участников.
Мы проговаривали каждому участнику, почему он выбывает из соревнования. Участник из примера выше, после объяснения причин удалился минут на 30 и принес уже новые скрины, где ему желали удачи и обещали проголосовать от 14-го апреля, но тем не менее выбыл из игры.
Были случаи, когда череда подозрительных лайков действительно оказывалась настоящей. Таких случая было два. Например, дизайнер Вова из MentalGrowth — автор популярного канала про дизайн.
Он честно набирал голоса, публикуя на своем канале просьбы поднажать, но среди настоящих людей вклинились голоса ботов. Сам Вова утверждает, что он ни при чем и подписчики его канала решили ему так помочь, нагнав ботов. И мы от всей души ему верим — но так или иначе, его запись была очищена и под раздачу, возможно, попали и настоящие голоса. Поэтому мы передаем Вове привет и советуем подписаться на его канал.
Удаленные у Вовы боты. Сердце обливалось кровью, но что поделать, накрутка есть накрутка.
Другой сложный случай был с участником Артемом, который в итоге обошел Вову на пять голосов и выиграл PlayStation4. В его файле не отслеживался четкий паттерн, но при этом лайки пришли большим скопом и это вызывало сомнения.
Что делать, если паттерна нет, но сомнения все равно есть?
Попросили его показать посты, как и где он пиарил свое рабочее место. В логах были две точки скачка голосов, и их время совпало с постами на канале. Но конверсия была подозрительно высокой: из 448 просмотров почти 200 голосов. Тогда мы выбрали 25 случайных проголосовавших, написали им в личку и спросили: ставили ли они лайки, кому и как нашли этого человека. Боты никогда не отвечают на сообщения. Почти все из 25 ответили, за кого они голосовали и где был опубликован призыв о помощи.
Так, мы пришли к главному в этом посте: поздравляем Артема, старшего разработчика ПО в Intel с победой!
Публикуем также тех, кто набрал максимальное количество голосов в общем зачете
Вова, дизайнер в MentalGrowth, Москва
Элизабет, дизайнер в Jolocom, Берлин
Константин, Python Back-end developer в BSW, Томск
Александр, аналитик в НОРБИТ, Казань
Данил, «душитель питона» и ПМ на фрилансе, Крым
Boomburum, руководитель отдела по борьбе с пользователями в Habr, Москва
Жмем руку остальным участникам, в том числе и тем, кто смертельно обиделся на результаты — мы сделали все, что смогли. Мы всей командой RUVDS благодарим всех участников конкурса. Вы все — ярки и индивидуальны, спасибо вам за приглашение в гости и до новых встреч. Берегите себя!