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

15 Feb, 19:06


Знакомое место

Segment@tion fault

14 Feb, 19:15


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

https://t.me/echo_ok

Segment@tion fault

10 Feb, 11:17


ну это уже слишком

Segment@tion fault

07 Feb, 15:47


В этом году на Cyber Scotland Week разберём подробнее диоды. Мой доклад в 15:00 по GMT 27 февраля. Заходите, поговорим куда оно все катится.

https://www.cyberscotland.com/event/data-diodes-for-isolated-and-classified-networks-in-critical-infrastructure/

Segment@tion fault

31 Jan, 17:51


.

Segment@tion fault

27 Jan, 23:03


Deep Seek отказывается отвечать на вопросы, связанные с площадью Тяньаньмэнь, но фильтр там писали набранные по объявлениям - как только в тексте встречается "Tiananmen Square", он тут же затирается и бот перестает отвечать.

Цензуру обойти очень просто - я попросил бота называть площадь "Pooh Square" и он тут же мне выдал всё, о чём думает.

Segment@tion fault

27 Jan, 17:07


Китайский ИИ DeepSeek за один день покорил Уолл-Стрит, потому что упорно отказывается программировать на С++, а значит имеет сознание

Segment@tion fault

26 Jan, 16:22


Пишут, на следующей неделе Трамп собирается подписать указ о переименовании main обратно в master.

Make GitHub great again.

Segment@tion fault

26 Jan, 01:12


Быстрая демка веб-дашбордов в EVA ICS v4.

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

Всё это есть в комьюнити-версии, поставить и пользовать можно бесплатно.

Segment@tion fault

24 Jan, 22:11


В связи с трендом на cyber security, в промышленность и энергетику начинают проникать решения, которые еще недавно даже у военных пылились в нафталине, где-то между перфокартами и 8" дискетами. Но теперь оно - тренд и знать желательно.

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

Такая сеть ломает практически все протоколы, но зато ее саму невозможно поломать (в смысле - отправителя). По сути всё что проходит - только UDP (из коробки - например SNMP traps), остальное можно в это UDP инкапсулировать, например SMTP (без подтверждения доставки) и вообще любой push сообщений, или pub/sub, если нужно только pub с одной стороны, или только sub, но всегда на определенные топики, с другой. Когда мы регистрировали свой PSRT, в IANA нам намекали на плюсы такого функционала и хорошо что было время имплементировать. Впрочем, я тогда больше думал о сети, которая не может принимать данные в силу обрезанного embed-стека.

Модель Белла-Лападулы - модель мандатного управления доступом, еще простая, но уже более сложная, чем просто взять и обрезать-инкапсулировать готовые протоколы. Которая как раз реализуется с помощью диодов данных. К счастью, пока практических запросов не было, сетевики клиентов не могут понять и принять даже более простые диоды.

Segment@tion fault

24 Jan, 01:41


Внезапно перевел все наши продукты с jemalloc на mimalloc.

Битва аллокаторов - вечный холивар, расскажу свои соображения, а вы добавьте в комментариях.

- Причина, почему я вообще дернулся в смену аллокатора - клиенты начали ставить новый Raspbian, а там CONFIG_ARM64_16K_PAGES по-умолчанию включены. Jemalloc с 16кб-страницами по-умолчанию не работает и просто крешится на старте

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

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

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

- Бинарники с mimalloc примерно на 500kb легче

Segment@tion fault

20 Jan, 18:05


Одним из своих первых указов, Дональд Трамп отменил Agile.

Segment@tion fault

17 Jan, 18:26


Как разработчик софта для ембеда, периодически дорываюсь до железа.

На этой неделе моей жертвой стал PWM-контроллер PCA9685, который должен был крутить несколько моторов SG90 и один SG5010.

Шаг первый. Настройка. PCA9685 имеет 4 адреса, на которых может слушать на I2C-шине. Как правило, производитель раздает адреса 40-43h или 70-73h. За то, какой адрес будет активен, отвечают первые 4 бита регистра MODE.

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

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

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

После осмотра выяснилось, что к счастью сгорел только CJ2305 - МОП, отвечающий за защиту от переплюсовки. Дальше было некоторое время чудес - контроллер прекрасно крутил 2 мотора SG-90, но напрочь отказывался работать с SG5010.

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

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

Segment@tion fault

11 Jan, 15:45


В детстве у меня была мечта иметь конференц-телефон. Телефоны были тогда только p2p и конференц-телефон был невиданной роскошью. Да и p2p тоже.

Мечтал я собрать своих одноклассников на телефонную конференцию и задать им вопрос: "кому дать конфету?" Они бы закричали: "Мне!" А я бы ответил им в этот конференц-телефон: "рука в говне!"

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

Segment@tion fault

05 Jan, 04:44


Ferrocene кстати молодцы и активно развиваются. Их последний компилятор 24.11.0 базируется на Rust 1.81, идут с гэпом примерно чуть менее чем в 3 месяца от мейнстрима.

