Как стать автором
Обновить
74.64

C *

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

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

Компиляция моделей МО в С

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

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

Недавно у меня состоялся приятный разговор с моим другом Крисом. Он познакомил меня с основами машинного обучения, когда я разбирал написанный Андреем Карпаты micrograd.

Для тех, кто не знает, micrograd – это небольшая реализация нейронной сети, написанная на чистом Python без библиотек, в которой вычислительными единицами выступают не векторы и матрицы, а скалярные величины.
Читать дальше →
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 0

Новости

Cross-Detect для Проверки Качества Пайки в Электронных Цепях

Уровень сложности Средний
Время на прочтение 27 мин
Количество просмотров 3.5K
Туториал

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

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

Для этого нужна какая-то технология. Назовем её Cross-Detect.

Читать далее
Всего голосов 21: ↑16 и ↓5 +11
Комментарии 124

Библиотека libopencm3: Быстрый старт (Часть 2). Работа с GPIO, SPI, отладка проекта при помощи GDB

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

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

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 6

Пишем компилятор C в 500 строках Python

Уровень сложности Средний
Время на прочтение 20 мин
Количество просмотров 9.7K
Обзор
Перевод

Несколько месяцев назад, закончив пост об SDF-пончике, я поставил перед собой задачу написать компилятор C в 500 строках Python1. Насколько сложна эта задача? Оказалось, что довольно сложна, даже после отказа от достаточно большого количества возможностей. Но в то же время она была довольно интересной, а результат оказался на удивление функциональным и вполне простым для понимания!

Кода слишком много, чтобы подробно объяснять его в посте2, поэтому я просто вкратце расскажу о принятых мной решениях, об аспектах, которые пришлось вырезать, и об общей архитектуре компилятора, коснувшись самого главного в каждой из частей. Надеюсь, после прочтения поста код станет для вас доступнее!
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 6

Истории

Создаем проект STM32 C++ FreeRTOS в vscode для очень маленьких

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

Жил себе спокойно, писал кодик в Keil и не парился. Писал изначально на СИ, но кода становилось все больше, а я все ленивее, перешел на С++ и ARM Compiler V6,19. Но пришел к тому что простых прерываний в таймере стало не достаточно, даже можно сказать не правильный подход. Задался желанием подключить какую-нибудь ОС. Выбор пал на FreeRTOS. Довольный, скачиваю операционку, подтягиваю файлы к проекту на плюсах, и получаю кучу ошибок. Попытка их устранить не увенчалась успехом. Вспомнил что есть CubeMX и там можно сгенерировать проект с уже подключенным freertoos. Проверил, 5-ым компилятором и языком СИ, проект отлично собирается, но как только переименовываем main.c в .cpp и выбираем компилятор 6,19, получаем кучу ошибок на ядро ОС, на определение inline и т.п. Так я и не смог подружить подружить ОС и C++ в Keil. Пришлось заменить среду разработки, изначально выбор пал на CubeIDE, все отлично дружится и собирается, но в душе оставались сомнения. В итоге финальным выбором стал vscode, далее опишу как создать проект именно в нем.

Здесь на сайте уже есть статьи по сборке проекта, ими и руководствовался, но пошел немного другим путем.

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 4

Взлом предка Sims для Amiga

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

В этом посте я расскажу о том, как выполнил частичный реверс-инжиниринг файлов данных Little Computer People, чтобы включить опции конфигурации, недоступные в оригинальной игре. Я написал и выпустил инструмент, работающий с LCP для Amiga, который можно скачать в конце поста.

Little Computer что?

В 1985 году на самых популярных 8-битных домашних компьютерных системах (и Atari ST) была выпущена «игра» под названием «Little Computer People», а через два года появилась версия и для Amiga. Сюжет игры заключается в том, что внутри вашего компьютера живёт маленький человечек, и это ПО позволяет вам следить за его действиями и взаимодействовать с ним. Если вы незнакомы с LCP, в Википедии есть хорошая статья о ней, которую стоит прочитать.

Уилл Райт (дизайнер The Sims) сказал, что игра в LCP и общение с одним из создателей LCP (Ричем Голдом) помогли ему в разработке концепций The Sims, и одно это делает LCP важной вехой в истории ПО.

Для многих людей LCP была скучной игрой. Считалось, что никто не захочет следить за жизнями персонажей на экране. Думаю, наблюдая за успехом франшизы The Sims и бесконечных реалити-шоу, можно с полным правом сказать, что это мнение было совершенно ошибочным. Возможно, LCP просто опередила своё время?

Читать далее
Всего голосов 19: ↑19 и ↓0 +19
Комментарии 0

Техникум: Конечный Aвтомат Обработки Сигнала с Кнопки

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

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

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

Очевидно, что firmware должно как‑то однозначно распознавать тип нажатия на кнопку; короткое долгое.

Можно очень красиво и элегантно решить эту задачу прибегнув к конечно автоматной методологии разработки программного обеспечения.

Читать далее
Всего голосов 15: ↑12 и ↓3 +9
Комментарии 83

Написание компилятора C в 500 строк Python

Уровень сложности Средний
Время на прочтение 24 мин
Количество просмотров 14K
Туториал
Перевод

Компилятор C на 500 строк Python? Почему бы и нет? Это сложно, даже если отказаться от многих функций. Но, в то же время, это ужасно интересно, а результат оказался на удивление функциональным и несложным для понимания!

Читать далее
Всего голосов 35: ↑32 и ↓3 +29
Комментарии 0

Отслеживание изменения температуры в помещении при помощи ультразвука

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

До недавних пор для проведение подобных измерений требовалось использовать промышленные приемники/передатчики ультразвука. Только они могли дать приемлемую точность и дальность. Но они были слишком большие и дорогие. Использовать дешевые китайские модули, такие как HC-SR04/US-025, не выйдет. Точность, стабильность, повторяемость результата оставляет желать лучшего.

Ситуацию изменило появление нового чипа CH-201. Его основная проблема заключается в том, что он китайский. Я еще не видел китайский чип с хорошей документацией и хорошей службой поддержки.

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

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 16

Программирование для Palm OS: что же там самое сложное?

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 4.1K
Туториал
Приветствую всех!

Думаю, многие из нас хоть раз слышали о КПК на базе Palm OS. А некоторым даже довелось иметь такой в использовании.

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



Итак, в сегодняшней статье поговорим о самом специфическом аспекте разработки под такие КПК. Разберёмся, что же было предметом дискуссий о целесообразности программирования для пальм, узнаем, насколько всё сложно. Традиционно будет много интересного.
Читать дальше →
Всего голосов 42: ↑42 и ↓0 +42
Комментарии 7

Собираем и запускаем калькулятор из Windows XP в среде Windows 10 c помощью GCC x64

Уровень сложности Сложный
Время на прочтение 63 мин
Количество просмотров 11K
Туториал

Привет всем.

В данной статье мы немного проанализируем код Windows XP, a также соберем калькулятор c использованием GCC x64 в среде Windows 10. Будут показаны ошибки, с которыми я столкнулся в процессе сборки и подробно расписаны способы их решения. В конце будет продемонстрирован рабочий билд приложения calc.exe.

Всем приятного прочтения!

Читать далее
Всего голосов 98: ↑98 и ↓0 +98
Комментарии 48

Ква! Как писали код во времена Quake

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

Как говорил Джон Кармак: "Фокус — это умение определить, на что вы не будете тратить время". Так давайте не будем тратить время на аннотацию и приступим к анализу кода легендарной Quake World.

Погнали!
Всего голосов 34: ↑31 и ↓3 +28
Комментарии 33

Веб-консоль для загрузчика U-Boot

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 6.4K
Туториал

В данной статье я расскажу, как совместил U-Boot и TCP/IP стек LWIP, и c использованием LWIP написал веб-консоль на WebSocket, очень простой DHCP-сервер и HTTP-сервер. Код лежит на репозиториях U-Boot и LWIP.

Читать далее
Всего голосов 72: ↑72 и ↓0 +72
Комментарии 15

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

Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Joker
Дата 9 – 14 октября
Время 16:00 – 19:30
Место Санкт-Петербург Онлайн
Открытый урок «Kafka Streams»
Дата 16 октября
Время 10:00
Место Онлайн
Питч-сессия pravo (tech) impulse
Дата 19 октября
Время 15:45 – 17:30
Место Москва
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн
Онлайн IT HR-конференция HR42
Дата 17 – 18 ноября
Время 10:00 – 14:00
Место Онлайн
HighLoad++ 2023
Дата 27 – 28 ноября
Время 9:00 – 20:00
Место Москва Онлайн

Техникум: Распознавание Вещественного Числа из Строчки

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

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

Потом часто надо анализировать текстовые логи с SD-карты. Надо выхватывать вещественные числа из CSV файлов для дальнейших расчетов.

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

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

Читать далее
Всего голосов 25: ↑18 и ↓7 +11
Комментарии 85

Варим C с компилятором Zig и его build.zig

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

По случаю выхода версии 0.11.0 языка Zig я решил написать ещё одну статью о языке Zig. В этот раз речь пойдет о системе сборки языка. А точнее, как пользоваться кодом написанным на языке C в проекте на языке Zig, с небольшими ответвлениями в стороны для описания некоторых возможностей системы сборки. Тем более, что она претерпела несколько изменений, о чём я так же коротко упомяну. Эксперименты проводились мной на Windows 11. Стоит сразу упомянуть, что указанные в статье команды будут работать и на других операционных системах. Это одна из особенностей языка Zig. Но пример кода линковки системных библиотек для сборки библиотеки raylib будет платформозависимый, так как для разных платформ набор библиотек отличается. Если интересно, то прошу...

пройти во внутрь
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 29

Распространённые паттерны опечаток при программировании

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

Распространённые паттерны опечаток при программировании


Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты. Поговорим о коде, который "притягивает" опечатки.


На чём основаны наблюдения


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


Рассматривая все эти ошибки, я постепенно замечаю различные повторяющиеся паттерны опечаток. За редким исключением они не зависят от языка программирования. По крайней мере, они одновременно свойственны коду, написанному на C, C++, C#, Java. В этой статье я опишу 7 паттернов, которые заметил к настоящему моменту:


  1. Эффект последней строки.
  2. Злополучная функция memset.
  3. Неверные функции сравнения.
  4. Неверные функции копирования.
  5. Ошибки работы с датами и временем.
  6. Несчастливые числа: 0, 1, 2.
  7. Ошибка на единицу (off-by-one error).

Заметность закономерностей в ошибках свидетельствует о том, что они крайне распространены. Полезно знать о них, чтобы избегать написания потенциально опасного кода или более эффективно находить их в процессе обзоров кода. Другим словами, вы узнаете, какой код притягивает ошибки, и будете более внимательно его проверять. Конечно, PVS-Studio способен выявить многие подобные ошибки, но не все. Поэтому дополнительное внимание не повредит.

Читать дальше →
Всего голосов 42: ↑41 и ↓1 +40
Комментарии 23

Load-Detect для Проверки Качества Пайки

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

Как вы думаете зачем в микроконтроллерах есть функция pull-up/pull-down, если можно просто воспользоваться установкой логического уровня push-pull?

Вот типичная ситуация. Вам принесли электронную плату с производства. Крайне вероятно, что на PCB есть какие-то аппаратные баги. Обычно это короткие замыкания на GND/VCC или вовсе непропай.

Как выявить и найти эти бракованные пины?

Вот тут-то нам и помогут подтяжки к питанию/земле на пинах MCU.

Называется эта тема load-detect.

В этом тексте я подробно написал про то, как работает load-detect под капотом.

Читать далее
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 36

Графическое программирование конечных автоматов для Arduino. Часть 2

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

Продолжая тему применения конечных автоматов в Arduino, расширим представления о возможностях программного комплекса V2S. На сей раз используем классику - задачу управления светофором. С аппаратной точки зрения, это три светодиода, подключенных к свободным пинам микроконтроллера, но вот с программной все гораздо интереснее...

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 6

Неопределённое поведение в C/C++ и приёмы против лома

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

Некоторое время назад в Интернете ходила статья о неопределённом поведении, просто бесившая коренную аудиторию Rust. Завсегдатаи С и C++ в ответ только бурчали, что кто-то просто не понимает Всех Тонкостей и Нюансов Их Светлейшего Языка. Как обычно, пришло время и мне постараться изо всех сил и вставить мои пять копеек в эту застарелую дискуссию.

Готовьтесь поговорить об Основной Проблеме языков C и C++, а также о Принципе Лома.

Читать далее
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 71

Разрабатываем свой браузер. Часть вторая: CSS

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


Всем привет!


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


Да, лучше поздно, чем никогда. Да, перерыв был большой.


В конце статьи я опишу, как поживает проект lexbor, что с ним происходит.


В этой статье я постараюсь раскрыть особенности парсинга Cascading Style Sheets (CSS). Расскажу, как вывернуть «ежа» наизнанку и как тестировать полученный результат.


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


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


И конечно, как это обычно бывает, мы замахнёмся на звание самого быстрого парсера CSS.

И так, начнём!
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 1

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

Работа

Программист С
58 вакансий