будни

Google обновил в ноябре Firebase Cloud Messaging — одну из самых крутых систем для рассылки пуш-уведомлений в мобильные приложения и браузеры (при этом — бесплатную!).

В новой версии API можно в едином сообщении указать два разных payload; клиент получит свою версию в зависимости от платформы — iOS или Android. Ура! Ложка дёгтя: авторизация теперь богопротивным Oauth2 JWT.

P.S. Документация у Firebase — тихий ужас :(
P.P.S. Никогда не собирайте тестовые приложения с продакшен-ключами. Я сегодня таким макаром отправил в продакшен iOS Медузы тестовый пуш. Слава богу, не в канал «breaking». Слава богу, что тексты тестовых пуши — копии недавних легитимных, а не «тестовый пуш, йоу» или «alert('fuck')». Храни вас бог при тестировании пушей и почтовых рассылок. Аминь.

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

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

Я по работе общался с сотнями техподдержек (о, сколько часов музыки я прослушал по PSTN) и эта впечатлила меня больше всего. На втором месте G Suite от Google (бывший Google Apps) — реально разбираются в этом монстре и технологиях, на которых он построен. Третье место занимает поддержка Apple Developer Program. Эти чуваки супер дружелюбные и если правильно пропитчить нужду могут сделать множество исключений из правил. Прямо как в России, закон строг, но можно договориться.

Будущее уже наступило. Знакомый продакт-дизайнер, без опыта в программировании, показал проект, который собрал самостоятельно с помощью Windsurf. Это мини-приложение в телеграме для генерации картинок и видео через доступные на рынке модели. Человек без знания программирования в одиночку запускает сервис!

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

Договорились, что если проект взлетит — то мы его быстро перепишем, благо кода там немного.

А вот второе «будущее» не такое приятное. Мошенники начали притворяться мной в телеграме и писать знакомым. Коллеги говорят, это беда всех успешных студий сейчас. Так что, друзья, будьте осторожны, я в телеграме только @samatg

Я ищу опытного бэкендера для наведения порядка в PURE.

Pure это приложение для анонимного общения и знакомств. Профиль, лента, чаты, платежи. Мобильные клиенты под iOS и Android, веб версия.

Бэкенд сейчас в плачевном состоянии. Django python2 и немного python3, не DRF. Писался 4 года назад с планами, что это будет «платформа» для запуска разных приложений знакомств — был введен слой абстракций, который усложняет разработку и поддержку (на самом деле приложений два и они мало отличаются). Части вроде аналитики, которые стоит вынести в отдельные проекты, всё ещё внутри основного приложения. Нужно привести всё это в порядок. Задача не для слабых духом и не для тех, кого пугает слово legacy.

Из хорошего: 1) несколько сотен тысяч MAU, пользователи радуются и платят деньги; 2) интересные продуктовые планы — хотим быть лучшим приложением для анонимного общения; 3) мы готовы выделять 40-60% времени на улучшения и рефакторинг — хочется сделать конфетку не только снаружи, но и изнутри; 4) работа удаленная и щедро оплачивается; 5) я ищу человека готового включать голову и брать ответственность — не «просто кодера».

В команде: ещё один бэкенд-разработчик (толковый!), по два мобильных разработчика на iOS и Android, три фронтендера, два дизайнера, инженер ops и два тестировщика. Основатель и владелец проекта — продакт, я — технический директор. Вся команда распределенная.

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

Пишите в личку или на samat@pure.app

Похвастаюсь классным клиентом.

Сервис upmarket размещает товары производителей на интернет-рынках вроде озона и вайлдберрис. Ребята делают полный цикл, от написания карточек товаров и работы с отзывами до логистики.

Звучит довольно просто, но оборот у парней больше полумиллиарда рублей в год.

Нас позвали по двум причинам: 1) придумать, как автоматизировать те вещи, которые сложно поручить машине из-за слабого API торговых площадок и как сделать из «самодельных скриптов» надежную и масштабируемую систему; 2) вторая причина даже интереснее — мы соберем команду разработки, которая будет развивать IT в бизнесе после нашего ухода.

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

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

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

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

Обращайтесь @samatg, мы берем ещё клиентов.

На прошлой неделе было удивительное:

1. Федя признался, что понял кайф вайб-кодинга (до этого он всё время говорил, что понимает, что это такое, но я бы описал его прошлую позицию как просвещённый луддизм); надеюсь, сделаем про это с Федей отдельный эпизод подкаста.

2. Настя, наш операционный директор (не программист), завайбкодила прототип для клиента в lovable. Раньше бы мы назначили встречу с продуктовым дизайнером, он бы нарисовал макеты, мы бы сделали пару встреч и итераций, дальше бы мы его, может быть, сделали кликабельным, дальше бы посадили фронтендеров его заверстать. А тут Настя сделала всё сама за пару часов. И отправила клиенту не просто макеты, а полноценный прототип. Клиент — стартап, в котором нужна возможность связать врачей и пациентов, так эта шайтан-машина нашла бесплатное решение для видеосвязи и прикрутила его к прототипу.

Настя выглядела поражённой и даже встревоженной: «Самат, с помощью этого можно перестроить работу с клиентами». И спросила: «А нужны ли будут программисты?» и вообще: «Какое наше место в этом новом мире?»

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

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

Вспомнил, что на днях общался со знакомым, который делает сервис по созданию кастомных приложений обычными людьми. То есть ты говоришь, какое приложение хочешь, начинаешь им пользоваться и можешь прямо на лету что-то в нём поменять, с сохранением уже введённых данных, вообще не имея дела с кодом. Подобные инструменты, скорее всего, съедят нижнюю часть рынка, «простую разработку». Как мы сегодня не ищем дизайнера и верстальщика, чтобы написать объявление в ворде или сделать простую страницу на тильде, но обращаемся в издательский дом, если хотим опубликовать книгу, или нанимаем команду, чтобы запустить большой маркетплейс.

Ну и наконец, если в каком-то будущем мы сможем делать крутые программные продукты «совсем без программистов» — то:

1. долгосрочно, у нас будут гораздо большие проблемы, потому что перестроится вообще весь рынок интеллектуального (а с развитием физических роботов — вообще всего) труда, мир изменится;

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

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

Я отсмотрел 5000 фотографий профилей в Pure за 3 часа и нашёл среди них несколько пенисов и вульв.

Важное различие магазинов мобильных приложений Apple AppStore и Google Play в том, что каждое обновление всех приложений в AppStore проходит ручную проверку модераторами Apple. Правила достаточно подробные и написаны понятным языком, но при этом напирают на здравый смысл, а не на следование букве текста. Например, про порно они раньше приводили знаменитую цитату судьи конституционного суда США «узнаю, когда увижу» (сейчас цитируют определение из словаря). При этом то, к чему придерется один модератор, может пропустить другой. Гуглу всё фиолетово.

Новую версию нашего приложения недавно задержали в ревью AppStore из-за голого тела в ленте, так что держать ленту чистой от органов — важная задача.

Книжная цензура в царской России и СССР была в режиме премодерации, цензоры читали каждую книгу до печати; Роскомнадзор работает по схеме постмодерации, блокирует уже публичный контент. У нас гибридная модель: при загрузке фото его рассматривает наш алгоритм и при необходимости сервис машинного зрения Amazon Rekognition. Если они не находят голого тела, то картинка становится публичной и её с большой вероятностью посмотрит наш модератор и может удалить постфактум.

Наши модераторы работают в стандартной джанго-админке, из-за чего часть фотографий оставалась непросмотренной. Я провел в ней три часа. За эти три часа я успел просмотреть 5 тысяч фоток и хорошенько обдумать, что главное в новой админке — возможность одним кликом отмечать плохие фотки и мгновенно переходить к следующей пачке фотографий для просмотра. Очевидно хочется, чтобы все дубликаты однажды забаненной фотки банились автоматически. Главная метрика качества системы — сколько времени голая фотка провисит в ленте до удаления (хочется как можно меньше).

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

Очень интересно, как устроена система модерации во Вконтакте и у Одноклассников. Это ведь целый мир, гиганская сложная машина. Мне рассказывали, что у фейсбука есть отдельная система модерации приватных групп, в которых никто ни на что не жалуется. В этих группах сидят педофилы и довольные обмениваются детским порно, пока их не засекает сам ФБ и не сдает правоохранителям. Хочется похожие кулстори от ВК и Одноклассников послушать. Сколько платят модераторам? Какой рабочий день? На что странное жалуются пользователи? Интересно!

А админкой новой похвастаюсь как запустим, уже скоро.

P.S. После длительного просмотра фоток на самом деле больше ничего не хочется. Жаль, что приходится людям это делать.

Опять Github Actions лежат, не справляются с потоками ИИ-разработки.

Ищем, на что переехать, потому что уже начинает мешать работать.

Upd: многие коллеги советуют раннеры для GitHub actions, которые могут исполнять задачи быстрее или дешевле, но они не помогут в ситуации, когда gh actions лежат. Из реальных альтернатив пока видны gitea (forgejo) и gitlab. Если еще есть идеи — буду рад услышать!

Upd2: кстати, они недавно публиковали постмортем прошлого падения. И там классические ошибки вроде отсутствия exponential back off и прочих, но в посте СТО, это подавалось, конечно, под соусом «у нас тут невиданная нагрузка». Нагрузка невиданная, а ошибки мы эти все видели и сами совершали :)

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

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

Примеры наших проектов: перезапуск сервиса подготовки к ЕГЭ «Вебиум», Медицинская Информационная Система (МИС) для сети клиник «Чайка», облачная платформа для Wirenboard.

Пишите мне в личку @samatg!

Пентест — это «испытание на проникновение», когда вы платите хакерам деньги и они пытаются вас взломать.

Технически вы можете быть бронебойны, но «социалка» —социальная инженерия, то, через что взломали твиттер, почти всегда срабатывает.

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

Я заказываю такие аудиты у Омара Ганиева. Кстати, один из первых эпизодов нашего подкаста был как раз про безопасность, с Омаром и с Каримом Валиевым, руководителем безопасности mail.ru; — хороший повод послушать классных русских хакеров.