будни

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

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

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

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

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

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

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

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

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

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

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

Технически сейчас это программа на C#, которая в одну сторону торчит админкой для редакции, а в сторону читателей генерирует HTML-страницы сайта. Это популярный сетап из 2000-х. Техническую задачу я формулирую как облегчение процесса разработки без потери производительности сайта.

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

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

Но будет ли современное веб-приложение (SPA) так же производительно, как HTML-страницы из 90-х? Речь и о скорости первого открытия — можно ли загрузить JS после полной отрисовки страницы? — и о скорости перехода между страницами — быстрее ли JavaScript-логика, чем отдать готовый HTML с сервера?

Можно ли получить лучшее из обоих миров? На какие компромиссы придётся пойти?

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

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

P. S. Один из разработчиков McMaster пишет, что под капотом там VB.NET, хранимки и XSL-трансформации поверх XML для генерации веб-страниц. Хочется вот всё то же самое, только без VB, хранимок и XSLT. 🙈

Первый пост из текущих личных переживаний, таких будет не много:

Мы с Антоном только что отлаживали js-код, исполняемый внутри WebView в Android приложения Медузы в симуляторе quemu на удаленной машине, подключившись к ней вдвоем одновременно по teamviewer.
При этом js генерировался на компьютере Антона, делался доступным через PythonSimpleHTTPServer и прокидывался до эмулятора через ngrok.

БОЛЬШЕ ЭМУЛЯЦИЙ, АБСТРАКЦИЙ И INDIRECTION, ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО.

Представляю клиенту результаты аудита проекта. Там треш: полтора программиста из региональной студии месяц корячат prestashop, а руководитель делает сложные щи, что мол «разрабатываем multi-vendor marketplace с потенциалом развития».

Клиент просит оценить «на глаз», сколько стоила такая разработка.

Я отнекиваюсь: «какой смысл», разорвите отношения и дело с концом, нужно решить что дальше делать, а не терять время на бодание с дураками.

На что владелец бизнеса рассказывает анекдот:

Приходит мужик в банк.
— А вы правда кредит под честное слово даете?
— Правда, отчего ж не дать. Вы ведь отдадите!
— А если не отдам?
— Ну вы вот перед Богом предстанете, в глаза ему посмотрите и вам стыдно будет.
— Э, ну когда я еще предстану.
— Ну через месяц не отдадите, так на следующий день и предстанете!

Обожаю работать с бизнесменами, прошедшими 90-е.

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

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

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

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

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

Сколько стоит сделать платформу для онлайн-консультаций для врачей или учителей или другой маркетплейс услуг?

Пальцем в небо: 150 тысяч евро (15 млн рублей) и полгода времени.

Но в большинстве случаев не нужно ничего программировать. Лучше собрать на коленке какой-то способ приема онлайн-платежей (да хоть QR-коды) и какой-то способ видеосвязи (у всех крупных платформ есть SDK). Всю административную работу делать руками в гугл-таблицах.

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

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

Теперь мы помогаем провести такой тест: настраиваем сервисы и инструменты, помогаем с администрированием и аналитикой, немного автоматизируем процесс. Это занимает пару месяцев и стоит на порядок дешевле разработки.

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

В ноябре слоты на такую работу уже заняты, но если есть крутая идея — пишите мне @samatg или оставляйте заявку на сайте, обсудим!

Эту неделю моя переписка с командой разбросана между слеком, телеграмом, ватсапом и дискордом. Для флеш-рояля не хватает сайнала, фейсбук мессенджера и вайбера. Я думаю зайти по-крупному и предложить попробовать Amazon Chime и Microsoft Teams 👹

Но дальше я капитально обломался.

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

Интересно, что нигде в официальных публичных источниках я этих цифр не видел, только после регистрации и попытки разместить рекламу.

В общем, придется рекламировать свои услуги разработки по старинке — рассказывать всем, кто готов слушать, какие мы офигенные штуки делаем :) Ну и сайт у нас есть, вот.

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

При подготовке первой, вместо классического инструмента поиска связей ЕГРЮЛ использовалась база данных RIPE. Вы знали, что она хранит историю правок 10 лет, но пользоваться ею можно только через линуксовый whois?

Для сегодняшей статьи про стихи Бастрыкина мы лопатили version log википедиии и пробивали IP адреса.

Синергия 🙊

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

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

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

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

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

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