Search
Write a publication
Pull to refresh
16
0

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

Send message

Как написать свою ОС: руководства на Rust и C

Level of difficultyEasy
Reading time4 min
Views8.2K

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

К слову, Rust набирает обороты: первое место в категории любимых языков программирования по версии Stack Overflow.

Читать далее

Отсутствие динамической аллокации в embedded мире

Level of difficultyEasy
Reading time5 min
Views6.2K

Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti.

Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти.

Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено

В результате приходится решать задачу «ручного» управления памятью. Ниже рассмотрим два подхода:

Читать далее

Миграция Home Assistant с SQLite на PostgreSQL

Level of difficultyEasy
Reading time4 min
Views2.4K

Многие начинают знакомство с Home Assistant «как есть» — с минимальными настройками и базой данных SQLite. Это отличный старт, особенно если вы только строите свой умный дом. Но когда система обрастает датчиками, автоматизациями и историей, SQLite начинает тормозить.

Решение — перейти на более производительное хранилище данных, такое как PostgreSQL.

В этой статье покажу, как выполнить миграцию с SQLite на PostgreSQL, сохранив накопленную статистику и избежав ошибок. Всё проверено на Home Assistant 2025.5.

Читать далее

Hydroph0bia (CVE-2025-4275) — от обхода SecureBoot к модификации DXE-тома в UEFI-совместимых прошивках Insyde H2O

Level of difficultyHard
Reading time12 min
Views2.1K

Здравствуй, читатель. Перед тобой вторая статья о найденной мной серьезной уязвимости в UEFI-совместимых прошивках на базе платформы Insyde H2O, которую я назвал Hydroph0bia. В первой статье я рассказывал о проблеме "затенения" волатильных переменных NVRAM неволатильными, и о катастрофических последствиях, которые могут наступить при неудачном стечении обстоятельств и неаккуратном программировании критических для безопасности прошивки компонентов. Для правильного понимания этой статьи потребуются знания из первой, поэтому если вдруг она еще не прочитана, рекомендую устранить этот пробел.

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

Читать далее

Огромный гайд по настройке рабочего окружения: Linux, VScode, Python

Level of difficultyEasy
Reading time29 min
Views61K

Привет всем!

Как обычно это и бывает, я накопил критическую массу мыслей, и пора их как-то систематизировать, чтобы вы, мои замечательные читатели Хабра, могли что-то извлечь из моего опыта или поделиться своим :)

Я люблю и одновременно ненавижу статьи-обзоры в стиле «10 программ для {whatever}». Ненавижу — потому что их очень легко делать, вбил в гугл «программа для X», взял первые 10 ссылок, статья готова. Я называю такие статьи «лёгкий рейтинг». А люблю я их за то, что даже если 9 пунктов — чушь полная, то десятый, как правило, годный, я узнаю что-то новое, это что-то облегчает мне жизнь и позволяет мне быть более продуктивным.

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

Статья получилась ОГРОМНАЯ, и у меня был большой соблазн разбить её на сотню статей поменьше, чтобы в каждой ставить ссылки на свой телеграм-канал и получать гонорар за каждую по отдельности. Но я не буду. Пусть знания будут сгруппированы вместе. Welcome!

Читать далее

Open source Self-Hosted убийца убийц Notion. Как установить?

Level of difficultyEasy
Reading time3 min
Views15K

Я довольно давно искал менеджер заметок после того, как ушел Notion и заблокировал мой аккаунт. Я перепробовал довольно много всякого. Где-то меня не устраивал интерфейс, где-то глючная P2P-синхронизация, где-то отсутствие нативных приложений.

Сегодня расскажу про то что нашел для и себя и как это похостить.

Читать далее

Почему multiprocessing.Queue() тормозит и как обойти это с помощью shared_memory

Level of difficultyEasy
Reading time6 min
Views1.9K

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

Вы запускаете многопроцессную задачу, кидаете данные в multiprocessing.Queue(), а потом вдруг замечаете... что всё тормозит. Муторно. Медленно. Местами прям отвратительно. Вы смотрите в монитор, на top, на htop, на код — и не понимаете: ну ведь должно же летать! А не летит.

Читать далее

RVO и NRVO в C++17

Reading time8 min
Views32K

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

Читать далее

Может, если бы у C++ было больше времени, он стал бы лучше?

Level of difficultyMedium
Reading time9 min
Views12K

