объяснялка

Ищете программиста? Я начинаю с того, что пишу описание вакансии, которое не стыдно показать классным кандидатам. Во время редактуры становится яснее, кто же нужен.

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

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

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

Вот пример вакансии до и после редактуры.

Почему важно шифрование?

Австралия приняла закон, который требует компании «предоставить ключи шифрования», прямо как в России с телеграмом (и даже хуже, 2, 3). Политики по всему миру синхронно творят дичь под флагом борьбы с терроризмом и детской порнографией (добавьте борьбу с наркотиками по вкусу). Пора объяснить «на пальцах», что происходит и почему это важно.

Идея простая: математика и программирование позволяют шифровать сообщения так, что после зашифровки, их сможет прочитать только адресат. Даже тот, кто только что зашифровал сообщение — не сможет расшифровать его обратно.

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

Прослушка и слежка — мощные инструменты, а вместе с вечным хранением и возможностями машинного обучения — сравнимы с ядерной бомбой. И тут какое-то «шифрование» делает их невозможными. Примерно как пороховые пушки превратили замки из супер-оружия в развлечение для туристов.

Политики пытаются вернуть свои «права на прослушку». Как? В 1970-1990е они пытались запретить шифрование. В штатах были законы, приравнивавшие мощное шифрование к оружию, доступ и экспорт которого контролировались наравне с базуками и гаубицами. В отличие от базук — воспроизводство качественных программ шифрования не требует заводов. Достаточно знать идею, а шила в мешке не утаишь.

Современный заход политиков следующий: а давайте все, кто делает программы шифрования, добавят в них «какой-нибудь способ», чтобы при необходимости, правительства могли прослушать переписку «как раньше», а во всех остальных случаях — пусть шифрование работает «как задумано».

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

Я не случайно привожу аналогии с оружием. Разговор о праве на тайну переписки, на тайну личных записей — про власть. Про право думать — изучать, писать, обсуждать то, что хочешь, а не то, что принято. И власть это запретить. Любое изменение статуса-кво, любая революция начинаются с идеи и именно поэтому государства по всему миру прикладывают столько сил, чтобы эту свободу «обуздать».

Не думаю, что у нас есть шанс что-то изменить в законах прямо сейчас. Но просвещать, объяснять, почему свобода (тайна) переписки это свобода мысли и почему её нельзя отобрать только у «плохих людей», оставив «хорошим» — наша обязанность.

Ютуб-агитация, чтобы разбавить пафос (к сожалению, только на английском): юмористическая реклама австралийского закона от комиков-антиподов и эпизод про массовую прослушку от Джона Оливера, где он прилетает в Москву, берет интервью у Сноудена (!) и переводит все его ответы на дикпики (!!)

Проблема вагонетки — интересная этическая задача, которая принимает практическую важность из-за машин без водителя. Классическая формулировка такая: вагонетка едет по рельсам и скоро задавит пять людей; вы можете переключить стрелку и тогда вагонетка задавит только одного человека на запасном пути. Переключите ли вы стрелку?

В случае автомобилей без водителя, нам нужно выбрать, что мы хотим заранее, на этапе программирования машины. Кого спасти — ребенка или старика? Пассажира (aka владельца машины) или пешехода? Отдельный интересный вопрос — кто должен принимать эти решения? Производитель машины? Её покупатель? Общество?

В 2014 году, исследователи из MIT запустили онлайн-программу, где можно попереключать стрелки вагонетки самому. The Moral Machine стала виральной и за 4 года в ней сделали 40 миллионов моральных выборов люди из 233 стран мира. Ученые проанализировали данные и опубликовали статью в Nature на прошлой неделе.

Люди разных культур дают разные ответы на эти вопросы. Французы, например, ценят детей больше стариков, китайцы — наоборот, а эстонцам всё равно. Там много интересных наблюдений, рекомендую прочитать краткий пересказ результатов исследования в MIT Technology Review.

Этого нет в исследовании, но самые страшные, как мне кажется, китайцы — они, видимо, встроят в машины базу данных социального рейтинга и будут минимизировать суммарную потерю оного. Хочешь жить — повышай свою «полезность обществу». Что значит полезный обществу?

Попробуйте поиграть с The Moral Machine сами. Вот какой первый вопрос выпал мне (я считаю, что мужчины и женщины одинаково ценны, так что пусть едет прямо, как ехал):

У строителей под моим окном классическая «микросервисная архитектура приложения». У них есть 3 сервиса — полый бур, сверлящий дырку в земле, бетономешалка, не дающая бетону застыть и насос, закачивающий бетон из мешалки в отверстие, сверлимое буром.

Красным на картинке отмечены места, в которых один сервис «передает» бетон другому. Там должны быть подходящие отверстия, крепления и допустимое предельное давление бетона (чтобы это всё не разорвало) — это API. API — договоренности, по которым сервисы общаются друг с другом.

Допустим, можно было бы сделать убер-машину, которая умеет все — сверлить, качать и мешать. Засыпаете бетон, вставляете сверла и она делает вам готовые заполненные бетоном дырки — это была бы «монолитная архитектура приложений». Её было бы сложнее транспортировать по улицам и, наверное, ей нужен был бы очень крутой инженер для обслуживания.

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

Синтез речи и мимики лица по тексту, машинный перевод, чемпионство в шахматах и го, идентификация рака по рентгену точнее чем у опытных врачей — объем применений методов машинного обучения может создать иллюзию, что машины становятся умнее. Это не так. Можно натренировать стаю голубей отличать рак по рентгену в 99% случаев. Они не становятся от этого умнее.

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

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

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

