будни

Давно я не рассказывал истории из профессиональной жизни.

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

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

Из-за этой кнопки с аватаркой всё и закрутилось. Для начала, пришлось выкинуть старый механизм аутентификации с oauth-редиректом и подключить библиотеку фб, которая делает всю работу сама. Потом я заметил (уже на продакшене), что страница логина крешится. Оказалось, что фейсбук хитро инициализирует свою js-библиотеку и при определенной последовательности загрузки скриптов она ломается. Воспроизводится это у нас не каждый раз и только на продакшене. В сафари ломается чаще, чем в хроме, так что любовь нашего фронтендера Ромы к Linux отладку не упрощала. Чтобы не ломать страницу целиком, мы срочно вставили try-catch, а потом сделали хитрую схему.

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

В отношении этой разработки у меня два разных чувства:

- жалость, что зря потеряли время, потому что у большинства пользователей, которым нужен логин через Facebook, уже загружена js-библиотека фейсбука, так что можно было не извращаться + кажется, что тупо недоразобрались с js-ошибками;
- чувство удовлетворения, что сделали качественно «заднюю стенку шкафа», все три кнопки логина покажутся мгновенно, без задержки в любом случае.

В любом случае, получилось классно. Логиньтесь!

В ролях: продакт 🤔 Алексей Горностаев, дизайн 🖌 Андрей Кулагин, фронтенд 🖼 Роман Ахмадуллин.

Психанул и ответил Taxify на их retention письмо. Конечно, в компании с нормальным сервисом ответы на такие письма должны попадать в папку «важное!11», но что-то мне подсказывает, что в случае Taxify будет не так :(

А вы разговариваете с роботами?

🤖 284❌ 284🐝 104

Когда по ошибке отправил 2000 писем на продакшене вместо 10 (слава богу, все две тысячи на наши адреса, не игроков)

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.