Обновить
108.79

C *

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

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

Нельзя Просто Так Пойти и Купить Овцу (или Потёмкинская Деревня в Коде)

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

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

Вот буквально несколько настоящих примеров из жизни. Парад нелепости.

Как сказал мой коллега: "Формализм при ревью уже перешёл все рамки здравого смысла."

Читать далее

Книга: «Алгоритмы? Аха!»

Время на прочтение6 мин
Количество просмотров11K
image Привет, Хаброжители!

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

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

Возвращаясь в IT (админская байка)

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

Волей-неволей, я оказался в другой стране. Февральский Тбилиси встретил ветрами, доброжелательными людьми, безденежьем и необходимостью (после 6-летнего перерыва) в очередной раз вкатываться в IT. И я подписался админить первый подвернувшийся проект.


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


Сама система была разработана давно уволившемся программистом и, на удивление, уже лет 5+ работала без обслуживания и, при этом, без сбоев. Картину дополняли бардак в документации (если её таковой можно было назвать) и полное отсутствие исходников парсера. Но для админских задач они, как бы, не требовались. До поры.


Уже в конце первой недели от аналитика пришла просьба: "Файл очень большой, разбирается иногда пару дней, а работает парсер абсолютно молчаливо, ничего не выдавая на экран, и, поэтому, нельзя ли отобразить процент выполнения. Желательно видный через progress, так как через него отслеживаются и другие задачи".


Упомянутая выше документация заканчивалась одной интересной строчкой: "парсинг переведён в однопоточный режим из-за "гонок"". Из этой, не до конца понятной фразы, я вынес для себя, что раз парсинг идёт однопоточно, то нет никаких сложностей извлечь данные из "/proc". Поэтому: "Да без проблем," — ответил я."

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

Как пройти интенсив Школы 21 от Сбер

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

Расскажу про свой опыт прохождения интенсива в Школе 21 от Сбер.

В нем донесу много того, что поможет тебе принять решение идти или не идти на интесив!

Читать далее

Делаем из обычного пожарного дымового извещателя Рубеж ИП 212-50М2 умный датчик дыма Zigbee

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

Подвернулись мне тут абсолютно случайно несколько штук таких извещателей. Открываем паспорт, читаем - ИЗВЕЩАТЕЛЬ ПОЖАРНЫЙ ДЫМОВОЙ ОПТИКО-ЭЛЕКТРОННЫЙ АВТОНОМНЫЙ ИП 212-50М2. Производством занимается Группа Компаний «Рубеж» ООО «КБ Пожарной Автоматики».

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

Итак, принято решение, самостоятельно доработать этот извещатель - сделать его умным, чтобы можно было его интегрировать в систему Умного Дома. Протокол выбираем Zigbee.

Читать далее

Портирование Dangerous Dave для NES/Dendy

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

Тема игр из детства до сих пор тревожит умы очень многих людей, а возможность реализовать свои фантазии в виде игры для любимой консоли вообще взрывает мозг (особенно в контексте игры, которую вы увидели на картинке ☺). И в этой статье я расскажу вам о своём опыте портирования Dangerous Dave in the Haunted Mansion для NES/Famicom/Dendy.

Читать далее

Непонятный rpc, или же первый пэт-проект или DynamicRPC

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

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

Читать далее

Гид по блокирующему, неблокирующему и квази-блокирующему вводу-выводу

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

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

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

Так как микроконтроллеры предоставляют разработчику полную свободу во взаимодействии с железом, примеры я тоже буду давать для абстрактного усредненного микроконтроллера семейства stm32. Но и на прочих NXP философия примерно такая же.

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

Читать далее

Я на дереве сижу, препроцессинг провожу

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

Согласно описанию,


Tree-sitter — это инструмент для генерации синтаксических анализаторов и библиотека инкрементного синтаксического анализа. Он может создавать конкретное синтаксическое дерево для исходного файла и эффективно обновлять синтаксическое дерево по мере редактирования исходного файла.

Но как Tree-sitter справляется с языками, в которых необходима стадия препроцессинга?

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

Пишем «Hello, World!» на Си для OpenWRT

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

Мне стало интересно, как можно скомпилировать код на языке Си для OpenWRT на мой роутер.
В интернете инструкции имеются, но расплывчатые и то им уже по 6-8 лет. Поэтому, в этой статье собрана актуальная информация по компиляции.

Читать далее

Как я портировал свой игровой движок с JavaScript на C

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

high_impact


