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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Истории

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

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

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

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

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

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

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

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

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

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

Всем привет!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Никто.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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