В своей предыдущей статье [перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно использовать неверно. Я не говорил о безопасности по памяти, просто привёл пример того, что пользователь функции не может случайно поменять местами аргументы количества и цены.

На написание статьи меня вдохновил доклад Мэтта Годболта о том, как можно сделать интерфейсы C++ более надёжными: Correct by Construction: APIs That Are Easy to Use and Hard to Misuse. Вам стоит его посмотреть!

В той статье я сказал, что Rust гораздо лучше помогает разработчику, возможно, благодаря тому, что у него были десятки лет, чтобы учиться. В конце концов, первая версия C++ была выпущена в начале 80-х, а Rust — в начале 2010-х. Если дать C++ несколько десятков лет для обучения, то, разумеется, появятся новые структуры, которые будут обладать высоким качеством и которые сложно использовать неправильно.

Но так ли это?

Читать далее

Декораторы Python. Продвинутое использование

Level of difficultyHard
Reading time25 min
Views10K

Привет, Хабр! продолжаю цикл статей про python разработку.

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

Как обычно буду очень рад критике и предложениям по улучшению материала.

Читать далее

Корутины в C++20: архитектура и практическое применение

Level of difficultyMedium
Reading time19 min
Views7.8K

Корутины в C++20 открывают новые возможности для асинхронного программирования, но они также могут привести к ошибкам, связанным с управлением памятью и синхронизацией. Здесь о том, какие проблемы могут возникнуть и чего ожидать от будущих обновлений корутин в C++.

Читать далее

Где искать проблему в проде: сравнение профилирования с eBPF и BitDive

Level of difficultyMedium
Reading time5 min
Views1.6K

eBPF vs BitDive: Сравнение решений для системного и прикладного профилирования

Разбираем разницу между eBPF и BitDive: системное профилирование против глубокого анализа Java-приложений. Что выбрать для продакшена?

Читать далее

В защиту «Дюны» Вильнева

Level of difficultyEasy
Reading time27 min
Views20K

Сегодня я побуду адвокатом «Дюны» 2021-2024 годов выпуска и расскажу о том, что у Вильнёва, на мой взгляд, получилось хорошо. Увы, местами невозможно будет удержаться от сравнений с другими экранизациями Герберта и с самим романом-первоисточником, а где-то и от критики в их адрес; где-то придется оспорить расхожие аргументы критиков фильма, но такие моменты я постараюсь минимизировать: эта статья – в первую очередь похвала фильму, а не полемика. Ведь кино, так и не ставшее новым «Властелином колец» от космооперы, достойно хотя бы похвалы.

Читать далее

Устанавливаем кластер Kubernetes в LXC-контейнерах Proxmox

Level of difficultyMedium
Reading time14 min
Views7.5K

Если вы когда-либо разворачивали Kubernetes-кластер на виртуальных машинах (ВМ), то знаете, насколько это может быть ресурсоёмко. Особенно это ощущается на одноплатных компьютерах вроде Orange Pi 5 Plus, даже несмотря на его 16 ГБ оперативной памяти. Для домашнего лабораторного стенда или лёгкой продакшн-инфраструктуры хочется чего-то более лёгкого и быстрого

Читать далее

Как я 3 раза изобретал велосипед или нюансы подсветки мебели

Level of difficultyEasy
Reading time5 min
Views24K

Сказ о том, как я три раза придумывал подсветку кухни, а Wirenboard одной прошивкой изменил мои планы.

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

Читать далее

Затолкаем, братцы!!! UART Lite через PCIe прямиком в Linux: драйвер за вечер (почти)

Level of difficultyMedium
Reading time20 min
Views10K

Что если можно было бы подключить своё AXI-устройство на FPGA к Linux через PCIe за вечер? В этой статье рассказываю, как написать драйвер для UARTLite через XDMA, собрать свою TTY и начать работать с GPS прямо из терминала!

Залетай, что смотришь....

Делаем собственный анализатор C++ кода в виде плагина для Clang

Level of difficultyMedium
Reading time11 min
Views4.9K


Есть много проектов, целью которых является превратить С++ более "безопасный" язык программирования. Но внесение изменений в синтаксис языка обычно нарушает обратную совместимость со старым кодом, который был написан до этого.


Недавно вышла новая версия библиотеки memsafe для языка С++, которая превращает его в Rust с помощью плагина Clang добавляет в С++ безопасное управление динамической памятью и контроль инвалидации ссылочных типов данных во время компиляции приложения.


Но данная статья не о библиотеке, а об особенностях разработки анализатора программы на С++ в виде плагина для Clang.


Можно считать, что это подведение итогов по результатам сравнения нескольких разных способов создания плагина для компилятора С++, а так же очередной Хабрахак для хранения результатов экспериментов и публикации итоговых выводов, которые я решил сохранить не только для себя, но и в виде статьи на Хабре, что бы результатами моего труда могли воспользоваться и другие хорошие люди :-), которым так же может потребоваться погрузиться в дебри парсинга исходного текста программ.

Читать дальше →

Подсистема управления GPIO для ЗОСРВ «Нейтрино»

Level of difficultyMedium
Reading time6 min
Views1.3K


При разработке драйверов GPIO для нашей операционной системы реального времени "Нейтрино" исторически имеется одна неприятность — отсутствие общего дизайна для таких драйверов. Причин для этого несколько: они считались и считаются тривиальными, разрабатывают их разные организации и разработчики. Из-за этого каждый инженер нередко писал реализацию «под себя»: кто-то в виде сервиса, кто-то даже в виде статической библиотеки. Такой подход, хоть и кажется удобным на первых этапах, со временем приводит к фрагментации кода, усложнению поддержки и невозможности систематизировать накопленный опыт. Чтобы избежать этих проблем в будущем мы решили перейти на унифицированную подсистему управления GPIO устройствами и выработать подход, который будет считаться best practices в нашей ОС.

Читать дальше →

Как работает ptrace в Linux и зачем он тебе

Level of difficultyEasy
Reading time5 min
Views8.4K

Привет, Хабр! Сегодня у нас на столе инструмент, о котором многие слышали, но мало кто использовал по-настоящему — ptrace.

С ptrace можно подключаться к чужим процессам, читать и менять их память, перехватывать системные вызовы — и даже вежливо убрать sleep 9999.

Читать далее

Хеш-таблица и C++20

Level of difficultyHard
Reading time6 min
Views7.7K

Рассматриваем различные «приколюхи» из C++20 на примере хеш‑мапы!

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

Читать далее статьи от @SEIka69

Information

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