24.11 получил дополнительно IEC 62304. И теперь можно писать mission-critical софт для медицинских учреждений.

Если вы всю жизнь мечтали написать прошивку для аппарата МРТ на Rust - больше нет препятствий.

Полный набор ачивок выглядит сейчас так: ISO 26262 (TCL 3/ASIL D), IEC 61508 (T3), IEC 62304.

Segment@tion fault

03 Jan, 21:37


Кстати, весь функционал написал GitHub Copilot. Тесты тоже он написал, и его код его тесты проходит.

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

Segment@tion fault

03 Jan, 21:31


Вышел наш submap 0.3.1 с поддержкой регулярок в pub/sub саб-топиках. Это, напоминаю, базовый крейт для создания pub/sub моделей. Тоесть теперь можно написать вот такой ужас

smap.subscribe("some/~subtopic[0-9]+/topic", &client);
assert_eq!(smap.get_subscribers("some/subtopic3/topic").len(), 1);
assert_eq!(smap.get_subscribers("some/subtopic333/topic").len(), 1);
assert_eq!(smap.get_subscribers("some/subtopicx/topic").len(), 0);


и оно будет правильно работать. Медленно, особенно subscribe/unsubscribe, потому что нужно пройти все регулярки сабтопика, чтоб отписаться от нужной. Относительно быстро при publish, потому что регулярки компиленые.

Очень просили очень корпоративные клиенты. Но есть и хорошая новость - функционал опционален.

Segment@tion fault

02 Jan, 23:09


В современных процессорах, кроме операций над числами, есть операции над массивами (векторами). В современных Intel за это отвечает технология AVX, а в ARM есть NEON. Называется это SIMD - Single instruction/Multiple data, тоесть процессор всего за один такт может обработать (прибавить-отнять-умножить, их много) вместо одного числа, целый массив, который влазит в векторный регистр.

SIMD - очень крутая штука, например для мультимедии, где нужно на ходу увеличить-уменьшить громкость потока, изменить яркость картинки или наложить какой-то хитрый фильтр. Мультимедией, конечно, задачи не ограничиваются - тут уже зависит только от вашей фантазии.

Для использования SIMD не нужно писать на ассемблере. В Rust есть std::Simd, который пока unstable и доступен только в nightly, зато дает абстракцию над всеми процессорами. Или инструкции для конкретного процессора, которые stable, но доступны только под конкретную платформу. По опыту, Simd оверхеда не дает.

Векторные регистры относительно огромны - вы можете совать до 512 бит информации и процессить, например сразу 64 значения u8, 32 значения u16, 16 значений u32 или f32 и т.д. Например, поиск максимального значения в слайсе выглядит так:

use std::simd::num::SimdUint;
use std::simd::Simd;

let s: Simd<u8, 64> = Simd::from_slice(somedata);
let max = s.reduce_max();


Теоретически, если побить Vec<u8> на слайсы по 64 элемента, вы сможете найти максимальное значение в 64 раза быстрее. Но практически всё еще лучше - поскольку производители процессоров стараются максимально оптимизировать именно мультимедиа и подобные задачи, выигрыш будет исчисляться сотнями раз.

Segment@tion fault

01 Jan, 17:24


Кроме моего SNMP с v3 на Новый год выкатили и axum 0.8.

Много полезного, но опять поменяли некоторое API и нам с этим жить в 2025.

Segment@tion fault

01 Jan, 17:19


SNMPv3 кстати готов. Признаюсь, было интересно. Особенно right-aligned буфера из оригинального крейта, которые позволяют собирать ASN.1 практически с zero-copy. Как выяснилось, для TLV и LV-лейаутов это идеально, если вы можете заранее знать, что войдет и пушать это в обратном порядке.

Segment@tion fault

01 Jan, 13:49


С наступившим


+
2³+3³
+
4³+5³+6³
+
7³+8³+9³
=
2025

Segment@tion fault

29 Dec, 23:25


SNMPv3 кстати оказался весьма интересным в плане технической реализации. Мы должны сформировать мессагу, но забить всередине 12 байт подписи нулями, потом подсчитать hmac и всунуть на место нулей первые 12 байт. Для раста кстати есть крейт который умеет SNMPv3 USM, но автор на свою экосистему тоже чего-то подзабил и до полноценного клиента-сервера не доделал.

Но лучше читать сам RFC, в оригинале оно еще прекраснее. Не смотря на то, что в 2002 году в принципе существовало немало готовых KDF, авторы решили изобрести новую. Правда, солить ключ engineID, которая не меняется.

Деды извращались.

Segment@tion fault

28 Dec, 22:59


По работе часто встречаю железки с SNMP. К сожалению, в Rust с ними вменяемо работает только один крейт, собственно snmp, но автор забил на него 7 лет назад окончательно. Я же годами бегал вокруг-около и дописывал внутренние патчи и внешние микромодули.

