Как стать автором
Обновить
7.77
Рейтинг

Системное программирование *

Низкоуровневое программирование

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

Погружение в систему — вот на что уходит основное время разработчика

Блог компании Дата-центр «Миран» Системное программирование *Проектирование и рефакторинг *Мозг Инженерные системы
Перевод
Об авторе. Тудор Гриба — разработчик свободного редактора кода Glamorous Toolkit. Это программируемая MDE с движком визуализации и встроенной системой управления знаниями. В своей программной статье автор объясняет, с какой целью создана среда разработки Moldable Development Environment.

Давайте разберёмся, на что уходит время разработчиков. Самый старый из известных мне источников по этой теме — книга «Принципы разработки и проектирования программного обеспечения» Зелковица, Шоу и Гэннона (1979). Там написано, что две трети времени программиста уходит на сопровождение проектов.

Скан страницы:


Затраты на разработку программного обеспечения (1979)
Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 2.9K
Комментарии 2

Новости

Поддержка Arduino в ReactOS

Open source *Системное программирование *
Recovery mode

Вадим Галянт написал драйвер usbser.sys для ReactOS, и теперь (барабанная дробь) появилась возможность программировать платы Arduino в ReactOS. И да, на реальном железе, не в Virtual Box.

Ну как.. теоретическая возможность на самом деле.

Для программирования скетча Arduino и загрузки прошивки в плату надо было решить три проблемы.

Читать далее
Всего голосов 36: ↑36 и ↓0 +36
Просмотры 3.8K
Комментарии 4

Динамические структуры в shared-памяти

Программирование *C++ *Системное программирование *NoSQL *

Приветствую, читатель! Хотелось бы осветить свою небольшую библиотеку для C++, которая призвана помочь Вам создавать динамические структуры в shared-памяти. Далее - под катом.

Читать далее
Всего голосов 6: ↑2 и ↓4 -2
Просмотры 3.8K
Комментарии 27

Баг в ядре Linux и как правильно жаловаться

Open source *Системное программирование **nix *C *Параллельное программирование *

Я работаю системным программистом в компании КриптоПро. Нередко мои задачи связаны с ошибками, которые лежат на самом нижнем уровне современных операционных систем, под которые мы пишем ПО. Я хочу поведать тебе, Хабр, об одной из таких ошибок и о том, как я жаловался на неё разработчикам.

Я отвечаю за поддержку одной из наших библиотек с C-интерфейсом, написанной на C и C++. Мой коллега из другого отдела сообщил, что его нагрузочный тест нашей библиотеки на C# в Linux выдаёт ошибку в хитром сценарии: нужно иметь два процесса по пять потоков, делающих некоторые идентичные вызовы. Если процесс один, а потоков много, то проблема не проявляется. Если процессов два, но в каждом по одному потоку, то проблема не проявляется. Путём просмотра исходников нагрузочного теста и логов работы библиотеки удалось перенести проблему в маленький юнит-тест на C++ с использованием нашего API.

Узнать, что же это было
Всего голосов 94: ↑90 и ↓4 +86
Просмотры 13K
Комментарии 38

Как начать писать программный код Си в ОС Linux (Руководство для совсем начинающих)

C++ *Системное программирование **nix *C *Разработка под Linux *
Из песочницы

Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux, или может быть долго были пользователями ОС Windows. Я попробую здесь показать прямое руководство к действию на примере ОС Ubuntu и тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux.

Читать далее
Всего голосов 26: ↑18 и ↓8 +10
Просмотры 25K
Комментарии 37

История: пишем скрипты на Go

Блог компании Издательский дом «Питер» Программирование *Системное программирование *Go *Разработка под Linux *
Перевод

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

Читать далее
Всего голосов 18: ↑13 и ↓5 +8
Просмотры 5.8K
Комментарии 11

Rust 1.59.0: встроенный ассемблер, деструктурирующее присваивание, отключение инкрементальной компиляции

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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

Читать далее
Всего голосов 41: ↑34 и ↓7 +27
Просмотры 8.6K
Комментарии 9

Карты, фаззинг, OSM: ищем поверхность атаки для сложного приложения

Информационная безопасность *Тестирование IT-систем *Системное программирование *OpenStreetMap *Реверс-инжиниринг *
✏️ Технотекст 2021
Tutorial

Фаззинг - это такое тестирование, в котором не надо придумывать тесткейсы, потому что умная машина (или настойчивый алгоритм перебора) делает это за вас.

Но с фаззингом есть одна неприятность - непонятно, как тестировать любую достаточно сложную систему. Мы бы хотели генерировать много тестов и быстро прогонять их, а в итоге приходится каждый раз откатывать состояние окружения, потому что программа пишет что-то в БД. Или входные данные настолько сложны, что их так просто не нагенерируешь.

Поэтому попробуем разобраться, как программу можно делить на части. А также определять, какие части нам нужны, а какие не очень.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1.4K
Комментарии 3

Отличия DeploymentConfig от Deployment и примеры использования

Блог компании Иннотех Системное программирование *Серверное администрирование *DevOps *Openshift *

Deployment и DeploymentConfig — это, казалось бы, похожие объекты API для OpenShift Container Platform. Но на самом деле они предлагают разные гибкие методы управления интерфейсом пользователей. Расскажем о различиях и приведём примеры, когда какие объекты лучше использовать.

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 3.6K
Комментарии 12

Опыт аудита и отчетности событий информационной безопасности в СУЭК — анонс вебинара

Блог компании Gals Software Информационная безопасность *Системное администрирование *Системное программирование *IT-инфраструктура *
Приглашаем вас на вебинар, на котором Михаил Божнев, менеджер департамента информационной безопасности СУЭК, расскажет об опыте внедрения в компании решений Quest для аудита и отчетности по событиям информационной безопасности. Речь пойдет о двух продуктах от Quest: Change Auditor и Enterprise Reporter. Вы узнаете о решаемых задачах по информационной безопасности в крупной промышленной компании и результатах, которых удалось достичь после внедрения обоих продуктов.



Вебинар состоится 25 февраля в 12:00 по московскому времени. Регистрация.

Под катом подробнее об обоих решениях от Quest и ссылки на прошедшие вебинары.
Читать дальше →
Всего голосов 2: ↑0 и ↓2 -2
Просмотры 636
Комментарии 0

Как не выстрелить себе в ногу, обрабатывая ошибки в голанге

Блог компании FirstVDS Программирование *Системное программирование *Компиляторы *Go *


А пока мы все сидим и ждём выхода Go 2 с его новой схемой обработки ошибок, программы писать надо прямо сейчас. Так что от обработки ошибок никуда не деться.

У меня в руках реальный проприетарный проект, который работает на одной из моих серверных ферм. Всё запущено и крутится на golang от начала и до конца. В этой статье я собрал и описал большое количество вариантов обработки ошибок, с которыми столкнулся в проде.

Итак, поехали.
Читать дальше →
Всего голосов 23: ↑19 и ↓4 +15
Просмотры 5.5K
Комментарии 18

Как кушать вилкой

Системное программирование *C *

...или о fork() в двух словах.

Как люди решают задачи

Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.

¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"

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

Однако мы отвлеклись. Поставим перед собой задачу:

Нам необходимо наиболее правильным способом запустить из своего кода другую программу.

Не так важно, зачем. Это может быть запуск игры из лаунчера, запуск утилиты ping чтобы не реализовывать отправку ICMP-пакетов самостоятельно, запуск программы по клику на ярлык, миллион вариантов, думаю, что вы сами хотя бы раз в жизни сталкивались с такой задачей.

Содержание статьи

* Как кушать пингвина вилкой?
Общие знания о запуске процессов под LINUX-системами
*
Как кушать корову если есть вилка?
Copy-on-write, что это и зачем? vfork и почему он не лучше
*
Как кушать икру?
posix_spawn и почему он не замещает fork()
*
Как кушают клоны?
clone() под капотом у fork()
*
Почему когда ешь суп вилкой он утекает?
Утечка дескрипторов после fork() и как этого избежать
*
Почему у вилки три зуба?
Важность обработки всех вариантов возврата fork()
*
Как кушать демонов вилкой?
Запуск демонизирующихся процессов при помощи fork()
*
Как наложить вилкой в другую тарелку?
Переназначение дескрипторов вывода для нового процесса
*
Как сигналить вилке?
Взаимоотношения обработки сигналов и fork()
*
Как пользоваться вилкой когда сломалась ручка?
Самоликвидация дочернего процесса после завершения материнского
*
Как подготовиться к использованию вилки?
Сценарии использования pthread_atfork()
*
Как поцарапать окно вилкой?
Запуск дочернего процесса под Windows-системой
*
Как систематически пользоваться вилкой?
Почему вам не стоит пользоваться system()
*
Заключение
Благодарности и выводы

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

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

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


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3.3K
Комментарии 0

Собираем компилятор для ПЛИС Lattice ECP5 в лице Yosys и NextPNR для работы в ОС Windows

Системное программирование *FPGA *Компьютерное железо

Наш цикл про ПЛИС Lattice ECP5 растянулся уже на шесть статей. Мы уже научились не только создавать простые проекты для них, но набили руку в разработке сложных систем на базе кроссплатформенной открытой среды LiteX. В целом, я уже набрал материалов, чтобы выдать инструкцию, как подключится к шине Wishbone в роли активного устройства (Master), но перед публикацией хочется провести ряд проверок, чтобы не наболтать не того.

С другой стороны, ещё в первой статье цикла я обещал, как будет формализована методика сборки синтезатора Yosys и разводчика NextPNR под Windows, рассказать, как это сделать, так как на тот момент у меня процесс сборки прошёл в режиме «неделю промучился, как-то сделал, повторить не смогу». Мой коллега систематизировал все те наброски, и теперь я могу поделиться итогами с общественностью. Так что, кто дружит с Linux, сегодня вряд ли узнает что-то интересное, а вот любители Windows – получат сведения, как начать работать с ПЛИС Lattice в этой ОС. Приступаем.

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 1.2K
Комментарии 9

FastTrack: Управление вводом/выводом с учетом FG приложений для улучшения пользовательского опыта смартфонов Android

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

Я разобрала статью:

Hahn, S. S., Lee, S., Yee, I., Ryu, D., & Kim, J. (2018). FastTrack: Foreground App-Aware I/O Management for Improving User Experience of Android Smartphones. In 2018 Annual Technical Conference (USENIX 18) (pp. 15-28).

И хочу поделиться основными идеями по улучшению пользовательского опыта при взаимодействии со смартфонами Android.

Пользователям смартфонов важно, чтобы их устройства без задержек реагировали на действия пользователя. Инверсии приоритетов ввода-вывода в разделах кэша страниц (page cache) и хранилище (storage device) являются причинами увеличения времени отклика приложений переднего плана (FG, Foreground). Цель статьи - исследовать проблему инверсии приоритетов ввода-вывода на смартфонах Android, ее влияние на работу пользователя. Авторы статьи предлагают инструмент управления вводом-выводом FastTrack. Он вытесняет текущую фоновую активность на всех уровнях. 

По результатам тестирования инструмент ограничивает увеличение времени отклика на 27%, в дефолтной реализации Android еще на 2,319%. Когда шесть фоновых приложений (BG, Background) работают вместе, FastTrack может сократить время отклика приложения FG на 94% по сравнению с Android. Авторы изменили реализацию кэша страниц, планировщик ввода-вывода внутри хранилища. FastTrack улучшает взаимодействие пользователя со смартфонами, предотвращая инверсию приоритетов ввода-вывода.

Читать далее
Рейтинг 0
Просмотры 383
Комментарии 1

Указания по проектированию D-Bus API

Системное программирование *Разработка под Linux *
Перевод
Tutorial

Продолжаем тему D-Bus на Хабре. D-Bus — система межпроцессного взаимодействия (IPC), которая позволяет приложениям в операционной системе сообщаться друг с другом. При этом приложения могут находиться на разных компьютерах.

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

Читать далее
Рейтинг 0
Просмотры 1.1K
Комментарии 0

Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux

Системное программирование *Nginx *Серверное администрирование *C *Разработка под Linux *

Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.

В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом. 

Насколько я понимаю, эта проблема существует уже более пяти лет и берет начало в версии 1.11.3 (Jul 2016), когда в Nginx по умолчанию отключили accept_mutex, а вместо него стали полагаться на флаг EPOLLEXCLUSIVE, появившийся в ядре Linux 4.5.

Стоит заметить, что проблема балансировки входящих соединений при использовании механизма epoll и флага EPOLLEXCLUSIVE более глобальна и касается не только Nginx, а любых сетевых приложений, работающих по аналогичной схеме.

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

Читать далее
Всего голосов 31: ↑29 и ↓2 +27
Просмотры 4K
Комментарии 24

Подключаем Slave-устройства с шиной Wishbone к системе на базе LiteX

Системное программирование *FPGA *Компьютерное железо

В предыдущих трёх статьях мы построили ПЛИС систему на базе LiteX, рабочие блоки для которой могут быть написаны не на странном языке, базирующимся на Питоне, а на чистом Верилоге. А благодаря LiteX, база для системы была создана для нас автоматически. Такой подход позволяет резко упростить и ускорить процесс разработки систем.

Пока что наши собственные модули были подключены к  системе через регистры команд и состояний (CSR). Часто этого более, чем достаточно, но иногда всё-таки разрабатываемые блоки должны содержать в себе сложные наборы регистров, а может даже и память. И без прямого подключения к системной шине не обойтись.

Сегодня мы подключим пару собственных Slave-устройств к системной шине Wishbone, которая будет создана средой LiteX. Устройства, разумеется, будут описаны на Верилоге. Приступаем!

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 874
Комментарии 8

Роботизированная операционная модель Blue Prism: поговорим о практике внедрения RPA

Блог компании Gals Software Системное администрирование *Системное программирование *Софт Искусственный интеллект


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

Технологии — хорошо, но умение ими пользоваться ещё лучше. ROM про максимально эффективное использование технологий роботизации. Это опыт множества внедрений для снижения time-to-market и получения результатов в течении нескольких недель.

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

Далее вы узнаете о лайфхаках на старте роботизации и о 7 основах роботизированной операционной модели для эффективного внедрения той самой роботизации. Все подробности под катом.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1.2K
Комментарии 2

Rust 1.58.0: захватываемые идентификаторы, пути поиска в Windows, больше #[must_use] в стандартной библиотеке

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.58.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё нет rustup, то можете установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.58.0 на GitHub.


Что стабилизировано в 1.58.0


В Rust 1.58 появились захваченные идентификаторы в форматируемых строках, изменился путь поиска в Windows для Command, в стандартной библиотеке стало больше аннотаций #[must_use], а также были стабилизированы некоторые функции.

Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 5K
Комментарии 42

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