LINUX.ORG.RU

Сообщения snizovtsev

 

Emacs 29.1

Новости — GNU's Not Unix
Группа GNU's Not Unix

Состоялся первый и долгожданный стабильный релиз Emacs из 29 ветки.

В этой версии интегрирована знаменитая ветка Pure GTK (PGTK), реализующая графический интерфейс на базе GTK3 без привязки к X11. Таким образом, это первый официальный релиз с нативной поддержкой Wayland.

Отдельно стоит отметить интеграцию модуля подсветки синтаксиса tree-sitter как альтернативу встроенной системе font-lock. Парсеры tree-sitter вместо регулярных выражений используют более точную GLR-грамматику и подгружаются из нативных библиотек, не привязанных к редактору. Среди конкурентов, активно развивающих tree-sitter, стоит отметить NeoVim.

Другие изменения:

  • Интегрирован Language Server клиент Eglot.
  • Интегрирован популярный модуль use-package.
  • Для X задействован XInput 2 и улучшен drag-n-drop.
  • Добавлен модуль для работы с sqlite3.
  • Поддержка изображений в формате WebP.
  • Ускорена работа с очень длинными строками.
  • Плавная прокрутка при использовании тачпада.
  • Улучшена поддержка смайлов и Unicode 15.0.
  • Реализована двойная буферизация на Windows.
  • Множество мелких исправлений.

>>> Подробности

 , , ,

snizovtsev
()

Перепись владельцев ноутбучных M2 NVMe SSD

Форум — Talks

Года 3 назад, когда впервые поставил себе NVMe диск, узнал про такую штуку как NVMe namespaces: по сути спецификация аппаратного LVM (на уровне контроллера SSD), позволяющего разбить диск на партиции произвольного размера и вроде бы даже с поддержкой overprovisioning. Сразу возникла идея, что так можно было бы сделать продвинутый кросс платформенный дуалбут: NTFS и Linux разделы без необходимости решать заранее сколько кому места положено.

Проблема в том, что большинство домашних SSD не поддерживают более 1 namespace. Собственно, вопрос – существует ли в 2023 году в розничной продаже M2 SSD с поддержкой namespaces.

Проверить можно так:

nvme id-ctrl /dev/nvme0 -H | grep nn
nn        : 1 (если больше -- победа)
nvme list
Model: PC SN730 NVMe WDC 512GB 

 , ,

snizovtsev
()

Что полезного можно сделать за 6 месяцев до смерти

Форум — Talks

Предположим, что есть ресурсов на 6 месяцев, после которых вы решили умереть. В какой open source проект можно успеть разобраться и законтрибьютить что-нибудь полезное и не слишком тривиальное, не забросив на полпути?

 

snizovtsev
()

Наркоманский Pimpl

Форум — Development

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

#include <junk1.h>
#include <junk2.h>
class Foo {
 public:
  static std::unique_ptr<Foo> Make();
  void DoWork();
 private:
  Foo();
  Junk1 left_hand;
  Junk2 right_hand;
};

Пользователь работает с классом только через Make и DoWork, но из-за того, что нельзя сделать forward declaration отдельно для методов – приходится ребилдить свой код при каждом изменении junk1 и junk2.

Классические способ решения проблемы:

  1. Популярный Pimpl – спрятать Junk1 и Junk2 в другой класс, а в хедере оставить указатель на forward declaration. Минусы: ручной this, двойное разыменование;
  2. Сделать DoWork виртуальным, а в фабрике возвращать наследника. Минусы: неявный вызов, много boilerplate.
  3. Аналогично виртуальным методам, но кастить Foo* на FooImpl*. Опять boilerplate, но быстро.

Но упарываясь очередной ночью без сна мне пришла иная мысль. Ведь по сути мы хотим сделать forward declaration функции с неявным this, но синтаксис нам этого не позволяет. Но что если взять расширение компилятора, и разрешить проблему на уровне линковщика? Вуаля:

#include <stdio.h>

