Segment@tion fault @psauxww Channel on Telegram

Segment@tion fault

@psauxww


Тим-менеджмент, Devops, Python, Rust, JS, Linux, IoT, электрика, все над чем работаю, иногда матом

Segment@tion fault (Russian)

Segment@tion fault - это Telegram канал, созданный пользователем с никнеймом @psauxww. В канале вы найдете информацию о таких темах как тим-менеджмент, Devops, Python, Rust, JS, Linux, IoT, электрика и многое другое. Автор делится своим опытом работы над различными проектами, иногда при этом используя ненормативную лексику. Если вы интересуетесь разработкой программного обеспечения, системным администрированием, а также различными технологиями, то этот канал станет для вас полезным и интересным источником информации. Присоединяйтесь к Segment@tion fault и узнавайте новое каждый день!

Segment@tion fault

06 Dec, 00:04


Страшные сказки на ночь. Если что у меня ещё есть дипломы электрика и повара-кондитера.

А у вас?

Segment@tion fault

05 Dec, 18:05


Криптография в Rust и кровавый ентерпрайз. Поскольку rustls - библа без сертификаций, люди годами мучались с openssl, а на винде дёргали системное криптоапи напрямую или через кривые прокладки.

К счастью, с февраля этого года rustls позволяет использовать амазоновское libcrypto как бекенд, а оно, в свою очередь, сертифицировано на FIPS-140-3.

В этом месяце начали новый проект уже с rustls а не openssl и я по этому поводу весьма счастлив. Из нюансов - на винде libcrypto в fips-режиме для сборки требует nasm.

Segment@tion fault

27 Nov, 01:24


На данный момент WebTransport (вещь over HTTP/3) выглядит самым перспективным протоколом для новых проектов. Уже довольно неплохо гоняется в продакшне.

Из плюсов:

- У вас есть UDP. Как только клиент и сервер создают соединение, датаграммы могут гоняться в обе стороны, не важно что клиент сидит за тремя натами. Натопробивалка в комплекте.

- У вас есть потоки, которые внутри тоже UDP, но по API очень похожи на TCP. Кто в HTTP/2 игрался с потоками, тот в курсе, кто нет - можно разделять один TCP (в данном случае reliable UDP) сокет на несколько виртуальных. Основное отличие WT - потоки работают независимо, и если один остановился/оборвался - другие продолжают работу.

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

- У вас сразу из коробки шифрование.

Из минусов:

- Шифрование принудительное. Микросервисы на локалхосте будут тоже шифроваться от админа и друг от друга.

- Пока что это - draft, со всеми вытекающими. в Chromium-based работает более-менее стабильно, в Firefox могут быть сюрпризы (вплоть до креша процесса)

- Оттуда же - под Rust-std оно работает вполне прекрасно. Под Rust-wasm - очень похоже на то, как выглядел embedded-hal или Tokio 5 лет назад - ад, пиздец и исключительно для энтузиастов. Под всякий bare-metal embed - просто не существует.

Segment@tion fault

24 Nov, 18:41


#prog #amazingopensource

ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.

Segment@tion fault

21 Nov, 13:42


.

Segment@tion fault

20 Nov, 01:58


В последнем BUS/RT у клиентов появился "странный" для pub/sub метод publish_for. Зачем нужно писать "приватные" сообщения в топики? Рассмотрим ситуацию.

Алиса имеет значение сенсора и публикует его в топик при изменениях или с некторым интервалом.

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

Боб мог бы использовать RPC-вызов и получить значение сенсора в нем. Но в реальности существует несколько факторов:

- Бобу лень вызывать RPC. У него уже настроена логика процессинга данных из топиков и городить еще один велосипед не имеет смысла.

- Бобу лень разбираться с data races, в случае если pull некоторого старого значения и push нового придут примерно одновременно. В случае запроса на publish_for, Алиса может временно залочить изменения сенсора, пока Бобу не уйдет анонс по каналу и датарейса не возникнет.

Лень - двигатель прогресса. Как всегда.

Segment@tion fault

12 Nov, 16:09


Выросло поколение, через гпт переводили.

А вы ещё пользуетесь Огайе?

Segment@tion fault

07 Nov, 20:49


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

Из-за перевода времени, скрипт отработал 1700 раз. Потому что в Германии ночью лучше спать.

Segment@tion fault

02 Nov, 06:23


Делаю OAuth2 вход

- Google: works
- Github: works
- Microsoft: unknown error

unknown, Карл!

Segment@tion fault

30 Oct, 23:42


Новый malware под Android "FakeApp.AFZ" мало того, что нужно установить самому - чтобы он украл деньги, нужно их ему послать тоже самостоятельно.

Малварь мотивирует это сделать, обещая прибыли от криптовалют. Многие верят.

Segment@tion fault

28 Oct, 15:51


А говорили в Rust нет наследования. Врут, все есть!

Segment@tion fault

25 Oct, 13:59


Мужчина из Усти-над-Лабем (Чехия) поверил ИИ-аналазитору грибов и набрал зеленых мухоморов. Сейчас лежит в реанимации с отравлением.

Очередная атака киборгов-убийц.

Segment@tion fault

24 Oct, 23:15


back in my days

Segment@tion fault

23 Oct, 23:23


.

Segment@tion fault

23 Oct, 18:44


Текущее состояние PLCOpenXML.

PLCOpen были основаны еще в 1992 году, как организация открытых стандартов для PLC. Самый популярный - PLCOpenXML, формат, позволяющий мигрировать код между разными платформами автоматизации. Между прочим входит в IEC 61131-10. Честно говоря, никогда им не интересовался, но сейчас нужно выбрать какой-то формат для хранения Ladder Logic и решил посмотреть.

Ради эксперимента поигрался в TwinCAT 3.1.4026.10 (последний), попробовал сохранить XML, который он сгенерит для LD, а потом считать им же обратно.

Результат:

- Простой LD "как у дидов" - более-менее открывает
- Более новомодный, с edge detection - теряет edges полностью (в XML у всех элементов записывает edge="none").
- Современный, с функциональными блоками - не может прочитать обратно, говорит в XML ничего нет. Достаточно поставить один блок, чтобы перестал читаться полностью.

Примеры с сайта PLCOpen - ни TwinCAT, ни CodeSYS открывать не желают. Интересно, а как у Сименса и прочих? Похоже, очередной стандарт поддерживают "для галочки", как всегда.

Segment@tion fault

23 Oct, 12:22


"ИИ заменит программистов, а вот людям творческих профессий бояться нечего"

OFF Radio Kraków увольняет всех ведущих, теперь вместо них программы будут вести несколько голосовых моделей

Segment@tion fault

22 Oct, 19:48


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

Помню в 7 классе мы с Андрюхой пришли к Витьке, посмотреть первый раз на Денди (для зумеров - такой клон NES). Витька включил нам контру, бросил "А - прыгать, Б - стрелять, остальное разберетесь" и ушел за пивом.

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

Чтоб картинка меньше фонила.

Segment@tion fault

20 Oct, 12:41


Опять пересрались с HR в LinkedIn. HR сейчас деградировали как и все остальное и 99% стали синонимом спамера. Естественно, на этот спам в соцсетях ведутся полтора джуна и выхлоп почти нулевой.

А как было раньше? Помню HRы конкурента вычисляли нашу курилку и ходили туда с нашим персоналом. Учитывая, что курить нужно было почти с каждым, а HRов было мало, в среднем один HR выкуривал несколько пачек за рабочий день. Одного даже забрала скорая. Ещё их вычисляли и били. Тогда они ротировались.

В другой раз HR устроился к нам админом на RedHat и *BSD и успешно работал месяца три. HR'а хвалили, обещали премию. Но внезапно он пропал. С ним пропали два наших админа и главный джавист, который писал подключение к биллингам.

Мы злились, конкурент торжествовал.

Segment@tion fault

20 Oct, 04:26


Сейчас по телеге ходит "вирус", присылают apk, требуют запустить "или аккаунт удалится". Пару дней назад сломали бота украинского резерв+, тоже слали какой-то zip (там вроде ехе под шиндовс).

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

Кстати, apk ещё надо умудриться запустить. В Android в настройках все заблокировано по-умолчанию, кроме магазина. А если у вас Apple - сами не запускайте, просто перешлите друзьям.

Как-то так и живём.

Segment@tion fault

18 Oct, 13:01


Небольшой юбилей, на меня подписалось 1500+ человек.

Канал, напоминаю, задумывался как место для записок, пока в телеге не было Saved messages. А потом я привык, что их комментируют.

Segment@tion fault

18 Oct, 12:04


жиза

Segment@tion fault

18 Oct, 00:58


При использовании асинхронного кода, необходимо всегда помнить про синхронную нагрузку и запускать такие задачи в отдельных потоках, чтобы не блокировать async runtime. Особенно это важно при разработке real-time приложений, где блокировка рантайма уже на пару миллисекунд может сломать всю вашу low-latency конструкцию.

Кроме традиционных синхронных задач (шифрование, сериализация, компрессия и т.д.) часто забывается, что malloc - тоже очень неприятная штука. Например, 10 мегабайт на вектор может выделяться до пары миллисекунд на приличном процессоре уровня AMD 5950X, ембед же уровня Cortex A-72 может на таком застрять и на 10ms. В случае невозможности использования re-use буфера (например он уже пошел отправляться клиентам, а мы читаем следующий), аллокацию памяти необходимо выносить в синхронные задачи.

В последней BUS/RT мы добавили брокеру опцию direct_alloc_limit, позволяющую вынести аллокации выше лимита (это делается, когда sender прислал большой блок данных) на отдельный вспомогательный аллокатор. Который, в зависимости от структуры проекта, может просто создавать векторы в spawn_blocking, либо общаться с отдельным, отвечающим за это потоком, который находится на отдельной группе CPU. Также, аллокатор может вообще запретить выделение блока, руководствуясь собственной логикой относительно идентификатора клиента, либо общей.

Таким образом, в нашем IPC-брокере появилась крутая возможность безопасно совмещать low-latency (<100us) клиентов с high-load, читающими гигабайты из баз. В одной системе и без ущерба друг для друга.

Segment@tion fault

17 Oct, 11:43


"but it works on my computer!"

Segment@tion fault

16 Oct, 16:39


Как-то мимо меня вышла в этом году Operation Galuga (да, лично от легендарной Konami). По сути римейк классической контры NES, но с более расширенным функционалом. И на фоне валят оригинальные треки в современных ремиксах.

Дидам играть всем, взять валокардин, чтоб не сильно ностальгировать о лихих 90х, когда еще всё мог.

Еще выпустите римейк Hard Corps и можно помирать.

Segment@tion fault

15 Oct, 17:54


Embed-клава с тачпадом к вчерашнему "монитору". Из минусов - свисток легко потерять, я бы предпочёл wired. Но вариантов, которые влазят в карман, не так много.

(это на говноклава для мобил с блютусами, а нормальное usb)

Segment@tion fault

14 Oct, 17:46


В современном эмбеде HDMI out встретишь чаще, чем uart на консоль, поэтому такие штуки must have. Эмулирует монитор, на другой стороне видно как обычный usb video device, так что картинку смотреть можно чем угодно.

Конкретные модели не даю, так как не реклама. От 15$ примерно все работают нормально.

Segment@tion fault

10 Oct, 20:17


Некоторые опции и фичи git, которыми я пользуюсь и про которые почему-то мало знают:

rerere.enabled = true - если вы один раз решили мерж-конфликты, а потом что-то пошло не так и вы отменили мерж, при повторе операции гит порешает известное сам.

pull.rebase = true - ненавижу merge при pull. эта опция говорит гиту перенести ваши новые коммиты выше тех, что приехали и история остается красивой.

ну и конечно git push --force-with-lease - если уже делаете force push, это не даст вам затереть изменения коллег.

Segment@tion fault

08 Oct, 20:47


use std::os::unix::net::UnixDatagram;

fn main() {
let sock = UnixDatagram::bind("./sock").unwrap();
let addr = sock.local_addr().unwrap();

sock.connect_addr(&addr).unwrap();
sock.send(b"test").unwrap();
sock.recv(&mut [0; 4]).unwrap();
}


I expected to see this happen: no crash of the operating system

Instead, this happened: macOS 15.0.1 crashed


https://github.com/rust-lang/rust/issues/131374

Ставьте шиндовс!

Segment@tion fault

06 Oct, 21:11


Ученые: квантовые компьютеры перевернут мир!
Айтишники:

https://80.lv/articles/doom-can-now-run-on-quantum-computers/

Segment@tion fault

06 Oct, 16:12


жиза

Segment@tion fault

06 Oct, 12:29


MS Copilot не умеет распознавать лица исторических личностей. Он бы может и мог, но при заливке фото другой ИИ находит и замазывает лицо, поэтому первому остаётся только догадываться.

Война ИИ в прямом эфире.

Segment@tion fault

05 Oct, 21:48


В Rust есть такая функция std::env::current_exe(), которая возвращает вам имя текущего исполняемого файла. Например "/bin/my". Но если файл был удален или заменен другим, значение будет "/bin/my (deleted)".

Почему? Rust тут ни при чем. Хотя частично и при чем - один из способов выяснения полного пути к текущему файлу - это определить его абсолютный путь из args[0] при запуске, либо приклеить к нему текущую папку вручную. Но поскольку в Rust рантайм минимальный - он резолвит путь файла программы в момент запроса, используя ссылку /proc/self/exe.

Которая и меняется "волшебным" образом с "/my/file" на "/my/file (deleted)", как только инода исполняемого файла помечается как удаленная (тоесть cp -f и mv тоже считаются). Почему так? В ядре любят этот суффикс исторически, чуть позже он перекочевал без изменений в пути cgroups. Считается, что это более безопасно, ядро ОС каким-то образом хочет передать вам информацию об изменении, но много вариантов у него нет.

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

p.s. В случае если каким-то непонятным образом в системе уже есть файл "/bin/my (deleted)" поведение линка в procfs станет непредсказуемым - указывать он будет якобы на существующий, но при open по ссылке там будет находиться ваш удаленный бинарник. Вот такие чудеса.

Segment@tion fault

04 Oct, 13:40


жиза

Segment@tion fault

03 Oct, 23:41


Некоторые наблюдения современного шиндовса 11

- в WSL2 совершенно кривой wayland, если работаете с гуем, лучше его вырубите. WAYLAND_DISPLAY="" спасает ситуацию

- кто-то совершенно упоротый упростил CPU profiles до примитива, теперь шиндовс по каким-то своим правилам, в зависимости от железа, решает с какой частотой должны работать ядра (ну или вы через API). но если хотите обычный нормальный Processor performance boost mode control в Power options, то его можно и включить:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\be337238-0d82-4146-a960-4f3749d470c7" -Name "Attributes" -Value 2


Недокументированные возможности и страшные ключи. Как я от этого отвык. Шиндовс - система не для простого юзера.

Segment@tion fault

02 Oct, 19:11


Когда долго играл в Rust, иногда вылазит боком

Segment@tion fault

30 Sep, 21:50


Иногда, не имея overload функций, названия в foreign API в Расте получаются довольно забавные.

Как тебе такое, Java?

Segment@tion fault

26 Sep, 23:21


ChatGPT отупел окончательно.

Есть такой давний крейт axum-server-dual-protocol - умеет слушать сразу и http и https и если надо, редиректить первое на второе. Удобно, если у вас все равно нестандартный порт у приложения.

Так вот, появилась как раз такая задача. То что крейт существует - помню, но название забыл. GPT4 мне пол часа доказывал, что такого крейта не существует и никогда не было. И предложил 100500 имплементаций, как это сделать самому (естественно, все не рабочие). Поисковик же выдал нужную ссылку примерно с третьего запроса.

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