Как стать автором
Обновить
27
Cherniaev Andrei @DungeonLordsread⁠-⁠only

Пользователь

Отправить сообщение

Автоматическая установка приложений из GitHub-релизов

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.3K

По мере распространения Go и Rust появляется всё больше программ, которые состоят из одного бинарника без каких-либо нестандартных зависимостей, и которые мы устанавливаем руками, скачивая релиз с GitHub: либо потому, что данного приложения ещё нет в вашем дистрибутиве, либо потому, что просто хочется всегда иметь актуальную версию, а не ждать, когда её затянут в дистрибутив.

Ставить (а особенно обновлять) такие приложения руками – занятие неблагодарное, особенно когда их количество становится больше одного-двух – и хочется какой-то автоматизации. У меня таких программ около десятка, и довольно долгое время я пользовался различными наколеночными скриптами вроде этого для поддержания их актуальности. Но bash-скрипт – это всё-таки как-то несерьёзно, и поэтому всегда хотелось чего-то более управляемого в виде нормального приложения. Найти что-то готовое, что удовлетворяло бы всем моим потребностям, мне сходу не удалось – поэтому некоторое время назад решил пойти моим излюбленным путём и написать своё приложение под эту конкретную задачу.

Читать далее
Всего голосов 7: ↑7 и ↓0+14
Комментарии14

Задача трёх тел (не китайская нефантастика)

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров42K

Однажды, выполнив в Гугле запрос "Three body problem" ("Задача трёх тел"), я был просто поражен - первая страница результатов состояла только из ссылок на роман китайского писателя-фантаста Лю Цысиня с соответствующим названием, а также на телесериал, снятый по этому роману, т.е. ссылок на собственно задачу трёх тел не было вообще! Мне это показалось удивительным и несправедливым, поскольку сама по себе задача трёх тел тоже может выглядеть увлекательной в популярном изложении. В этой публикации я постарался привести некоторые доказательства этого утверждения.

Читать далее
Всего голосов 184: ↑182 и ↓2+234
Комментарии150

Работаем с модулями ядра в Linux

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

Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны. Этот механизм чем-то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически незаметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен.
В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями. Об этом и пойдет речь в этой статье.
Читать дальше →
Всего голосов 120: ↑113 и ↓7+106
Комментарии50

ОПТИЧЕСКИЕ ПРОЦЕССОРЫ

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.2K

Все мы понимаем, что рано или поздно кремниевая технология, используемая сегодня для создания процессоров, достигнет своего предела. Это как с нефтью – рано или поздно она закончится – вот поэтому уже сейчас начинают разрабатывать альтернативные энергетические технологии! Точно такая же ситуация сложилась и в мире информационных технологий – кремниевой технике начинают искать замену. Бегущие по проводникам, как танки, электроны довольно непрактичны – как минимум теряется значительная часть их энергии, выделяясь в виде тепла и электромагнитного излучения, хотя это не единственный минус. Причем на рассмотрение предлагаются абсолютно разные варианты замены – от биокомпьютера до оптических процессоров. Стоп! А что это такое? Вряд ли у каждого из нас на столе, скажем, через десять лет будет стоять компьютер из бактерий, а вот то, что в компьютере будущего будет установлен оптический процессор – вполне реально. Сегодня мы поговорим об этом чуде рук человеческих.

Рассмотрим преимущества оптической технологии:

· Можно параллельно передавать двумерные массивы за один световой импульс.

· Возможность использования совершенно разных сред передачи, хранения и обработки информации.

· Обработка информации возможна во время ее передачи через оптическую систему, которая представляет собой вычислительную среду. Представляете, вы отправили картинку для ее обработки – она будет обработана почти мгновенно, потому что она обрабатывается по мере ее прохождения через оптическую систему.

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

Читать далее
Всего голосов 10: ↑7 и ↓3+7
Комментарии45

C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M

Уровень сложностиСредний
Время на прочтение43 мин
Количество просмотров13K

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

