commit -m "better"
3.25K subscribers
1.03K photos
149 videos
3 files
2.4K links
just random thoughts
Download Telegram
https://hardcoresoftware.learningbyshipping.com/p/061-bsod-to-watson-the-reliability

Забавно. Товарищ (из Microsoft?) считает, что качество софта улучшилось, когда ввели телеметрию. Плохая статья.

На пути к хорошему софту было 3 этапа:

1) Перестали писать системный софт на ассемблере, и стали на C. Microsoft тут явно не была впереди планеты всей, потому что Unix.

2) Повсеместная защита памяти в OS. Microsoft, опять же, процессу не помогала, а мешала. Напомню, что Windows NT(которая работала, как часы), позиционировалась ею как система для профессионалов, и стоила, как космолет. Ситуация поменялась только после выхода провальной Windows ME, когда уже даже идиотам стало понятно, что методом грубой силы линейку Win95 до ума не довести.

Кстати, немного в сторону - вопреки некоторым мифам, Windows NT и памяти не сильно больше жрала, чем Win95/98, и с совместимостью программ у нее было неплохо. Например, более-менее все нерукожопые игры, которые работали через dos4/gw, прекрасно работали в NT, благодаря https://en.wikipedia.org/wiki/DOS_Protected_Mode_Interface - это такая технология, когда OS в себе содержит свой dos extender, и условный dos4/gw просто передает управление ему.

Windows NT 3.51(https://winworldpc.com/product/windows-nt-3x/351) - моя любимая винда. Красивый GUI, еще до-чикаго эпохи, микроядро, быстрое, и безопасное(она могла перезапустить упавший драйвер видюхи на ходу, например).

3) Санитайзеры. После их повсеместного внедрения я лично перестал бояться катить в прод. Казалось бы, при чем тут Microsoft? В Microsoft с этим всегда было туго, до-sanitizer технологии(valgrind) вообще никак не были представлены в Windows. #asan

4*) Переход на "безопасные" языки. Господа, давайте этот пункт обсудим лет через 5 - 10, когда impact уже будет очевиден :)

Короче, плохая, негодная статья, которая пытается представить, что MS была впереди планеты всей в борьбе с багами. Нет, это не так.

———
dash + coreutils: 35s
dash + busybox: 35s
bash + busybox: 40s

And the winner is..... Yash! https://yash.osdn.jp/index.html.en

yash + coreutils: 30s

Кстати, хороший, годный shell, я им периодически пользуюсь. В принципе, у него похожие плюсы(strict POSIX, fast, работает везде) и минусы(пишет 1 человек, непонятно будущее проекта), как и у dash, так что я пробую заменить.

———
https://browsix.org/

(тут должна быть картинка про hey dawg)

Мы сделали браузер для того, чтобы gui стоил дешево, и чтобы не нужно было разрабатывать десктопное приложение на каждый чих.

Но, вот, теперь запустили там Unix CLI. А что дальше? Qt/GTK, и потом опять браузер? Божечки, зачем.
https://www.youtube.com/watch?time_continue=203&v=Zh3Yz3PiXZw&feature=emb_logo

Прекрасный видос, я, как обычно прослоупочил.

———
https://twitter.com/proffeynman/status/1038833676962869249?lang=en

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

———
Факир был пьян, фокус не удался.

yash отлично справляется с configure скриптами, но валится на каком-то bash-изме в libtool.

eval 'f ( X "" )' - что это? по мне так yash прав, что missing ), потому что f( - начало определения функции.

Видимо, автор dash это закостылял, потому что dash какое-то время был дефолтным shell в ubuntu(про сейчас не знаю). Без этого костыля #autohell проекты не собираются.

На закуску - автор yash упоролся, и переписывает его на Rust. https://github.com/magicant/yash-rs/issues

Вот зачем, зачем переписывать то, что уже написано и работает? Я там понимаю, если бы он фич хотел досыпать, но он же опять пишет posix shell.

———
https://botondballo.wordpress.com/2022/01/03/2021-c-standardization-highlights/

range-based for-loop аккуратно обошли стороной. C++ doomed.

———
Intel отчаялась победить шедулер #sched в Linux, и теперь CPU просто сам говорит - "пошедули чего-нить на меня", или "я перегрет" https://www.tomshardware.com/news/intel-alder-lake-thread-director-support-coming-to-linux

А чо, норм тема, производитель процов явно же лучше знает, как нагрузить его поделие полезной работой.
https://www.opennet.ru/opennews/art.shtml?num=56475

Вот и ответ про clang. Сравнение с прошлой версией не очень хорошо получается сделать, но я насчитал где-то 8% преимущества над GCC.

———
https://blog.darknedgy.net/technology/2020/05/02/0/

Фундаментальный текст про systemd.

* Я понял, что не совсем верно понимал позиционирование systemd. Авторы его больше продавали как замену xinetd, то есть, хотели все сделать на socket activation. Ну, то есть, systemd еще более overengineered, чем я думал.

* launchd, с которого списывали #systemd, сделал многие вещи существенно более правильно - отдельная система для dependency management, отдельная - для socket(port, в случае Mach) activation.

* Текст лично для меня оказался очень вкусный. Знаете же это ощущение, что на одной волне с автором? Читаешь такой, и думаешь, "а вот сейчас бы упомянуть про ...", и вот оно. Например, https://www.winestockwebdesign.com/Essays/Eternal_Mainframe.html. Или вот - "and the general trend of eBPF turning Linux into an extensible hybrid kernel of sorts."

* Недостаток текста - автор зачем-то слишком много цепляется к личности Поттеринга. Насрать же на Поттеринга, важно то, что хочет делать RedHat, а потом IBM(кроме как попыткой враждебного захвата Linux это и не назвать IMHO).

* Поворотный момент - когда разработчики ядра(спасибо им за это!) послали всю эту гоп-компанию с #kdbus. Сейчас systemd не представляет экзистенциальной угрозы.

———
https://github.com/2point21/lba2-classic

Совершенно случайно наткнулся на исходники LBA2. В детстве всегда хотелось посмотреть, как она сделана внутри, вот, смотрю. Интересное вечернее занятие :) Удивительно, насколько оно все сделано странно, и, фактически, затащено "грубой силой".

