будни

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

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

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

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

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

Исполнение детской мечты: я на встрече IETF в Монреале. IETF — инженерный совет интернета. За длинным столом сидят инженеры Google, Apple, Cloudflare, Fastly и Akamai и работают над протоколом QUIC. Рядом коллеги пишут патч для OpenSSL, занимаются шифрованием. За соседним столом работают над улучшением протоколов сетевого уровня, роутинга.

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

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

😍🥰

Выяснили сегодня, что nginx плохо относится к кукам с дефисами в имени. Если кука не существует — то считает, что значение cookie-name равно всему, что идет после дефиса — -name в этом примере. Могли бы показывать какое-то уведомление, когда используешь такую бяку в конфигурации.

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

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

Такая вот цепочка событий.

upd: читатели замечают, что это поведение nginx — известная «фича, а не баг». Вот так и выдали мы себя, что не настоящие мы сварщики (админы), а только мимикрируем :)

Похвастаюсь: записали сегодня подкаст про машинное обучение с Петей Ромовым, техдиром gosu.ai (стартап, анализируют доту), и Самером Фатайри, главным по дата-сайнсу в adjust (крупная компания про mobile attribution).

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

В последствии, Станислав Семенов стал top-1 игроком на Kaggle — самой популярной соревновательной платформе для дата-сайнтистов (читай олимпийским чемпионом в машинном обучении). 💫

Перевёл сегодня интерфейс одного проекта с одного языка на другой с помощью Google Cloud Translation API.

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

Я попробовал несколько разных систем машинного перевода для этой задачи, самая хорошая - Google Translate. Она даже теги span и переменные в фигурных скобках не корёжит, переводит только тексты. Учитывая бесплатные полмиллиона символов перевода - даже с настройкой биллинга не придётся заморачиваться, скорее всего. Регистрируетесь в Google Cloud Platform, пишете небольшой питоновский скрипт и вперёд. Можете взять мой за основу.

Конечно, локализация (l10n) и интернационализация (i18n) проекта (разница между ними) — гораздо больше, чем просто перевод; а даже организация перевода для большого проекта с несколькими переводчиками — то ещё развлечение. Но это тема для гораздо более длинного поста.

«Название компании потом запикаем», «часть про *** и *** нужно вырезать целиком» — вот лейтмотив вчерашней записи подкаста про IT-безопасность.

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

Всю свою карьеру я стеснялся и стыдился того, что не умею профессионально программировать (я начинал админом, так что unix однострочники не в счет). Я говорил, что хочу научиться, покупал книжки, но дальше пары страниц, примеров и вечеров дело не шло.

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

С радостью представляю первую программу, которой пользуются больше 3 человек. Издательский дом «Комитет» запустил публичное API для комментариев на своих сайтах tj.ru, vc.ru и dtf.ru. DTF.ru — сайт про игры и другие развлечения, так что на выходных я запрогал для него бота. Бот отвечает информацией об игре, если взять её имя в квадратные скобки. Спасибо техдиру комитета Илье за хорошее API и помощь в тестировании. Эта история бы не состоялось без Дениса из Комитета и главреда RAWG Сережи. Коллаборация!

Мне не стыдно показать исходный код публично; наверное, потому, что я не профессиональный программист. Код работает, вы можете использовать его как основу для своих ботов. Буду благодарен, если подскажете, что можно сделать лучше (python, github).

Кстати, у RAWG хорошая обвязка API под питон (написанная немецким студентом), так что если хотите поделать что-то с играми — не стесняйтесь.

Да здравствует свобода от внутренних ограничений! Ура.

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

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

Теперь с нетерпением жду новостей Forbes.ru о запусках. Меж тем, они расширяются, ищут хорошего бэкендера на пыхе, аналитика и smm-щика. Хотите работать в медиа с хорошей продуктовой командой, дельным руководством и офисом рядом с Белым домом? Пишите Наташе на pushkina@forbes.ru

Приехал в Вильнюс на день, пообщаться с коллегами по RAWG. В результате 7 часов подряд бились над идеями, куда развиваться. И даже напрогал скрипт на питоне по-быстрому, чтобы проверить одну гипотезу.

Самое крутое в стартапе — чувство, что можно всё изменить, перепридумать и запустить буквально на коленке.

Эта свобода пьянит, хочется пробовать, рисковать и стараться.

🚀

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

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

Поделюсь, как я тестировал пуши в Медузе. В какой-то момент я придумал отправлять в тестовом пуше ровно то же содержимое, которое было в предыдущем продакшен пуше. Если такой тест протечет на продакшен — большинство людей подумают, что это глюк телефона (или их самих глючит), но в любом случае — такая проблема мало кого удивит. «тест» или того хуже «111 zaebalo» — гораздо хуже. Признаюсь, что порой я тестировал пуши «путин умер», но повторять такое я не рекомендую.