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

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

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

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

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

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

Читать далее
Всего голосов 27: ↑26 и ↓1+38
Комментарии4

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

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

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

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии2

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

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

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

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии0

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

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

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

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

Читать далее
Всего голосов 8: ↑7 и ↓1+8
Комментарии0

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

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

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

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

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

Читать далее
Всего голосов 44: ↑44 и ↓0+44
Комментарии3

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

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

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

Читать далее
Всего голосов 10: ↑9 и ↓1+10
Комментарии0

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

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

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

Читать далее
Всего голосов 17: ↑16 и ↓1+22
Комментарии6

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

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

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

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

Читать далее
Всего голосов 7: ↑5 и ↓2+6
Комментарии1

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

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

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

Читать далее
Всего голосов 7: ↑6 и ↓1+8
Комментарии0

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

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

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

Читать далее
Всего голосов 15: ↑14 и ↓1+16
Комментарии27

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

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


Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

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

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


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

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

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


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

А вы знали, как называется «та самая выезжающая снизу экрана шторка» или несколько (три и более) тапов подряд? Ответы на эти вопросы и названия многих других элементов читайте в нашей статье.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+19
Комментарии9

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

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


Продолжаем рассказывать о применении на практике принципа работы с документацией как с кодом. В этот раз разберём получение спецификации Swagger напрямую из комментариев к коду API. В статье рассматривается роль технического писателя в процессе адаптации команды к использованию нового инструмента, а также приводятся конкретные инструкции по применению swagger-php в реальном проекте.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии4
Привет, Хабр! Мы Юла, mobile-first сервис объявлений с аудиторией более 27 млн пользователей. Мы ценим скорость и нестандартные задачи, а прямо сейчас ищем себе в команду бойцов по направлениям мобильной разработки iOS и Android. Под катом — наш тест со сложными и не очень задачками на логику и профильные знания. А для того чтобы добавить драйва и оборотов (мы же Юла), мы снабдили тест таймером. Делитесь вашими результатами в комментариях.
Гоу разомнёмся?
Всего голосов 11: ↑10 и ↓1+24
Комментарии42

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

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


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

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

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


Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии25

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

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

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


Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии2

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

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

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

Бесконечный/цикличный скролл в iOS стандартными средствами не реализовать, нужно идти на разные ухищрения. В этой статье я расскажу, какие варианты решения задачи лежат на поверхности и какой вариант мы в итоге реализовали.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+21
Комментарии7

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

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


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

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

* * *

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