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

Пользователь

Отправить сообщение

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

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

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

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

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

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

Читать далее

Библиотека EremexControls.NET для Avalonia UI — Обновление июль-август 2024

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

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

Читать далее

Разработка сложных процессорных систем на примере модуля SMARC. Продолжение

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров6.6K
Приветствую, Хабр!



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

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

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

Как обойти патент

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

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

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

Читать далее

Основы контейнеризации (обзор Docker и Podman)

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

Привет, Хабр!

К 2022 году о контейнеризации не слышал только ленивый. Большинство специалистов, так или иначе имеющих отношение к ИТ, хотя бы раз в жизни запускали программное обеспечение в контейнерах. Однако так ли эта технология проста и понятна? Давайте разбираться вместе!

Главная задача данной статьи – рассказать о контейнеризации, дать ключевые понятия для дальнейшего изучения и показать несколько простых практических приемов. По этой причине (а еще, безусловно, вследствие недостаточной квалификации автора) теоретический материал достаточно упрощен.

Читать далее

Эмиттерный повторитель — ключ к пониманию работы транзисторных каскадов

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


Привет, эту публикацию я хочу посвятить людям, кто, как и я, любил в детстве читать журнал «Радио» и книги по электронике, но не смог сам разобраться в принципах работы усилителей на биполярных транзисторах. Тема полупроводников непроста и требует понимания многих чуждых для нашей повседневной интуиции физических процессов. Я помню момент озарения, когда я понял принцип схемотехнического решения эмиттерного повторителя, и именно с него пошло постепенное понимание, как функционируют и другие типы транзисторных каскадов. И я предполагаю, что эта тема может стать точкой входа в аналоговую электронику не только для меня.
Читать и смотреть схемы

Вычисление любого математического выражения в C# (.NET)

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

Для улучшения возможностей научных вычислений в C# я реализовал evaluator, способный вычислять любое математическое строковое выражение с исключительной производительностью. Он также поддерживает пользовательские переменные, операторы и функции. Библиотека .NET под названием MathEvaluator и её документация доступны на GitHub.

Для достижения высокой производительности при вычислении математических выражений используется сочетание современных возможностей .NET и эффективных алгоритмов.

Читать далее

Сглаживание битовых изображений

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

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

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

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

Читать далее

Погружение в матрицу: расширение RISC-V от T-Head

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

Продолжим нашу «антологию матричных расширений» текстом про независимое матричное расширение RISC-V от компании T-Head. 

Почему мы рассматриваем именно его? Интересно понять, что из себя представляет будущее стандартное матричное расширение RISC-V, попробовать реализовать алгоритм с его использованием, соотнести это со своим предыдущим опытом низкоуровневых оптимизаций. Кроме того, это интересная возможность попробовать написать программу для расширения, которого еще нет ни в одном процессоре, и запустить ее на эмуляторе.

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

Начать погружение

BitImageTool — пиктограммы для кнопок и панелек приложений, закодированные в ASCII

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

Статья о том, как легко делать графические кнопки для панелей инструментов, не таская за приложением гору бинарных ресурсов с картинками. Этот метод платформонезависимый и может быть использован в различных языках и средах, позволяющих работать с графикой и растровыми изображениями. Ниже приводятся примеры для C# (WinForms / WPF), JavaScript, Python.

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

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

Читать далее

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

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

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

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

3D-редактор


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

Интерполяция: рисуем плавные графики с помощью кривых Безье. Версия 2

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

Доброго времени суток, харбачитатель.

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

Читать далее

Чем заменить Docker Hub в России

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

Не так давно все наблюдали блокировку Docker Hub в РФ, которая длилась с 30 мая по 3 июня. Хотя сейчас Docker Hub вновь доступен, я успел разработать некоторую автоматизацию для переноса всех своих проектов и решил ими поделиться (пускай и очень поздно). В этом посте я расскажу как жить с блокировкой и как быстро перевести текущие проекты, использующие Docker Hub.

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

Как я улучшил производительность JSON-парсера в два раза

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

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

Читать далее

Щупаем первый 8-битный процессор от Intel — 8008

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

После того как я собрал систему на самом первом процессоре от Intel (4004), логичным, в каком-то смысле, шагом было перейти к Intel 8008. Концепция проекта та же - компилируем ассемблерный код на обычном ПК, отправляем скомпилированный бинарник на системную плату через USB, а современный микроконтроллер (stm32) эмулирует ПЗУ и ОЗУ для реального 50-летнего процессора, вставленного в DIP-сокет.

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

Так же как и в случае с 4004, моя плата эмулирует максимально возможный объем памяти, который нативно адресуется процессором. В данном случае, это 16Кб с некоторыми нюансами (об этом отдельно расскажу ниже).

И, конечно же, было занятно сравнить 4004 и 8008 в небольшой нишевой задачке. Да, сравнение весьма условное и какие-либо выводы по нему сделать сложно, но всё равно результаты вышли интересными.

Читать далее

Вычисляем π на первом процессоре от Intel — 4004

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

Как-то мне пришла в голову мысль о том, насколько же быстрее современные процессоры по сравнению с ранними экземплярами. Да, можно размышлять об этом эмпирически - зная тактовую частоту и особенности микроархитектуры (как устроен конвейер, сколько есть ALU, и т.д.), можно прикинуть производительность Intel 4004. Пусть и не в FLOPS'ах, ибо нативная поддержка чисел с плавающей запятой появилась позже. Но это будет весьма грубая прикидка, так как у этого процессора есть несколько интересных черт: разрядность только 4 бита (а не 64, как у большинства современных машин), очень скудный набор инструкций (нет даже AND'a и XOR'a!) и ограничения переферии (в частности памяти не так уж и много).

Поэтому я решил исследовать вопрос на практике. В качестве бенчмарка выбор пал на вычисления числа π. В конце-то концов, даже ENIAC в дремучем 1949 году справился с этой задачей! [2]

Читать далее

Разработка сложных процессорных систем на примере модуля SMARC

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

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

Я решил описать некий шаблон (скорее один из), который, возможно, кому-то поможет в проектировании многослойных плат. Если мы говорим конкретно о разработке, то она включает в себя несколько этапов. Я буду писать об одном цикле — от получения технического задания, до передачи герберов на производство печатных плат. Затрону подготовку задания на согласование импедансов, так как это важно с самого начала трассировки. Сознательно не буду говорить о выборе компонентов, выгрузке конструкторской документации, поиске и исправлении ошибок после сборки плат и т. д.

Статья получилась большая, но, как говорится, из песни слова не выкинешь. Если вам все еще не страшно — добро пожаловать под кат!
Читать дальше →

PROTEQ — протокол обмена по мультигигабитным линиям для ПЛИС Xilinx

Время на прочтение17 мин
Количество просмотров8.1K
Современные ПЛИС содержат мультигигабитные линия связи и существует большое количество протоколов для обмена. Однако при ближайшем рассмотрении применять стандартные протоколы в ПЛИС не всегда удобно. Например для ПЛИС Xilinx доступны реализации PCI Express, RapidIO, Aurora; У каждого из них есть недостатки. PCI Express и RapidIO работают с кодировкой 8/10 что сразу ограничивает пропускную способность. Aurora может работать с кодировкой 64/66 но не обеспечивает восстановление данных после сбоя. С учётом недостатков стандартных протоколов и особенностей применения я решил реализовать свой протокол обмена.
Читать дальше →

Насколько быстр Javascript? Симулируем 20 миллионов частиц

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

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее

Основы работы с файлами и потоками в C#

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

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

В этой статье мы рассмотрим основы работы с файлами и потоками в C#.

Читать далее

Информация

В рейтинге
3 193-й
Зарегистрирован
Активность