будни

Филипп Бахтин и Максим Никаноров – создатели русского журнала Esquire и детского лагеря «Камчатка» – делают новый онлайн проект для детей про творчество и современное искусство. Мы с Федей помогаем с технологиями. Для создания прототипа и теста на живых детях нам нужен программист на месяц-полтора с перспективой (если тесты пройдут удачно) работы на постоянной основе.

Подробнее:

Ко мне пришли создатели русского Esquire и лагеря «Камчатка» с предложением оцифровать их методы развития творчества.

Под нашим чутким «мы охренеем это прогать», ребята ужали хотелки до MVP. Он состоит из 4 страничек, каждая из которых позволяет загрузить картинки/видео, подергать пару рычажков и на выходе дает видео-файл — результат, который можно загрузить в соцсети.

Я думаю, что прототип можно собрать за пару недель на html/js, ffmpeg и изоленте, а чтобы довести до ума UX страниц и параметры видео — ещё 4-5 недель. Я бы сам сделал прототип, но ещё один проект, в котором нужно что-то делать руками, в нас с Федей сейчас точно не влезет, так что от сердца отрываю.

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

Более подробные описания поведения страничек — по запросу. Пишите мне в личку или на почту [email protected]. Если мы не знакомы — скиньте пару своих проектов. Идеально, если в них вы имели дело с генерацией видео из других видео и картинок.

Да, этот пост — тоже хвастовство. Но проект реально классный и программист на самом деле нужен.

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

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

На схеме примерно треть, а то и четверть всей системы. Базы по много терабайт, тысячи интеграций — вызывает уважение, да что говорить, восхищение, что всё это работает и приносит пользу и деньги. 😍

Немного стыдно публиковать здесь вакансию в субботу утром после недельного перерыва в постах, но мы с Федей ищем сильного питониста в upmarket.

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

Подробности здесь, пишите Феде на почту [email protected] или мне в личку.

Мы с Федей наняли первого программиста к себе в штат.

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

Наш первый наемный сотрудник — Всеволод Скрипник. Всеволод молод, офигенно прогает на питоне и умеет доводить задачи до конца. Это — очень ценное умение, которого не хватает многим. А ещё Всеволод, как и Федя, предпочитает по работе общаться через электронную почту 🎩.

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

Кстати, у Всеволода есть свой канал в телеге!

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

«Лапша в бизнес-логике». Бизнес-логика в приложении — это цепочка вызова команд. Эти цепочки часто содержат больше 7 шагов. Это больше, чем человек может уместить в голове. Чтобы решить эту проблему, люди описывают цепочки в одном месте, последовательно: одна строчка — один шаг бизнес-процесса (пример на руби). В нашем проекте, сейчас, это не так. Логика бизнес-процессов кочует из файла в файл. Пример: … — в попытке отследить бизнес-логику платежей мы «прыгнули» по коду 11 (!) раз. Это бесчеловечно. …

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

Мы с Федей начинаем перезапуск Сноба. Сноб — это российское медиа с историей: у него были разные времена, разные стратегии. У него есть своя core-аудитория и есть «легаси», которое мешает развиваться.

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

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

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

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

🛠 Кстати, вы можете помочь нам сделать ее быстрее. Мы ищем фронтендера. Если вы знаете vue.js и хотите работать в медиа — есть редкий шанс начать со свежим стеком и опытным техническим руководством. Подробная вакансия тут, пишите Феде или мне.

Обожаю вести бизнес с восточными клиентами.

— Эта наша услуга стоит 3 миллиона рублей.
— А можно дешевле?
— Да, можно. Скажи, сколько ты хочешь.
— Два.
— Давай два с половиной?
— Идет.

Как будто на рынке за яблоки, только суммы больше.

Как не уронить свой сервис под нагрузкой, на примере Signal.

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

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

В одном проекте именно так мы и сделали. Всё было хорошо, пока серверу не стало плохо на пару минут. Если обычно на сервер приходили 100 запросов в минуту (полтора запроса в секунду), то за три минуты скопились 300 запросов и теперь, стоило серверу очухаться, как ему насыпали все 300 запросов в одну секунду. То есть для сервера это выглядело как рост нагрузки в 200 раз и он опять ложился под нагрузкой. Очень неприятная ситуация. Мы сами себя задидосили, своими же собственными мобильными приложениями. 🙈

Есть две компоненты решения этой проблемы:

🛑 Первая: сервер должен уметь ответить «довольно!», и клиенты должны перестать повторять запрос, если получили такой ответ. Интересно, что именно этой функции в Android-клиенте Signal не было и они добавили её во время аварии.

⏱ Вторая, более сложная и интересная, но тоже классическая: exponential backoff (экспоненциальная задержка). Идея очень простая: если сервер не ответил в первый раз — ждем 1 секунду и повторяем запрос. Во второй раз — ждем 2 секунды, в третий — 4, в четвертый — 8. То есть с каждой неуспешной попыткой, даем серверу больше времени прийти в себя. У Signal эта функция реализована, но во время аварии они добавили jitter — небольшую случайную задержку, чтобы клиенты не набегали на серверу толпой, через одинаковые интервалы времени после его падения, а нагрузка была более плавной. Обычно, в этом же коде реализуют ещё паттерн circuit breaker, когда после определённого числа ошибок «выбивает пробки» и запросы прекращаются совсем.

Используйте оба приема и будьте здоровы!

💭 Есть твит и телеграм-пост в популярном канале, в которых утверждается, что причина падения сигнала — в само-дидосе (мол, анекдот). Это маловероятно. Во первых, exponential Backoff в сигнал внедрили больше 2 лет назад и он здорово распределяет нагрузку; во вторых, изменения коснулись только Android клиента. Не верьте советским газетам, читайте первоисточники.