Как стать автором
Обновить

Компания Юла временно не ведёт блог на Хабре

Сначала показывать

BDD-фреймворк для автоматизации API без кода

Время на прочтение7 мин
Количество просмотров6.6K

Меня зовут Виктор Мясников, я отвечаю за качество продукта в «Юле». Я закончил Бауманку и хотел строить ракеты, но с ними не вышло, поэтому теперь профессионально строю «велосипеды» для QA, а ещё люблю уничтожать рутину. Я расскажу, как мы проектировали BDD-фреймворк и зачем он вообще нам понадобился.

Читать далее

Типизация для Kafka-топиков в Юле

Время на прочтение10 мин
Количество просмотров6.6K

Мы делаем Юлу уже 7 лет, из небольшого проекта она превратилась в сервис объявлений с аудиторией в 33 млн пользователей. За это время в Юле появилось значительное количество функций и настроек, реализованных в разных компонентах. Одна из трудностей, встающих перед разработчиками подобных распределённых систем, связана с обеспечением согласованной работы отдельных компонентов, а именно с поддержкой контрактов сервисов. Мы также столкнулись с некоторыми проблемами, вытекающими из первоначального отсутствия контрактов.

Читать далее

Опыт перехода на MVI в Android на базе собственного решения

Время на прочтение16 мин
Количество просмотров14K

В команде Android мы активно применяем MVI для проектирования взаимодействия состояния экрана и бизнес-логики. В этой статье мы хотим рассказать о собственной MVI-библиотеке – Reduktor и об опыте внедрения и использования. Статья будет полезна всем, кто хочет познакомиться с Redux-like MVI.

Читать далее

Тишина должна быть в библиотеке! Как мы рефачили библиотеку для работы с API и создали свой Repository

Время на прочтение13 мин
Количество просмотров2.1K

Всем привет! Меня зовут Игорь Сорокин. В этой статье я поделюсь историей о том, куда нас завёл очередной рефакторинг, как мы оттуда выбрались, попутно разработав слой хранения данных. Также приведу практические примеры реализации, покажу подход, который удалось разработать, и расскажу об особенностях, с которыми мы столкнулись. Но обо всём по порядку.

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

Читать далее

Как сократить расходы в четыре раза при работе с сырыми данными в Google BigQuery

Время на прочтение8 мин
Количество просмотров3.2K

Всем привет! Меня зовут Павел Земсков, я занимаюсь аналитикой проектов VK. Сейчас я отвечаю за развитие группы продуктов для среднего и малого бизнеса внутри социальной сети ВКонтакте и на площадке Юлы. 

Я расскажу о проверенном мной подходе к работе с запросами в базу данных, и о том, как это помогло сократить затраты на обращение к сырым данным в четыре раза. Статья будет полезна тем, кто записывает сырые данные по событиям пользователей в формате, близком к GA360 (GA360, OWOX, SegmentStream), и задумывается об оптимизации работы с данными и сокращении расходов на обработку запросов в Google BigQuery. Те, кто хранит данные в Clickhouse и начали задумываться об ускорении выполнения запросов, тоже могут использовать этот подход.

Устраивайтесь поудобнее! 

Читать далее

Истории

Поиск идеального поиска: как устроены поисковые эксперименты на Юле

Время на прочтение12 мин
Количество просмотров3.3K

Меня зовут Маргарита Даминова, вместе с Еленой Бронниковой мы решили обобщить опыт команды продуктовой аналитики Юлы и поделиться им в статье, где расскажем о нашем подходе в области поисковых экспериментов. Ранее в блоге мы уже писали о метриках и индексах, которые мы используем в продукте, чтобы следить за активностью мошенников и оценивать эффективности наших антифрод-фичей. В этой статье расскажем о том, как и зачем мы проводим поисковые эксперименты, какими метриками пользуемся и какие создали сами, и как влияем на развитие поисковой системы нашего сервиса объявлений.

Читать далее

Индекс Лепрекона

Время на прочтение10 мин
Количество просмотров11K

Всем привет! Меня зовут Оюна Любимова, я занимаюсь продуктовой аналитикой в Юле и Объявлениях ВКонтакте. Я отвечаю за сбор и интерпретацию данных, чтобы наша команда могла принимать уверенные решения о развитии продукта. В статье я расскажу об аналитике безопасности взаимодействия пользователей с продуктом, это часть направления Trust and Safety Юлы. Чтобы отслеживать насколько эффективно работают наши инструменты борьбы с мошенниками, мы собираем данные и разрабатываем аналитические метрики. В 2020 году мы придумали специальный индекс, который помогает нам отслеживать уровень безопасности в Юле, и назвали его Индекс лепрекона. В этой статье я расскажу: как и зачем мы собрали и интерпретировали этот показатель, за какими «фантастическими тварями и местами их обитания» следим с его помощью, а также о том, какие альтернативные формулы рассматривали и почему отказались от них.

Читать далее

Как подружить Юлу и ВКонтакте

Время на прочтение6 мин
Количество просмотров8.3K

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

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

Читать далее

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

Время на прочтение8 мин
Количество просмотров3.5K

Мы в Юле применяем подходы и паттерны, которые позволяют нам избегать проблем, связанных с интеграциями: создаем абстракции, где размещаем транспортный протокол и логирование, используем circuit breaker, обращаемся к асинхронным подходам, используя Kafka как шину данных. Предлагаем погрузиться на несколько слоев абстракции и вместе решить любые проблемы интеграций: от тайм-аута до кэширования.

Читать далее

Как достичь объективности в субъективном? Калибровка в performance review

Время на прочтение5 мин
Количество просмотров6.9K

Процессом performance review сейчас сложно удивить. В нашей отрасли это уже достаточно распространенное явление. Несколько лет назад было модно рассказывать о том, как устроено performance review в конкретной компании. Со временем процессы у всех обтесались, выровнялись и стали очень похожи друг на друга. Мы обязательно расскажем о некоторых особенностях, присущих performance review в Юле, но сегодня я хотел бы затронуть мало описанный этап — калибровку.

Читать далее

Тестирование push-уведомлений в мобильных приложениях

Время на прочтение5 мин
Количество просмотров36K
Push-уведомления — это сообщения, отправляемые приложением на мобильное устройство клиента. Они обычно используются для доставки обновлений продуктов, напоминаний, персонализированных предложений, последних новостей и любой информации, которая является неотъемлемой частью функциональности приложения и требует особого внимания или быстрых действий.


Читать дальше →

«Вам звонок». Как выстроить отношения между QA и техподдержкой

Время на прочтение7 мин
Количество просмотров4.9K


Каждый из нас сталкивался с технической поддержкой. Кто-то с ней взаимодействует по работе, кто-то по своей должности совмещает тестирование и поддержку, а кто-то стоит перед вопросом — взаимодействовать или делать самому? Мы расскажем, как это сделано у нас в Юле.
Читать дальше →

UI-элементы и жесты в мобильных приложениях

Время на прочтение4 мин
Количество просмотров253K


Хабр, привет! Вы часто задумывались, обнаружив баг в мобильном приложении и заводя его в баг-трекер, как правильно назвать ту или иную часть интерфейса или действие, которые привели к ошибке? Или читаешь описание задачи и задумываешься, как должен выглядеть какой-то экран и что должно появиться при тапе на кнопку. А может, вы описываете продуктовые задачи и не всегда чувствуете себя на одной волне с дизайнерами и разработчиками, которые иногда начинают говорить на эльфийском? Чтобы исключить недопонимание, неясности и вопросы, мы решили создать перечень наиболее распространенных элементов и жестов и показать их на примере Юлы.

А вы знали, как называется «та самая выезжающая снизу экрана шторка» или несколько (три и более) тапов подряд? Ответы на эти вопросы и названия многих других элементов читайте в нашей статье.
Читать дальше →

Docs as Code. Часть 2: получаем документацию из кода

Время на прочтение10 мин
Количество просмотров12K


Продолжаем рассказывать о применении на практике принципа работы с документацией как с кодом. В этот раз разберём получение спецификации Swagger напрямую из комментариев к коду API. В статье рассматривается роль технического писателя в процессе адаптации команды к использованию нового инструмента, а также приводятся конкретные инструкции по применению swagger-php в реальном проекте.
Читать дальше →

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
Привет, Хабр! Мы Юла, mobile-first сервис объявлений с аудиторией более 27 млн пользователей. Мы ценим скорость и нестандартные задачи, а прямо сейчас ищем себе в команду бойцов по направлениям мобильной разработки iOS и Android. Под катом — наш тест со сложными и не очень задачками на логику и профильные знания. А для того чтобы добавить драйва и оборотов (мы же Юла), мы снабдили тест таймером. Делитесь вашими результатами в комментариях.
Гоу разомнёмся?

Конечные автоматы на страже порядка

Время на прочтение7 мин
Количество просмотров6.8K


При разработке сложных систем часто сталкиваешься с проблемой прозрачности кода, точным описанием бизнес-логики и масштабирования решения. Однажды нам поставили задачу: реализовать функциональность тарифов, в которой много бизнес-логики. При этом сроки были сжаты, да ещё и повышенные финансовые риски. Чтобы решить эту задачу быстро, эффективно и прозрачно, мы решили использовать конечные автоматы (state machine).
Читать дальше →

Как приручить Charles Proxy?

Время на прочтение10 мин
Количество просмотров352K
Привет! Многие из тех, кто приходит к нам на собеседование на должность тестировщика, с гордостью заверяют, что они могут пользоваться Charles Proxy. Но когда погружаешься в техническую часть, то становится очевидно, что кандидат только слышал об этом инструменте. Давайте уже наконец скорее приручим эту вазу!


Читать дальше →

Учим нейросети в Google Таблицах

Время на прочтение5 мин
Количество просмотров12K

Хочу с вами зачелленджить одну интересную штуку: попробовать обучить нейросеть в Google Таблицах. Безо всяких макросов и прочих хаков, на чистых формулах.


Читать дальше →

Бесконечный скролл с баннерами, или Как обойтись тремя вьюхами

Время на прочтение10 мин
Количество просмотров11K

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

Бесконечный/цикличный скролл в iOS стандартными средствами не реализовать, нужно идти на разные ухищрения. В этой статье я расскажу, какие варианты решения задачи лежат на поверхности и какой вариант мы в итоге реализовали.
Читать дальше →

Эксплуатация большой распределённой системы: чему я научился

Время на прочтение16 мин
Количество просмотров10K


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

Предлагаю вашему вниманию перевод статьи, написанной инженером из Uber.

* * *

В последние несколько лет я создавал и обслуживал большую распределённую систему платежей в Uber. За это время я многое узнал о концепциях распределённых архитектур и на своём опыте выяснил, насколько трудно создавать и обслуживать высоконагруженные системы с высокой доступностью. Построение такой системы — работа интересная. Мне нравится планировать, как система будет обрабатывать рост трафика в 10-100 раз, обеспечивать надёжность данных вне зависимости от аппаратных сбоев. Однако эксплуатация большой распределённой системы дала мне неожиданный опыт.
Читать дальше →
1