Русский
Русский
English
Статистика
Реклама

Twitter

Перевод Внезапные имейлы, район наркоманов и время для сказок. Как Twitter первым перешел на вечную удалёнку

22.10.2020 14:22:35 | Автор: admin

Переход на удаленную работу, который раньше все считали временным явлением, превратился в массовый эксперимент, который закончится в лучшем случае ещё через год. Пока многие компании делают первые неуверенные шажки в условиях новой реальности, есть и лидеры, которые полностью к ней приспособились, и показывают пример другим. Производитель одежды REI, Facebook и Shopify из Канады только некоторые из ярких примеров.

Но лучшей компанией в США в плане перехода на удалёнку, внезапно, стала Twitter. Они первыми, ещё в мае, сделали публичное заявление о планах полностью перейти на работу из дома. Стороннему наблюдателю может показаться, что решение было чересчур скороспешным: огромная компания на 5200 сотрудников навсегда меняет методику своей работы всего через 2 месяца после начала локдаунов. Но на самом деле этот переход на удалёнку был долгим процессом, занявшим (втайне) последние несколько лет. Занимался этим лично основатель Джек Дорси.

Джек ДорсиДжек Дорси

Два предыдущих года Twitter незаметно менял свою офисную культуру, помогая сотрудникам, которые хотели бы куда-то уехать хоть на Гавайи, хоть в Ирландию, хоть домой, в более дешевый штат, чем Калифорния. Это стало официальной политикой компании: на любую просьбу о перемещении отвечать Да!. Всё началось с короткого и-мейла в 2018-м, отправленного СЕО Джеком Дорси. В нём он предлагал сотрудникам попробовать поработать из дома после продуктивного дня, который он провел так самостоятельно.

С тех пор Twitter начал экспериментировать с различными способами плавного перехода на удалёнку. Посылая людей из одного офиса по разным комнатам, чтобы они проводили виртуальные собрания, создавая особый язык жестов для видеоконференций (чтобы не перебивать спикера) и разрабатывая этикет для онлайн-собраний. Компания пыталась заранее адаптироваться к тому периоду, когда, как она ожидала, половина её сотрудников начнет постоянно работать из дома. При этом до пандемии у Twitter удаленно работали только 3% человек.

Зато в начале пандемии все сотрудники смогли быстро уйти на дистанционный труд. И компания смогла начать получать дополнительную прибыль. Например, в этом месяце Twitter сообщила о том, что она сдает в аренду три этажа своего офиса в Сан-Франциско, выполненного в стиле ар-деко. По планам компании, она не станет продавать никакой своей недвижимости, но будет сдавать её в аренду, пока она (возможно) не станет снова востребованной.

Джек Дорси говорил инвесторам ещё в феврале:

Наша концентрация в Сан-Франциско не приносит компании никакой пользы.

Руководители Twitter говорят, что, хотя пандемия ускорила процесс перехода, удаленная работа для всех сотрудников всё равно была бы целью компании. Они верят в то, что такая модель труда дает сотрудникам больше свободы и автономии. Что, по их мнению, улучшает мораль, способствует повышению продуктивности и, в итоге, будет удерживать людей в компании. Теперь перевод всех на вечную удаленку это одна из четырех официальных целей Twitter.

Конечно, компания сталкивается с проблемами. Так, менеджеры жалуются в интервью журналистам, что им стало сложнее организовывать сотрудников, работающих в разных временных зонах. И им пришлось сильно снизить время, проводимое в видеоконференциях: иначе люди просто начинали уставать от Zoom и терять нить беседы. Систему оценки продуктивности тоже пришлось полностью переработать чтобы она не относилась предвзято к удалённым сотрудникам. А недавно, когда у Twitter произошел массовый взлом аккаунтов (пострадали Обама, Канье Уест, Билл Гейтс, Илон Маск и другие), удаленные работники испытывали гораздо больше проблем с подключением к сервисам компании. Система отсекала их так же, как и потенциальных хакеров, пытающихся залезть в базы данных.

Но Майкл Монтано, вице-президент Twitter, говорит, что главной сложностью при переходе на удаленку всё-таки было создание естественной среды для возникновения социальных связей. Чтобы сотрудники могли свободно общаться и чувствовать себя частью единого целого. Сам Монтано, например, регулярно твитил фото со своего домашнего офиса в Сан-Франциско в надежде вдохновить других на то же самое. Как устроено рабочее место, что происходит за окном, чего забавного случается в обычной домашней жизни периода локдауна для этого они в итоге создали хештег и отдельный канал Slack. Так они пытаются достичь эффекта кулера для воды, где сотрудники могут случайно встречаться и устанавливать вполне реальные связи, не основанные только на том, что связано с их работой.

Два года в печи

Когда Twitter выбрала свою текущую штаб-квартиру в Сан-Франциско в 2012-м, это был успех и для города, и для компании. Просторное здание в стиле ар-деко, бывший торговый центр, уже несколько лет стояло пустым из-за своего неудачного расположения. А сейчас у него появился (успешный!) владелец, который может привлечь и капитал, и перспективных людей. Город снизил для компании налоги на 1,5%, а за это Twitter перебрался в район Тендерлойн, известный своими бомжами и наркоманами.

 Офис Twitter в Тендерлойн Офис Twitter в Тендерлойн

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

Следующие пять лет тысячи разработчиков, менеджеров, дизайнеров и юристов Twitter приходили в это здание каждый день, наслаждаясь бесплатными завтраками при зарплате от $10300 в месяц. Всё это время буквально в ста метрах от них, в пределах того же района, сидели городские сумасшедшие, наркоманы и уличные проститутки, продающие себя за несколько долларов в час.

Потом, в январе 2018-го, Дорси внезапно разослал всем сотрудникам имейл-сообщение. Оно застало врасплох всех, даже руководителя отдела кадров. Изначально имейл рассчитывался на узкий круг топ-менеджеров компании, но в последний момент Джек решил отправить его всем. В поле темы стояло Размышление. Дальше шло:

Сегодня я решил работать из дома. Я многое сделал, почувствовал себя более творческим и сфокусированным. Мы всегда должны оптимизировать работу так, чтобы люди могли максимально проявлять свою креативность. Поэтому мне бы хотелось, чтобы мы начали лучше воспринимать работу из дома.

Если у людей будут правильные ожидания и хорошая коммуникация со своими коллегами, по мнению Дорси, всё должно было бы получиться.

Когда Дженнифер Кристи, руководитель HR-ов Twitter, прочитала этот имейл, сообщающий о новой политике по поводу работы на дому, она говорит, её челюсть отвисла. Когда её нанимали в 2017-м, она думала, её целью станет снижение текучки кадров. Удерживать ключевых сотрудников Twitter тогда было сложно: социальная сеть всё никак не могла стать прибыльной, даже через 6 лет после своего IPO. У компании больше не было привлекательности стартапа, она не распределяла гигантские доли акций между своими работниками, а перспективы прогресса казались туманными. К тому же, она не предлагала зарплаты на уровне Facebook или Google.

Кристи говорит, её команда была буквально заспамлена сообщениями от сбитых с толку сотрудников. Все спрашивали, что имеет в виду Дорси. А поскольку никто толком не знал, команда начала в целом готовить план, чтобы сделать удаленную работу более удобной для всех.

В первую очередь они оценили потенциальные последствия такого перехода. В особенности открытия для сотрудников возможности перемещаться куда угодно, продолжая работать на Twitter. Были рассмотрены юридические вопросы, вопросы налогообложения, IT и безопасности, недвижимости, иммиграции. Они проверили налоговые последствия для работников, которые хотели бы переехать в те страны, в которых Twitter не имел права работать. А команда, отвечающая за безопасность, начала готовить системы компании для большого количества сотрудников, которые захотят зайти в них, находясь за пределами штаб-квартиры.

В декабре 2019-го, чтобы проверить новые системы на прочность, Дорси вдруг сообщил, что переедет жить в Африку в 2020-м (в итоге эти планы пришлось отменить из-за коронавируса). А двух топ-менеджеров, Лесли Берланд и Метта Дерелла, которых наняли в Нью-Йорке, не попросили переехать в Сан-Франциско, так что они продолжили работать по своему месту жительства.

Майкл Монтано, вице-президент компании, весь 2019-й тоже экспериментировал на себе. Он начал работать из дома 1-2 раза в неделю. Дистанционно руководить командой из 2000 человек оказалось не так сложно, как ожидалось: большую часть своих сотрудников Монтано не видел и тогда, когда он сидел в здании на Тендерлойн. В итоге он и большинство руководителей Twitter потратили год на посещение 35 офисов компании по всему миру, продолжая работать из отелей и самолетов.

В интервью журналистам Монтано рассказал:

Чтобы построить распределенную команду IT-проекта и децентрализованную компанию, я должен был выработать эмпатию к сотрудникам, которые не работают из того, что мы называли штаб-квартирой. Понять, в чем их проблемы и желания. Год вне офиса мне с этим очень сильно помог.

По словам Майкла Монтано, даже от слов штаб-квартира они в итоге отказались. Они как бы намекали, что основная активность компании происходит в каком-то конкретном месте. Хотя сейчас это место офисы каждого отдельного сотрудника. А своё большое здание, в котором раньше был торговый центр, они называют просто "SF Market".

Монтано объясняет, что в офисе он играет в Тетрис из собраний: следующее появляется сразу, как только прошло другое. Многие разработчики такие же интроверты, как и он, и гораздо лучше себя чувствуют, когда их работа не прерывается, и когда они могут оставаться наедине с самими собой. В таком случае домашний офис оказывается куда лучше.

Чтобы проверять сервисы видеоконференций, Монтано заставлял членов своей команды разработчиков использовать Zoom и Google Hangouts для связи друг с другом даже когда все они находились на одном этаже в офисе Twitter. А другие команды программистов вырабатывали онлайн-этикет, придумывая простой язык жестов, позволяющий показать что-то, пока другие собеседники говорят. Получились удобные сигналы на случай, если кто-то хочет быстро отойти или произнести свою речь.

