Обновить
223.88
Рейтинг
Яндекс
Как мы делаем Яндекс
Сначала показывать
  • Новые
  • Лучшие

Анатомия асинхронных фреймворков в С++ и других языках

Блог компании Яндекс Python *C++ *C# *Go *
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


Представьте, что у вашего сервиса очень маленькая нагрузка — 100 rps, и вам дали задачу написать простой сервер, понятный каждому второму школьнику. У вас получится что-то наподобие следующего:

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →
Всего голосов 50: ↑48 и ↓2 +46
Просмотры 7.1K
Комментарии 19

Новости

Диагностика виртуальной сети в Linux. BPFTrace и skbtrace в опенсорсе

Блог компании Яндекс Open source *Сетевые технологии *Разработка под Linux *Облачные сервисы
Привет! Меня зовут Сергей Кляус, и я как разработчик виртуальной сети сопровождаю создателей приложений, размещённых в Yandex.Cloud. При этом диагностические возможности самого облака ограничены: мы не видим метрики пользовательских виртуальных машин, например количество TCP retransmissions, а записывать и анализировать огромные дампы всего сетевого трафика с помощью tcpdump дорого и трудно из-за ограничений безопасности.
К счастью, динамическая трассировка позволяет получить лучшее от двух миров: исполнять произвольный код в момент увеличения метрики, а в самом коде печатать тело пакета. Например, недавно мы диагностировали проблемы с TCP-соединениями у одного из наших managed-сервисов, и оказалось, что теряются на самом деле UDP-пакеты. Гипотеза требовала уточнения, хотя корреляция между ростом метрики и сбоем была поначалу очевидна. В современном Linux динамическая трассировка реализована через eBPF и утилиту BPFTrace, но постепенно мы накопили набор типовых сценариев их использования и сделали обёртку над BPFTrace. Она называется skbtrace и доступна на GitHub. Про неё я и расскажу под катом.
Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Просмотры 2.6K
Комментарии 0

Кодогенерация DTO: зачем она нужна и как её настроить

Блог компании Яндекс Разработка под iOS *Разработка мобильных приложений *Геоинформационные сервисы *Swift *
Data Transfer Object — модель данных, которые мы передаём из одного слоя приложения в другой. В Яндекс Go мы активно используем DTO. Предположим, нужно отобразить в UI приложения для вызова такси экспериментальную кнопку с двумя свойствами — надписью на кнопке и ориентировочным временем ожидания такси. Тогда в сетевом слое надо написать примерно такую DTO-модель:

struct OrderButtonExperimentDTO: Decodable {
   let buttonTitle: String
   let estimationMinute: Int
}

Правильно написанная модель позволяет разрабатывать разные слои приложения независимо — но нужно следить за актуальностью самой модели на каждом слое. Например, если в коде выше ожидалось не estimationMinute, а estimationMinutes, то клиент не сможет декодировать полученные из сети данные и пользователь не увидит время ожидания. Такую ошибку легко совершить, в n-й раз перепечатывая названия переменных под каждый слой — а разработчики и правда должны рутинно это делать при любом изменении (или расширении) исходного формата данных. Ещё сложнее заметить ошибку на код-ревью.

Поэтому мы решили добавить механизм, который сам бы составлял и переписывал код моделей DTO в зависимости от исходного формата.
Читать дальше →
Всего голосов 24: ↑23 и ↓1 +22
Просмотры 6.4K
Комментарии 5

Коля и его истории про фулфилмент

Блог компании Яндекс Занимательные задачки Управление проектами *Управление e-commerce *Развитие стартапа
Фулфилмент — весь путь вещи, заказанной вами в интернете, до порога вашего дома. Он начинается где-то на далёком складе: вещь нужно найти, собрать и упаковать. Этот этап не всегда простой, он гораздо менее заметен, чем доставка, но не менее интересен. Сейчас я постараюсь вам это доказать.


