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

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

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

Псевдокод для тестирования

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

Принято считать, что псевдокод — это «инструмент» преимущественно разработчиков, хотя и используемый нечасто. Если обратиться к теории, то псевдокод представляет собой своего рода прототип, шаблон или даже скелет готового функционального решения. В таком случае почему бы не использовать его возможности для тестирования?

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

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

PRINT 'read more'
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 3

Не стоит бояться теней

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

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

Не боюсь
Всего голосов 30: ↑27 и ↓3 +24
Комментарии 22

JNI, часть 3: производительность Java/JNI/NDK

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

Всем привет! Меня зовут Роман Аймалетдинов, я разрабатываю клиентское приложение Ситимобил. Продолжаю свою серию статей по JNI, так как технология используется редко, но иногда она бывает очень полезной (или просто интересной). В этот раз я покажу замеры производительности, достаточно тривиальные, но отображающие суть. И если вы не знакомы с JNI, но тема интересна, то советую ознакомиться с первой и второй частью этой серии статей.

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

JNI Часть 2: Примеры

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

Всем привет! Меня зовут Роман Аймалетдинов, я разрабатываю клиентское приложение Ситимобил. Продолжаю свою серию статей по JNI, так как технология используется редко, но иногда она бывает очень полезной (или просто интересной). В этот раз я покажу примеры решений на JNI, которые совсем немного сложнее, чем hello world. И если вы не знакомы с JNI, то советую начать с первой части.

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

JNI Часть 1: Введение

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

Всем привет! Меня зовут Роман Аймалетдинов и я разрабатываю клиентское приложение Ситимобил. Решил написать небольшую серию из трех статей по JNI, так как технология используется редко, но иногда она бывает очень полезной. Несмотря на то, что я разрабатываю классические приложения под Android, иногда хочется посмотреть технологии рядом со своей специализацией.

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

Куда поехать в пятницу вечером, если ты в Питере. Сравнение алгоритмов геокластеризации

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

Всем привет, меня зовут Максим Шаланкин, в Ситимобил я занимаюсь машинным обучением. Мы постоянно принимаем решения на основе больших данных. Даже в пятницу вечером мы доверяем алгоритмам выбор места отдыха. А кто же, если не наши клиенты, лучше всего знают, где в Санкт-Петербурге можно хорошо отдохнуть?

Врууум
Всего голосов 32: ↑29 и ↓3 +26
Комментарии 7

Импакт-анализ на примере Android-проекта

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

Одной из самых дорогих по времени операций на CI-сервере является прогон автотестов. Есть множество способов их ускорения, например, распараллеливание выполнения по нескольким CI-агентам и/или эмуляторам, полная эмуляция внешнего окружения(backend/сервисы Google/вебсокеты), тонкая настройка эмуляторов(Отключение анимации/ Headless-сборки / отключение снепшотов) и так далее. Сегодня поговорим про импакт-анализ или запуск только тех тестов, которые связаны с последними изменениями в коде. Расскажу какие шаги нужны для импакт-анализа и как мы реализовали это в нашем проекте.

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

Ситимобил вместе с экспертами из разных компаний подводит итоги года в разных областях Data Science

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

Всем привет!

Подходящий к концу 2021 год был очень насыщенным — нам удалось провести 5 митапов с интересными спикерами и экспертами рынка Data Science и Machine Learning. Мы узнали много интересного, и это здорово!

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

А что из этого действительно стало важным событием? На какие технологии и сервисы стоит обратить внимание? На эти вопросы ответили эксперты по Data Science.

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

Блокировки MySQL: виды, проблемы и способы обнаружения

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

Рано или поздно любой разработчик или администратор СУБД, имеющий дело с MySQL, сталкивается с проблемой блокировок. Всё дело в природе MySQL как системы с конкурентным доступом на чтение/запись. Я расскажу о видах блокировок в MySQL, их преимуществах и недостатках, о проблемах, которые они вызывают, а также дам полезные советы по обнаружению и способам борьбы с блокировками.

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

Как мы учились находить заказы по пути домой

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

Всем привет, меня зовут Оля, и я работаю аналитиком в команде распределения заказов Ситимобила. Наша задача — оптимально находить водителей и предлагать им удобные заказы с учетом ряда ограничений и пожеланий. Поэтому у нас есть разные режимы работы, в том числе «домой»: в этом режиме водителям предлагаются заказы только по пути домой.

