Обновить
256K+

C *

Типизированный язык программирования

234,55
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Давайте заглянем в этот самый вайб-код

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели13K

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

Читать далее

Новости

Сборка прошивки STM32 компилятором IAR при помощи GNU Make скрипта (IAR+Make=CI/CD)

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

В этом тексте я покажу как собрать прошивку при помощи компилятора IAR и GNU Make файлов.

Собрать прошивку компилятором IAR с помощью GNU Make — это не просто возможно, это стандартный подход для автоматизации сборки, например, на CI/CD серверах, где использование IDE неудобно. IAR поставляется с набором консольных утилит, которые делают этот процесс вполне прямолинейным.

Читать далее

Дремлющий демон GPIO: простой и надежный мониторинг событий в embedded-системах

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели7.4K

Иногда старые проекты дают о себе знать в самый неожиданный момент — так случилось и с моим Linux GPIO Daemon. Коллеги из департамента методик и автоматизации тестирования в YADRO заинтересовались разработкой, и я наконец решил довести его до ума. Расскажу о демоне, который реагирует на события линий: текстовым сообщением об изменении состояния в сокет либо запуском скрипта. Это аналог incron-ng, только мониторит он не файлы, а линии GPIO. А в конце обсудим, как найти и затем не терять нужный нам gpiochip.

Читать далее

Черная магия unsafe в Go: практические примеры и ошибки использования. Часть 2

Время на прочтение5 мин
Охват и читатели3.9K

Привет, Хабр! Я — Владимир Балун, и это — вторая часть материала о пакете с отпугивающим названием «unsafe» в Go и том, чем он может быть реально полезен. В первой части мы рассмотрели его содержимое, особенности и нюансы, оптимизации кода с использованием unsafe — все это вы можете освежить в памяти по ссылке.

Сегодня перейдем непосредственно к той самой «магии»: трюки, хаки, советы и лучшие практики с моей стороны.

Читать далее

Почему Python + Numba обгоняет C? Эксперимент с алгоритмом прогонки

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6K

Все знают, что C быстрее Python. Но мы провели эксперимент с алгоритмом прогонки и обнаружили, что Numba (JIT-компилятор для Python) обгоняет наивный C на 20–25%. Разбираемся, почему так происходит, и сравниваем точность float32/float64.

Читать далее

Превращаем MIDI клавиатуру в синтезатор. Часть 2. MINI-JV880pi

Уровень сложностиСредний
Время на прочтение26 мин
Охват и читатели10K

Итак, я решил довести до реально работающего проекта превосходный эмулятор синтезатора Roland JV880. Это рэковый модуль (без клавиатурный), сделанный на базе синтезатора JV80. Соответственно он поддерживает все карты расширения этого синтезатора и почти все MIDI команды.

Подробнее

Сам себе шедулер (scheduler) — планировщик

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6K

Это мой развернутый ответ на тему организации программных таймеров который я обещал в комментариях (ссылка на комментарии будет ниже).

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

Читать далее

Черная магия unsafe в Go: практические примеры и ошибки использования. Часть 1

Время на прочтение13 мин
Охват и читатели5.8K

В стандартной библиотеке Go есть пакет с отпугивающим названием «unsafe». Но он может быть реально полезен! Сегодня поговорим о том, как использовать его надежно и эффективно.

Привет, Хабр! Я — Владимир Балун, основатель balun.courses и it-interview.io. Эта статья будет для удобства разделена на две части. Из них вы узнаете, как можно создавать срезы без дорогостоящей инициализации, научитесь избавляться от Bound Checks и конвертировать строки в срезы и обратно без лишних копирований и аллокаций памяти. 

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

Читать далее

Необычный заказ: разработка под CP/M

Уровень сложностиСредний
Время на прочтение24 мин
Охват и читатели9.5K

Древний дисковод ожил и издавая чудовищный скрежет стал медленно загружать мое послание. Через какое-то время на экране появились строки:

NE PUERO GLADIUM, DR. KRIGER. 04.03.2026

Три пары глаз повернулись ко мне в немом изумлении.

— Это длинная история, нам лучше присесть.

Читать далее

Принципы DOD в C++: Часть 2. AoS, SoA. Мнимая панацея для быстродействия

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

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

Читать далее

Cray: оживление легенды

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели19K

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

Читать далее

Умная теплица на Raspberry Pi 4: управляем GPIO, ESP8266 и автоматизацией через веб-интерфейс. Часть 1

Время на прочтение6 мин
Охват и читатели9.5K

Когда у меня появилась теплица, первым желанием было автоматизировать всё, что можно: контроль температуры, управление вентиляцией, полив, освещение. Готовые решения либо стоят дорого, либо замкнуты в экосистеме одного производителя, либо не дают нужной гибкости. Поэтому я решил создать собственную систему по автоматизации управления процессами в теплице. Также у меня было много бесхозных контроллеров ESP8266/ESP32, которые нужно было куда‑то «пристроить».

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

Читать далее

Пуск DWT Таймера на ARM Cortex-M (или Ядерный Таймер)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели11K

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

В ARM Cortex-M процессорах помимо SysTick есть еще один 32 битный таймер по имени DWT. Этот таймер увеличивается на 1 каждый тик ядра.

Как же воспользоваться этим ядерным таймером?

Читать далее

Ближайшие события

Почему первый вызов моей malloc всегда аллоцирует 72 КБ?

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

Мне нравится экспериментировать с кастомными аллокаторами памяти, используя собственные реализации. И хотя модульные тесты помогают убедиться в их корректности, настоящей проверкой становится работа аллокатора в реальных программах.

Коротко о теме статьи. Стандартная библиотека C++ инициализирует механизм обработки исключений на раннем этапе, выделяя память для «резервного пула», чтобы можно было использовать её под выброс исключений, если malloc вдруг провалится.

Читать далее

Управление предпусковым подогревателем Webasto

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

Добрый день, в контексте моего хобби по схемотехнике и программированию микроконтроллеров появилась идея реализовать устройство для дистанционного запуска предпускового котла Webasto, в моем случае это "Webasto Thermo Top Evo 5". Вероятно предложенный материал подойдет и для реализации устройств управления для схожих отопителей данной марки работающих по протоколу W-bus.

Читать далее

Flame: Системный язык программирования на C и LLVM с мета-исключениями и Memory Safety без Borrow Checker

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.5K

Пока индустрия движется в сторону усложнения компиляторов, я задался вопросом: можно ли создать инструмент, который дает безопасность Rust, гибкость C и при этом не весит сотни мегабайт?

Так появился Flame — системный язык с компилятором в 226 КБ, который реализует управление памятью через статический анализ AST и предлагает альтернативный взгляд на обработку ошибок через патчинг дерева токенов.

Читать далее

«Создание встраиваемых систем». Обзор книги

Время на прочтение7 мин
Охват и читатели19K

Как только я узнал, что книга Making Embedded Systems 2nd Edition (русская версия: «Создание встраиваемых систем. Паттерны проектирования отличных программ. 2-е издание») доступна для предзаказа, я не раздумывая отправился на Amazon и раскошелился за неё.

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

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

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

Просмотрев на сайте O'Reilly предметный указатель и выложенные для просмотра главы, я обнаружил, что такой «конфигурационной» главы в книге нет. Также в предисловии прямо рекомендовалось не прыгать по книге от главы к главе, а проработать её всю по порядку.

Читать далее

Неизвестные известные алгоритмы и трюки на языке C

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели16K

Доброго времени суток, господа и дамы! Иногда у некоторых людей возникает желание заняться откровенным непотребством в программировании — то, что не несет практической пользы напрямую, но помогает развлечься. И я — не исключение. В этой статье я хочу рассказать вам о лайфхаках, трюках (магических и не очень) и алгоритмах на языке C!

Идея написать эту статью зародилась из моего поста, после него я начал серию статей, которая раскрывала много интересных моментов — от математических алгоритмов и оптимизации до ГПСЧ.

Если вы видите эту статью, значит еще не все тайны C раскрыты. В этой статье будет еще больше свежих хаков, фанов, трюков, еще больше магии и скорости! А также нетипичных алгоритмов и структур данных, что позволит вам почерпнуть и полезную информацию тоже!

Добро пожаловать в новую часть. Прошу под кат — там будет жарко, быстро и очень, очень интересно.

Читать далее

Бизнес-логика первична, микросервисы — вторичны

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели6.2K

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

Но есть более фундаментальный вопрос - кто в системе определяет правила игры?

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

- часть проверок живeт во фронтенде

- часть - в API,

- часть - в промежуточных сервисах

- часть — во временных проверках, добавленных после инцидентов

Добавили новый сервис в цепочку - и изменилось поведение.

Вынесли проверку в отдельный процессинг - и появились состояние гонки.

Перестроили оркестрацию - и неожиданно стала недоступной операция, которая раньше работала.

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

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

Мы отвлекаем существенные ресурсы в поисках решения для проблем.

Читать далее

Бросил tmux и написал свой инструмент

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели20K

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

Читать далее
1
23 ...