В этом тексте я предлагаю порассуждать, что же должно быть в нормальном взрослом firmware репозитории безотносительно к конкретному проекту.
То есть перечислить самые универсальные и переносимые программные компоненты (кирпичики), которые могут пригодиться в практически любой сборке.
C *
Типизированный язык программирования
Новости
Select принципиально неисправен. Мультиплексирование ввода/вывода часть #2
В предыдущей статье блога мы обсудили краткую историю системного вызова select(2). В ней делается вывод, что для эмуляции консолей, игр и нетривиальных TCP/IP-приложений было необходимо определенное мультиплексирование ввода-вывода.
Разработчики BSD (Berkeley Software Distribution) выбрали модель мультиплексирования select, и за ними последовали другие Unix-подобные системы. Но является ли select единственной моделью мультиплексирования?
FizzBuzz по-взрослому
Тема эта стала неинтересной, всё то же и так же из раза в раз
Сеньоры начинают и проигрывают пенсионерам.
Это уже третий раз и должны уже наверно свыкнуться. ))
Немного лирики. Хабр из места, где пишут в стиле "смотрите коллеги, можно и так ..." превратился в место хвастовства и рекламы. Пенсионеры хорошо знают, что невозможно написать код, который нельзя улучшить. И реальные сеньоры только рады, когда им пишешь про то, как можно улучшить их код. Я проверял ))
Тандем Cpp/Dot для Описания Сложных ToolСhain(ов)
Разработка современного софта это далеко не только про код.
Разработка современного софта это во многом про ToolСhain(ы). Прежде чем начать исполняться исходники проходят гигантский путь. C каждым поколением выходят все более и более массивные системы сборки.
Современные технологии разработки софта это многостадийные конвейеры из различных утилит. Понять их весьма сложно, но можно. А поможет нам в этом хипстерский язык программирования Dot.
Разработка программы отображения для гидроакустической станции под Linux
Гидроакустическая станция серийная, Echologger MRS-900. Однолучевая, луч сканирует по кругу или в секторе. Штатное программное обеспечение есть, работает под Windows. От меня потребовалась версия под Linux.
Фокусы оптимизации размера исполняемых файлов ELF. Поддержка 4 ОС в 400 байт единственного бинарника
В этом посте я расскажу о некоторых уловках, которыми я воспользовалась, чтобы уменьшить двоичные файлы С/С++/Python с помощью ассемблера для x86. Здесь всё крутится вокруг кодовой базы Cosmopolitan. Дело в том, что из недавнего отзыва по проекту ELKS я узнала, что мой код там всем понравился и они хотят узнать больше о том, что трюки cosmo могут дать проектам вроде «Linux-порта i8086». Я почувствовала, что мы с ребятами проекта ELKS «одной крови», ведь первое, что я написала при создании Cosmopolitan, — это загрузчик i8086, который назывался Actually Portable Executable. А ещё мне было приятно узнать, что людям, которые погрузились в эту проблему гораздо раньше меня, нравятся мои наработки в Cosmopolitan. И тогда я решила, что неплохо было бы поделиться ими с более широкой аудиторией.
Как я портирую код с помощью Hebron
В своей предыдущей статье я упомянул Hebron - утилиту для портирования кода с C на C# или на Rust.
В этой статье хотелось бы подробно расписать - как я с ней работаю.
Написанное можно воспринимать как своего рода мануал на тот случай, если кто-нибудь тоже захочет что-нибудь портануть.
Итак, портирование осуществляется в 4 шага:
StbSharp: история ненужного проекта
В этой статье я бы хотел рассказать о своем хобби проекте под названием StbSharp.
Итак, в 2016 году мне пришла в голову весьма банальная идея - сделать собственный игровой кросс-платформенный движок на C#. И я озаботился поиском кросс-платформенной же библиотеки для загрузки картинок. Внезапно выяснилось, что подходящей просто не существовало. Было множество платформо-зависимых решений(напр. System.Drawing). А так же имелась SixLabors.ImageSharp. Но она была в состоянии ранней альфы. Мне же хотелось работать с решением, проверенным временем. Так я пришёл к идее портировать stb_image.h (очень популярной в геймдеве single-header библиотеки для загрузки картинок) на C#.
"А разве не легче было написать биндинги для нативной библиотеки? Хоть для той же stb_image?",- задаст справедливый вопрос читатель. Да, легче. И правильнее. О чём, собственно, и говорит заголовок этой статьи. Конечно, использование биндингов доставляет некоторые неудобства в плане того, что необходимо доставить соответствующий нативный бинарник на устройство конечного пользователя. Однако эти неудобства с лихвой окупаются достоинствами. А именно лучшим перформансом и портируемостью.
Однако, проект показался мне столь интересным, что я проигнорировал эти справедливые возражения.
FizzBuzz по-македонски
Long story short
Сеньоры начинают и проигрывают
Тут как на олимпийских играх - быстрее, короче, изящней.
В продолжение увлекательной дискуссии
Написание расширений PostgreSQL на языке С — это интересно
PostgreSQL — это мощная система управления реляционными базами данных с открытым исходным кодом. Она дополняет язык SQL новыми фичами. СУБД определяется не только ее производительностью и встроенными фичами, но и способностью поддерживать персонализированную/дополнительную, специфичную для пользователя функциональность. Некоторые из этих возможностей могут быть представлены в виде конструкций или модулей базы данных, таких как хранимые процедуры или функции, но их объем обычно ограничен функциональностью, предоставляемой СУБД. Например, как вы напишете кастомное приложение для анализа запросов, которое будет находиться внутри вашей СУБД?
Как не быть программистом, раскурить eBPF за сутки и начать мониторить DNS
Представим: сервер может отправлять легитимные запросы, но IP, на которые он будет их слать, неизвестны. В журнале сетевого фильтра видно что запросы таки да, идут. Но не ясно - это как раз легитимные или информация уже утекает к злоумышленникам? Было бы проще если бы был известен домен на который сервер посылает данные. Увы, но PTR не в моде, а securitytrails показывает или ничего, или слишком много по этому IP.
Можно запустить tcpdump. Но кто захочет постоянно смотреть в монитор? А если сервер не один? Есть packetbeat. Это чудовище, которое выжрало процессор на всех серверах. Брр… Не хочу о нём вспоминать. Osquery - неплохой инструмент который многое знает о сетевых подключениях и ничего - о DNS-запросах. Соответствующее предложение было просто закрыто. Zeek - о нём я узнал когда начал искать как отслеживать DNS-запросы. Похоже он неплох, но меня смутило два момента: он следит не только за DNS, а значит ресурсы будут тратиться на работу результат которой мне не нужен (хотя, возможно, в настройках можно выбрать протоколы); а ещё он ничего не знает о том какой процесс послал запрос.
Неужели это всё? Я вроде бы что-то слышал про eBPF…
Архитектура Хорошо Поддерживаемого драйвера для I2C/SPI Чипа
В программировании микроконтроллеров часто приходится писать драйверы периферийных микросхем. Зачастую это 60% всего кода большинства проектов. В этом тексте я написал несколько общих нюансов разработки драйверов периферийных чипов.
Приёмы высокоуровневой векторизации на примере Card Raytracer
Хочу рассказать о том, как занимался оптимизацией card raytracer - минимального рейтрейсера, код которого умещается на визитке.
Точнее, это развёрнутая для лучшей читабельности версия, которая в форумной ветке
использовалась как тест скорости разных языков.
Когда я наткнулся на эту ветку, я как раз изучал компиляторы Cи, и конечно немедленно вознамерился всех порвать обогнать. В результате действительно обогнал, но с нарушением правил - слегка поправив структуру данных.
Тем не менее, это хороший пример того, как можно "заточить" код под векторизацию, с сохранением читабельности и умеренным ростом объёма и сложности. Я расскажу, какие есть варианты векторизации, как перестроить код и данные, и наконец, как переложить на компилятор черновую работу по кодогенерации - используется автовекторизация, векторные расширения и совсем немного интринсики.
Наверное, статья в большей степени полезна новичкам, но и опытные разработчики (по привычке с 2000-го года пишущие SIMD-код интринсиками) могут найти что-то новое.
Компилятор - в основном Clang, можно GCC, в конечном итоге я адаптировал и под MSVC.
С PATH_MAX не всё так просто
C и C++ программисты в какой-то момент могут столкнуться с ограниченным размером PATH_MAX и задаться вопросом – какого размера создавать буфер, чтобы отследить путь к директориям или файлам?
Руководство по CMake для разработчиков C++ библиотек
Данное руководство позволит читателю составить полную картину того, как организовать сборку C++ библиотек с использованием современных возможностей CMake. Предполагается, что читатель имеет представление о базовых понятиях из мира CMake и динамических/статических C++ библиотек, так как в руководстве они могут не объясняться.
Разбираемся с EXCEPTION_CONTINUE_EXECUTION
Механизм структурированной обработки исключений (Structured Exception Handling, SEH) позволяет не только "отловить" сгенерированное исключение, но и вернуться к инструкции, вызвавшей сбой и попробовать выполнить ее заново.
В данной статье разбирается использование механизма SEH для возврата к инструкции, вызвавшей исключение.
Логотип PSone и где он обитает
Знакомая картинка? Думаю, что знакома она многим. Дети 90-х (ух, что тогда творилось, в песне Монеточки это всё описано), видели этот логотип при старте приставки PS1. И оказалось, что
Продолжаем разгонять FizzBuzz
После написания первой статьи про FizzBuzz (которая неожиданно для меня стала выбором редакции на Технотексте 2021) у меня появлялись мысли о том, как еще можно ускорить, но все время было не до того. И тут мне прилетает перчатка.
17 Атрибутов Хорошего Канального Протокола Передачи Данных
В этом тексте представлены атрибуты хорошего и простого канального Master-Slave протокола для пакетного обмена информацией между устройствами на общей шине таких как RS485, CAN, LoRa, BLE.
Несмотря на то, что есть канальные протоколы ModBus, DLMS, RDS, UBX, NEC, Pelco-D, yModem, многие компании всё же придумывают собственный канальный протокол для взаимодействия между своими электронными платами. Тут представлены общие атрибуты таких доморощенных протоколов.
FizzBuzz по-пенсионерски
Статья коллеги @qrdl про собеседование с написанием вариантов FizzBuzz очень понравилась.
Но очень не понравился код, совсем не понравился. (Так бывает, статья задорная, веселая, с понтами, а код не хороший) И после публикации технотекстов пришлось внимательно изучить https://habr.com/ru/post/540136/ и понять, разобраться в своем неприятии, ну и потренироваться самому.
Мне больше 60 лет и первую часть своей карьеры я был супер программист, зарабатывал на более чем 20 языках, из которых пяток только ассемблеров. Но С среди них не было, а те языки, что были, умерли все.Очень хороший повод потренироваться.
Вклад авторов
-
Andrey2008 3313.9 -
SvyatoslavMC 1738.0 -
alizar 590.0 -
m1rko 449.6 -
zzeng 433.0 -
anastasiak2512 422.0 -
qrdl 411.0 -
tyomitch 405.2 -
VlK 388.0 -
Firemoon 371.8