Нам жаловались на некоторые предложения: водители считали, что им предлагают заказы не по пути. Поэтому они часто отказывались от заказа после подачи автомобиля, что приводило к плохому пользовательскому опыту и у водителей, и у пассажиров. Мы решили пересмотреть алгоритм. Самый сложный вопрос в этой задаче — «что такое по пути?». Оказалось, каждый водитель понимает это по-своему.

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

Поехали
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 8

React. Как не стать заложником макета, или пример использования принципа единой ответственности

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

Пожалуй, каждый разработчик сталкивается с ситуациями, когда два и более компонентов оказываются тесно связаны логически, но в DOM отображаются раздельно, вперемешку с другими элементами UI. Лобовое решение задачи синхронизации таких разрозненных модулей ведёт к просачиванию их состояния и логики наружу в третьи компоненты. Давайте обсудим эту ситуацию и способы её разрешения.

Для наглядного примера из практики рассмотрим приложение «Такси ВКонтакте», а именно указание «нитки» маршрута.

Поехали
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 6

Тестирование с нуля, или Один в поле — тестировщик

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

Никто.

Абсолютно никто.

Вы — единственный тестировщик в проекте.

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

Как справиться с отсутствием личных проектов

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

Постоянно читая статьи на тему того, как %user% буквально на коленке научил свою кофеварку выгуливать собаку, начинаешь чувствовать себя немного неуютно. Складывается ощущение, что вокруг тебя взрослый мир и все вокруг знают больше тебя, умеют лучше и т.д. 

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

Как не выйти в Window при работе с Window?

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

Многие разработчики разбиваются о жизненные циклы onResume, onActivity, onCreate, которые связаны с отображением UI внутри приложения, будь то Activity или фрагмент. Некоторые методы работы со стремительно развивающимся андроидом приходится искать интуитивно, потому что официальная документация не дает полной картины. Стоит разобраться, где заканчиваются знания и начинается интуиция.

Я Дмитрий Манько, андроид-разработчик в компании Ситимобил, попробую объяснить, что такое onResume() и почему определение от Google не совсем корректное. Разберу иерархию внутри Activity, покажу когда происходит взаимодействие и какие события для этого нужны. А ещё объясню, почему фрагмент дешевле и проще Activity.

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

Apple Watch, статистика и Siri — как мы провели iOS-хакатон

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

Всем привет, меня зовут Семён, я iOS-разработчик в Ситимобиле. 🙋‍♂️

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

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

Go и MySQL: настраиваем пул соединений

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

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

немного затронем основы клиент-серверного протокола MySQL, его базовое устройство и принципы работы;

дальше перейдем к Go части и разберем реализацию пула соединений;

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

Надеюсь каждый для себя найдет что-то полезное.

Поехали
Всего голосов 44: ↑43 и ↓1 +42
Комментарии 13

Геоанализ этажности Санкт-Петербурга алгоритмом KDE, или Как меняется облик города

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

Всем привет, меня зовут Максим Шаланкин, в Ситимобил я занимаюсь машинным обучением. Мы используем множество крутых алгоритмов для оптимизации наших сервисов и улучшения бизнес-процессов. В этой публикации я расскажу, как использовать в геоаналитике алгоритм ядерной оценки плотности (Kernel Density Estimation) и строить полигоны на карте, основываясь на распределении географических данных.

Врууум
Всего голосов 30: ↑28 и ↓2 +26
Комментарии 3

Citymobil Data Meetup #1 | Работа с географическими неоднородными данными в моделях онлайн-оценки

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

Спасибо большое, что все пришли послушать. У нас сейчас будет с вами чуть-чуть другая тема выступления. Мы поговорим про работу с географическими данными уже не с точки зрения такси, а с точки зрения работы с данными про недвижимость, что будет не менее интересно. Меня зовут Андрей Критилин. Я руководитель центра моделирования компании ЦИАН. О чем мы с вами сегодня конкретно поговорим. 

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

Citymobil Data Meetup #1 | Switchback эксперименты и сетевые эффекты

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

Всем привет! На связи с вами Артем Солоухин. Я представляю команду surge pricing, подразделение эффективности и маркетплейса «Ситимобил». Сегодня мы с вами немного поговорим про switchback эксперименты и про сетевые эффекты. Начнем с небольшого интро в том, чем занимается наша команда, чтобы стало понятно, почему нас волнует то, о чем мы сегодня поговорим.  Далее немного обсудим сетевой эффект, поговорим про switchback, решает ли он проблему сетевого эффекта и насколько. Подведем какие-то итоги. Итак, погнали. 

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

Эффективный DevOps

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

Статья по мотивам доклада «Эффективный DevOps / Максим Залысин (Ситимобил)» с конференции DevOps Live 2020 команды Онтико.

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