Forwarded from Двач
Илон Маск поделился фотографией текущей команды твиттера. На втором фото — старые работники, большинство из которых уволились, потому что «не хотели много работать».
😶 😶 😶 😶
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22🔥7💩1🤡1
commit -m "better"
Решил я разобраться с падением альтернативы git от openbsd - #got http://gameoftrees.org/. (мы его как-то обсуждали в комментариях, он у меня тогда падал, несмотря на openbsd происхождение) Gdb, конечно, показал красивое - https://git.gameoftrees.org/gitweb/?p=got…
Продолжение истории про #got.
Он у меня пока так и не заработал, потому что:
* Разработчики - большие фанаты "театра безопасности", и потому анально огородили все места, куда может залезть программа, через landlock/unveil/etc. Причем, судя по README, это "очень важная" фича, вокруг которой был сдизайнен остальной код - https://gameoftrees.org/goals.html, а, судя по changelog, примерно половина разработки - это добавление того, что забыли добавить в доступные файлы для корректной работы программы.
* Путь к ssh захардкожен - https://git.gameoftrees.org/gitweb/?p=got.git;a=blob;f=lib/dial.c;h=3325c8994f55721d8588155cdc72b95d11fd2248;hb=4cad5be9f88baeb0583b4b63a546f5815929a270#l49 в "/usr/bin/ssh", а, как вы понимаете, у разумных людей ssh там не лежит. Ну и, помимо того, что не лежит, просто позвать ssh не получится, потому что unveil.
Почему это "театр безопасности"? А много кого хакали на основе парсера ссылочного графа в git?
У людей от безделья уже крышу сносит, но на безопасные языки они свой код переписывать не хотят, а поклонникам же как-то надо каждый раз рассказывать, что там еще стало "безопаснее" и лучше!
Он у меня пока так и не заработал, потому что:
* Разработчики - большие фанаты "театра безопасности", и потому анально огородили все места, куда может залезть программа, через landlock/unveil/etc. Причем, судя по README, это "очень важная" фича, вокруг которой был сдизайнен остальной код - https://gameoftrees.org/goals.html, а, судя по changelog, примерно половина разработки - это добавление того, что забыли добавить в доступные файлы для корректной работы программы.
* Путь к ssh захардкожен - https://git.gameoftrees.org/gitweb/?p=got.git;a=blob;f=lib/dial.c;h=3325c8994f55721d8588155cdc72b95d11fd2248;hb=4cad5be9f88baeb0583b4b63a546f5815929a270#l49 в "/usr/bin/ssh", а, как вы понимаете, у разумных людей ssh там не лежит. Ну и, помимо того, что не лежит, просто позвать ssh не получится, потому что unveil.
Почему это "театр безопасности"? А много кого хакали на основе парсера ссылочного графа в git?
У людей от безделья уже крышу сносит, но на безопасные языки они свой код переписывать не хотят, а поклонникам же как-то надо каждый раз рассказывать, что там еще стало "безопаснее" и лучше!
gameoftrees.org
Game of Trees (Got): Goals
Game of Trees (Got) Goals
👍7😁5🔥2👎1
commit -m "better"
У меня для вас сегодня парочка анекдотов. Про сборку, конечно. * https://github.com/pg83/mix/blob/main/pkgs/bin/net/tools/mix.sh#L18 Авторы net-tools настолько упоролись, что решили, что их сборка может быть запущена только руками, и ответы на вопросы надо…
Сегодня у меня для вас анекдот про мое чувство прекрасного.
Меня лично бесят программы, которые хотят создавать временные файлы. Вообще, "временный файл" - это какой-то нонсенс, потому что захера писать эфемерные данные в персистентный файл?
Данные можно или буферизовать в памяти, или писать через pipe на вход в другую программу, или что-то такое же разумное.
Обычно программы пишут что-то во временные файлы или в виде хака, когда у тебя какой-то блок кода уже принимает int fd, а переписать это на нормальный интерфейс - лень, или когда какая-то программа в цепочке не умеет в pipe.
В первом случае, кстати, в современном linux можно использовать memfd_create(), довольно полезная вещь, в плане "замести мусор под кровать".
Другая проблема с временными файлами - всякие странные программы не уважают настройку TMPDIR, и пытаются напрямую писать в /tmp, причем, придумывая какие-то дикие способы разграничения доступов и "непересечения" с другими экземплярами.
Вот вам содержимое моего сессионного tmp:
Сколько вы тут насчитали разных способов "уникализации"?
Повторю, меня это дико бесит, и я себе поставил цель - все программы, которые я использую, должны уметь в TMPDIR.
Кстати, немного в сторону, #TMPDIR, конечно, должна быть "сложным" путем, включающем в себя id пользователя, и session id(например, чтобы уметь эффективно очищать это барахло по окончанию сессии):
Поэтому у меня в #stal/ix нет корневой папки /tmp.
Почему?
Потому что, по странному стечению обстоятельств, все программы, которые имеют свое сильное мнение про именование папки с временными файлами, пытаются писать в /tmp.
А у меня ее нет, зато есть /var/tmp, с разделением по сессиям.
Поэтому все такие программы ломаются, и я их все исправляю.
Чтобы этот процесс не был мучительным, я запилил небольшую библиотечку для этого - https://github.com/pg83/ix/tree/main/pkgs/lib/shim/ix
Ее применение почти автоматизировано - https://github.com/pg83/ix/blob/main/pkgs/bin/got/ix/ix.sh#L10
Меня лично бесят программы, которые хотят создавать временные файлы. Вообще, "временный файл" - это какой-то нонсенс, потому что захера писать эфемерные данные в персистентный файл?
Данные можно или буферизовать в памяти, или писать через pipe на вход в другую программу, или что-то такое же разумное.
Обычно программы пишут что-то во временные файлы или в виде хака, когда у тебя какой-то блок кода уже принимает int fd, а переписать это на нормальный интерфейс - лень, или когда какая-то программа в цепочке не умеет в pipe.
В первом случае, кстати, в современном linux можно использовать memfd_create(), довольно полезная вещь, в плане "замести мусор под кровать".
Другая проблема с временными файлами - всякие странные программы не уважают настройку TMPDIR, и пытаются напрямую писать в /tmp, причем, придумывая какие-то дикие способы разграничения доступов и "непересечения" с другими экземплярами.
Вот вам содержимое моего сессионного tmp:
./epiphany-pg-aaNPpb
./d9ca075b14fe84b587843f702e0d2466-
{87A94AB0-E370-4cde-98D3-ACC110C5967D}
./6b047d326310867001cb39f5218a36ba-
{87A94AB0-E370-4cde-98D3-ACC110C5967D}
./mc-pg
./mc-pg/mc-pg
./sway-ipc.10000.9709.sock
./wayland-1
./wayland-1.lock
./dbus.sock
./dbus-1
./dbus-1/services
./dbus.cfg
./ssh-XXXXXXJIAMlN
./ssh-XXXXXXJIAMlN/agent.9704
Сколько вы тут насчитали разных способов "уникализации"?
Повторю, меня это дико бесит, и я себе поставил цель - все программы, которые я использую, должны уметь в TMPDIR.
Кстати, немного в сторону, #TMPDIR, конечно, должна быть "сложным" путем, включающем в себя id пользователя, и session id(например, чтобы уметь эффективно очищать это барахло по окончанию сессии):
pg-> echo ${TMPDIR}
/var/tmp/10000/10953
Поэтому у меня в #stal/ix нет корневой папки /tmp.
Почему?
Потому что, по странному стечению обстоятельств, все программы, которые имеют свое сильное мнение про именование папки с временными файлами, пытаются писать в /tmp.
А у меня ее нет, зато есть /var/tmp, с разделением по сессиям.
Поэтому все такие программы ломаются, и я их все исправляю.
Чтобы этот процесс не был мучительным, я запилил небольшую библиотечку для этого - https://github.com/pg83/ix/tree/main/pkgs/lib/shim/ix
Ее применение почти автоматизировано - https://github.com/pg83/ix/blob/main/pkgs/bin/got/ix/ix.sh#L10
GitHub
ix/pkgs/lib/shim/ix at main · pg83/ix
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
👍20🔥9🤔2💩1
commit -m "better"
Вышел релиз wayland-protocols, за номером 1.29. 1.28 была, буквально, на днях, я писал про новые ошибки линковки, с ней связанные. #wayland Меня удивило, быстро очень, они же там протоколы по 2 года мусолят. https://lists.freedesktop.org/archives/wayland…
Прошло буквально несколько дней, и, вот, следующая версия:
https://www.phoronix.com/news/Wayland-Tearing-Control-Proto
"In the early days of Wayland one of the main philosophical driving points for this alternative to the X.Org Server was that "every frame is perfect" and would forego screen tearing among other rendering impurities. Introduced now with Wayland Protocols 1.30 though is a new staging protocol to allow screen tearing"
Ебени они там объелись, вот что.
https://www.phoronix.com/news/Wayland-Tearing-Control-Proto
"In the early days of Wayland one of the main philosophical driving points for this alternative to the X.Org Server was that "every frame is perfect" and would forego screen tearing among other rendering impurities. Introduced now with Wayland Protocols 1.30 though is a new staging protocol to allow screen tearing"
Ебени они там объелись, вот что.
Phoronix
Wayland Protocols 1.30 Introduces New Protocol To Allow Screen Tearing
In the early days of Wayland one of the main philosophical driving points for this alternative to the X.Org Server was that 'every frame is perfect' and would forego screen tearing among other rendering impurities
😁9🤡7🤔2🍌1
https://maskray.me/blog/2022-11-21-relocatable-linking
Знаменитый блоггер #maskray продолжает серию постов про линкер.
На этот раз про опцию линкера "-r", которая, по сути, умеет сливать два .o файла в один, делая частичную линковку в процессе.
Не спрашивайте, зачем, если вам не нужно - то не нужно, а если нужно - то вы уже знаете.
Я-то надеялся из этой статьи узнать, что делает мутная опция gnu ld "-Ur":
"-Ur
For anything other than C++ programs, this option is equivalent to -r: it generates relocatable output--i.e., an output file that can in turn serve as input to ld. When linking C++ programs, -Ur does resolve references to constructors, unlike -r. It does not work to use -Ur on files that were themselves linked with -Ur; once the constructor table has been built, it cannot be added to. Use -Ur only for the last partial link, and -r for the others"
Вот вы понимаете, что она actually do? Я - не очень.
Мое лучшее предположение - что она включает генерацию секций .ctor(и подобных), что никто больше делать не умеет, потому что зачем???
Я так понимаю, что релевантный кусок текста от #maskray - это вот это вот:
"The linker does not create synthesized sections (.interp, .gnu.hash, .got, .plt, .comment, etc)"
Собственно, мне было бы на это пофиг, но у меня есть ровно одна программа в репозитории, которая хочет от линкера такую опцию - это https://github.com/pg83/ix/blob/main/pkgs/bin/nix/ix.sh (да, да, Nix package manager, тот самый)
В итоге, я решил, что имею полное право заменить -Ur на просто -r, https://github.com/pg83/ix/blob/main/pkgs/bld/scripts/wrapcc/kuroko/wrapcc.krk#L32, потому что какого хрена? Ну сгенерят таблицу конструкторов чуть позже, ну и ладно.
Знаменитый блоггер #maskray продолжает серию постов про линкер.
На этот раз про опцию линкера "-r", которая, по сути, умеет сливать два .o файла в один, делая частичную линковку в процессе.
Не спрашивайте, зачем, если вам не нужно - то не нужно, а если нужно - то вы уже знаете.
Я-то надеялся из этой статьи узнать, что делает мутная опция gnu ld "-Ur":
"-Ur
For anything other than C++ programs, this option is equivalent to -r: it generates relocatable output--i.e., an output file that can in turn serve as input to ld. When linking C++ programs, -Ur does resolve references to constructors, unlike -r. It does not work to use -Ur on files that were themselves linked with -Ur; once the constructor table has been built, it cannot be added to. Use -Ur only for the last partial link, and -r for the others"
Вот вы понимаете, что она actually do? Я - не очень.
Мое лучшее предположение - что она включает генерацию секций .ctor(и подобных), что никто больше делать не умеет, потому что зачем???
Я так понимаю, что релевантный кусок текста от #maskray - это вот это вот:
"The linker does not create synthesized sections (.interp, .gnu.hash, .got, .plt, .comment, etc)"
Собственно, мне было бы на это пофиг, но у меня есть ровно одна программа в репозитории, которая хочет от линкера такую опцию - это https://github.com/pg83/ix/blob/main/pkgs/bin/nix/ix.sh (да, да, Nix package manager, тот самый)
В итоге, я решил, что имею полное право заменить -Ur на просто -r, https://github.com/pg83/ix/blob/main/pkgs/bld/scripts/wrapcc/kuroko/wrapcc.krk#L32, потому что какого хрена? Ну сгенерят таблицу конструкторов чуть позже, ну и ладно.
MaskRay
Relocatable linking
Updated in 2025-02. In GNU ld, -r produces a relocatable object file. This is known as relocatable linking or partial linking. This mode suppresses many passes done for an executable or shared object
😐4👍2🤔2
https://www.opennet.ru/opennews/art.shtml?num=58177
Какая-то совершенно феерическая тема, проект https://urho3d.io/ разделился на 2 части, https://u3d.io/
Один из разработчиков решил, что англоязычные пользователи черезчур токсичны, и решил переориентироваться на русскоязычное community - https://discourse.urho3d.io/t/the-last-english-release/7362/2
В комментария пишут, что все началось с https://github.com/urho3d/Urho3D/issues/2940 - там массово заменяли unsigned типы на signed. https://discourse.urho3d.io/t/the-last-english-release/7362/7
Я, конечно, всей душой на стороне форка, потому что "курица - не птица, а int - не тип". #unsigned
Начнем с того, что ты - пиздоглазое мудило "By the way, you are a bad programmer" - https://discourse.urho3d.io/t/the-last-english-release/7362/9
Почитайте, со ссылочками, там вкусно.
Какая-то совершенно феерическая тема, проект https://urho3d.io/ разделился на 2 части, https://u3d.io/
Один из разработчиков решил, что англоязычные пользователи черезчур токсичны, и решил переориентироваться на русскоязычное community - https://discourse.urho3d.io/t/the-last-english-release/7362/2
В комментария пишут, что все началось с https://github.com/urho3d/Urho3D/issues/2940 - там массово заменяли unsigned типы на signed. https://discourse.urho3d.io/t/the-last-english-release/7362/7
Я, конечно, всей душой на стороне форка, потому что "курица - не птица, а int - не тип". #unsigned
Почитайте, со ссылочками, там вкусно.
www.opennet.ru
Раскол в сообществе свободного игрового движка Urho3D привёл к созданию форка
В результате противоречий в сообществе разработчиков игрового движка Urho3D (со взаимными обвинениями в "токсичности"), разработчик 1vanK, имеющий административный доступ к репозиторию и форуму проекта, в одностороннем порядке заявил о смене курса разработки…
😐8😁6👍4🔥1🐳1
https://asahilinux.org/2022/11/november-2022-report/
Очередной status update от #asahi Linux.
Интересно почитать про пляски вокруг firmware(потому что Apple не нужно заморачиваться с кучей платформ, и они хранят firmware прямо в своем ядре!), и про power management.
Про GPU ни слова.
Очередной status update от #asahi Linux.
Интересно почитать про пляски вокруг firmware(потому что Apple не нужно заморачиваться с кучей платформ, и они хранят firmware прямо в своем ядре!), и про power management.
Про GPU ни слова.
asahilinux.org
Updates galore! November 2022 Progress Report - Asahi Linux
Porting Linux to Apple Silicon
🔥5👍2🤔1🤮1
Вот вам сегодня анекдот на тему "у гениев свои причуды".
Я сортирую списки зависимостей не по алфавиту, не лексикографически, а по длине строки - https://github.com/pg83/ix/blob/main/pkgs/lib/web/kit/gtk/t/ix.sh#L8
Мне почему-то так проще искать, есть ли нужная зависимость, или нет. Почему? Не знаю!
Еще мне нравится смотреть, как эти строчки выстраиваются в красивую сигмоиду, по мере увеличения списка зависимостей.
Как вы теперь будете жить с этим знанием - не знаю, и знать не хочу!
Я сортирую списки зависимостей не по алфавиту, не лексикографически, а по длине строки - https://github.com/pg83/ix/blob/main/pkgs/lib/web/kit/gtk/t/ix.sh#L8
Мне почему-то так проще искать, есть ли нужная зависимость, или нет. Почему? Не знаю!
Еще мне нравится смотреть, как эти строчки выстраиваются в красивую сигмоиду, по мере увеличения списка зависимостей.
Как вы теперь будете жить с этим знанием - не знаю, и знать не хочу!
GitHub
ix/pkgs/lib/web/kit/gtk/t/ix.sh at main · pg83/ix
ix package manager. Contribute to pg83/ix development by creating an account on GitHub.
😁11🤡4👍2🐳2
Forwarded from Раньше всех. Ну почти.
❗️Путин заявил, что в предстоящие 10 лет надо обеспечить массовое внедрение искусственного интеллекта во все сферы
🤣27🤡7👍3🤔2😁1
Несколько ссылок, с общей темой "инструменты разработки"
https://www.opennet.ru/opennews/art.shtml?num=58182
Штука, которой можно мигающие тесты превращать в стабильные, что, наверное, очень хорошо и полезно на больших масштабах.
https://www.ixbt.com/news/2022/11/24/u-google-est-sekretnyj-proekt-kompanija-rabotaet-nad-generatorom-kotoryj-smozhet-samostojatelno-pisat-i-ispravljat-kod.html
"Изначально перед проектом стояла задача создать инструмент, который мог бы обновлять кодовую базу языка программирования Python до новых версий без привлечения живых программистов"
Очень крутая тема, потому что обновление внешних зависимостей - это боль, но, довольно часто, это рутина по исправлению небольших сниппетов кода там и сям.
Я так понял, что изначальная цель проекта не достигнута?
https://sapling-scm.com/
Новая SCM от Facebook. Я не смотрел, потому что, насколько я понял, мякотку в виде распределенного сервера, способного хранить огромную репу, они не выложили.
https://www.opennet.ru/opennews/art.shtml?num=58182
Штука, которой можно мигающие тесты превращать в стабильные, что, наверное, очень хорошо и полезно на больших масштабах.
https://www.ixbt.com/news/2022/11/24/u-google-est-sekretnyj-proekt-kompanija-rabotaet-nad-generatorom-kotoryj-smozhet-samostojatelno-pisat-i-ispravljat-kod.html
"Изначально перед проектом стояла задача создать инструмент, который мог бы обновлять кодовую базу языка программирования Python до новых версий без привлечения живых программистов"
Очень крутая тема, потому что обновление внешних зависимостей - это боль, но, довольно часто, это рутина по исправлению небольших сниппетов кода там и сям.
Я так понял, что изначальная цель проекта не достигнута?
https://sapling-scm.com/
Новая SCM от Facebook. Я не смотрел, потому что, насколько я понял, мякотку в виде распределенного сервера, способного хранить огромную репу, они не выложили.
www.opennet.ru
Facebook опубликовал Hermit, инструментарий для повторяемого выполнения программ
Facebook (запрещён в РФ) опубликовал код инструментария Hermit, формирующего окружение для детерминированного выполнения программ, позволяющее при разных запусках добиться получения неизменного результата и повторения хода выполнения при использовании одних…
🔥4❤2👍2😐1
У меня тут одна зависимость потребовала новую(для меня!) библиотеку - https://github.com/HowardHinnant/date
Пока я чинил ее работоспособность в #stal/ix - https://github.com/pg83/ix/blob/main/pkgs/lib/date/ix/ix.sh (поменял пути, и добавил поддержку TZ env variable), задумался вот на какую тему.
Современные библиотеки не стесняются с тем, чтобы распарсить какие-нибудь arcane данные, доставшиеся в наследство от libc и прочих, не очень качественных, по современным стандартам, библиотек.
Ну, вот, реально - я знаю библиотеки, которые:
* парсят #terminfo database от ncurses
* парсят таймзоны
* умеют перетрахивать формат от gettext
* где-то я видел код, который напрямую работает с базой данных от libmagic, но, с ходу, не нашел
* системное хранилище сертификатов
Еще лет 5 - 7 назад это было как-то не принято - ты или готовил эти данные сам, или трахался с вызовом libc через ffi.
Я это связываю с появлением rust и go(видимо, java не смогла создать необходимое давление), где звать libc(и прочий шлак) в какой-то момент стало моветоном, люди разобрались в этом мусоре, и научились парсить его сами.
Это, конечно, хорошо, потому что тот же API в c для работы с таймзонами - это шлак, да и API ncurses - тоже.
Пока я чинил ее работоспособность в #stal/ix - https://github.com/pg83/ix/blob/main/pkgs/lib/date/ix/ix.sh (поменял пути, и добавил поддержку TZ env variable), задумался вот на какую тему.
Современные библиотеки не стесняются с тем, чтобы распарсить какие-нибудь arcane данные, доставшиеся в наследство от libc и прочих, не очень качественных, по современным стандартам, библиотек.
Ну, вот, реально - я знаю библиотеки, которые:
* парсят #terminfo database от ncurses
* парсят таймзоны
* умеют перетрахивать формат от gettext
* где-то я видел код, который напрямую работает с базой данных от libmagic, но, с ходу, не нашел
* системное хранилище сертификатов
Еще лет 5 - 7 назад это было как-то не принято - ты или готовил эти данные сам, или трахался с вызовом libc через ffi.
Я это связываю с появлением rust и go(видимо, java не смогла создать необходимое давление), где звать libc(и прочий шлак) в какой-то момент стало моветоном, люди разобрались в этом мусоре, и научились парсить его сами.
Это, конечно, хорошо, потому что тот же API в c для работы с таймзонами - это шлак, да и API ncurses - тоже.
GitHub
GitHub - HowardHinnant/date: A date and time library based on the C++11/14/17 <chrono> header
A date and time library based on the C++11/14/17 <chrono> header - HowardHinnant/date
👍10
Я тут, при очередной пересборки мира, обнаружил в dmesg красивое:
Это, конечно, очень грустно, потому что:
* если это происходит на этапе configure, то gnu #autohell кладет с прибором на это знание, и просто считает, что в системе нет какой-то фичи.
* если такое произошло во время сборки - то это особенно плохо, потому что, получается, где-то есть makefile, игнорирующий ошибки. А это, как вы сами понимаете, просто леденящий душу пиздец, потому что бывает segfault, а бывает что на сборочной ферме место закончилось.
Я заново пересобрал мир, без кеша, грепнул лог, и нашел, что так себя ведет сборка graphviz:
https://github.com/pg83/ix/blob/main/pkgs/bin/graphviz/autohell/ix.sh#L69
Такое ощущение, что там race с генерацией .c/.h файлов из grammar.y (грамматика на bison), и компилятор получает на вход неполный файл.
Ощущение такое, потому что сборка в один поток помогла.
В graphviz есть две системы сборки, одна на autohell, вторая - на cmake.
Сначала я попробовал переделать все на cmake сборку, но там напрочь сломана возможность статической линковки, потому что, в рамках одной программы, получается 2 определения функции:
https://gitlab.com/graphviz/graphviz/-/blob/main/lib/pack/ccomps.c#L671
https://gitlab.com/graphviz/graphviz/-/blob/main/lib/gvpr/actions.c#L110
Функции разные, сигнатуры - разные, имя одно.
Треш, угар, содомия, я решил попробовать полечить сборку с autohell, и набрел на решение со сборкой в один поток.
Наверное, по результатам импровизированного субботнего LSR, надо бы с этим сделать что-то системное, например, следить за ошибками в dmesg во время выполнения графа сборки.
[316266.607298] clang[19065]: segfault at 0
ip 00000000070e1d80 sp 00007efe96c97808
error 4 in clang-15[3613000+3ad7000]
[316266.607306] Code: 09 80 38 ...
Это, конечно, очень грустно, потому что:
* если это происходит на этапе configure, то gnu #autohell кладет с прибором на это знание, и просто считает, что в системе нет какой-то фичи.
* если такое произошло во время сборки - то это особенно плохо, потому что, получается, где-то есть makefile, игнорирующий ошибки. А это, как вы сами понимаете, просто леденящий душу пиздец, потому что бывает segfault, а бывает что на сборочной ферме место закончилось.
Я заново пересобрал мир, без кеша, грепнул лог, и нашел, что так себя ведет сборка graphviz:
https://github.com/pg83/ix/blob/main/pkgs/bin/graphviz/autohell/ix.sh#L69
Такое ощущение, что там race с генерацией .c/.h файлов из grammar.y (грамматика на bison), и компилятор получает на вход неполный файл.
Ощущение такое, потому что сборка в один поток помогла.
В graphviz есть две системы сборки, одна на autohell, вторая - на cmake.
Сначала я попробовал переделать все на cmake сборку, но там напрочь сломана возможность статической линковки, потому что, в рамках одной программы, получается 2 определения функции:
https://gitlab.com/graphviz/graphviz/-/blob/main/lib/pack/ccomps.c#L671
https://gitlab.com/graphviz/graphviz/-/blob/main/lib/gvpr/actions.c#L110
Функции разные, сигнатуры - разные, имя одно.
Треш, угар, содомия, я решил попробовать полечить сборку с autohell, и набрел на решение со сборкой в один поток.
Наверное, по результатам импровизированного субботнего LSR, надо бы с этим сделать что-то системное, например, следить за ошибками в dmesg во время выполнения графа сборки.
🤔10😐7👍1🤯1
commit -m "better"
Одной строкой: * до чего довел планету этот фигляр ПЖГвидо. https://brmmm3.github.io/posts/2019/07/28/python_and_lua/ https://github.com/scoder/lupa Люди делают offload cpu intensive нагрузки из Питона в Lua, потому что: - lua параллелится - lua имеет…
https://github.com/luajit-remake/luajit-remake
А вот еще один подход к lua jit, поверх llvm, в полтора раза быстрее, чем luajit(кстати, в свое время luajit считался вполне себе state of the art jit).
Пока только lua 5.1, и без GC(поэтому статус бенчмарков не очень понятен).
Очень, очень интересный проект, хотя код лично мне показался несколько overengineered.
А вот еще один подход к lua jit, поверх llvm, в полтора раза быстрее, чем luajit(кстати, в свое время luajit считался вполне себе state of the art jit).
Пока только lua 5.1, и без GC(поэтому статус бенчмарков не очень понятен).
Очень, очень интересный проект, хотя код лично мне показался несколько overengineered.
GitHub
GitHub - luajit-remake/luajit-remake: An ongoing attempt to re-engineer LuaJIT from scratch
An ongoing attempt to re-engineer LuaJIT from scratch - luajit-remake/luajit-remake
👍5🔥2👌2
Продолжаю свой quest for #terminal.
#zutty
Напомню, что пока использую #foot, но и к нему у меня есть претензии(автор череcчур переусложнил логику инкрементальной перерисовки, и она у него иногда глючит).
Вот, новые кандидаты:
* https://github.com/tomscii/zutty - по коду (нормальный такой С++) хороший, качественный, терминал, но жестко прибит к X. "жестко" - надо переделать ввод, и настройку opengl контекста, все остальное делается поверх opengl. Модель рендеринга примитивная, без изъебов и шейдеров, как я уже пару раз описывал, и это очень хорошо! IMHO для переделки этого на SDL нужно 2 - 3 вечера. К сожалению, непонятно, примет ли автор такиеисправления, потому что он ну очень любит X, а просто так время было бы жалко тратить.
* https://github.com/91861/wayst - wayland + opengl, кодовая база на C, что заметно, потому что терминал не прошел мой стандартный тест:
Да и какие-то странные артефакты рендеринга, как будто автор захотел быть святеепапы римского freetype, и навернул там что-то типа (глючного и косого!) clear type.
Короче, какая-то пионерская поделка, а, на первый взгляд, выглядело хорошо!
#zutty
Напомню, что пока использую #foot, но и к нему у меня есть претензии(автор череcчур переусложнил логику инкрементальной перерисовки, и она у него иногда глючит).
Вот, новые кандидаты:
* https://github.com/tomscii/zutty - по коду (нормальный такой С++) хороший, качественный, терминал, но жестко прибит к X. "жестко" - надо переделать ввод, и настройку opengl контекста, все остальное делается поверх opengl. Модель рендеринга примитивная, без изъебов и шейдеров, как я уже пару раз описывал, и это очень хорошо! IMHO для переделки этого на SDL нужно 2 - 3 вечера. К сожалению, непонятно, примет ли автор такиеисправления, потому что он ну очень любит X, а просто так время было бы жалко тратить.
* https://github.com/91861/wayst - wayland + opengl, кодовая база на C, что заметно, потому что терминал не прошел мой стандартный тест:
-> cat some.big.tar.gz
...
[warning] Unknown escape sequence: (-40)
[warning] Unknown escape sequence: ␂ (2)
[warning] Unknown DCS: HH␖␒h␐j␍␊[40m␈q'␔i
␘"n[40m␆%_;␛K#F@␈
=e.Eϝ%[40m␐j?␜һ0␒(
ƽH␟ev␎mcf␓[40m␎␔GO␐pW␈
#Bq␚*x␎␓␛t␋␂i␅<zT[␈D(kx.,Z␎Lv^
ʤ_V sqb␡␋␒wI]lc]b'<?̮␜,␗ gKq␌
r4@EwqE␆pYV␚]␍␊~Z^␌?چRZpw')ҋ;8
V^K<{.y␍z·`G␄␃i>RTD:,,eAY␂c3n,̑[40m
␑␌MG,S␃2z`";=Yu`3␋x6␟F=1uL
[40m␋MiR␆TjL[40m␓x␍␊Ag␁␘.␃FN-ʪ
;Kc٥#0|4␖s.[40m␉1'U;<␏sb␑:Fh␙]␌e
␐D␛_ӿ[40m␍␊_ÿݟ[40m␡
[warning] Unknown escape sequence: (-62)
[warning] DECBI/DECFI not implemented
[warning] Unknown escape sequence: (-99)
[warning] Unknown escape sequence: (-85)
[warning] Unknown escape sequence: (-51)
[warning] Unknown escape sequence: (-102)
[warning] Unknown escape sequence: , (44)
[warning] Unknown escape sequence: (-24)
[warning] Unknown escape sequence: (-55)
[warning] Unknown escape sequence: (-70)
[warning] Unknown escape sequence: (-36)
[warning] Unknown escape sequence: K (75)
[warning] Unknown escape sequence: (-9)
[warning] Unknown escape sequence: (-124)
[warning] Unknown escape sequence: (-12)
[warning] Unknown escape sequence: (-46)
Segmentation fault
Да и какие-то странные артефакты рендеринга, как будто автор захотел быть святее
Короче, какая-то пионерская поделка, а, на первый взгляд, выглядело хорошо!
👍10😁4🐳3🔥1
У меня вчера, внезапно, пропал wifi на ноутбуке.
Ну вот так, посреди закачки, взял и пропал.
Рестарт не помог, кроме того замечательного факта, что в dmesg(после рестарта) не было никакого упоминания слов intel, iw*, etc.
Устройства не было, интерфейса тоже.
Я собрал ведро с диагностикой, добавил дополнительных драйверов, перезагрузился раз 10, в том числе, в live cd от федоры(в нем тоже не работало), и, в какой-то момент обнаружил, что wifi заработал.
Мне кажется, что произошло это в тот момент, когда я вынул type-c кабель питания, и на его место воткнул внешний жесткий диск с федорой. До этого, диск с федорой я втыкал во второй слот type-c.
Гипотеза заключается в том, что контроллер зарядки(а он, напомню, продолжает работать даже после отключения ноутбука по питанию) пришел в какое-то очень странное состояние, "ломавшее" что-то на шине.
В пользу этой гипотезы есть еще тот факт, что с контроллером зарядки у меня явно что-то не так последние пару месяцев, потому что бывает следующее:
* огонек зарядки светится, а зарядка не идет, ноутбук выключается по питанию
* контроллер вообще не видит зарядное устройство, зарядка не идет, пока не перевоткнешь шнур
Это все звучит довольно диковато, но я больше не понимаю, как объяснить тот факт, что wifi выключился, когда я включил ноут в зарядку, и починился, когда я его из зарядки вынул, и включил в этот порт какое-то другое устройство.
Зато 2 часа бессмысленного и беспощадного(потому что ничего не понял) #debug, за время которого я узнал кучу бесполезных знаний про сеть в Linux, и про устройства своего ноутбука!
* например, у меня есть кнопка принудительного(аппаратного) отключения тачпада, Fn-F9, сяомишники знатно потешаются над этим фактом в разных там форумах, чуть ли не первый вопрос новичку, не нажал ли он эту кнопку случайно.
* в первый раз в жизни запустил команду "ip a", увидел интерфейс sit0, и разобрался, что это такое(спойлер - вам это не нужно).
Ну и так далее.
Ну вот так, посреди закачки, взял и пропал.
Рестарт не помог, кроме того замечательного факта, что в dmesg(после рестарта) не было никакого упоминания слов intel, iw*, etc.
Устройства не было, интерфейса тоже.
Я собрал ведро с диагностикой, добавил дополнительных драйверов, перезагрузился раз 10, в том числе, в live cd от федоры(в нем тоже не работало), и, в какой-то момент обнаружил, что wifi заработал.
Мне кажется, что произошло это в тот момент, когда я вынул type-c кабель питания, и на его место воткнул внешний жесткий диск с федорой. До этого, диск с федорой я втыкал во второй слот type-c.
Гипотеза заключается в том, что контроллер зарядки(а он, напомню, продолжает работать даже после отключения ноутбука по питанию) пришел в какое-то очень странное состояние, "ломавшее" что-то на шине.
В пользу этой гипотезы есть еще тот факт, что с контроллером зарядки у меня явно что-то не так последние пару месяцев, потому что бывает следующее:
* огонек зарядки светится, а зарядка не идет, ноутбук выключается по питанию
* контроллер вообще не видит зарядное устройство, зарядка не идет, пока не перевоткнешь шнур
Это все звучит довольно диковато, но я больше не понимаю, как объяснить тот факт, что wifi выключился, когда я включил ноут в зарядку, и починился, когда я его из зарядки вынул, и включил в этот порт какое-то другое устройство.
Зато 2 часа бессмысленного и беспощадного(потому что ничего не понял) #debug, за время которого я узнал кучу бесполезных знаний про сеть в Linux, и про устройства своего ноутбука!
* например, у меня есть кнопка принудительного(аппаратного) отключения тачпада, Fn-F9, сяомишники знатно потешаются над этим фактом в разных там форумах, чуть ли не первый вопрос новичку, не нажал ли он эту кнопку случайно.
* в первый раз в жизни запустил команду "ip a", увидел интерфейс sit0, и разобрался, что это такое(спойлер - вам это не нужно).
Ну и так далее.
🔥9😁6🤔2
Недавно рассказывал, что соорудил рендеринг #svg иконок в png, через #inkscape.
Все же, мне этот процесс кажется не очень технологичным:
* Inkscape - overkill по зависимостям
* И, хотя я и сделал, что от пакета с иконками зависит только финальный #realm, все равно, inkscape пересобирается довольно часто, и приводит к пересборке иконок.
* Еще он срет в консоль сообщениями про то, что, мол, не может найти display.
Поэтому я решил найти что-то попроще!
Сначала гугл мне посоветовал https://github.com/cppfw/svgren
На первый взгляд, библиотека неплохая, много чего умеет. Но, к сожалению, ее автор сошел с ума (кстати, а вы уже поняли, что эта моя характеристика почти никогда не несет отрицательной коннотации? Мы тут сумасшедших любим, они делают все самое интересное!):
* Он распилил проект на очень много маленьких зависимостей, которые надо опакетить.
* Так-то оно, может, и неплохо, но он к ним запилил свою систему сборки, с классным названием prorab - https://github.com/cppfw/svgren/blob/master/makefile, и с не менее классным определением библиотек в системе, с чем я уже развлекаться не захотел.
Я решил, что, раз автор меня так не уважает, и не хочет, чтобы я пользовался его кодом - ну, так и быть! Мораль - не выебывайтесь при выборе системы сборки.
Вторым вариантом гугл мне предложил https://github.com/sammycage/lunasvg, на ней я и остановился.
У нее в комплекте поставки есть тулза svg2png, которой мне оказалось достаточно, чтобы поверх нагородить рендеринг иконок.
"Из коробки" мне не понравилось только сглаживание, поэтому я наладил такой вот процесс https://github.com/pg83/ix/blob/main/pkgs/bld/iconker/lunasvg/iconker.py:
* Рендерим иконку в большом разрешении
* Ресайзим через Imagemagic's convert во все нужные разрешения
Заодно оно стало быстрее работать, потому что рендеринг, все же, медленнее, чем resize.
Хорошая, годная, библиотека, подумываю написать поверх нее pixman loader, вместо librsvg-шного.
Все же, мне этот процесс кажется не очень технологичным:
* Inkscape - overkill по зависимостям
* И, хотя я и сделал, что от пакета с иконками зависит только финальный #realm, все равно, inkscape пересобирается довольно часто, и приводит к пересборке иконок.
* Еще он срет в консоль сообщениями про то, что, мол, не может найти display.
Поэтому я решил найти что-то попроще!
Сначала гугл мне посоветовал https://github.com/cppfw/svgren
На первый взгляд, библиотека неплохая, много чего умеет. Но, к сожалению, ее автор сошел с ума (кстати, а вы уже поняли, что эта моя характеристика почти никогда не несет отрицательной коннотации? Мы тут сумасшедших любим, они делают все самое интересное!):
* Он распилил проект на очень много маленьких зависимостей, которые надо опакетить.
* Так-то оно, может, и неплохо, но он к ним запилил свою систему сборки, с классным названием prorab - https://github.com/cppfw/svgren/blob/master/makefile, и с не менее классным определением библиотек в системе, с чем я уже развлекаться не захотел.
Я решил, что, раз автор меня так не уважает, и не хочет, чтобы я пользовался его кодом - ну, так и быть! Мораль - не выебывайтесь при выборе системы сборки.
Вторым вариантом гугл мне предложил https://github.com/sammycage/lunasvg, на ней я и остановился.
У нее в комплекте поставки есть тулза svg2png, которой мне оказалось достаточно, чтобы поверх нагородить рендеринг иконок.
"Из коробки" мне не понравилось только сглаживание, поэтому я наладил такой вот процесс https://github.com/pg83/ix/blob/main/pkgs/bld/iconker/lunasvg/iconker.py:
* Рендерим иконку в большом разрешении
* Ресайзим через Imagemagic's convert во все нужные разрешения
Заодно оно стало быстрее работать, потому что рендеринг, все же, медленнее, чем resize.
Хорошая, годная, библиотека, подумываю написать поверх нее pixman loader, вместо librsvg-шного.
GitHub
GitHub - cppfw/svgren: :camera: SVG rendering library in C++
:camera: SVG rendering library in C++. Contribute to cppfw/svgren development by creating an account on GitHub.
🔥8👍6😁3
https://connortumbleson.com/2022/11/28/open-source-saying-no/
Тут вот очередной зумер рассказывает про какую-то проблему open source.
Дело тут, конечно, не в open source, он рассказывает про проблемы любого bloated софта. Хоть open source, хоть корпоративного, хоть какого.
Я писал, и буду писать, что эта проблема решается тем, что некоторый софт надо считать законченным. Вот, реально:
* библиотека замораживает свой код
* принимает только багфиксы
* никаких новых фич
Для развития библиотеку нужно скопировать в новое место, и писать все новое там. Возможно, начиная с нуля, возможно, переиспользуя старый код, но не оглядываясь на старые API, в новом namespace.
Желающие переходят на новую библиотеку, или не переходят.
Проблема тут в следующем:
* Человек, словивший хайп в OSS один раз, вряд ли сумеет его словить во второй раз, поэтому все новое тащат в первое удачное и популярное решение, раздувая его до невозможности.
* Дистрибутивы часто довольно сложно убедить затащить еще одну .so, а запихнуть что-то в старый код - вполне норм.
Поэтому, кстати, в Rust/Go проблема с этим стоит гораздо слабее, если стоит вовсе, потому что распилить библиотеку на части, и притащить новую зависимость - очень просто.
Вот бы в С++ кто-то этим озаботился - сделал бы нормальную std2, выкинув оттуда все наслоения, типа iostream, регулярок, локалей, и прочего шлака. Мечты, мечты.
Тут вот очередной зумер рассказывает про какую-то проблему open source.
Дело тут, конечно, не в open source, он рассказывает про проблемы любого bloated софта. Хоть open source, хоть корпоративного, хоть какого.
Я писал, и буду писать, что эта проблема решается тем, что некоторый софт надо считать законченным. Вот, реально:
* библиотека замораживает свой код
* принимает только багфиксы
* никаких новых фич
Для развития библиотеку нужно скопировать в новое место, и писать все новое там. Возможно, начиная с нуля, возможно, переиспользуя старый код, но не оглядываясь на старые API, в новом namespace.
Желающие переходят на новую библиотеку, или не переходят.
Проблема тут в следующем:
* Человек, словивший хайп в OSS один раз, вряд ли сумеет его словить во второй раз, поэтому все новое тащат в первое удачное и популярное решение, раздувая его до невозможности.
* Дистрибутивы часто довольно сложно убедить затащить еще одну .so, а запихнуть что-то в старый код - вполне норм.
Поэтому, кстати, в Rust/Go проблема с этим стоит гораздо слабее, если стоит вовсе, потому что распилить библиотеку на части, и притащить новую зависимость - очень просто.
Вот бы в С++ кто-то этим озаботился - сделал бы нормальную std2, выкинув оттуда все наслоения, типа iostream, регулярок, локалей, и прочего шлака. Мечты, мечты.
Connor Tumbleson
Open Source & Saying "No"
An Open Source project can balloon to extreme sizes and then lose purpose of why it started - a rant.
👍9🔥4😐2