Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.
Инженегр АСУТП
Как в Android запрещали фоновую работу и улучшали расход батареи

Когда-то работа в фоне была простой. Теперь в Android есть множество ограничений: работа в фоне, доступ к файловой системе, разрешения на которые надо получить одобрение модераторов Google Play и другие. Со всеми ними разработчикам приходится работать. Недавно я выступил с докладом на эту тему на конференции DUMP, а теперь написал текст на его основе для Хабра. Давайте вспомним, с чего все начиналось и как менялись требования с каждой новой версией Android.
Все мои Ардуинки: часть третья, ESP8266 и ESP32

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

Этот пост станет итерацией туториала и знакомством с реализацией сборки мусора, описанной в классической статье. Мы продолжим работать с простыми сборщиками мусора, но на этот раз немного повысим сложность.
Я подумал, что это будет здорово, ведь в коде из статьи уже имелся крошечный, но функциональный мутатор, а набор тестов был призван это подчеркнуть; это значит, что мы можем сравнивать производительность и реализацию копирующего сборщика и обычного сборщика.
Что нового в .NET 9?

.NET 9 вышел в релиз, и значит, можно начинать переносить свои проекты на новую версию. В этой статье мы рассмотрим новые улучшения и фишки .NET: C# 13, производительность, BuildCheck, GC, LINQ, NuGet Audit и прочее.
Автоматизация ИТП: контроллер WIRENBOARD PRO + язык FBD

В 1995 году в историческом офисном здании в центре Москвы провели реконструкцию. Полностью заменили оборудование ИТП, использовали Siemens и Danfoss. Автоматизацию собрали на контроллере Honeywell.
Оборудование за последние годы постепенно выходило из строя. Вместо Honeywell решили установить контроллер WIRENBOARD PRO, тем более для него разработали графический язык FBD, очень похожий на Arena AX.
В статье расскажем о решении, в качестве бонуса вы увидите древний контроллер Honeywell из 90-х.
«Голая Java» или разработка без всего

Рассказываю что можно сделать на одном только голом JDK. Это старое и ныне почти забытое искусство разработки без внешних библиотек и фреймворков. Работать будем «как в былинные времена» — киркой и лопатой голыми руками и немного мозгом.
Flappy Bird на Си для Android весом APK всего 92 Килобайта

Это невозможно! И вы будете правы, только ошибка в том, что это — реальность.
Или как сказал один человек «Это компьютерная наука. Ограничений нет. Я могу делать все, что захочу. Это всего лишь биты информации.»
Почему я предпочитаю исключения, а не значения ошибок

Качественная обработка ошибок — это ключ к созданию надёжных программ; но программистов она часто пугает, ведь всегда найдётся ещё один пограничный случай.
В традиционных объектно-ориентированных языках программирования используются специальные классы исключений, которые можно выбрасывать, чтобы прекратить обычный поток управления и немедленно сообщить об ошибке.
Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:
int safeDiv(int a, int b) {
if (b == 0)
throw Div0(); // Исключения передаются особым образом
return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}
Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа
(res, err)
, а Rust возвращает Result<T, E>
— тип-сумму результата и ошибки.Числа и байты: как работает память в Linux?

❯ Часть первая: физическая память
При создании операционных систем всегда уделяется внимание работе с памятью. Память — это компонент компьютера, где хранятся программы и данные, и без нее современные компьютеры не могли бы функционировать. Важной единицей хранения данных в памяти является бит, который может принимать два значения: 0 или 1. Память состоит из ячеек, каждая из которых имеет свой адрес. Ячейки могут содержать различное количество битов, и количество адресуемых ячеек зависит от количества бит в адресе.
Также память включает в себя оперативное запоминающее устройство (ОЗУ) или RAM, где можно записывать и считывать информацию. Существует статическая ОЗУ (SRAM) и динамическая ОЗУ (DRAM), различающиеся в том, как хранится информация. В SRAM информация сохраняется до выключения питания, в то время как в DRAM используются транзисторы и конденсаторы, что позволяет хранить данные, но требует их периодического обновления. Разные типы ОЗУ имеют свои преимущества и недостатки, и выбор зависит от конкретных потребностей.
Понимание работы с памятью в компьютере важно для всех, кто работает с техникой и программным обеспечением. Важно знать, как устроена память, какие ее типы существуют и как эти типы могут влиять на производительность и функционирование компьютера.
Но что такое физическая память, как она работает в Linux? Что такое сегментация, утечки памяти и некие «страницы»?
Все, что вы хотели знать, но боялись спросить о памяти пингвина — читайте здесь и сейчас!
Память как у пингвина: Работа памяти в Linux

Что такое память и какие они бывают в Linux? Как с ней взаимодействовать? Каковы её особенности?
Как реализована память в ядре Linux? Как с ней работать?
Что такое кластеры, откуда в ядре Linux грязные и чистые страницы - читайте в этой статье!
Открытые стандарты и архитектуры или самоделки?

Специфика моей деятельности связана с имитационным моделированием технологических объектов и процессов (как сейчас модно говорить - цифровые двойники, оптимизация, тренажеры для обучения персонала). И конечно в этом деле постоянно сталкиваюсь с задачей сетевого обмена информацией и синхронизацией данных, как при реализации многопользовательского режима так и при организации сетевого обмена между отдельными моделями. И вот наблюдаю интересную картину — некоторые производители цифровых двойников и тренажеров используют стандарты для этого всего (например OPC UA, IEEE 1516, DDS (Data Distribution Service), MQTT, CAPE‑OPEN, xAPI), а некоторые — делают самоделки, причем закрытые. Особенно меня удивляют товарищи, создающие эти самые самоделки, ни с чем не совместимые и абсолютно закрытые, только для того, чтобы потом с этими самоделками являться «единственным поставщиком» скажем так, требуя при этом совместимости со своими велосипедами, да еще и являются организациями, которые сами же и проверяют совместимость стороннего ПО со своими‑же велосипедами. Жуть, в общем.
KC868-AM: мини мы или ESP32 IO Expansion Board

Когда я впервые увидел KC868-AM, то долго думал как можно его охарактеризовать — и тут меня осенило: это не что иное, как контроллер Kincony в его минималистическом воплощении, ужатый до размеров 9x7 см. Тут присутствуют все основные элементы «больших» контроллеров Kincony (Wi-Fi, Ethernet, RS485, USB-UART и т. д.), размещённые на плате минимального размера, плюс свободные GPIO и возможность крепления на DIN-рейку.
Кроме типовых элементов, на плате KC868-AM присутствует и что-то новенькое — в этом контроллере компания Kincony впервые на моей памяти использует не готовый модуль ESP32, а самостоятельно развела на плате и сам чип и всю радиочастотную часть. Для чего она это сделала не совсем понятно, моё предположение — чтобы потренироваться и попробовать свои силы в конструировании подобных устройств.
Но обо всем по порядку…
Чем заменить Raspberry PI в промышленности?

Если коротко, то речь пойдет о промышленном ПК на основе Raspberry CM4 – это абсолютный аналог Raspberry Pi4 в промышленном исполнении с надёжной eMMC от Samsung и полной программно-аппаратной совместимостью.
Одну статью мы закончили фразой: «Надеемся, что мы вдохновим читателей на переработку Ваших личных проектов в более масштабное производство с коммерческими перспективами.»
В этой статье мы расскажем о продолжении этой истории и что мы имеем на сегодняшний день.
Пишем printf на языке ассемблера FASM

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

Я, как любой другой любитель «поковыряться» в различных железках, связанных с датчиками, микроконтроллерами и сопутствующих штуках, несколько лет назад столкнулся с необходимостью связать очередную микроконтроллерную историю с ПК, а именно, мне нужно было выводить в реальном времени значения различных сигналов с микроконтроллера на дисплей компьютера в виде различных графиков, прогресс‑баров, а также, с помощью кнопок и ползунков управлять моим «железом».
Имея достаточный опыт работы с промышленными SCADA‑системами было принято написать свою! Да такую, чтобы с ней справился совсем уж начинающий программист.
Рад поделиться своими наработками и буду вдвойне рад если это пригодится еще кому‑то еще кроме меня!
Как выбрать программируемый логический контроллер для задач автоматизации производства

Российские промышленные предприятия и компании, которые занимаются разработкой решений АСУ ТП, столкнулись с необходимостью поиска альтернативы программируемым логическим контроллерам (ПЛК) европейских, американских и японских производителей. В этой статье мы предлагаем вашему вниманию сравнительный обзор технических характеристик программируемых контроллеров Consyst Electronics.
Производительность таблиц в WPF и Avalonia

Предыстория: как-то возникла у меня необходимость в приложении на WPF сделать таблицу с количеством столбцов в несколько десятков, притом с шаблонизированным содержимым. По задумке пользователь должен иметь возможность выбрать столбцы, которые нужны, но по умолчанию должны быть видны все. Решение не то чтобы сложное, но после сборки и запуска оно начало жутко тормозило... Проведённое по-быстрому исследование показало, что тупит этап layout-а, но в моменте было принято решение вбить костыль и преобразовать представление до удобоваримого. Однако червячок остался и поисследовать поведение хотелось более детально, а заодно сравнить с другими элементами для отрисовки таблиц.
Результатом такого исследования и стала данная статья. Полученные результаты - под катом.
Исправляем мнемосхему диспетчеризации за 2 часа

Вдохновившись статьёй моего друга про печальность интерфейсов в промышленном секторе (АРМ), я решил сделать свою версию того же самого, но с немного другим уклоном.
В том посте были комментарии из серии «всё везде регламентировано, раз так сделано — значит умные люди подумали», но если в условном Газпроме за АРМ наблюдает инженер или техник, который отличает на схеме трехходовой клапан от обратного, то в гражданских системах часто за этим следят те же диспетчера, что следят за пожаркой, диспетчеризацией лифтов и прочих систем, диспетчера часто меняются, новые могут не знать чего то, а для того же ТЦ быстрота фиксации и ликвидации аварии могут спасти много денег.
Этим я хотел показать, что удобно и красиво вовсе не значит анимации на каждый переход + тени и градиенты. Ну Хабр тому доказательство, как бы.
Графическое программирование конечных автоматов для Arduino. Часть 1

Как только сложность программы выходит за пределы "Hello Word!", у начинающих ардуинщиков появляются проблемы. Самая тяжелая из них - удержать в голове структуру программного кода. Нельзя сказать, что у опытных программистов встраиваемых систем этой проблемы нет. Достаточно попытаться реанимировать собственный проект двухлетней давности, если он недостаточно документирован, то включиться в работу будет очень трудно.
Решение существует - представление в графическом виде. При этом программа разбивается на секции кода, которые имеют одну точку входа и одну точку выхода. Эти секции образуют состояния или иначе вершины, по терминологии теории графов. Вершины соединяются между собой условными переходами, так же содержащими программный код. Получается наглядно и очень надежно.
Все это хорошо, но новичку просто лениво. Зачем что-то рисовать, если того же результата можно добиться несколькими строчками кода? Ответ: макрокоманды. Такие, например, как WAIT(Time,Counter)
, она позволяет с легкостью организовать временную задержку. И это будет вовсе не Delay(Time)
от Arduino, которая остановит выполнение всего остального пользовательского кода. Нет. По предоставляемым возможностям ближайшей аналогией будет RTOS - операционная система реального времени. Если один автомат замер в ожидании отсчета времени, то остальные автоматы проекта будут продолжать работать.
Рассмотрим практическое использование графических конечных автоматов под Arduino на примере часов-метеостанции.
Information
- Rating
- Does not participate
- Location
- Россия
- Registered
- Activity