Один из выработанных разработчиками Twitter протоколов назывался тихое чтение. В согласии с ним, каждое собрание начиналось с того, что все люди читали общий документ, и ставили в нём свои комментарии. А потом уже можно было начинать обсуждение проделанной работы и текущих задач. Другая система использовалась у HR: когда разговор скатывался в оффтопик, нужно было написать в чате акроним ELMO (Enough! Let's move on). Так получалось лишний раз не раздражать собеседников и в то же время четырьмя буквами дать понять, что текущая беседа зашла в никуда.

Twitter также установил политику радикальной честности, когда дело касалось онлайн-общения. Об этом рассказывает Андреев, разработчик с Гавайев. Он сбежал из Сан-Франциско за несколько месяцев до начала пандемии, потому что хотел жить в тихом месте. Но продолжал работать на Twitter удаленно, и участвовать в ежедневных собраниях.

Даже если это какая-то очень мелкая вещь, например, стул у коллеги скрипит, и это вас раздражает, об этом нужно говорить. Со временем, после тысячи собраний, у вас от этого уже начинается тик, вы ненавидите всё на свете. Поэтому у нас работает политика полной открытости.

Новые вызовы пандемии

После сообщения Дорси в январе 2018-го, и начала перехода Twitter на удаленку, проблемы только наслаивались. Wi-Fi сотрудницы, переехавшей в деревню в Ирландии, начал глючить во время важного собрания, так что ей пришлось использовать жесты рук, чтобы отвечать на вопросы коллег. Менеджер резко высказался перед сотрудником по поводу его производительности, не заметив, что жена работника была в бекграунде.

Но в целом подготовка помогла Twitter быстро справиться с изначальными проблемами пандемии. Компания перешла на удаленную работу уже 2 марта, одной из первых в США. И продуктивность персонала при этом почти не пострадала.

12 мая, через два с лишним месяца, Джек Дорси снова отправил имейл всем сотрудникам компании, на этот раз подписанный эмотиконом-сердечком. В поле темы стояло #ЛюбиГдеТыРаботаешь. Он написал:

Мы всерьез переходим на удаленную работу, навсегда. Мы только что доказали, что это работает. Продуктивность компании выше всяких похвал! Если вы будете в ситуации, которая позволяет вам работать из дома, и вы хотите продолжать это делать, делайте!.. Навсегда, если захотите!

Естественно, о таком решении Twitter тут же написали все новости. И в корпоративной Америке оно произвело очень сильный эффект. Особенно среди HR-ов и руководителей, которые задумались, стоит ли им совершать такой же переход.

Дженнифер Кристи говорит, что вскоре после объявления перманентной удаленки её команде пришлось приостановить периодические проверки производительности сотрудников на весь 2020-й год. Это было сделано по запросу родителей, которым приходилось жонглировать обязанностями. Поскольку школы и детсадики были закрыты, показывать нормальную эффективность им было чуть сложнее. Но рост продуктивности других работников это вполне компенсировал. А сама Twitter вскоре предложила финансовую компенсацию тем, кто ухаживает за детьми. И $1000 каждому сотруднику для апгрейда его домашнего офиса.

Кристи и её команда также придумали пару дополнительных способов виртуальной социализации. Например, демонстрации приготовления блюд от коллег и время сказок для детей сотрудников, где лучшие рассказчики историй в команде помогают развеселить малышей через Zoom. Но многие люди всё равно говорят, что построение нормальных отношений без непосредственной коммуникации даётся им очень сложно. Особенно плохо приходится новым сотрудникам, которые пока в компании никого толком не знают.

Но, конечно, самым серьезным тестом удаленной работы в Twitter за последние полгода стал масштабный взлом, который компания испытала в середине июля. Хакеры получили доступ к данным внутреннего сотрудника и начали постить в аккаунтах десятков знаменитостей, включая Обаму и Илона Маска, призывая людей переслать им биткоины. Сотрудники Twitter были автоматически выведены из своих аккаунтов, и многие толком не могли войти в систему, чтобы пообщаться со своими коллегами или попытаться разрулить ситуацию.

Сейчас компания говорит, что разница между присутствием в офисе или дома для сотрудников почти не имела значения. Но некоторые работники Twitter на условиях анонимности подтвердили, что люди из офиса получили доступ к системам чуть раньше.

Но в целом сотрудники говорят, что чувствуют себя более продуктивными дома, а не в офисе. Почти 70% работников Twitter ответили, что они хотели бы продолжить работать из дома как минимум 3 дня в неделю. Более лояльно к офису обычно относятся холостые и молодые сотрудники. В то время как родители и сотрудники в возрасте чаще говорят, что желают работать из дома.

Twitter настаивает, что переход на удаленку для них не вопрос сохранения денег. Компания пока сохраняет всю свою недвижимость. Основная экономия, вероятно, будет исходить из возможности нанимать людей за пределами Сан-Франциско, где зарплаты самые высокие в стране. Twitter говорит, они собираются делать зарплаты соответствующими тем зонам, в которых мы нанимаем сотрудников. Так можно сохранять несколько сотен миллионов долларов в год.

В чем секрет

Через полгода после того, как вспышка коронавируса спровоцировала сотни тысяч компаний перевести своих сотрудников на работу из дома, 35% штатных работников в США всё еще продолжают работать удаленно (по данным Стэнфордского университета). В то время как до пандемии дистанционно трудились только 6%.

Для Twitter всё пока что идет очень хорошо. Дженнифер Кристи говорит, что текучка в компании снизилась в несколько раз по сравнению с 2017 годом. Она думает, здесь сыграли множество факторов, включая повышение зарплат сотрудников, выход компании на прибыльность и, конечно, её гибкий подход к переезду работников в другие штаты. Прибыль Twitter за год выросла до $1,5 млрд, хотя ещё несколько лет назад здесь был сплошной убыток.

Но Twitter здесь пока что в меньшинстве. У большинства крупных компаний опыт с удаленкой был скорее негативным. Yahoo, Bank of America, Aetna, Best Buy и IBM все попробовали перейти на дистанционный труд, и вынуждены были через несколько месяцев позвать сотрудников обратно в офисы. Они жаловались на снижение продуктивности хотя профессор Николас Блум из Стэнфорда утверждает, что изолировать работу из дома в качестве единственной причины там было нельзя.

Саймон Синек, автор нескольких книг по менеджменту, говорит, что многие люди совершенно не понимают то, что он называет прогрессивным подходом Twitter:

Их политика это не заставлять работать из дома! Это дать людям возможность выбирать, где работать, чтобы быть максимально производительными. Поэтому им не приходится спрашивать разрешения у сотрудников. И не приходится чувствовать себя перед ними виноватыми.

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

В то же время многие руководители других гигантов Кремниевой долины переживают, что такой формат работы будет означать постепенное угасание их компаний. Мол, самые интересные идеи возникают в результате случайных пересечений и общений людей. Стив Джобс говорил своему биографу, что креативность возникает в результате спонтанных встреч, из самых странных дискуссий. Идеи для Facebook и Google родились в общаге университета и в гараже около Стэнфорда, а Джек Дорси говорит, что идея сервиса микроблогов пришла к нему, когда он общался со своими друзьями в одном из парков Сан-Франциско.

Если же никаких пересечений между горящими людьми нет, если поговорить в лифте или у кулера не выйдет новых необычных идей тоже не будет рождаться. Компании застопорятся в своём развитии. Такую же проблему описывал Марк Цукерберг в своём недавнем интервью: он опасается потери атмосферы Кремниевой долины, снижения темпа инноваций.

Но это проблема, с которой Twitter может столкнуться в будущем, через 3-5 лет. Что для IT-мира довольно внушительный срок.

Пока что компания занята более насущными проблемами. Например, организацией эффективной работы удаленных сотрудников для быстрой имплементации тех идей, которые пока есть. А сам Джек Дорси 7 апреля сообщил, что переводит $1 млрд своих денег (28% своего состояния) в фонд борьбы с Covid-19, чтобы помочь поскорее справиться с пандемией. До сего дня это самая большая персональная инвестиция в сражение с коронавирусом.

Подробнее..

Перевод Кто стоит за случившимся в среду эпичным взломом Твиттера?

18.07.2020 00:05:02 | Автор: admin
Прим. перев.: статья с сайта krebsonsecurity.com от автора Брайана Кребса, в прошлом журналиста The Washington Post, ныне независимого специалиста по кибербезопасности.

В среду 15 июля Твиттер погрузился в хаос в учётных записях наиболее известных в мире людей, директоров компаний и знаменитостей, стали появляться ссылки на мошеннические сайты, собирающие биткоины. В Твиттере говорят, что эта атака стала возможной, поскольку кто-то обманул или принудил одного из сотрудников компании дать доступ ко внутренним административным инструментам платформы. В данной статье я попытаюсь составить временной график этой атаки и указать на свидетельства о том, кто за ней может стоять.

Первые свидетельства атаки стали заметны публике примерно в 15 часов по североамериканскому восточному времени (UTC-5; летом UTC-4), когда в учётной записи криптовалютной биржи Binance появилось сообщение о том, что биржа скооперировалась с организацией CryptoForHealth с намерением раздать 5000 биткоинов нуждающимся, а также ссылка, куда люди могли отправлять пожертвования.

Через несколько минут похожие твиты появились в учётных записях других криптовалютных бирж, а также в аккаунтах кандидата в президенты США Джо Байдена, главы Amazon Джеффа Безоса, бывшего президента США Барака Обамы, главы Tesla Илона Маска, бывшего мэра Нью-Йорка Майкла Блумберга и инвестора Уоррена Баффетта.



Кажется смехотворным, что кто-то реально поверил бы в эти запросы и отправил им деньги, однако анализ кошелька BTC, который рекламировали множество взломанных учётных записей, показал, что за последние 24 часа он обработал 383 транзакции и получил почти 13 биткоинов, что примерно равно $117 000.

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

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

Деятели из сообщества любителей подмены SIM обожают перехватывать доступ к социальным учётным записям из т.н. категории OG. OG, или original gangster это короткие имена учёток, типа @B или joe. Обладание подобным аккаунтом повышает статус, влияние и общественный вес в кругах хакеров, занимающихся подменой SIM, поскольку за перепродажу подобных учёток иногда можно выручить по нескольку тысяч долларов.

Уже за несколько дней до атаки, произошедшей в среду, в интернете появились признаки того, что некоторые участники хакерского сообщества продавали возможность поменять емейл, привязанный к любой учётной записи твиттера. В посте на форуме OGusers, посвящённом взлому аккаунтов, пользователь Chaewon рекламировал возможность привязки заданного емейла к любой учётной записи твиттера за $250 и доступа к учёткам за $2000-$3000.



Это не какой-то особый метод. Если вам не дадут емейл, мы вернём деньги. Если учётку забанят, мы не несём ответственности, писал Chaewon в записи под названием запросы на подмену емейла для твиттера.

За несколько часов до того, как в учётных записях криптобирж и знаменитых людей в твиттере начали появляться призывы жертвовать биткоины, атакующие сконцентрировались на взломе нескольких OG-учёток, включая "@6".

Этим аккаунтом раньше владел ныне покойный Адриан Ламо, известный, как бездомный хакер, взломавший сеть New York Times, а также сдавший властям США Брэдли Мэннинга, военнослужащего, который передал сайту WikiLeaks документы различной степени секретности. Сейчас учёткой @6 управляет давний друг Ламо, исследователь в области безопасности и телефонный фрикер, который попросил называть его в этой истории прозвищем Lucky225.

Lucky225 сказал, что незадолго до 2 часов дня по североамериканскому восточному времени в среду он получил код для подтверждения сброса пароля для учётной записи @6 через Google Voice. Lucky225 сказал, что до этого запрещал отправку SMS-уведомлений для многоступенчатой авторизации, и использовал временные коды, генерируемые мобильным приложением.

Но поскольку атакующие смогли поменять емейл-адрес, привязанный к учётной записи @6, и запретить многоступенчатую авторизацию, на его аккаунт в Google Voice и на новый емейл, зарегистрированный атакующими, был отправлен одноразовый код подтверждения.

Атака была осуществлена благодаря тому, что в административных инструментах твиттера, по-видимому, есть возможность обновить емейл-адрес любого пользователя, не отправляя ему при этом никаких уведомлений, рассказал Lucky225. Поэтому атакующие могли избежать обнаружения, сначала обновив емейл учётки, а потом включив двухфакторную аутентификацию.

Lucky225 сказал, что у него до сих пор нет возможности проверить, были ли с его адреса отправлены какие-то твиты после того, как его взломали, потому что у него пока нет к нему доступа (весь этот эпизод он подробно разобрал в посте на сайте Medium).

Примерно в то же время, когда был уведён аккаунт @6, была захвачена ещё одна учётка @B. Затем кто-то начал постить изображения админки твиттера, на которых было видно учётную запись @B.



В Твиттере отреагировали, удалив с платформы все скриншоты со снимками их внутренних инструментов, а в некоторых случаях временно заблокировали учётные записи.

Ещё в одном аккаунте shinji также выкладывали изображения внутренних инструментов твиттера. За несколько минут до бана там опубликовали твит с призывом подписываться на @6 аккаунт, который увели у Lucky225.



Здесь и здесь, на сайте Internet Archive можно скачать кэшированные версии твитов Shinji до атаки в среду. На них видно, что пользователь утверждает, что владеет двумя аккаунтами OG в инстаграме j0e и dead.

Источник из службы безопасности одного из крупнейших мобильных операторов США сообщил нам, что аккаунты j0e и dead привязаны к печально известному хакеру, занимающемуся подменой SIM-карт по прозвищу PlugWalkJoe. Исследователи следили за PlugWalkJoe, поскольку считается, что за несколько лет он совершил несколько подмен SIM-карт, за которыми последовали кражи большого объёма биткоинов.



Теперь посмотрим на изображение в профиле в другом архиве аккаунта shinji (ниже). Изображение то же самое, что и на скриншоте от среды, когда Joseph/@Shinji выкладывал в ленту снимки внутренних инструментов Твиттера.



Наш источник сообщил, что этот человек был одним из ключевых людей в составе группы, занимающейся подменой SIM под названием ChucklingSquad. Считается, что это они увели учётную запись в твиттере Джека Дорси [создателя твиттера / прим.перев.] в прошлом году. В Wired писали, что аккаунт jack увели, когда хакеры организовали подмену SIM-карт оператора AT&T номер этого провайдера привязан к аккаунту Дорси.


Твит, отправленный с учётной записи Джека Дорси, когда его взломали, упоминает PlugWalkJoe и других членов Chuckling Squad.

Источник из индустрии мобильной безопасности рассказал нам, что в реальной жизни PlugWalkJoe это Джозеф Джеймс Коннор, 21-летний житель Ливерпуля. Сейчас он находится в Испании, где учился в университете, и пока не может вернуться домой из-за ограничений на перемещения, связанных с коронавирусом.

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

Источник рассказал, что бассейн, замеченный на фотографии в инстаграмме PlugWalkJoe, instagram.com/j0e, точно такой же, какой они видели в видеочате.



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

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

Было ли вчерашнее падение Ростелекома кибератакой?

12.03.2021 12:15:29 | Автор: admin

Сначала вопрос, если бы вы, будучи ростелекомовцем узнали, что как и обещал Байден несколько дней назад, на Россию совершена кибератака, которую вы пропустили из-за устаревшего оборудования стали бы вы об этом объявлять публично? Какие должны бы были быть ответные действия ростелекома и государства если бы это было правдой? Опрос в конце статьи.

Поскольку в комментариях, которые я успел прочитать никем не обсуждалась не смотря на то что напрашивалась, не могу не поделиться сообщением от C.ber...g.me (название запикано чтобы не сочли за рекламу, но и не сослаться на авторов тоже было бы нечестно), и распостранённого экспертами одного автострадного тинктанка:

Пара слов про вчерашнее падение государственных и некоторых других сайтов.

Вы, наверное, уже видели сообщения из анонимных источников о том, что BGP-анонс со специально сформированным payload якобы уронил маршрутизаторы Juniper в Ростелекоме (и, наверное, даже посмеялись над этой новостью, ибо Juniper с версией 16.7 существовать не может по определению).

Мы тут смеяться не стали, а пошли выяснять, какие есть возможности.

Вот он (http://personeltest.ru/aways/kb.juniper.net/JSA11024) интересующий нас security bulletin (вот CVE (http://personeltest.ru/aways/cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1640)): Ошибка при обработке входящих пакетов BGP в демоне Juniper Networks RPD (routing protocols process) позволяет злоумышленнику аварийно завершить работу RPD, тем самым вызывая отказ в обслуживании.

Среди версий JunOS существует версия 16.1R7, которая действительно уязвима к этому CVE. End of support этой версии наступал (http://personeltest.ru/aways/support.juniper.net/support/eol/software/junos) в январе 2020, но для R7 был продлён (http://personeltest.ru/aways/support.juniper.net/support/eol/software/junos/#7) до января 2021. То есть, если всё описанное правда, то к инженерам Ростелекома будут большие вопросы о том, что это оборудование делает в продакшене. Но не гигантские, потому что всего три месяца неактуальная версия, чего вы хотите.

Остаётся вопрос: была ли это та самая кибератака, обещанная анонимным американским источником. И если да, то о ней знают не только Путин и окружение, как обещалось, но и вся страна.

PS: Важное дополнение. PoC к этой уязвимости публично не доступен.
Подробнее..

Топ-10 Angular-приемов, выбранных сообществом

12.08.2020 20:21:34 | Автор: admin
В течение июня Саша Инкин и я, Рома Седов, запилили в Твиттере челлендж. Каждый день мы публиковали по совету, хитрости или просто какой-нибудь полезной штуке из нашего опыта работы с Angular. Это движение было тепло встречено и поддержано комьюнити разработчиков.
Я решил написать статью о десяти приемах, которые набрали больше всего лайков, а также объяснить показанные в них концепции более подробно.

Давайте начнем!



Токенизируй глобальные объекты!


Самый популярный твит рассказывает о DI-токенах глобальных объектов.
Во фронтенде мы привыкли к тому, что в глобальном окружении есть множество объектов. Мы используем объекты вроде window, document, fetch-метод, location и никогда не ожидаем, что их может и не быть.

Но, к примеру, в Angular Universal или тестовом окружении в Jest нет ни браузера, ни window-объекта, ни DOM. А передавая эти сущности по приложению через токены, у вас никогда не будет проблем с их использованием, заменой или тестированием вашего кода.


Control value как ReplaySubject


Могут быть ситуации, когда необходимо подписаться на valueChanges реактивного контрола, начав стрим с его текущего значения. Теперь можно не изобретать велосипед, а просто добавить к себе такую обертку:


Не забывайте о пайпах


Пайпы отличный инструмент для работы в стиле фреймворка Angular. Они позволяют нам оставаться в рамках декларативного подхода внутри шаблонов наших компонентов. Печально, что некоторые разработчики на Angular избегают создания своих собственных пайпов: с ними можно аккуратно преобразовать данные почти в любой ситуации.

А вот пример универсального пайпа для преобразования данных:


RxJS неизведанный мир


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

Кроме того, бывают еще и непопулярные операторы. Они редко попадаются, но могут решить некоторые конкретные проблемы в одну строчку кода вместо огромного и хитрого стрима.
Например, одним из таких открытий для меня стала функция сравнения в distinctUntilChanged-операторе:


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


Заключение


Angular большой, и в нем еще множество фишек. У меня есть ряд идей для новых приемов и хитростей из наших лучших практик, которыми я планирую поделиться с сообществом. Если вам интересны подобные новые твиты, подписывайтесь на меня в Твиттере. И хорошего вам дня!
Подробнее..

5 советов для прокачки своих навыков в Angular

14.09.2020 16:14:47 | Автор: admin

Этим летом мы с Ромой запустили серию твитов с полезными советами и приемами по Angular. Сообщество тепло встретило эту инициативу, и я решил написать обобщающую статью.Вот мои 5 рекомендаций, которыми хочется поделиться с разработчиками. Эти советы будут подкреплены конкретными примерами из моего твиттера. Они помогут вам поднять свои навыки или как минимум дадут пару практических приемов.

1. Разберитесь в работе механизма проверки изменений

В интернете множество отличных углубленных статей про проверку изменений в Angular. Например, вот эта. Так что давайте просто освежим основы и перейдем к советам.

Основы

В Angular два режима проверки изменений: Default и OnPush. Первый запускает проверку на каждый tick внутри приложения. Этим управляет Zone.js, которая патчит все асинхронные операции вроде подписок на события и промисов. Второй режим помечает view для проверки, только если в нем случилось слушаемое событие или изменились входные данные.

Default vs OnPush

По правде говоря, вряд ли есть причины использовать режим Default. Просто пишите код так, как задумано принципами фреймворка, и вы не попадете в неприятности с OnPush. Это означает никогда не мутировать данные. Если ваши входные объекты или массивы немутабельные, OnPush подцепит изменения и обновит вью.

Подписки на события через @HostListener Angular заметит и в OnPush. Но что делать, если вы используете RxJS? Всегда можно заинжектить ChangeDetectorRef и вызвать markForCheck(), когда потребуется. Декларативным решением тут будет async пайп, если стрим в итоге доходит до шаблона. Он сам запустит проверку и возьмет на себя отписку.

Вам наверняка попадался такой паттерн:

<div *ngIf="stream$ | async as result"></div>

Но что делать, если вам важны также falsy-результаты? Можно выкинуть всю логику на условие из ngIf и сделать свою простую структурную директиву. Она будет использоваться, только чтобы объявить контекст для вложенного вью:

Код
@Directive({  selector: "[ngLet]"})export class LetDirective<T> {  @Input()  ngLet: T;  constructor(    @Inject(ViewContainerRef) container: ViewContainerRef,    @Inject(TemplateRef) templateRef: TemplateRef<LetContext<T>>  ) {    container.createEmbeddedView(templateRef, new LetContext<T>(this));  }}

NgZone

Если у вас нет возможности полностью перейти на OnPush, можно провести оптимизации. Заинжектите NgZone и выполняйте нагруженные операции в .runOutsideAngular(). Таким образом не будет возникать лишних тиков в механизме проверки изменений. Даже компоненты в режиме Default не будут реагировать на эти операции. Это уместно делать для частых событий, таких как mousemove или scroll. Это можно сделать декларативно в RxJS-стримах с помощью двух операторов: один для выхода из зоны, другой для возврата в нее, чтобы запустить проверку изменений:

Код
class ZonefreeOperator<T> implements Operator<T, T> {  constructor(private readonly zone: NgZone) {}  call(observer: Observer<T>, source: Observable<T>): TeardownLogic {    return this.zone.runOutsideAngular(      () => source.subscribe(observer)    );  }}export function zonefull<T>(zone: NgZone): MonoTypeOperatorFunction<T> {  return map(value => zone.run(() => value));}export function zonefree<T>(zone: NgZone): MonoTypeOperatorFunction<T> {  return source => source.lift(new ZonefreeOperator(zone));}

Еще один вариант, работающий с @HostListener, создать свой EventManagerPlugin. Мы выпустили open-source-библиотеку под названием ng-event-plugins. Она позволяет отсеивать лишние проверки изменений. Подробнее об этом читайте в этой статье.

2. Хорошенько разберитесь в RxJS

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

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

Только посмотрите, как просто создать шапку, исчезающую при прокрутке сайта вниз. Совсем немного CSS и базовый RxJS:

Код
@Directive({  selector: "[sticky]",  providers: [DestroyService]})export class StickyDirective {  constructor(    @Inject(DestroyService) destroy$: Observable<void>,    @Inject(WINDOW) windowRef: Window,    renderer: Renderer2,    { nativeElement }: ElementRef<HTMLElement>  ) {    fromEvent(windowRef, "scroll")      .pipe(        map(() => windowRef.scrollY),        pairwise(),        map(([prev, next]) => next < THRESHOLD || prev > next),        distinctUntilChanged(),        startWith(true),        takeUntil(destroy$)      )      .subscribe(stuck => {        renderer.setAttribute(          nativeElement,           "data-stuck",           String(stuck)        );      });  }}

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

Тут особо нечего советовать, кроме как больше практиковаться . Если видите ситуацию, которую можно решить через RxJS, попытайтесь сделать это. Избегайте сайд-эффектов и вложенных подписок. Держите свои стримы в порядке и следите за утечками памяти (подробнее об этом дальше).

3. Выжимайте максимум из TypeScript

Мы все пишем Angular-приложения на TypeScript. Но, чтобы получить максимальную пользу, нужно задействовать его целиком. Я редко вижу проекты с включенным strict: true. Вам определенно следует сделать это. Оно спасет вас от множества cannot read property of null и undefined is not a function.

Дженерики

В TypeScript существуют дженерики для случаев, когда тип, с которым мы работаем, неизвестен. Комбинация дженериков, перегрузок и сужения типов позволит вам сделать крутой API. Почти никогда не придется делать тайпкаст. Посмотрите на этот пример типизированного RxJS-метода fromEvent:

Код
// Тип события с конкретным currentTargetexport type EventWith<  E extends Event,  T extends FromEventTarget<E>> = E & {  readonly currentTarget: T;};// Типизированный вариант fromEventexport function typedFromEvent<  E extends keyof GlobalEventHandlersEventMap,  T extends FromEventTarget<EventWith<GlobalEventHandlersEventMap[E], T>>>(  target: T,  event: E,  options: AddEventListenerOptions = {},): Observable<EventWith<GlobalEventHandlersEventMap[E], T>> {  return fromEvent(target, event, options);}

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

API, построенные на дженериках, хороши тем, что они не завязаны на формат данных. А значит, их легко расширять и другим разработчикам не придется подстраиваться под определенный интерфейс.

Есть немало статей о продвинутой типизации и всевозможных трюках с TypeScript. Я очень советую расширять свои знания в этой области, это поможет вам писать надежный код. Мой последний совет: не используйте any. Если вы не можете применить дженерик, более безопасным выбором будет unknown.

Декораторы

Не забывайте про другие инструменты TypeScript, такие как декораторы. При умелом использовании они могут значительно улучшить ваш код. К примеру, бывают ситуации, когда тип переменной корректный, но значение не подходит: отрицательное или дробное число не подходит для обозначения количества, хотя тип и там, и там number. TypeScript такое не отловит, но мы можем защитить компоненты в runtime с помощью декоратора:

Код
export function assert<T, K extends keyof T>(  assertion: (input: T[K]) => boolean,  messsage: string): PropertyDecorator {  return (target, key) => {    Object.defineProperty(target, key, {      set(this: T, initialValue: T[K]) {        let currentValue = initialValue;        Object.defineProperty(this, key, {          get(): T[K] {            return currentValue;          },          set(this: T, value: T[K]) {            console.assert(assertion(value), messsage);            currentValue = value;          }        });      }    });  };}

Вы знали, что декорированный абстрактный класс не нуждается в пробросе аргументов в super()? Angular сам сделает это за вас, если не использовать конструктор в дочернем классе:

Еще один хороший пример для декораторов переиспользуемая логика обработки. Посмотрите кусок кода из нашей библиотеки для Web Audio API в Angular, где мы превращаем декларативный байндинг в императивные нативные команды с помощью строго типизированного декоратора. Подробнее про саму библиотеку можно почитать тут.

4. Dependency Injection. Используйте его почаще

DI одна из причин, почему Angular такой мощный фреймворк. Возможно, это даже главная причина. Но слишком часто его не используют по полной.

Могу порекомендовать нашу статью, посвященную DI, чтобы освоиться с этим инструментом.

RxJS

Что касается практических советов, выше я уже говорил быть внимательными к утечкам памяти в RxJS. Главным образом это означает, что, если вы подписались на стрим руками, вам же и придется от него отписаться. Идиоматическим решение в Angular будет инкапсуляция подобной логики в сервис:

Код
@Injectable()export class DestroyService extends Subject<void> implements OnDestroy {    ngOnDestroy() {        this.next();        this.complete();    }}

Вы также можете создавать общие стримы и добавлять их в DI. Нет необходимости создавать отдельные потоки на базе requestAnimationFrame в вашем приложении. Создайте токен и переиспользуйте его. Вы даже можете заложить в него операторы для выхода из зоны, описанные выше:

Токены

DI хороший инструмент для повышения абстрактности вашего кода. Если вы не зависите от глобальных объектов вроде window или navigator ваше приложение готово к использование в Angular Universal в серверном окружении. Такой код просто тестируется, так как все его зависимости легко подменить на заглушки. Глобальные объекты без труда превращаются в токены. Внутри фабрики при объявлении токена нам доступен глобальный инжектор. Нам потребуется всего пара строк для создания WINDOW токена на базе встроенного DOCUMENT:

Код
export const WINDOW = new InjectionToken<Window>(  'An abstraction over global window object',  {    factory: () => {      const {defaultView} = inject(DOCUMENT);      if (!defaultView) {        throw new Error('Window is not available');      }      return defaultView;    },  },);

Чтобы не тратить на это время, используйте нашу open-source-библиотеку, где мы уже реализовали многие такие токены. А для Angular Universal есть ее библиотека-сестра с качественными заглушками. Не стесняйтесь, пишите нам, если вам нужен еще какой-то токен.

Токены и фабрики дают массу возможностей. В сочетании с иерархической структурой DI они позволяют сделать приложение очень модульным. Можете почитать больше про использование провайдеров в этой статье.

5. Бросайте императора в бездну, как Вейдер

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

Геттеры

Что это означает писать декларативный код? В первую очередь постарайтесь использовать ngOnChanges как можно реже. Это плохо типизированный сайд-эффект, который нужен, по сути, только когда надо выполнить какое-то действие при изменении нескольких входных значений.

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

Производительность и геттеры тема для отдельной статьи, до которой я надеюсь вскоре добраться. А пока возьмите за правило не создавать новых объектов или массивов внутри геттеров. Это существенно более затратная операция, чем арифметика или сложение строк. Если вам требуется пересоздать объект, воспользуйтесь техникой мемоизации к примеру, чистым пайпом.

Это хороший пример для сеттера, который я опустил для краткости, но про который мне напомнил внимательный читатель.

Template reference variables

Вместо ручного запрашивания элементов из шаблона в Angular предусмотрен декоратор @ViewChild. Однако зачастую он не нужен, если можно завернуть передачу элемента в шаблоне:

<input #input><button (click)="onClick(input)">Focus</button>

Здесь мы передаем template reference variable непосредственно в метод, где она нужна. Так код нашего компонента остается чище. Думайте об этом как о подобии замыкания в шаблоне.

Но что, если мы хотим получить DOM-элемент, который является компонентом? Мы могли бы написать @ViewChild(MyComponent, {read: ElementRef}), но мы обойдемся без поля класса, если создадим директиву с exportAs:

Код
@Directive({    selector: '[element]',    exportAs: 'elementRef',})export class ElementDirective<T extends Element> extends ElementRef<T> {    constructor(@Inject(ElementRef) {nativeElement}: ElementRef<T>) {        super(nativeElement);    }}

Динамический контент

Люди часто используют ComponentFactoryResolver для императивного создания динамических компонентов. Зачем, если есть директива ngComponentOutlet? Потому что так мы получим доступ к экземпляру компонента и сможем передать в него данные. Хороший способ решения подобной задачи опять же, Dependency Injection. ngComponentOutlet позволяет передать Injector, который мы создадим и подложим в него данные через токен.

По сути, для создания динамического контента у нас есть интерполяция, шаблоны и компоненты. И принципиальной разницы между ними нет. У нас есть контекст и есть его представление.

Мы уже давно используем этот подход, не зависящий от типа переданного контента. Мы вынесли его в крошечную open-source-библиотеку под названием ng-polymorpheus. Она не делает ничего, кроме передачи контента в соответствующий встроенный инструмент, ngTemplateOutlet, ngContentOutlet или же простую интерполяцию с вызовом функции. Когда привыкаешь к такому, обратной дороги уже нет! Подробнее читайте в этой статье.

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

Подробнее..

Продвижение бота на 214 тысяч процентов

26.12.2020 16:10:02 | Автор: admin

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

Теория

По моему мнению реклама в сети скоро будет активно осваивать короткие звуковые споты. Всё чаще люди начинают слушать интернет, а не только его смотреть. Интернет-радио,Spotify,iTunesи множество других служб для "прослушки" сети очень быстро внедряются в массовое употреблением. Даже Твиттер вывел на рынок звуковые твитты.Росту значения звука способствует и рост числа индивидуальных устройств для прослушивания - наушники стали обыденным явлением и значит звуковая реклама можетбыть индивидуализированна и подана отдельному человеку в зависимости от его предпочтений как и традиционная контекстная реклама.

Практика

О своём боте для звукодзи я уже писал в статье на Хабр

В начале декабря я добавил к нему функцию озвучки гифок и картинок. То есть нужно послать боту изображение в виде файла, а потом голосовое сообщение. Бот вернёт короткий спот видео, который можно уже вставить куда угодно. Мы проводили эксперименты с размещением готовых видео роликов в Твиттере чтобы оценить реакцию пользователей и их "вовлечённость".

Чтобы бот работал корректно в социальной сети во время тестирования были обнаружены и устранены некоторые проблемы. В частности:

  • Обрезка по времени.

Пользователи чаще всего не попадают точно в начало гифок. Тем более, что и при отсылке голосовых сообщений запись начинается не сразу - есть задержка физическая, то есть буквально зависание пальца на кнопке, и есть задержка логическая, то есть мессенджер вставляет небольшую паузу от начала записи. Для устранения задержек я "сдвинул" начало записи к началу видео. Вот таким образом:

Объяснение кода

Функция вырезана из класса.

Для обработки звуков/видео используется ffmpeg

PWF --> место хранение файлов для последующий обработки

cmd --> это переименованная функция system встроенной в python библиотеки os

В функции connect_video_voice соединяется звук, и видео.

Также есть функция по соединению звука и картинки.

def connect_photo_audio(self,imagepath, audiopath, name=urandom(30).hex()):      targetvideotype = "mp4"      cmd(f'ffmpeg -y -loop 1 -i "{imagepath}" -i "{audiopath}" -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pixfmt yuv420p -shortest -vf "scale=trunc(iw/2)2:trunc(ih/2)2" "{self.PWF}/{targetvideotype}/{name}.{targetvideotype}"')      return f'{self.PWF}{targetvideotype}/{name}.{targetvideo_type}'
def connect_video_voice(self,videopath, audiopath, name=urandom(30).hex(),):  sourcevideotype = "mp4"  cmd(f'ffmpeg -streamloop -1 -i "{videopath}" -i "{audiopath}" -shortest -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 -y "{self.PWF}/{sourcevideotype}/{name}.{sourcevideotype}"')      return f'{self.PWF}/{sourcevideotype}/{name}.{sourcevideo_type}'
Логика обрезания

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

f"ffmpeg -stream_loop -1 -i "{video_path}" -i "{audio_path}" -shortest -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 -y "{self.PWF}/{source_video_type}/{name}.{source_video_type}"
  • Ограничение по времени

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

Пояснение о коде

Для работы с телеграммом используется PyTelegramBotAPI

После получения голосового сообщения, в message.voice хранится информация о нем. В том числе хранится и duration, в ней хранится длительность голосового сообщения.

if message.voice.duration > 60:  self.BOT.send_message(message.fromuser.id, "Your message too long. Max size of message: 1 minute")      return

Внедрение

Бот был активно использован для одного свежего "чистого" аккаунта в сети Твиттер без фоловеров. На скриншотах видны два читателя - это те, которые сами присоединились по своей инициативе. Никаких "раскруток" или подобных действий для статистики не предпринималось. Мне было самому интересно сможет ли такая своеобразная реклама без бюджета бота в сети обеспечить рост его известности.

Ежедневно мы публиковали несколько твиттов с внедрённым видео. Вот статистика просмотров

Статистика в Твиттер

Для измерения переходов к самому боту я написал дополнительный код, собирающий статистику обращений к боту и манипуляций с ним.

Объяснение кода

get_users_graphic__activity__ функция, которая вызывается при команде /activity к боту.

Здесь идет проверка на доступы, если пользователь написавший боту /activity не занесен в базу данных как админ, или же как helper, то в графике ему будет отказано.

create_graphic_activity --> функция, которая строит графики на основе функции которая получает данные о пользовательской активности в боте.

limit--> переменная, используемая для указания лимита возвращаемой активности в дня. По умолчанию limit имеет значение Продвижение бота с услугами через твиттер

/activity 3 вернет график активности за последние 3 дня.

def get_users_graphic__activity__(self):    if self.MESSAGE.chat.id in HELPERS or self.MESSAGE.chat.id == ADMIN_USER_ID:        graphic = create_graphic_activity()        if graphic:            try:                limit = int(re.sub('\D', '', self.MESSAGE.text))            except Exception:                limit = 7            self.BOT.send_photo(self.MESSAGE.chat.id, photo=create_graphic_activity(limit=limit))        else:            self.BOT.send_message(self.MESSAGE.chat.id, LANGUAGES["commands"]["server_crashed"])    else:        self.BOT.send_message(self.MESSAGE.chat.id,LANGUAGES["commands"]["you_not_have_permissions"])

При использовании бота я заметил рост обращений к нему. При том что в самих Твиттах ссылка на бот не содержится - она есть только в профиле пользователя. Это значит что в бот перешли самые активные участники, не ограничивающие себя просмотром.

В планах

Возможно некоторым рекламодателям уже можно использовать моего бота для продвижения своих товаров и услуг. Можно включать свой логотип или изображение товара в картинку или дополнять слоганом звуковое сообщение. Я пока продолжу совершенствовать функционал программы. В ближайшее время я планирую дополнить бота функциями выравнивания по силе звука и перезаписью дублей. Если для перезаписей дублей код не трудно дописать, то выравнивание силы звука - нетривиальная задача, поскольку для рекламных целей как раз изменение силы звука может быть "цепляющим" внимание фактором.

Подробнее..

О твиттере бедном замолвите слово

10.03.2021 20:17:40 | Автор: admin

Попытка РКН замедлить связь с Twitter вылилась в локальные интернет-катаклизмы.

К сожалению, сколько-нибудь полезной технической информации о том, как именно РКН решил осуществлять то, о чём публично заявил, не так много. Можно даже сказать, что её практически нет. Так что остаётся только спекулировать на наблюдениях и доступных данных.

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

При этом, в это же время, даже через Ростелеком (по проводу) твиттер и сам открывается быстро, и видео с его CDN - тоже.

Однако, некоторые проведённые нами испытания показывают, что у некоторых провайдеров и вправду наблюдается картина резкого ограничения скорости скачивания, если в SNI был указан домен, в котором содержится (sic!) текстt.co. Именно содержится. Т.е. в выборку попадают и microsoft.com, и githubusercontent.com (домен, где эта соцсеть держит аватарки пользователей и всякую мелочь) и так далее. И воспроизводится это даже если отправлять запросы на IP собственного сервера (т.е. вовсе не обязательно - самого Twitterа).

Почему реализация такая топорная - огромный вопрос:

С одной стороны, это выглядит либо как профанация со стороны всего ведомства в целом, либо как саботаж на местах, а с другой - вполне может оказаться типичной проблемой того, что программисты исполнителя не имея представления о том, чего хочет заказчик сделали инструмент максимально нелогичным и неудобным с точки зрения заказчика. Тут я ещё раз напомню о том, что по факту никакой технической информации о том, как именно РКН осуществляет это самое замедление в публичном доступе нет. А возможных вариантов реализации слишком много для проведения аналитики по каждому. Так что, на данный момент наша рабочая гипотеза использование программно-аппаратных комплексов (тех самых которые провайдеров обязали устанавливать по 90-ФЗ (о суверенном интернете)), однако, насколько это помню лично я - ещё совсем недавно провайдеры дружно заявляли о том, что ни одной такой готовой железки до сих пор нет.

Другим кандидатом на эту роль является СОРМ-3, но если используется именно этот комплекс встаёт закономерный вопрос о том, почему средства оперативно-розыскных мероприятий вдруг используются для шейпинга трафика соцсетей.

Ну и третьим кандидатом является теория о локальных договорённостях с конкретными провайдерами (благо, крупных федеральных по сути, всего двое: Ростелеком и Эр-Телеком. Остальные или куплены одним из них, или слишком мелкие.

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

Скорее всего, это просто совпадение, но если взглянуть с теоретической точки зрения могли ли накосячить так, чтобы получился такой эффект, мой ответ как технического специалиста да, могли (тем более, что все, как обычно, всё отрицают). Правда, для этого нужно быть совсем уж двоечниками. Впрочем, смотря на то, что SNI-детектор цепляет сайты типа microsoft.com, сомнений остаётся всё меньше.

Но, как я сказал уже несколько раз, не имея никакой фактической информации, остаётся только фантазировать и спекулировать. Ну и, если хочется приплетать теории заговоров.

Например, тут вот, как раз где-то в это же время загорелся один из дата-центров OVH. Совпадение? :)

К слову, на самом деле, озвученное выше предложение - не настолько шутка, как может показаться с первого взгляда.

Масштабы поражения у OVH довольно большие: один дата-центр сгорел, часть второго повреждена, третий - в процессе борьбы между пожарными и огнём, и только четвёртый блок не тронут.

Учитывая, что OVH один из крупнейших хостеров не только европы, но и мира - перестройка глобальной маршрутизации в связи с пожаром и правда могла хорошенько так ударить по работоспособности интернетов с точки зрения обывателя.

Подробнее..

Не блокировка, а замедление

11.03.2021 00:08:55 | Автор: admin

Красным указано оборудование ТСПУ (технические средства противодействия угрозам) чёрные ящики от РКН, которые операторы связи размещают с подведением электропитания в отдельных стойках на своих площадка по всей стране, но доступа к устройствам не имеют.

10 марта 2021 года с 10 часов утра по московскому времени Рунет вступил в новые правила игры. Роскомнадзор начал замедлять на 100% мобильный и 50% трафик широкополосного доступа сервиса микроблогов Twitter.

За этим последовало несколько знаменательных событий. Глобальная авария на оборудовании Ростелекома на полдня нарушила доступ к госсайтам и сети оператора. Более 113 тыс. доменов оказались в контуре замедления РКН, так как они имеют в своём название t.co, короткий домен Twitter, на который реагирует оборудование ТСПУ.

Хабр совместно с коллегами из РосКомСвободы постарался рассказать, почему такая ситуация стала возможной, что теперь делать пользователям и как будут развиваться события с Twitter и другими соцсетями.



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


Официальной публичной информации о том, как именно РКН это делает не существует. Ведомство начало готовиться к этому с лета 2019 года. Именно тогда территориальные управления Роскомнадзора начали рассылать операторам связи по всей России требования предоставить сведения о точках обмена трафиком, а также схемы подключения оборудования провайдеров. Именно с помощью интеграции внутрь этих схем специального оборудования ТСПУ сотрудники РКН получили возможность управлять Рунетом.

С 1 ноября 2019 года вступил в силу закон об изоляции рунета. Роскомнадзор и операторы связи начали проводить полноценное тестирование оборудования, которое позволит изменить маршрутизацию трафика и отфильтровать нежелательный контент. Система DPI (Deep Packet Inspection) работает на различных уровнях модели OSI (от второго до седьмого) по протоколам, приложениям, сервисам, включая multicast и служебные протоколы. Для первых испытаний универсальной системы фильтрации трафика (DPI) выбран Уральский федеральный округ. Вероятно, что в Мурманской области некоторые провайдеры также проводили аналогичное тестирование системы DPI.

Из-за секретности Роскомнадзора пока точно не известно, какое конкретно оборудование поставляется для суверенного рунета, но можно сделать предположения, исходя из ассортимента продукции RDP.RU, что это в основном системы на базе EcoDPI.

Ещё не так давно операторы связи заявляли о том, что нет ни одного готового комплекса, полностью удовлетворяющего требованиям законодательства РФ, для заглядывания внутрь SNI, определения домена, а также использования более глубокого и расширенного во времени анализа трафика.

Комплекты ТСПУ от РКН анализируют весь интернет-трафик (пакеты) пользователей по ряду параметров и решают, пропустить его (по-умолчанию), ограничить скорость (правила для Twitter) или заблокировать (для запрещённых сайтов). Настраивают и управляют элементами ТСПУ специалисты РКН.

РКН включил сегодня утром в России специально настроенное оборудование ТСПУ, чтобы шейпить, а тем самым ограничивать скорость доступа к ресурсам Twitter. Фактически, ограничение скорости соцсети осуществляется по именам доменов, через DPI. Причём не только доменов Twitter непосредственно, но и CNAME-имён Akamai. В частности, замедление видеоконтента наблюдается на video.twimg.com, eip-ntt.video.twimg.com.akahost.net, video.twimg.com.eip.akadns.net, но не на более технических доменах, таких как cs531.wpc.edgecastcdn.net. При обращении к IP-адресу сервиса напрямую, без SNI, скорость остаётся высокая. Пассивный обход DPI помогает обходить замедление, например, при использовании nfqws.

Активация ТСПУ привела к тому, что РКН стал шейпить и множество других доменов. Сейчас в Рунете замедляется любой домен, содержащий в каком-либо месте в названии домена строку t.co (короткий домен твиттера). Например, под раздачу попали rt.com, reddit.com, microsoft.com, githubusercontent.com. В логику ТСПУ вставили проверку для замедления на все .*t.co.*, вместо, например, ^t.co$.

В итоге, по первоначальным подсчетам, более 113 тыс. хостов попадали под ограничение скорости из-за Роскомнадзора, включая icloud-content.com, pinterest.com, microsoft.com, blogspot.com, snapchat.com, googleusercontent.com (специальный домен для раздачи различных файлов от Google, вкл. медиа), deviantart.com, beget.com (российский хостер), appspot.com (домены сервиса Google App Engine), *.steamcontent.com, dropboxusercontent.com, digicert.com, championat.com, eset.com, avast.com.

Более подробный список
Автор списка ValdikSS

  • pinterest.com
  • microsoft.com
  • enable-javascript.com
  • blogspot.com
  • bluehost.com
  • mydomaincontact.com
  • reddit.com
  • namebright.com
  • dreamhost.com
  • t.co
  • akismet.com
  • trustpilot.com
  • dynadot.com
  • constantcontact.com
  • hubspot.com
  • cointernet.com.co
  • getpocket.com
  • washingtonpost.com
  • opencart.com
  • sciencedirect.com
  • shinystat.com
  • huffingtonpost.com
  • snapchat.com
  • proofpoint.com
  • googleusercontent.com
  • pinterest.co.uk
  • cnet.com
  • format.com
  • cookiebot.com
  • onetrust.com
  • independent.co.uk
  • ewebdevelopment.com
  • matterport.com
  • deviantart.com
  • indiamart.com
  • blogspot.co.uk
  • quantcast.com
  • ft.com
  • angieslist.com
  • blogspot.com.es
  • mapquest.com
  • xinhuanet.com
  • sharepoint.com
  • swsoft.com
  • walmart.com
  • marriott.com
  • cdnbest.com
  • justhost.com
  • beget.com
  • aparat.com
  • about.com
  • appspot.com
  • carecredit.com
  • zdnet.com
  • cookieconsent.com
  • vistaprint.com
  • redhat.com
  • economist.com
  • photobucket.com
  • venturebeat.com
  • childnet.com
  • providesupport.com
  • domainmarket.com
  • lbpicmt.com
  • pardot.com
  • target.com
  • netcraft.com
  • yoast.com
  • hotmart.com
  • shieldbreakfast.com
  • wolt.com
  • nypost.com
  • allaboutdnt.com
  • projectrockit.com.au
  • geotrust.com
  • huffpost.com
  • engadget.com
  • theknot.com
  • cvent.com
  • pinterest.com.au
  • zibbet.com
  • themezhut.com
  • b-eat.co.uk
  • just-eat.com
  • att.com
  • talabat.com
  • facebookblueprint.com
  • mimecast.com
  • toreta-takeout.com
  • tencent.com
  • techtarget.com
  • adjust.com
  • intuit.com
  • producthunt.com
  • thelancet.com
  • semalt.com
  • dropboxusercontent.com
  • githubusercontent.com
  • provenexpert.com
  • pixieset.com

Вероятно, что это косвенно или напрямую связано с неработающими сервисами РТК, так как ТСПУ обрабатывало и тормозит все ресурсы, которые содержат последовательность t.co. Пострадали, например, www.rtcomm.ru и субдомены типа ns01.rtcomm.ru и так далее. Такая проблема могла возникнуть из-за неаккуратного составления правил блокировки: в общеупотребимом синтаксисе регулярных выражений неэкранированный символ точки означает любой символ.

Сейчас rt.com уже в некоторых регионах не шейпится. Скорее всего, этот ресурс срочно внесли в исключения в ТСПУ, но не везде.



Почему у Роскомнадзора есть юридическая возможность замедлять сайты?


С начала этого года, согласно Федеральному закону от 30.12.2020 482-ФЗ О внесении изменений в Федеральный закон О мерах воздействия на лиц, причастных к нарушениям основополагающих прав и свобод человека, прав и свобод граждан Российской Федерации (страницы 5-6). А также в соответствии с законом Об информации, информационных технологиях и о защите информации (149-ФЗ), после того, как распространение информации интернет-сервисом Twitter было внесено РКН в перечень угроз.

Именно согласно тексту ФЗ от 30.12.2020 482 РКН может ограничить полностью или частично доступ российских пользователей к проблемному сервису в сети Интернет. Это ведомство и начало делать, приняв меры централизованного реагирования.



Роскомнадзор обещает 50 % десктопных пользователей с замедлением. Реально ли это число по текущим данным?


Это довольно странное заявление РКН, которое вносит ещё больше неразберихи в рабочие гипотезы о том, как именно это сейчас реализовано. Дело в том, что если верна текущая рабочая гипотеза об использовании для шейпинга DPI-оборудования, через которое провайдеры обязаны гонять свой трафик, то возникает вопрос почему именно 50%, а не все?. Вероятно, что используются какие-то локальные договорённости с конкретными провайдерами, чтобы те игнорировали обращения пользователей о замедлении и не отключали соответствующее оборудование для фильтрации, так как выбрано какое-то уж слишком ровное число. Или же РКН в курсе, что может контролировать мобильный трафик у операторов связи почти полностью, а ТСПУ у множества небольших локальных провайдеров по стране ещё не установлено. Или у ведомства нет возможности оперативно управлять таким большим количеством железок, поэтому ШПД также контролируется ТСПУ только у операторов связи, что оценивается РКН как половина от всех стационарных пользователей.



Как пользователь может проверить, попал ли он под замедление?


Во-первых, большинство стационарных пользователей, кроме в сети РТК и Дом.ру, замедления не замечают. По большей части эффект торможения и медленной загрузки сервисов заметили сегодня пользователи мобильных операторов связи. Например, сайт грузится дольше, чем обычно, картинки сначала обозначаются кваратиками, видео тормозит и долго включается.

Есть более однозначно определяющий попадание под замедление метод, но он требует некоторой технической подготовки. Метод заключается в использовании, например, утилиты cURL и подстановки разных доменов в SNI при запросах на нужный сайт (в случае которого есть возможность многоразового замера скорости скачивания определённого файла), и сравнении результатов: если замедление существенное (точно не укладывается в статистическую погрешность) и воспроизводится постоянно, то значит замедление есть. Однако, простым пользователям вполне можно опираться на личные наблюдения и ощущения по результатам обычного сравнения скорости загрузки контента на смартфоне, стационарном ПК или на смартфоне через VPN.



Что делать пользователю, чтобы обойти замедление? Можно ли это сделать без проксирования трафика?


Самый простой и доступный способ проксирование или туннелирование трафика, в том числе с использованием VPN. Да, теперь это становится насущной проблемой и у нас. Есть ещё варианты, связанные с обфускацией трафика (попытками замаскировать его под то, чем он не является), но для их реализации нужны определённые умения и возможности. Не каждый пользователь сможет их использовать.



Пойдёт ли Twitter на уступки? Что будет делать сервис микроблогов теперь?


Увы, прогнозировать пойдёт ли Twitter на уступки сейчас довольно сложно. Тут всё зависит, что называется, от настроения владельцев. Мы имеем и примеры договаривающихся соцсетей (типа того же Facebook), и примеры соцсетей, которые решили что накладные расходы на такие договоры выше, чем прибыль от частичной потери рынка LinkedIn.

А ещё, очень хотелось бы помечтать о том, что Twitter присоединится к так называемому Fediverse сообществу частных соцсетей, которые могут общаться друг с другом и не имеют единого центра, соответственно не имеют и единой точки отказа. И тогда также будет не страшна никакая потенциальная блокировка, о которой может далее пойти речь в недрах РКН в случае, если шейпинг не возымеет эффект.



Что будет делать РКН далее? Возможны ли новые замедления других соцсетей?


РКН пока что не планирует блокировать соцсети и ещё только начал обкатывать работы элементов ТСПУ. Вероятно, что в течение некоторого времени будут возникать различные проблемы и ограничения у многих пользователей, пока ведомство не решит их или самостоятельно, или с помощью операторов связи. РКН может замедлить и другие соцсети, например, Facebook. Twitter с ~100 тыс. пользователей в России фактически РКН использует в качестве испытательного стенда для ТСПУ. У ТСПУ также есть ограничения по количеству одновременно обрабатываемых сессий. Нельзя так просто взять и начать шейпить все пользовательские сервисы в сети начнутся зависания, вплоть до временного шатдауна.
Подробнее..

Как замедлили Twitter? Что такое DPI? Разбор

13.04.2021 20:10:28 | Автор: admin
Наверное, вы слышали, что на этой неделе стартовало так называемое замедление Twitter.

С 10 марта 100% мобильного и 50% стационарного трафика Twitter в России официально замедлены. Все это стало возможным благодаря технологии DPI. Мы решили разобраться, как это работает и как устроен механизм замедления.

Почему это важно? Можно предположить, что Twitter это репетиция перед замедлением/блокировкой Facebook, а потом YouTube.

Поэтому сегодня разберемся, что такое DPI, как работает и какие у него возможности.

Будет ли у нас как в Китае? И как от этого защититься?



Начнем издалека, в ноябре 2019 года вступил в силу закон, по которому операторы связи должны были начать установку специальных технических средств противодействия угрозам (ТСПУ).

Позднее выяснилось, что за аббревиатурой ТСПУ скрывалась известная любому сисадмину технология DPI Deep Packet Inspection или Глубокий анализ пакетов. Не путать с плотностью пикселей на дюйм это тоже DPI, но Dots Per Inch.



И вот она дошла до тестирования в масштабах страны. На примере твиттера.

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

Как работает DPI?


Сисадмины знают, что передача данных в сети разделена на уровни: от физического, где передаются биты, до уровня приложений, где упаковывается сообщение в мессенджере. На каждом уровне пакет данных пополняется своими метаданными, относящимися к нему. Получается своеобразная матрешка. Например, какое приложение отправляет информацию, на какой IP-адрес и так далее.

Так вот DPI умеет просматривать данные разного уровня и сами пакеты. И оно может понять не только откуда и куда идет трафик, но и что это за трафик конкретно: текстовое сообщение, картинки или видео, голосовой трафик Skype или может даже торрент.А дальше сделать с ним, то что хочется:
  • Приоритизировать
  • Ограничить по скорости
  • Перенаправить
  • Заблокировать
  • Ну или, конечно, передать получателю.

Кстати насколько именно замедляется Twitter сейчас непонятно. Лично я проблем пока не наблюдаю. Но почему так мы еще поговорим.



Это сильно упрощает задачи по блокировке сайтов и сервисов. Почему?

Раньше блокировки делались по IP-адресам. А это означало, что сервис ограничивался полностью. А кроме этого страдали сайты, которые записаны на тот же IP-адрес.

Теперь можно внимательно рассматривать пакеты и заблокировать, к примеру только загрузку картинок.

Но как вся эта вундер-технология работает?


Есть две вещи, которые анализирует DPI: сами пакеты информации, причем как метаданные и заголовки, так и внутреннее содержимое. И второе это так сказать поведение пакетов данных.



Давайте посмотрим на пример. Вот так выглядит заголовок пакета при получении данных браузером и с ним все ясно. Сверху написан протокол HTTP, то есть скорее всего веб-страничка. Мы видим адрес запроса. И даже, какие именно данные отправляются.



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





С зашифрованным трафиком сложнее.Тут инфы намного меньше. Система увидит, какой порт используется (это дает намек на тип приложения), IP-адреса, тип шифрования. А все остальное зашифровано, даже URL-адрес.

Есть и вторая часть алгоритмов DPI. DPI применяет так называемый эвристический анализ: из пакета извлекаются небольшие кусочки данных, так сказать образцы. А дальше система смотрит на что эти данные похожи. Сравнивая их с огромной базой известных образцов. Такие образцы данных называются сигнатурами трафика.



Это очень похоже на то как работает Shazam, который сравнивает небольшой кусочек песни, записанный вами на диктофон, с огромной базой сигнатур песен которые хранятся на сервере. То есть по большому счету DPI это Shazam для трафика.



Кстати, точно по такому же принципу работают антивирусы, они сравнивают сигнатуры новых вирусов с огромной базой известных вирусов.

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

И главное, что поскольку все происходит в реальном времени, такой подход позволяет не сильно замедлять интернет.

Как можно использовать DPI?


Классифицировав пакет, технология DPI позволяет много чего с ним сделать и в целом технология может быть полезна. С помощью DPI можно повышать качество и скорость соединения, приоритизируя один тип трафика над другим.Например, если в вашей локалке все качают торренты, то люди не смогут нормально созвониться по ZOOM по работе. Тогда DPI позволит трафику ZOOM поставить приоритет повыше.

Но если вы Роскомнадзор, у вас вероятно другие приоритеты.

Но вопрос в том, кто будет определять, какой трафик приоритетный а какой нет, остается открытым. Например, при помощи DPI вполне можно продвигать одни сервисы и замедлять другие: отдавая приоритеты отечественным аналогам. К примеру, можно замедлить YouTube и при этом ускорить Rutube.В общем, вариантов для фантазии масса.

Архитектура или почему все снова пошло не по плану?


Но если существует такой мощный инструмент, почему же с Twitter по-прежнему все весьма неплохо?

Важным является вопрос архитектуры и внедрения: то есть, где именно устанавливать DPI-оборудование. Чтобы весь трафик страны проходил проверку, необходимо, чтобы операторы ставили DPI на всех своих пограничных шлюзах. Логично.

Вы обратили внимание, что анонсировано: Замедление для 100% мобильного трафика, а для стационарного только 50%? Распространять опасный по мнению РКН контент через компы не так опасно, что ли? Нет.

Просто внедрили технологию далеко не все. С тусовкой мобильных операторов удалось договориться. А маленьких местных провайдеров интернета огромное количество. Но это полбеды.

Во-вторых, как и в случае с Telegram, заблокировать Twitter не так уж и просто. Дело в том, что Twitter для обеспечения высокой скорости работы сервиса по всему миру пользуется услугами CDN-провайдера. Он называется Akamai.

CDN Content Delivery Network сеть доставки контента.




CDN-провайдер предоставляет Твиттеру распределенную по всему миру инфраструктуру. Как правило, это необходимо, чтобы пользователь при обращении к какому-либо сайту получал информацию не с его основного сервера, который может находиться на другом конце света, а с ближайшего к нему узла.

Такая распределенная система доставки контента заметно усложняет возможность блокировки или ограничения доступа к ресурсу. Потому что если приложение не получит данные по одному адресу, оно пойдет в другой. А там у оператора может быть не включен DPI.



Чтобы наверняка ограничить доступ к интернет-сервису, использующему CDN, требуется ограничить доступ практически ко всей сети CDN-провайдера, у которого могут быть десятки тысяч серверов по всему миру. Иными словами, чтобы заблокировать Twitter, надо заблокировать CDN-провайдера, а от этого снова ляжет половина интернета.

И я даже не буду останавливаться на курьезной ситуации, когда ограничивают полосу пропускания не только для домена twitter.com, но и для всех доменов, в названии которых есть сочетание t.co это короткий домен, принадлежащий твиттеру. Таким образом, ограничениям подвергались и другие сайты, к примеру: reddit.com, microsoft.com и даже сайт Russia Today rt.com. Предположительно по этой же причине прилегли сервера ростелекома.

Впрочем, со временем это вроде починили. Интересно другое.

Ограничения DPI. Что делать?




Но самое любопытное: поскольку это своего рода гадание, нет единого стандарта DPI. У каждого поставщика оборудования свои алгоритмы и технологии.

Качество и эффективность работы DPI очень сильно зависит, от качества базы сигнатур, которую должен на постоянной основе обновлять поставщик. Иными словами, если Twitter что-то поменяет в составе пакетов трафика, то не факт, что старые DPI смогут классифицировать трафик по старым сигнатурам.



Ну и наконец, DPI достаточно легко обойти при помощи VPN, так как VPN шифрует весь трафик и подменяет ваш IP-адрес, то и DPI для него не страшен.



Но ожидается и более простое решение. Протоколы шифрования тоже не стоят на месте. И с приходом TLS 1.3 и DNSSEC еще больше данных приложения и пользователя будут скрыты от DPI. И понять, что в системе за пакет будет еще сложнее. Такие дела.
Подробнее..

Твиттер Илона Маска в телеграме и с переводом на русский

16.06.2021 16:13:28 | Автор: admin

Хочу поделиться одной моей поделкой, возможно, кому-то она тоже будет полезна. В этой статье я поделюсь тем, что я сделал, чтобы читать Twitter-аккаунт Маска в удобном мне месте и имея под рукой перевод англоязычных твитов на русский.

Проблема

Последние несколько лет замечаю за собой, что хочу начать регулярно почитывать тот или иной блог, но если он не находится в зоне удобного или привычного доступа (к сожалению весь твиттер для меня таков, ничего не могу с собой поделать, не читатель я твиттера), то я довольно быстро забиваю на это. Еще хуже, если блог на другом языке, тут появляется дополнительная проблема, когда из-за технических терминов или разговорного жаргона сложно понять смысл. Собственно такие "преграды" обычно и приводят к тому, что вроде бы и хочется, но как-то не делается.

Идея

Сейчас я делаю на заказ программных роботов, которые в онлайне обрабатывают новостные потоки в соцсетях, фильтруют, выбирают наиболее интересные и цитируемые, и передают заказчику. Я подумал, почему бы мне не использовать свои навыки и не облегчить себе жизнь в описанной выше проблеме. Для этого нужно только каждые сколько-то минут заходить в твиттер, забирать новые сообщения, прогонять их через переводчик и отправлять в канал в телеграме. Кажется, ничего сложного.

Подводные камни

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

Вторая проблема, отказ твиттера в выдаче доступа к API в описанных мной кейсах. То есть остается единственный вариант заниматься веб-скраппингом. Ну что ж.

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

Технологии

Я решил попробовать самостоятельно и начал гуглить что-то вроде "parsing twitter without API". Нашлось достаточно много решений, сразу скажу, что решениеtwint библиотека с открытым исходным кодом, которая вполне работоспособна и подошла под мою задачу.

Для того, чтобы перевести текст с английского на русский, я сначала было собирался использовать google translate, но понимал, что в нем ограниченное количество бесплатных переводов, решил что попробую использовать единственную известную мне нейросеть для перевода с английского на русскийfairseqот Facebook AI Research. Качество перевода показалось мне вполне приемлемым с точки зрения того, чтобы понять в чем суть твита, хотя оно и не было идеальным.

Все это я обернул в скрипт на языке программирования python и запустил на постоянную работу на своем сервере.

Примеры кода

Чтобы собрать данные из твиттера без использования выделенных девелоперских доступов, логинов, паролей и API, нужно сделать следующее:

Установить библиотеку twint

pip3 install twint

Запустить код формата

twint -u <name_of_twitter_user> -o output.csv --csv --since 2020-01-01 --retweets

Здесь есть важный момент, что запускается это все из-под bash, при том что у библиотеки есть python API (да и написана она на питоне), но при этом я потратил довольно много времени и оно ни в какую не заводилось. При этом если запускать из командной строки - все кроме автоматического перевода постов у меня работало.

Из функционала, который есть у библиотеки еще отмечу:

  • Возможность искать твиты пользователя по ключевому слову

twint -u username -s pineapple
  • Возможность находить твиты пользователя с указанием номеров телефонов и почт

twint -u username --email --phone
  • Поиск твитов вокруг определенной локации

twint -g="48.880048,2.385939,1km" -o file.csv --csv
  • Сохранение в Elasticsearch или SQLite

twint -u username -es localhost:9200twint -u username --database tweets.db
  • Сохранение фоловеров, подписок и избранных для пользователя

twint -u username --followerstwint -u username --followingtwint -u username --favorites

Данные сохраняются в csv файл, в котором присутствуют такие поля как (перечислю те, которые использовал сам, так как их много и большинство несут мало информации):

id - идентификатор сообщения

conversation_id - идентификатор беседы

created_at - дата создания сообщения

tweet - текст сообщения

mentions - упоминания пользователей твиттера ( список словарей)

urls - вставленные по правилам твиттера ссылки (например на youtube)

photos - ссылки на картинки

link - ссылка на твит

reply_to - список словарей с пользователямя, ответом на твиты которых является твит

У библиотеки есть также возможность перевода на другой язык, но она у меня совсем не заработала. Собственно по этой причине я искал другую возможность. Нашел я, как упоминал выше, открытую разработку Facebook AI Research - библиотеку fairseq, в которой можно скачать веса нейронки для перевода в частности из английского в русский и наоборот.

pip install hydra-core

Итого необходимо было установить:

pip install torch pip install hydra-core==1.0.0 omegaconf==2.0.1pip install fastBPE regex requests sacremoses subword_nmt 

Вообще мануал по установке и пример использование есть на сайте pytorch, но как видите у меня он немного отличается. Для того, чтобы сделать перевод можно пользоваться следующим куском из примера - он вполне рабочий:

import torch# Compare the results with English-Russian round-trip translation:en2ru = torch.hub.load('pytorch/fairseq', 'transformer.wmt19.en-ru.single_model',                        tokenizer='moses', bpe='fastbpe')ru2en = torch.hub.load('pytorch/fairseq', 'transformer.wmt19.ru-en.single_model',                        tokenizer='moses', bpe='fastbpe')paraphrase = ru2en.translate(  en2ru.translate('PyTorch Hub is an awesome interface!'))assert paraphrase == 'PyTorch is a great interface!'

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

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

Как пользоваться

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

Итого у меня получилсятелеграм-каналпод названием "Твиттер Илона Маска" (подписывайтесь, мне будет приятно, что это нужно кому-то еще , будет дополнительный стимул поддерживать в будущем), в котором можно

1) читать новые и старые посты Илона Маска

2) видеть перевод текста на русский язык

3) перейти по ссылке на исходный пост в твиттере