struct Foo {
    int add(int a, int b) asm("_ZN7FooImpl3addEii");
protected:
    Foo() noexcept = default;
};

struct FooImpl : Foo {
    using Foo::Foo;
    int add(int a, int b);
    int x;
};

int FooImpl::add(int a, int b) {
    printf("%s: Adding %d with %d:\t Result:%d\n", 
            __PRETTY_FUNCTION__, a, b, a+b+x);
    return a+b+x;
}

int main()
{
    FooImpl obj;
    obj.x = 10;
    obj.add(3, 6);

    Foo &erased = obj;
    erased.add(3, 5);
    return 0;
}

Код работает на всех версиях gcc, clang, icc. Для GCC также работает __attribute__ ((alias ("_ZN7FooImpl3addEii"))).

Как думаете, был бы полезен плагин gcc/clang, реализующий атрибут на уровне класса, чтобы для undefined symbols автоматически делать переименования символа?

 ,

snizovtsev
()

Ограничение RSS памяти, с учётом SHR

Форум — Admin

Тестирую код, жрущий много памяти. Память жрётся по 2м направлениям: анонимные аллокации и shared через mmap 17GB файла с MADV_WILLNEED.

Хочу протестировать скорость, как если бы памяти на хосте было 10GB. На машине реально 32GB + 11GB swap.

Беру systemd-run, пробую:

$ systemd-run --user --scope -p MemoryMax=1G -p MemoryHigh=1G -p MemorySwapMax=0 ./memory_hungry_app
...
Killed

Ок, значит какое-то ограничение отрабатывает. Пробую 10G:

$ systemd-run --user --scope -p MemoryMax=10G -p MemoryHigh=10G -p MemorySwapMax=0 env time -v ./memory_hungry_app

...
Maximum resident set size (kbytes): 18529480 (18GB)

Может prlimit?

$ prlimit -m=1073741824 prlimit
...
RSS        max resident set size              SOFT:1073741824 HARD:1073741824 bytes
$ prlimit -m=1073741824 env time -v ./memory_hungry_app
...
 Maximum resident set size (kbytes): 20522316

Т.е. эти утилиты не учитывают SHR в своих ограничениях. А хочется, чтобы системный кеш шаренных страниц этого процесса освобождался до пределов в 10GB.

Прочитанные мануалы:

  • man 5 systemd.resource-control – вроде нет других Memory;
  • man 2 getrlimit – RLIMIT_RSS: This limit has effect only in Linux 2.4.x, x < 30, and there affects only calls to madvise(2) specifying MADV_WILLNEED";

Какую ещё тулзу к cgroups попробовать? Хочется, чтобы без редактирования конфигов и контейнеров.

 , ,

snizovtsev
()

Эффективная по кешу случайная перестановка элементов массива

Форум — Development

Задача из реальной жизни:

Есть массив uint64_t F[N] на 17GB, где N ~= 10^9. Лежит на диске, можно mmap-ить.

Есть условно случайная перестановка элементов этого массива, т.е. последовательность indices из N различных чисел 1..N.

Перестановка определяется неявно умной хеш-функцией (MPHF), т.е. (условно) не хранится в памяти, а вычисляется как indices(i) = MPHF(F[i]).

Собственно требуется переставить элементы F по этой перестановке, но:

  1. Используя до 10GB памяти, лучше меньше (ограничение AWS Lambda),
  2. Не насилуя диск мелкими рандомными IOPS шириной 8 байт.

Очевидно, можно, условно, разделить 17GB на блоки по 1GB, формируя F’ в 17 проходов. 1GB в памяти, писать в обход кеша, всё что мимо блока – отбрасываем. Тут тоже вопрос – как бы сгруппировать записи, чтобы писать не по 8 байт в рандомной позиции, а по 64 (кеш линию).

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

 ,

snizovtsev
()

Не работает DisplayPort на Arch, работает на Ubuntu

Форум — General

Есть монитор 2560x1440 с выходом в Dual-DVI и активным переходником на DisplayPort. У монитора (или переходника) всегда был битый EDID, но проблем это не вызывало.

Есть ноут Dell c archlinux c LTS или stable ядрами. Та же конфигурация всегда работала по HDMI с другим монитором и проблем не было.

Проблема в том, что Arch со всем моим хозяйством (i915, gnome, wayland) не видит монитора, а Ubuntu Live (последняя LTS вроде) без проблем подключается ещё с этапа splash screen.

Куда копать? Разные опции модуля i915 попереключал - не помогает.

В логах dmesg никакого криминала кроме EDID:

 , ,

snizovtsev
()

Сколько часов вы проводите за монитором?

Голосования — Голосования(не подтверждено)


 , ,

snizovtsev
()

Посоветуйте облако для домашней лабы

Форум — General

Хочется странного, а именно личный «девелоперский» сервак, подобно тому что работодатели покупают на команду, но под личные игрушки за разумные деньги.

А именно:
- Один виртуальный инстанс с SSH в Европе (до США высок пинг);
- 99,9% времени он находится в «холодном» состоянии и не просит денег (до 10$ в месяц), но не обязательно выключен - я могу допиливать конфигурацию в виме, например;
- По нажатию кнопки инстанс вживую мигрирует с дешманского 1 shared vcpu 1gb ram на 24 dedicated vcpu 128gb ram с почасовой оплатой и обратно (т.е. нужна поддержка лайв миграции и cpu/memory hotplug);
- Подмонтировать/отмонтировать супербыстрый nvme;
- Совсем хорошо бы ещё видеокарту on demand (CUDA), но могу пережить;
- Предсказуемая тарификация (желательно возможность установить лимит расходов);
- Желательно хорошая сеть между инстансами (10G), с поддержкой DPDK (подобно AWS ENA);
- Регистрация как физлицо;

Use cases: разово покомпилять ядро/yocto/openwrt, бенчмаркнуть lock-free синхронизацию как взрослый дядя, пофаззить код, обучить модель, запустить qemu-riscv в режиме tcg, поиграться с avx-512, etc.

 , ,

snizovtsev
()

Mailing lists: чем читать, писать и искать

Форум — General

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

Вот хочется чего-то подобного и для опенсорсных рассылок на личной почте (Gmail), которые не на Google Groups, а на Mailman, например. Т.е. после подписки сразу искать втч и по _архиву_ почтовым клиентом (а не гуглом).

Как бы подобное можно было настроить? В перспективе хочу использовать gmi (gmail api sync) + notmuch + emacs, но интересно и в целом как принято пользоваться рассылками.

 ,

snizovtsev
()

РКН начал шейпить HTTPS трафик от AWS до 50-200 кбит?

Форум — Talks

Сабж, хочу скачать 200мб релизной сборки с гитхаба [1] - скорость стабильно не больше 200 кбит/с. Трафик идёт с S3 бакета AWS.

Думаю - что то тут нечисто. Логинюсь по ssh на VPS - и вуаля, 3.5 мегабайта/с. Скачиваю по scp, тоже все норм.

Проверил на других файлах (читай бакетах) - аналогичная картина. У меня у одного так?

ISP: Онлайм, Москва
User-agent: Firefox, Wget
OS: Arch 5.2.11-zen

[1] https://github.com/tlaplus/tlaplus/releases/tag/v1.6.0

 , ,

snizovtsev
()

Major Linux Problems on the Desktop, 2018 edition

Форум — Talks

Вышла новая редакция простыни, почему Linux не готов для десктопа: https://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.curren...
Список проблем был написан автором ещё в 2012 году перед уходом на macos, и с тех пор большая часть пунктов не потеряла актуальности.
TLDR:

  • NVIDIA Optimus и ATI dynamic GPU не работают из коробки;
  • С NVIDIA всё совсем плохо, а тиринг есть у всех;
  • Нет подавления эха в микрофоне из коробки, как в windows/mac;
  • В ядре постоянно что нибудь ломают;
  • В X.org куча старых багов и проблем, висящих десятилетиями;
  • В Wayland невозможен эффективный RDP, а также полная вакханалия между тулкитами;
  • ШГ ещё актуально, но тут есть подвижки;
  • Коммерческого софта нет, как и условий для его рождения;
  • LTS дистрибутивы непригодны для использования, т.к. не поддерживают актуальное железо;
  • Ошибки в systemd, графических и аудио драйверах накрывают всю систему целиком, тогда как винда уже научилась перезагружать их бесшовно;
  • Разработчики ядра любят замалчивать новости об уязвимостях, и в 2017 году в одном только ядре было найдено 453 уязвимости против 286 во всем стеке Windows 10;
  • Большинство дистрибутивов не проводят аудит кода пакетов, поэтому ничто не мешает включить туда бэкдор;

 ,

snizovtsev
()

Обратный индекс HTTP заколовков веба

Форум — Security

Например, чтобы быстро посмотреть по Server популярные edge proxy.
Или по известной/найденной уязвимости в опенсорс продукте, опознающимся по заколовкам, быстро найти все bug bounty программы, которые он может аффектить.
Или найти все (популярные) хосты, которые ставят определённую куку.

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

 ,

snizovtsev
()

История интерактивных команд в Emacs

Форум — General

Переезжаю потихоньку с Vim на Emacs (+evil), в целом доволен - фич больше и работают они лучше, хотя конфигурировать его кратно сложнее для меня пока. В качестве starter kit взял Doom (develop branch) и доволен - он намного понятнее и легче Spacemacs.

Но появилась заноза. В emacs часто работа с интерактивной командой выглядит как M-x набор команды с Helm <RET> параметр в Helm <RET>, например:

M-x man <RET> bash <RET>
M-x customize-variable <RET> fill-column <RET>
M-x cd <RET> path <RET>

И это неудобно. Хочется иметь возможность:
1. Вернуться из второго интерактивного уровня в первый, т.е. отредатировать команду man, cd, etc.
2. «Перемещаться по истории команд» как в виме с ":<c-p>" - вернёт старую команду и даст мне её отредактировать. В случае с emacs я вижу это так:
M-x cd <RET> /some/long/path/to/dir <C-g>
M-x "жму волшебный хоткей" - емакс переключает меня в "cd" и подставляет /some/long/path/to/dir в Helm. 

Желательно чтобы работало в общем случае, а не отдельно для каждой интерактивной команды. Есть такое в природе?

UPD: в doom/evil есть какая-то эмуляция ":" в minibuffer, но аргументы там не работают. ":man bash" открывает просто «M-x man <RET>» и даже bash туда не подставляет.

 ,

snizovtsev
()

Почему конторы вроде outreachy не поддерживают левшей?

Форум — Talks

[Ночной тред-упорин]

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

Берём Microsoft - все ассиметричные мышки исключительно для правшей.
Берём Ikea - все ножницы для правшей.
Берём Apple - iPad держит негр правой рукой.
Берём любую клавиатуру - стрелки всегда справа.

Я не левша, но считаю что левшей дискриминируют и обижают.
Дискасс.

 ,

snizovtsev
()

ООО «Элтекс» и нарушения GPL. Куда сообщать?

Форум — Talks

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

https://habr.com/ru/post/435990/#comment_19615796

В компании работает около 200 программистов, которые пишут софт для оборудования. Все исходные коды принадлежат ЭЛТЕКС.

По факту на сайте лежит образ ФС их промышленного роутера с Linux, Busybox, GDB, OpenJDK и ещё кучи всего. Исходников, конечно, нет и, видимо, не предоставят - на их форуме гуглится много таких вопросов, всех послали.

Куда писать об GPL Violation, чтобы они на них натравили свору юристов? FSF/EFF, они же деньги от всяких handshake получали на это? Есть у кого подобный опыт?

 ,

snizovtsev
()

Перевод выделенного слова в тултипе

Форум — Desktop

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

Выглядит так: https://media.giphy.com/media/oHxWcCPfrlUjY8gRmx/giphy.gif

Возможно ли такое настроить или написать самому в Gnome/Wayland? Т.е. понятно, что можно заскриптовать отправку clipboard selection в окно словаря или уведомление, но хочется именно чтобы создавалось такое временное окно, спозиционированное рядом с выделенным текстом.

Возможно ли вообще, в теории, вычислить абсолютные координаты выделенного текста в X11/Wayland?

P.S. Подумал, что как костыль можно было бы эмулировать двойной клик (выделить слово), получить selection и показать тултип под курсором. Не будет работать с гиперссылками, ну и хрен с ними. Может уже кто написал такое?

 , ,

snizovtsev
()

Не работайте в Oracle

Форум — Talks

Наткнулся тут на интересный тред HackerNews, странно что на ЛОР ещё не приносили:

Q: What's the largest amount of bad code you have ever seen work?
A: Oracle Database 12.2.

Here is how the life of an Oracle Database developer is:

  • Start working on a new bug.
  • Spend two weeks trying to understand the 20 different flags that interact in mysterious ways to cause this bag.
  • Add one more flag to handle the new special scenario. Add a few more lines of code that checks this flag and works around the problematic situation and avoids the bug.
  • Submit the changes to a test farm consisting of about 100 to 200 servers that would compile the code, build a new Oracle DB, and run the millions of tests in a distributed fashion.
  • Go home. Come the next day and work on something else. The tests can take 20 hours to 30 hours to complete.
  • Go home. Come the next day and check your farm test results. On a good day, there would be about 100 failing tests. On a bad day, there would be about 1000 failing tests. Pick some of these tests randomly and try to understand what went wrong with your assumptions. Maybe there are some 10 more flags to consider to truly understand the nature of the bug.
  • Add a few more flags in an attempt to fix the issue. Submit the changes again for testing. Wait another 20 to 30 hours.
  • Rinse and repeat for another two weeks until you get the mysterious incantation of the combination of flags right.
  • Finally one fine day you would succeed with 0 tests failing.
  • Add a hundred more tests for your new change to ensure that the next developer who has the misfortune of touching this new piece of code never ends up breaking your fix.
  • Submit the work for one final round of testing. Then submit it for review. The review itself may take another 2 weeks to 2 months. So now move on to the next bug to work on.
  • After 2 weeks to 2 months, when everything is complete, the code would be finally merged into the main branch.


А с каким говнокодом приходилось работать вам?

 ,

snizovtsev
()

Project Mu — реализация UEFI на базе TianoCore

Новости — Open Source
Группа Open Source

Microsoft анонсировала Project Mu — адаптацию TianoCore edk2, распространяемую под лицензией 2-clause BSD.

Project Mu представляет собой набор из репозиториев, предназначенных для сборки UEFI. Project Mu использует TianoCore edk2 в качестве upstream, но при этом имеет значительные изменения и улучшения для использования в крупных проектах.

Проект учитывает реалии вендоров, которым требуется интегрировать аппаратно-специфичные части под NDA. Структура кода организована таким образом, чтобы вендор мог изолировать проприетарные части в отдельный репозиторий.

Особенности проекта:

  • Структура репозиториев и процесс разработки адаптирован для распространения «Firmware as a Service».
  • Экранная клавиатура.
  • Безопасное управление настройками UEFI.
  • Улучшение безопасности за счет удаления неиспользуемого устаревшего кода (практика, известная как уменьшение поверхности атаки).
  • Ускорение загрузки.
  • Редизайн меню.
  • Множество тестов и утилит для оптимизации и анализа качества.

>>> Подробности

 ,

snizovtsev
()

Криптовалютные стартапы

Форум — Talks

В последнее время лезут со своими вакансиями со всех утюгов. В среднем предлагают ЗП выше рынка, нескучный стек из всяких Rust и Go и хайлоад.

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

Кто сталкивался?

 ,

snizovtsev
()

RSS подписка на новые темы