Как стать автором
Обновить
64.09
Циан
В топ-6 лучших ИТ-компаний рейтинга Хабр.Карьера
Сначала показывать

Пишем plugin для Jetbrains IDE: отображение файлов вне проекта в Project Tool

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1K

Доброго времени суток, дорогой читатель. Меня зовут Михаил, я Android-разработчик в компании Циан. Этой статьёй я открываю для себя цикл статей по внутренней кухне разработки плагинов для Jetbrains IDE: IDEA, Android Studio (AS) и пр. На дворе 2024 год, официальная документация не так богата информацией, как хотелось бы. Но есть исходники, которые смело можно дербанить. В этом цикле статей я буду описывать свой опыт поиска нужной мне информации и её разбор.

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

Как мы реализовали текстовый поиск за 48 часов

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

В компании Циан (где я, Клюшев Александр, и работаю в роли ML-инженера) проводятся внутренние хакатоны, и один из таких проходил в начале лета 2023. Достаточно давно в компании обсуждали идею по реализации поиска объявлений через текстовую строку, и было принято решение эту идею воплотить в жизнь. В статье я расскажу, как выглядит флоу поиска, какую мы использовали модель и какие результаты получили.

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

Топ-3 причины, почему вы должны использовать Copilot

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

Всем привет! Меня зовут Анатолий Барцев, я frontend-разработчик в команде Модерации Циан. Я решил протестировать Copilot, чтобы оценить, полезен ли он для реальной разработки. В статье расскажу, какие выделил для себя плюсы использования, а также покажу, как GitHub Copilot помогает в разработке на примере проекта на React/Typescript.

Читать далее
Всего голосов 32: ↑21 и ↓11+17
Комментарии33

Игра в безопасность Android-приложений

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров6.3K

Давайте в общих чертах рассмотрим вопросы взлома и защиты Android-приложений. 

В рамках статьи нас интересуют сами процессы взлома и защиты, а не конкретные методики работы с конкретными инструментами. Поэтому разберёмся с этими процессами и постараемся сделать выводы. Чтобы читать было интереснее, я решил попеременно ставить себя и на место нападающего, и на место защищающего приложение человека. Что-то вроде шахмат: сначала ход делает нападающий, а затем защищающийся. Пока кто-то не победит. Пройдём путь, постепенно наращивая сложность, от простого вроде HTTPS — к более сложному, вроде обфускации и деобфускации, изменению поведения. И под конец перейдём к C++ и просмотру его Assembler кода.

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

Глобальные события в мобильном приложении

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров2.4K

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

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

Где моя эффективность, босс? Как использовать метрики в управлении командой

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

Привет! Я Саша, тимлид одной из команд первичной недвижимости в Циан. Мы активно используем данные для принятия управленческих решений. Не только продуктовых, но и при управлении командами разработки. В статье я расскажу, как это устроено у нас в компании, и покажу на примере своих метрик, как это можно использовать у себя.

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

Мультимодальный трансформер для content-based рекомендаций

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.6K

На первый взгляд может показаться, что ничего интересного в области RecSys не происходит и там всё давно решено: собираем взаимодействия пользователей и товаров, закидываем в какую-нибудь библиотеку, которая реализует коллаборативную фильтрацию, и рекомендации готовы. В то же время практически все остальные разделы машинного обучения перешли (NLP, CV, Speech) или экспериментируют (TimeSeries, Tabular ML) c нейросетевыми моделями на базе трансформеров. На самом деле, рекомендательные системы — не исключение, и исследования по применению трансформеров ведутся уже достаточно давно.  

Мы в команде ранжирования и рекомендаций, стараемся не отставать от последних достижений в области RecSys. Меня зовут Дима, я Data Scientist в Циан, и сегодня хочу поделиться нашим опытом использования мультимодальных трансформеров для content-based рекомендаций.

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

Тесты: 100% покрытия и юниты не нужны

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров7.9K

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

Меня зовут Максим Вишневский, я Senior Frontend-разработчик в Циан. В этой статье поделюсь историей, как наша команда реформировала подходы к тестированию: как мы отказались от 100% покрытия и unit-тестов, чем их заменили и какой получили результат. Поговорим о проблемах с Enzyme, пользе Playwright, мокинге данных для бэка и взаимодействии с QA.

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

Ловушки интеграционного тестирования в Spring Boot

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

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

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

Поиск лишних Component Dependencies с помощью Dagger SPI

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.6K

