Pull to refresh
11
0

Developer

Send message

Работа с СОМ-портом на Си в linux

Reading time18 min
Views65K
Телетайп, на который БЭВМ могли выводить и получать данные. Фото взято здесь.

Каждый, кто постоянно занимается электроникой и программирует встраиваемые устройства, неизбежно сталкивается с необходимостью работы с СОМ-портом под линуксом. Недаром, моя статья "UART и с чем его едят" спустя 11 лет после выпуска набирает просмотры и комментарии.

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

Поэтому умение работать с СОМ-портами в linux особенно важно. И вот, казалось бы, UART, древнейший интерфейс, всё должно быть известно и понятно, и даже опытные программисты ломают зубы, работая с ним в линуксе. Особенный цирк с конями начинается при работе с передачей сырых данных по RS-485. Не знаю ни одного программиста, который бы не хватил горя при разработке ПО для таких решений. Самое забавное, что с более новомодным i2c работать в линуксе куда проще и понятнее, чем с ортодоксальным UART. Чтобы не было путаницы дальше, всё семейство UART (RS-232, RS-485, UART 5V, UART 3,3 и т.д.) по тексту я буду называть COM-порт или UART. Мы говорим в статье не о физическом интерфейсе, а о программной стороне вопроса.

В этой статье я хочу показать, как писать свои программы, работающие с UART в ОС Linux. И неважно на каком языке вы пишете программу для работы с UART (python, c, c++, bash, php, perl и т.д.), принцип работы и грабли будут одни и те же, так как всё равно всё упирается в системные вызовы к ядру. А непонимание того, что там происходит и приводит к различным трудноуловимым багам.
Читать дальше →
Total votes 75: ↑72 and ↓3+69
Comments24

О влиянии full-page writes

Reading time6 min
Views8K
Настраивая postgresql.conf, Вы могли заметить, что там есть параметр full_page_writes. Имеющийся рядом с ним комментарий гласит что-то о частичной записи страниц и люди, как правило, оставляют его в состоянии on — что не плохо, это я и объясню далее в данной статье. Тем не менее, очень полезно понимать что full_page_writes делает, так как влияние на работы системы может быть значительным.

В отличие от моего прошлого поста про настройку чекпоинтов, этот не является пособием о том, как надо настраивать сервер. Здесь не так много всего того, что Вы могли бы настроить, на самом деле, но я покажу Вам как некоторые решения на уровне приложения (к примеру, выбор типов данных) могут взаимодействовать с записью полных страниц.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments3

Сканирование кода C++ с помощью GitHub Actions

Reading time2 min
Views3K

В прошлом году GitHub выпустил фичу сканирования кода, которая позволяет разработчикам добавлять проверки безопасности в свою среду CI/CD и в целом в рабочую среду. В этом посте демонстрируются основы использования CodeQL, механизма анализа, лежащего в основе сканирования кода, в связке с GitHub Actions.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments1

Отработка периодических событий в QNX и RT Linux

Reading time13 min
Views6.8K

Пришло время использовать RT Linux.

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments7

Анатомия юнит-теста

Reading time11 min
Views20K

Эта статья является конспектом книги «Принципы юнит-тестирования». Материал статьи посвящен структуре юнит-теста.

В этой статье рассмотрим структуру типичного юнит-теста, которая обычно описывается паттерном AAA (arrange, act, assert — подготовка, действие и проверка). Затронем именование юнит-тестов. Автор книги описал распространенные советы по именованию и показал, почему он несогласен с ними и привел альтернативы.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments2

Самые полезные новинки C++ 20

Reading time6 min
Views13K


В сентябре прошлого года профильный комитет ISO утвердил С++ 20 в качестве текущей версии международного стандарта. Предлагаю ознакомиться с самыми полезными и долгожданными изменениями нового стандарта.

Библиотека концепций C++


Библиотека определяет фундаментальные понятия, которые могут быть использованы для диспетчеризации функций и проверки аргументов шаблона во время компиляции, на основе свойств типов. Концепции нужны для того, чтобы можно было избежать логических противоречий между свойствами типов данных внутри шаблона и таковыми входных параметров. Концепция должна определяться в пределах пространства имен и имеет следующий вид.
Читать дальше →
Total votes 46: ↑31 and ↓15+16
Comments2

Шаблоны и концепты в С++20

Reading time2 min
Views4.7K

Привет, Хабр!

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

Важное уточнение: эта лекция — не попытка объять необъятное, а краткий экскурс по полезным возможностям C++ для членов олимпиадного сообщества: от извлечения кода в класс до внутренних механизмов работы лямбда-функций и щепотки ограничений (constraints) из C++20. Если интересно, приглашаем к просмотру.