tl;dr: high_impact — это маленький игровой движок для 2D-игр жанра «экшн». Он написан на C, компилируется для Windows, Mac и Linux, а также для WASM в вебе. Он был написан «по мотивам» моего игрового движка Impact на JavaScript, разработанный в 2010 году. Название high_impact — отсылка к тем временам, когда C считался языком высокого уровня.

Движок имеет лицензию MIT, исходники выложены на Github: github.com/phoboslab/high_impact

Видео из моего твита за 5 июля, демонстрирующее геймплей Biolab Disaster
Читать дальше →

Протокол SMTP. Пишем SMTP-сервер на C

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

Недавно я захотел подкачать свои знания языка C. Я решил написать небольшой проект используя только стандартную библиотеку языка. Чтобы извлечь ещё больше пользы из данного проекта, я решил изучить новую для меня технологию. Этой технологией стал протокол прикладного уровня SMTP, а проектом – небольшой SMTP-сервер. Сегодня я расскажу, как работает протокол SMTP, а также как я реализовал сервер, работающий с ним.

Читать далее

Reverse engineering конкурсных списков поступления на бюджет в вузы России

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

Сегодня, 3 августа 2024 года, был последний день подачи документов в вузы России на бюджет.

Ситуация нервная: слишком много факторов.

Мать-недопрограммист не дождалась приказа

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

Интеграция clang-format в Процесс Сборки

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

Есть такая тема, как автоматическое выравнивание отступов в исходных текстах программ на Си или С++. Притом для этого есть специальные утилиты. Например clang-format или GNU indent.

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

Цель данного текста- показать, как интегрировать clang-format в процесс сборки прошивки. Просто в одно касание и выровнять код, и собрать бинари.

Читать далее

4 типовые ловушки в работе со строками в С и С++ и как их избежать

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

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

Читать далее

Пишем за неделю 3D-редактор на C

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров11K
Прошлой осенью я участвовал в недельном мероприятии по программированию Wheel Reinvention Jam. Смысл этого джема заключается в том, чтобы взглянуть по-новому на уже существующие программные системы. Я написал для него 3D-редактор под названием ShapeUp. Пост будет понятнее, если вы сначала посмотрите видео-демо ShapeUp. Можно попробовать ShapeUp в браузере.

Вот, как он выглядит:

Майк Вазовски!

3D-редактор


Я ненавижу тормознутость компилятора Typescript (поверьте, это относится к теме статьи). Джем показался мне подходящей возможностью реализовать более быстрое подмножество Typescript, обгоняющее по скорости tsc. Мне показалось, что проект можно реализовать, если начать с парсера Typescript esbuild or Bun. Но потом ко мне пришло понимание, что успешный результат будет выглядеть как команда терминала, выполняющая работу быстрее другой. Не особо впечатляюще в качестве демо. Мне хотелось создать крутое демо, поэтому я выбрал 3D.
Читать дальше →

Работа SPI на MIK32 АМУР с платой ELBEAR ACE-UNO ревизии 1.0.1

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

Здравствуйте все! ✋

При первой же попытке подключить экран ILI9341 по SPI к MIK32 АМУР выявил пару проблем, одна касается библиотеки HAL от Микрона, а вторая касается платы ELBEAR ACE-UNO ревизии 1.0.1 от ELRON.

Для начала поясню, я использую свой Makefile и работаю в VSCode, есть возможность работать с PlatformIO но я ей не пользуюсь. Прошиваю МК через COM-порт, для этого использую бутлоадер и загрузчик от elron.tech.

Для запуска экрана я взял библиотеку которую использовал ранее для работы с МК от Миландр К1986ВК025 (ОКР «Счетчик М»), заменил внутренности функций SPI_Master_Init, SPI_SendData и т.д., взяв их из примера который находится в репозитории Микрона - HAL_SPI_Master.

В их примере идёт передача 20 байт с одновременным приёмом, мне же необходимо передавать побайтово. В этом моменте как раз и появляется ошибка, с которой пришлось немного повозиться. В функции HAL_SPI_Exchange есть метка error, посмотрите пример ниже:

Читать далее

Тысяча и одна библиотека С++

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

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

Пуск I2S трансивера на Artery

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

В этом тексте я написал про то, как самому написать System Software уровня HAL для ARM Cortex-M4 совместимого микроконтроллера.

Как отлаживать такую работу и на что обратить внимание при запуске I2S на Artery MCU.

Читать далее

Прошиваем программу не только в начало FLASH памяти STM32

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

Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память? Небольшая статья, которую я сам в свое время не нашел и потратил много часов и нервов на сбор этой не хитрой информации.

Читать далее

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