Статья предполагает, что читатель имеет базовые знания программирования bare-metal систем и языка С++, в том числе и современных стандартов. Это означает, что совсем базовые пояснения выходят за рамки этой статьи.

Читать далее
Всего голосов 65: ↑64 и ↓1+75
Комментарии29

Дневник альтруиста. dfu-util

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров1.5K

В данной статье я рассмотрю подключение утилиты dfu‑util, написанную на языке С, к С++ проекту на CMake в виде сабмодуля.

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

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

* Превью сгенерировано с помощью Adobe Firefly

Читать дальше ->
Всего голосов 6: ↑5 и ↓1+6
Комментарии7

Type Loopholes: решая нерешаемое. Рефлексия времени компиляции

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

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

Эта техника позволяет решать многие задачи, некоторые из которых будут рассмотрены в статье:

Узнать, какие параметры принимает конструктор типа.

Узнать, с какими шаблонными параметрами вызывался метод/функция с ADL.

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

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

Подборка полезностей для программиста под Linux

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

Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.

Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии6

Наследование, композиция, агрегация

Время на прочтение12 мин
Количество просмотров355K
Нередко случается, что решив разобраться с какой-то новой темой, понятием, инструментом программирования, я читаю одну за другой статьи на различных сайтах в интернете. И, если тема сложная, то эти статьи могут не на шаг не приблизить меня к понимаю. И вдруг встречается статья, которая моментально дает озарение и все паззлы складываются воедино. Трудно определить, что отличает такую статью от других. Правильно подобранные слова, оптимальная логика изложения или же просто более релевантный пример. Я не претендую на то, что моя статься окажется новым словом в C# или же лучшей обучающей статьей. Но, возможно для кого-то она станет именно той, которая позволит разобраться, запомнить и начать правильно применять те понятия, о которых пойдет речь.
Читать дальше →
Всего голосов 19: ↑13 и ↓6+7
Комментарии97

Ненавижу, _____, C++ массивы

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров22K

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

Но почему?
Всего голосов 47: ↑45 и ↓2+58
Комментарии171

К вопросу о выпрямителе

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров9K

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

И в чем же я ошибался?
Всего голосов 29: ↑28 и ↓1+37
Комментарии30

Укрощаем суммы с плавающей запятой

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров9.2K

Допустим, у нас есть массив чисел с плавающей запятой, и мы хотим их суммировать. Можно наивно подумать, что их достаточно просто сложить, например, на Rust.

Однако это запросто может привести к произвольно большой накопленной погрешности. Давайте проверим:

naive_sum(&vec![1.0; 1_000_000]) = 1000000.0
naive_sum(&vec![1.0; 10_000_000]) = 10000000.0
naive_sum(&vec![1.0; 100_000_000]) = 16777216.0
naive_sum(&vec![1.0; 1_000_000_000]) = 16777216.0

Ой-ёй… Что произошло? Проблема в том .что следующее 32-битное число с плавающей запятой после 16777216 — это 16777218. Так что при вычислении 16777216 + 1, значение округляется до ближайшего числа с плавающей запятой, имеющей чётную мантиссу, то есть снова до 16777216. Мы зашли в тупик.

К счастью, есть более совершенные способы суммирования массива.

Читать далее
Всего голосов 30: ↑30 и ↓0+37
Комментарии48

Релиз ядра Linux 6.6: возможности, обновления и самые заметные изменения

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


В мире Linux все идет своим чередом, и идет по плану. Спустя два месяца после выхода предыдущего релиза ядра выпущен новый. На днях Линус Торвальдс представил ядро Linux 6.6. Как всегда, в нем достаточно много изменений и исправлений. Всего — 15291 исправлений от 2058 разработчиков. Изменены 14844 файла, добавлено 553359 строк кода, удалено — 284012. Подробности обо всем этом — под катом.
Читать дальше →
Всего голосов 56: ↑56 и ↓0+56
Комментарии0

К вопросу об точности

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.4K

Но есть нюанс ...

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

Читать далее
Всего голосов 12: ↑10 и ↓2+12
Комментарии11

Вы неправильно пишете животных

Время на прочтение5 мин
Количество просмотров373K
Животные – это платформы с очень ограниченной памятью, вычислительными способностями и возможностями модификаций. Разработчикам энимал-сцены приходится выдавать практически гениальные низкоуровневые алгоритмы. Правда, большое количество хардкода вызывает характерные проблемы с отсутствием проверки в экзотических условиях. Та же фильтрация входных данных делается очень и очень криво.


Уязвимость рекурсивных алгоритмов навигации муравья: спираль смерти

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

Но пойдём далее. Я не знаю, кто разрабатывал архитектуру ящериц, но они бегают в одном процессе, а дышат в другом. При этом платформа не поддерживает многозадачность, поэтому костыль с максимальной длиной бега в 4-6 секунд просто эпичен.
Читать дальше →
Всего голосов 442: ↑438 и ↓4+434
Комментарии352

А в чем проблема работать с файлами?

Уровень сложностиСредний
Время на прочтение53 мин
Количество просмотров32K

Данные - это важный компонент системы. Приложение может хранить их где угодно, но в результате все сводится к файлам. Файлы - это хорошая абстракция, но она протекает: если не знать того, как работают ОС или гарантии файловой системы, то легко выстрелить себе в ногу.

Меня увлекла тема отказоустойчивости, а конкретно - отказоустойчивой работы с файлами. В этой статье я попытался соединить все полученные знания:

Кто участвует в процессе записи

Ошибки, которые могут произойти

Что от нас зависит, а что нет

И самое главное - как это этого защититься

Читать далее
Всего голосов 141: ↑140 и ↓1+169
Комментарии23

Как мы сделали Embedded Controller для ПЛК на Linux

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров11K

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

Читать далее
Всего голосов 39: ↑38 и ↓1+44
Комментарии36

Тайные знания: библиотеки для С++

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

Рун не должен резать
Тот, кто в них не смыслит.
В непонятных знаках
Всякий может сбиться.
Десять знаков тайных
Я прочел и знаю...(Сага об Эгиле)

Многие начинающие программисты, уже освоив синтаксис C++, обнаруживают, что нет простого способа, как подключить библиотеку, так и собрать программу для другой ОС, или чего хуже, под другим компьютером с той же ОС. Эта проблема отчасти порождается спорной практикой обучения, когда код учат писать и запускать лишь средствами IDE, таких как Visual Studio, Code::Blocks, и других.
Поначалу такой подход работает, но лишь до первой реальной задачи сделать что-то, что запустится не только на вашей машине. Тут-то новички и сталкиваются с отсутствием стандартной системы сборки и менеджера зависимостей. После осознания этой сложности, большинство студентов, как правило, переходят на другие языки, попутно тиражируя в индустрии миф о том, что C++ де не кроссплатформенный язык, а вот мой Python/Java/C# - да.
Между тем нас окружает множество замечательных кроссплатформенных программ написанных на C++. Если вы обучаетесь C++ и хотите понять как создавать такое ПО, то эта статья для вас.

Узнать заклинания кроссплатформености
Всего голосов 11: ↑6 и ↓5+1
Комментарии34

Упорядочиваем закладки

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6.1K

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

Пример закладок @alizar: 800+ статей.

Упорядочить!
Всего голосов 15: ↑15 и ↓0+15
Комментарии7

Серьги из матрицы светодиодов

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

Изначально я представлял LED Industrial Piercing [перевод на Хабре] как проект, специально рассчитанный на использование светодиодов 0201. В конечном итоге они оказались совершенно не нужны. Светодиоды 0201 слишком малы! Очевидно, я должен был двинуться глубже, поэтому целью нового проекта стало размещение как можно большего их количества на поверхности серёжки-гвоздика.

Читать далее
Всего голосов 68: ↑67 и ↓1+93
Комментарии21
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность