Обновить
387.78

Linux *

Пишем под *nix

Сначала показывать
Порог рейтинга
Уровень сложности

Реализация горячей перезагрузки С++ кода в Linux и macOS: копаем глубже

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


*Ссылка на библиотеку и демо видео в конце статьи. Для понимания того, что происходит, и кто все эти люди, рекомендую прочитать предыдущую статью.


В прошлой статье мы ознакомились с подходом, позволяющим осуществлять "горячую" перезагрузку c++ кода. "Код" в данном случае — это функции, данные и их согласованная работа друг с другом. С функциями особых проблем нет, перенаправляем поток выполнения из старой функции в новую, и все работает. Проблема возникает с данными (статическими и глобальными переменными), а именно со стратегией их синхронизации в старом и новом коде. В первой реализации эта стратегия была очень топорной: просто копируем значения всех статических переменных из старого кода в новый, чтобы новый код, ссылаясь на новые переменные, работал со значениями из старого кода. Конечно это некорректно, и сегодня мы попытаемся исправить этот изъян, попутно решив ряд небольших, но интересных задач.


В статье опущены детали, касающиеся механической работы, например чтение символов и релокаций из elf и mach-o файлов. Упор делается на тонких моментах, с которыми я столкнулся в процессе реализации, и которые могут быть полезны кому-то, кто, как и я недавно, ищет ответы.

Читать дальше →

OpenSceneGraph: Процедурная анимация геометрии и атрибутов состояния

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

Введение


Говоря о приемах программирования, специфичных для OSG в прошлый раз мы говорили о механизме обратных вызовов (Callback) и его реализации в движке. Настало время посмотреть на то, какие возможности дает нам применение этого механизма для управления содержимым трехмерной сцены.

Если говорить об анимации объектов, то OSG предоставляет разработчику две возможности её реализации:

  1. Процедурная анимация, реализуемая программным способом через трансформацию объектов и их атрибутов
  2. Экспорт анимации из 3D-редактора и управление ею из кода приложения

Для начала рассмотрим первую возможность, как наиболее очевидную. О второй мы обязательно поговорим чуть позже.
Читать дальше →

OpenSceneGraph: Основные приемы программирования

Время на прочтение24 мин
Количество просмотров5.4K
image

Введение


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

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

Данная статья является довольно длинной и включает в себя обзорное описание разнообразных инструментов и техник (паттернов проектирования, если хотите), предоставляемых разработчику движком. Все разделы статьи снабжены примерами, код которых можно взять в моем репозитории.
Читать дальше →

OpenSceneGraph: Основы работы с текстурами

Время на прочтение15 мин
Количество просмотров4.1K
image

Введение


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

OSG поддерживает несколько текстурных атрибутов и режимов текстурирования. Но, перед тем как говорить о текстурах, поговорим о том, как в OSG оперируют с растровыми изображениями. Для работы с растровыми изображениями предусмотрен специальный класс — osg::Image, хранящий внутри себя данные изображения, предназначенных, в конечном итоге, для текстурирования объекта.
Читать дальше →

В systemd нашли три уязвимости — разбираемся, в чем дело

Время на прочтение3 мин
Количество просмотров14K
В начале месяца специалисты по ИБ из Qualys обнаружили сразу три уязвимости в systemd — подсистеме инициализации Linux — позволяющие злоумышленнику получить права суперпользователя. Рассказываем, в чем их суть и какие дистрибутивы им подвержены.

Читать дальше →

Linux API. Управление буферизацией файлового ввода-вывода, осуществляемой в ядре

Время на прочтение15 мин
Количество просмотров13K
image Привет, Хаброжители! Мы уже писали о книге Майкла Керриска «Linux API. Исчерпывающее руководство». Сейчас решили опубликовать отрывок из книги «Управление буферизацией файлового ввода-вывода, осуществляемой в ядре»

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

Перед тем как рассматривать системные вызовы, используемые для управления буферизацией в ядре, будет нелишним рассмотреть несколько относящихся к этому вопросу определений из SUSv3.
Читать дальше →

Трехмерная визуализация в тренажерах подвижного состава на базе движка OpenSceneGraph

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


Чуть меньше года назад увидела свет публикация, где мы рассказывали об учебно-лабораторном комплексе (УЛК) электропоезда ЭС1 «Ласточка», разработанном нашем университете. Тогда я обещал, что это будет не последняя публикация на данную тему, в частности грозился рассказать о проблемах создания трехмерной визуализации для подобного рода симуляторов и очертить основные подходы к их решению.

Прошедший год порадовал нас очередным релизом — УЛК высокоскоростного электропоезда ЭВС2 «Сапсан», который состоялся ещё в августе прошлого года. Сам по себе учебно-лабораторный комплекс данного электропоезда заслуживает отдельного рассказа, но в контексте этой публикации речь пойдет о наболевшем — проблеме создания адекватной подсистемы трехмерной визуализации, к решению которой наша команда подступалась с разных сторон около двух лет. Релиз симулятора «Сапсана» знаменателен (среди прочего) и тем, что определил вектор развития наших разработок в этой области.

ld -z separate-code

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


Речь в этой статье пойдёт о небольшой security-фиче, добавленной в GNU ld к релизу 2.30 в декабре 2018 года. На русском языке это улучшение упоминалось на opennet с такой аннотацией:


режим "-z separate-code", повышающий защищённость исполняемых файлов ценой небольшого увеличения размера и потребления памяти

Давайте разберёмся. Чтобы объяснить, о какой проблеме безопасности идёт речь и в чём состоит решение, начнём с общих черт эксплойтов бинарных уязвимостей.

Читать дальше →

Java, Spring, Kurento и медиасервисы. Часть 2-я

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

В предыдущей статье я описывал мой эксперимент с приложением «HelloWorld» из Kurento-туториала. В этой статье я продолжу обзор Web приложений на Java Spring и Kurento Media Server-a.

Следующее приложение из туториала называется WebRTC Magic Mirror. Из названия следует, что зеркало отражает немного приукрашенную действительность. В этом приложении в дополнение к предыдущему применяется фильтр компьютерного зрения «FaceOverlay filter». При обнаружении в камере лица человека Kurento Media Server «надевает» на голову кепку Супер Марио. Если в обьективе несколько лиц, каждому надевается кепка.
Читать дальше →

Как и зачем мы оптимизировали алгоритм очистки SLAB-кэшей в ядре Linux

Время на прочтение8 мин
Количество просмотров8.9K
Рост популярности контейнеров и их использование в совокупности с контрольными группами выявили серьезную проблему масштабируемости, которая приводит к значительному падению производительности на больших машинах. Проблема в том, что время обхода SLAB-кэшей зависит квадратично от количества контейнеров, а активное потребление больших объемов памяти за короткий период может стать причиной ухода системы в busy loop, потребляющий 100% процессорного времени. Сегодня мне хотелось бы рассказать, как мы решили эту проблему, изменив алгоритм учета использования контрольной группой memcg объектов SLAB-кэшей и оптимизировав функцию shrink_slab().

Очистка памяти
Читать дальше →

Искусство шаманства или кастомная прошивка для Olinuxino. Kernel и Ubuntu Часть 3

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

Сборка kernel


Объясню, почему не подходят существующие образы. Основная их проблема в том что они собраны на старом ядре 3.4, а это сразу накладывает ограничение на компилятор максимум версии 4 и ubuntu 12.04 точно, 14.04 не помню. Вот и выходит что если хочешь использовать последний софт и библиотеки то придется пересобирать последнее ядро. Конечно можно в исходниках снять ограничение на компилирование не ниже 5 версии gcc и исправить код чтоб собрался и под 4 версией, но это тот еще геморой. Не говоря уже о том что в нашем случае графическая часть линуха лишняя.

Для начала с kernel.org выкачиваем ядро 4.14.57 на тот момент это была последняя стабильная версия.

В папке с исходником создаем скрипт запускающий конфигурирование:

#!/bin/sh
make  	O=../olimex-kernel-4.14.57 		# папка где будет собрано ядро
	-j2 					# собирать в два потока
	ARCH=arm 				# тип процессора под который собирать
	CROSS_COMPILE=arm-linux-gnueabihf-  	# кросс компилятор
	xconfig				# запуск конфига

Получим что то вроде этого:


Читать дальше →

Java, Spring, Kurento и медиасервисы

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


Существует уже немало медиа сервисов, но люди продолжают их создавать. Решил и я заняться изобретением своего велосипеда.

Натолкнувшись на проект Kurento, понял что это то, что мне надо. Данная статья является частично переводом Kurento Documentatin, частично это заметки о моих экспериментах с KurentoTutorial. Надеюсь что разработчикам, приступающим к изучению данного вопроса, этот материал поможет быстрее освоить тему создания медиа сервисов.
Читать дальше →

Использование GtkApplication. Особенности отрисовки librsvg

Время на прочтение12 мин
Количество просмотров3.7K
Аннотация статьи.

  • Использование GtkApplication. Каркас приложения. Makefile.
  • Отрисовка библиотекой librsvg.
  • Экспорт изображения в GtkImage и его масшабирование.
  • Масштабирование SVG самописными функциями.
  • Получение полного пути в приложениях.
  • Тесты быстродействия GtkDrawingArea vs GtkImage.
Читать дальше →

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

Реализация горячей перезагрузки С++ кода в Linux

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

image


* Ссылка на библиотеку в конце статьи. В самой статье изложены механизмы, реализованные в библиотеке, со средней детализацией. Реализация для macOS еще не закончена, но она мало чем отличается от реализации для Linux. Здесь в основном рассматривается реализация для Linux.


Гуляя по гитхабу одним субботним днем, я наткнулся на библиотеку, реализующую обновление c++ кода налету для windows. Сам я слез с windows несколько лет назад, ни капли не пожалел, и сейчас все программирование происходит либо на Linux (дома), либо на macOS (на работе). Немного погуглив, я обнаружил, что подход из библиотеки выше достаточно популярен, и msvc использует ту же технику для функции "Edit and continue" в Visual Studio. Проблема лишь в том, что я не нашел ни одной реализации под не-windows (плохо искал?). На вопрос автору библиотеки выше, будет ли он делать порт под другие платформы, ответ был отрицательный.


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


"Как так?" — подумал я, и принялся раскуривать фимиам.

Читать дальше →

Вышел Linux 4.20 — что изменилось в новой версии ядра

Время на прочтение4 мин
Количество просмотров58K
Мы уже рассказывали о нововведениях, которые были сделаны в Linux kernel 4.18. Сегодня поговорим о том, что внедрили в 4.20, и проведем краткий обзор последующего релиза.

С большой долей вероятности он будет назван «5.0».

Читать дальше →

Изучаем трассировку с помощью eBPF: Руководство и примеры

Время на прочтение6 мин
Количество просмотров18K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи Брендана Грегга, посвящённой изучению eBPF

На конференции Linux Plumbers было как минимум 24 выступления по eBPF. Он быстро стал не просто бесценной технологией, но и востребованным навыком. Возможно, вам хотелось бы поставить какую-то цель на новый год — изучите eBPF!


Термин eBPF должен означать что-то существенное, как например Virtual Kernel Instruction Set (VKIS), но по своему происхождению это расширенный Berkeley Packet Filter. Он применим во многих областях, таких как производительность сети, фаерволлы, безопасность, трассировка и драйвера устройств. По некоторым из них есть много свободно доступной информации в интернете — например, по трассировке, а по другим ещё нет. Термин трассировка относится к инструментам анализа производительности и наблюдения, которые могут генерировать информацию по каждому событию. Возможно, вы уже использовали трассировщик — tcpdump и strace являются специализированными трассировщиками.


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


  • Начинающим: запуск инструментов bcc
  • Опытным: разработка инструментов bpftrace
  • Продвинутым: разработка инструментов bcc, вклад в bcc и bpftrace
Читать дальше →

Искусство шаманства или кастомная прошивка для Olinuxino. UBOOT Часть 2

Время на прочтение4 мин
Количество просмотров20K
Все это собиралось из под Ubuntu 16.04.

Решение собрать прошивку родилось из за отсутствия в свободном доступе образа для этой платы (Olimex A13-Olinuxino). А производитель предлагал преобрести SD карту с образом и стоило что то около 10 евро на тот момент, что очень не устроило, к тому же она была рассчитана на наличие монитора.

Конфигурирование загрузчика будем формировать для загрузки с SD карты. Поскольку NAND памяти на плате нету а все остальные варианты загрузки слегка кривоваты (у кого получиться собрать uboot для загрузки с USB носителя, пусть сделает два шага вперед и поделится). Алгоритм загрузки процессора allwinner a13 можно найти на сайте производителя. Или вот вырезка из даташита.


Читать дальше →

Искусство шаманства или кастомная прошивка для Olinuxino. Часть 1

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

Однажды в старой коробке была найдена была найдена борда Olinuxino от Olimex на процессоре A13 от Allwinner, с 512Мб на борту. Порывшись, там же был найден старый самодельный преобразователь интерфейсов USB – uart/spi на FT-шке (который когда то делался для прошивки AVRок) и блок питания от какого то радиотелефона, все это хозяйство на фотографии ниже.


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



Читать дальше →

snap & flatpack — трагедия общин

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

Лонгрид варнинг: вас предупредили, много букв.


Уже давно ведётся разработка формата дистрибуции приложений, которые были "свободны" от общесистемных зависимостей. Ubuntu очень, очень активно продвигает свой snap, gnome — flatpack. Оба обещают рай и свободу от rpm/deb. Давайте же подумаем про проблему, которую они хотят решить, и цену, которую они просят за решение этой проблемы.

Читать дальше →

Импортозамещение операционных систем. Какими я вижу отечественные ОС

Время на прочтение6 мин
Количество просмотров90K
Когда мы говорим о дистрибутиве операционной системы, то речь впервую очередь идет не об ядре операционной системы, а о тех приложениях, которые входят в состав дистрибутива. А когда мы говорим об импортозамещение операционных систем, то речь идет о той или иной версии Linux. Ничего другого на российском рынке для импортозамещения не предлагается. Что касается ядра linux, то за его развитие отвечает Ли́нус Бенедикт То́рвальдс. И честно говоря мне ничего неизвестно, про российское ядро linux. А вот окружение любого дистрибутива linux разрабатывается различными организациями, все их и не перечислить: KDE, Mozilla, Google, IBM и т.д. и т.д. И следовало бы ожидать, что с появлением отечественных ОС аля linux этот список будет расширен отечественными разработками или модификациями. Но этого нет. Нет, это не обязательно отечественный браузер или почтовый клиент в этих дистрибутивах. Но что-то доработанное с учетом российских реалий в цифровой экономике хотелось бы видеть. Остановимся на этом.
Читать дальше →

Вклад авторов