Nokia R&D в Санкт-Петербурге
515 subscribers
17 photos
1 file
51 links
Non official Nokia channel
Download Telegram
​​Nokia DAC (Digital Automation Cloud) состоит из двух больших частей: DC (дата центр) и Edge (расположенное у заказчика оборудование). В Санкт-Петербургском Центре разрабатываются микросервисы для Edge: ядро опорной сети 4G/5G, HAIP, MCPTT (Mission Critical Push-To-Talk). Мы используем движок Gitlab CI/CD для непрерывной интеграции наших микросервисов в Edge. Интеграция происходит ежедневно в случае успеха ночного пайплайна, который содержит полную регрессию: ~4000 UT, ~600 SCT, ~2500 E2E и ~20 интеграционных тестов. Мы защищаем мастер-ветки с помощью merge-requests и code review gates. Наша инфраструктура распределенная: часть задач выполняется на серверах в локальной лаборатории, другая часть в облаках. Приходите на собеседование, расскажем подробнее :)
Продолжая разговор о разработке программного обеспечения, нельзя обойти вниманием такую тему как тестирование программного обеспечения. Вряд ли кто-нибудь будет утверждать, что поставка не протестированного ПО заказчику — это хорошая идея. Для решения этой задачи для программиста доступен большой выбор как методологий, так и готовых к немедленному использованию сред тестирования. В Nokia, и не только в центре разработки ПО в Санкт-Петербурге, широко используется Robot Framework, в основном для системного тестирования и для интеграционных тестов.

Проект Robot Framework стартовал в 2005 году тогда еще в Nokia Siemens Network, и уже в 2008 его исходники были открыты всем желающим за пределами Nokia.

Линейная последовательность ключевых слов в Robot Framework определяет сценарий исполнения теста. Простой табличный синтаксис и текстовый формат облегчает понимание собственного содержания и хорошо подходит для систем контроля версий. Есть возможность написания тестовых случаев описываемых данными (data driven). По результатам выполнения среда генерирует HTML отчеты.

Стандартные библиотеки содержат множество готовых ключевых слов для управления исполнением теста, обработки строк, сервиса операционной системы, организации telnet/ssh сессий и т.п. Среда является расширяемой и пользователь может создавать новые ключевые слова применяя готовые keywords, либо с помощью библиотек на Python, ведь сама среда написана на языке Python.

По опыту использования Robot Framework предоставляет универсальную среду, подходящую и для тестирования оборудования базовых станций, и для тестирования более высокоуровневого ПО, например, мобильной опорной сети в 4G и 5G.

С детальным примером применения Robot Framework для тестирования embedded устройств можно ознакомиться в статье https://habr.com/ru/post/566740/
Как мы уже упоминали, этой осенью прошла очередная C++ Russia, и программа в этом году вышла отличная 🔝

Разнообразные доклады: технический хардкор, насущные проблемы (и решения!) прямиком с прода, С++ в embedded, новые фичи и библиотеки, тулы и процессы — контент на любой вкус. Организаторы очень здорово воссоздали атмосферу offline конференций за счёт большого количества открытых дискуссий, квизов и конкурсов. Но и у онлайна есть плюс: можно участвовать в своем темпе и посмотреть вообще всё в записи.

Кстати о записи, на youtube уже выкладывают активности из студии и доклады последнего дня.

Рекомендуем к просмотру :

Greg Law, Mark Williamson — Getting the most out of GDB — must have для тех, кто пользуется GDB.

Phil Nash — Zen and the art of code lifecycle maintenance об аспектах качества ПО: тесты, типы, статический и динамический анализ.

Андрей Давыдов — Фоновыe задачи: Управления ресурсами и отмена, рассматриваются 3 механизма: callback, future и С++20 корутины.

Техническое интервью С++ разработчика: алгоритмическая секция и архитектурная секция — собеседование в прямом эфире, формат просто огонь 🔥 и есть чему поучиться.

Ну и доклад Лены из Нокии про using enum тоже выложили.
RA (Процедура случайного доступа)