Спасибо Самеру Фатайри за наводку.

«В интернете никто не знает, что ты — собака» — одна из самых популярных карикатур культового The New Yorker. Мужчина 40 лет прикидывающийся молодой девушкой в интернете — другой популярный мем эпохи, когда слова мем ещё не было.

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

Зачем выдавать машину за человека? Я сходу могу придумать две причины:

1) Реклама: рекламодатели и рекламные сети хотят, чтобы их рекламу видели живые люди, а не машины. Автоматизированная нереальная открутка рекламы — огромный рынок и компании с ним борятся.

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

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

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

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

Не хочется заканчивать на этом пост, но все эти методы также применяются для отслеживания людей в интернете. Режимом инкогнито и даже VPN'ом от этих алгоритмов не защититься.

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

Доменам .io ничего не грозит в ближайшие 5 лет. Не поддавайтесь панике!

Произошло следующее: Великобритания пообещала вернуть архипелаг Чагос в индийском океане Маврикию.

В результате квази-государственное образование под названием «Британская Территория в Индийском Океане» прекратит свое существование, а вместе с ней на покой отправится и ее доменная зона .io. Но бояться нечего.

После того, как передача состоится (а точной даты еще нет), произойдет цепочка технических событий: международная организация стандартизация ISO обновит свой список кодов государств ISO 3166 — именно там определен код IO, после чего вступит в действие регламент администрации адресного пространства интернета IANA (она отвечает в том числе за домены), согласно которому прекратится регистрация новых адресов в этой зоне. В правилах указано, что по умолчанию существующие домены должны работать еще 5 лет. При потребности регистратор может продлить этот срок до 10 лет.

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

Подробная и довольно увлекательная статья об этом на английском — тут.

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

BGPMon подробно объяснил, что случилось и я без зазрения совести ниже перескажу эту историю.

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

BGP - протокол, с помощью которого провайдеры обмениваются
«картами связности», говорят друг-другу, как можно отправить сообщение на любой компьютер в интернете.

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

В 2008 Пакистанцы объявили, что пакеты в YouTube теперь ходят через них (чтобы потом их тихонько "дропать", то есть делать вид, что их и не было - классический способ блокировки). Скорее всего, они собирались так сказать только своим пользователям, но сообщение случайно утекло во внешний мир и скоро весь интернет пытался получить доступ к ютубу через Пакистан (безуспешно).

В пятницу произошла менее драматическая, но не менее опасная ситуация с Гуглом. Гугл пирится с огромным числом провайдеров, иначе YouTube и поиск не работали бы так быстро. Для того, чтобы трафик от гугла «ходил» напрямую и случайно не завернул через посредника, провайдеры анонсируют свои адреса гуглу специальным образом, имеющим наивысший приоритет. Около полудня пятницы, Гугл, случайно транслировал все эти приватные анонсы крупному провайдеру Verizon. Ошибка длилась 10 минут.

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

Провайдеры стали пытаться передать данные друг-другу через цепочку Verizon-Google. Google вообще не занимается транзитом, а Verizon не рассчитывал на такие объемы. Многие остались без связи.

BGP - одна из технологий, во многом построенная на доверии профессионалов друг-к-другу. Тем болезненнее, когда они ошибаются.

На алгоритме Диффи-Хеллмана держатся современная криптография и интернет.

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

Вот одна картинка, которая помогла мне понять принцип работы алгоритма. Перевод мой специально для мамы. Мама, ты поймешь 100%.

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

Не корите себя, если очень стараетесь понять что-то в разработке и не получается. Скорее всего, часть ответственности на учителе. Если речь о вашем разработчике — просите объяснить яснее, вы имеете право понимать.

Как отфильтровать в гугл-аналитике залогиненных пользователей?

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

Есть способ, который рекомендует сама гугл-аналитика — User-ID. В каждом запросе к GA добавляете этот параметр и дело в шляпе. Проблемы: информация о поведении таких пользователей будет отображаться только в отдельном Property (их будет трудно сравнить с незалогиненными) и в нем будут недоступны real-time вид и отчеты по демографии. 👎

Мы решили эту задачу с помощью Custom dimensions. GA позволяет создать до 20 дополнительных полей, данные в которые можно отсылать вместе с событиями и далее фильтровать по этим полям события и пользователей. Мы назвали это поле Authenticated и отправляем в него значние Authenticated прямо с бэкенда на событиях логина и регистрации.

Удобно, что метка определена с User-level scope, а это значит, что её достаточно отправить один раз. Все последующие события от этого Client-ID (не спутайте с User-ID) будут помечены как аутентифицированные автоматически, на сервере GA. Нужно только не забыть отдельно проставить эту метку для тех, кто уже залогинен. Мы задеплоили для этого временный код на фронтенд, который выключим через месяц, когда вся «ядровая» аудитория отметится.

Теперь мы можем легко сравнить поведение залогиненных и незалогиненных посетителей сайта просто включив фильтры в GA; при этом мы сохранили возможность смотреть на суммарное поведение всех посетителей вместе и не потеряли real-time аналитику и демографию. 😎

Этот же прием можно использовать для выделения и анализа любых групп пользователей (не только по признаку залогиненности). Учтите, что удалить уже созданную кастомную метрику нельзя (можно только перепрофилировать её или перестать ею пользоваться) и их доступно всего 20, так что используйте их с умом.