Эффективность процесса зависит от его устройства, но если я сходу попробую объяснить, как устроены склады большого маркетплейса, мой рассказ вызовет много вопросов «Почему так сложно?». Поэтому я начну с основ процесса сборки, а потом постепенно, в несколько шагов, увеличу сложность и покажу, какую задачу решает каждое из усложнений. Мне понравились посты на Хабре про стажёра Васю, поэтому добавлю нового вымышленного персонажа — Колю. Он пройдёт с нами весь путь и настроит процессы на складе. Поехали!
Читать дальше →
Всего голосов 41: ↑40 и ↓1 +39
Просмотры 5.9K
Комментарии 12

Как работает цикл заказа такси в Яндекс Go. История вопроса

Блог компании Яндекс Python *Анализ и проектирование систем *Геоинформационные сервисы *
Меня зовут Илья, я отвечаю за инфраструктуру пользовательских продуктов в Яндекс Go. Мы строим цикл заказа такси — процессы, происходящие под капотом после того, как пользователь нажимает «Заказать». Поиск машины, назначение водителя, изменение адреса, оплата поездки — всё это части цикла. Ещё мы делаем инфраструктуру создания циклов, которая используется в Еде, Лавке, Доставке и других направлениях внутри Яндекса.

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

Как всё начиналось


В 2011 году мы запустили сервис заказа такси. В первой реализации в бэкенде был endpoint /create-order, внутри которого мы создавали заказ, искали ближайшую машину и отправляли заказ водителю (кстати, если вы не знали о том, как устроен поиск водителя, то обязательно почитайте).


Читать дальше →
Всего голосов 34: ↑33 и ↓1 +32
Просмотры 21K
Комментарии 36

Агрегация ответов в краудсорсинге. Пример с открытой библиотекой Яндекса

Блог компании Яндекс Python *Машинное обучение *Краудсорсинг
Tutorial
Краудсорсинг позволяет размечать данные для разных задач, но популярнее всего, конечно, задачи классификации объектов — текстов и картинок. Обычно в краудсорсинге несколько человек размечают каждый объект, что требует агрегации — выбора верного ответа из представленных. Под катом я покажу, как агрегировать результат разметки с помощью двух алгоритмов: голоса большинства и алгоритма Дэвида-Скина.

Я буду использовать Crowd-Kit — нашу открытую библиотеку вычислительных методов контроля качества в краудсорсинге, которая предлагает реализации разных методов агрегации ответов, оценки неопределённости и согласованности ответов и т. д. Но вы можете воспользоваться альтернативами: spark-crowd (использует Scala вместо Python), CEKA (Java вместо Python) или Truth Inference (использует Python, но предоставляет только категориальные и числовые ответы).
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 877
Комментарии 3

Ускоряем панораму машины в приложении Авто.ру

Блог компании Яндекс Работа с видео *Разработка мобильных приложений *Разработка под Android *


В приложении Авто.ру есть такая фича — панорамы автомобилей. Она позволяет любому сделать 3D-фото своей машины, показать её во всей красе. Как это работает и как нашим коллегам из ML удалось уместить в смартфон то, что раньше требовало целого ангара, напичканного дорогостоящим оборудованием, yaantonn уже рассказывал на Хабре.


Но отснять панораму — лишь полдела. Затем её предстоит воспроизвести, причём сделать это одинаково хорошо и на топовом флагмане, и на бюджетном смартфоне.

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

Шёпот и эмоции в Алисе: история развития голосового синтеза Яндекса

Блог компании Яндекс Машинное обучение *Научно-популярное Искусственный интеллект Голосовые интерфейсы


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

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

Сейчас мы переходим на следующий уровень: учим Алису управлять эмоциями и стилем своей речи, распознавать шёпот и отвечать на него шёпотом. Казалось бы, что в этом сложного и почему всё это было невозможно ещё несколько лет назад? Вот об этом я и расскажу сегодня сообществу Хабра.
Читать дальше →
Всего голосов 81: ↑78 и ↓3 +75
Просмотры 19K
Комментарии 52

Собеседования в Яндекс: взгляд бэкендера

Блог компании Яндекс Алгоритмы *
Меня зовут Максим Бабенко, и, может быть, вы знаете меня как преподавателя ШАДа (или как автора рассказа про технологию YT на Хабре).

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

В Яндексе я работаю уже больше 12 лет и повидал все наши изменения процесса собеседования. Сегодня я расскажу о наших интервью, попробую разобрать самые популярные мифы и объяснить, чем они обусловлены.
Читать дальше →
Всего голосов 70: ↑52 и ↓18 +34
Просмотры 31K
Комментарии 104

Руководство разработкой: beginner's survival guide

Блог компании Яндекс Управление разработкой *Управление проектами *Учебный процесс в IT Карьера в IT-индустрии
Tutorial

Привет! Меня зовут Наташа, я руковожу разработкой бэкенда страницы yandex.ru. Сейчас у нас в команде больше двадцати человек, которые входят в отдельные группы разработки. Три года назад я впервые стала «тимлидом» маленькой группы из четырёх человек, накопив к этому времени десяток лет опыта в разработке и эксплуатации. Я не стесняюсь сказать, что переход от разработчика к тимлиду дался мне тяжело — и это нормально!

Мне нравится помогать людям в их жизненном пути и ко мне часто приходят начинающие руководители для получения опыта. Работа с людьми показала, что все проходят одинаковый путь с одинаковыми проблемами. Эта статья — мой способ наглядно показать начинающим руководителям происходящее с ними и дать очень простые инструменты, облегчающие первый переход от исполнителя к руководителю.
Читать дальше →
Всего голосов 59: ↑55 и ↓4 +51
Просмотры 13K
Комментарии 21

Встречаем ровер третьего поколения: история создания робота-курьера Яндекса

Блог компании Яндекс Производство и разработка электроники *Компьютерное железо Робототехника DIY или Сделай сам
✏️ Технотекст 2021


Встречайте! Мы выпустили на улицу роботов третьего поколения — модель R3 уже можно встретить в Москве, Иннополисе и США. До конца года мы планируем произвести больше сотни таких роботов, и в дальнейшем будем расширять флот за счёт них.

Меня зовут Алексей, я работаю в Yandex Self-Driving Group: несу ответственность за разработку железа трёх (с половиной) поколений роботов Яндекса. В этой статье я не только коротко расскажу про новое поколение, но и поделюсь историей создания роботов-курьеров. Вы сможете взглянуть их глазами на велосипедиста, узнаете, как собрать прототип из фанеры и трёх гироскутеров, а также почему мы выбрали менее дальнобойные лидары. Всё это я дополню роликами и фотографиями разных этапов разработки. Поехали!
Читать дальше →
Всего голосов 212: ↑211 и ↓1 +210
Просмотры 30K
Комментарии 258

Модульность и DI в современном Android-приложении. Большой туториал от Яндекса

Блог компании Яндекс Разработка мобильных приложений *Разработка под Android *Kotlin *
✏️ Технотекст 2021
Tutorial

Всем привет! Я Денис Загаевский из Android-разработки Яндекс.Карт. Если вы развиваете многомодульное приложение или хотите разбить на части пока ещё одномодульное, этот туториал для вас.


Под катом расскажу, как удобно разбить приложение на модули, зачем это нужно и как потом приготовить в нём DI (dependency injection). Кто-то мог слышать мой доклад на Mobius 2021 Piter или в Школе мобильной разработки, а для всех остальных я написал эту статью.


Смотреть доклады

На Mobius:



В ШРИ:



Местами буду ссылаться на опыт Яндекс.Карт. Кстати, рабочий пример нашего подхода есть на GitHub.


Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Просмотры 8.4K
Комментарии 3

Как Яндекс делает обычные автомобили беспилотными

Блог компании Яндекс Производство и разработка электроники *Компьютерное железо Робототехника Будущее здесь


Привет, меня зовут Антон Чистяков. Пару лет назад я работал в хелпдеске Яндекса и даже писал здесь про то, как мы придумали вендомат с аксессуарами. Теперь отвечаю за сборку беспилотных автомобилей и роботов-доставщиков. Под катом расскажу, как мы делаем простые машины беспилотными: от момента покупки авто и выбора имени до сборки и калибровки, на которых всё, впрочем, не заканчивается.
Читать дальше →
Всего голосов 133: ↑129 и ↓4 +125
Просмотры 25K
Комментарии 138

Суперкомпьютеры Яндекса: взгляд изнутри

Блог компании Яндекс Высокая производительность *Машинное обучение *Компьютерное железо Суперкомпьютеры


Недавно три наших новых GPU-кластера заняли 19, 36 и 40 места в рейтинге суперкомпьютеров Top500. Это лучшие результаты среди всех участвующих в нём суперкомпьютеров России. Но сегодня мы поговорим не о местах в рейтинге, а о том, чем полезно на практике участие в подобных замерах.

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

Поможет мне в этом Дмитрий Монахов dmtrmonakhov. Он уже известен читателям Хабра по докладу о разработке ядра Linux. Передаю ему слово.
Читать дальше →
Всего голосов 125: ↑124 и ↓1 +123
Просмотры 24K
Комментарии 56

Нейросеть, способная объяснить себе задачу: P-tuning для YaLM

Блог компании Яндекс Поисковые технологии *Алгоритмы *Машинное обучение *Искусственный интеллект

Мы уже рассказывали о том, как применили семейство генеративных нейросетей YaLM для подготовки ответов в Поиске, Алисе или даже в Балабобе. Главная особенность наших моделей — метод few-shot learning, который позволяет без дополнительного обучения решать большинство задач в области обработки естественного языка. Достаточно лишь подготовить подводку на человеческом языке — и модель сгенерирует текст. Но что, если это не самый оптимальный путь?

Сегодня я расскажу читателям Хабра про апгрейд этого метода под названием P-tuning. Вы узнаете про недостатки оригинального метода few-shot и преимущества нового подхода. Покажу, где он уже применяется на примере покемонов. Добро пожаловать под кат.
Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Просмотры 7.9K
Комментарии 6

Извлекаем суть новости. Опыт Яндекса

Блог компании Яндекс Поисковые технологии *Машинное обучение *Искусственный интеллект Natural Language Processing *
Привет! Меня зовут Илья Гусев, я занимаюсь машинным обучением в команде Яндекс.Новостей. У каждого новостного сюжета на сервисе есть своя страница, где собраны новости об одном и том же событии из разных источников. Сегодня мы рассмотрим построение краткой выжимки, дайджеста сюжета. В такой выжимке, состоящей из фрагментов новостных документов, содержится основная информация о событии. Очевидно, почему дайджест полезен для пользователя — мы выводим на экран сюжета самое важное о событии. С похожими задачами сталкиваются многие инженеры: например OpenAI недавно опубликовала статью про реферирование книг. Поэтому я надеюсь, что описанный ниже подход будет вам полезен.

Как и всё в Новостях, построение такой выжимки должно быть полностью автоматическим. До внедрения выжимки текстовая часть сюжета выглядела так:



Теперь она выглядит так:


Читать дальше →
Всего голосов 26: ↑24 и ↓2 +22
Просмотры 5.8K
Комментарии 21

Кто крешит приложение на старте?

Блог компании Яндекс Разработка под iOS *Разработка мобильных приложений *Swift *

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


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


В качестве примера будет выступать приложение Яндекс.Браузер для iOS: более 100 тысяч исходных файлов, тысячи коммитов в год и около тысячи модулей без учёта ядра (Swift + Objective-C). Кстати, не так давно мы рассказывали, как помогли команде Swift ускорить отладчик.


Циклический креш на старте


Представьте, что в вашем приложении есть баг, приводящий к крешу. Несложно, правда? Причём возникает баг из-за редкого сочетания факторов, и происходит это на старте. С некоторой вероятностью баг останется незамеченным во время тестирования и попадёт в версию для App Store. А дальше пострадавшие пользователи столкнутся с приложением, которое крешится прямо на старте, и перезапуск уже не помогает — только переустановка.

Как бороться
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 3.1K
Комментарии 8

Новая Яндекс.Станция Мини. Большая история маленького устройства

Блог компании Яндекс Производство и разработка электроники *Гаджеты Компьютерное железо Звук
На днях в продажу поступила обновлённая версия одного из самых популярных устройств с Алисой — Станции Мини. Может показаться, что это эволюционное развитие, работать над которым было проще, чем создавать оригинал. Но новая Мини отличается от предыдущей примерно всем: от внешнего вида и начинки до условий производства — ковид и глобальный дефицит компонентов стали для hardware-команды большим вызовом.



Сегодня я поделюсь с вами несколькими историями о новой колонке. Вы узнаете про одно из самых необычных применений фазоинвертора, про то, как мы достаточно комично сушили фотополимерные модели в домашних условиях. Расскажу, где спрятан сервисный разъём и как работает управление просмотром ТВ через ещё одно новое устройство — Модуль. Будут и другие детали, которые показались нам интересными.
Читать дальше →
Всего голосов 89: ↑86 и ↓3 +83
Просмотры 36K
Комментарии 107

Стажёр Вася и его опыт разработки нового API

Блог компании Яндекс Разработка мобильных приложений *Интерфейсы *API *

Легко ли разработать новый API? На что обратить внимание, чтобы не ошибиться при реализации, и к каким компромиссам стоит быть готовым?


Привет, Хабр! Меня зовут Иван Ивашковский. Я руковожу группой разработки международных проектов в Яндекс Go. Этот пост — продолжение цикла историй о вымышленном стажёре Васе. Предыдущий материал, про идемпотентность, можно почитать здесь. В посте я расскажу, как Вася разрабатывал API для новой фичи и с какими проблемами он столкнулся в процессе. В конце приведу чеклист с советами, как проверить себя на каждом этапе разработки, если вы решаете похожую задачу.


Читать дальше →
Всего голосов 35: ↑35 и ↓0 +35
Просмотры 21K
Комментарии 24

Как менялись правила онлайн-продажи лекарств и почему аптекам по-прежнему сложно

Блог компании Яндекс Законодательство в IT Здоровье IT-компании


В начале осени вступили в силу обновлённые правила онлайн-продажи лекарств с доставкой. Возможность продавать теперь есть не только у крупных аптечных сетей, но и у одиночных аптек — они смогут выйти за пределы своего района и найти новых покупателей. Для людей, в свою очередь, стало проще, быстрее и дешевле купить лекарства онлайн. Но возможности малых аптек в маркетинге и логистике ограничены, и им трудно конкурировать с гигантами. В помощь им приходят маркетплейсы, где можно размещать свои предложения — маркетплейс сам приведёт трафик, примет заказ, оформит платеж и организует доставку. Аптеке нужно только упаковать заказ и передать его курьеру. В идеале покупатели набирают корзину из предложений нескольких аптек и получают всё одним курьером. Я работаю в Яндекс.Маркете, мы давно строим такой маркетплейс и сейчас развиваем в нём категорию лекарств. Чтобы показать, насколько крупные изменения повлекут новые правила, я немного загляну в историю рынка лекарств, расскажу, как он устроен сегодня, что на нём сейчас меняется и почему это правда важно.
Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 4.4K
Комментарии 6

Информация

Дата основания
Местоположение
Россия
Сайт
www.yandex.ru
Численность
свыше 10 000 человек
Дата регистрации