В современном мире трудно представить человека без мобильной связи и мобильного интернета. Сейчас у каждого из нас есть мобильный телефон, который позволяет получить доступ в сеть. Но как же всё-таки базовая станция и ваш телефон узнают друг о друге? 🧐 Как раз об этом мы сегодня попробуем рассказать.
Итак, в тот момент, как ваш телефон включился, он постоянно пытается войти в сеть 📶Но как же это сделать, если нет никакой информации о том, когда можно отправлять пакеты данных и каком ресурсном диапазоне можно это делать? Для решения этой задачи в стандарте 3GPP определена процедура случайного доступа Random Access (RA). В стандарте 5G процедура случайного доступа не сильно отличается от 4G.
5G RA выполняется в несколько этапов:
• На первом этапе мобильный телефон получает системную информацию (System Information): формат преамбулы Physical Random Access Channel (PRACH), доступный временной и частотный ресурс, high speed flag — определяющий режим работы для движущихся с высокой скоростью мобильных устройств, а также параметры, необходимые для формирования PRACH преамбулы.
• После того, как была получена вся системная информация, мобильный телефон может сгенерировать преамбулу в соответствии с требованиями стандарта.
На следующем этапе для 4G стандарта, мобильный телефон отправил бы преамбулу, но для 5G есть еще несколько дополнительных шагов.
• Если используется технология формирования направленного луча (Beam Forming), то отсылка производится по наиболее мощному лучу. Выбор оптимального луча происходит в момент приема системной информации.
• Процедура случайного доступа завершается отправкой преамбулы и приёмом ответа в рамках выделенного временного окна.
Другое отличие RA процедуры для стандарта 5G заключается в формате используемых преамбул и соответственно данных, получаемых мобильной станцией в PRACH Config.
Отправляемая мобильным телефоном преамбула называется msg1.

Так всё-таки что собой представляет msg1 и для чего он нужен? Msg1 — это сложный сигнал, представленный в виде Zadoff–Chu (ZC) последовательностей. Свойства данного сигнала позволяют получить хорошие корреляционные характеристики даже тогда, когда сигнал замаскирован под шумами.
Когда базовая станция принимает эту преамбулу, она производит вычисление корреляционной функции, или простыми словами выполняет сравнение принимаемого сигнала с эталонным. В результате этих действий, путём сравнения с пороговыми значениями, базовая станция сначала определяет, какой индекс преамбулы был принят. Далее происходит определение смещения сигнала относительно временной сетки станции. Это позволяет в свою очередь синхронизировать время отправки сообщений от мобильного телефона к базовой станции. Затем базовая станция отправляет сообщение msg2, в котором она сообщает, какую преамбулу обнаружила и информацию об упреждении для отправки данных. И в случае успешного приема происходит отправка msg3 и msg4, в результате которой происходит доступ мобильного устройства к сети. И только тогда мы можем пользоваться интернетом и совершать звонки! 📳
Как оценить расстояние до мобильного терминала? 🧐

На самом деле мы немного опосредованно поговорим о штуке, которая называется Physical Random Access CHannel (PRACH)
В 3GPP есть традиция: как только надо определить какую-то функциональную зону, то её сразу называют канал (channel), придумывают красивую и непонятную аббревиатуру и далее стараются максимально запутать всю историю, размазав описание по множеству разных документов и обложив невероятным количеством взаимно-перекрёстных ссылок. Так постепенно появляется каста инженеров, которых невозможно уволить, потому что только эта элита знает, где именно какие именно подробности написаны и почему именно так всё устроено и где в спецификациях спрятаны ошибки, плюс к этому включая знание апокрифических документов (кстати, если вы хотите в такую элиту, то приходите к нам работать в команду Architecture and Specification).

Начнём с того, что в нашем инженерном мире даже нет единого способа произнести PRACH. Кто-то прямо калькирует это буквосочетание как «прач», где-то говорят «пии-рач», намекая на продолжительную эволюцию технологии, корнями уходящую ещё в 2G, кто-то вообще на немецкий манер говорит «прах» (для нашего уха такая себе идея), есть даже вариант «пии-рак». Одним словом, произносите так, как вам удобно.
Процесс подключения мобильного терминала к сети оператора (random access procedure – процедура произвольного доступа) сложный и затрагивает не только мобилку и базовую станцию, но в значительной степени поддержан множеством процессов в опорной сети. Вот про это мы сейчас говорить не будем, наша цель – предварительные ласки, а именно то, как мобильный терминал сообщает базовой станции, что «вот он я» и «пустите меня к себе жить». Точнее, про небольшую часть этого увлекательного процесса.
Чтобы было интереснее, мы дальше не просто будем рассказывать, но будем немножко писать код. Но так, чтобы без этих ваших нулевых указателей и UB, а просто возьмём любой интерпретатор Python 3-й версии в компании с библиотеками numpy и matplotlib:
$ sudo apt-get install python3 python3-pip matplotlib
$ pip3 install numpy

И да, обещаем постараться обойтись без матана 🤓
Ну что, начнём!
Последовательности Задова-Чу

Последовательности Задова-Чу – это такие комплексные последовательности, которые, будучи смешаны с неким сигналом, порождают новый сигнал с ярко выраженной корреляционной функцией. Кроме того, если циклически сдвинуть такую последовательность, то она практически не коррелирует с исходной. Такие чудесные свойства этих последовательностей, конечно же, привели к тому, что их в 4G используют где только можно. В 5G из соображений многообразия их, правда, выпилили кое-откуда. Но в PRACH они пока остались.
Давайте посмотрим на это вооруженным взглядом. Для желающих обоснование можно почерпнуть в TS 38.211 пункт 6.3.3. 1, нежелающих сразу приглашаем в код (благо Python из коробки поддерживает комплексные числа и всякий матан):

import numpy as np
def zc_td(idx: int, cshift: int = 0, length: int = 139) -> np.ndarray:
seq = np.arange(length)
return np.roll(np.exp((-1j * np.pi * idx * seq * (seq + 1)) / length), cshift)
zc_seq = zc_td(22) # пусть будет 22, почему бы и нет?

Это функция, которая для некоторого заданного индекса последовательности (не будем сосредотачиваться на смысле этого индекса, пусть это будет просто некоторое целое число 22), заданного циклического сдвига и заданной длины генерирует последовательность Задова-Чу во временной области. В 5G в PRACH есть традиция использовать последовательности длины 839 и 139 (если что – оба числа простые, что как бы намекает), мы для экономии сосредоточимся на более коротком варианте с длиной последовательности в 139 элементов, определив константу
L = 139
которой и будем иногда пользоваться в дальнейшем.
Если вы знаете, с какой стороны браться за scrum guide, помните, сколько ценностей в agile манифесте и подрабатываете агентом изменений в крупной компании, то вы поймёте нас лучше других. Всем привет! На связи Agile гильдия Нокии.

В любой компании, где есть потребность в изменениях и есть люди, готовые эти изменения воплощать в жизнь, с высокой долей вероятности возникает Agile гильдия. У них могут быть разные названия, разные цели, но что точно – они объединяют людей, которым не всё равно. Так произошло и у нас. Точка кристаллизации в СПб – это полтора десятка самых разных людей: от инженеров, которым стало интересно или которых попросили помочь, до опытных ребят, за плечами которых крутые команды и интересные проекты.

Кто-то скажет, что в телекоме это не работает, кто-то спросит, когда мы последний раз общались с пользователями, а кто-то даже помянет «кровавый энтерпрайз». На всё это у нас есть ответы. Для активных читателей – в комментариях можно задать вопросы и/или темы, которые мы раскроем в следующих заметках (если они не нарушают NDA) .

Keep calm and scrum ON !
Timing Advance

Сейчас можно немного подытожить тему определения расстояния от базовой станции до мобильного терминала. Как мы разобрались, эта задача в 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 и список литературы, отсортированный по уровням.
Вот почти и закончилась первая рабочая неделя после новогодних праздников 😅

А пока предлагаем послушать выпуск Software Development podCAST #140 — о разработке, телекоме, собеседованиях, базовых знаниях и конференциях. И немного о том, над чем мы работаем 📶
👍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!
👍5
Подключаясь к мобильному интернету, телефон должен знать MTU сети, чтобы избежать фрагментации данных. Как и для Ethernet, MTU для мобильной сети ограничивается значением 1500 байт. Но, в силу некоторых особенностей передачи данных внутри сети, MTU=1500 не подходит... 🤔

Давайте разбираться вместе с MTU на примере LTE.
👍8
Некоторое время назад мы занимались анализом одного алгоритма в целочисленной арифметике и в процессе работы потребовалось провести несложное моделирования для повторения результатов. В качестве инструмента был выбран привычный Python. Однако результаты слегка не совпали с теоретическими ожиданиями (у нас большие учёные используют как правило Matlab). Поиск проблемы привел к интересной находке 😮.
👍14😱4😢2