commit -m "better"
3.24K subscribers
1.03K photos
149 videos
3 files
2.39K links
just random thoughts
Download Telegram
Нам нравится unix way.

Это когда есть инструмент, он хорошо делает одну задачу, и эти инструменты composable, например, через пайпы.

Но почему unix получился именно таким?

Моя гипотеза состоит в том, что, так как изначально Unix линковался статически, то такое вот разделение обязанностей по программам - это понятный и разумный способ экономить память.

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

Как side effect получаем пресловутый "unix way".

Ну и, конечно, все пошло по пизде, когда в unix завезли динамическую линковку, потому что такая вот декомпозиция на изолированные процессы - это же сложно, надо много думать, а тут взял и позвал нужную функцию, и OS даже сделает так, что это не потратит дополнительной памяти (ну, почти).
👍19🤔10🔥3🤡3😐2🐳1
commit -m "better"
https://www.hillelwayne.com/post/np-hard/ Текст про мои любимые #sat солверы. #Z3 (для связности) Интересная мысль, которую я раньше не думал: "Of course life isn’t that easy and randomly generated SAT problems tend to be intractable.4 But a lot of industrial…
#sat

https://www.uber.com/blog/nilaway-practical-nil-panic-detection-for-go/

Компания Uber (эта та самая, которая хвасталась тем, что у нее 100500 git репозиториев, а потом сливала их все в монорепку), кажется, запилила нечто весьма годное - штуку, которая ловит разыменовывания nil в go.

При этом, не какой-нить дурацкой эвристикой, а вполне разумно:

"Our main idea is that nilability flows in code can be modeled as a system of global typing constraints, which can then be solved using a 2-SAT algorithm to determine potential contradictions"

Надо брать, пока дают!
👍22🔥32🆒1
https://www.opennet.ru/opennews/art.shtml?num=60133

"Реализован третий уровень поддержки для платформы i686-pc-windows-gnullvm. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода"

Я чет ору, и не могу остановиться.

"i686-pc-windows-gnullvm" - что это? Что это за кадавр, зачем он появился на свет, кому он нужен, и зачем для него нужен Rust?
😁8🐳3🤡2
https://www.phoronix.com/news/Louvre-Wayland-Library
https://github.com/CuarzoSoftware/Louvre

Wlroots - по сути, безальтернативная библиотека, если вы хотите запилить wayland композитор.

Потому что, знаете ли, кто первый встал, того и тапки - вот, представители kwin, mutter, и wlroots по сути, пишут предложения и расширения к wayland. А считать первые два хоть сколько нибудь отделимыми от своих DE может только сумасшедший.

И ничего хорошего в этом нет, потому что:

* Дрю ДеВолт #ddv, как оказалось, еще тот SJW-гондон.
* Мало конкуренции - плохо для продукта.

Собственно, поэтому нельзя не радоваться еще одной полностью независимой реализации библиотеки для разработки #wayland композитора!

Факт того, что она написана на каком-то разумном С++, без мономорфизации во все дырки, тоже не может не радовать.

Конечно, ее авторы ничего не понимают в сборке, потому что она принудительно лезет в вашу систему - https://github.com/CuarzoSoftware/Louvre/blob/main/src/meson.build#L31-L34

В общем, штука интересная, конкуренция - хорошо.
👍15🔥3🆒2👎1
#cross, будни #bootstrap

Продолжаю тему кросс-компиляции в macos, https://xn--r1a.website/itpgchannel/1444

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

Вот, например, вам бинарник dosbox, статически слинкованный под macos-arm64, с linux-x86_64 host.

Без зависимостей от всяких всратых libSDL.dylib/libSDL2.dylib/etc.

(понятное дело, что он не полностью статически слинкован, это невозможно под macos, потому что там поверхность взаимодействия с системой - 100500 closed source фреймворков)

Мне интересно, будут ли с этим бинарником какие-то проблемы, связанные с таким необычным способом сборки, позапускайте (malware not included).
👍8🔥4😁4🆒1
dosbox2
4.4 MB
2🔥2👎1
commit -m "better"
https://www.phoronix.com/news/Louvre-Wayland-Library https://github.com/CuarzoSoftware/Louvre Wlroots - по сути, безальтернативная библиотека, если вы хотите запилить wayland композитор. Потому что, знаете ли, кто первый встал, того и тапки - вот, представители…
Решил посмотреть, что там в стане врага у конкурентов, у них все тоже неплохо - есть как минимум одна популярная библиотека для разработки композиторов - https://github.com/Smithay Там, конечно, не весь стек на Rust, но, тем не менее.

И, вот, интересный scrollable (https://xn--r1a.website/itpgchannel/1437) tiling compositor на его основе - https://github.com/YaLTeR/niri Посмотреть я его пока не посмотрел, но выглядит неплохо.
👍3💩32
commit -m "better"
https://www.phoronix.com/news/Louvre-Wayland-Library https://github.com/CuarzoSoftware/Louvre Wlroots - по сути, безальтернативная библиотека, если вы хотите запилить wayland композитор. Потому что, знаете ли, кто первый встал, того и тапки - вот, представители…
https://github.com/CuarzoSoftware/Louvre/blob/main/LICENSE

Слона-то я и не заметил.

Бибилиотека под GPLv3, а, значит, использовать ее никто не будет.

А если у библиотеки нет пользовательской базы, то в ней нет багфиксов и развития.

Есть, конечно, небольшое количество устоявшихся библиотек под #GPL, но они погоды не далают.
🤡6😁3😱3
commit -m "better"
TIL что pthread_create под нагрузкой может вернуть EAGAIN. https://github.com/oneapi-src/oneTBB/pull/824 От автора #mold, пишет, что в Go тоже есть retry. Признаться, меня это сильно удивляет, и, если бы не соответствующий код в Go, я бы подумал, что Rui…
Забавно, я все еще думал, что такое бывает только в интернете, пока не нашел у себя в логах CI:

libc++abi: terminating due to uncaught exception of type std::__1::system_error: thread constructor failed: Resource temporarily unavailable
libc++abi: terminating due to uncaught exception of type std::__1::system_error: thread constructor failed: Resource temporarily unavailable
libc++abi: terminating due to uncaught exception of type std::__1::system_error: thread constructor failed: Resource temporarily unavailable


Теперь думаю, как чинить.

Потому что, понятное дело, libc++/musl такой патч не возьмут.
🤔1
commit -m "better"
Забавно, я все еще думал, что такое бывает только в интернете, пока не нашел у себя в логах CI: libc++abi: terminating due to uncaught exception of type std::__1::system_error: thread constructor failed: Resource temporarily unavailable libc++abi: terminating…
Вообще, конечно, надо бы устроить рубрику "смешное в сборочных логах", вот сегодняшний улов:

ld.lld: error: undefined symbol: thiswillneverbedefinedIhope
😁67🔥32
Forwarded from /g/‘s Tech Memes (Gianmarco)
😁19🔥42😢2👎1💯1
commit -m "better"
Продолжал эксперименты с #imgui Выяснил, что оно фигачит 60rps даже в моменты, когда это не требуется от слова совсем - https://github.com/ocornut/imgui/pull/5116 Ну, то есть, gui должен перерисовываться только в случае прихода какого-то event, от мышки…
https://github.com/ocornut/imgui/releases/tag/v1.90

Люблю рассматривать релизы #imgui, потому что там всегда есть список новых приложений, которые его используют.

Это вообще какая-то совершенно потрясающая вещь - в списке каждый раз 10 - 20 новых приложений, это примерно столько же, сколько во всем Gnome core.

Судя по всему, на imgui очень легко писать сложные gui, нужные для тулинга, и которые нужно написать быстро, а завтра - выкинуть. И в этом процессе нет места вылизыванию blur на уголках окон по 100500 раз.

Короче, промышленный инструмент, а не вот эти ваши изыски над css.

Мне очень импонирует идея gui как очень тонкой прослойки над системным 3D API, потому что все классические gui типа qt/gtk, которые интегрировали 3d постфактум, сделали это плохо, неполно, и поэтому ты не знаешь, какая часть сцены у тебя отрендерится в 3d, и что приведет к тому, что случится 100500 копирований какого-нибудь буффера из/в память видеокарты.

К сожалению, в Linux 3d драйвера - это .so в userspace, вместо того, чтобы быть каким-нибудь dbus daemon, который бы умел кешировать и компилировать шейдерные программы, что не очень изящно ложится в мою модель статической линковки (бинари довольно заметно распухают, это не то чтобы сильно важно, но как-то "неаккуратно").

Поэтому я, конечно, очень жду, когда gui можно будет компилировать в что-то типа #WASM #WASI, и чтобы 3d драйвера жили исключительно в одном бинаре с WebAssembly VM, о как. Это, если что, не влажная фантазия, у вас прямо сейчас так работает webgl в браузере!
👍12🥰4🤔3🤯2🐳1
За последние несколько дней вышло:

* 3 минорных версии libheif
* 2 минорных версии libde265
* 2 минорных версии libaom

Это жжж неспроста, они там явно что-то судорожно чинят!
🤔93👍3👌2
😁33🔥52
😁292🔥2🥱1
https://glandium.org/blog/?p=4346

Классный рассказ про то, как git вытеснял hg в Mozilla.

Из него я узнал, что однажды зеркало mozilla в github этот самый github немного сломало - https://bugzilla.mozilla.org/show_bug.cgi?id=943132#c8

TL;DR - hg был медленнее, и написал его не Linus, поэтому пользователей у него было мало, и тулинг, со временем, все больше и больше отставал от git.

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

(разумеется, она пижже, чем git, потому что умеет в монорепу, и умеет в упрощенный flow, типа svn commit, без иызысков с индексом и прочими усложнениями от git)
13👍7🫡3🤮1🏆1
Есть такая утилита - neofetch, обычно ее используют, когда делают скриншот с каким-нибудь особенно всратым образом настроенным sway, или там waybar - https://www.reddit.com/r/unixporn/

Я решил попробовать ее альтернативу, под названием https://github.com/fastfetch-cli/fastfetch

Конечно, она ничего интересного не смогла рассказать про мою OS, потому что все обычные способы определения чего-то там в ней были сломаны.

Но вот глаз зацепился за то, что, в качестве terminal emulator она мне писала "mc".

Я полез разбираться, как автору этой замечательной программы получилось добиться такого потрясающего результата.

Мама дорогая...

https://github.com/fastfetch-cli/fastfetch/blob/dev/src/detection/terminalshell/terminalshell_linux.c#L134-L146
https://github.com/fastfetch-cli/fastfetch/blob/dev/src/detection/terminalshell/terminalshell_linux.c#L153-L170

Чувак обходит дерево процессов, начиная с себя, и отсеивая то, что, по его мнению, терминалом быть не может.

Так как "mc" у него не был прописан в этих списках, то он на нем останавливался, и поднимал лапки.

Задумался, как бы эту задачу решить правильно.

Какие-то простые штуки, типа "session leader", "владелец теминала, в который я сейчас пишу", наткнулись на то, что авторы тех или иных оболочек вообще не понимают, как устроены process group, sessions, и так далее, в unix, и делают какие-то совершенно странные штуки (типа, создают сессию, когда она совершенно не нужна по логике вещей). Впрочем, я тоже в этом плохо разбираюсь, да и сами авторы этого кода в Linux (unix) тоже.

Норм работает тема "а вот у какого процесса вверх по дереву есть открытый fd в wayland/x11 socket", но это было уже слишком сложно, и я передумал это дело патчить.

Просто добавил "mc" в список исключений, и оно "заработало".

https://github.com/pg83/ix/blob/main/pkgs/bin/fastfetch/ix.sh#L25

Еще автор зачем-то запустил все детекторы фичей в отдельных тредах, но это уже какое-то "горе от ума", у него накладные расходы на запуск тредов больше, чем профит от распараллеливания, ну да и хрен бы с ним.
👍5🔥32🤔2
https://www.opennet.ru/opennews/art.shtml?num=60173

Тут вот проект opensuse ищет новый логотип.

Я бы им, конечно, предложил сабж (pepe clown)
🤡19😁82👍1🔥1
Forwarded from Мост на Жепи (qplazm3r)
👍34😁16🔥9🗿3🥴1
Forwarded from /g/‘s Tech Memes (ᅠ ᅠ)
😁32😢17🤡21🔥1