Смотреть
Total votes 21: ↑11 and ↓10+1
Comments3

Linux Unified Key Setup: как защитить флэшки и внешние диски от взлома

Reading time5 min
Views16K


Посмотрим, как с помощью системы на базе спецификации Linux Unified Key Setup (LUKS) и утилиты Cryptsetup можно зашифровать флэш-накопители, внешние жёсткие диски и прочие переносные устройства, хранящие дорогую вашему сердцу информацию.

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

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

Особенно хорошо это понимают специалисты, которые сталкивались с последствиями такой недальновидности и сделали соответствующие выводы.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments20

10 Kubernetes Security Context, которые необходимо понимать

Reading time11 min
Views25K

Безопасно запускать рабочие нагрузки в Kubernetes может быть не простой задачей. Множество различных параметров могут повлиять на безопасность, что требует соответствующих знаний для правильной реализации. Одним из самых мощных инструментов, которые предоставляет Kubernetes в этой области, являются настройки securityContext, которые могут использоваться в каждом манифесте Pod и контейнера. В этой статье мы рассмотрим различные настройки контекста безопасности, выясним, что они означают и как их следует использовать.

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments0

Ленивые итераторы и диапазоны в C++

Reading time5 min
Views9.1K

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


Однако есть и классическая, более распространённая техника для борьбы с циклами — использование итераторов и диапазонов для ленивых операций над последовательностями. Всё это уже сто лет есть в Бусте и других сторонних библиотеках (к примеру, range-v3) и постепенно просачивается в стандартную библиотеку.


Хотя, в некотором смысле, и в стандартной библиотеке ленивые итераторы уже есть давно (см. std::reverse_iterator).

Данная публикация — это краткий ликбез о том, что такое ленивые итераторы и диапазоны, зачем они нужны и как ими пользоваться.

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

journald вместо syslog

Reading time7 min
Views27K

Использование journald как замена syslog'у для приложений с большим числом логов.Давным-давно, когда были дебаты о том, стоит ли принимать в качестве init-системы systemd (с одной стороны удобно, с другой стороны, довольно токсичный автор...), вместе с systemd приехал и journald. В целом, он ощущался как аппендикс к systemd, и вместе с ForwardToSyslog, он мирно жил на серверах. Дефолтная конфигурация в целом устраивала, а всё нужное можно было по-старинке накрутить в syslog'е.

В одном из проектов у нас образовалась потребность в обработке большого числа логов, и мы решили попробовать journald вместо (r)syslog(d|-ng). Оказалось, что:

journald решает все наши проблемы

документации по нему подозрительно мало (особенно, в сравнении с systemd)

при том, что его поведение более-менее разумно, интуиция о том, как он работает, практически отсутствует и её надо набирать.

Read more
Total votes 54: ↑52 and ↓2+50
Comments45

Итак, вы хотите оптимизировать gRPC. Часть 1

Reading time10 min
Views4.5K

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

Рассмотрим простой сервис "ключ-значение", который используется несколькими клиентами. Сервис должен корректно работать при параллельных операциях изменения данных. Также должна быть возможность масштабирования. И, в конце концов, он должен быть быстрым. Для реализации подобного сервиса gRPC будет идеальным вариантом. Давайте посмотрим, как его реализовать.

Я написал пример клиента и сервера на Java. В примере три основных класса и protobuf-файл, описывающий API:

Читать далее
Total votes 13: ↑10 and ↓3+7
Comments2

Спецификация D-Bus. Часть 2, заключительная

Reading time1 min
Views2K

Уважаемые хабравчане, предлагаю вашему вниманию перевод оставшихся глав спецификации D-Bus. Полный pdf-документ можно скачать по адресу.

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

Спасибо за внимание.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments0

Кластер PostgreSQL внутри Kubernetes: что нужно знать для успешного внедрения

Reading time8 min
Views21K
Хабр, привет!

В этой статье расскажу про PostgreSQL и его работу внутри кластера Kubernetes. Небольшое превью, о чем поговорим: как появился PostgreSQL, какие у него есть High Availability обвязки, как обеспечивается отказоустойчивость внутри Kubernetes и какие существуют Kubernetes-операторы.



Будут схемы-примеры для наглядности и обзор возможных кейсов, начнем!
Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments17

Настройка отказоустойчивого кластера Kubernetes на серверах с публичной и приватной сетью с помощью Kubeadm

Reading time27 min
Views21K

У меня возникла задача настроить отказоустойчивый Bare Metal кластер для комплексного приложения, в связи с чем и возникла данная статья. Сразу хочу сказать, что не являюсь экспертом в K8S, однако имею опыт развертывания продуктовых кластеров DC/OS (экосистемы, основанной на Apache Mesos).

Долгое время K8S меня отпугивал тем, что, при попытке его изучения, тебя закидывают кучей концепций и терминов, отчего мозг взрывается.

Читать далее
Total votes 13: ↑12 and ↓1+11
Comments9

Работа с файлами в C++ с использованием Boost

Reading time9 min
Views35K
Привет! Я время от времени рассказываю на Хабре о решениях распространённых задач на C++ и вообще люблю делиться опытом. Поэтому даже написал целую книгу, которая называется «Разработка приложений на С++ с использованием Boost». Она может быть интересна разработчикам, которые уже немного знакомы со стандартной библиотекой языка, хотят глубже изучить Boost, упростить и повысить качество разработки приложений. Уверен, что информация, которую я собрал в книге, будет полезна — всё больше библиотек Boost становятся частью стандарта. Сегодня предлагаю прочитать главу, посвящённую работе с файлами. В ней я рассказываю о перечислении файлов в каталоге, стирании и создании файлов и каталогов, а также о самом быстром способе чтения. Надеюсь, будет интересно. И, пожалуйста, не забывайте делиться впечатлениями в комментариях.

UPD: добавил в конец поста бонус для читателей Хабра.
Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments25

Реализация epoll, часть 2

Reading time7 min
Views4.7K
Публикуя перевод первой статьи из цикла материалов о реализации epoll, мы провели опрос, посвящённый целесообразности перевода продолжения цикла. Более 90% участников опроса высказались за перевод остальных статей. Поэтому сегодня мы публикуем перевод второго материала из этого цикла.


Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments4

Как не проспать проблемы в базах данных Postgres. Николай Самохвалов (Postgres.ai)

Reading time21 min
Views7K


Чтобы поддерживать базы данных в здоровом состоянии, необходимо периодически заглядывать «под капот», «прощупывать» её на наличие ранних симптомов — другими словами, делать профилактическое исследование, оно же технический аудит БД, оно же healthcheck.

Total votes 16: ↑15 and ↓1+14
Comments4

Plan 9-кластер на Raspberry Pi

Reading time5 min
Views17K
Операционная система Plan 9, созданная в Bell Labs, является, как и Linux, потомком UNIX. На сертифицированной UNIX, например, основана и macOS. ОС Plan 9, как и UNIX, была создана в виде экспериментальной операционной системы, предназначенной для испытания новых концепций. В Plan 9 реализованы ключевые принципы UNIX, но здесь идея, в соответствии с которой «всё является файлом», выведена на новый уровень.


Кролик Гленда, символ Plan 9

В первой части этого материала мы поговорим об ОС Plan 9, рассмотрим её заметные особенности. Вторая его часть посвящена рассказу о создании самодостаточного Raspberry Pi-кластера, состоящего из 4 узлов. Он представляет собой компактную платформу для экспериментов с Plan 9.
Читать дальше →
Total votes 47: ↑42 and ↓5+37
Comments6

Факторизация и эллиптическая кривая. Часть III

Reading time21 min
Views7.4K



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

Если пройтись по Интернету и по статьям об ЭК на Хабре, то после этого возникает мысль, что существует определенный пробел всех без исключения публикаций, включая и объемные бумажные книги. Авторы почему-то считают само-собой разумеющимся понимание природы ЭК и ее аддитивной группы, ее появление. На самом деле ЭК и ее группа (мое мнение) — это чудо!

Группа точек плоскости, множество которых замкнуто по операции сложения, оказалась каким-то образом встроена в ЭК и мы об этом до сего дня не знали бы, не располагая теорией групп, и даже при наличии теории групп, без гения Эйлера и Пуанкаре, которые нам эту группу открыли. В свое время Иоганн Кеплер открыл человеку законы движения Планет и качественно описал их траектории, но только гений Ньютона смог объяснить природу этих законов.

Правда для этого ему пришлось открыть свои законы движения/тяготения и изобрести дифференциальное и интегральное исчисления. Задача взятие двукратного интеграла от второго закона Ньютона, в котором ускорение — вторая производная пути, решением имеет плоскую кривую второго (не третьего, не путать эллипсы — траектории планет, спутников и эллиптические кривые в криптологии) порядка, что до И. Ньютона было открыто И.Кеплером.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments0
1
23 ...

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity