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

C *

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

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

Как проверить в C, является ли выражение константой

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

Вот вам маленькая задачка на программирование: реализуйте такой макрос, который принимает в качестве аргумента числовое выражение (числа могут быть целыми или с плавающей точкой) и:

Читать далее

Необходимость статического анализа для РБПО на примере 190 багов в TDengine

Уровень сложностиСложный
Время на прочтение39 мин
Количество просмотров1.1K

РБПО


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

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

MSYS2, GDB и управление памятью

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

Эта история началась с того, что мне захотелось поработать с интерпретатором одного очень экзотического языка программирования, а закончилась тем, что я освоил не менее экзотические (для меня) нюансы работы с памятью в С в Windows и POSIX, и того, как работает отладчик gdb в Windows.

ну очень экзотического

std::vector в C?

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

Во время разработки одного из своих проектов я обнаружил, что мне нужен контейнер, способный менять свой размер по мере необходимости. Так как я большую часть времени разрабатываю на С++, а не на С, я очень хотел получить что-то похожее на std::vector<T> из С++. Я начал искать в интернете реализации, но они мне не подходили по разным причинам. Тогда я решил разработать свой вариант.

Читать далее

Обработка аудио на ESP32

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

В этой статье я хочу поделиться своим опытом портирования проекта распознавания музыкальных жанров аудиозаписей на ESP32-C3. Исходный проект взят из репозитория книги TinyML-Cookbook_2E.
При анализе речи или других звуков важно выделить такие характеристики, которые отражают строение сигнала, но при этом не зависят от конкретных слов, громкости и других мешающих факторов. Для этого используют cepstrum, mel-cepstrum и MFCC - это шаги преобразования, которые переводят звук в удобную для анализа форму.

Читать далее

Настройка ToolChain-а Cборки Прошивок для MIK32 (K1948BK018 + C + GCC + GNU Make + OpenOCD)

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

В этом тексте я написал про то, как настроить рабочее окружение для разработки на российском микроконтроллере MIK32 (K1948BK018).

Читать далее

Научный редактор о книге «Алгоритмы? Аха!»

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.6K
Привет, Хаброжители!

Уже пару лет мы сотрудничаем с экспертами и энтузиастами из Read IT Club. Но сейчас мы хотели бы спросить у научных редакторов — а как им книги, к выходу которых они приложили руку?



Привет! Меня зовут Женя Войнов, в настоящее время работаю тимлидом и разработчиком на Java. Я участвовал в качестве научного редактора в подготовке русскоязычного издания книги «Алгоритмы? Аха!», которая изначально была написана на китайском языке. Это был мой первый подобный опыт, о котором я ничуть не жалею, а на момент написания данной статьи успел отредактировать еще две книги. Передо мной стояла задача адаптации материала для ИТ-аудитории и проверки его технической точности. Книга позиционируется как учебное пособие для начинающих разработчиков, студентов и всех, кто хочет систематизировать знания по алгоритмам и структурам данных, поэтому крайне важно убедиться в корректности перевода поданной авторами информации.

Рецензия этой книги появилась благодаря Read IT Club – сообществу рецензентов ИТ-литературы от КРОК, в котором я состою. Мы помогаем издательствам корректировать переводные книги и делать их понятнее русскоязычному читателю. Мы приглашаем друзей из других компаний и мечтаем сделать нашу инициативу глобальной. Подробнее можно прочитать на сайте.
Читать дальше →

Сборка на CMake для новичка

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

Сборка проектов на CMake вызывает множество вопросов у новичка. Так как это ударило непосредственно по мне, я решил показать и рассказать о том, как быстро создать универсальные скрипты для сборки на CMake.

Читать далее

Процессоры ARM: смешиваем NEON с SVE — и забава, и польза

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

Большинство мобильных устройств используют 64‑битные ARM‑процессоры. Однако они все заметнее и на серверах. Их число неуклонно растет, и все больше компаний, включая таких гигантов, как Amazon и Microsoft, также переходят на 64‑битные ARM.

У этих процессоров есть специальные инструкции — ARM NEON. Они обеспечивают параллелизм, известный как SIMD — Single Instruction, Multiple Data, то есть «Инструкция одна, данных множество». Например, можно сравнить шестнадцать одних значений с шестнадцатью других с помощью всего одной такой инструкции.

Некоторые из самых последних процессоров ARM также поддерживают еще более продвинутый набор команд — SVE, Scalable Vector Extension, или «Масштабируемое векторное расширение». Прогресс не останавливается — и вот уже появились спецификации SVE 2 и SVE 2.1.
Читать дальше →

Реализация ГОСТ 32.12. Симметричный шифр Кузнечик

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

Доброго времени суток.

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

В качестве рабочего примера моя реализация на C.

Читать далее

Восстановление раритетного аналогового синтезатора Alpha Juno-1 фирмы Roland

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

Одно время  на прогулках по блошиным рынкам я увлеченно высматривал винтажные музыкальные инструменты, особенно синтезаторы 70x-80x годов. Я нахожу их звуки очень красочными и разнообразными, а так же эти устройства интересны с точки зрения схемотехники.

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

И это оказалась не «пиликалка» с пластиковым звуком и не кондовый электроорган, - а очень даже продвинутый для середины 80ых и актуальный по сей день аналоговый полифонический синтезатор с цифровым управлением, выпущенный компанией Roland.

После приобретения музыкальный инструмент не подавал ни каких признаков жизни кроме подсветки дисплея. Вскрытие и сверка со схемой из документации показали то, что хоть разработчики и использовали Poka Yoke для предотвращения неправильного подключения межплатных кабелей, но или не досмотрели или ассортимента не хватило и установили на главной плате два разъёма с одинаковым количеством контактов и невнимательный настройщик который обслуживал синтезатор перепутал местами те единственные два кабеля в которых можно было ошибиться. В таком вот состоянии инструмент мне и достался. Уcтранив ошибку сначала я очень обрадовался, - основные функции заработали, но к сожалению вышли из строя два входа микросхемы IC7 “Gate Array“, которая выполняет роль IO интерфейса для CPU, в частности для функций клавиатуры. Из Рис. 1 и Рис. 3-4 видно как происходит обработка нажатия клавиш.

Прочесть

RISC-V: векторное расширение и алгоритм Витерби

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

Недавняя публикация о векторном расширении RISC-V архитектуры, подтолкнула меня к мысли написать небольшую заметку об использовании данного расширения в задаче, имеющей практическое применение. После появления векторного расширения, в сети начали публиковаться статьи о применении RISC-V ядер с данным расширением в задачах, ранее в которых безальтернативно использовались только процессоры ЦОС. В данной статье рассматривается тест, в котором используется алгоритм декодирования Витерби - задача, требующая значительных вычислительных ресурсов.

Читать далее

Как Microsoft задушил Delphi, создав .NET: история одного программиста и одного чемодана

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

Личный взгляд программиста с стажем на то, как Microsoft переманил Хейлсберга, создал .NET и вытеснил Delphi с технологической сцены. История предательства, перехода эпох и чемодана, который до сих пор скрипит в углу.

Как Microsoft задушил Delphi читать далее

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

Когда линковщик предаёт: как одинаковые символы из разных библиотек ломают ваше приложение

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

При линковке приложения с двумя статическими библиотеками, в которых определён один и тот же символ, возникает классическая и потенциально фатальная проблема — двойное определение символа. Вроде бы всё просто: multiple definition — ошибка, надо переименовать. Но не тут-то было.

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

Читать далее

Настройка soft-AP с использованием модуля Espressif и ESP-IDF

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

Перевод статьи с небольшими правками для ESP-IDF 4.4.5.
В этом руководстве показано, как настроить soft-AP с использованием модуля Espressif и ESP-IDF. Оно охватывает процесс создания проекта, настройки Wi-Fi и обработки событий подключения с помощью event loop и логирования.

В любом Wi-Fi-приложении первым шагом является установление соединения между устройством и маршрутизатором. В терминологии Wi-Fi устройство называется станцией (STA), а маршрутизатор — точкой доступа (AP). В большинстве случаев модуль Espressif работает как станция, подключаясь к существующему маршрутизатору. Однако перед этим пользователь должен пройти процесс provisioning — то есть ввести SSID и пароль маршрутизатора.

Существует несколько способов provisioning, но наиболее распространённые — это через Bluetooth и Wi-Fi. При использовании Wi-Fi процесс обычно выглядит следующим образом:

Читать далее

Сворачиваем CPython вокруг PVS-Studio

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

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

Но как обстоят дела внутри?

su и sudo в новом формате

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

Встречайте suex и sush – su и sudo в новом формате.

Эти современные решения, написанные на чистом C, появились как упрощенные альтернативы для тех, кто считает традиционные su и sudo чрезмерно сложными.

Читать далее

Автомобильная сигнализация на ESP32 + GSP + GSM и BLE метки для аутентификаци

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

Понадобился специфичный вариант "сигнализации в машину". Можно было использовать сочетания покупного иммобилайзера и GPS трекера (делал так). Но, захотелось сделать свое, адаптированное под мои хотелки. Делал исходя из "а почему бы и нет". Однако, с практическим применением (поставил в машину).

Все что хотел из функциональности - сделал.

Хотел бы поделится опытом не очевидных проблем "на пути".

Читать далее

NVRAM из EEPROM

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

Дана функция чтения и записи EEPROM dword.

Запись и стирание возможно только по выровненному адресу и пословно.

Надо поверх EEPROM API сделать функцию чтения, записи и стирания для произвольных массивов байт, по произвольному адресу (NVRAM).

Простыми словами надо состыковать Dword API с Byte API.

В этом тексте я представил простой наивный алгоритм решения данной задачи.

Читать далее

Как мы пишем код для curl на C

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

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

«c» в слове «curl» не обозначает и никогда не обозначало язык программирования C, это расшифровывается как client.

Предупреждение

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

Читать далее

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