будни

Amazon две недели разбирался и ответил, что простит половину счета за трафик, который мы случайно нагенерили в конце года. Cloudflare простил весь счет за трафик в указанном периоде. УРА!

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

P.S. Хорошая история в тему от хмельного девопса.

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

Я рассказал, как работает наше API, он указал на пару багов в поиске (нет поиска без багов и гугл-пророк его), мы в очередной раз подкрутили настройки Elasticа, он заопенсорсил питон-обертку для API. В общем, обычная рабочая ситуация: у любого нужного людям проекта рано или поздно появляются неофициальные API-клиенты, написанные энтузиастами.

И тут он пишет в дискорде:

> good news from my end, i asked my IT teacher if it was okay to further develop RAWG python wrapper as a graded project
> that means i don't have another project and i can focus on rawgpy

Всё это время я не знал, что он школьник! Интернет-переписка уравнивает детей и подростков в правах со «взрослыми» и это прекрасно.

Вспомнил Севу — школьника из Москвы, с которым мы делали ботов для Медузы. После 9го класса он бросил школу, переехал в Питер и теперь руководит командой разработки экспериментальных продуктов в Вконтакте (ребята, которые запустили Клевер).

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

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

Самое интересное в последнее время — стыдное.

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

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

— Прилетела тонна трафика на главную с видео-роликами, а стандартная конфигурация Cloudflare, оказывается, не кеширует видео — попали на деньги в Amazon S3. Переписываюсь теперь с ними, надеюсь, скостят часть счета. Стоимость казалась константой, пока не произошел резкий всплеск трафика.

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

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

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

И только в пятницу вечером, наш фронтендер Рома сказал «блок-схему бы». Начали рисовать схему в draw.io, пошарив экран и тут же всплыли все дырки в логике.

Блок схемы — супер-важный инструмент, организует мозги. Рекомендую draw.io (хранит схемы в google docs, бесплатный) или lucidchart.com (чуть поудобнее, но в бесплатном режиме не больше 60 объектов на странице).

Я вчера уволил троих программистов из семерых в команде. Чувствовал, что лягу и умру, но нет. Проснулся сегодня и ещё жив.

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

В любом случае, пост не про то, как мы делаем стартап, а про то, что трое отличных программистов и дизайнер ищут работу:
- Саша — фронтендер, неплохо понимает про продукт и имеет опыт управления людьми и дизайна (remote);
- Сережа — космический фронтендер (знает haskell!), чуть подкачать умение общаться с людьми и будет senior (Харьков или remote);
- Артем — идеальный начинающий бэкендер (3 курс плехановки), с горящими глазами и нормальным умением общаться с коллегами (Москва или remote);
- Эрлан — хороший дизайнер интерфейсов, умеет продумывать логику и не забывать при этом детали (remote).

Фронт у нас на react с SSR, Redux, Webpack и прочим стандартным набором, а бэкенд — на Python Django DRF с postgres, Celery и крупным парсингом внешних интернетов. Подробные рекомендации и контакты парней — в личке @samatg.

Когда продакт попросил добавить сортировку игр по рейтингу

Основная проблема — как сделать так, чтобы инди-игра с двумя «пятерками» не встала вперед блокбастера с тысячью «пятерок» и одной «двойкой».

Интересно, что IMDb не раскрывает свой алгоритм рейтингования, чтобы не накручивали, а для top-250 используют Bayesian estimate.

Антон перенес бэкенд-тесты с дженкинса (и стейджинг-тачки) на модный circleci. Время тестирования у нас сократилось с 47 до 10 (!) минут. Тачки, вроде, обычные — 2CPU/4GB, а работает всё быстро. Приятно.

1500 минут в месяц бесплатные, один платный контейнер в месяц стоит 50$ и снимает это ограничение. Обратите внимание, докер-кеши стоят ещё 40$ (они как раз меняют прайсинг и ещё не объявили об этом), но их довольно просто настроить самим.

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

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

Я слышал о командах, в которых люди вообще ни разу не виделись, даже в скайпе, и общаются только по переписке. Расскажите, как работаете удаленно вы?

Дорогая команда.

Впервые столкнулся с GDPR-запросом на удаление персональных данных в реальной жизни

Насколько я понял, человек попросил удалить все данные о себе у Mailchimp. Не меня, клиента Mailchimp, а саму систему рассылки писем.

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

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

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

Кстати, это — хакерский способ отписаться ото всех рассылок махом. Рассылаешь GDPR-запрос на удаление персональных данных в 10 крупнейших систем рассылки писем и всё, 99% рассылок отвалились. Интересно, когда откроется такой сервис?