К слову, был у меня период, когда я, в течении нескольких месяцев, воскресное утро начинал с того, что проходил LBA2. А какой там был саундтрек!
https://habr.com/ru/post/599767/
https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/
https://twitter.com/marak/status/1479200803948830724?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1479200803948830724%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/

Меня это все, конечно, бесит. #npm #money

* С одной стороны, в OSS денег и славы нет(ну, примерно как в большом спорте). Я вот в OSS ищу 20 котрибуторов в пакетную базу и 1 - 2 в core graph engine, так сказать. В лучшем случае. Чего там эти странные люди обижаются, я не понимаю. Их код, вообще говоря, используют ТОЛЬКО потому, что он бесплатный. Если бы они его выложили не на github/npm, а там в маркет приложений, его бы никто и не заметил.

"These messages included the text 'LIBERTY LIBERTY LIBERTY' followed by a sequence of non-ASCII characters:"

Ага, а чо не так-то с liberty? Кто ему "швабодки" не досыпал-то?

Чувак явно хотел написать "MONEY MONEY MONEY", но постеснялся:

"Take this as an opportunity to send me a six figure yearly contract or fork the project and have someone else work on it."

Ну да, это в какой валюте? Если в имперских деньгах, то он не понимает, что такое код, и что такое деньги.

* "NPM has reverted to a previous version of the faker.js package and Github has suspended my access to all public and private projects. I have 100s of projects." С другой, вот факт, что github и npm самовольно откатили его код, это леденящий душу пиздец. Не устану напоминать, что провайдер услуг не может и не должен заниматься такой хуйней. Впрочем, может, их EULA содержит какие-то пункты, которые это разрешают, а я просто о них не знаю. Any comments?

* С третьей - конечно, индустрии это пойдет на пользу. Менеджменту давно пора понять, что бесконтрольный npm/pip install(да и вообще, любые бесконтрольные зависимости) - это потенциальное зло, а не только сотни мегабайт прекрасного кода в ваш проект. Ну и сумасшедших, которые зависят по trunk от стороннего проекта без тестов, станет поменьше.

———
https://habr.com/ru/company/dcmiran/news/t/599733/

А расскажите мне, почему в данном случае не работает рыночное решение? Типа, сложно произвести столько карт, чтобы насытить рынок, и непонятно, что потом делать с новыми производственными мощностями, когда этот пузырь лопнет? Или просто там задержка в несколько лет, от машин для литографии до конечного потребителя?

———
https://www.tiobe.com/tiobe-index/

Про Python на первом месте я уже писал, брызгая желчью.

Про Rust - конечно, очень плохо, что Cobol обогнал Rust, но зато очень хорошо, что Rust обошел Prolog!
https://lkml.org/lkml/2022/1/8/170

На патч Ingo по ускорению сборки кладут хер.

———
https://dpc.pw/making-open-source-economy-more-viable-with-dual-license-collectives

Товарищ переизобретает коллективную лицензию на продажу mp3(а помните allofmp3.com? Эх...), только для софта. Тема, конечно, хорошая, но не полетит.

———
https://gitlab.gnome.org/GNOME/gtk/-/issues/4165

Gtk двигается в сторону прямого использования opengl/vulkan в качестве канвы для рисования. Это очень правильно, opengl/vulkan - это уже давно стандарт для рисования, непонятно, зачем иметь кучу прослоек для него.

Вообще, хотелось бы увидеть современную библиотеку виджетов, построенную напрямую поверх opengl/vulkan, без кучи legacy, платформенных библиотек, и вот этого всего. Про imgui знаю.

———
https://devblogs.microsoft.com/directx/announcing-the-opencl-and-opengl-compatibility-pack-for-windows-10-on-arm/

Я тут, давеча, писал, что microsoft присматривается к Mesa и #ANGLE. Оказывается, я мастер предсказывать события, которые уже имели место быть.

Microsoft уже использует #Mesa в качестве эталонного opengl для arm устройств. Это очень круто, молодцы. Мне нравится, что MS делает в OSS в последние годы.

———
https://github.com/hunspell/hyphen/blob/master/hyphen.tex

Очень интересная лицензия - "делайте, что хотите, только не называйте результат hyphen.tex". Ну, где наша не пропадала, рядом просто лежит hyphen.patch, интегрированный в систему сборки. Если нельзя, но очень хочется - то можно!
https://www.opennet.ru/opennews/art.shtml?num=56492

Классная штука, я туда даже пару коммитов сделал.

———
https://habr.com/ru/news/t/645097/

А расскажите, кто в теме, кто в данной ситуации негодяй и редиска?

———
https://aras-p.info/blog/2018/12/28/Modern-C-Lamentations/ #gold

Хороший текст про важность времени сборки.

For example here (Unity), we had a joke that “adding Boost into the codebase is a fireable offense”

Мои 5 копеек:

* Header-only библиотеки - это зло, которое возникло от того, что старперы в стандарте заняты поддержкой сохранения ABI, вместо того, чтобы сказать, что приложение на С++ должно пересобираться целиком, как в Rust. Поэтому люди вынуждены эмулировать вот это вот "целиком" подручными средствами. #abi

* В своем личном коде на C++ я стараюсь допускать как можно меньше inline, у меня даже pushBack() в Vector в .cpp лежит. LTO разберется(и, по факту, no inline + LTO разбирается быстрее, чем инстанциировать километры шаблонов в каждом исходнике).

* Если бы все согласились разово замедлить весь код на 20%, но чтобы он собирался в 10 раз быстрее, я(ну, условный я) за освободившееся время бы алгоритмически ускорил бы подведомственный код больше, чем на 20%. Кажется, тут уместно вспомнить, что оптимум по Парето не всегда совпадает с равновесием Неша.

* Использование компиляторных intrinsics в 100 раз быстрее, чем использование их, но обернутых в std::. Поэтому у меня есть https://github.com/pg83/std/blob/master/std/typ/intrin.h

———
https://blog.robsayers.com/on-learning-smalltalk

Тут вот господин рассказывает, почему Smalltalk хорошо, но мне почему-то кажется, что любой image-based Lisp(а это почти все современные Lisp) обладает такими же свойствами.

———
Флеймообразующий вопрос к аудитории!

А почему, например, GNU/FSF не считает файл с образом для QEMU, в котором лежит образ Linux и другие динамические библиотеки, вариантом статической линковки?

———
>Сейчас #systemd не представляет экзистенциальной угрозы.

Хочу немного пояснить этот speech. Речь идет про small linux, hobby linux, про мой личный Linux.

Есть нечто притягательное в том, чтобы вырастить полностью свой, необычный, стек. Если бы Linux начал навязывать мне systemd, как необходимый элемент этого стека, я бы остался на MacOS, там за меня уже приняли все нужные решения, и шедулер там не глючит.
https://www.opennet.ru/openforum/vsluhforumID3/126400.html#49

Эти сумасшедшие (кто? GNOME? RedHat?) совсем кукухой поехали. JS в системном демоне.

———
https://levelup.gitconnected.com/top-30-git-commands-you-should-know-to-master-git-cli-f04e041779bc

Еще одни поехавшие, 30 базовых команд, чтобы нормально работать с git. Напомню, что в нормальных VCS нужно примерно 3 команды.

Впрочем, чтобы принять этот факт без попоболи, нужно согласиться с тем, что VCS - это способ хранения исходников, а не способ хранения и навигации по истории.

Я за всю жизнь активно читал историю, а не исходники, раза 3, наверное. И то, чтобы словить лулзы, а не разобраться с чем-нибудь. Я не вижу никакого смысла разбираться с тем, что думал какой-то странный человек по поводу того, что он там писал в коде. Важно только то, что этот код делает здесь и сейчас, а не то, что про него думал автор 10 лет назад.

PS: тикеты с описанием продуктовой составляющей фичи полезны, да.

———
https://habr.com/ru/news/t/645289/ - как же бесит этот новояз.

"Для Mozilla цель состоит в том, чтобы заставить Firefox работать одинаково на всех платформах, чтобы облегчить обслуживание и упростить разработку и исправление ошибок операционных систем. Для нас это изменение означает огромное упрощение с точки зрения обслуживания и разработки. Раньше мы сами собирали Firefox, используя упаковку Ubuntu. Теперь мы упаковываем версию Mozilla"

