Pull to refresh
145
11.2
Александр Рябиков @rsashka

Системный архитектор

Send message

Вы тоже заказываете платы, компоненты и всячину здесь?

Reading time11 min
Views7.1K

Что такое коллективный экспресс (7$/кг) и как его использовать?

Почему с 45$/кг бывает дешевле, чем с 23$/кг?

Как заказать компоненты/всячину с сайтов JLC (jlcfa, lcsc, jlcpcb, …)?

С 1688, Тао бао и других китайских площадок?

Привезти из Европы, США (Маузера, Диджикея и т. д.)?

Где платы с размерами >100х100 мм будут дешевле?

Надеюсь, продуманная навигация по статье и таблицы помогут быстро найти и сравнить полезную информацию.

Читать далее

Программируем квадрокоптер на STM32

Level of difficultyEasy
Reading time8 min
Views14K

Данный проект представляет собой систему стабилизации квадрокоптера на базе микроконтроллера STM32F411, реализованную на языке C. Включает обработку данных с датчиков (акселерометр, гироскоп), PID-регуляторы для управления моторами и алгоритмы фильтрации. Подходит для образовательных целей и DIY-проектов.

Читать далее

О контроллере батареи ИБП (часть 2)

Level of difficultyMedium
Reading time6 min
Views5.1K

О сколько нам открытий чудных
...

Судя по результатам голосования и комментариям к предыдущей статье, к вопросу контроля АКБ у самых простых ИБП есть некоторый интерес. Данная статья - продолжение данной темы.

Сейчас прототип собран на макетной плате (токовый шунт к которому подключено два АПЦ). Измеритель напряжения и тока INA3221, как рекомендовали в комментариях, я решил не использовать, так как дискретность его измерения 8мВ сравнима с дискретностью 12-ти битного АПЦ в обычном микроконтроллере (для ESP32 получается точность измерения около 6мВ).

Читать далее

Встреча ISO C++ в Софии: С++26 и рефлексия

Reading time9 min
Views11K


Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса, и сейчас я расскажу о софийской встрече Международного комитета по стандартизации языка программирования C++, в которой принимал активное участие. Это была последняя встреча, на которой новые фичи языка, с предодобренным на прошлых встречах дизайном, ещё могли попасть в C++26.

И результат превзошёл все ожидания:
  • compile-time-рефлексия
  • рефлексия параметров функций
  • аннотации
  • std::optional<T&‍>
  • параллельные алгоритмы


Об этих и других новинках расскажу в посте

Лаконичный макрос defer для C++17

Level of difficultyMedium
Reading time5 min
Views6.3K

Ручное управление ресурсами в низкоуровневом си-подобном коде на C++ — довольно хлопотное занятие. Создание достойных RAII-врапперов для каждого используемого сишного API не всегда практично, а использование подходов с goto cleanup или множеством вложенных if (success) вредит читаемости кода.

Макрос defer как никогда кстати! Отложенная лямбда будет выполнена при выходе из области видимости, независимо от того, будет ли выполнен return, брошено исключение, или даже выполнен goto наружу. Данный макрос по-настоящему zero-cost и не зависит от рантайма C или стандартной библиотеки, поэтому его можно использовать даже в разработке под ядро ОС.

Читать далее

О контроллере батареи ИБП (вопрос к читателям Хабра)

Level of difficultyEasy
Reading time3 min
Views3.6K

Среди ИТ специалистов ходит анекдот, что системные администраторы делятся на 10 категории, на тех кто пока не делает бэкап, и на тех, кто уже делает резервное копирование данных. А так как самой частой причиной отказов в ЦОДах является – сбой электропитания, то обеспечение надежного электрического питания для компьютера (да и для любой другой цифровой техники) является наиглавнейшей задачей.

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

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

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

Некоторое время настрадавшись с подключением UPS по USB с помощью проприетарных программ, я решил разобраться с данной проблемой кардинально - сделать простенький контроллер состояния батареи источника бесперебойного питания со стандартным протоколом связи ИБП, который бы подошел для любого типа и модели источника бесперебойного питания при использования дома или в небольшом офисе.

Читать далее

Лучшие психологи Москвы: мой опыт работы с 5 топовыми специалистами и честный рейтинг

Level of difficultyHard
Reading time16 min
Views4.1K

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

Читать далее

Когда Рим стал Византией

Reading time21 min
Views22K

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

Читать далее

Senders/Receivers в C++26: от теории к практике

Level of difficultyMedium
Reading time16 min
Views6.2K

Каждому C++-разработчику приходится решать задачи асинхронности — от сетевых запросов до фоновых вычислений. В этой статье вы увидите, как P2300-модель Senders/Receivers в C++26 расширяет возможности std::async/std::future и позволяет строить ясные, декларативные конвейеры (then, when_all, upon_error и др.).

Читать далее

Пишем код… работа? Услуга? Авторский труд?

Reading time5 min
Views624

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

Кому это вообще надо?!
Если быстро и коротко – всем! Довольно обыденной является ситуация, когда для всех заказчиков используется один и тот же договор в независимости от задач, которые предполагается выполнять по нему. У кого-то это договор на выполнение работ, у кого-то договор на оказание услуг, реже договор о создании программы для ЭВМ, авторского заказа и т.п.

Читать больше...

Разработка отладочной платы на микроконтроллере К1921ВГ015

Level of difficultyMedium
Reading time6 min
Views11K


Приветствую, Хабр!

Как я уже писал ранее, я не удержался и приобрел микроконтроллер К1921ВГ015. Так как пожеланий по отладочной плате после моей статьи почти не поступило, решил выжать из контроллера все по максимуму. Хотелось получить макет сразу с хорошим набором интерфейсов. Как мне показалось, это будет интереснее, чем голая плата с питанием и штыревыми разъемами.
Читать дальше →

Делаем собственный анализатор C++ кода в виде плагина для Clang

Level of difficultyMedium
Reading time11 min
Views4.9K


Есть много проектов, целью которых является превратить С++ более "безопасный" язык программирования. Но внесение изменений в синтаксис языка обычно нарушает обратную совместимость со старым кодом, который был написан до этого.


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


Но данная статья не о библиотеке, а об особенностях разработки анализатора программы на С++ в виде плагина для Clang.


Можно считать, что это подведение итогов по результатам сравнения нескольких разных способов создания плагина для компилятора С++, а так же очередной Хабрахак для хранения результатов экспериментов и публикации итоговых выводов, которые я решил сохранить не только для себя, но и в виде статьи на Хабре, что бы результатами моего труда могли воспользоваться и другие хорошие люди :-), которым так же может потребоваться погрузиться в дебри парсинга исходного текста программ.

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

Как легко получить отрицательное напряжение для питания ОУ?

Level of difficultyEasy
Reading time3 min
Views9.2K

Простая схема получения отрицательного напряжения для вспомогательного питания на одном P канальном транзисторе и индуктивности.

Читать далее

Я устал возиться с кучей VPN и поставил Xray на роутер

Level of difficultyMedium
Reading time5 min
Views139K

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

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

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

Читать далее

Можно ли навсегда избавиться от утечек памяти из-за циклических ссылок?

Level of difficultyMedium
Reading time3 min
Views5.3K


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


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


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


Но мне кажется, что есть очень простой способ устранить циклические ссылки в программе, который можно реализовать практически в любом типизированном языке программирования, конечно, если при этом не использовать все разрешающее ключевое слово unsafe для Rust или оператор reinterpret_cast в случае С++.

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

Can we guarantee that there will be no memory leaks due to circular references?

Level of difficultyEasy
Reading time4 min
Views736


The most common types of software bugs are memory management bugs. And very often they lead to the most tragic consequences. There are many types of memory bugs, but the only ones that matter now are memory leaks due to circular references, when two or more objects directly or indirectly refer to each other, causing the RAM available to the application to gradually decrease because it cannot be freed.


Memory leaks due to circular references are the most difficult to analyze, while all other types have been successfully solved for a long time. All other memory bugs can be solved at the programming language level (for example, with garbage collectors, borrow checking or library templates), but the problem of memory leaks due to circular references remains unsolved to this day.


But it seems to me that there is a very simple way to solve the problem of memory leaks due to circular references in a program, which can be implemented in almost any typed programming language, of course, if you do not use the all-permissive keyword unsafe for Rust or std::reinterpret_cast in the case of C++.

Read more →

Визуализация быстрой сортировки с SFML и C++20

Reading time4 min
Views4.2K

В этой статье мы создадим интерактивную визуализацию алгоритма быстрой сортировки (QuickSort) с использованием библиотеки SFML и современных возможностей C++20. Этот проект поможет вам лучше понять, как работает один из самых популярных алгоритмов сортировки, и покажет, как можно комбинировать графику и алгоритмы для создания образовательных инструментов.

Читать далее

О формальном доказательстве безопасной работы с памятью на основе «владения и заимствования»

Level of difficultyMedium
Reading time6 min
Views3K


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


Я не являюсь специалистом по Rust, но после просьбы помочь разобраться этим вопросом, был переадресован искать эту очевидную информацию самостоятельно, так как "джентльменам верят на слово". Тогда как косвенным подтверждением моего предположения об отсутствии формального доказательства в общем виде, является тот факт, что отсутствует и полный список разрешающих и/или запрещающих проверок, которые реализованы в самом компиляторе языка.


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

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

Миф о доказательном программировании без ошибок

Level of difficultyEasy
Reading time3 min
Views3.4K


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


А возможно ли вообще писать программы без ошибок?

Читать дальше →
1
23 ...

Information

Rating
1,070-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
C++
OOP
Linux
Programming microcontrollers
Embedded system
C
Qt
Software development