Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Зачем Яндекс Go создал отдельный язык для расчёта стоимости поездок

Цена поездки в Яндекс Go — это не расстояние, умноженное на минуты и километры. В расчёт вмешиваются геозоны, спрос, скидки, платные дороги, дополнительные остановки и требования вроде перевозки кота, велосипеда или лыж. Чтобы управлять этим хозяйством без бесконечных деплоев, разработчики вынесли алгоритм ценообразования из кода сервиса в собственный язык.

Как объяснили разработчики в статье на Хабре, прайсинг работает не только при заказе машины.

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

 

Сначала сервисы параллельно собирают параметры поездки: тарифную категорию, геозоны, скидки, повышенный спрос и дополнительные услуги. Зависимости между источниками выстраиваются в граф, а запросы выполняются асинхронно на базе userver. Если некритичный источник не ответил, весь расчёт не падает.

 

Сам алгоритм раньше можно было бы держать в C++, но он меняется в среднем дважды в неделю. Выкатка сервиса на 50 подов занимает около 40 минут, а лес динамических конфигов быстро превратил бы код в музей условных операторов.

Поэтому Яндекс разработал собственный DSL. В нём есть условия, функции, неизменяемые значения и fold вместо циклов. Правила собираются в последовательную цепочку: каждое преобразование получает текущую цену и параметры, а возвращает новый результат с метаданными. Грамматику описали через ANTLR 4, а верификатор Z3 проверяет, что программа не выдаст некорректную цену.

 

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

 

В итоге прайсинг превратился в отдельную платформу, которой уже пользуются Такси, Доставка и сервис зарядки электромобилей.

DuckDuckGo для iOS научился отрезать рекламный хвост у ссылок

DuckDuckGo решил избавить пользователей iPhone от цифрового мусора, который прилипает к ссылкам. В приложении появилась функция Copy Clean Link: она удаляет из адреса параметры отслеживания перед копированием в буфер обмена.

Обычная ссылка может выглядеть безобидно лишь до первого вопросительного знака.

После него нередко тянется внушительный хвост из utm_source, utm_campaign, fbclid и других идентификаторов. Они помогают рекламным платформам и сайтам определять источник перехода, анализировать действия пользователей и собирать дополнительные данные.

Вместо длинного адреса вида:

example.com/article.html?utm_source=facebook&fbclid=...

DuckDuckGo скопирует:

example.com/article.html

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

Функция появилась в обновлении приложения DuckDuckGo для iOS, выпущенном в конце июля. Пока неизвестно, когда она доберётся до Android.

Впрочем, превращать Copy Clean Link в волшебный плащ-невидимку не стоит. Инструмент только очищает скопированный адрес. После открытия страницы сайт всё ещё может использовать куки и другие средства отслеживания, здесь результат зависит уже от настроек и возможностей браузера получателя.

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

RSS: Новости на портале Anti-Malware.ru