Timing Advance
Сейчас можно немного подытожить тему определения расстояния от базовой станции до мобильного терминала. Как мы разобрались, эта задача в LTE и 5G сводится к определению запаздывания сигнала от мобильного терминала к базовой станции. И обратно, конечно. Это позволяет добиться того, что передача всех мобилок синхронизируется при приеме на стороне базовой станции. Необходимо это для установления синхронизации в канале связи, чтобы передатчик мог точно сказать в какой момент времени передача должна фактически быть начата, а приёмник – когда точно следует ожидать появления сигнала.
Частично такая синхронизация устанавливается в процессе доступа мобильного терминала в сеть. Но этого не достаточно, поскольку мобильные терминалы имеют привычку перемещаться вместе с их владельцами. То есть, эту синхронизацию надо время от времени корректировать, что обычно и происходит: базовая станция по пилотным сигналам имеет возможность оценить запаздывание и проинформировать мобилу, посылая последней так называемую timing advance команду, которая содержит некий параметр TA.
TA в принципе можно считать в секундах, но у нас он измеряется в специальных целочисленных попугаях, где 1 попугай рассчитывается от величины разнесения поднесущих частот и размерности преобразования Фурье (TS 38.211 пункт 4.1; про это тоже однажды стоит поговорить, довольно интересная тема). Для LTE один попугай будет равен 16/30.72e6 секунд. Любознательный читатель может самостоятельно пересчитать значение ТА в расстояние, которое проходит радиоволна.
Обобщая, к мобильному терминалу базовая станция отправляет некоторое целое число. Например, 2 или 10.
Если у вас есть LTE-модем, или ваш мобильник поддерживает USSD-команду *#*#4636#*#*, то вы можете сами посмотреть, чему равно ТА в вашем случае. У нас получилось вот так:
Сейчас можно немного подытожить тему определения расстояния от базовой станции до мобильного терминала. Как мы разобрались, эта задача в LTE и 5G сводится к определению запаздывания сигнала от мобильного терминала к базовой станции. И обратно, конечно. Это позволяет добиться того, что передача всех мобилок синхронизируется при приеме на стороне базовой станции. Необходимо это для установления синхронизации в канале связи, чтобы передатчик мог точно сказать в какой момент времени передача должна фактически быть начата, а приёмник – когда точно следует ожидать появления сигнала.
Частично такая синхронизация устанавливается в процессе доступа мобильного терминала в сеть. Но этого не достаточно, поскольку мобильные терминалы имеют привычку перемещаться вместе с их владельцами. То есть, эту синхронизацию надо время от времени корректировать, что обычно и происходит: базовая станция по пилотным сигналам имеет возможность оценить запаздывание и проинформировать мобилу, посылая последней так называемую timing advance команду, которая содержит некий параметр TA.
TA в принципе можно считать в секундах, но у нас он измеряется в специальных целочисленных попугаях, где 1 попугай рассчитывается от величины разнесения поднесущих частот и размерности преобразования Фурье (TS 38.211 пункт 4.1; про это тоже однажды стоит поговорить, довольно интересная тема). Для LTE один попугай будет равен 16/30.72e6 секунд. Любознательный читатель может самостоятельно пересчитать значение ТА в расстояние, которое проходит радиоволна.
Обобщая, к мобильному терминалу базовая станция отправляет некоторое целое число. Например, 2 или 10.
Если у вас есть LTE-модем, или ваш мобильник поддерживает USSD-команду *#*#4636#*#*, то вы можете сами посмотреть, чему равно ТА в вашем случае. У нас получилось вот так:
Так как мы пишем преимущественно на C++, у нас постоянно обсуждается тема обучения языку для разработчиков разного уровня. Хочется иметь список книг и курсов, которые человек должен прочитать и пройти, чтобы уровень знаний соответствовал нуждам проекта (и что ещё потом почитать, чтобы стать сверхчеловеком 💪).
C++ создавался изначально для профессионалов; авторы языка и последующих его расширений и изменений не задавались вопросом, как сделать его более простым в изучении. Поэтому вокруг обучения C++ идут бесконечные дискуссии. Есть книги, курсы, статьи, доклады, и нужно подобрать материал для основных этапов обучения.
При этом надо уметь поддерживать путь с нуля — у нас есть переквалифицирующиеся в C++ разработку тестировщики, железячники или сетевики; и также повышение квалификации, например, для студентов или новых сотрудников, которые видели только 11 стандарт (на проде C++20). Также у нас можно перейти из одного проекта в другой, и это может быть ощутимой сменой специфики и требовать дополнительных знаний.
Мы исходим из того, что у сотрудников есть база в информационных технологиях: немалая часть наших проектов это низкоуровневое программирование, и без уверенных знаний в computer science вообще никуда. Мы хотим дать опору человеку, который хочет научиться программировать на С++, сократить его путь обучения, сфокусировать на главном; дать хороший скелет знаний, который можно наращивать далее самостоятельно.
Помимо теоретических знаний крайне важен практический опыт продуктовой разработки, и большой поддержкой в этом процессе будут менторинг, качественное code review и внутренние семинары/knowledge sharing по технологиям.
💥 Рекомендуем этот roadmap и список литературы, отсортированный по уровням.
C++ создавался изначально для профессионалов; авторы языка и последующих его расширений и изменений не задавались вопросом, как сделать его более простым в изучении. Поэтому вокруг обучения C++ идут бесконечные дискуссии. Есть книги, курсы, статьи, доклады, и нужно подобрать материал для основных этапов обучения.
При этом надо уметь поддерживать путь с нуля — у нас есть переквалифицирующиеся в C++ разработку тестировщики, железячники или сетевики; и также повышение квалификации, например, для студентов или новых сотрудников, которые видели только 11 стандарт (на проде C++20). Также у нас можно перейти из одного проекта в другой, и это может быть ощутимой сменой специфики и требовать дополнительных знаний.
Мы исходим из того, что у сотрудников есть база в информационных технологиях: немалая часть наших проектов это низкоуровневое программирование, и без уверенных знаний в computer science вообще никуда. Мы хотим дать опору человеку, который хочет научиться программировать на С++, сократить его путь обучения, сфокусировать на главном; дать хороший скелет знаний, который можно наращивать далее самостоятельно.
Помимо теоретических знаний крайне важен практический опыт продуктовой разработки, и большой поддержкой в этом процессе будут менторинг, качественное code review и внутренние семинары/knowledge sharing по технологиям.
💥 Рекомендуем этот roadmap и список литературы, отсортированный по уровням.
CppDeveloperRoadmap
C++ Developer Roadmap
The roadmap for learning the C++ programming language for beginners and experienced devs.
Ho-ho-ho 🎅 В предновогодней суете мы решили раскрыть еще одну тему - технология MDT ( минимизация эксплуатационных тестов): https://telegra.ph/MDTMinimization-of-Drive-Test-12-28
Telegraph
MDT(Minimization of Drive Test)
Технология MDT (Radio measurement collection for Minimization of Drive Tests, минимизация эксплуатационных тестов) — это процедура сбора информации с мобильных устройств для получения реальной картины покрытия и обнаружения проблем в сети. Этакий аудит сети…
В преддверии Нового Года вышла большая статья на hh.ru о нашем Питерском R&D 🎁🍾
Читайте 👉: https://spb.hh.ru/article/29763
Читайте 👉: https://spb.hh.ru/article/29763
spb.hh.ru
Nokia: R&D и разработка передовых решений для телеком-отрасли
Большинство людей знают Nokia только как марку телефонов. На самом деле, это компания, которая во многом сформировала мировую отрасль телекоммуникаций, входит в топ-3 производителей оборудования для сетей 5G и возглавляет разработку технологий 6G в Европе.…
❤9
Вот почти и закончилась первая рабочая неделя после новогодних праздников 😅
А пока предлагаем послушать выпуск Software Development podCAST #140 — о разработке, телекоме, собеседованиях, базовых знаниях и конференциях. И немного о том, над чем мы работаем 📶
А пока предлагаем послушать выпуск Software Development podCAST #140 — о разработке, телекоме, собеседованиях, базовых знаниях и конференциях. И немного о том, над чем мы работаем 📶
SDCast
SDCast #140: в гостях Елена Степанова из компании Nokia, спикер конференций C++ Russia
Встречайте 140-й выпуск подкаста. У меня в гостях Елена Степанова из компании Nokia, спикер конференций C++ Russia. В этом выпуске мы говорим про мобильные сети, базовые станции, системное программирование, С++ и конференциях!
Лена рассказала про свой…
Лена рассказала про свой…
👍16😱2
Новый год уже делает первые шаги по планете, а кто-то всё ещё подводит итоги года прошедшего. С какими agile-итогами мы подошли к концу года Быка?
Всем привет! На связи Agile гильдия Нокии и сегодня наша тема «Agile в России 2021».
Компания ScrumTrek уже в пятый раз составила отчёт об исследовании Agile за 2021 год. Он доступен в двух вариантах. Краткая, открытая версия включает в себя четыре вопроса – «Тренды: популярность Agile-подходов», «Какие Agile-подходы и практики применяют новички, а какие — зрелые Agile-команды», «Выгоды от Agile» и «Участники исследования». Для получения расширенной версии нужно либо принять участие в опросе, либо сделать запрос, указав адрес электронной почты.
Кроме того, что часть коллег из нашей Гильдии принимали участие в этом исследовании, было интересно посмотреть на общие результаты Enterprise в России. «Среди крупных компаний (от 500 чел.) 30% – новички в Agile, о зрелости говорят всего 14%, а 56% находится на этапе становления Agile. И это понятно: в Enterprise очень долго длятся изменения культуры, необходимые для достижения высокой Agile-зрелости.». Нокиа соответствует общим трендам в стране – мы уже не новички, но и до Agile-зрелости путь ещё далёк.
Ещё из интересного – наметился тренд на уменьшение «собственных» методов в сторону универсальности. С увеличением опыта желание изобретать велосипед уменьшается. Стали активнее применяться DevOps и OKR. А к 6 основным Agile-эффектам добавилось лучшее управление Agile-командами на удалёнке.
А насколько Вам был полезен этот отчёт? Пишите в комментариях.
Keep calm and scrum ON!
Всем привет! На связи Agile гильдия Нокии и сегодня наша тема «Agile в России 2021».
Компания ScrumTrek уже в пятый раз составила отчёт об исследовании Agile за 2021 год. Он доступен в двух вариантах. Краткая, открытая версия включает в себя четыре вопроса – «Тренды: популярность Agile-подходов», «Какие Agile-подходы и практики применяют новички, а какие — зрелые Agile-команды», «Выгоды от Agile» и «Участники исследования». Для получения расширенной версии нужно либо принять участие в опросе, либо сделать запрос, указав адрес электронной почты.
Кроме того, что часть коллег из нашей Гильдии принимали участие в этом исследовании, было интересно посмотреть на общие результаты Enterprise в России. «Среди крупных компаний (от 500 чел.) 30% – новички в Agile, о зрелости говорят всего 14%, а 56% находится на этапе становления Agile. И это понятно: в Enterprise очень долго длятся изменения культуры, необходимые для достижения высокой Agile-зрелости.». Нокиа соответствует общим трендам в стране – мы уже не новички, но и до Agile-зрелости путь ещё далёк.
Ещё из интересного – наметился тренд на уменьшение «собственных» методов в сторону универсальности. С увеличением опыта желание изобретать велосипед уменьшается. Стали активнее применяться DevOps и OKR. А к 6 основным Agile-эффектам добавилось лучшее управление Agile-командами на удалёнке.
А насколько Вам был полезен этот отчёт? Пишите в комментариях.
Keep calm and scrum ON!
Блог ScrumTrek
Отчет об исследовании Agile в России 2021 — статья в блоге ScrumTrek
В 2021 году в исследовании Agile поучаствовали 1057 человек. Исследование проводилось ScrumTrek в партнерстве с HeadHunter, Банком «Агророс» и Россельхозбанком, а также с участием других компаний и частных лиц.
👍5
Подключаясь к мобильному интернету, телефон должен знать MTU сети, чтобы избежать фрагментации данных. Как и для Ethernet, MTU для мобильной сети ограничивается значением 1500 байт. Но, в силу некоторых особенностей передачи данных внутри сети, MTU=1500 не подходит... 🤔
Давайте разбираться вместе с MTU на примере LTE.
Давайте разбираться вместе с MTU на примере LTE.
Telegraph
MTU в LTE
Самые первые мобильные сети были аналоговыми. Первая цифровая сеть 2G базировалась на технологии Circuit Switched Data, а переход с 2G на 3G сопровождался сменой технологии передачи данных с коммутации каналов на коммутацию пакетов (Packet Switched). В современных…
👍8
Некоторое время назад мы занимались анализом одного алгоритма в целочисленной арифметике и в процессе работы потребовалось провести несложное моделирования для повторения результатов. В качестве инструмента был выбран привычный Python. Однако результаты слегка не совпали с теоретическими ожиданиями (у нас большие учёные используют как правило Matlab). Поиск проблемы привел к интересной находке 😮.
Telegraph
Математика в целых
Некоторое время назад мы занимались анализом одного алгоритма в целочисленной арифметике и в процессе работы потребовалось провести несложное моделирования для повторения результатов. В качестве инструмента был выбран привычный Python. Однако результаты слегка…
👍14😱4😢2
А вы знали, откуда взялось название Nokia 🤔?
Telegraph
О происхождении названия Nokia
Всем известно, что лучший способ привлечь внимание к ординарной заметке — добавить к ней фотографию симпатичной мохнатенькой зверушки. Эта заметка должна была рассказать об этимологии названия Nokia, но фото пришлось добавить по вполне уважительной причине. …
😁12
6G – это возможность соединения всего мира, внедрения повсеместного ИИ и голографического видео. Это новая ступень телекоммуникаций. И мы здесь первопроходцы. Прочитайте свежую статью о том, как Nokia видит эру 6G и какие проделываются шаги для укрепления лидерства в этой сфере.
Nokia.com
Nokia’s vision for the 6G era | Nokia.com
From 2030 6G will bring together machines, ambient data, intelligent knowledge systems and robust computation capabilities that will redefine how we live, work and take care of our planet.
👍5🔥5
Помимо работы, мы участвуем в жизни комьюнити. Сегодня рассказываем о том, какие выставки мы посещали и какие проекты на них представляли 💁♀️💁♂️
Telegraph
Участие в жизни комьюнити
Помимо работы, мы участвуем в жизни комьюнити: ездим на конференции, пишем статьи, возим свои проекты на выставки, сотрудничаем с университетами. 5G проект Нокии — Hamburg Port Authority был представлен на MWC (Mobile World Congress, выставка мобильной индустрии…
🔥6👍4
Код Морзе появился еще в эпоху проводного телеграфа, задолго до появления радио. А кому нужен код Морзе в 21 веке? 🤔
Читайте наш ответ на этот вопрос
Читайте наш ответ на этот вопрос
Telegraph
Кому нужен код Морзе в 21 веке?
Код Морзе появился еще в эпоху проводного телеграфа, задолго до появления радио. Долгое время его знание было обязательным требованием профессиональной подготовки моряков и летчиков (для радиолюбительской лицензии оно в силе до сих пор). И даже стандартный…
👍10
Во многих современных телефонах в настройках сотовой сети можно заметить опцию “Звонки по Wi-Fi”. Что же это такое?
VoWiFi - это технология использования WiFi инфраструктуры для совершения голосовых звонков/передачи сообщений.
С точки зрения абонентов сети это помогает улучшить связь внутри помещений, где покрытие сети LTE может ухудшаться, вызов не прервется при переключении между LTE и WiFi. А в случае роуминга VoWiFi позволит уменьшить затраты на разговоры за границей, так как мобильный телефон может подключаться к домашней PLMN через публичную точку доступа. Для операторов мобильной связи поддержка VoWiFi решений дает возможность выйти на рынок WiFi сервисов, ведь количество публичных точек доступа WiFi продолжает расти.
3GPP стандарты определяют архитектуру IP Multimedia Subsystem (IMS), которая обеспечивает в том числе и голосовой сервис, предоставляемый через домен с коммутацией пакетов. Телефон подключается к компонентам IMS не напрямую, а посредством Evolved Packet Data Gateway (ePDG). Компонент ePDG доступен в сети интернет и маршрутизирует пакеты между мобильным устройством и PDN GW, участвует в аутентификации и авторизации через взаимодействие с 3GPP AAA (Authentication, Authorization and Accounting) сервером.
UE для подключения к ePDG может сформировать доменное имя на основе идентификатора мобильного оператора, например epdg.epc.mnc099.mcc250.pub.3gppnetwork.org, далее через DNS запрос определяет IP адрес сервера.
Если WiFi сеть, через которое подключается мобильное устройство, не является доверенной, ePDG и UE взаимно аутентифицируют друг друга, обмениваются ключами шифрования и устанавливают IPsec туннель с использованием протокола IKEv2. Трафик данных шифруется, поэтому за конфиденциальность разговоров можно не беспокоиться, несмотря на доступность публичных WiFi сетей.
Больше технических деталей о VoWiFi описано в блоге VoLTE/ViLTE + Wi-Fi-Calling — просто о сложном / Хабр (habr.com)
VoWiFi - это технология использования WiFi инфраструктуры для совершения голосовых звонков/передачи сообщений.
С точки зрения абонентов сети это помогает улучшить связь внутри помещений, где покрытие сети LTE может ухудшаться, вызов не прервется при переключении между LTE и WiFi. А в случае роуминга VoWiFi позволит уменьшить затраты на разговоры за границей, так как мобильный телефон может подключаться к домашней PLMN через публичную точку доступа. Для операторов мобильной связи поддержка VoWiFi решений дает возможность выйти на рынок WiFi сервисов, ведь количество публичных точек доступа WiFi продолжает расти.
3GPP стандарты определяют архитектуру IP Multimedia Subsystem (IMS), которая обеспечивает в том числе и голосовой сервис, предоставляемый через домен с коммутацией пакетов. Телефон подключается к компонентам IMS не напрямую, а посредством Evolved Packet Data Gateway (ePDG). Компонент ePDG доступен в сети интернет и маршрутизирует пакеты между мобильным устройством и PDN GW, участвует в аутентификации и авторизации через взаимодействие с 3GPP AAA (Authentication, Authorization and Accounting) сервером.
UE для подключения к ePDG может сформировать доменное имя на основе идентификатора мобильного оператора, например epdg.epc.mnc099.mcc250.pub.3gppnetwork.org, далее через DNS запрос определяет IP адрес сервера.
Если WiFi сеть, через которое подключается мобильное устройство, не является доверенной, ePDG и UE взаимно аутентифицируют друг друга, обмениваются ключами шифрования и устанавливают IPsec туннель с использованием протокола IKEv2. Трафик данных шифруется, поэтому за конфиденциальность разговоров можно не беспокоиться, несмотря на доступность публичных WiFi сетей.
Больше технических деталей о VoWiFi описано в блоге VoLTE/ViLTE + Wi-Fi-Calling — просто о сложном / Хабр (habr.com)
👍13
LTE на Луне
Весной 2018 года мы получили письмо с новостью о том, что Nokia будет партнёром британского оператора Vodafone для проекта Mission to the Moon, в состав которого входит разворачивание первой LTE сети на Луне.
В качестве опорной сети выбрана разработка Санкт-Петербургского R&D — наша компактная сетка, практически готовая для того, чтобы полететь на Луну.
Мы собрали код под ARM, так как для лунного проекта опорная сеть устанавливается прямо в базовую станцию на дополнительный модуль. Реализовали дополнительные фичи в софте для увеличения отказоустойчивости, адаптировали сетевую модель, урезали логирование, расширили REST интерфейс для удаленного администрирования.
Начались тесты на целевом железе. За то время мы получили несколько необычных баг-репортов, вроде: в процессе радиационного теста повредился файл SPR (Subscription Profile Repository, база данных пользователей сети), расскажите, как восстановиться. С тех пор у нас есть процедура восстановления от повреждения радиацией.
Проект с Vodafone приостановили, но в последнее время мы всё чаще слышим о новых проектах на базе старых разработок. NASA продолжает исследования, Nokia Bell Labs тестирует свой лунный ровер, но всё ещё много работы до первого запуска. Возможно, когда-нибудь наш код всё же полетит на Луну помогать бурить лёд на южном полюсе.
Весной 2018 года мы получили письмо с новостью о том, что Nokia будет партнёром британского оператора Vodafone для проекта Mission to the Moon, в состав которого входит разворачивание первой LTE сети на Луне.
В качестве опорной сети выбрана разработка Санкт-Петербургского R&D — наша компактная сетка, практически готовая для того, чтобы полететь на Луну.
Мы собрали код под ARM, так как для лунного проекта опорная сеть устанавливается прямо в базовую станцию на дополнительный модуль. Реализовали дополнительные фичи в софте для увеличения отказоустойчивости, адаптировали сетевую модель, урезали логирование, расширили REST интерфейс для удаленного администрирования.
Начались тесты на целевом железе. За то время мы получили несколько необычных баг-репортов, вроде: в процессе радиационного теста повредился файл SPR (Subscription Profile Repository, база данных пользователей сети), расскажите, как восстановиться. С тех пор у нас есть процедура восстановления от повреждения радиацией.
Проект с Vodafone приостановили, но в последнее время мы всё чаще слышим о новых проектах на базе старых разработок. NASA продолжает исследования, Nokia Bell Labs тестирует свой лунный ровер, но всё ещё много работы до первого запуска. Возможно, когда-нибудь наш код всё же полетит на Луну помогать бурить лёд на южном полюсе.
Nokia
Network on the moon | Nokia
LTE on the Moon matters for networks on Earth. Explore the challenges and learn how we are adapting network capabilities to cope.
🔥23👍10🤩3
3 февраля вышел отчёт по итогам 2021: про выручку, прогнозы на следующий год, buyback и дивиденды можно прочитать здесь.
Мы рады быть частью этого успеха! 🥳
Мы рады быть частью этого успеха! 🥳
🎉9👍6❤2
А тем временем технологии не стоят на месте. Nokia совместно с CMCC и MediaTek успешно запустила 3CC Carrier Aggregation и достигла рекордных скоростей ~3Gbps в DL. Подробности ⏭ здесь
👍8🔥5
5G и фотоэпиляция! 😎
Алгоритмы ютуба на днях порекомендовали занятный научно-популярный ролик. Принцип работы косметических лазеров понятен, но об их мощности мало кто задумывается.
Лазер из видео выдает пучок электромагнитных волн длиной 1064 нм с плотностью потока в 25 Джоулей на сантиметр квадратный. И если на минутку отвлечься от границ диапазонов, определенных СанПиН, получится что в режиме десяти одномиллисекундных импульсов в одну секунду плотность потока мощности ЭМВ превышает нормы для аппаратуры 5G более чем в 10 тысяч раз.
Ждать ли появления групп сопротивления фотоэпиляции с дрекольем и факелами? Пока не ясно..
Алгоритмы ютуба на днях порекомендовали занятный научно-популярный ролик. Принцип работы косметических лазеров понятен, но об их мощности мало кто задумывается.
Лазер из видео выдает пучок электромагнитных волн длиной 1064 нм с плотностью потока в 25 Джоулей на сантиметр квадратный. И если на минутку отвлечься от границ диапазонов, определенных СанПиН, получится что в режиме десяти одномиллисекундных импульсов в одну секунду плотность потока мощности ЭМВ превышает нормы для аппаратуры 5G более чем в 10 тысяч раз.
Ждать ли появления групп сопротивления фотоэпиляции с дрекольем и факелами? Пока не ясно..
YouTube
Лазерная эпиляция в слоу-мо [Veritasium]
Помощь проекту: https://www.patreon.com/VertDider
Ходили когда-нибудь на лазерную эпиляцию? А видели крупным планом, как её делают? Оказывается, Дерек Маллер долго планировал видео об этом и, по правде, довольно давно его снял. Настало время и нам посмотреть…
Ходили когда-нибудь на лазерную эпиляцию? А видели крупным планом, как её делают? Оказывается, Дерек Маллер долго планировал видео об этом и, по правде, довольно давно его снял. Настало время и нам посмотреть…
😁8😱4
SNR и качество приёмника PRACH
Мы решили вернуться к теме детектирования преамбул и предметно поговорить о том, как именно базовая станция принимает решение о начале процедуры RA (Random Access, произвольный доступ). В предыдущем материале мы просто обозначили некий "пик" корреляции, который мы наблюдали на графике, но как же практически задать порог, при превышении которого мы с определённой вероятностью можем утверждать, что обнаружение преамбулы состоялось? Задача не очень тривиальна. Давайте разбираться вместе в нашем материале.
Мы решили вернуться к теме детектирования преамбул и предметно поговорить о том, как именно базовая станция принимает решение о начале процедуры RA (Random Access, произвольный доступ). В предыдущем материале мы просто обозначили некий "пик" корреляции, который мы наблюдали на графике, но как же практически задать порог, при превышении которого мы с определённой вероятностью можем утверждать, что обнаружение преамбулы состоялось? Задача не очень тривиальна. Давайте разбираться вместе в нашем материале.
👍10🔥8
С++ State Machines
Немалая часть нашей работы – реализация телекоммуникационных протоколов.
Установление соединений, сессий, процедуры бизнес-логики и прочие «протокольные» вещи хорошо реализуются с помощью паттерна «Состояние». Вкратце, у объекта есть начальное состояние и набор событий, которые могут изменить состояние; стейт-машина характеризуется матрицей переходов между состояниями по конкретным событиям.
На стейт-машинах также удобно строить взаимодействие асинхронных процессов. Например, когда вы выключаете телефон, процедура Mobile-initiated detach должна повлиять на все происходящие в данный момент процессы: закрыть сессии, обновить контекст, отменить или кэшировать передачу данных. Само по себе выключение – процедура нелинейная, и может быть описана стейт-машиной. Для других процедур это будет внешнее событие. Обработка события «выключение» для каждого процесса разная в зависимости от текущего состояния. Некоторые стейт-машины запускают другие стейт-машины по триггеру «мобилу выключили». And we need to go deeper, IYKWIM.
В общем, мы на состояниях собаку съели 🤓.
В «Банде четырёх» описана реализация паттерна с помощью абстрактного класса с описанием набора событий и унаследованной от него реализацией для каждого конкретного состояния. Вот краткое описание идеи.
Этот подход позволяет инкапсулировать обработку событий в полиморфный вызов и довольно быстро написать небольшую стейт-машину. Но у него есть недостатки: как только число событий или состояний переваливает за десяток, код разрастается на тысячи строк, его становится сложно читать и поддерживать, да и уследить за переходами без картинки с кружочками и стрелочками невозможно. К тому же производительность полиморфных вызовов не самая лучшая.
Существует множество других подходов и библиотек, позволяющих писать стейт-машины компактно и выразительно и предоставляющих дополнительные возможности. Вот более подробное описание «классической» реализации.
И различные вариации:
✅ Стейт-машина с поддержкой тредов
✅ С мультикастом
✅ На enum-ах
✅ На С++17 – с инкапсуляцией в std::variant и передачей события через std::visit
✅ С картинками (позволяющая прямо из кода сгенерировать диаграммы с помощью PlantUML)
✅ На шаблонах – с более высокой производительностью по сравнению с виртуальными классами
Советуем изучить разные подходы к этой архитектурной парадигме, возможно, она подойдёт и для ваших задач ☝
Немалая часть нашей работы – реализация телекоммуникационных протоколов.
Установление соединений, сессий, процедуры бизнес-логики и прочие «протокольные» вещи хорошо реализуются с помощью паттерна «Состояние». Вкратце, у объекта есть начальное состояние и набор событий, которые могут изменить состояние; стейт-машина характеризуется матрицей переходов между состояниями по конкретным событиям.
На стейт-машинах также удобно строить взаимодействие асинхронных процессов. Например, когда вы выключаете телефон, процедура Mobile-initiated detach должна повлиять на все происходящие в данный момент процессы: закрыть сессии, обновить контекст, отменить или кэшировать передачу данных. Само по себе выключение – процедура нелинейная, и может быть описана стейт-машиной. Для других процедур это будет внешнее событие. Обработка события «выключение» для каждого процесса разная в зависимости от текущего состояния. Некоторые стейт-машины запускают другие стейт-машины по триггеру «мобилу выключили». And we need to go deeper, IYKWIM.
В общем, мы на состояниях собаку съели 🤓.
В «Банде четырёх» описана реализация паттерна с помощью абстрактного класса с описанием набора событий и унаследованной от него реализацией для каждого конкретного состояния. Вот краткое описание идеи.
Этот подход позволяет инкапсулировать обработку событий в полиморфный вызов и довольно быстро написать небольшую стейт-машину. Но у него есть недостатки: как только число событий или состояний переваливает за десяток, код разрастается на тысячи строк, его становится сложно читать и поддерживать, да и уследить за переходами без картинки с кружочками и стрелочками невозможно. К тому же производительность полиморфных вызовов не самая лучшая.
Существует множество других подходов и библиотек, позволяющих писать стейт-машины компактно и выразительно и предоставляющих дополнительные возможности. Вот более подробное описание «классической» реализации.
И различные вариации:
✅ Стейт-машина с поддержкой тредов
✅ С мультикастом
✅ На enum-ах
✅ На С++17 – с инкапсуляцией в std::variant и передачей события через std::visit
✅ С картинками (позволяющая прямо из кода сгенерировать диаграммы с помощью PlantUML)
✅ На шаблонах – с более высокой производительностью по сравнению с виртуальными классами
Советуем изучить разные подходы к этой архитектурной парадигме, возможно, она подойдёт и для ваших задач ☝
👍15🔥2
