Pull to refresh
-1
0
Mike Kosulin @MikeKosulin

CTO

Send message

Как перевезти интернет-магазин на Spree и RoR в облако и улучшить стабильность сайта в 4 раза?

Level of difficulty Medium
Reading time 12 min
Views 2.2K

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

Читать далее
Total votes 28: ↑28 and ↓0 +28
Comments 6

Лучшие ИИ-инструменты для аннотирования видео в 2023 году

Reading time 4 min
Views 4.6K

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

Давайте рассмотрим некоторые из лучших инструментов аннотирования видео на основе ИИ.
Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Comments 1

Как использовать Kotlin Multiplatform ViewModel в SwiftUI и Jetpack Compose

Reading time 9 min
Views 10K

Мы в IceRock Development уже много лет пользуемся подходом MVVM, а последние 4 года наши ViewModel расположены в общем коде, за счет использования нашей библиотеки moko-mvvm. В последний год мы активно переходим на использование Jetpack Compose и SwiftUI для построения UI в наших проектах. И это потребовало улучшения MOKO MVVM, чтобы разработчикам на обеих платформах было удобно работать с таким подходом.

30 апреля 2022 вышла новая версия MOKO MVVM - 0.13.0. В этой версии появилась полноценная поддержка Jetpack Compose и SwiftUI. Разберем на примере как можно использовать ViewModel из общего кода с данными фреймворками.

Пример будет простой - приложение с экраном авторизации. Два поля ввода - логин и пароль, кнопка Войти и сообщение о успешном входе после секунды ожидания (во время ожидания крутим прогресс бар).

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 1

Разработка под Flipper Zero: быстрый старт и первое приложение

Reading time 19 min
Views 28K

Итак, это случилось. Я добыл Flipper Zero в бою (ну, на самом деле мне его выдали на хакатоне), и естественно, что интереснее всего не играть в него, используя уже сделанные кем-то функции, а писать что-то новое. Примерно так же я развлекался с Pebble. Тут, кстати, все очень похоже — МК, RTOS, небольшой монохромный экранчик, си.

Поэтому давайте попробуем что-нибудь под него написать. Для начала, что-то совсем простое, чтобы освоиться с SDK, не закапываясь в отладку и сложности RTOS, но функциональное. Есть кнопки, есть экранчик, давайте напишем счетчик-кликер. Нажимаете кнопку — число увеличивается. Подойдет считать посетителей, круги на стадионе, взломанные домофоны или сообщения в чате русскоязычного комьюнити флиппера (по утрам, в особенно активное время там их бывает до 2к, так что я бы на вашем месте подумал, прежде чем нажимать кнопку Join).

Читать далее
Total votes 122: ↑119 and ↓3 +116
Comments 74

Как объяснить детям, что такое Apache Kafka за 15 минут с картинками и выдрами

Reading time 4 min
Views 29K


Я учусь иллюстрировать сложные процессы с помощью комиксов. Нашла себе в копилку крутой кейс: как с помощью комиксов про милых выдр можно ребенку объяснить такую сложную штуку как Apache Kafka, и сделать мир немного добрее.

«Легко по течению» — легкое введение в потоковую обработку и Apache Kafka. Группа выдр обнаруживает, что они могут использовать гигантскую реку для общения друг с другом. По мере того, как все больше выдр перемещается в лес, они должны научиться адаптировать свою систему, чтобы справиться с возросшей активностью леса.

Под катом 25 слайдов, объясняющие основы Kafka для детей и гуманитариев. И много милых выдр.

Читать дальше →
Total votes 32: ↑24 and ↓8 +16
Comments 18

Хакаем CAN шину авто. Мобильное приложение вместо панели приборов

Reading time 7 min
Views 110K

Я продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках.

По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.

Как телефон взаимодействует с автомобилем
Total votes 109: ↑109 and ↓0 +109
Comments 123

Тестирование From Zero to Hero. Часть 1

Reading time 6 min
Views 13K

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

Рассказ будет в трех частях:

- Трудности, с которыми нам пришлось столкнуться, и как мы их преодолевали.

- Конкретные решения по некоторым распространенным кейсам при написании интеграционных тестов.

- Подход к написанию E2E-тестов (тестов, покрывающих взаимодействие всех систем приложения, включая back-end и пользовательский интерфейс) с использованием паттерна PageObject, пришедшего к нам из мира веб-разработки.

Читать далее
Total votes 19: ↑19 and ↓0 +19
Comments 6

Основы Ansible, без которых ваши плейбуки — комок слипшихся макарон, часть 2

Reading time 17 min
Views 59K

Я продолжаю выразительно пересказывать документацию Ансибла и разбирать последствия её незнания (ссылка на предыдущую часть).


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


Мы будем разбирать каждый элемент инвентори (кроме host_group_vars plugin) и обсуждать зачем он, как его использовать правильно, и как неправильно.


Оглавление:


  • Что такое хост? (и немного про транспорты)
  • Доступ IP vs FQDN; inventory_hostname vs ansible_host
  • ansible_user — писать или не писать?
  • Группы
  • Переменные: в инвентори или в плейбуку?
  • Классификация инвентори по происхождению.
Читать дальше →
Total votes 35: ↑34 and ↓1 +33
Comments 15

simctl: управление симуляторами Apple через терминал

Reading time 12 min
Views 15K
Всем привет! Меня зовут Паша Лесюк, я работаю мобильным тестировщиком в компании Циан. В этой статье я расскажу о возможностях управления яблочными симуляторами из командной строки.

Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 5

Самомотивация технаря: уравнение прокрастинации, эффект шредера и трюки с едой

Reading time 14 min
Views 31K
Привет! Меня зовут Игорь, я занимаюсь машинным обучением в Lamoda. До этого я несколько лет работал в науке, что сильно сформировало мое мышление в технарскую сторону.

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

Этими находками я решил поделиться в этой статье.

  • Поговорим про мотивацию самого себя, а не кого-то другого;
  • Узнаем, что такое мотивационное уравнение и как его использовать;
  • Разберём, как влиять на факторы мотивации;
  • И какие есть сервисы и инструменты для этого.

Это статья не про мотивацию сотрудников Lamoda, а про мотивацию, которую я нашел для себя.

image
Total votes 54: ↑50 and ↓4 +46
Comments 16

Всё, что нужно знать о Progressive Web App (PWA)

Reading time 6 min
Views 44K
image

PWA — прогрессивные веб-приложения.

Предупреждение. Эта статья не проспонсирована PWA. Все взгляды и мнения в статье принадлежат только её автору.

Progressive Web App или PWA — лучший способ для разработчиков заставить свои веб-приложения загружаться быстрее и быть более производительными. PWA — это веб-сайты, которые используют современные веб-стандарты, что дает возможность устанавливать их на компьютер или устройство пользователя. В работе они как приложения. Самый известный пример — это Twitter, который запустил сайт mobile.twitter.com как PWA на React и Node.js.
Читать дальше →
Total votes 30: ↑19 and ↓11 +8
Comments 43

Как начать использовать USB Type-C в своих разработках

Reading time 13 min
Views 43K

В современных embedded-устройствах используется огромное количество различных разъемов, таких как USB Type-B, miniUSB, microUSB и так далее. Все они отличаются форм-фактором, максимальной пропускной способностью и другими различными характеристиками. Самым верным решением в данной ситуации было бы минимизировать количество используемых разъемов и остановиться на каком-то одном, «едином» для большинства разработок. Наиболее перспективным выглядит использование разъема Type-C. В нем объединены невероятная пропускная способность с высокой мощностью питания. Такие производители, как Apple, Huawei, Sony уже внедряют разъем Type-C в свои разработки, постепенно отказываясь от использования «старых» разъемов. А чем embedded-разработчики хуже?


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

Читать дальше →
Total votes 52: ↑52 and ↓0 +52
Comments 57

Чек-лист ИТ-стартапа на начальной стадии развития: что нужно сделать, прежде чем тестировать каналы продаж

Reading time 11 min
Views 40K
В Акселераторе ФРИИ работу со стартапами начинают с того, что пытаются определить, на какой стадии развития находится компания. Почему именно с этого? В целом, большая часть проблем у стартапов появляются от отсутствия фокуса: предприниматели совершают много ненужных действий, не концентрируясь на том, что приведет их бизнес к точке безубыточности. Чтобы понять, какие действия компании необходимо совершить в настоящий момент, нужно определить, на каком этапе развития она находится. Для этого во ФРИИ используется такой инструмент, как дорожная карта или road map. Мы выделяем в развитии ИТ-стартапов три больших этапа – поиск и изучение клиентов, тестирование каналов продаж и масштабирование. В данном материале мы пошагово рассмотрим первую большую стадию развития стартапа – Customer Discovery, поиск и изучение клиентов. Обычно оборот компаний на этой стадии не превышает 100 тысяч рублей. Какие шаги должен совершить ИТ-стартап, чтобы уверенно перейти к следующей стадии — тестированию каналов продаж?
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Comments 0

Как «Дадата» ищет дубли в списках торговых точек. Разбираем алгоритм

Reading time 4 min
Views 6.3K


Наши клиенты хранят списки из тысяч компаний, и обычно там первозданный хаос.

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

  1. Евразия.
  2. «САКУРА» Японская кухня.
  3. Доминант.
  4. Магазин-бутик «Евразия».
  5. Милениум, ООО, продуктовый магазин.
  6. Киви/ООО/Челябинск.
  7. Супермаркет эко-продуктов «Доминант».

Точки № 1 и № 4 — дубли, № 3 и № 7 — тоже, но поди разберись.

А разобраться надо: когда в списке из 1000 торговых точек 300 дублей, у производителя начинаются проблемы.
Что за проблемы и как мы их решаем
Total votes 24: ↑22 and ↓2 +20
Comments 14

Настоящее суммирование интернет-каналов — OpenMPTCPRouter

Reading time 7 min
Views 89K


