Будни #bootstrap, #rant
Вышла новая elfutils - https://sourceware.org/elfutils/.
Ну вышла и вышла, с кем не бывает.
Как обычно, авторы гнутых тулчейнов делают вид, что, кроме gnu, в этом мире ничего и нет:
Правильно, они настаивают на том, что эта функция должна быть в библиотеке с названием libstdc++, а то, что эта функция, с точно такими же свойствами, может быть еще много где, им пофиг.
И не рассказывайте мне, что они там про это не знают, или что более хороший тест на проверку наличия написать сложнее. Знают, не сложнее, просто им наличие альтернативы в мире open source - как кость в горле.
Конечно, приятнее быть the open source toolchain, а не одними из многих, с которыми нужно договариваться.
Починил я это так - https://github.com/pg83/ix/blob/main/pkgs/lib/elfutils/t/ix.sh#L23 Я уже давно перестал патчить исходники про такое. Ну вот хотят люди libstdc++ - ну получат они пустую фейковую библиотеку, а функция появится из другого места.
elfutils эти, кстати, сломанные, с ними не собирается ядро Linux, пришлось откатить.
Вышла новая elfutils - https://sourceware.org/elfutils/.
Ну вышла и вышла, с кем не бывает.
Как обычно, авторы гнутых тулчейнов делают вид, что, кроме gnu, в этом мире ничего и нет:
checking for __cxa_demangle in -lstdc++... no
configure: error: __cxa_demangle not found
in libstdc++, use --disable-demangler
to disable demangler support.
Правильно, они настаивают на том, что эта функция должна быть в библиотеке с названием libstdc++, а то, что эта функция, с точно такими же свойствами, может быть еще много где, им пофиг.
И не рассказывайте мне, что они там про это не знают, или что более хороший тест на проверку наличия написать сложнее. Знают, не сложнее, просто им наличие альтернативы в мире open source - как кость в горле.
Конечно, приятнее быть the open source toolchain, а не одними из многих, с которыми нужно договариваться.
Починил я это так - https://github.com/pg83/ix/blob/main/pkgs/lib/elfutils/t/ix.sh#L23 Я уже давно перестал патчить исходники про такое. Ну вот хотят люди libstdc++ - ну получат они пустую фейковую библиотеку, а функция появится из другого места.
elfutils эти, кстати, сломанные, с ними не собирается ядро Linux, пришлось откатить.
sourceware.org
The elfutils project
elfutils, libraries and tools for ELF files and DWARF data.
👍10🔥3🤮2❤1
https://lwn.net/Articles/947941/
TL;DR - groff (это штука типа tex, только в реальной жизни ее используют для форматирования man pages), однажды очень давно сделали очень правильную вещь -
Но вот ее текущему мейнтейнеру пришло в голову взять, и отменить это поведение.
Это, очевидно, поломало кучу man pages, потому что вы копируете оттуда "--help" в терминал, и у вас ничего не работает.
По ссылке, конечно, самое главное не текст с описанием проблемы, а комментарии, потому что туда пришли все - и пользователи, и мейнтейнеры дистрибутивов, которым теперь с этим жить, и сам автор изменения.
Автор изменения, конечно, редкостный #errogant мудила, потому что сделал это он, мол, потому, что хотел, чтобы в groff корректно рендерилось какое-то говно мамонта - https://github.com/g-branden-robinson/retypesetting-mathematics, а на то, что это изменение literally ломает тысячи man страниц, ему аще похуй.
Короче, очередная война между практиками, которым важно, чтобы работало, и людьми, которые разобрались в256 отттенков серого всех возможных способов нарисовать горизонтальную черту, и хотят, чтобы и все остальные тоже этому научились.
Думаете, преувеличиваю?
Нет, все ровно так:
"If a person sits down to write a man page from scratch in a text editor, they will have things to learn, and in my opinion the hyphen/minus distinction is one of them. (As the original article suggested, there are in fact four other "ASCII" glyph distinctions to learn about.)
The theme of audience is also applicable to why I made this change in groff upstream. The GNU Project generally releases source archives, not binary packages. The primary consumers of groff releases from GNU are therefore, I would expect, people who already know of the package and desire to obtain it"
Товарищ реально считает, что нужно заставить человека, который решил написать доку (а это уже подвиг!), заставить разобраться во всех этих хитростях.
Короче, в комментах ЖЫР, не упустите!
TL;DR - groff (это штука типа tex, только в реальной жизни ее используют для форматирования man pages), однажды очень давно сделали очень правильную вещь -
The specified behavior of groff is that an ASCII "-" (Hyphen-Minus) in the input becomes a Hyphen in the output. Это не соответствует поведению оригинальной программы, с которой слизали groff.Но вот ее текущему мейнтейнеру пришло в голову взять, и отменить это поведение.
Это, очевидно, поломало кучу man pages, потому что вы копируете оттуда "--help" в терминал, и у вас ничего не работает.
По ссылке, конечно, самое главное не текст с описанием проблемы, а комментарии, потому что туда пришли все - и пользователи, и мейнтейнеры дистрибутивов, которым теперь с этим жить, и сам автор изменения.
Автор изменения, конечно, редкостный #errogant мудила, потому что сделал это он, мол, потому, что хотел, чтобы в groff корректно рендерилось какое-то говно мамонта - https://github.com/g-branden-robinson/retypesetting-mathematics, а на то, что это изменение literally ломает тысячи man страниц, ему аще похуй.
Короче, очередная война между практиками, которым важно, чтобы работало, и людьми, которые разобрались в
Думаете, преувеличиваю?
Нет, все ровно так:
"If a person sits down to write a man page from scratch in a text editor, they will have things to learn, and in my opinion the hyphen/minus distinction is one of them. (As the original article suggested, there are in fact four other "ASCII" glyph distinctions to learn about.)
The theme of audience is also applicable to why I made this change in groff upstream. The GNU Project generally releases source archives, not binary packages. The primary consumers of groff releases from GNU are therefore, I would expect, people who already know of the package and desire to obtain it"
Товарищ реально считает, что нужно заставить человека, который решил написать доку (а это уже подвиг!), заставить разобраться во всех этих хитростях.
Короче, в комментах ЖЫР, не упустите!
LWN.net
Hyphens, minus, and dashes in Debian man pages
It is probably fair to say that most Linux users spend little time thinking about the troff typ [...]
🤯9🤡6🔥5👍2❤1😱1
Forwarded from shit collection
This media is not supported in your browser
VIEW IN TELEGRAM
😱24👍12🔥9❤4🤯4
commit -m "better"
https://github.com/hyprwm/Hyprland/pull/3366 #ddv - хуемразь и ебаный нарцисс, не знаю, что про него еще добавить. Пара цитат: https://github.com/hyprwm/Hyprland/pull/3366#discussion_r1329091508 "Do not harass, intimidate, or in any other way discriminate…
https://blog.vaxry.net/articles/2023-inclusiveActivists #gold
Совершенно крутой текст от Vaxry.
TL;DR - коллега написал, что настоящая инклюзивность - это когда, если Адольф Гитлер пишет нормальный код на С++, то его вкладу могут быть рады в open source проекте. Его за это, конечно, назвали фашистом, и он в ответ накатал этот текст.
Inclusive communities, in the eyes of such advocates, are often the opposite of inclusive. They will try and find things that you do outside of your proffessional persona, or often infer, guess, meddle with, or lie about what you say and stand for. Then, once they have the "ammo", they will ostracize you. Ban, kick, call for removal, censorship.
...
I firmly believe that FOSS is literally for everyone. Unlike those people, I stand by my stance that even if you are something that the country I live in disagrees with, you still are free to use, contribute to, and be a part of the greater FOSS community.
Совершенно крутой текст от Vaxry.
TL;DR - коллега написал, что настоящая инклюзивность - это когда, если Адольф Гитлер пишет нормальный код на С++, то его вкладу могут быть рады в open source проекте. Его за это, конечно, назвали фашистом, и он в ответ накатал этот текст.
Inclusive communities, in the eyes of such advocates, are often the opposite of inclusive. They will try and find things that you do outside of your proffessional persona, or often infer, guess, meddle with, or lie about what you say and stand for. Then, once they have the "ammo", they will ostracize you. Ban, kick, call for removal, censorship.
...
I firmly believe that FOSS is literally for everyone. Unlike those people, I stand by my stance that even if you are something that the country I live in disagrees with, you still are free to use, contribute to, and be a part of the greater FOSS community.
blog.vaxry.net
Vaxry's Blog
A programming blog written by Vaxry.
👍39🔥10❤6👎3
commit -m "better"
https://www.phoronix.com/scan.php?page=news_item&px=Systemd-Creator-Microsoft Вчера стало известно, что Леннарт ушел из RH. Ну ушел и ушел, я не стал про это писать. Но, знаете ли, удержаться от того, чтобы сообщить, что ушел он в Microsoft, я не могу. …
https://www.phoronix.com/news/systemd-255-rc1
Я просто оставлю это здесь - в #systemd появилась поддержка BSOD. Нет чтобы что-то хорошее из винды притащить, а?
Я просто оставлю это здесь - в #systemd появилась поддержка BSOD. Нет чтобы что-то хорошее из винды притащить, а?
Phoronix
systemd 255-rc1 Brings "Blue Screen of Death" Support & New Tool To Spawn VMs
Systemd 255-rc1 is out this morning and it's packed with even more features for this dominant Linux init system and a growing list of other system utilities
😁27❤1🔥1🐳1
commit -m "better"
Будни #bootstrap #gold #gir Гля чо у меня есть! pg:~/ix ls .../...-bin-gir/lib/girepository-1.0 cairo-1.0.typelib DBus-1.0.typelib DBusGLib-1.0.typelib fontconfig-2.0.typelib freetype2-2.0.typelib Gio-2.0.typelib GIRepository-2.0.typelib GL-1.0.typelib GLib…
Будни #bootstrap
В прошлом тексте рассказал, что научился собирать статически слинкованный питон с произвольным набором расширений на C.
Я этот "кубик" оформил в удобном для применения виде:
Ну, то есть, я сделал настраиваемую снаружи (через флаги) сборку питона.
Это мне позволило замахнуться на модули, использующие cffi модуль!
Вообще говоря, cffi - страшная жесть: https://github.com/flacjacket/pywayland/blob/main/pywayland/ffi_build.py Разработчики "pure python" модуля копипастят к себе определения нужных им C функций, после чего модуль cffi парсит это говно, вызывает конпелятор, и дает на выходе .so-шку, которую можно загрузить в python, и дергать функции какой-то внешней (оборачиваемой таким образом) .so-шки.
Собственно, мне нужно было научиться собирать в статику оба этих "уровня абстракции".
В общем-то, с этим мне и помог кубик из предыдущего поста.
На каждом шаге я даю на вход родной сборке особенным образом скрафченый питон, который может "загрузить" (а, на самом деле, оно уже в нем просто есть) и нужную для cffi библиотеку через фейковый "dlopen", и загрузить получившуюся машинерию, которую колдует cffi (тоже потому что она уже в нем есть).
Так, в несколько шагов, можно развернуть сколь угодно сложный cffi модуль питона.
https://github.com/pg83/ix/blob/main/pkgs/lib/py/wlroots/t/ix.sh#L17 - например, для сборки pywlroots мы готовим питон, в котором есть модуль cffi, и уже заранее собранный модуль pywayland.
Короче, получился очень удобный кубик.
Зачем я ебался со всеми этими сложностями?
Мне очень нужен был https://qtile.org/! И он у меня теперь есть!
А вот зачем он мне нужен - в следующей серии.
В прошлом тексте рассказал, что научился собирать статически слинкованный питон с произвольным набором расширений на C.
Я этот "кубик" оформил в удобном для применения виде:
pg@...:~/ix ./ix build bld/python/frozen \
--python_ver=12 \
--py_extra_modules=lib/py/wayland
pg@...:~/ix /ix/store/.../bin/python3
Python 3.12.0 (main, Nov 6 2023) ...
>>> import pywayland
>>>
Ну, то есть, я сделал настраиваемую снаружи (через флаги) сборку питона.
Это мне позволило замахнуться на модули, использующие cffi модуль!
Вообще говоря, cffi - страшная жесть: https://github.com/flacjacket/pywayland/blob/main/pywayland/ffi_build.py Разработчики "pure python" модуля копипастят к себе определения нужных им C функций, после чего модуль cffi парсит это говно, вызывает конпелятор, и дает на выходе .so-шку, которую можно загрузить в python, и дергать функции какой-то внешней (оборачиваемой таким образом) .so-шки.
Собственно, мне нужно было научиться собирать в статику оба этих "уровня абстракции".
В общем-то, с этим мне и помог кубик из предыдущего поста.
На каждом шаге я даю на вход родной сборке особенным образом скрафченый питон, который может "загрузить" (а, на самом деле, оно уже в нем просто есть) и нужную для cffi библиотеку через фейковый "dlopen", и загрузить получившуюся машинерию, которую колдует cffi (тоже потому что она уже в нем есть).
Так, в несколько шагов, можно развернуть сколь угодно сложный cffi модуль питона.
https://github.com/pg83/ix/blob/main/pkgs/lib/py/wlroots/t/ix.sh#L17 - например, для сборки pywlroots мы готовим питон, в котором есть модуль cffi, и уже заранее собранный модуль pywayland.
Короче, получился очень удобный кубик.
Зачем я ебался со всеми этими сложностями?
Мне очень нужен был https://qtile.org/! И он у меня теперь есть!
А вот зачем он мне нужен - в следующей серии.
GitHub
pywayland/pywayland/ffi_build.py at main · flacjacket/pywayland
Python bindings for the libwayland library. Contribute to flacjacket/pywayland development by creating an account on GitHub.
🔥15👍5❤2👎1
commit -m "better"
Будни #bootstrap В прошлом тексте рассказал, что научился собирать статически слинкованный питон с произвольным набором расширений на C. Я этот "кубик" оформил в удобном для применения виде: pg@...:~/ix ./ix build bld/python/frozen \ --python_ver=12…
#qtile
Собственно, в https://xn--r1a.website/itpgchannel/374 я как-то обмолвился, что очень хочу запилить нечто под названием "scrollable tiling wm".
Мысли этой не первый год, в первый раз я про это задумался лет 5 назад. Но, как я уже писал выше, ничего подходящего для этого не было и нет, если не рассматривать JS plugin к mutter. А я не рассматриваю, потому что этот всратый JS в mutter я буду запускать дольше, чем запилить новый кленовый wlroots.
Я пару раз даже порывался что-то наколбасить поверх wlroots, но мне очень не хотелось пердолиться с C, потому что я бы дольше ловил утечки и проезды, чем занимался полезным делом.
Собственно, пару лет назад я узнал про qtile, что его недавно портировали на wlroots, и что он написан на питоне - очень годный язык для такой задачи, как по мне, потому что композитор сам ничего не делает, только дергает несколько функций wlroots на один кадр, ну и с утечками там все хорошо. Сильно лучше чем в С уж точно.
Собственно, я потихоньку пилил инструменты, чтобы собрать static qtile, и недавно у меня это получилось.
А теперь самая мякотка!
BayanWM (от слова "аккордеон", а не то, что вы подумали) я запилил, как кастомный layout engine для qtile, за один вечер - https://github.com/pg83/bayanwm/blob/main/config.py#L49-L134 Работает оно превосходно, даже лучше, чем я ожидал. Попробуйте, скопипастить это в свой конфиг qtile займет 5 минут.
Респект и уважуха проекту за подход к конфигурированию, когда конфиг - это, по сути, плагин, которому доступна вся внутренняя механика проекта.
Мораль?
Любую задачу можно запилить за 15 минут и 100 строк кода, если знать, куда тюкнуть!
Собственно, в https://xn--r1a.website/itpgchannel/374 я как-то обмолвился, что очень хочу запилить нечто под названием "scrollable tiling wm".
Мысли этой не первый год, в первый раз я про это задумался лет 5 назад. Но, как я уже писал выше, ничего подходящего для этого не было и нет, если не рассматривать JS plugin к mutter. А я не рассматриваю, потому что этот всратый JS в mutter я буду запускать дольше, чем запилить новый кленовый wlroots.
Я пару раз даже порывался что-то наколбасить поверх wlroots, но мне очень не хотелось пердолиться с C, потому что я бы дольше ловил утечки и проезды, чем занимался полезным делом.
Собственно, пару лет назад я узнал про qtile, что его недавно портировали на wlroots, и что он написан на питоне - очень годный язык для такой задачи, как по мне, потому что композитор сам ничего не делает, только дергает несколько функций wlroots на один кадр, ну и с утечками там все хорошо. Сильно лучше чем в С уж точно.
Собственно, я потихоньку пилил инструменты, чтобы собрать static qtile, и недавно у меня это получилось.
А теперь самая мякотка!
BayanWM (от слова "аккордеон", а не то, что вы подумали) я запилил, как кастомный layout engine для qtile, за один вечер - https://github.com/pg83/bayanwm/blob/main/config.py#L49-L134 Работает оно превосходно, даже лучше, чем я ожидал. Попробуйте, скопипастить это в свой конфиг qtile займет 5 минут.
Респект и уважуха проекту за подход к конфигурированию, когда конфиг - это, по сути, плагин, которому доступна вся внутренняя механика проекта.
Мораль?
Любую задачу можно запилить за 15 минут и 100 строк кода, если знать, куда тюкнуть!
Telegram
commit -m "better"
https://www.reddit.com/r/wayland/comments/uva3os/scrollable_tiling_wm_alternative/
Знаете, обнять и плакать, что называется, как будто сам писал.
scrollable tiling wm, КМК, очень годная тема для ноутбуков.
Это, представьте себе, бесконечная лента окошек…
Знаете, обнять и плакать, что называется, как будто сам писал.
scrollable tiling wm, КМК, очень годная тема для ноутбуков.
Это, представьте себе, бесконечная лента окошек…
🔥15🤬3❤2
commit -m "better"
https://github.com/kovidgoyal/kitty/issues/606 Зато из комментариев стало понятно, зачем этот господин форкнул glfw. Он не осилил сделать нормальный ввод для своей аццкой программы, и ему понадобилось одновременно получать информацию про scancode, и про текст.…
(технический пост, не думаю, что это особо интересно, скорее, запись для себя)
Я уже год не обновлял #kitty, потому что там какая-то очередная версия сломала мои скрипты, и я не захотел их чинить.
Но вот решил собрать его заново, с чистого листа, выкинув всякого рода хаки, которые были несистемны (потому что их нельзя было применить за пределами сборки kitty), и построив все на механизмах, наработанных за этот год.
https://github.com/pg83/ix/tree/main/pkgs/bin/kitty/prev - вот тут я прикопал старую сборку
https://github.com/pg83/ix/tree/main/pkgs/bin/kitty/next - а вот тут новую
Отдельных папочек (целей) стало больше, каждая цель стала описываться проще.
Первый вариант - я, по сути, императивно, в одну большую портянку закодил нужные вызовы нужных инструментов, чтобы получить финальный результат. Скрипт получился очень неустойчив к изменениям.
Новый вариант - это, по сути, 10 раз запустить родную сборку (это быстро), взять маленький ее кусочек, поработать с ним, и подготовить его к тому, чтобы моя generic машинерия могла с ним работать:
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/modules/glfw/ix.sh - вот так я готовлю какой-то произвольный .so от родной сборки kitty
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/modules/fdt/ix.sh - или другой. По папочке на каждый модуль, но там и код не очень обобщаем
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/py/ix.sh - а вот так готовлю его питонячку, чтобы дальше мочь ее заморозить своим generic механизмом
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/unwrap/ix.sh#L21 - а вот так выглядит переписанный entry point для kitty, в котором я его манкипатчу на предмет wayland, no x11, другой способ подморозки произвольных ресурсов, и так далее
В общем, оно получилось гораздо более composable, и переживет следующие upver существенно проще.
Первый способ у меня занял в 5 - 10 раз больше чистого времени.
Мораль?
Некоторые вещи нужно делать не когда очень хочется, а когда ты к этому готов!
Fun fact - #Ковид начала переписывать kitty на Go, я бы на его место тоже так сделал, потому что сейчас kitty - это unmanageable mess.
Я уже год не обновлял #kitty, потому что там какая-то очередная версия сломала мои скрипты, и я не захотел их чинить.
Но вот решил собрать его заново, с чистого листа, выкинув всякого рода хаки, которые были несистемны (потому что их нельзя было применить за пределами сборки kitty), и построив все на механизмах, наработанных за этот год.
https://github.com/pg83/ix/tree/main/pkgs/bin/kitty/prev - вот тут я прикопал старую сборку
https://github.com/pg83/ix/tree/main/pkgs/bin/kitty/next - а вот тут новую
Отдельных папочек (целей) стало больше, каждая цель стала описываться проще.
Первый вариант - я, по сути, императивно, в одну большую портянку закодил нужные вызовы нужных инструментов, чтобы получить финальный результат. Скрипт получился очень неустойчив к изменениям.
Новый вариант - это, по сути, 10 раз запустить родную сборку (это быстро), взять маленький ее кусочек, поработать с ним, и подготовить его к тому, чтобы моя generic машинерия могла с ним работать:
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/modules/glfw/ix.sh - вот так я готовлю какой-то произвольный .so от родной сборки kitty
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/modules/fdt/ix.sh - или другой. По папочке на каждый модуль, но там и код не очень обобщаем
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/py/ix.sh - а вот так готовлю его питонячку, чтобы дальше мочь ее заморозить своим generic механизмом
* https://github.com/pg83/ix/blob/main/pkgs/bin/kitty/next/unwrap/ix.sh#L21 - а вот так выглядит переписанный entry point для kitty, в котором я его манкипатчу на предмет wayland, no x11, другой способ подморозки произвольных ресурсов, и так далее
В общем, оно получилось гораздо более composable, и переживет следующие upver существенно проще.
Первый способ у меня занял в 5 - 10 раз больше чистого времени.
Мораль?
Некоторые вещи нужно делать не когда очень хочется, а когда ты к этому готов!
Fun fact - #Ковид начала переписывать kitty на Go, я бы на его место тоже так сделал, потому что сейчас kitty - это unmanageable mess.
🔥5🤬3👍2
https://www.phoronix.com/news/Linux-6.7-sysctl
"This will cut-down on around 64 bytes of bloat per array, help with kernel build times, and an all-around improvement"
Вот читаешь такие новости, и думаешь: "какие они там хорошие люди, все, что надо, починили, сънли все, что висит низко, и теперь вот байтики ковыряют".
Все это разбивается о простой факт - патчи про реальное ускорение сборки ядра от #Ingo Molnar они так и не вмержили?
Почему?
Потому что ядро - ведро плохо структурированного кода, и что бы там сломалось от этих патчей Инго, никто предсказать не может.
А вот патчи по 1 строке, которые в реальной жизни не делают ничего - это пожалуйста.
"This will cut-down on around 64 bytes of bloat per array, help with kernel build times, and an all-around improvement"
Вот читаешь такие новости, и думаешь: "какие они там хорошие люди, все, что надо, починили, сънли все, что висит низко, и теперь вот байтики ковыряют".
Все это разбивается о простой факт - патчи про реальное ускорение сборки ядра от #Ingo Molnar они так и не вмержили?
Почему?
Потому что ядро - ведро плохо структурированного кода, и что бы там сломалось от этих патчей Инго, никто предсказать не может.
А вот патчи по 1 строке, которые в реальной жизни не делают ничего - это пожалуйста.
Phoronix
Sysctl With Linux 6.7 Continues Work To Remove Kernel Bloat
Since Linux 6.6 we've been seeing work upstreamed for sysctl working to remove its sentinel, the final empty element on each sysctl array
😢9😁4👍2
https://monaspace.githubnext.com/
Новые #monospace шрифты от github, а это всегда событие!
Из интересного, и чего я раньше не встречал:
"Texture healing works by finding each pair of adjacent characters where one wants more space, and one has too much. Narrow characters are swapped for ones that cede some of their whitespace, and wider characters are swapped for ones that extend to the very edge of their box. This swapping is powered by an OpenType feature called “contextual alternates,” which is widely supported by both operating systems and browser engines"
В каком эмуляторе терминала это работает, кто за это отвечает (#harfbuzz?), и как проверить,что оно срабатывает - я пока не понял.
Новые #monospace шрифты от github, а это всегда событие!
Из интересного, и чего я раньше не встречал:
"Texture healing works by finding each pair of adjacent characters where one wants more space, and one has too much. Narrow characters are swapped for ones that cede some of their whitespace, and wider characters are swapped for ones that extend to the very edge of their box. This swapping is powered by an OpenType feature called “contextual alternates,” which is widely supported by both operating systems and browser engines"
В каком эмуляторе терминала это работает, кто за это отвечает (#harfbuzz?), и как проверить,что оно срабатывает - я пока не понял.
Githubnext
An innovative superfamily of fonts for code
👍9❤5🔥3🤮1
Будни #bootstrap, #cross
У меня уже довольно давно была поддержка кросс-компиляции с любого host на любой linux, и на всякие нишевые платформы типа #WASI
Вот, добавил darwin-{amr64,x86_64} - https://github.com/pg83/ix/commit/85c66407c092677519f45ee55b265bc272759ad5.
В коммите всякие мелочи, типа {% if linux %} на зависимости, которые не собираются под darwin, типа libsigsegv, libbsd, и так далее.
Так как у меня cross compile даже для host == target, ничего особо сложного в этом не было, все заработало из коробки.
Почему я не сделал это раньше?
Потому что все это время я думал, как половчее попиздить macos sdk!
Компания Apple, как и MS, не очень поощряет сборку не на своих OS/железе. У них это написано в лицензии.
Поэтому есть такой небезызвестный https://github.com/phracker/MacOSX-SDKs - смотреть можно,трогать пользоваться, кажется, нельзя.
При этом, я решал следующие задачи:
* Рандомный васян, скачав #IX, должен "из коробки" уметь собрать любую программулю под macos. Украдет он при этом что-то, или нет, - не мои проблемы.
* Если это запускается на родной платформе для macos, то, по умолчанию, надо брать установленные в систему SDK, и ничего не воровать.
* Если этот код запускается в каком-то частном контуре, то должна быть возможность указать на url, по которому будет лежатьцельнопижженый легальный (с точки зрения владельца этого контура) слепок macos sdk. Например, он его купил, но за пределы контура распространять не может.
Соответственно, для васяна я качаю SDK с инторнетов, для host == target сборки даю возможность использовать родную SDK, ну а злые корпорации пусть в своем контуре используют то, что считают нужным, это не мое дело.
Все это я сделал моим любимым способом "dispatch по настройкам во все более специализированный таргет" - https://github.com/pg83/ix/blob/main/pkgs/lib/darwin/c/ix.sh#L3-L12
И сразу добавил нужные мне таргеты в мой CI - https://github.com/pg83/ix/blob/main/pkgs/set/ci/unwrap/ix.sh#L8-L9, это было совсем просто!
С windows sdk все будет, кажется, существенно хуже, потому что найти прямые ссылки на даже "серые" их версии у меня не получается. Везде всратый windows installer, который даже cabextract не берет. А выкладывать пижженый контент от своего имени мне бы не хотелось.
У меня уже довольно давно была поддержка кросс-компиляции с любого host на любой linux, и на всякие нишевые платформы типа #WASI
Вот, добавил darwin-{amr64,x86_64} - https://github.com/pg83/ix/commit/85c66407c092677519f45ee55b265bc272759ad5.
В коммите всякие мелочи, типа {% if linux %} на зависимости, которые не собираются под darwin, типа libsigsegv, libbsd, и так далее.
Так как у меня cross compile даже для host == target, ничего особо сложного в этом не было, все заработало из коробки.
Почему я не сделал это раньше?
Потому что все это время я думал, как половчее попиздить macos sdk!
Компания Apple, как и MS, не очень поощряет сборку не на своих OS/железе. У них это написано в лицензии.
Поэтому есть такой небезызвестный https://github.com/phracker/MacOSX-SDKs - смотреть можно,
При этом, я решал следующие задачи:
* Рандомный васян, скачав #IX, должен "из коробки" уметь собрать любую программулю под macos. Украдет он при этом что-то, или нет, - не мои проблемы.
* Если это запускается на родной платформе для macos, то, по умолчанию, надо брать установленные в систему SDK, и ничего не воровать.
* Если этот код запускается в каком-то частном контуре, то должна быть возможность указать на url, по которому будет лежать
Соответственно, для васяна я качаю SDK с инторнетов, для host == target сборки даю возможность использовать родную SDK, ну а злые корпорации пусть в своем контуре используют то, что считают нужным, это не мое дело.
Все это я сделал моим любимым способом "dispatch по настройкам во все более специализированный таргет" - https://github.com/pg83/ix/blob/main/pkgs/lib/darwin/c/ix.sh#L3-L12
И сразу добавил нужные мне таргеты в мой CI - https://github.com/pg83/ix/blob/main/pkgs/set/ci/unwrap/ix.sh#L8-L9, это было совсем просто!
С windows sdk все будет, кажется, существенно хуже, потому что найти прямые ссылки на даже "серые" их версии у меня не получается. Везде всратый windows installer, который даже cabextract не берет. А выкладывать пижженый контент от своего имени мне бы не хотелось.
GitHub
support cross macos · pg83/ix@85c6640
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
👍13❤3👏3💩1
commit -m "better"
Я думал, что больше всего на свете я ненавижу людей, которые включают -Werror в своем проекте. #werror Но, вдруг, оказалось, что есть грех и посерьезнее, а именно, включить -Werror в configure скрипта своего проекта: checking for boost/spirit/ inclu…
#werror #rant
В копилку проектов, желающих мнесмерти заебаться:
https://github.com/harfbuzz/harfbuzz/blob/main/src/hb.hh#L49-L97 - конечно, мы не только включим в meson Werror по умолчанию, так еще и досыпем всяких полезных (нет) предупреждений, которым сами не будем соответствовать!
Или вот - https://github.com/GNOME/pango/blob/main/meson.build#L91-L108
Коллеги, если вы ставите -Werror в свой проект, то вы обязуетесь убедиться, что оно работает корректно под всю матрицу поддерживаемых вами конпеляторов и OS.
Ладно, не обязуетесь, но если вы так не делаете - то выбольной на всю голову упырь зачем-то заставляете заебаться много людей на пустом месте!
В копилку проектов, желающих мне
https://github.com/harfbuzz/harfbuzz/blob/main/src/hb.hh#L49-L97 - конечно, мы не только включим в meson Werror по умолчанию, так еще и досыпем всяких полезных (нет) предупреждений, которым сами не будем соответствовать!
Или вот - https://github.com/GNOME/pango/blob/main/meson.build#L91-L108
Коллеги, если вы ставите -Werror в свой проект, то вы обязуетесь убедиться, что оно работает корректно под всю матрицу поддерживаемых вами конпеляторов и OS.
Ладно, не обязуетесь, но если вы так не делаете - то вы
GitHub
harfbuzz/src/hb.hh at main · harfbuzz/harfbuzz
HarfBuzz text shaping engine. Contribute to harfbuzz/harfbuzz development by creating an account on GitHub.
👍12❤3😁2😈1
commit -m "better"
Будни #bootstrap Есть такая библиотека - libidn2. На своем сайте, https://gitlab.com/libidn/libidn2, они утверждают, что могут (и что это предпочтительно) использовать системную libunistring (про эту всратую либу надо как-нибудь написать отдельно): "The…
#gnulib #rant
gnulib - это такая библиотека от #GNU, которая якобы должна приводить интерфейс системной библиотеки libc, кбогоугодному столлманоугодному виду.
У нее есть ряд проблем, которые, в основном, вызваны тем, что у проекта GNU все принято делать через жопу:
* ее не существует в виде отдельной либы. Нельзя собрать libgnulib.a и установить ее к себе на хост
* она поставляется (и разрабатывается) в виде M4 макросов, которые, по странным правилам, генерируют исходники на машине, где собирается то или иное приложение от GNU
* эти псевдоисходники вендорятся каждым проектом от GNU, с патчами от этих проектов
Для этих исходников генерируются (в процессе configure, ага), заголовки, мимикрирующие заголовки несуществующей libc от несуществующей gnu os (!= linux, потому что на linux непустое множество кода, добавляющегося в эти заголовки).
Там куча ifdef, которые либо что-то скрывают из системной libc, либо что-то добавляют (например, функции, которых нет в системе).
Как это работает? Хуево это работает!
Все это барахло очень хрупкО по отношению ко входным параметрам (способам autodetect в configure скриптах фич компилятора и наличия определенных функций в libc), не cross-friendly (например, фишка этой библиотеки - переопределять malloc/realloc, когда системные реализации могут вернуть 0(что разрешено стандартом!), а для этого нужно код реально запустить под target платформу).
Перепоределяется это все с помощью макросов, хотя, казалось бы, нужен тебе realloc с определенным свойством - ну запили ты себе GNU_realloc, и используй консистентно. Это, конечно, слишком прямое решение для проекта GNU.
https://gist.github.com/pg83/55712a369912405fcf9c4063533722eb
Вот вам мой сегодняшний пример, который стриггерил эту волну хейта.
Что тут написано?
configure скрипты вывели несовместимые определение для эмуляции inline в С, и определение для пометки чего-то, как потенциально неиспользуемое.
Вот так выглядит их склейка:
Ну, вот, реально эти затычки по отдельности могут работать, а вместе - нет, на что и ругается компилятор.
Самое безумие этой ситуации - что исправить это невозможно (а, точнее, запретительно дорого), потому что, даже если прийти в gnulib, и исправить это там, то по проектам это говно будет растекаться несколько лет!
Мораль?
Держитесь как можно дальше от проекта GNU, если у вас есть такая возможность.
gnulib - это такая библиотека от #GNU, которая якобы должна приводить интерфейс системной библиотеки libc, к
У нее есть ряд проблем, которые, в основном, вызваны тем, что у проекта GNU все принято делать через жопу:
* ее не существует в виде отдельной либы. Нельзя собрать libgnulib.a и установить ее к себе на хост
* она поставляется (и разрабатывается) в виде M4 макросов, которые, по странным правилам, генерируют исходники на машине, где собирается то или иное приложение от GNU
* эти псевдоисходники вендорятся каждым проектом от GNU, с патчами от этих проектов
Для этих исходников генерируются (в процессе configure, ага), заголовки, мимикрирующие заголовки несуществующей libc от несуществующей gnu os (!= linux, потому что на linux непустое множество кода, добавляющегося в эти заголовки).
Там куча ifdef, которые либо что-то скрывают из системной libc, либо что-то добавляют (например, функции, которых нет в системе).
Как это работает? Хуево это работает!
Все это барахло очень хрупкО по отношению ко входным параметрам (способам autodetect в configure скриптах фич компилятора и наличия определенных функций в libc), не cross-friendly (например, фишка этой библиотеки - переопределять malloc/realloc, когда системные реализации могут вернуть 0(что разрешено стандартом!), а для этого нужно код реально запустить под target платформу).
Перепоределяется это все с помощью макросов, хотя, казалось бы, нужен тебе realloc с определенным свойством - ну запили ты себе GNU_realloc, и используй консистентно. Это, конечно, слишком прямое решение для проекта GNU.
https://gist.github.com/pg83/55712a369912405fcf9c4063533722eb
Вот вам мой сегодняшний пример, который стриггерил эту волну хейта.
Что тут написано?
configure скрипты вывели несовместимые определение для эмуляции inline в С, и определение для пометки чего-то, как потенциально неиспользуемое.
Вот так выглядит их склейка:
# define _GL_INLINE static _GL_UNUSEDНу, вот, реально эти затычки по отдельности могут работать, а вместе - нет, на что и ругается компилятор.
Самое безумие этой ситуации - что исправить это невозможно (а, точнее, запретительно дорого), потому что, даже если прийти в gnulib, и исправить это там, то по проектам это говно будет растекаться несколько лет!
Мораль?
Держитесь как можно дальше от проекта GNU, если у вас есть такая возможность.
Gist
gist:55712a369912405fcf9c4063533722eb
GitHub Gist: instantly share code, notes, and snippets.
👍18🔥5🥰4🫡3🤡2😱1🐳1
commit -m "better"
https://www.opennet.ru/opennews/art.shtml?num=60040 "Опубликован репозиторий OpenELA для создания дистрибутивов, совместимых с RHEL" А вот это, КМК, знаковое событие. Потому что чем сильна RHEL, и centos (ранее)? Тем, что вендоры выдают сертификат на софт…
https://www.opennet.ru/opennews/art.shtml?num=60104
https://www.opennet.ru/opennews/art.shtml?num=60107
Теперь ждем, когда релизы от сообщества начнут выходить чуть раньше, чем релизы от RedHat, если вы понимаете, о чем я!
https://www.opennet.ru/opennews/art.shtml?num=60107
Теперь ждем, когда релизы от сообщества начнут выходить чуть раньше, чем релизы от RedHat, если вы понимаете, о чем я!
www.opennet.ru
Релиз дистрибутива Red Hat Enterprise Linux 9.3
Компания Red Hat опубликовала релиз дистрибутива Red Hat Enterprise Linux 9.3 (новая ветка была анонсирована на прошлой неделе, но примечания к релизу были размещены только вчера, а до этого на сайте оставался признак бета-версии). Обновление прошлой ветки…
🔥4😁3❤2🤡1
commit -m "better"
#maskray, #mold Коллега никак не успокаивается(и это хорошо!), написал план про ускорение LLD. https://discourse.llvm.org/t/parallel-input-file-parsing/60164 Речь идет про распараллеливание построения таблицы символов. Мне такая параллелизация не очень…
Писал, что недолюбливаю оптимизации, которые занимаются тем, что распараллеливают неподходящие для этого задачи.
Вот есть, например, crud rpc сервер, он обладает "естественной", простой, параллельностью, которая висит низко - бери да ешь.
Но проекты имеют тенденцию скатываться от естественной параллельности к сложной. От низковисящих фруктов к высоко висящим.
Для очень небольшого числа проектов это оправдано, но, чаще всего, лучше перейти к рядом стоящему дереву, где еще полно фруктов на самых нижних ветвях.
Для системы сборки естественная параллельность - это файлы или модули, зависит от языка.
Но, когда это съедено, люди зачем-то начинают делать вот это вот - https://www.opennet.ru/opennews/art.shtml?num=60095
"Для поддержки распараллеливания фронтэнд переведён на использование библиотеки Rayon и значительно переработан, например, многие его части теперь синхронизируются с помощью мьютексов и блокировок чтения/записи, а в коде используются атомарные типы. При тестировании производительности новая распараллеливаемая реализация могла выполнять компиляцию до 2% медленнее при работе в однопоточном режиме (-Z threads=1), но когда потоков больше одного скорость значительно возрастала. Например, при установке 8 потоков (-Z threads=8) в некоторых ситуациях время компиляции удавалось сократить на 50%."
Я не знаю, по мне эти цифры говорят, что не надо ЭТО делать!
Это же жесть - простой код стал сложным, в него будет сложнее внедрять продуктовые фичи и другие оптимизации!
Мьютексы! Атомики! Danger, Will Robinson!
И все ради чего?
Чтобы в некоторых случаях, при использовании 8!!! потоков, ускорить все на 50%?
Я не знаю.
Писал, и буду писать, что иногда надо остановиться, и не делать улучшения, которые сложны непропорционально профиту.
https://xn--r1a.website/itpgchannel/353
https://xn--r1a.website/itpgchannel/1179
https://xn--r1a.website/itpgchannel/22
https://xn--r1a.website/itpgchannel/539
Вот есть, например, crud rpc сервер, он обладает "естественной", простой, параллельностью, которая висит низко - бери да ешь.
Но проекты имеют тенденцию скатываться от естественной параллельности к сложной. От низковисящих фруктов к высоко висящим.
Для очень небольшого числа проектов это оправдано, но, чаще всего, лучше перейти к рядом стоящему дереву, где еще полно фруктов на самых нижних ветвях.
Для системы сборки естественная параллельность - это файлы или модули, зависит от языка.
Но, когда это съедено, люди зачем-то начинают делать вот это вот - https://www.opennet.ru/opennews/art.shtml?num=60095
"Для поддержки распараллеливания фронтэнд переведён на использование библиотеки Rayon и значительно переработан, например, многие его части теперь синхронизируются с помощью мьютексов и блокировок чтения/записи, а в коде используются атомарные типы. При тестировании производительности новая распараллеливаемая реализация могла выполнять компиляцию до 2% медленнее при работе в однопоточном режиме (-Z threads=1), но когда потоков больше одного скорость значительно возрастала. Например, при установке 8 потоков (-Z threads=8) в некоторых ситуациях время компиляции удавалось сократить на 50%."
Я не знаю, по мне эти цифры говорят, что не надо ЭТО делать!
Это же жесть - простой код стал сложным, в него будет сложнее внедрять продуктовые фичи и другие оптимизации!
Мьютексы! Атомики! Danger, Will Robinson!
И все ради чего?
Чтобы в некоторых случаях, при использовании 8!!! потоков, ускорить все на 50%?
Я не знаю.
Писал, и буду писать, что иногда надо остановиться, и не делать улучшения, которые сложны непропорционально профиту.
https://xn--r1a.website/itpgchannel/353
https://xn--r1a.website/itpgchannel/1179
https://xn--r1a.website/itpgchannel/22
https://xn--r1a.website/itpgchannel/539
www.opennet.ru
В ночных сборках Rust расширены возможности распараллеливания компиляции
Во фронтэнде компилятора Rust, выполняющем такие задачи, как синтаксический анализ, проверка типов и анализ заимствований, реализована поддержка параллельного выполнения, позволяющего существенно сократить время компиляции. Распараллеливание уже доступно…
👍24💩9❤6🔥4💯3🤔2