Внезапно попалась железка, опрос которой нужно перетащить с питона на раст, которая поддерживает только SNMPv1, а в крейте, опять же внезапно, оказалось поддержки первой версии нету (хотя очень удивительно, v1 отличается от v2 по сути только тем, что в v2 добавили 64-битные counters, а в v1 их нет). В оригинальном крейте валялся PR, чуть менее старый чем сам крейт, где автор зачем-то вместе с v1 притащил tokio.

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

Из основого, что изменилось:

- собственно поддержка SNMPv1
- немного поменялось PDU API и теперь им можно прекрасно обрабатывать любые TRAPs (добавил пример)
- MIBs (под фичей, требует libnetsnmp)
- привел более-менее весь код к современному виду
- главное - смигрировал велосипедный Object Identificator на Oid из крейта asn, который давно стандарт во всей растовской X.690-экосистеме
- добавил async (под фичей)

Оно работает и даже хорошо. Будем в январе наконец запиливать туда и SNMPv3.

p.s. Пользуясь случаем, всех с наступающими и наступившими.

Segment@tion fault

17 Dec, 16:22


У V4L был фатальный недостаток, ну вы понимаете. Поэтому энтузиасты собрались и создали стильную, модную и молодежную libcamera.

libcamera призвана полностью заменить V4L, но к счастью она еще это не сделала. Тем не менее, поддержка многих современных камер работает только в ней. Если вы решили всунуть в проект либкамеру, готовьтесь к следующему:

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

- у libcamera есть mainstream-ветка а также форки от производителей железа, которые не согласны с разработкой mainstream, поэтому есть шанс, что вам нужен будет именно форк

- выберете вы форк или mainstream, есть большой шанс, что без патчей оно всё равно не соберется

- билд-система libcamera построена на meson, причем на свежих версиях, так что вам придётся тянуть везде питон

- раст-крейты под libcamera по качеству не уступают самой библиотеке

Segment@tion fault

17 Dec, 14:07


CVE-2024-49071 - Windows Defender индексирует файлы в папках юзеров. После чего любой юзер имеет доступ к базе дефендера.

Я говорил, Шиндовс очень сложная система. Все против тебя.

Segment@tion fault

15 Dec, 19:30


Немного о веб-плагинах.

Представьте что у вас есть React-CSR-приложение и вы хотите разрешить юзерам писать под него плагины.

Первое, что необходимо знать - как работают импорты модулей. Проще всего, когда сторонний модуль собран как umd - он поддерживает import в рантайме без приседаний, сам становится как window.ModuleName и зависимости ищет там же.

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

import * as React from "react";
window.React = React;


для каждого интересующего нас модуля.

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

Для начала, советую взять webpack - он самый предсказуемый. vite, например, начиная с 5й версии, срал на externals и пытается вам насильно запаковать React во всех случаях, кроме "jsx": "preserve" в tsconfig.json. Имеются и другие нюансы, например umd default export у webpack - window.ModuleName.default, а у vite - window.ModuleName. Такие ситуации должен уметь разруливать уже ваш загрузчик.

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

Segment@tion fault

15 Dec, 17:52


Типичный диалог в наше время

- ты же в крипте шаришь?
- ну, я, пишу на расте смарт контракты...
- о! сколько будет стоить биток через пол года??

Segment@tion fault

13 Dec, 17:05


В 1976 году доктор Байер из Kodak запатентовал новый фильтр для цифровых камер, принцип которого заключался в том, что за красный и синий цвета отвечает по одному сенсору, а за зелёный - два. Исходное изображение, соответственно, кодируется как RGGB, BGGR или в другой комбинации, в которой зелёный получает в 2 раза больше бит, чем остальные.

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

В результате изобретения Байера, цвета на цифровой фотографии резко стали куда более "живыми" и естественными. Сегодня фильтр Байера или десятки его производных вариантов, используются как в профессиональных камерах, так и в обычных мобильных телефонах. Один из секретов "крутой" камеры iPhone 10 лет назад - как раз фильтр "Quad Bayer" разработки Sony, начиная с 6й модели. Впрочем, конкуренты тоже быстро это выяснили и внедрили похожее в своих матрицах. Samsung, например, "сидят" на Nonacell SFA, с тем же принципом - 9 синих, 9 красных и 18 зелёных сенсоров на группу из 3*3 пикселей.

Segment@tion fault

12 Dec, 14:14


Лайфхаки. В Университете Токио не хотели, чтоб научные материалы читали китайские студенты и препады, поэтому накидали на сайте надписи "tiananmen square" со style="display: none"

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

Segment@tion fault

11 Dec, 18:46


Ехал сегодня на убере, водила рассказал, что Трамп опять разрешит писать критические приложения на C++

Segment@tion fault

08 Dec, 19:21


Пишем свой OPC-UA сервер с ChatGPT

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.