Будни #bootstrap
Тем временем, я воспроизвел цепочку сборки rustc/cargo 1.54.0 от проекта #mrustc (большое им спасибо и долгих лет жизни) - https://gist.github.com/pg83/b114dc78ce39a41fb8c895580a005dd0
То есть, у меня есть функционирующие cargo и rustc, которые пока не могут собрать сами себя, из-за того, что rustc хочет линковать и подгружать .so.
Если кто-то хотел интересных задач, да и просто погрузить свои шаловливые ручки в #stal/#ix - сейчас самое время!
Тем временем, я воспроизвел цепочку сборки rustc/cargo 1.54.0 от проекта #mrustc (большое им спасибо и долгих лет жизни) - https://gist.github.com/pg83/b114dc78ce39a41fb8c895580a005dd0
То есть, у меня есть функционирующие cargo и rustc, которые пока не могут собрать сами себя, из-за того, что rustc хочет линковать и подгружать .so.
Если кто-то хотел интересных задач, да и просто погрузить свои шаловливые ручки в #stal/#ix - сейчас самое время!
Gist
gist:b114dc78ce39a41fb8c895580a005dd0
GitHub Gist: instantly share code, notes, and snippets.
👍9🔥3❤2
commit -m "better"
https://drewdevault.com/2023/09/17/Hyprland-toxicity.html Слушайте, в этом тексте прекрасно все. Некто Drew DeVault (#ddv, нам он известен как автор #sway, языка #hare, да и к sr.ht #source_hut он приложил руку) написал мощный #sjw текст, что #hyprland community…
https://blog.vaxry.net/articles/2023-hyprlandsCommunity
А вот и ответ #ddv от автора #hyprland.
По мне, он выглядит гораздо более здраво, чем наезд от #ddv, почитайте.
Ну и если бы я верил в теории заговора, то сказал бы, что не могло бы быть лучшего PR этому проекту, чем наезд от #ddv. Например, видно, что этот ответ прочитали в 5 раз больше раз, чем предыдущие посты автора - https://blog.vaxry.net/
А вот и ответ #ddv от автора #hyprland.
По мне, он выглядит гораздо более здраво, чем наезд от #ddv, почитайте.
Ну и если бы я верил в теории заговора, то сказал бы, что не могло бы быть лучшего PR этому проекту, чем наезд от #ddv. Например, видно, что этот ответ прочитали в 5 раз больше раз, чем предыдущие посты автора - https://blog.vaxry.net/
blog.vaxry.net
Vaxry's Blog
A programming blog written by Vaxry.
👍6❤2🔥2
commit -m "better"
Будни #bootstrap Тем временем, я воспроизвел цепочку сборки rustc/cargo 1.54.0 от проекта #mrustc (большое им спасибо и долгих лет жизни) - https://gist.github.com/pg83/b114dc78ce39a41fb8c895580a005dd0 То есть, у меня есть функционирующие cargo и rustc,…
https://xn--r1a.website/itpgchannel/1336
Болельщики с мест нам подсказывают, что разработчики #hyprland прогнулись, и пилят CoC - https://github.com/hyprwm/Hyprland/pull/3366
Болельщики с мест нам подсказывают, что разработчики #hyprland прогнулись, и пилят CoC - https://github.com/hyprwm/Hyprland/pull/3366
Telegram
IT PG
https://blog.vaxry.net/articles/2023-hyprlandsCommunity
А вот и ответ #ddv от автора #hyprland.
По мне, он выглядит гораздо более здраво, чем наезд от #ddv, почитайте.
Ну и если бы я верил в теории заговора, то сказал бы, что не могло бы быть лучшего PR…
А вот и ответ #ddv от автора #hyprland.
По мне, он выглядит гораздо более здраво, чем наезд от #ddv, почитайте.
Ну и если бы я верил в теории заговора, то сказал бы, что не могло бы быть лучшего PR…
🫡8🔥5❤2👍1
Forwarded from Двач
Media is too big
VIEW IN TELEGRAM
В российских мониторах нашли бесполезные чипы
Существует такой «российский» монитор под названием V-MAX ПЦВТ.852859.300 от компании LightCom, который стоит более 50 тысяч рублей. Почему «российский»? Просто Минпромторг выдал ему 140 баллов «локализованности» за то, что там установлен микроконтроллер К1986ВЕ92QI (32-разрядный чип на ядре ARM Cortex-M3) производства зеленоградского «Миландра».
Но… если выпаять этот микроконтроллер и заменить его обычной проволочкой, чтобы включить цепь питания, то всё будет работать и без него. Потому что в мониторе установлен и спрятан за радиатором ещё один чип — RTD2525AR от тайваньской компании Realtek, который и отвечает за вывод изображения.
Существует такой «российский» монитор под названием V-MAX ПЦВТ.852859.300 от компании LightCom, который стоит более 50 тысяч рублей. Почему «российский»? Просто Минпромторг выдал ему 140 баллов «локализованности» за то, что там установлен микроконтроллер К1986ВЕ92QI (32-разрядный чип на ядре ARM Cortex-M3) производства зеленоградского «Миландра».
Но… если выпаять этот микроконтроллер и заменить его обычной проволочкой, чтобы включить цепь питания, то всё будет работать и без него. Потому что в мониторе установлен и спрятан за радиатором ещё один чип — RTD2525AR от тайваньской компании Realtek, который и отвечает за вывод изображения.
😁45🔥8🤣4❤3👍2🐳1
https://github.com/llvm/llvm-project/releases/tag/llvmorg-17.0.1
Вышел 17 clang. Почему-то сразу 0.1.
А я, на самом деле, уже давно на него перешел, потому что имею привычку использовать -rcX версии, и, в целом, проблем с ними у меня никогда не было.
Внезапно, переход с 16 на 17 оказался абсолютно безболезненным, все просто собралось, и заработало.
Вышел 17 clang. Почему-то сразу 0.1.
А я, на самом деле, уже давно на него перешел, потому что имею привычку использовать -rcX версии, и, в целом, проблем с ними у меня никогда не было.
Внезапно, переход с 16 на 17 оказался абсолютно безболезненным, все просто собралось, и заработало.
GitHub
Release LLVM 17.0.1 · llvm/llvm-project
LLVM 17.0.1 Release
❗ Note that LLVM 17.0.0 was withdrawn due to an issue, please use 17.0.1 instead.
❗ Note that LLVM 17.0.0 was withdrawn due to an issue, please use 17.0.1 instead.
🔥17👍3❤2
commit -m "better"
Опять лежит gitlab от freedesktop - https://gist.github.com/pg83/de5cc5e61cd5bbd05ac7e6959136fd89 И я, конечно, воспользуюсь этим, чтобы призвать всех владельцев open source софта делать RO зеркала на github.
https://gist.github.com/pg83/150749bd29e9c1cc6596c5e0c479d01a
Вот, пожалуйста, 45-ый релиз #GNOME, и их gitlab снова лежит. А зеркало на github они, конечно, снесли, из каких-то очень важных (нет) соображений.
Вот, пожалуйста, 45-ый релиз #GNOME, и их gitlab снова лежит. А зеркало на github они, конечно, снесли, из каких-то очень важных (нет) соображений.
Gist
gist:150749bd29e9c1cc6596c5e0c479d01a
GitHub Gist: instantly share code, notes, and snippets.
🐳9👍3💔3🔥1
Человечеству совершенно необходим инфраструктурный сервис, который бы по sha256 от данных мог вернуть эти данные.
Такой глобальный DHT, натянутый на большое число компьютеров.
Нужно это:
* чтобы хранить результаты вычисления чистых функций (это когда на вход sha256 от нужных данных, на выход - sha256 от результата, который сохранен в эту самую DHT).
* ну и чтобы я мог запилить кеш исходников для #ix, да и для любого другого дистрибутива (и не только исходников, потому что сборка - тоже чистая функция в терминах первого пункта)
Проблема в том, что такой сервис, в чистом виде, денег не приносит (ну, кроме очевидной, что там будет лежать ворованный контент). А поэтому:
* в чистом виде его никто и не пилит
* а всякие поделия типа https://ipfs.tech/ не являются таким сервисом в чистом виде
Все известные мне попытки запилить такой глобальный DHT ломались на том, что создатели хотели сохранить за собой "контроль за метаданными", назовем это так. Почему-то все, абсолютно все, хотят запихнуть в URI в такой системе какие-то дополнительные данные, и сохранить за собой контроль над управлением реестром типов этих данных.
Ну потому что тебе надо знать, как проинтерпретировать загруженные данные, а, значит, к владельцу реестра все будут ходить на поклон, чтобы их новый тип данных в него записали.
Вот, пожалуйста, в CID в ipfs закодирован тип данных - https://docs.ipfs.tech/concepts/content-addressing/#cid-versions
Вот, пожалуйста, реестр типов их типов - https://github.com/multiformats/multicodec/blob/master/table.csv
Это vendor lock, в чистом виде (не факт, что он удачный именно в случае IPFS, но, тем не менее).
Такой глобальный DHT, натянутый на большое число компьютеров.
Нужно это:
* чтобы хранить результаты вычисления чистых функций (это когда на вход sha256 от нужных данных, на выход - sha256 от результата, который сохранен в эту самую DHT).
* ну и чтобы я мог запилить кеш исходников для #ix, да и для любого другого дистрибутива (и не только исходников, потому что сборка - тоже чистая функция в терминах первого пункта)
Проблема в том, что такой сервис, в чистом виде, денег не приносит (ну, кроме очевидной, что там будет лежать ворованный контент). А поэтому:
* в чистом виде его никто и не пилит
* а всякие поделия типа https://ipfs.tech/ не являются таким сервисом в чистом виде
Все известные мне попытки запилить такой глобальный DHT ломались на том, что создатели хотели сохранить за собой "контроль за метаданными", назовем это так. Почему-то все, абсолютно все, хотят запихнуть в URI в такой системе какие-то дополнительные данные, и сохранить за собой контроль над управлением реестром типов этих данных.
Ну потому что тебе надо знать, как проинтерпретировать загруженные данные, а, значит, к владельцу реестра все будут ходить на поклон, чтобы их новый тип данных в него записали.
Вот, пожалуйста, в CID в ipfs закодирован тип данных - https://docs.ipfs.tech/concepts/content-addressing/#cid-versions
Вот, пожалуйста, реестр типов их типов - https://github.com/multiformats/multicodec/blob/master/table.csv
Это vendor lock, в чистом виде (не факт, что он удачный именно в случае IPFS, но, тем не менее).
IPFS
IPFS: Building blocks for a better web | IPFS
Open protocols to store, verify, and share data across distributed networks.
👍6🔥6❤2🤔2
commit -m "better"
https://xn--r1a.website/itpgchannel/1336 Болельщики с мест нам подсказывают, что разработчики #hyprland прогнулись, и пилят CoC - https://github.com/hyprwm/Hyprland/pull/3366
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 against anyone, particularly with respect to traits including but not limited to their sex, religion, race, appearance, gender, identity, sexuality, and so on."
А теперь для самых наблюдательных - какие споры посчитал возможным иметь #ddv? (спойлер - про политику сраться можно)
https://github.com/hyprwm/Hyprland/pull/3366#issuecomment-1727815552
Тут он пишет, что создатели проекта должны всем доказать, что они подходят для того, чтобы следить за соблюдением CoC.
https://github.com/hyprwm/Hyprland/pull/3366#issuecomment-1728007656
Тут он пишет, что назвать его "нарциссом" - это нарушение CoC, nuff said.
#ddv - хуемразь и ебаный нарцисс, не знаю, что про него еще добавить.
Пара цитат:
https://github.com/hyprwm/Hyprland/pull/3366#discussion_r1329091508
"Do not harass, intimidate, or in any other way discriminate against anyone, particularly with respect to traits including but not limited to their sex, religion, race, appearance, gender, identity, sexuality, and so on."
А теперь для самых наблюдательных - какие споры посчитал возможным иметь #ddv? (спойлер - про политику сраться можно)
https://github.com/hyprwm/Hyprland/pull/3366#issuecomment-1727815552
Тут он пишет, что создатели проекта должны всем доказать, что они подходят для того, чтобы следить за соблюдением CoC.
https://github.com/hyprwm/Hyprland/pull/3366#issuecomment-1728007656
Тут он пишет, что назвать его "нарциссом" - это нарушение CoC, nuff said.
GitHub
Add a CoC by vaxerski · Pull Request #3366 · hyprwm/Hyprland
Adds a coc
open for discussion
worth noting this is not contributor covenant, it's a custom CoC I wrote myself
open for discussion
worth noting this is not contributor covenant, it's a custom CoC I wrote myself
🤡8🔥5🥱4👍3😁3🤬1🐳1🆒1
commit -m "better"
https://www.opennet.ru/opennews/art.shtml?num=59666 #fork Продолжение истории с #hashicorp. Как обычно, когда какая-то компания пытается монетизировать выстреливший, за счет своей бесплатности и доступности, продукт, у нее ничего не выходит, потому что подсевшие…
https://www.opennet.ru/opennews/art.shtml?num=59793
#hashicorp
OpenTF переименовали в OpenTofu.
Переименовали, да и хер с ними. Просто хороший повод, чтобы вспомнить всю эту ситуацию.
Мне в голову пришла мысль, что у компаний, когда они начинают говорить "ну вы знаете, нам нужны бабки на развитие продукта, поэтому хер вам теперь, а не open source", на самом деле, есть разумный способ получить финансирование разработки.
Отдай проект community, например, в ту же Linux/Apache Foundation, сообщество получит контроль над разработкой, а взамен (от крупных корпораций, которые получат представительство в этом проекте) предоставит деньги.
А если компания так не делает, то грош цена ее заявлениям про "деньги на разработку проекту", компания в этот момент хочет ирыбку съесть контроль сохранить, и деньжат поднять.
И в этот момент ее нужно гнать ссаными тряпками, как минимум, за очевидное лицемерие.
#hashicorp
OpenTF переименовали в OpenTofu.
Переименовали, да и хер с ними. Просто хороший повод, чтобы вспомнить всю эту ситуацию.
Мне в голову пришла мысль, что у компаний, когда они начинают говорить "ну вы знаете, нам нужны бабки на развитие продукта, поэтому хер вам теперь, а не open source", на самом деле, есть разумный способ получить финансирование разработки.
Отдай проект community, например, в ту же Linux/Apache Foundation, сообщество получит контроль над разработкой, а взамен (от крупных корпораций, которые получат представительство в этом проекте) предоставит деньги.
А если компания так не делает, то грош цена ее заявлениям про "деньги на разработку проекту", компания в этот момент хочет и
И в этот момент ее нужно гнать ссаными тряпками, как минимум, за очевидное лицемерие.
www.opennet.ru
OpenTF, форк платформы Terraform, переименован в OpenTofu
Проект по созданию форка платформы управления конфигурацией и автоматизации поддержания инфраструктуры Terraform переименован из OpenTF в OpenTofu для исключения пересечений с проектом Terraform и товарными знаками компании Hashicorp. Сокращение "tf" решено…
👍7❤3🔥2
https://marc.info/?l=openbsd-tech&m=169519004327392&w=2
Короткий текст про hardened malloc из openbsd, и как он помогает отлавливать ошибки:
"I'm happy to say two of the more complex ones are (being) fixed: one turned out to be a reference counting bug in firefox. See http://undeadly.org/cgi?action=article;sid=20230912094727
The other, a write after free that crashed the X server when running picard was diagnosed by me. This one was a bit nasty, as it required instrumenting malloc to print some extra info to find the root cause.
The bug is that the call in https://github.com/openbsd/xenocara/blob/master/xserver/Xext/xvdisp.c#L1002 overwrites the first 4 bytes of the chunk next to the one allocated on line 995"
И, попутно, текст про внутренности SCUDO (тоже hardened malloc, используется в Android) - https://trenchant.io/scudo-hardened-allocator-unofficial-internals-documentation/
Короткий текст про hardened malloc из openbsd, и как он помогает отлавливать ошибки:
"I'm happy to say two of the more complex ones are (being) fixed: one turned out to be a reference counting bug in firefox. See http://undeadly.org/cgi?action=article;sid=20230912094727
The other, a write after free that crashed the X server when running picard was diagnosed by me. This one was a bit nasty, as it required instrumenting malloc to print some extra info to find the root cause.
The bug is that the call in https://github.com/openbsd/xenocara/blob/master/xserver/Xext/xvdisp.c#L1002 overwrites the first 4 bytes of the chunk next to the one allocated on line 995"
И, попутно, текст про внутренности SCUDO (тоже hardened malloc, используется в Android) - https://trenchant.io/scudo-hardened-allocator-unofficial-internals-documentation/
GitHub
xenocara/xserver/Xext/xvdisp.c at master · openbsd/xenocara
Read-only git conversion of OpenBSD's official cvs xenocara repository. - openbsd/xenocara
👍9🔥5❤3
commit -m "better"
#mesa #rant https://gitlab.freedesktop.org/mesa/mesa/-/issues/6578#note_1795307 В #mesa совершенно аховая обработка ошибок. Можно сказать, что ее там нет совсем, потому что есть несколько мест, где строки меняют на коды ошибок, и наоборот. Поэтому 2 высокогрейдовых…
В очередной раз дебажил проблему в #mesa.
Это уже какое-то дежавю - каждый новый релиз mesa приносит мне новый веселый черный экран.
Самое забавное - что я не могу написать ни одного нового слова по этому поводу, потому что про все эти проблемы в mesa я уже писал, просто они стреляют снова и снова:
* https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/vulkan/radv_physical_device.c?ref_type=heads#L1839-1842 - ошибка случается вот тут. И тут же происходит полная херня, потому что мы меняем текстовое описание ошибки на целое число, значение которого позже теряется в потрохах всего этого лапшеобразного кода. То есть, вместо простого grep мне пришлось пару часов трассировать этот код в gdb.
* https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/vulkan/radv_physical_device.c?ref_type=heads#L121-122 - а вот тут суть ошибки. Про него я тоже рассказывал. Эти упыри хотят кешировать шейдеры (кстати, отдельная тема - где это вообще нужно, кроме как на перфтесте какого-то сотрудника Valve, которому нужно натянуть на очередное фиолетовое?), а в качестве части ключа хотят использовать некую сущность, которая однозначно бы идентифицировала эту конкретную сборку mesa, чтобы в кеше не было пересечения. А для этого они используют какую-то магию динамического линковщика, чтобы узнать что-то персистентное для какого-то заранее известного адреса в своей программе - https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/disk_cache.h#L111
Ну и, конечно, если этот хак вернул -1, то мы упадем с черным экраном без вразумительного текста ошибки.
Вот нахуй так говнокодить? Почему нельзя попросить вендоров просто записать при сборке какой-то build id?
Я залечил это, подменив реализацию этих функций на более подходящую для статлинковки реализацию - https://github.com/pg83/ix/blob/main/pkgs/lib/mesa/t/ix.sh#L84-L93
А вообще, лучше бы выпилить этот кеш к херам, потому что они уже совсем оборзели - лезут туда напрямую из драйвера, чтобы закешировать какую-то хрень, на перестроение которой уходит нисколько времени.
Это уже какое-то дежавю - каждый новый релиз mesa приносит мне новый веселый черный экран.
Самое забавное - что я не могу написать ни одного нового слова по этому поводу, потому что про все эти проблемы в mesa я уже писал, просто они стреляют снова и снова:
* https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/vulkan/radv_physical_device.c?ref_type=heads#L1839-1842 - ошибка случается вот тут. И тут же происходит полная херня, потому что мы меняем текстовое описание ошибки на целое число, значение которого позже теряется в потрохах всего этого лапшеобразного кода. То есть, вместо простого grep мне пришлось пару часов трассировать этот код в gdb.
* https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/vulkan/radv_physical_device.c?ref_type=heads#L121-122 - а вот тут суть ошибки. Про него я тоже рассказывал. Эти упыри хотят кешировать шейдеры (кстати, отдельная тема - где это вообще нужно, кроме как на перфтесте какого-то сотрудника Valve, которому нужно натянуть на очередное фиолетовое?), а в качестве части ключа хотят использовать некую сущность, которая однозначно бы идентифицировала эту конкретную сборку mesa, чтобы в кеше не было пересечения. А для этого они используют какую-то магию динамического линковщика, чтобы узнать что-то персистентное для какого-то заранее известного адреса в своей программе - https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/disk_cache.h#L111
Ну и, конечно, если этот хак вернул -1, то мы упадем с черным экраном без вразумительного текста ошибки.
Вот нахуй так говнокодить? Почему нельзя попросить вендоров просто записать при сборке какой-то build id?
Я залечил это, подменив реализацию этих функций на более подходящую для статлинковки реализацию - https://github.com/pg83/ix/blob/main/pkgs/lib/mesa/t/ix.sh#L84-L93
А вообще, лучше бы выпилить этот кеш к херам, потому что они уже совсем оборзели - лезут туда напрямую из драйвера, чтобы закешировать какую-то хрень, на перестроение которой уходит нисколько времени.
GitLab
src/amd/vulkan/radv_physical_device.c · main · Mesa / mesa · GitLab
Mesa 3D graphics library
🤡10👍5🔥3❤2🤯1
commit -m "better"
https://codeberg.org/grisha/gumbo-parser/commit/be88ee735c873740211946fa4b80becd3947aa42 Гриша долго не стал ждать, и отвел следующую версию - 0.12.0 Я так понял, что весь сыр-бор был вот из-за этого проезда - https://codeberg.org/grisha/gumbo-parser/co…
https://archlinux.org/packages/extra/x86_64/gumbo-parser/
Так, ну раз Arch переехал на Гришину версию (https://gitlab.archlinux.org/archlinux/packaging/packages/gumbo-parser/-/commit/55a259dddedfac62147b6a042fbddf1ba817dee0), то и нам не зазорно, так думаю!
Так, ну раз Arch переехал на Гришину версию (https://gitlab.archlinux.org/archlinux/packaging/packages/gumbo-parser/-/commit/55a259dddedfac62147b6a042fbddf1ba817dee0), то и нам не зазорно, так думаю!
GitLab
upgpkg: 0.12.0-1: Update to 0.12.0 (55a259dd) · Commits · Arch Linux / Packaging / Packages / gumbo-parser · GitLab
HTML5 parsing library in pure C99 packages: gumbo-parser
👍6🔥5❤2🆒2
commit -m "better"
#mesa, свет моей жизни, искры на кончиках пальцев. Грех мой, любовь моя. Me-sa. Для ее сборки была разработана ныне очень популярная система сборки - #meson, и, на самом деле, это очень печально, потому что разработчики Mesa слишком хорошо знают meson, и…
Снова про #mesa
В цитируемом посте я писал, как ловко запилил процедуры "вычитания" одной статической библиотеки из другой, и почему мне пришлось так делать для сборки mesa.
К сожалению, эта процедура оказалась не очень "робастной" (то есть, апдейт на новую версию был сопряжен с трудностями) - иногда в этих .a оказывался символ с одинаковым именем, но с разной семантикой. В обычной жизни это был какой-нибудь неэкспортируемый из .so символ, и оно как-то жило, ну а у меня случались всякие разные артефакты из-за этой процедуры "вычитания".
Поэтому, в итоге, я решил прекратить экономить на спичках, и сделал по рабоче-крестьянски:
* Условный загрузчик плагинов я оставил как есть
* Ко всем символам, которые были в драйвере opengl, я добавил префикс "o_"
* Ко всем символам, которые были в драйвере vulkan, я добавил префикс "v_"
После чего слил драйвера для opengl и для vulkan в одну общую библиотеку. Да, она получилась больше по размеру, потому что некоторые одинаковые символы получили уникальные имена, но зато это стало лучше отражать то, как жти символы используются в .so (они там тоже дублируются). Ну и исчезли ошибки линковки, когда один и тот же символ объявлен в двух библиотеках.
После этого я, с легкостью, без появления новых странностей, обновился на самую последнюю mesa, чего давно не мог сделать.
В цитируемом посте я писал, как ловко запилил процедуры "вычитания" одной статической библиотеки из другой, и почему мне пришлось так делать для сборки mesa.
К сожалению, эта процедура оказалась не очень "робастной" (то есть, апдейт на новую версию был сопряжен с трудностями) - иногда в этих .a оказывался символ с одинаковым именем, но с разной семантикой. В обычной жизни это был какой-нибудь неэкспортируемый из .so символ, и оно как-то жило, ну а у меня случались всякие разные артефакты из-за этой процедуры "вычитания".
Поэтому, в итоге, я решил прекратить экономить на спичках, и сделал по рабоче-крестьянски:
* Условный загрузчик плагинов я оставил как есть
* Ко всем символам, которые были в драйвере opengl, я добавил префикс "o_"
* Ко всем символам, которые были в драйвере vulkan, я добавил префикс "v_"
После чего слил драйвера для opengl и для vulkan в одну общую библиотеку. Да, она получилась больше по размеру, потому что некоторые одинаковые символы получили уникальные имена, но зато это стало лучше отражать то, как жти символы используются в .so (они там тоже дублируются). Ну и исчезли ошибки линковки, когда один и тот же символ объявлен в двух библиотеках.
После этого я, с легкостью, без появления новых странностей, обновился на самую последнюю mesa, чего давно не мог сделать.
👍18🔥3❤1
commit -m "better"
#wasm #wasi #bootstrap #ix_run Ну, вот, после пары сегфолтов, я это дело таки завел: pg# ./ix run \ bin/b64 --target=wasi32 \ bld/sh \ bin/iwasm/fast/er \ -- \ iwasm --fast-jit \ '$(command -v base64)' b64 (Base64 Encode/Decode) Bob…
https://flak.tedunangst.com/post/www-which-wasm-works
Вот, коллега тоже сталкивается с проблемами "а как же запустить простую программу, собранную в WebAssembly".
При этом коллега не собирал ничего сложного, а "всего лишь" собрал JpegXL кодек.
В общем, пользовательский опыт в #wasm, если не брать песочницы браузеров, пока довольно неубедительный.
Вот, коллега тоже сталкивается с проблемами "а как же запустить простую программу, собранную в WebAssembly".
При этом коллега не собирал ничего сложного, а "всего лишь" собрал JpegXL кодек.
В общем, пользовательский опыт в #wasm, если не брать песочницы браузеров, пока довольно неубедительный.
👍5🔥2😁2
Будни #bootstrap
Вот есть такой https://github.com/microsoft/DirectXShaderCompiler
Он мне, сам по себе, не нужен (хотя стараниями Valve теперь DirectX есть и под Linux), но он нужен для сборки #AMDVLK (мне все хочется пощупать альтернативную #mesa-е реализацию).
В целом, он собрался без особых проблем, за исключением получения version info из git при сборке. Вообще, получить свою версию из .git чекаута хотят многие проекты, и бОльшая часть из них косячат.
Вот, и этот проект смешно накосячил.
https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/version/gen_version.py - скрипт, пытающийся получить version.
Обратим внимание на https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/version/gen_version.py#L39-L42, тут сразу несколько ошибок:
* самая очевидная - нельзя так ловить все ошибки, потому что можно проглотить ошибку в ситуации, когда глотать ее нельзя (например, .git есть, но он как-то испорчен)
* чуть менее очевидная - этот скрипт ведет себя неожиданно, когда команды git нет в PATH. Потому что subprocess в этом случае кидает FileNotFoundError (поубивал бы за это, если честно), а не CalledProcessError.
* парсинг информации от git не обернут вот в такой fail safe try/catch. То есть, ошибку от git игнорируем, а невозможность распарсить кривой результат - не игнорируем.
Ну, то есть, коллеги не смогли правильно закодить то, что они на самом деле хотели - вернуть какое-то дефолтное значение, если получить реальную информацию не получилось.
Поэтому мне пришлось запилить специальный fakegit для этого проекта, который всегда выходит с ошибкой:
https://github.com/pg83/ix/blob/main/pkgs/bin/dxsc/ix.sh#L25
Потому что мой стандартный fakegit не сработал, по причинам, изложенным выше.
Мораль? Мораль, наверное, такая - код по обработки ошибок гикто не тестирует, потому что это сложно, и он способен сам давать наведенные ошибки, когда начинает срабатывать!
Вот есть такой https://github.com/microsoft/DirectXShaderCompiler
Он мне, сам по себе, не нужен (хотя стараниями Valve теперь DirectX есть и под Linux), но он нужен для сборки #AMDVLK (мне все хочется пощупать альтернативную #mesa-е реализацию).
В целом, он собрался без особых проблем, за исключением получения version info из git при сборке. Вообще, получить свою версию из .git чекаута хотят многие проекты, и бОльшая часть из них косячат.
Вот, и этот проект смешно накосячил.
https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/version/gen_version.py - скрипт, пытающийся получить version.
Обратим внимание на https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/version/gen_version.py#L39-L42, тут сразу несколько ошибок:
* самая очевидная - нельзя так ловить все ошибки, потому что можно проглотить ошибку в ситуации, когда глотать ее нельзя (например, .git есть, но он как-то испорчен)
* чуть менее очевидная - этот скрипт ведет себя неожиданно, когда команды git нет в PATH. Потому что subprocess в этом случае кидает FileNotFoundError (поубивал бы за это, если честно), а не CalledProcessError.
* парсинг информации от git не обернут вот в такой fail safe try/catch. То есть, ошибку от git игнорируем, а невозможность распарсить кривой результат - не игнорируем.
Ну, то есть, коллеги не смогли правильно закодить то, что они на самом деле хотели - вернуть какое-то дефолтное значение, если получить реальную информацию не получилось.
Поэтому мне пришлось запилить специальный fakegit для этого проекта, который всегда выходит с ошибкой:
https://github.com/pg83/ix/blob/main/pkgs/bin/dxsc/ix.sh#L25
Потому что мой стандартный fakegit не сработал, по причинам, изложенным выше.
Мораль? Мораль, наверное, такая - код по обработки ошибок гикто не тестирует, потому что это сложно, и он способен сам давать наведенные ошибки, когда начинает срабатывать!
GitHub
GitHub - microsoft/DirectXShaderCompiler: This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang.
This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang. - microsoft/DirectXShaderCompiler
🔥9❤4🆒4🤡3🗿1
https://github.com/epasveer/seer
А вот вам классный GUI над gdb в ленту.
Я, знаете ли, не люблю пользоваться таким в реальной жизни, потому что:
* Использование графического отладчикаотупляет приводит к тому, что программист начинает лениться, и, вместо того, чтобы держать в голове ментальную модель программы, просто ходит по ней отладчиком. А держать ментальную модель в голове - это хорошо, потому что поощряет меньше говнокодить, и больше думать про структуру.
* Второй пункт следует из первого. Мне кажется, что это все, суммарно, приводит к более лапшеобразному коду, потому что человек не имеет в голове структуры программы, он дотрассировал до нужного места, впилил проверку на свой частный случай, и дальше живет спокойно. Несколько раз работал с такими кодовыми базами, мне не понравилось.
Но вот, на днях, пришлось дебажить #mesa, недавно рассказывал про это, а она написана так, как будто у ее разработчиков есть очень хороший визуальный отладчик, если вы понимаете, о чем я. В таком случае можно, потому что построить ментальную модель это лапши уже решительно невозможно!
Ну и наткнулся на этот seer:
* Не требует KDE/GNOME, работает на чистом QT6
* Просто собрался и заработал, без завязок на X11, и вот это вот все.
Понятно, что это не интегрированный отладчик - языка он не знает, по клику мышкой переменнные не показывает. Но исходники цепляет исправно, за переменными можно следить через консоль в gdb, и этого мне хватило.
А вот вам классный GUI над gdb в ленту.
Я, знаете ли, не люблю пользоваться таким в реальной жизни, потому что:
* Использование графического отладчика
* Второй пункт следует из первого. Мне кажется, что это все, суммарно, приводит к более лапшеобразному коду, потому что человек не имеет в голове структуры программы, он дотрассировал до нужного места, впилил проверку на свой частный случай, и дальше живет спокойно. Несколько раз работал с такими кодовыми базами, мне не понравилось.
Но вот, на днях, пришлось дебажить #mesa, недавно рассказывал про это, а она написана так, как будто у ее разработчиков есть очень хороший визуальный отладчик, если вы понимаете, о чем я. В таком случае можно, потому что построить ментальную модель это лапши уже решительно невозможно!
Ну и наткнулся на этот seer:
* Не требует KDE/GNOME, работает на чистом QT6
* Просто собрался и заработал, без завязок на X11, и вот это вот все.
Понятно, что это не интегрированный отладчик - языка он не знает, по клику мышкой переменнные не показывает. Но исходники цепляет исправно, за переменными можно следить через консоль в gdb, и этого мне хватило.
GitHub
GitHub - epasveer/seer: Seer - a gui frontend to gdb
Seer - a gui frontend to gdb. Contribute to epasveer/seer development by creating an account on GitHub.
👍7🤡5🔥2🤔2❤1🫡1
commit -m "better"
Закрывая (кажется) тему #llvm libc++16 на ближайшее время. В libc++ есть своя реализация format (почему? потому что могут же!), но она не работает. Поэтому авторы ее закомментили, до поры, до времени - https://github.com/llvm/llvm-project/blob/main/libcx…
После перехода на clang17, в выходные перешел на libc++17.
В отличие от прошлого раза (можно почитать в цитируемом посте), все прошло более-менее норм, даже получилось избавиться от polyfill на ranges и fmtlib, потому что в libc++17 format и ranges уже норм.
Из интересного - libc++ перестали поддерживать использование себя с кодом на старых стандартах (с++11 точно, а может, еще и старше тоже). Заметил я это при сборке gcc, для них пришлось оставить libc++16. Благо, сборка это позволяет - https://github.com/pg83/ix/blob/main/pkgs/bin/gcc/10/ix.sh#L4
В отличие от прошлого раза (можно почитать в цитируемом посте), все прошло более-менее норм, даже получилось избавиться от polyfill на ranges и fmtlib, потому что в libc++17 format и ranges уже норм.
Из интересного - libc++ перестали поддерживать использование себя с кодом на старых стандартах (с++11 точно, а может, еще и старше тоже). Заметил я это при сборке gcc, для них пришлось оставить libc++16. Благо, сборка это позволяет - https://github.com/pg83/ix/blob/main/pkgs/bin/gcc/10/ix.sh#L4
GitHub
ix/pkgs/bin/gcc/10/ix.sh at main · pg83/ix
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
🔥9❤2👍2
Самый страшный код, который может встретить разработчик на C++:
struct X {
X() {
Initialized = true;
}
~X() {
Initialized = false;
}
auto y() {
if (Initialized) {
...
}
}
};
(тут не надо искать подвоха, что y() вызывается в конструкторе или деструкторе, нет)😱9👍5🤔3🤬3🥴3🔥2🐳1🤣1🤨1👀1🤷1