В этой статье мы хотим помочь глубже разобраться, как устроен процесс загрузки Linux, дать советы по реализации сложных сценариев загрузки Linux, а также познакомить с удобным и быстрым генератором initramfs образов - make-initrd.
Пользователь
Clang-Tidy для автоматического рефакторинга кода
Существует много инструментов для анализа кода: они умеют искать ошибки, «узкие места», плохую архитектуру, предлагать оптимизацию. Но много ли среди них инструментов, которые могут не только найти, но и исправить код сами?
Представьте, что у вас есть большой проект на С или С++ (или даже С#), который разрабатывался много лет и многими людьми. В результате разные части проекта выглядят по-разному – нет единого стиля имен переменных, функций, типов данных. То есть в разных частях проекта использовался разный coding style: где-то имена в верхнем регистре, где-то CamelCase, где-то с префиксами, в других местах – без… Некрасиво, в общем.
QCustomPlot + FetchContent
Изыскание на тему безболезненной интеграции библиотеки QCustomPlot в cmake без похода в браузер за исходниками.
Ликбез по передаче параметров по значению в конструкторы и сеттеры (современный C++, примеры)
Потому что пример в той статье полностью корректен, и автор статьи абсолютно прав. Вот этот пример:
// Хорошо.
struct person {
person(std::string first_name, std::string last_name)
: first_name{std::move(first_name)} // верно
, last_name{std::move(last_name)} // std::move здесь СУЩЕСТВЕНЕН!
{}
private:
std::string first_name;
std::string last_name;
};
Такой код позволяет покрыть все (ну ладно, почти все) возможные варианты использования класса:
Альфа-бета фильтр Калмана: фильтр «Hello, world!»
В статье описана реализация альфа-бета фильтра Калмана, приведено подробное его описание и программный код -- всё написано для новичков в этой сфере для того, чтобы помочь им начать свой путь и не отпугнуть от дальнейшего изучения методов фильтрации.
Миландр + GCC + VSCode. Пробуем мигать светодиодом на отечественном ARM32 микроконтроллере
Год назад я написал статью об отладке STM32 микроконтроллеров из под VSCode, с компиляцией в GCC и сборкой с помощью CMake. А в декабре мне в руки попали две тестовые единицы отечественных микроконтроллеров К1986ВЕ92FI (MDR1211FI1). Производитель имеет свою библиотеку SPL на C, а также неплохую базу примеров инициализации и применения различной периферии в Keil и IAR; однако я, average C++20+ enjoyer , решил попробовать перенести свой тулчейн на новое железо.
Управляем вентилятором ноутбука через DSDT в Linux и не только
Нет, конечно, я слышал про всякие программы, которые могут вмешиваться в управление охлаждением и вроде кто-то ими успешно пользуется, но лично мне с ними вечно не везло, точнее не везло с железом, на котором я пытался их завести. Например, какое-то время назад я пробовал настроить fancontrol на довольно старом ноутбуке HP nc8430 с Убунтой. В итоге, известный скрипт sensors-detect не смог найти ни одного вентилятора в системе, а без этого fancontrol не работает. На разных форумах периодически появляются люди с похожими проблемами, но никто им толком помочь не может.
Тогда я в очередной раз забросил эту тему и вернулся к ней только на днях, когда читал обзоры, подыскивая себе новый ноутбук, и уже вроде бы выбрал почти всем хороший Sony S15, как опять в одном из обзоров читаю про него, что вентилятор в нем вообще не останавливается никогда, даже когда точно можно. Постоянно шумящий ноутбук я больше не хочу, а выбирать как всегда особо не из чего, учитывая, что надо 15", что TN матрицу я тоже больше не хочу, и бюджет ограничен. Ну сами знаете, как оно бывает. Может быть на нем все-таки заведется fancontrol и все будет хорошо, но а если нет? Никаких отчетов по его установке на этот ноутбук найти не удалось. Это побудило меня еще раз копнуть тему программного управления вентиляторами и пройти довольно непростой, но очень увлекательный квест.
C++20. Coroutines
В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.
Включение гибридной графики в Ubuntu на ноутбуках Nvidia + Intel (OpenGL, Vulkan)
Это простая инструкция как включить гибридную графику intel-nvidia на ноутбуке. Чтобы определенные приложения запускались на дискретном чипе, а другие на встроенном. На свое удивление в интернете не нашел простую инструкцию того, как запускать определенные приложения, используя дискретную графику. Так что напишу так просто, на сколько считаю нужным
Switch для строк в C++11
Для C++03 решения не отличались красотой и лишь усложняли код, дополнительно нагружая приложение в рантайме. Однако с появлением C++11 наконец-то появилась возможность реализовать такой код:
std::string month;
std::string days;
std::cout << "Enter month name: ";
std::cin >> month;
SWITCH (month)
{
CASE("february"):
days = "28 or 29";
break;
CASE("april"):
CASE("june"):
CASE("september"):
CASE("november"):
days = "30";
break;
CASE("january"):
CASE("march"):
CASE("may"):
CASE("july"):
CASE("august"):
CASE("october"):
CASE("december"):
days = "31";
break;
DEFAULT:
days = "?";
break;
}
std::cout << month << " has " << days << " days." << std::endl;
Реализация этой конструкции весьма проста. Она основана на constexpr-функциях из C++11, благодаря чему почти все вычисления производятся ещё на этапе компиляции. Если кого-то интересуют её детали, добро пожаловать под кат — благо на Хабре о «switch для строк» почему-то ничего не сказано.
Индикатор добротности. Тестер катушек индуктивности
Данный самодельный прибор может оказаться весьма полезным в радиолюбительской мастерской в некоторых случаях. Прибор позволяет оценить добротность (наличие потерь) конденсаторов и индуктивностей – дросселей и трансформаторов, и, в частности, выявлять наличие короткозамкнутых витков в них.
Атрибут cleanup
Атрибут cleanup предназначен для запуска функции, когда переменная выходит из области видимости. Этот атрибут может быть применён только к auto-переменным, и не может быть использован с параметрами или с static-переменными. Функция должна принимать один параметр, указатель на тип, совместимый с переменной. Возвращаемое значение функции, если оно есть, игнорируется.
Если включена опция -fexceptions, то функция cleanup_function запускается при раскрутке стека, во время обработки исключения. Отметим, что атрибут cleanup не перехватывает исключения, он только выполняет действие. Если функция cleanup_function не выполняяет возврат нормальным образом, поведение не определено.
Атрибут cleanup поддерживается компиляторами gcc и clang.
В этой статье я приведу описание различных вариантов практического использования атрибута cleanup и рассмотрю внутреннее устройство библиотеки, которая использует cleanup для реализации аналогов std::unique_ptr и std::shared_ptr на языке C.
Как разработать плату, пригодную для массового производства? Подход Design for Manufacturing
Качество печатной платы зависит не только от оборудования, уровня технологов и процессов на фабрике. Не меньший вклад в него вносят конструкторские решения разработчика платы — тополога. От них зависит технологичность: то, насколько просто будет произвести и ремонтировать изделие. Наиболее технологичной плата получится, если тополог сразу учтёт технологические нормы и особенности производства, внеся их в параметры своего CAD‑проекта. Такой подход называется Design for Manufacturing (DFM) — дизайн, оптимизированный под производство. Давайте разбираться, что это такое.
Этот материал адресован в первую очередь топологам, технологам и всем, кто уже работает в RnD и на производствах — или готовится войти в индустрию. Но мы постарались сделать его доступным для всех читателей.
Установка Shadowsocks с обходом блокировок на Keenetic
Не претендую на открытие Америки в этой публикации, т.к. она является компиляцией различных комментариев и статей, в т.ч. на Habr. Не судите строго, надеюсь на помощь в развитии этого направления. Делал эту инструкцию для себя и специально с нуля, чтобы каждый новичок смог повторить те же действия.
Пчела на работе, разработка игр на SFML C++
Делаем ли мы игру или мультимедийное приложение, важно правильно и эффективно
управлять её ресурсами. Мы должны быть уверены, что игровые ресурсы не будут случайно уничтожены, или повторно загружены, тем самым перегружая память и работоспособность программы.
C++ enum <-> string? Легко
USB монитор из Futaba GP1160A02A
В конце 60-ч годов вакуумно-люминесцентные индикаторы создавались как альтернатива газоразрядным, а также в целях загрузить производство электроламповых заводов, так как в те времена лампы уже начали терять актуальность и на их место пришли полупроводники.
Прожив долгую 60-летнюю историю, ВЛИ уходят в небытие — оставшиеся в живых производители уже сообщили о том, что жизненный цикл этих приборов окончен и пора переходить на новые технологии.
Но ни один современный дисплей не способен передать это завораживающее бирюзовое сияние возбужденного люминофора, находящегося под воздействием электронной бомбардировки.
Про один из таких дисплеев, изготовленный по этой технологии и будет рассказано в этой статье, а именно про дисплейный модуль Futaba GP1160A02A.
Эта статья не будет про подключение этого дисплея к какой-нибудь “ардуине” стандартными способами. Это слишком просто и скучно. Речь пойдёт про обход ограничений, наложенных производителем, и попытки выжать из этого дисплея всё, что позволяет технология.
Инициализация в современном C++
Общеизвестно, что семантика инициализации — одна из наиболее сложных частей C++. Существует множество видов инициализации, описываемых разным синтаксисом, и все они взаимодействуют сложным и вызывающим вопросы способом. C++11 принес концепцию «универсальной инициализации». К сожалению, она привнесла еще более сложные правила, и в свою очередь, их перекрыли в C++14, C++17 и снова поменяют в C++20.
Под катом — видео и перевод доклада Тимура Домлера (Timur Doumler) с конференции C++ Russia. Тимур вначале подводит исторические итоги эволюции инициализации в С++, дает системный обзор текущего варианта правила инициализации, типичных проблем и сюрпризов, объясняет, как использовать все эти правила эффективно, и, наконец, рассказывает о свежих предложениях в стандарт, которые могут сделать семантику инициализации C++20 немного более удобной. Далее повествование — от его лица.
Спектрометр из смартфона, картона и осколка DVD-диска: смотрим на спектры лампочек, фонариков, солнца
Всем привет! Продолжаем придумывать, как можно использовать устаревший смартфон в новом качестве. Эта статья подготовлена по материалам второго сезона видеокурса “Galaxy Upcycling - новая жизнь старого смартфона”. В уроках первого сезона мы уже сделали 3D-голограмму, проектор (и написали об этом статью на Хабр), микроскоп, часы, гирлянду, а сегодня делаем еще один исследовательский прибор.
Наша новая тема - любительский спектрометр из смартфона. Это отличный наглядный эксперимент по физике, который может быть интересен как учителям, так и школьникам. Вы могли читать в учебнике, что такое длина волны, а теперь мы “пощупаем” длину волны самостоятельно.
Охота на бройлеров. Как работают китайские телефонные хакеры
Несколько лет назад, когда я ещё работал в антивирусной компании, я купил недорогой смартфон на Android для пожилой родственницы. Телефон позиционировался, как отечественный продукт, но по факту был, разумеется, китайским аппаратом, выпущенным под российским брендом. Удаляя идущие с завода ненужные приложения и добавляя отсутствующие, я решил заодно установить и антивирус — мало ли, на какую ссылку нажмёт малограмотная в айтишных делах пользовательница? Каково же было моё удивление, когда на совершенно новом аппарате с ходу обнаружился троян, способный загружать и устанавливать без ведома юзера любые приложения. Попытка вылечить телефон не увенчалась успехом, не помог и сброс до заводских настроек — троян сидел в прошивке, к которой антивирусное ПО не имеет доступа, если аппарат, конечно, не рутован. Изучение вопроса показало, что китайские смартфоны с «сюрпризами» присутствуют на отечественном рынке в широчайшем ассортименте. Более того, в Китае существует целая индустрия по производству, распространению и эксплуатации мобильных вредоносных программ, прошитых в firmware, и за минувшие годы в этой сфере почти ничего не изменилось. А причём тут охота на бройлеров, спросите вы? Сейчас расскажу.
Information
- Rating
- 5,065-th
- Location
- Зеленоград, Москва и Московская обл., Россия
- Registered
- Activity