Многие из Android-разработчиков для Dependency Injection используют Dagger или его «обёртку» Hilt. Но не многие из них используют Dagger SPI. Этот механизм предоставляет нам доступ к графу зависимостей, что позволяет нам добавить свои проверки графа и не только. В этой статье я хочу рассмотреть работу с Dagger SPI на примере поиска неиспользуемых Component Dependencies. После прочтения статьи вы сможете находить их, или при желании сможете писать свои проверки графа зависимостей. Ну или что вам там в голову взбредёт. 

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

Используем UI-тесты для поиска утечек

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

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

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

Кто и в каких задачах быстрее? Coroutines, RxJava, Executor?

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

Вы когда-нибудь задумывались, какой из фреймворков для многопоточки самый быстрый? Я вроде и знал ответ, но задумывался периодически. В определённый момент сама судьба просто-напросто заставила меня взять и проверить. Так что если вам тоже всегда было это интересно, то я постарался протестировать, сравнить и предоставить результаты для вас. 

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

Оптимизация поиска объявлений по датам бронирования посуточной аренды

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1.7K

Всем привет! Меня зовут Азамат, я backend-разработчик в Циан, занимаюсь поисковыми сервисами. В статье я расскажу, как мы в команде оптимизировали поиск объявлений по датам бронирования в разделе посуточной аренды. Как мы решили проблему роста потребления cpu, ускорили сам поиск и удешевили железо.

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

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

Как создать модули со всей обвязкой под проект, аки Танос пальцем щёлкнув?

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

При разработке новой фичи приходится тратить время на создание однотипных файлов, в которых мы будем писать логику. Рутина, от которой хочется избавиться. В статье я расскажу про свой плагин  Group File Template (GFT) для создания классов из подготовленных заранее шаблонов. Настолько гибко, что подойдёт не только Android-разработчику.

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

Как устроены продуктовые процессы в Циан

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

Рассказываем о внутренних процессах и корпоративной культуре Циан.

Как держать всех в контексте и не скатиться в бюрократию? Почему неудобные вопросы – залог эффективности? Что такое командообразование, и зачем оно нужно? В этой статье расскажем, как работает Циан изнутри. И почему именно так, а не как-то по-другому.

Читать далее
Всего голосов 7: ↑3 и ↓4-1
Комментарии5

Прости, Rosetta, мы должны расстаться

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

С релизом Xcode 14.3 Apple убирает поддержку Rosetta и почти прямым текстом говорит разработчикам, что откладывать адаптацию своих проектов под Apple Silicon дальше уже некуда. Сегодня я поделюсь историей про то, с какими сложностями мы столкнулись в нашем основном приложении Циан, и какое стороннее решение помогло нам избавиться от Rosetta.

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

Многомодульный BDSM. Бутылочные горлышки среди модулей

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров2.2K

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

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

Как мы попробовали Yatagan

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.7K

У нас в проекте с незапамятных времён для DI используется Dagger. И в целом он нас всем устраивает. Ну, разве что кроме одного маленького пунктика — скорость сборки с kapt. Он прилично увеличивает время сборки. Казалось бы, смирись, страдай, прими ситуацию. Но относительно недавно Yandex представили библиотеку для Dependency Injection. Имя ей Yatagan. У неё есть две важных особенности — она спроектирована быть похожей на Dagger по API, и одна из её целей — меньше влиять на время сборки. Меньшее время сборки — это всегда хорошо, а значит, стоит её как минимум попробовать. 

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

Какие параметры компьютера влияют на скорость сборки Gradle проекта

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров6K

Как вы думаете, какие характеристики сильнее влияют на скорость сборки вашего проекта: частота CPU или частота оперативной памяти? Количество ядер CPU или количество оперативной памяти? Влияет ли скорость постоянной памяти на скорость сборки? Однажды у меня в голове возникли такие вопросы, и я решил найти на них ответы. Лучший способ для этого — провести тесты. Поэтому представляю вам их результаты и попытаюсь их объяснить в меру своих знаний. Если хотите узнать, что больше всего влияет на скорость сборки, ну или, может быть, хотите обновить компьютер для сборки, но не знаете, во что лучше вложится, то добро пожаловать в статью.

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

Kotlin Symbol Processing. От теории до практики

Уровень сложностиСредний
Время на прочтение28 мин
Количество просмотров11K

Я расскажу в этой статье о Kotlin Symbol Processing, также известном как KSP.

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

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

Информация

Сайт
www.cian.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия