Как стать автором
Поиск
Написать публикацию
Обновить
149.66

C *

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

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

Низкоуровневое обнаружение Wi-Fi устройств в домашней сети

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

Чтобы сделать собственное уникальное устройство для «умного дома» сейчас достаточно купить микроконтроллер и электронные компоненты. Конечно, на рынке уже есть множество «умных» устройств, но не все производители предоставляют открытое API, и уж точно единицы разрешают (или по крайней мере не запрещают) создавать собственные прошивки. Иногда наступает тот момент, когда кажется, что разработать и запрограммировать собственное устройство будет лучшим решением.

В этой статье я расскажу про несколько способов «‎научить» микроконтроллер распознавать присутствие людей дома исключительно с помощью Wi-Fi.
Читать дальше →

Си должен умереть

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

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее

Осваиваем кросс-компиляцию с помощью Clang и LLVM

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

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

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

Cи в роли промежуточного языка

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

Интересный небольшой эксперимент по использованию Cи в качестве цели компиляции для получения портативности программы, ее оптимизации и функциональной совместимости. В ходе эксперимента мы также напишем саму программу, реализующую алгоритм Эвклида, выполним ее отладку и профилирование, а также попутно задействуем функцию «красивой» печати gdb.
Читать дальше →

Другой взгляд на многопоточность

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

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

Читать далее

IO_URING. Часть 1. Введение

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

Всем привет! Наверное, многие уже слышали о новом интерфейсе ядра Linux — io_uring. Это новый способ работы с асинхронным I/O (и не только) в Linux. Кстати, новый он не только из-за даты выхода в свет, но и в плане подходов, которые предлагает разработчику.

Заинтересовало? Более подробно разберемся под катом.

Читать далее

Arduino и резистивный тачскрин, библиотека KrokoTS

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

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

Читать далее

Reversing для чайников — ассемблер x86 и код на С (для начинающих/ADHD friendly)

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

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

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

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

Читать далее

Простой цифровой радиоприемник на базе контроллера STM32G4 своими руками

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

Обучающие проекты по созданию простого цифрового радиоприемника на базе микроконтроллера STM32G431KB.

Читать далее

Как определить C и C++-программистов по коду, который они пишут

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

Так уж случилось, что я пишу код для разных IoT-железок, связанных с электричеством, типа зарядных станций автомобилей. Поскольку аппаратных ресурсов, как правило, вполне достаточно, то основным фокусом является не экономия каждого байта и такта процессора, а понятный и надежный код. Поэтому в проекте разрабатывают под Embedded Linux и в качестве основного языка используют C++ в его современном варианте - C++17, активно поглядывая на фичи из стандарта 20-го года и новее.

Иногда запускаются новые проекты на той же платформе, с теми же процессами и с переиспользованием многих уже существующих компонентов, и тогда в эти проекты мы ищем программистов, с учетом вышесказанного - программистов на C++. В embedded, тем не менее, чистый C все еще очень популярен, и нередко собеседоваться на вакансию C++ Developer'а приходят именно сишники. Логика у человека простая: языки, на первый взгляд, довольно близкие, базовый синтаксис одинаков, про ООП кандидат что-то слышал, и значит, основная база уже есть и он сможет легко освоить C++ за 21 день в процессе работы, поэтому можно наплести про "с C++ тоже работал", начать писать на "Си с классами" и все получится.

Но нет, не получится.

Bitwise — обучающий проект по созданию программного и аппаратного стека компьютера с нуля

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

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

В 2017 году, Per Vognsen - программист с более чем 15-летним стажем, работавший в таких компаниях как NVIDIA и Oculus берет паузу и в марте 2018 стартует амбициозный обучающий проект Bitwise, в котором он собирается разработать и написать весь программно-аппаратный стек для простого компьютера с нуля и запустить его на FPGA. 

Проект должен был включать в себя операционную систему, компилятор, системные библиотеки, а также HDL код для центрального процессора и периферийных контроллеров. Пререквизиты к нему минимальны - свободное владение языком Cи (и немного Python), а также знание некоторых алгоритмов и структур данных из стандартных CS курсов. Все остальное объясняется по ходу написания кода.

Проекты подобные Bitwise можно пересчитать по пальцам (думаю многие еще вспомнят о знаменитом Handmade Hero от Casey Muratori). Автором данного проекта выступает отличный программист, который в формате скринкастов показывает и объясняет каждое решение по ходу написания кода. Этой короткой статьей я бы хотел заполнить пробел и познакомить большее число людей с проектом Bitwise, так как сам извлек из него много нового.

Читать далее

Релиз 0.1.36 Nem мессенджера

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

За последние 14 дней я разработал мессенджер, у которого отличительная черта от остальных мессенджеров — это то, что серверную программы вы контролируете сами. Вы можете скачать исходные коды серверной программы и установить на свой сервер. Клиентская часть доступна для linux на flathub — приложение называется Nem.

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

Читать далее

Особенности работы с POSIX-сигналами

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

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

Читать далее

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

Развитие инструментария С++ программистов: статические анализаторы кода

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

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

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

Выходит первый Python 3.11. Что нового?

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

Делимся переводом документации альфы Python 3.11, которая выходит 4 октября, о разнице в сравнении с версией 3.10. Изменения касаются трассировки исключений, модулей math, sqlite, threading, unittest и других. Удалена ощутимая часть устаревшей функциональности.

Подробности читайте под катом, пока у нас начинается курс по Fullstack-разработке на Python.

Читать далее

MISRA C: борьба за качество и безопасность кода

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

Пару лет назад в статическом анализаторе кода PVS-Studio появился ряд диагностических правил для проверки соответствия текста программ стандарту MISRA C и MISRA C++. Увидев интерес и собрав feedback, команда разработчиков стала дальше развивать анализатор в этом направлении. В статье будет рассказано про стандарт MISRA C/C++, отчёт MISRA Compliance, про то, что мы уже успели сделать и что собираемся достичь до конца года.


0866_MISRA_C_ru/image1.png

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

Под капотом Ruby. GVL

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

Давным давно уже уже была написана статья о том что такое GVL (или GIL, кому как привычнее) и как он работает, однако с того времени некоторые вещи поменялись (к примеру, , а так же в Ruby 3.0 завезли Ractor'ы - новую абстракцию для реальной параллельной работы тредов. Мне стало интересно узнать что поменялось в планировщике ruby для реализации множества GVL. В этой статье я попытаюсь понять алгоритм, по которому GVL передается от одного треда к другому, как блокирующее IO позволяет продолжить работать другим тредам, а так же выяснить до сих пор ли операция добавления элемента в массив является атомарной операцией

Читать далее

Как я портировал DOS игру

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

Решил портировать одну старую давно забытую игрушку с DOS на современную платформу. Эта игра, в своё время, привлекала ураганным геймплеем, неплохой разрушаемостью, возможностью включить всё оружие одновременно и устроить настоящий бедлам. В 2021 году играть в такое всё ещё интересно, но делать это в родном разрешении 640х480, как-то не очень. Поэтому решил портировать игру и накатить хай-рез патч. Получилось!

Читать далее

Осваиваем новую базу кода: анализируем программу nginx

Время на прочтение10 мин
Количество просмотров12K
В разработке nginxучастия я никогда не принимал, так как мой навык работы в Си находится где-то на уровне 1/10. Однако меня не страшит идея скачать исходный код, разобрать его, скомпилировать и запустить. Цель этой статьи помочь и вам преодолеть собственный страх проделать то же самое.
Читать дальше →

Как посчитать синус быстро

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

... и точно. Точнее, с заданной точностью, простите за каламбур.

Под катом я расскажу, как сделать это с использованием школьного курса алгебры и целочисленной арифметики, при чём здесь полиномы Чебышёва I-го рода, и дам ссылки на примеры реализаций для ПК и Cortex-M3.

Читать далее

Вклад авторов