Вот ведь все всё понимают, зачем писать такую хтонь?

———
https://www.opennet.ru/opennews/art.shtml?num=56489 - анонс более простого механизма(куда уж проще?) для деплоя? eBPF программ.

https://www.opennet.ru/opennews/art.shtml?num=56497 - и через день анонс о новой уязвимости в eBPF. Cовпадение?

https://isovalent.com/blog/post/2021-12-08-ebpf-servicemesh - я уже как-то писал, что eBPF превращает Linux в нормальную микроядерную OS. Но вот прямо все тащить в ядро, даже через eBPF? Зачем? Модель sidecar прекрасна.

———
https://adamhooper.medium.com/in-mysql-never-use-utf8-use-utf8mb4-11761243e434

Уверен, про это написали вообще все, поэтому без комментариев.
https://www.phoronix.com/scan.php?page=news_item&px=Linux-Remove-a.out

Linux убирает поддержку a.out, придется в gcc -o давать какие-то более осмысленные имена, если вы понимаете, о чем я.

———
https://llvm.discourse.group/

#LLVM съезжает с допотопных рассылок. С одной стороны - это хорошо, в почтовых архивах решительно невозможно было ориентироваться. С другой - это какая-то закрытая платформа, я там не нашел кнопки "скачать письма за 2021 год".

———
https://www.opennet.ru/opennews/art.shtml?num=56503
https://github.com/chrisdutz/blog/blob/main/plc4x/free-trial-expired.adoc #money

Еще одно эмоциональное подгорание на фоне отсутствия денег за OSS. Даже не знаю, что и сказать, на фоне того, что уже сказано и написано.

Пожалуй, добавлю, что вот это вот всё индустрии несколько мешает, потому что люди, которые принимают решения о использовании OSS во внутренних разработках, будут вспоминать эти истории, и очередной раз задумываться, связываться с этими эмо(которые сегодня раздают бесплатно, а завтра плачутся, что им там каши недодали) с github, или нет.

———
https://venam.nixers.net/blog/unix/2021/02/07/audio-stack.html

Неплохой текст про состояние аудио стека в Linux.

https://github.com/jackaudio/jack2

The activation system has been changed for a data flow model and lock-free programming techniques for graph access have been used to have a more dynamic and robust system.

Класс. А это пример lock-free технологий из jack2:

    while ((err = snd_pcm_resume(handle)) == -EAGAIN)
