Search
Write a publication
Pull to refresh
30
0
Сергей Сахно @Punk_Joker

Software engineer

Send message

Абсолютный поворотный энкодер с однодорожечным кодом Грея

Reading time2 min
Views19K
В этом материале речь пойдёт о физической реализации абсолютного поворотного энкодера. Разрешение этого энкодера составляет 6 градусов, то есть — 60 шагов. Этого достаточно для того чтобы сделать на его основе часы. Здесь используется одношаговый код Грея.


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

gentoo: миграция с eudev на mdev

Reading time3 min
Views3.2K

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


!!! The following installed packages are masked:
- sys-fs/eudev-3.2.10-r1::gentoo (masked by: package.mask)
/var/db/repos/gentoo/profiles/package.mask:
# Mike Gilbert <floppym@gentoo.org> (2021-11-27)
# eudev will be removed on 2022-01-01.
# Please see the news item published on 2021-08-24 for more information.

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

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

Храним настройки правильно или реестр параметров для встраиваемых систем

Reading time26 min
Views9K

Привет, Хабр! В нашей практике разработчиков электронных устройств и встраиваемых систем мы часто сталкиваемся с необходимостью хранить параметры устройства. Это могут быть, например, такие параметры как яркость дисплея, язык, рабочая частота радиоканала или IP адрес – да что угодно. Единого общепринятого подхода для решения этой задачи нет, и я предлагаю обсудить ниже наиболее очевидные варианты, их достоинства и недостатки, а также предложить реализацию, к которой я пришел в результате работы над несколькими проектами. Поехали!

Читать далее

Почему Proxyman — сын маминой подруги в мире снифферов

Reading time6 min
Views23K

Всем привет, меня зовут Катя, я QA Engineering Manager в inDriver. В этой статье расскажу про свой опыт использования Proxyman, а также о том, почему считаю его лучшей программой-сниффером. Приятного чтения!

Читать далее

PA — Pointer Authentication на ARMv8.3: устройство инструкций защиты

Reading time5 min
Views3.4K

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

Читать далее

Embedded Linux. Отладка ядра

Reading time5 min
Views9.6K

В предыдущих статьях описано, как мы учились дебажить загрузчик u-boot: 1, 2. С ядром все оказалось сложнее. Например, выяснилось, что ядро Linux в принице невозможно скомпилировать с отключенной оптимизацией (-O0). В статье описывается как нам все таки удалось запустить ядро на микропроцессоре ARM в режиме пошаговой отладки.

Читать далее

Страх и ненависть в RouterOS: что такое сетевое соединение в ядре Linux (часть 3 — NAT и сетевые соединения)

Reading time6 min
Views15K

В статье рассмотрено понятие «соединение» для TCP и UDP протоколов в ядре операционной системы Linux на примере работы оборудования MikroTik. Дополнительно рассматриваются особенности работы технологии NAT в указанном контексте. Материалы носят в основном теоретический характер и предназначены для людей, тонко настраивающих Firewall, Qos и маршрутизацию, где им придется непосредственно работать с рассматриваемыми connections.

Мы уже рассмотрели теоретическую части , где я подробно описал сущность сетевого соединения глазами ядра маршрутизатора. Далее была практическая части, где я закрепил информацию, в результате рассмотрения работы прикладного протокола DNS через подсистемы RouterOS.

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

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

Углубленное знакомство с пространствами имен Linux. Часть 1

Reading time19 min
Views38K

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

О реализации индикатора батареи в устройствах на МК

Reading time5 min
Views14K

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

В статье описывается простая реализация индикатора разряда, лишенного этого недостатка.

Читать далее

Осваиваем кросс-компиляцию с помощью Clang и LLVM

Reading time21 min
Views28K

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

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

ARM Cortex M* — сколько «весит» примитив?

Reading time3 min
Views8.6K

Промышленное проектирование алгоритмов для бюджетных микроконтроллеров stm32, как правило, учитывает время выполнения критических участков программы.

Ожидаемое время выполнения машинной команды на процессорах с архитектурой RISC — один такт. Так же очевидно, что даже простейшие операторы языка "C", после перевода в двоичный, машинный код, требуют больше времени, чем один такт.

Вопрос: "Больше, чем один такт" — это сколько?

Читать далее

Git ls-files в 5 раз быстрее fd и find. Тесты под катом

Reading time7 min
Views3.6K

Автор материала изменил инструмент перечисления файлов в NeoVim с fd на git ls-files и заметил, что файлы отображаются быстрее. При этом цель fd — скорость, а Git — это прежде всего система управления исходным кодом, её основная задача — не в перечислении файлов. Интрига заставила провести тесты.

Делимся подробностями и набором разнообразных инструментов в арсенале автора, пока начинается курс по Fullstack-разработке на Python.

Читать далее

Страх и ненависть в RouterOS: что такое сетевое соединение в ядре Linux (часть 1 — теория)

Reading time6 min
Views37K

В статье рассмотрено понятие «соединение» для TCP и UDP протоколов в ядре операционной системы Linux на примере работы оборудования MikroTik. Дополнительно рассматриваются особенности работы технологии NAT в указанном контексте. Материалы носят в основном теоретический характер и предназначены для людей, тонко настраивающих Firewall, Qos и маршрутизацию, где им придётся непосредственно работать с рассматриваемыми connections.

В этой части статьи подробно описана сущность сетевого соединения глазами ядра маршрутизатора. В практической части закрепим информацию в результате рассмотрения работы прикладного протокола DNS через подсистемы RouterOS. В заключительной части речь пойдёт о диаграмме потока пакетов, при работе с которой важно понимать сущность рассматриваемого сетевого соединения, а также о не документированной в явном виде особенности работы NAT. Материала достаточно много, и чтобы читатель не потерял смысловую нить к концу статьи, она разделена на 3 части: теория, практика и особенность NAT.
Цикл статей не предназначен для новичков и может их только запутать. Полагаю, что читатель хорошо знаком с предметом разговора.
Читать дальше →

Базовые концепции аллокаторов

Reading time10 min
Views19K

Находясь в поисках какой-то агрегированной информации о стандартных приёмах, используемых при проектировании кастомных аллокаторов, я обнаружил, что существует достаточное количество статей о том, как аллокаторы работают в C++, каких-то базовых вариантах или наоборот очень специфических версиях, но ничего достаточно общего. Попался только замечательный доклад замечательного Андрея Александреску про неправильную архитектуру std::allocator и собственно базовые концепции построения своего нового самого крутого в мире аллокатора. Эта статья является довольно вольным переводом второй части его выступления с моими небольшими дополнениями. Конечно же, категорически рекомендую посмотреть оригинальный доклад, но, если вы любитель текстовых версий, прошу под кат.

Выделить знания...

Другой взгляд на многопоточность

Reading time7 min
Views23K

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

Читать далее

Как распутать уроборос роутинга в Linux

Reading time7 min
Views14K
image

Описание проблемы


Ситуация: у нас имеется один интерфейс eth0, «смотрящий» в интернет, с IP-адресом 192.168.11.11/24 и шлюзом 192.168.11.1. Нам нужно организовать интерфейс vpn0, который будет через VPN соединяться с неким сервером, и весь исходящий с этой машины трафик должен идти через этот интерфейс vpn0.

Примечание: я оставляю за скобками детали работы с IPv6, поскольку там хватает своих особенностей. Рассматривается только ситуация с IPv4.

Итак, мы берём в руки программу для подключения в VPN-у — она соединяется с неким VPN-сервером по адресу 10.10.10.10 и поднимает нам интерфейс vpn0 например с таким адресом: 192.168.120.10/24, шлюз 192.168.120.1. Казалось бы, всё хорошо, пинги через vpn0 ходят, коннект есть, он стабильный, осталось только прописать нечто вроде

ip route add default dev vpn0 metric 1000

чтобы перенаправить все соединения через новый интерфейс и…

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

Что случилось?

Использование git pw клиента для patchwork

Reading time4 min
Views1.2K

При bleeding edge разработке или просто в рамках экспериментов, приходиться добавлять патчи прямиком из maillists.

Скачивать серию вручную и сохранять в mbox можно действительно озвереть, даже не смотря на то, что можно спокойно выделить патчи (например в mutt) по одному и сохранить всю пачку (ключевое слово здесь спокойно).

Тем у кого горит, предлагаю воспользоваться git-pw.

Читать далее

Специализированная СХД как средство оптимизации IoT-данных

Reading time7 min
Views1.1K

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

От автоматизированных цепочек поставок и систем по поддержанию социального дистанцирования до более ресурсоэффективных и удобных «умных» городов и транспортных средств — пространство интернета вещей (IoT) росло огромными темпами, и параллельно с этим увеличивался объем создаваемых данных. По прогнозам, к 2025 г. IoT-устройствами будет сгенерировано 73,1 зеттабайта данных.

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

Читать далее

Про поворотный стол, или Релейная логика глазами дилетанта

Reading time8 min
Views8.1K

Попросили меня как-то друзья помочь с программированием контроллера поворотного стола для фотографирования. Эти столы используются для круговой съёмки. Часто результат такой съёмки можно видеть в интернет-магазинах, когда товар можно покрутить и рассмотреть с разных сторон.

Как сделать фото 360°? Можно поставить объект на поворотную платформу, затем вручную перемещать её на определённый угол и щёлкать затвором фотоаппарата. Но лучше этот процесс автоматизировать.

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

Дело для меня совершенно новое. Я никогда не занимался АСУ, с релейно-контактной логикой незнаком, про ПЛК не слышал. Ну что ж, тем интереснее будет разобраться, что такое релейная логика и что представляют из себя языки LD (Ladder Diagram) и IL (Instruction List).

Читать далее

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity