В свежий clippy затянули линт "precedence", который рекомендует ставить скобки для операторов сдвига, потому что они имеют более низкий приоритет.
Это - фактически калька с -Wparentheses из C++11. Причем я совершенно точно помню, что 25 лет назад меня в универе какой-то препод-надмозг учил, что шифты имеют приоритет выше арифметики, но придя в прод я быстро переучился.
Тем не менее, ситуация оказалась хуже. Например ChatGPT где-то вычитал, что в Rust и С приоритет операторов разный и уверенно сообщает этот факт. Хотя ответ 32 будет в обоих случаях.
Why is this bad?
Not everyone knows the precedence of those operators by heart, so expressions like these may trip others trying to reason about the code.
Example
1 << 2 + 3 equals 32, while (1 << 2) + 3 equals 7
Это - фактически калька с -Wparentheses из C++11. Причем я совершенно точно помню, что 25 лет назад меня в универе какой-то препод-надмозг учил, что шифты имеют приоритет выше арифметики, но придя в прод я быстро переучился.
Тем не менее, ситуация оказалась хуже. Например ChatGPT где-то вычитал, что в Rust и С приоритет операторов разный и уверенно сообщает этот факт. Хотя ответ 32 будет в обоих случаях.
Google представил в своем аппсторе Debian terminal app - полноценный Debian в телефоне, который работает через Android Virtualization Framework (пока работает только на новых пикселях).
Запустив два таких приложения, вы сможете собрать на своём телефоне кластер Kubernetes, например. А с тремя приложениями уже вынести СУБД на отдельный виртуальный хост. Не благодарите, всё для вашего удобства.
Запустив два таких приложения, вы сможете собрать на своём телефоне кластер Kubernetes, например. А с тремя приложениями уже вынести СУБД на отдельный виртуальный хост. Не благодарите, всё для вашего удобства.
А вот этот тренд выпиливания S3 sleep в современных ноутбуках, это специально диверсия или просто специалистов уже не осталось поддерживать несколько режимов?
Не могу сказать, что оно сильно напрягает, но во-первых да, есть модели ноутов, которые в S0 в принципе ходят плохо, по причине того что банально не успевают охладиться даже на low voltage. Во-вторых, просто не люблю, когда что-то имеет право разбудить комп, кроме моей команды, тем более если это что-то программное.
Не могу сказать, что оно сильно напрягает, но во-первых да, есть модели ноутов, которые в S0 в принципе ходят плохо, по причине того что банально не успевают охладиться даже на low voltage. Во-вторых, просто не люблю, когда что-то имеет право разбудить комп, кроме моей команды, тем более если это что-то программное.
Минимальный пример в расте, как отстрелить себе яйца получить проблемы на пустом месте, меняя иммутабельное.
Был у нас в проде код, написанный рукожопами, с тяжелым наследием от крестовиков, который выглядел примерно вот так:
Собственно простая задача - буфер используется много где, а нам нужно срочно затереть два последних байта. Мы обкладываемся проверкой длины и оффсетов и всё замечательно, в корку не падает, 0day не плодит. Беда только, что не работает. Причем в дебаг работает, в релиз - не работает.
Мораль в том, что компилятор видит что в блок зашла иммутабельная переменная, и в праве считать, что она такой и вышла. В результате внутренних оптимизаций, он имеет право ее копировать из предыдущего варианта, кешировать и вообще брать эти данные откуда угодно, лишь бы работало быстро.
Если прод горит и нет вариантов, то есть конечно некоторые способы объяснить компилятору, что кешировать ничего не надо - загнать блок в black box, кастануть часть слайса в атомики или %ваш вариант%. Но лучше всего, конечно, найти автора кода ибить его ногами попросить переписать без лишних unsafe.
Был у нас в проде код,
fn x(bytes: &[u8]) {
unsafe {
let ptr = bytes.as_ptr().add(8) as *mut u8;
std::ptr::write_bytes(ptr, 0, 2);
}
}
fn main() {
let v = (0..10).collect::<Vec<u8>>();
x(&v);
dbg!(v);
}
Собственно простая задача - буфер используется много где, а нам нужно срочно затереть два последних байта. Мы обкладываемся проверкой длины и оффсетов и всё замечательно, в корку не падает, 0day не плодит. Беда только, что не работает. Причем в дебаг работает, в релиз - не работает.
Мораль в том, что компилятор видит что в блок зашла иммутабельная переменная, и в праве считать, что она такой и вышла. В результате внутренних оптимизаций, он имеет право ее копировать из предыдущего варианта, кешировать и вообще брать эти данные откуда угодно, лишь бы работало быстро.
Если прод горит и нет вариантов, то есть конечно некоторые способы объяснить компилятору, что кешировать ничего не надо - загнать блок в black box, кастануть часть слайса в атомики или %ваш вариант%. Но лучше всего, конечно, найти автора кода и
HR-корпорация ManPower, выпустила отчет о том как будет выглядеть рынок труда в ближайшие годы: миллениалы в руководстве и AI в их подчинении. Потом поменяются.
Что делать с зумерами, пока непонятно.
Что делать с зумерами, пока непонятно.
Убедился, что я совершенно против использования веб-интерфейсов для HMI. Раньше я был против тач-скринов, но это уже как-то прошли: производители наконец нашли компромисс и вернули панели с парой-тройкой кнопок, на которые можно забиндить то, что неудобно жать на экране, а на экране зато удобно жать всякие зумы и прокрутки. Кроме того, тачскрины перестали лагать и ембед с условной 4й малиной внутри работает вполне неплохо. Поэтому моя ненависть сосредоточилась на веб-интерфейсах.
TLDR: если вас будут оперировать роботом-хирургом с веб-интерфейсом - лучше убегайте
SCADA - да. Это совсем другое дело, я двумя руками за веб-скады по простым причинам
- оператор может находиться далеко от сервера, а зачем изобретать безопасность если на любой системе есть HTTPS
- оператор обычно сидит на винде в домене с кучей полиси и поставить новый .exe - каждый раз целые танцы с бубном
- оператором может быть главный инженер предприятия, который, с утра откушав кофею, хочет со своего планшета посмотреть всё ли в порядке на производстве
- SCADA - чисто клиент-серверная архитектура, по функционалу недалеко ушедшая от корпоративного веб-сайта
HMI - это не SCADA и требования тут совсем другие
- оператор обычно сидит очень близко, либо по выделенному VPN-каналу
- устройство и пульт управления - это не клиент-сервер, а единое целое
- пульт управления - обычно какой-то ембед, куда всунули условную 4ю малину, а теперь пытаются впихуть невпихуемое и запустить на ней этот HMI с кучей реактов и редаксов, который разрабатывали веб-девелоперы на топовых i7
- кроме скорости работы, браузер - это закрытая система с кучей ограничений стека, который ломают от версии к версии. если ляжет SCADA - предприятие остановится. если ляжет пульт - оно тоже остановится, но перед этим кого-то может намотать на вал
TLDR: если вас будут оперировать роботом-хирургом с веб-интерфейсом - лучше убегайте
SCADA - да. Это совсем другое дело, я двумя руками за веб-скады по простым причинам
- оператор может находиться далеко от сервера, а зачем изобретать безопасность если на любой системе есть HTTPS
- оператор обычно сидит на винде в домене с кучей полиси и поставить новый .exe - каждый раз целые танцы с бубном
- оператором может быть главный инженер предприятия, который, с утра откушав кофею, хочет со своего планшета посмотреть всё ли в порядке на производстве
- SCADA - чисто клиент-серверная архитектура, по функционалу недалеко ушедшая от корпоративного веб-сайта
HMI - это не SCADA и требования тут совсем другие
- оператор обычно сидит очень близко, либо по выделенному VPN-каналу
- устройство и пульт управления - это не клиент-сервер, а единое целое
- пульт управления - обычно какой-то ембед, куда всунули условную 4ю малину, а теперь пытаются впихуть невпихуемое и запустить на ней этот HMI с кучей реактов и редаксов, который разрабатывали веб-девелоперы на топовых i7
- кроме скорости работы, браузер - это закрытая система с кучей ограничений стека, который ломают от версии к версии. если ляжет SCADA - предприятие остановится. если ляжет пульт - оно тоже остановится, но перед этим кого-то может намотать на вал
Жизнь без дискретки в ноуте. Я обещал взять ноут без карты и таки это сделал, хотя случайно. Оказалось, такая жизнь прекрасна. Нет больше печки, которая заставляла постоянно гудеть кулеры и жрала батарейку.
Из минусов, хотя игры на 13м поколении интеля стали идти намного лучше, чем шли на 11+nvidia t1200, некоторые специфические проги типа webots, которые сильно завязаны на математику GPU, стали выдавать меньше FPS. К счастью, это совсем не моя сфера и запускаю такое раз в год.
Интересный момент - проблема тротлинга GPU на батарее. А именно - при загрузке CPU картинка дико начинает тормозить, даже буквы в терминале. На thinkpad, по крайней мере, это решается тем, что в биосе выставляется high performance profile для батареи. Потом грузится ОС, которая может легко менять частоты процессора, а вот настойки видеокарты ей недоступны. Не смотря на некоторые заявленные опции в родных тулзах интеля.
Из минусов, хотя игры на 13м поколении интеля стали идти намного лучше, чем шли на 11+nvidia t1200, некоторые специфические проги типа webots, которые сильно завязаны на математику GPU, стали выдавать меньше FPS. К счастью, это совсем не моя сфера и запускаю такое раз в год.
Интересный момент - проблема тротлинга GPU на батарее. А именно - при загрузке CPU картинка дико начинает тормозить, даже буквы в терминале. На thinkpad, по крайней мере, это решается тем, что в биосе выставляется high performance profile для батареи. Потом грузится ОС, которая может легко менять частоты процессора, а вот настойки видеокарты ей недоступны. Не смотря на некоторые заявленные опции в родных тулзах интеля.
Можно ли реально использовать Rust+Linux в mission-critical системах?
Можно, например сейчас на RoboPLC мы пишем BMS (которая Battery) с прицелом сразу на контейнеры в 1 MWh.
Естественно, это вряд-ли просто так пройдет сертификацию, да и я не очень хочу делать потенциальную бомбу, поэтому каждый embed с Linux по архитектуре дополнительно мониторится.
Мониторятся такие системы в принципе не сложно. Процесс или отдельные треды посылают на watchdog heartbeat-сигнал - rising/falling edges, чередующиеся через определенный интервал времени. Это исключает вариант, когда исходная система "зависает" в определенном положении, а, например GPIO, показывает единицу - мониторинг не дождется смены сигнала и тут же отправит весь модуль в FAULT.
Вообще по heartbeats можно написать отдельную статью, есть например варианты для особо параноидальных, когда edges рисуют определенные фигуры (Signature-Based) или вотчдог требует повторить случайную "морзянку" (Challenge-Response), но в принципе если вы используете 1-0 и мониторите сигнал на "аритмию" (Windowed Pulse Monitoring) - этого хватает в 99.9999% случаев. Бонусом получаете мониторинг циклов реального времени и немедленный FAULT, если на исходной системе сбился realtime-цикл. Если проект совсем взрывоопасный, как в нашем случае - ставятся два вотчдога, которые мониторят друг друга, или вторым выступает исходная система.
Библу я выложил - heartbeat-watchdog, это официально войдет в следующий RoboPLC отдельным крейтом. Пока есть транспорт сигнала по UDP и по GPIO-пинам. Вопрос с nostd открытый - есть предложение от некоторых коллег мониторить STM-ками - это и дешевле и слегка надежнее, но пока не пришли к окончательному консенсусу. Будет - допишу скоро, не будет - чуть попозже, при случае.
Можно, например сейчас на RoboPLC мы пишем BMS (которая Battery) с прицелом сразу на контейнеры в 1 MWh.
Естественно, это вряд-ли просто так пройдет сертификацию, да и я не очень хочу делать потенциальную бомбу, поэтому каждый embed с Linux по архитектуре дополнительно мониторится.
Мониторятся такие системы в принципе не сложно. Процесс или отдельные треды посылают на watchdog heartbeat-сигнал - rising/falling edges, чередующиеся через определенный интервал времени. Это исключает вариант, когда исходная система "зависает" в определенном положении, а, например GPIO, показывает единицу - мониторинг не дождется смены сигнала и тут же отправит весь модуль в FAULT.
Вообще по heartbeats можно написать отдельную статью, есть например варианты для особо параноидальных, когда edges рисуют определенные фигуры (Signature-Based) или вотчдог требует повторить случайную "морзянку" (Challenge-Response), но в принципе если вы используете 1-0 и мониторите сигнал на "аритмию" (Windowed Pulse Monitoring) - этого хватает в 99.9999% случаев. Бонусом получаете мониторинг циклов реального времени и немедленный FAULT, если на исходной системе сбился realtime-цикл. Если проект совсем взрывоопасный, как в нашем случае - ставятся два вотчдога, которые мониторят друг друга, или вторым выступает исходная система.
Библу я выложил - heartbeat-watchdog, это официально войдет в следующий RoboPLC отдельным крейтом. Пока есть транспорт сигнала по UDP и по GPIO-пинам. Вопрос с nostd открытый - есть предложение от некоторых коллег мониторить STM-ками - это и дешевле и слегка надежнее, но пока не пришли к окончательному консенсусу. Будет - допишу скоро, не будет - чуть попозже, при случае.
Практическая схемотехника - вам нужно переключать сигнал на слаботочке между потребителями. В моем случае - это модули с одинаковым CAN ID, который производитель решил запретить менять. Есть варианты:
- поставить много CAN-адаптеров на контроллер - дорого и технически ограничено
- поставить релейки. относительно дорого, ненадежно и переключаться для рилтайма не то
- собрать вместо релеек схему на паре транзисторов и диодов - профит
Задача вполне типичная, поэтому для этого конечно же есть ИС (точнее такие штуки называются транзисторные массивы). Например ULN2803 позволяет выполнять задачу сразу на 8 каналов. При стоимости оптом в один доллар.
- поставить много CAN-адаптеров на контроллер - дорого и технически ограничено
- поставить релейки. относительно дорого, ненадежно и переключаться для рилтайма не то
- собрать вместо релеек схему на паре транзисторов и диодов - профит
Задача вполне типичная, поэтому для этого конечно же есть ИС (точнее такие штуки называются транзисторные массивы). Например ULN2803 позволяет выполнять задачу сразу на 8 каналов. При стоимости оптом в один доллар.
Кто ещё мучается с modern standby на писюках - есть простое решение. Внезапно на практике, если сказать системе ложить сеть, потребление в S0 сразу приближается к S3. Собственно маки примерно это же и делают.
На линухе это решается соотв. before suspend в systemd, в шиндовс - парой параметров в group policy (ложить сеть на батарее и на питании).
Не поверил бы, что это напишу, но получается что S3 в 2025 году действительно не нужен.
На линухе это решается соотв. before suspend в systemd, в шиндовс - парой параметров в group policy (ложить сеть на батарее и на питании).
Не поверил бы, что это напишу, но получается что S3 в 2025 году действительно не нужен.
Недавно один фанат имперской системы дал мне лучшее объяснение шкалы Фаренгейта. Изначально Фаренгейт хотел привязать ноль к температуре смеси воды, льда и хлорида аммония, а 100, по слухам - к нормальной температуре тела. Но почему Фаренгейт так зашёл имперцам?
У имперцев все приблизительно. Да, есть точный перевод, например фута в сантиметры, но первоначальная задумка что футы есть (почти) у всех и измерить расстояние можно примерно, зато не имея подручных средств.
Теперь про температуру. Диапазон 0-100 можно взять как 0-100%, -18С - 0% тепло (холодно), +38С - 100% тепло. Комфортная температура для людей-любителей холода и любителей тепла же сходится примерно на 50F=10C. Все что выше/ниже диапазона - для жизни уже не сильно подходит и человека не касается.
Сейчас на улице как раз весна и на 50% тепло. Уже можно ходить без шапки, с чем и поздравляю.
У имперцев все приблизительно. Да, есть точный перевод, например фута в сантиметры, но первоначальная задумка что футы есть (почти) у всех и измерить расстояние можно примерно, зато не имея подручных средств.
Теперь про температуру. Диапазон 0-100 можно взять как 0-100%, -18С - 0% тепло (холодно), +38С - 100% тепло. Комфортная температура для людей-любителей холода и любителей тепла же сходится примерно на 50F=10C. Все что выше/ниже диапазона - для жизни уже не сильно подходит и человека не касается.
Сейчас на улице как раз весна и на 50% тепло. Уже можно ходить без шапки, с чем и поздравляю.
Когда диджитализация вышла из под контроля.
Украинское Минцифры сообщает, что в стране насчитывается около 350 государственных цифровых реестров, точную цифру оно само не знает.
Поэтому в этом году будет создан новый реестр - "Реестр Реестров". Нет, первое апреля еще не сегодня.
Украинское Минцифры сообщает, что в стране насчитывается около 350 государственных цифровых реестров, точную цифру оно само не знает.
Поэтому в этом году будет создан новый реестр - "Реестр Реестров". Нет, первое апреля еще не сегодня.
This media is not supported in your browser
VIEW IN TELEGRAM
Всегда мечтал так пройти Марио
Спустя три года после выпуска, дошли руки и обновили наш embedded-браузер EvaPanel.
Браузер построен поверх wry и заточен, в первую очередь, под киоски с тач-скринами, а благодаря маленькому memory footprint работает примерно на всём. Из особенностей - фильтр урлов "куда можно" и опциональное полное удаленное управление.
В апдейте, собственно из главного, был поднят wry до последнего, выкинуты остатки webkit2gtk (предыдущие версии сидели частично прямо на нем) а также добавлен и проверен функционал работы под винду (на линуксе wry бегает через webkit, на винде - через edge webview, который теперь chromium). Плюс добавлена и проверена работа в wayland без X.
Причина внезапной поддержки винды - то что уже недавно описывал, клиентам надоело поведение "больших" браузеров при открытии всяких веб-скад и HMI.
На слайде - работает на моем любимом "карманном" reterminal, кстати просто незаменимая железка для ембед-разработчика. Про нее могу написать как-нибудь отдельно.
Браузер построен поверх wry и заточен, в первую очередь, под киоски с тач-скринами, а благодаря маленькому memory footprint работает примерно на всём. Из особенностей - фильтр урлов "куда можно" и опциональное полное удаленное управление.
В апдейте, собственно из главного, был поднят wry до последнего, выкинуты остатки webkit2gtk (предыдущие версии сидели частично прямо на нем) а также добавлен и проверен функционал работы под винду (на линуксе wry бегает через webkit, на винде - через edge webview, который теперь chromium). Плюс добавлена и проверена работа в wayland без X.
Причина внезапной поддержки винды - то что уже недавно описывал, клиентам надоело поведение "больших" браузеров при открытии всяких веб-скад и HMI.
На слайде - работает на моем любимом "карманном" reterminal, кстати просто незаменимая железка для ембед-разработчика. Про нее могу написать как-нибудь отдельно.
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаем контрибьютить в сообщество.
Представляю ehmi - наш набор egui-компонентов для создания HMI-интерфейсов: бары, кнопки (слайдер, реле, кран) и гаджи всех стилей и вариантов.
Представляю ehmi - наш набор egui-компонентов для создания HMI-интерфейсов: бары, кнопки (слайдер, реле, кран) и гаджи всех стилей и вариантов.