И все это без регистрации и смс:)

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

Подробнее..

Из песочницы Мониторинг доступности сайта с информированием в Twitter на Node-RED

16.08.2020 20:19:14 | Автор: admin
Допустим у вас есть сайт-форум и он падает на пару минут, но 24/7. Надо как-то предупреждать посетителей сайта что проблема началась и проблема кончилась, чтобы не переживали и не думал что это у них что-то сломалось! В качестве резервного канала общения буду использовать Twitter аккаунт. Node-Red визуальная система программирования, в которой легко начать программировать расставляя и соединяя различные ноды. Её часто используют для IOT.

hh-nodered-001

Перед началом


У вас уже должен быть установлен Node-Red c нодой moment. Различные способы установки описаны на сайте разработчиков /nodered.org/docs/getting-started/

Импортите код flow в свой Node-RED и у вас будут все ноды как на картинке

[{"id":"ff8e6c15.1db9e","type":"inject","z":"c20c2bf8.f5bba8","name":"1 min","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":240,"wires":[["aa173003.800e9"]]},{"id":"fa2dd78f.64ef58","type":"http request","z":"c20c2bf8.f5bba8","name":"name.com","method":"GET","ret":"txt","url":"https://name.com","tls":"","x":210,"y":500,"wires":[["3c3eb473.fddb4c","6c05ab54.c151a4"]]},{"id":"3c3eb473.fddb4c","type":"switch","z":"c20c2bf8.f5bba8","name":"not 200 respons","property":"statusCode","propertyType":"msg","rules":[{"t":"neq","v":"200","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":440,"y":520,"wires":[["5a06f9e1.e303d8","cc3ecdf3.6ce24"]]},{"id":"6c05ab54.c151a4","type":"switch","z":"c20c2bf8.f5bba8","name":"found word on web","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"ca-pub-1234545647","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":450,"y":480,"wires":[["834b9f2b.cfb89","cc3ecdf3.6ce24"]]},{"id":"107dec81.7d3953","type":"function","z":"c20c2bf8.f5bba8","name":"web up","func":"\nreturn {\n    payload: ` ${msg.responseUrl} its OK`\n}","outputs":1,"noerr":0,"x":1140,"y":420,"wires":[["e3f88e59.88023"]]},{"id":"d5bf4f53.b8ae2","type":"function","z":"c20c2bf8.f5bba8","name":"web down","func":"\nreturn {\n    payload: ` name.com it is DOWN at`\n}","outputs":1,"noerr":0,"x":1140,"y":620,"wires":[["300022a2.3d497e"]]},{"id":"ddeb8430.749ed8","type":"inject","z":"c20c2bf8.f5bba8","name":"","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":100,"wires":[["e82f93c1.0e89e"]]},{"id":"e82f93c1.0e89e","type":"moment","z":"c20c2bf8.f5bba8","name":"","topic":"","input":"","inputType":"msg","inTz":"Europe/Moscow","adjAmount":"0","adjType":"hours","adjDir":"add","format":"date","locale":"en_US","output":"time","outputType":"flow","outTz":"Europe/Moscow","x":460,"y":100,"wires":[[]]},{"id":"4c032cf4.424084","type":"file","z":"c20c2bf8.f5bba8","name":"Write www.log","filename":"/root/iot_data/www.log","appendNewline":true,"createDir":false,"overwriteFile":"false","x":1820,"y":480,"wires":[[]]},{"id":"834e384f.425cb8","type":"function","z":"c20c2bf8.f5bba8","name":"Add time to data","func":"var timenow=flow.get('time');\nvar downtimenow=flow.get('downmin')-5;\nmsg.payload = msg.payload + ' ' + timenow + '. Downtime: ' + downtimenow + 'min #myhost' ;\nreturn msg;","outputs":1,"noerr":0,"x":1640,"y":500,"wires":[["4c032cf4.424084","4c25ef47.71b94"]]},{"id":"e3f88e59.88023","type":"trigger","z":"c20c2bf8.f5bba8","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1360,"y":420,"wires":[["e24a68a2.c83f58"]]},{"id":"300022a2.3d497e","type":"trigger","z":"c20c2bf8.f5bba8","op1":"","op2":"","op1type":"pay","op2type":"pay","duration":"0","extend":true,"units":"min","reset":"reset","bytopic":"all","name":"","x":1360,"y":620,"wires":[["419d4a24.ec1604","11c46064.1ffc7"]]},{"id":"aac1daf2.c77e18","type":"function","z":"c20c2bf8.f5bba8","name":"send reset","func":"\nreturn {\n    payload: `reset`\n}","outputs":1,"noerr":0,"x":1150,"y":540,"wires":[["e3f88e59.88023"]]},{"id":"59f336.30325ccc","type":"function","z":"c20c2bf8.f5bba8","name":"send reset","func":"\nreturn {\n    payload: `reset`\n}","outputs":1,"noerr":0,"x":1150,"y":480,"wires":[["300022a2.3d497e"]]},{"id":"5a06f9e1.e303d8","type":"counter","z":"c20c2bf8.f5bba8","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":690,"y":660,"wires":[["e93a8fe8.8bb23"]]},{"id":"323380d1.a71af","type":"switch","z":"c20c2bf8.f5bba8","name":"if its 3","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"3","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":990,"y":660,"wires":[["d5bf4f53.b8ae2","aac1daf2.c77e18"]]},{"id":"24d1969a.a4e5da","type":"function","z":"c20c2bf8.f5bba8","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":890,"y":440,"wires":[["5a06f9e1.e303d8"]]},{"id":"834b9f2b.cfb89","type":"counter","z":"c20c2bf8.f5bba8","name":"count to 10","init":"0","step":"1","lower":"0","upper":"10","mode":"increment","outputs":1,"x":670,"y":380,"wires":[["641f8b3.143cd74"]]},{"id":"440de7c7.eb6d48","type":"function","z":"c20c2bf8.f5bba8","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":850,"y":580,"wires":[["834b9f2b.cfb89"]]},{"id":"1b410fb8.f2e8b","type":"switch","z":"c20c2bf8.f5bba8","name":"if its 5","property":"count","propertyType":"msg","rules":[{"t":"eq","v":"5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":990,"y":380,"wires":[["107dec81.7d3953","59f336.30325ccc"]]},{"id":"641f8b3.143cd74","type":"switch","z":"c20c2bf8.f5bba8","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":840,"y":380,"wires":[["24d1969a.a4e5da","1b410fb8.f2e8b"]]},{"id":"e93a8fe8.8bb23","type":"switch","z":"c20c2bf8.f5bba8","name":"it its > 0","property":"count","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":840,"y":660,"wires":[["323380d1.a71af","440de7c7.eb6d48"]]},{"id":"e24a68a2.c83f58","type":"switch","z":"c20c2bf8.f5bba8","name":"not a on start web up message","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"Started!","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1650,"y":420,"wires":[["834e384f.425cb8"]]},{"id":"2ef6b867.dd9328","type":"inject","z":"c20c2bf8.f5bba8","name":"","topic":"","payload":"Started!","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":240,"y":160,"wires":[["e3f88e59.88023","24d1969a.a4e5da","440de7c7.eb6d48"]]},{"id":"f3ac9999.c58e48","type":"switch","z":"c20c2bf8.f5bba8","name":"Check if my Internet is up","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"200","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":230,"y":420,"wires":[["fa2dd78f.64ef58"]]},{"id":"aa173003.800e9","type":"http request","z":"c20c2bf8.f5bba8","name":"google.com","method":"GET","ret":"txt","url":"https://www.google.com/","tls":"","x":210,"y":320,"wires":[["f3ac9999.c58e48"]]},{"id":"cc3ecdf3.6ce24","type":"counter","z":"c20c2bf8.f5bba8","name":"count to  3000","init":"3","step":"1","lower":"0","upper":"3000","mode":"increment","outputs":1,"x":1360,"y":160,"wires":[["aeda28f4.55d248"]]},{"id":"419d4a24.ec1604","type":"function","z":"c20c2bf8.f5bba8","name":"reset counter","func":"msg.reset = true; return msg","outputs":1,"noerr":0,"x":1370,"y":240,"wires":[["cc3ecdf3.6ce24"]]},{"id":"e540e4d1.e10a98","type":"file","z":"c20c2bf8.f5bba8","name":"Write www.log","filename":"/root/iot_data/www.log","appendNewline":true,"createDir":false,"overwriteFile":"false","x":1820,"y":600,"wires":[[]]},{"id":"11c46064.1ffc7","type":"function","z":"c20c2bf8.f5bba8","name":"Add time to data","func":"var timenow=flow.get('time');\nmsg.payload = msg.payload + ' ' + timenow + ' #myhost';\nreturn msg;","outputs":1,"noerr":0,"x":1600,"y":620,"wires":[["e540e4d1.e10a98","c51c74c3.bdf448"]]},{"id":"aeda28f4.55d248","type":"function","z":"c20c2bf8.f5bba8","name":"Set downmin","func":"flow.set(\"downmin\", msg.count);","outputs":1,"noerr":0,"x":1550,"y":160,"wires":[[]]},{"id":"c51c74c3.bdf448","type":"twitter out","z":"c20c2bf8.f5bba8","twitter":"","name":"Tweet","x":1790,"y":640,"wires":[]},{"id":"4c25ef47.71b94","type":"twitter out","z":"c20c2bf8.f5bba8","twitter":"","name":"Tweet","x":1790,"y":520,"wires":[]}]


Что делает этот flow


  • Проверяет есть ли доступ в Интернет
  • Проверяет есть ли доступ к сайту
  • Если доступа нет/восстановлен твитит об этом
  • Считает сколько времени сайт простаивал
  • Пишет в файл лог

Что нужно настроить


hh-nodered-002

  • нода 1: Надо написать адрес сайта для мониторинга
  • ноды 2: Надо задать первую часть текста для твита
  • ноды 3: Здесь к твиту добавляются временные данные, так же можно дописать свой текст
  • ноды 4: Здесь надо задать свой аккаунт Twitter и папку для файла логов после изменений не забывайте наживать Deploy

Как это работает


Начинаем слева с верху

  • нода [timestamp] пишет время в переменную time
  • нода [Started!] обнуляет счётчики событий на старте, и взводит тригеры
  • нода [1 min] запускает каждую минуту процесс мониторинга.

Первым делом проверем работает ли у нас интернет ноды [google.com] > [Check if my Internet is up] если получаем ответ 200 значит интернет у нас работает, если нет то или у нас интернет не работает или google.com прилег

Далее проверяем свой сайт [name.com] > ( [found word on web] [not 200 respons] ). Тут нам нельзя просто ждать ответа 200, его могут выдавать и страницы заглушки(например неоплата хостинга) поэтому сайт считается работающим если найдено слово в его контенте у меня это идентификатор Google. Если нет ответа 200(сайт вообще не работает или выдает ошибки 404 и пр) то считаем что сайт не работает.

Далее начинаем считать эти события, если подряд приходят 3 сообщения о неработающем сайте, то оно передаётся дальше на триггер который пропускает одно сообщение и блокируется чтобы не было много твитов об одном и том же. Чтобы сработал триггер отправки твита что все ОК нужно подряд 5 сообщения о работе сайта. Счетчики сообщений обнуляют друга друга при возникновении сообщения, это обеспечивает подсчёт 3-5 сообщения подряд.
Триггер срабатывает когда открывает противоположный на прием.
Подробнее..

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

23.09.2020 14:17:26 | Автор: admin

С началом пандемии большинство разработчиков Кремниевой долины начали трудиться из дома. Довольно быстро они стали задаваться вопросом: зачем платить бешеные цены за аренду недвижимости, если домашний офис можно организовать где угодно? Средняя плата за аренду односпальной квартиры в Сан-Франциско составляет $3629. А, скажем, в Чикаго, Атланте или Филадельфии тоже вполне крупных городах она будет около $1650. Зачем платить лишние $2 тысячи, больше $20 тысяч в год, чтобы сидеть в своём стуле чуть поближе к штаб-квартире компании?

Многие задумались о переезде (по крайней мере, на время). Но хитрые финансисты Кремниевой долины своего не упустят. И теперь компании начинают имплементировать новую стратегию: регулируемая зарплата. Ваш доход будет снижаться соответственно тому, в насколько дешевый регион вы переедете. Гипер-экономию получить не получится, а удаленно жить где-нибудь в глуши может даже оказаться себе дороже.

Разговоры об этом шли уже давно, но теперь, по данным Bloomberg, первая фирма из Пало-Альто, VMware (принадлежащая Dell), уже ввела такую политику. Каждый удаленный сотрудник, решивший сбежать из дорогого Сан-Франциско, получит сокращение з/п. Если переехать к горам Денвера, получишь минус 18%. А если отправишься в Лос-Анджелес или Сан-Диего, будет минус 8%. В итоге релокация становится финансово невыгодной. Какая-то экономия получается, но всех проблем с переездом и обустройством на новом месте дело почти не стоит. Более того: чем выше зарплата (то есть, чем более важный и ценный сотрудник) тем менее выгодно ему становится переезжать.

Новая политика кажется довольно строгой, но после публикации материала Bloomberg один из сотрудников VMware написал пост, чуть детальнее поясняя ситуацию. Мол, изменению подлежит только базовая зарплата, а не бонусы. Поэтому снижение доходов у удаленщиков будет не настолько серьезным, как может показаться. Например, у него на зарплату приходится только половина от общей компенсации. А в других штатах США (не говоря о других странах) придется платить гораздо меньше налогов. И купить себе жильё будет потом в разы проще. Так что плюсы переезда для него все равно перевешивают недостатки.

Старший вице-президент VMware по управлению персоналом, Рич Лэнг, говорит, что компания меняет зарплату сотрудников в зависимости от средней стоимости труда в регионе и того, что предлагают другие работодатели. Лэнг признал, что, вероятно, некоторые сотрудники будут продолжать указывать, что они трудятся в Калифорнии, чтобы получать полную выплату. Но их будет меньше, чем можно было бы ожидать:

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

Компания также выдает всем дистанционным сотрудникам по $400 на организацию их домашних офисов.

Второй вариант решения проблемы с удалёнщиками, сбегающими из Кремниевой долины, предложила компания Stripe, один из главных конкурентов PayPal. Она выделяет им по $20 000 чтобы те могли переехать из крупных городов в более дешевые сельские регионы. Но и тут есть подвох. Как часть этой же сделки, они получают -10% к зарплате (по информации Forbes). То есть, уже спустя полтора-два года компания свое отобьет. Зато сотрудники смогут более комфортно обосноваться на новом месте. И производительность труда не пострадает так сильно.

Фирма ServiceNow, разрабатывающая облачную платформу, тоже думает об изменении почасовой оплаты сотрудникам, уезжающим из Сан-Франциско. По словам руководителя компании Билла МакДермотта, такая система стартует уже в 2021 году:

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

Twitter и Facebook тоже сделали расплывчатые заявления о том, что они собираются корректировать зарплаты сотрудников в зависимости от их местоположения. Twitter уже предлагает людям, работающим на дому, бонус в $1000 и дополнительные отпускные. А Facebook на днях открыла вакансию директора удаленной работы. Он должен будет отвечать за переход компании на удалёнку, разрабатывать стандарты, устанавливать глобальные ценности, а также заниматься вопросами льгот и оплаты труда. Плюс компания заявила, что выделит удалёнщикам $1000 для обустройства домашнего офиса.

Раньше Facebook собиралась возвращаться к работе в офисе уже под конец 2020-го. Но потом увидела, что производительность во время пандемии не снизилась, а даже возросла. Теперь Марк Цукерберг говорит, что его сотрудники продолжат работать удаленно, потому что за этим будущее:

Мы станем самой прогрессивной компанией в сфере удаленной работы для нашего масштаба. В течение 5-10 лет не менее половины наших работников по всему миру перейдут на удалёнку на постоянной основе.

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

Мы будем корректировать зарплату в соответствии с вашим расположением. Люди, которые не будут с нами в этом честны, получат серьезные неприятности, вплоть до увольнения.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru