Обновить
256K+

C *

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

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

Как определить выпуклость многоугольника на C: от геометрии к коду

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

На первый взгляд задача определения выпуклости многоугольника кажется геометрически сложной.
Но на практике всё сводится к простой идее — достаточно последовательно пройти по вершинам и определить направление поворота.

В этой статье разберём, почему именно три точки позволяют определить поворот, откуда берётся формула через векторное произведение и как всё это аккуратно реализовать на C.

Также затронем важные нюансы, которые часто упускают: переполнение при вычислениях, порядок обхода вершин и обработку вырожденных случаев.

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

Читать далее

Новости

Бродим по лабиринту

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

Все знают, что 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.9K

В стандартной библиотеке 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.6K

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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