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

РБК: Центробанк и Visa сообщили об утечке данных 55 тыс. банковских карт пользователей сервиса Joom

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

Согласно информации агентства РБК, Центральный банк РФ и платежная система Visa предупредили российские кредитные организации о появлении новой утечки данных. В открытый доступ попали данные более 55 тыс. банковских карт пользователей из России. Источник утечки — латвийский маркетплейс «Joom» (joom.com).
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии18

Видео докладов с MOSDROID #13 Aluminium

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


В субботу 10-го ноября на площадке FunCorp прошёл MOSDROID #13 Aluminium. На митапе было 5 докладов от спикеров из Яндекс.Такси, Lamoda, FunCorp, Joom и Сбертеха, видео которых уже доступны к просмотру.

«Эволюция планировщиков задач», Алексей Макаров, FunCorp



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

Исправляем опечатки в поисковых запросах

Время на прочтение14 мин
Количество просмотров18K
Наверное, любой сервис, на котором вообще есть поиск, рано или поздно приходит к потребности научиться исправлять ошибки в пользовательских запросах. Errare humanum est; пользователи постоянно опечатываются и ошибаются, и качество поиска от этого неизбежно страдает — а с ним и пользовательский опыт.

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



Может показаться, что мы отказали пользователю в его мечте о вертикальной реальности, но на самом деле буква К просто стоит на клавиатуре рядом с буквой У.

В этой статье мы разберём один из классических подходов к исправлению опечаток, от построения модели до написания кода на Python и Go. И в качестве бонуса — видео с моего доклада «”Очки верткальной реальности”: исправляем опечатки в поисковых запросах» на Highload++.
Всего голосов 22: ↑21 и ↓1+20
Комментарии8

Bazel, stamping, remote cache (часть 2)

Время на прочтение3 мин
Количество просмотров697

В Bazel есть две крайне полезные фичи: stamping — позволяет встроить в артефакт данные о том, от какого коммита можно собрать аналогичный артефакт и remote cache и remote build — позволяет иметь общий кэш между сборщиками или даже собрать артефакты на ферме.

Ранее, к сожалению, эти фичи были взаимоисключающими, но с версии Bazel 7.0 можно использовать stamping с remote cache при помощи scrubbing-а. А сегодня вышла версия Bazel 7.1, в которой появилась возможность использовать stamping с remote build.

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

Jenkinsfile – это не Groovy

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.6K

Я не нашел в документации к Jenkins утверждения, что Jenkinsfile пишется на Groovy, но количество отсылок к Groovy столь велико, что у многих людей создаются ложные ожидания.

Я решил написать этот пост после многократного объяснения коллегам отличий скрипта Jenkinsfile от Groovy.

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

Summer Droid Meetup

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


Привет! Приглашаем android-разработчиков на наш Summer Droid Meetup. 3-е августа, Сад Эрмитаж, Каретный ряд, д 3, стр 6, «Веранда 32.05». Начало в 12:00.

Программа митапа


«Сбор и анализ неординарных данных Android-приложения», Дмитрий Васильев, FunCorp


О докладе

Доклад про аналитику технических показателей приложения.

Цель — рассказать об инструментах сбора и анализа данных для мобильных приложений (и не только), которые мы используем. А также о том, какие технические характеристики приложения нуждаются в сборе и как их анализировать.

Поговорим о том:

  1. Как и куда мы осуществляем сбор данных по iFunny
  2. Какие технические данные собирать
  3. Как и где их анализировать
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии0

Видео докладов с FunTech iOS-meetup #1

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


23 марта команда FunTech Meetups провела свой первый собственный iOS-meetup, с которого сегодня выкладываем видео докладов.

«Крутим RunLoop. Как устроена лента ВКонтакте», Александр Терентьев, VK


Всего голосов 18: ↑18 и ↓0+18
Комментарии1

Знакомимся с Needle, системой внедрения зависимостей на Swift

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

Привет! Меня зовут Антон, я iOS-разработчик в Joom. Из этой статьи вы узнаете, как мы работаем с DI-фреймворком Needle, и реально ли он чем-то выгодно отличается от аналогичных решений и готов для использования в production-коде. Это всё — с замерами производительности, естественно.


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

Как построить надежное приложение на базе Event sourcing

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

Привет! В этой статье я хочу рассказать, как из модного микросервисного приложения можно сделать рабочую, управляемую систему с помощью трех проверенных годами методик: на примере проекта внутренней performance-based рекламы Joom.


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

Неожиданная сложность простых программ

Время на прочтение7 мин
Количество просмотров14K
Не раз я сталкивался с удивлением при оглашении оценки сложности проекта: «А почему так долго?», «Да тут же раз, два и готово!», «Можно же просто взять X и сунуть в Y!». Программисты привыкли оценивать сроки как время на написание и отладку кода, хотя в крупные задачи входит ещё много всего.


Знаете ли вы, что в реальности айсберги располагаются в воде горизонтально, а не вертикально, как на большинстве стоковых картинок?

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

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

Читать дальше →
Всего голосов 52: ↑51 и ↓1+50
Комментарии15

Как устроен запуск экспериментов в ИТ-продукте на примере Joom

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

Привет, Хабр! Меня зовут Леонид Огрель, я работаю аналитиком в Джум Лабс. В этой статье я расскажу, зачем нужен эксперимент в ИТ-продукте, и на что нужно обратить внимание при его запуске.

Как понять, понравится ли пользователям изменение, которое мы хотим внести? Принесет ли оно пользу компании? Работает ли новый алгоритм ранжирования товаров лучше по сравнению с используемым? Снизится ли конверсия, если мы добавим дополнительный баннер на карточку товара?

Чтобы ответить на подобные вопросы, мы проводим большое число онлайн экспериментов, по итогам которыx ожидаем получить чёткий ответ: улучшает ли изменение метрики компании или нет.

Процесс подготовки эксперимента к запуску можно разделить на три этапа. Ниже остановимся подробнее на каждом из них.

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

Материалы бэкенд-митапа. MongoDB, оптимизация алгоритмов и диагностика проблем в больших проектах

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

Привет! Это пост-отчёт с митапа «Быстрый бэкенд», который прошёл в офисе Joom. С коллегами из Джум Лабс и Авито обсудили, как живётся с большим кластером MongoDB, как битмап-индексы помогают быстро искать по каталогам и как анализировать большие объемы Jaeger-трейсов. В этом посте — видеозаписи докладов, презентации спикеров и несколько фотографий со встречи. 

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

Метрика Churn Rate: что это и как посчитать?

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

В этом посте мы расскажем про метрику Churn Rate.

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

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

Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте

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


Эта статья подробно описывает создание небольшого скрипта на Node.js для выгрузки векторных иконок из Figma в проект, а также универсального компонента для разных видов иконок, который удобно использовать в своём приложении.


Скрипт может пригодиться командам, которые ещё не определились с общим подходом к использованию и хранению иконок в проекте, и тем, кто стремится автоматизировать этот процесс.


Под катом – довольно длинный (мы предупредили!) и подробный текст, но с большим количеством полезного кода.

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

Зачем мигрировать с go build на Bazel?

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

Это первый пост из цикла, посвященного миграции с go build на Bazel.

К процессу миграции мы подошли на этапе, когда запуск тестов на CI занимал примерно от 15 минут до часа. При этом мы уже успели реализовать некоторое распараллеливание и кэширование результатов тестов. Без этого тесты на одной машине должны были бы идти примерно часов восемь.

После внедрения Bazel запуск тестов на CI в основном укладывается в интервал от 1,5 до 25 минут (50 перцентиль в районе 12 минут), что гораздо комфортнее исходной ситуации.

Оговоримся, что сравнение этих цифр «в лоб» несколько некорректно: с одной стороны, за время пути кодовая база стала еще больше, а с другой – поменялась топология CI. Но в целом представление о полученном эффекте они дают.

Далее опишем, за счет какого механизма достигнуто ускорение.

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

Путь миграции с go build на Bazel

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

При поиске решений для сборки больших проектов на Go с завидной регулярностью попадались отсылки на статьи про Bazel.

К сожалению, понимания того, как должна выглядеть разработка после миграции на Bazel они не давали. Попробуем разобраться...

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

Bazel, stamping, remote cache

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

В Bazel есть любопытная фича, позволяющая добавить данные, которые не инвалидируют кэш сборки.

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

Разберемся, как stamping использовать...

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

Битва за удобный для IDE stack trace в Go (с Bazel и без)

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

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

С некоторыми ошибками мы пишем в лог стек вызовов. Используемая нами IDE (Idea, GoLand) позволяет по скопированному стеку вызовов получить комфортную навигацию по файлам (Analyze external stack traces). К сожалению, эта возможность хорошо работает только в том случае, если бинарый файл собран на том же хосте, на котором запущена IDE.

Этот пост посвящён тому, как мы пытались подружить формат стека вызовов и IDE.

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