usleep(100); /* wait until the suspend flag is released */
if (err < 0) {
-

Слово usleep в кодовой базе встречается 50 раз.

При этом, jack все еще лучший звуковой сервер под Linux, все, как и 15 лет назад.

———
https://developers.redhat.com/articles/2022/01/12/prevent-trojan-source-attacks-gcc-12

Сначала создаем себе проблемы, потом героически их решаем. Не, так работы нам хватит навсегда.

Хотелось бы, конечно, флаг в компиляторах -fno-porridge -fascii-only-source, я более чем уверен, что есть сильная антикорреляция между тем, что человек использует эмодзи с какахой non-ascii symbols в коде, и тем, что его код может быть мне как-то полезен.
😁1
https://world.hey.com/dhh/i-won-t-let-you-pay-me-for-my-open-source-d7cf4568 #money #gnu #charity

Хороший, но странный, текст.

Мне зашла первая часть, где автор аргументирует, что #GPL и MIT(условно) ненужно рассматривать вместе, как EULA vs. (GPL, MIT), а нужно как EULA vs. GPL vs. MIT, потому что у Столлмана и Гейтса(условно) больше общего друг с другом, чем с MIT. И тот, и другой что-то хотят от вас взамен за свой код. Деньги или другой код - неважно.

But it felt like that exactly because there was no sword hanging over my head. Nobody telling me that this is what I ought or had to do. No one expecting me to do it. So it was an act of volition rather than one of duty. A truly authentic choice.

That to me is freedom.

Автор на это сморит с левых, социалистических позиций.

Ближе к середине текста ему совсем снесло крышу, и он начал галопом по Европам по всем интересным ему темам, там, например, про воспитание детей, дочитывать я не стал.

———
https://raphlinus.github.io/rust/gui/2019/06/21/smooth-resize-test.html

https://raphlinus.github.io/ui/graphics/2020/09/13/compositor-is-evil.html

https://thume.ca/2020/05/20/making-a-latency-tester/

https://lwn.net/Articles/814587/

Про некоторые проблемы современных графических стеков, с кучей интересных ссылок.

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

———
https://mesonbuild.com/Wrap-dependency-system-manual.html

Глубже погружаюсь в Meson, и, местами, оно мне перестает нравиться. Например, то, как там сделан vendoring - это жесть. Как отключить его из cli, я не понял, но зато прекрасно работает хак с удалением всех *.wrap файлов в сборочной директории, оно перестает ходить по http и git почем зря.

———
https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking

На неделе линкера я обещал написать текст про линкер, но не написал.

Зато нашел вот этот текст, там написано примерно то же самое, что хотел написать я:

* базовый алгоритм для простого случая статической линковки

* описан самый важный хак для разрешения циклических зависимостей

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

Дано: файл с полным логом сборки моей системы.

Надо: написать регулярку длиной до 4 символов, которая отфильтрует наиболее полезные записи(да, до четырех).
"UNIX is simple and coherent..." - Dennis Ritchie
"GNU's Not UNIX" - Richard Stallman

———
https://woodrush.github.io/blog/posts/2022-01-16-neural-networks-in-pure-lisp.html

Статья, конечно, не про нейронные сети, а про то, как сделать float, имея на руках структуру данных в 1 бит.

———
Full disclosure - я очень не люблю gstreamer. Его пилили какие-то сумасшедшие, которые решили, что граф обработки multimedia может свалиться в runtime, а не в момент его конструирования. Графы там сложные, падают почем зря. Ну и 15 лет назад библиотека была настолько нестабильна, что я чуть не поседел, пытаясь ей воспользоваться.

https://gstreamer.freedesktop.org/features/

Graph-based structure allows arbitrary pipeline construction

И произвольные падения в runtime. Потому что надо не arbitrary, а только те, что имеют смысл в runtime.

Based on GLib 2.0 object model for object-oriented design and inheritance

Хуже объектной модели #glib не бывает вообще ничего. Магия на препроцессоре, которая приводит к генерации исходников похлеще, чем в С++, шаг влево - вправо - расстрел на месте. Про 10 уровней indirection и про то, что все в куче - я вообще молчу(а потом удивляются, почему программы на GTK жрут памяти больше и работают медленнее, чем QT)

Compact core library of less than 500KB, about 65 K lines of code

pg@fedora:~/mix/store/vVPM7CFLUYaHJm8iL-lib-gstreamer-19/lib du
376 ./pkgconfig
97116 .

100 мегабайт, и сюда не входит mpeg/libav/ogg/etc

Multi-threaded pipelines are trivial and transparent to construct

Нет.

Clean, simple and stable API for both plugin and application developers

Знаете, кому и кобыла - невеста. Возможно, коллеги не видели clean and simple API.

Короче, если есть выбор - берите ffmpeg. К сожалению, WebKit использует gstreamer, поэтому пришлось повозиться.

———
https://www.da.vidbuchanan.co.uk/blog/webos-wampage.html

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

Взлом WebOS через кеш байткода в V8. long story short - имплантируем в кеш байткода проезд по памяти, и, благодаря этому, забираемся в потроха браузера.
commit -m "better"
Так, у нас сегодня задачка по бутстрапу, решения принимаются до завтрашнего вечера, данные в первом комментарии. Дано: файл с полным логом сборки моей системы. Надо: написать регулярку длиной до 4 символов, которая отфильтрует наиболее полезные записи(да…
И первое место занимают 2 регулярки!

* '0m' - 2 символа. Позволяет выгрепать все обозначенные цветом строки. Если автор сборочного скрипта не сумасшедший пользователь https://github.com/Textualize/rich, то это хороший источник информации. Используется знание того, как устроена rst ansi escape code.

* ': ' - 2 символа. Использует знание того, что всю типизированную информацию люди часто выводят в формате key: value. Находит ошибки, предупреждения, несработавшие configure опции, и так далее
https://www.opennet.ru/opennews/art.shtml?num=56518 #law #yeswecan #provider

Опять наезжают на youtube-dl. Надеюсь, Европа с ее continental law, с этими говнюками справится лучше.

Отмечу, что уже хорошо то, что идут в суд, а не в github. И провайдер молодцы - не отключают по первому требованию.

Не могу удержаться от того, чтобы не запостить этот коммент с opennet:

"Надо заметить: плеер из веб-интерфейса сильнее греет камень, нежели тот же mpv, получающий видеопоток через сабж (или его форки).
Пользователей у ютуба -- почти целая планета (минус китай).
Это значит, что ютуб серьёзно увеличивает человеческий углеродный след, что сильно влияет на изменение климата и всякое другое.

Поэтому почему ещё не подключены зелёные активисты с гретой тумберг, которые ратовали бы за запрет просмотра ютуба в браузерах или андройд-приложениях и требовали бы принудительного перехода ютуба на youtube-dl?"

———
https://cp4space.hatsya.com/2022/01/14/conway-conjecture-settled/

Тема огонь. И сам факт(что существуют принципиально неизменяемые(и вечные) объекты(то есть, если они есть во время T, то они должны были быть и во время T-1), это автоматически доказывает утверждение, что существуют non-glider-constructible объекты), и то, как он доказан(SAT).

А ведь еще лет 10 - 15 назад математики утверждали, что их-то ну никогда-никогда.

Короче, не текст, а полчаса истинного удовольствия.

———
https://github.com/leandromoreira/ffmpeg-libav-tutorial

Девочка Антон продолжает исследовать мир AV в Linux.

Скажите, а зумеры уже полностью захватили мир, и теперь даже сложные темы будут вот так, в картинках?

———
https://vlang.io/ #vlang

Я тут ищу язык, который:

* быстро собирается
* работает под все unix платформы
* нормально "бутстрепается"

Для того, чтобы писать на нем сборочные утилиты, которые будут выполняться на host системе во время сборки.

Python был бы неплох, но он просто люто, бешено тормозит в последние годы. Если я на нем пишу, скажем, враппер для clang(https://github.com/pg83/mix/blob/main/pkgs/lib/c++/std/mix.sh#L47, для исправления кривых опций от автора какой-нить системы сборки), то время сборки легко увеличивается в 2 раза.

V похож на Go, но более хорошо "бутстрепается".

———
https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.17-Page-Table-Check
https://www.opennet.ru/opennews/art.shtml?num=56523

Все #хорошее в ядро идет из Google.

———
https://tass.ru/politika/13441081

Как вы уже понимаете/помните, "инфраструктурная площадка не может bla-bla-bla", но вот в этом случае даже я не хочу быть адвокатом дьявола.
https://www.opennet.ru/opennews/art.shtml?num=56525
https://nakst.gitlab.io/essence

"Система может работать на устаревшем оборудовании с менее чем 64 МБ ОЗУ и занимает около 30 МБ дискового пространства. Для экономии ресурсов выполняется только активное приложение, а все фоновые программы приостанавливаются."

Класс, а я-то думал, чего у автора шелла нет в поставке. А он там просто работать не может же - потому что две программы должны одновременно выполняться.

———
https://www.phoronix.com/scan.php?page=news_item&px=GCC-12-Enters-Stage-4

"One fundamental change made by GCC developers upon entering stage four development was the decision to rename all .c C source files comprising the GCC compiler to now using a .cc extension."

"Fundamental"

OK.jpg

———
https://matrixmultiplication.xyz/

В продолжении темы зумеров и картинок. Интересно, скоро на мехмате?

———
https://lemire.me/blog/2022/01/17/what-is-the-range-of-a-number-type/

Интерпретация #Lemire, конечно, приятнее.

Что я могу добавить, как человек, закончивший кафедру вычмата мехмата МГУ?

* Придумывать численно устойчивые алгоритмы с матрицами - это какая-то магия, я так и не научился

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

* Авторы работ по deep learning - шарлатаны. По крайней мере, когда они пытаются объяснить, что их алгоритм почему-то работает, апеллируя к тем или иным свойствам результата алгоритма на матрицах. Апеллировать к свойствам этих алгоритмов, особенно на какой-нить там 16-битной арифметике - ну такое. Лучше бы честно писали что-то типа "мы проверили 100500 разных вариантов, вот такие почему-то работают".
https://news.microsoft.com/2022/01/18/microsoft-to-acquire-activision-blizzard-to-bring-the-joy-and-community-of-gaming-to-everyone-across-every-device/

Чо, теперь Diablo только на Xbox будет?

———
https://habr.com/ru/news/t/646145/

50000 ноутов - это немало. Интересно, на какую часть дохода наше уважаемое минцифры решило нагнуть этих товарищей?

———
https://wiki.linuxfoundation.org/realtime/rtl/blog#the_real-time_endgame_is_moving_quickly_now

Оказывается, недавно в ядро вмержили патч про realtime, с 20-летней историей.

Текст про текущее состояние RT в Linux. Я все еще не отчаиваюсь победить лагающий браузер.

А вот что пишут коллеги про тестирование RT в ядре:

https://lwn.net/Articles/830660/

Ideally, each new stable kernel would be downloaded automatically, built, and run through a series of realtime-specific tests.

Все же понимают, в чем тут facepalm? *

———
https://www.phoronix.com/scan.php?page=news_item&px=Qt-Digital-Advertising-1.0

"Qt Launches Digital Advertising Platform To Integrate Ads Into App UIs"

Нематерных слов у меня по этой теме нет, простите.

———
Одной строкой:

https://github.com/zevlg/telega.el - клиент телеги для emacs. Жалко, что я использую другую OS.

https://krebsonsecurity.com/2022/01/norton-360-now-comes-with-a-cryptominer/comment-page-1/ - а чо, тоже способ монетизации.

https://www.nginx.com/blog/do-svidaniya-igor-thank-you-for-nginx/ - Игорь всё.

* - берем стабильное ядро, и проверяем, есть ли в нем баги. В стабильном ядре. После релиза. Сначала делаем релиз стабильного ядра, потом проверяем, работает ли в нем RT.
https://www.phoronix.com/scan.php?page=news_item&px=LibreOffice-WASM-2022 #wasm #WASI

Писал про WASM в Firefox. Мне кажется, что за WASM, конечно, большое будущее(а все же помнят, что я мастер предсказывать уже произошедшие события, да?):

* Оно достаточно вменяемое в среднем. Без встроенного GC там, например.

* Насколько я понял, WASM bytecode сохраняет более полный граф выполнения программы(условно говоря, не goto label, а if - then - else) в сериализованном виде. Я недавно читал статью(к сожалению не сохранил, если вдруг есть под рукой - скиньте, pls), что такая структура позволяет процессору лучше оптимизировать выполнение кода.

* Ну и самая мякотка - легион JS-разрабов, которые затащут этот WASM везде. И, знаете ли, в какой-то момент может показаться очень заманчивым начать исполнять браузер и Electron на реальном железе.

Короче, вот вам прогноз - на горизонте в 15 лет мы увидим соревнование WASM и RISC-V, в реальном железе(я вот только не очень понял, насколько WASM memory safe по дефолту, поэтому в реальном железе может быть немного другой вариант).

Хотя, конечно, я часто бываю черезчур оптимистичным.

https://medium.com/@losfair/a-comparison-between-webassembly-and-risc-v-e8fb9d37e6cc

То, что WASM заточено на JIT, IMHO, как раз будет только в плюс, потому что процессоры все больше и больше становятся похожи на hi-perf VM.

Почему это не произошло с Java, или на мобильных платформах уже? А все заметили, что сейчас случился ренессанс процессоростроения, и процы в железе под разные задачи не отливает разве что ленивый?

———
Я иногда люблю чем-нить упороться, а теперь у меня для этого есть новая игрушка - мой Mix.

Я его строю не только как пакетный менеджер, но и как (мета) систему сборки, построенную по enterprise лекалам. Например: #ix #gold #dev_shell #ix_run

* кросс-компиляция
* из этого следует возможность собрать произвольный код с произвольным набором флагов и опций.

То есть, я могу построить всю программу целиком, включая библиотеки, с такими фичами, как:

* санитайзеры
* debug/release
* разные optimization levels

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

Для всяких bazel/buck/ya/etc это очевидные свойства, но для OSS систем это достаточно свежая вещь.

Короче, мне всегда было интересно, что будет, если там разные программы пособирать с С++ garbage collector в качестве аллокатора.

* Quake работает like a charm, без лагов, памяти жрет раза в полтора больше.
* Браузер не запускается, какие-то проблемы в выделении drm буффера.

Кстати, gc не такая уж и глупость, оно помогает для того, чтобы заставить работать какую-нить бажную программу с use after free, а у меня такие есть(например, M4 некоторых версий).
Дополню тему про кросс-компиляцию и про сборку с разными флагами.

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

Пример: https://github.com/pg83/mix/blob/main/pkgs/bld/compiler/mix.sh#L4

Что тут происходит? Я говорю, что цель bld/compiler(мета-цель для указания зависимости от компилятора c++) собирается с thin lto + icf(== fast), и по стандарту С++14. То есть, я с этими опциями собираю все поддерево библиотек, нужных для bin/clang/13.

Еще пример - https://github.com/pg83/mix/blob/main/pkgs/mix/template/std/stdenv.sh#L10

Собираем мега-оптимизированный распаковщик, так как распаковка архивов с исходниками занимает существенное время.

Библиотеки, собранные с этими флагами для этих целей, не конфликтуют друг с другом и с библиотеками для других целей(без этих флагов).

Еще отмечу, что, если собрать бинарник с -O0 -g -fno-pic(блин, божественный ассемблер без GOT/PLT говна!), и чтобы в fs лежали все исходники, то даже дебажить с gdb становится приятно. Для корпоративных систем сборки это само собой разумеющееся, для OSS это довольно непривычный опыт.

———
Я ненавижу naming problem, и трачу на нее непозволительно много времени.

В Mix я запустил эксперимент - программы раскладывал в какую-то иерархию, а все библиотеки складывал в lib/.

Эксперимент закончен, дерево программ я расформировал, переложил все плоским списком в bin/: https://github.com/pg83/mix/tree/main/pkgs/bin

Больше не надо задумываться, куда положить gcc(lang? gnu?), или wget(net? gnu?), или как там расклассифицировать toybox.

Плохая иерархия - хуже отсутствия иерархии. Плохая иерархия ведет тебя по ложному пути, а потом обманывает тебя(например, говорит, что в lang/ нет gcc, и ты думаешь, что gcc вообще нет в иерархии).

Удобно было бы раскладывать папочки по списку тегов, но fs так не умеет.

Замечу, что список плоский только в среднем, немного ad hoc иерархии там есть, но она не вымученная, и только помогает.

Nix имеет иерархию, brew, например, нет. В brew искать пакеты мне удобнее, хотя их там много тысяч штук.
👍1
Короче, я сделал, можно поздравлять(не, реально!)

Mix, на голом железе, real 3D accel, network, no systemd, no .so, no /lib/.
🎉18🔥16
Хотел бы я написать, что переезд под полное управление моим пакетным менеджером заработало like a charm, но увы.

* у меня нет /lib, /usr, и прочей лабуды. При попытке скомпилировать gcc(для того, чтобы собрать ведро, clang я тут пока не доверяю), gcc на голубом глазу мне заявил, что у меня в системе не хватает папки /usr/include, и он не может запустить свой процесс fixincludes.

Вот хороший текст про это от автора musl, почитайте. https://ewontfix.com/12/

Вот фикс от arch - https://github.com/archlinux/svntogit-packages/blob/packages/gcc/trunk/PKGBUILD#L57

Мне такой не подошел, потому что у меня ломается раньше, так как папки /usr нет вообще. Зато я нашел configure опцию! https://github.com/pg83/mix/blob/main/pkgs/bin/gcc/11/mix.sh#L50

Кстати, давно хотел рассказать про такой fun fact про configure. #autohell позволяет в одном дереве исходников разместить несколько проектов с ./configure скриптами. Тогда верхнеуровневый configure будет проксировать все неизвестные опции вниз, и узнать, какие опции есть, решительно невозможно.

Так вот, fun fact - у проектов gcc, gdb, binutils - общий(ну, почти одинаковый, немного разъезжается) верхнеуровневый configure, c опциями от gcc. Это, конечно, добавляет понимания, как эти проекты собирать.

* В процессе персборки мира я столкнулся со странными падениями сборки, когда один проект не мог найти другой. Потратил на поиски этой проблемы несколько часов, пока не понял, что:

1) Все случаи - когда cmake проект не может найти meson проект.
2) Во всех случаях установка meson проекта была несколько странной - вместо ${out}/include/blah.h было ${out}/include/${ver}/blah.h

Это должно было нивелироваться *.pc файлами, которые разруливают пути.

Тут до меня дошло, что я забыл к cmake проектам дописать зависимость от pkg-config, и ранее использовался системный. После этого все прошло like a charm, герметичная сборка рулит.

Я мог бы все контейнеризовать, но не хочу, потому что под mac это сложно, а я хочу и для него обеспечивать герметичность.
👍8
https://blog.ffwll.ch/2018/08/no-2d-in-drm.html

Недавно плакался, что для ускорения десктопа используется дорогущее и жрущее батарейку 3D железо. Хотя хватило бы блиттера и смешения по альфа-каналу.

Вот, объяснение, можно сказать, от самих разработчиков dri. Пишут, что 2D сложнее, чем 3D. Интересно, что он этим имеет в виду? Конечно нет, не сложнее. Просто не стандартизировано, в отличие от. Стандартизировать ни у кого желания нет, потому что профит по сравнению с уже существуюшим 3D не то чтобы большой.

———
https://wingolog.org/archives/2021/12/13/webassembly-the-new-kubernetes

Писал про #ebpf + #io_uring, и, буквально, на днях, про #wasm. Короче, идея, что нужна более легкая виртуализация, витает в облаках.

———
https://www.supergoodcode.com/zink-4ever/

Важная для меня тема :) Я в Mix решил строить графический стек в виде #zink + vulkan, чтобы 2 раза не вставать(и чтобы без #LLVM в драйверах*). И оказывается, не прогадал. Уже писал, что zink по перфу догнал классический OpenGL, а теперь просто прекрасное - #zink - самый фичастый из OpenGL в Mesa. Короче, старый стек уже можно закапывать.

Чувак работает на Valve.

Все #хорошее в OSS делают корпорации, когда это не основной их продукт. Гугл продает рекламу, а не браузер, FB, знаете ли, не продает системы сборки, и так далее. А вот результат у mongo и elastic немного хуже. Вот и Valve продает не OpenGL, а игры.

Короче, самый годный продукт - это когда код пишется по корпоративным нормам, с нормальным менеджментом, и когда за этот код не хотят денег(чтобы не было желания крутить всякие серые схемы). OSS - дополнительная вишенка на торте, на публику люди стараются больше.

*: кстати, в копилку про "не умеют договариваться" и #fontconfig - в нормальной жизни компилятор шейдеров был бы демоном. Тогда и кеш понятно, как устроить, без вычисления md5 от образа библиотеки, и как не запускать llvm в каждом приложении, и как падения ретраить(sic).

PS: тут про компилятор шейдеров я имел в виду штуку, которая SPIR-V в машинный формат переводит.