Можно ли объединить несколько интернет-каналов в один? Вокруг этой темы куча заблуждений и мифов, даже сетевые инженеры с опытом часто не знают о том, что это возможно. В большинстве случаев, объединением каналов ошибочно называют балансировку на уровне NAT или failover. Но настоящее суммирование позволяет пустить одно единственное TCP-подключение одновременно по всем интернет-каналам, например видеотрансляцию так, чтобы при обрыве любого из интернет-каналов вещание не прерывалось.

Существуют дорогие коммерческие решения для видеотрансляций, но такие устройства стоят много килобаксов. В статье описывается настройка бесплатного, открытого пакета OpenMPTCPRouter, разбираются популярные мифы о суммировании каналов.
Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Comments 24

Электронная карта виноделия России. Замысел и наполнение

Reading time 8 min
Views 8.9K

Поводом для моей регистрации и этой публикации стал прочитанный пост о посещении завода "Коктебель", в истории которого усомнился автор (ссылка). Фейковых вин не существует в продаже.


Лично меня очень интересует российское виноделие. Обладая при этом минимальными навыками работы с online GIS, я стараюсь не только собирать информацию о положении дел, но и картографировать ее. Я веду постоянно пополняемую карту виноделия (ссылка на карту).

Читать дальше →
Total votes 32: ↑31 and ↓1 +30
Comments 24

Карта развития мобильного разработчика

Reading time 12 min
Views 23K
Мы ежедневно сталкиваемся с понятиями «джун», «мидл», «сеньор», но наши представления о том, какими знаниями должен обладать разработчик на разных стадиях роста, разнятся. Отсутствие четкого плана развития и непонимание, куда двигаться дальше, часто приводят к фрустрации и необдуманным сменам места работы.



Ребята из AppsCast совместно с Head of Mobile проекта Pandao Александром Черным (@AlexChernyy) попробовали разобраться в вопросе и составить собственную карту развития мобильного разработчика с момента попадания в профессию и до руководящих постов. Под катом советы о собеседовании джунов, где брать хороших разработчиков, рекомендации новичкам для устройства на работу, ключевые отличия джунов, мидлов и сеньоров, и важность навыка коммуникации для всех уровней.
Читать дальше →
Total votes 47: ↑42 and ↓5 +37
Comments 9

Трекеры от Google встроены в ряд официальных российских электронных ресурсов

Reading time 6 min
Views 18K

image


Google не то, чем кажется
Дж. Ассанж


Предваряю текст цитатой небезызвестного товарища Дж.Ассанжа, издавшего в свое время книгу «When Google Met WikiLeaks» в которой описываются некоторые факты и особенности тесного взаимодействия этой компании с правительством/спецслужбами США.


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

Читать дальше →
Total votes 42: ↑36 and ↓6 +30
Comments 51

Mountebank: гибкое мокирование web API

Reading time 6 min
Views 21K
image Когда речь заходит о разработке современных IT-систем, вопрос мокирования внешних зависимостей всегда идет где-то рядом. Внешний сервис может быть недоступен на этапе разработки, либо его функционал разрабатывается параллельно и на него нельзя полагаться. Особенно остро этот вопрос встает на этапе написания автотестов, ведь проверять нужно не только штатное поведение вашей системы, но и исключительные случаи: недоступность внешнего сервиса, случаи когда внешний сервис отвечает ошибкой и так далее.

Даже если вам повезло и ваш продукт имеет минимум зависимостей от внешних сервисов, скорее всего внутри он разбит на компоненты (классика жанра — backend/frontend), которые можно и нужно тестировать по отдельности. Это значит, что внешней зависимостью уже является api соседнего компонента, команда разработки которого совсем не горит желанием предоставлять вам инструменты для управления его состоянием.

По моим наблюдениям команды тестирования предпочитают ограничиться самыми базовыми кейсами автотестов, объясняя это как-раз невозможностью переопределить поведение внешней системы.

Решить эту проблему может мокирование API внешних систем.

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

В данной статье я опишу Mountebank: инструмент, который позволяет быстро и очень гибко мокировать API прямо из автотестов без необходимости писать свой веб-сервис.

Возможности mountebank'а:

  • мокирование API на протоколах tcp, http, https, smtp;
  • мокирование неограниченного количества API одновременно;
  • гибкое переопределение логики mock-API прямо во время тестов используя конфигурационный API mountebank'a;

Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 3

В Asterisk версии 12 появился REST интерфейс (Asterisk REST Interface — ARI)

Reading time 2 min
Views 37K
В Asterisk версии 12 появился REST интерфейс (Asterisk REST Interface — ARI).

Да, это RESTful API в натуре.

Пока имеются следующие ресурсы:

  • Asterisk
  • Bridges
  • Channels
  • Endpoints
  • Events
  • Recordings
  • Sounds
  • Applications
  • Playbacks
  • Devicestates
  • Mailboxes


Или, интерфейсы к Каналам, Девайсам, Бриджам, Записям, Звукам. Вероятно, будут наращивать мощности :-)

Ну и главная фишка, это возможность подключения через WebSocket на /ari/events и в режиме постоянного соединения получать события.
В отличие от AMI, тут гуляют объекты в JSON формате, и работать с событиями крайне удобно.
Пример скрипта на ARI:
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 5

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity