LINUX.ORG.RU

Сообщения vbr

 

Как испустить радиоволну 50 КГц?

 ,

В радиоволнах ничего не понимаю, но хочу попробовать сделать девайс, который будет транслировать сигнал точного времени. У меня есть часы, которые в теории умеют этот сигнал улавливать и калиброваться по нему (а самого сигнала нет, не повезло мне жить там, где он есть). Протокол я нашёл, там всё примитивно - надо просто испускать радиоволну определённый период времени, грубо говоря раз в секунду в течение 0.9 секунды или 0.8 секунды (могу в деталях путаться, но в целом как-то так) и кодировать таким образом биты. Частота фиксированная, то ли 50 то ли 60 КГц.

Я так понимаю, электрический сигнал нужной частоты сгенерировать не проблема, можно взять любой микроконтроллер и использовать PWM.

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

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

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

Также вопрос - как можно эти радиоволны уловить и проверить, что они идут вообще? Часы штука не очень подходящая для отладки, там или работает, или нет. У меня есть осциллограф, может как-то с ним это провернуть можно?

vbr
()

Как сочетать очередь и БД надёжно и транзакционно?

 ,

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

У меня возникают проблемы с тем, как правильно спроектировать транзакцию в БД и работу с очередью.

Первый подход:

  1. Вставляем строку
  2. Коммитим транзакцию.
  3. Отправляем в очередь событие с ID строки.
  4. Получатель получает событие.
  5. Получатель запрашивает данные по ID и работает с ними.

Тут возникает проблема между шагами 2 и 3. Если процесс умер, то запись окажется в БД, а получатель про это не узнает.

Второй подход:

  1. Вставляем строку
  2. Отправляем в очередь событие с ID строки.
  3. Коммитим транзакцию.
  4. Получатель получает событие.
  5. Получатель запрашивает данные по ID и работает с ними.

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

Можно накрутить какую-то сложную архитектуру с дополнительным полем-статусом, двумя коммитами, «восстановлением» если второй коммит не сработал, получателем, который нормально отрабатывает двойные сообщения. Расписывать не буду, но это всё прям очень сложно выходит.

Самый простой вариант это использовать что-то вроде postgres listen/notify, который умеет отсылать события транзакционно. Но интересует именно работа с внешней очередью, без всяких там двухфазных транзакций и подобного энтерпрайза. Кажется, будто упускаю что-то очевидное.

Если нужна конкретика - пускай будет postgres и kafka

vbr
()

Зачем платить за RHEL Workstation?

 ,

Сразу упомяну, что я не в России, санкционные проблемы меня не касаются.

Покупаю ноутбук, сертифицированный для RHEL. Планирую на него установить, собственно, RHEL. Вижу два варианта - либо купить лицензию ($180/год), либо использовать его бесплатно с Developer License. Хочу понять - а зачем, собственно, платить? Поддержка в эту цену не входит. Ещё и непонятная мне приписка «Is not intended for production environments.» (это у платной версии).

Там есть подписка за $300/год, с ней всё понятно, там поддержка включена и нет странной приписки про production.

Причём Developer License можно использовать на 16 физических и 16 виртуальных машинах, а платную только на 1 физической и 1 виртуальной (ну про физическую понятно, а вот про виртуальную - прям вообще не понятно).

В общем я смущён всей этой политикой. Деньги заплатить я готов, но хочется понимать - за что.

vbr
()

Меня печалит жава

 ,

Наткнулся на такой код в спринге:

PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(settings::readTimeout).asInt(Duration::toMillis).to(this::setReadTimeout);
map.from(settings::connectTimeout).asInt(Duration::toMillis).to(this::setConnectTimeout);

Пришлось его скопипастить, потому, что при всей его гибкости как-то не очень он гибкий оказался там, где мне надо. Долго вкуривал, что тут написано, в итоге переписал по-простому:

if (settings.readTimeout() != null) {
  setReadTimeout(settings.readTimeout());
}
if (settings.connectTimeout() != null) {
  setConnectTimeout(settings.connectTimeout());
}

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

Что за моду притащили в жаву? Никогда же такого не было, писали просто и понятно. Кому это надо? Вы тоже выпендриваетесь, пытаясь в одну строчку засунуть побольше токенов?

vbr
()

Почему макросы в стиле лиспа не стали популярными?

 

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

Однако в индустрии данный подход применяется нечасто.

К примеру в С используется отдельный язык, генерирующий текст (препроцессор).

В С++ используется отдельный язык на шаблонах для метапрограммирования.

В Scheme тоже изобрели отдельный язык.

Из похожих подходов я видел только D, в котором можно написать функцию, возвращающую текст. Эту функцию можно вызывать во время компиляции и её результат компилятор тоже откомпилирует. Этот подход похож на лисп, хотя и гораздо менее удобен. Но больше нигде я такого не видел.

Если говорить про не-лисповые языки, то естественным кажется ввести официальный API для AST (по сути там ерунда) и разрешить писать функции, возвращающие этот самый AST. Это будет всё же лучше, чем текст и концептуально более похоже на лисп. Но я такого не видел. Разве что в Java есть annotation processor-ы, но и там такой подход это на уровне хаков скорей.

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

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

Почему же так не делают? Зачем почти в каждом языке изобретают какие-то особые пути для метапрограммирования?

vbr
()

Можно ли на ThinkPad T15p использовать встроенную видеокарту?

 

Присматриваюсь к ThinkPad T15p

Вроде нравится, но там видеокарта nvidia, мне это не надо.

Там процессор i7-12700H. На сайте Intel написано, что он «Intel® Iris® Xe Graphics eligible». Не очень понятно, что это значит.

Я хочу, чтобы линукс грузился и работал со встроенной видеокартой от Intel. А nvidia я может быть или для вычислений буду использовать, если вдруг сподобится, или винду в виртуалке запускать и туда пробрасывать.

Получится ли такой план на этом ноутбуке? Пробовать возможности нет.

vbr
()

Длинные или короткие параметры в shell-скриптах?

 ,

У многих команд параметры можно указывать в коротком виде (например -r) или в длинном виде (например --recursive) Вроде всегда читал, что короткие параметры нужно использовать для интерактивных shell-сессий, а длинные в скриптах. Но всегда ли это так?

Как вы думаете, как лучше писать в скриптах? Несколько примеров ниже

mkdir -p a/b
mkdir --parents a/b
curl -fLsS "${url}" | tar -xzv -C /opt
curl --fail --location --silent --show-error "${url}" | tar --extract --gzip --verbose --directory=/opt

Честно говоря я в затруднении. Лично для меня mkdir -p читается и понимается проще, а что такое --parents я и не сразу соображу.

vbr
()

Как залочить бутлоадер?

 ,

У меня есть телефон с разлоченным бутлоадером. Хочу залочить. Гружусь в fastboot, выполняю fastboot flashing lock, после этого телефон при загрузке выдаёт «Your device software can’t be checked for corruption. Please lock the bootloader.». Если разлочить, то грузится нормально. Что ему надо? Телефон Xiaomi Mi A2.

vbr
()

Веб-приложения шагают по моему компьютеру

 ,

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

Mail -> Webmail

Idea -> VS code (в браузер пока не переехал, но хочу)

Gimp -> Photopea

Ventrillo -> Discord

Вот вчера задолбал Strongbox и я переехал в KeeWeb. Причём даже ставить не стал, в браузере прекрасно работает, синхронизирируясь с дропбоксом.

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

А у вас как?

vbr
()

Как выбрать частоты тактирования?

 

Пишу прошивку для девайса. Он в том числе взаимодействует с ПК по USB.

Имеется внешний кристалл на 25 МГц. Имеется внутренний резонатор на 8 МГц. Также имеется два внутренних умножителя и набор делителей.

Для USB-периферии я из 25 МГц получаю 48 (25 / 5 * 8 / 10 * 12).

SYS тактирование я могу выбрать либо от этих 48, либо от кристалла (25) напрямую, либо от внутреннего резонатора (8). Сейчас я беру 48.

Далее я через множитель могу это значение поделить и настроить частоту AHB шины. Сейчас я делю на 8, получаю 6 МГц. На этой частоте работает процессор.

Далее мне нужно получить частоты для шин APB1 и APB2. Сейчас я APB1 делю на 16, получаю 375 kHz и APB2 делю на 4, получаю 1.5 MHz.

Собственно это всё я настроил исходя из принципа - чем меньше, тем лучше. На 3 МГц у меня USB не завёлся, соответственно поставил 6.

На шине APB2 у меня крутится таймер, через который я делаю микросекундные задержки для USB, поэтому её тактирую повыше (таймер использует двойную частоту, 3 МГц).

Каких-то требований на данный момент у меня нет (точней они такие небольшие, что подойдёт что угодно, к примеру у меня ещё будет SPI, для которого нужна скорость не ниже 110 КГц и передавать данные по USB я буду со скоростью примерно 15 КБ/с.

Есть ли какие-то соображения, по которым стоит запитать AHB шину не от делителя USB? Если запитывать от 25 МГц кристалла, то делить на ровные числа не получается, а частота в 25 МГц мне кажется избыточной, хотя изначально так и делал. Запитывать от 8 МГц резонатора кажется странным при наличии внешнего кристалла.

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

vbr
()

Код ломает маркдаун

 ,

Вроде ничего особенного в нём нет, но маркдаун ломает. Использую '''c (для подсветки). Если не указывать C, то всё работает. Судя по разметке там какой-то детект XML срабатывает или что…

Не ломает:

static void enable_usart(void)
{
    uint32_t rcc_base_address = 0x40021000;
    uint32_t rcc_apb2enr_address = rcc_base_address + 0x18;
    uint32_t rcc_apb2enr_iopben = 1 << 3;
    uint32_t rcc_apb1enr_address = rcc_base_address + 0x1c;
    uint32_t rcc_apb1enr_usart3en = 1 << 18;
    uint32_t gpiob_base_address = 0x40010c00;
    uint32_t gpiob_crh_address = gpiob_base_address + 0x04;
    uint32_t gpiox_crh_mode10_0 = 1 << 8;

Ломает:

static void enable_usart(void)
{
    uint32_t rcc_base_address = 0x40021000;
    uint32_t rcc_apb2enr_address = rcc_base_address + 0x18;
    uint32_t rcc_apb2enr_iopben = 1 << 3;
    uint32_t rcc_apb1enr_address = rcc_base_address + 0x1c;
    uint32_t rcc_apb1enr_usart3en = 1 << 18;
    uint32_t gpiob_base_address = 0x40010c00;
    uint32_t gpiob_crh_address = gpiob_base_address + 0x04;
    uint32_t gpiox_crh_mode10_0 = 1 << 8;
vbr
()

Как правильно прокинуть IP?

 ,

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

Хочется запускать этот сервис на другом компьютере и перенаправлять входящие и исходящие подключения соответствующим образом. Также хочется минимизировать настройки iptables и подобного и обойтись userspace-софтом.

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

Разумно ли использовать такую конфигурацию в продакшне? Настроить поднятие ssh-соединения через systemd-юнит в принципе несложно, но я никогда не видел, чтобы так делали. Насколько это разумно?

В качестве альтернативы видится поднятие специализированного прокси-сервера на удалённом компьютере, а также http reverse proxy (вроде nginx) на удалённом компьютере. Этот вариант кажется более «продакшн», но несёт с собой уйму дополнительных усилий по управлению всем этим добром, включая безопасность, которая в ssh обеспечивается автоматически.

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

vbr
()

STM32 с нуля (жж)

 , ,

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

Если интерес будет, буду продолжать.

Итак осваиваем STM32 не как нормальные люди.

Примерный план:

  1. Подключить его к компьютеру и убедиться, что там что-то происходит. Использовать будем st-util и gdb.

  2. Написать простейшую программу на ассемблере, которая в цикле прибавляет регистр, скомпилировать из неё прошивку, залить на плату и пронаблюдать её работу. Использовать будем binutils и st-flash.

  3. Поморгать диодом (на ассемблере же).

  4. Переписать осмысленный код на С (дальше всё на С).

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

  6. Сказать внешнему миру «Hello world» через UART.

  7. Переписать «Hello world» с помощью CMSIS, уже с пониманием того, что там происходит.

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

Сразу скажу, что в процессе будет использовано достаточно много инструментов вроде make, ld, gdb, as, gcc и тд, по каждому из них можно книги писать (и пишут). Поэтому, конечно, углубляться в них я не буду, а напротив буду использовать в максимально примитивном виде.

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

vbr
()

Архитектура системы обработки заказов

 ,

Имеется система, аналогия которой это обработка заказов в магазине или обработка запросов в система типа jira. Некоторыми образами в систему попадает сущность, пусть будет «заказ». Объём - тысячи в день. Далее эта сущность проходит через несколько статусов. Сейчас - чуть больше 10, но число их потихоньку растёт. К примеру после того, как сущность создана, делается запрос в другую систему. Если запрос вернул данные, то данные присоединяются к сущности и переходит в следующий статус. Далее идёт запрос в другой сервис и с сущностью работают там. Там свои статусы. Какие-то переходы это просто запрос в сервис, какие-то переходы это ожидание действий пользователя (может быть до месяца). Переходы могут добавлять данные к сущности, как в примере выше. В конце концов сущность либо архивируется с успехом или по таймауту.

Всё, что выше, это абстрактное описание того, как это всё работает.

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

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

Что сейчас плохо:

  1. У всего этого нет никакой формы. По сути система выросла исторически, из простой и понятной в некоего монстра. Алгоритмы перехода между статусами мало кто понимает.

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

  3. Логи. Все логи ведутся ну тупо в лог файлах. Текущее состояние можно посмотреть в базе, истории состояний нет. Проблемы решаются очень долго - надо долго грепать логи (а их очень много, гигабайты в день), копаться в базе, курить сорсы. В общем случае в логах, базах и сорсах нескольких сервисов. От системы хочется, чтобы была возможность найти сущность, посмотреть её историю, в идеале вообще посмотреть - какие запросы делались и какие ответы получались в определённые моменты времени. В общем чтобы суппорт писал «по юзеру иванов не отрабатывается заказ», ты шёл в дашборд, находил «user.name=иванов» его заказ, сразу видел, что он в таком-то статусе, сделал 3 попытки на такой-то сервис, получил такие-то ответы. В общем как-то так.

  4. Скорость работы. Из-за того, что скедулеры отрабатывают не моментально и не раз в секунду, а в среднем раз в минуту, каждая смена статуса занимает до минуты, в итоге то, что может сделаться за долю секунды, занимает несколько минут.

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

Если бы я это делал, я бы сделал как-то так:

  • Есть сущность
  • У неё есть статус
  • К сущности прикрепляются произвольные данные по ключ-значение
  • Частью статуса может служить выражение вида ключ == значение и тд. Ну чтобы не делать комбинаторный взрыв из статусов. Хотя тут спорный момент, может это и не надо.
  • Куча сервисов, которые обрабатывают изменения статусов.
  • Сервис триггерится либо по изменению статуса, либо по внешнему вызову. С внешним вызовом надо подумать, пока чёткого понимания нет.

При вызове сервиса можно автоматом делать повторы, причём с задержкой нужной, логгирование и тд.

Но в целом я предполагаю, что это велосипед и делать описанное выше не нужно, а нужно понять, что мне нужно.

У меня давным давно был опыт работы с Java фреймворком, который работал с BPMN. Честно говоря я не смог вспомнить его название, наверное это был jbpm. Кажется, что этот фреймворк решал похожую задачу. Там в эклипсе рисовали workflow эдакой блок-схемой, в каждом узле прописывали логику работы. Честно говоря опыт был крайне отрицательный, система была максимально геморройна для работы с ней. Но допускаю, что это была проблема конкретной реализации или старой версии. Поэтому первый кандидат, который я рассматриваю, это фреймворки с BPMN подходом.

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

Попытавшись поискать информацию по этой теме я часто встреваю упоминание некоего apache airflow и очень похожих на него продуктов. У меня всё же ощущение, что это похожее, но не то.

Также очень интригующий проект это temporal.io. Я его пока не осилил, он кажется очень непростым и нужно найти время, чтобы понять, что это такое. Но буду благодарен, если кто-то уже его использовал и скажет - то ли это?

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

Не хочется сложных решений, т.к. команда небольшая и не супер-профессиональная. Хочется решение простое, понятное, но в то же время решающее насущные проблемы.

vbr
()

Поставил RHEL на ноутбук, вроде работает

 

Asus ExpertBook B9400, графика интел. Ранее на нём крутилась федора.

Поставил RHEL 9.2, при установке выбрал workstation. Вифи работает, внешний монитор работает, звук работает, suspend работает. Вроде wayland запускается. В целом мне понравилось. В отличие от федоры кажется нет всякого снап-хлама, шопов и прочей новомодной галиматьи. Пока с отрицательными моментами не столкнулся. Установка прошла гладко, инсталлятор такой же, как в федоре, установил с шифрованием диска. Ещё из приятного - разбивает диск по феншую, со свопом, без всякого zram и подобной галиматьи.

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

Использую developer лицензию. Предполагаю, что можно поставить Oracle Linux и получить то же самое без суеты с лицензиями, но не пробовал.

vbr
()

Есть ли рабочий рецепт автообновления дебиана?

 ,

Есть сервачок, хочу, чтобы он по ночам ставил апдейты и ребутался при необходимости. Пытался разобраться, но там чёрт ногу сломит, 50 скриптов, один другого вызывает, такое ощущение, что проще засунуть apt-get update && apt-get upgrade && test -e /var/run/reboot-required && reboot в какой-нибудь /etc/cron.daily/ (а ещё лучше в systemd timer).

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

vbr
()

Postgres в контейнере с ограничением по памяти

 ,

Помогите найти внятную информацию, как настроить постгрес для работы в контейнере, чтобы укладывался в целевые показатели по ограничению памяти. К примеру сейчас запустил постгрес, он скушал 90 МБ. Далее в течение нескольких дней, исходя из опыта, его потребление вырастет примерно до 2 GB. При этом он вообще-то и сейчас нормально работает и было бы неплохо его ограничить, скажем, 100 МБ. Но если я просто поставлю лимит, то его грохнет OOM Killer через несколько часов.

В конфиге я вижу следующее (значения не по умолчанию):

listen_addresses = '*'
max_connections = 1000			# (change requires restart)
shared_buffers = 128MB			# min 128kB
dynamic_shared_memory_type = posix	# the default is usually the first option
max_wal_size = 1GB
min_wal_size = 80MB

Число соединений к базе со временем не растёт, с ней работает один сервис через одно соединение.

Насколько я понял, потребляется 128 MB на весь сервер + work_mem (4MB) на каждое соединение + temp_buffers (8 MB) иногда. Ещё может быть maintenance_work_mem (64 MB). Откуда тут гигабайты набегают - непонятно.

vbr
()

Фич реквест

 ,

Добавьте в профиль два поля: CSS URL и Script URL. Если пользователь их заполняет, то ему в страницу добавляется <link rel=stylesheet href="${css_url}"> и <script src="${script_url}"></script>.

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

vbr
()

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

 

https://www.securitylab.ru/news/540852.php

В 2022 году обвиняемый, будучи администратором информационной безопасности на предприятии, подключил свой рабочий компьютер к интернету и скачал из открытых источников программное обеспечение FreeRADIUS, которое он установил на сервере системы контроля доступа Cisco Secure ACS. Эта система была использована для организации безопасного доступа к информационным ресурсам предприятия, в том числе к объектам критической информационной инфраструктуры (КИИ).

Обвиняемый утверждает, что он действовал в интересах работодателя, так как система Cisco Secure ACS была устаревшей и дорогостоящей в обслуживании. Он заявляет, что он сэкономил предприятию почти 2,5 миллиона рублей за лицензию и поддержку программного обеспечения. Он также уверяет, что он предпринял все необходимые меры безопасности при подключении к интернету и использовании бесплатного ПО.

Начальник обвиняемого дал ему задание найти замену системе Cisco Secure ACS.

На мой взгляд всем айтишникам, имеющим отношение к госорганам, стоит искать новую работу. Система сошла с ума.

vbr
()

Что будет, если сбросить МРТ на врага?

 сверхпроводимость,

Как я понимаю, МРТ это катушка из сверхпроводника, залитая охладителем, который поддерживает температуру сверхпроводимости. При этом в эту катушку можно «закачать» довольно много энергии (но не бесконечно много, у сверхпроводника есть пределы тока, после которых он потеряет сверхпроводящие свойства).

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

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

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

У NbN максимальная плотность (?) тока 5e7 A/см2. Т.е. если я правильно понял, то в провод площадью в квадратный сантиметр можно накачать ток в 50 млн амперов. Иными словами через сечение провода проходит 50 млн Кл/с. Как отсюда можно посчитать, сколько энергии выделится при переходе этого тока в тепло - я не осилил, буду благодарен, если кто-то подскажет.

В общем интересно - насколько такая бомба бахнет, в сравнение с традиционными вариантами? Понятно, что ядерная мощней, зато тут всё экологично. Хотя про воронки на месте больниц, где выходили из строя МРТ аппараты, я не слыхал, но может там недостаточно сильно накачивали катушки?

vbr
()