commit -m "better"
3.76K subscribers
1.29K photos
176 videos
3 files
2.75K links
just random thoughts
Download Telegram
https://roman.pt/posts/dont-let-dicts-spoil-your-code/
https://lobste.rs/s/gzemqn/don_t_let_dicts_spoil_your_code

Тут вот коллега убеждает всех, что не надо использовать словари в питоне для взаимодействия разныхслоев в коде. Пишет, что надо все преобразовывать в классы, и как можно раньше переводить ваши данные из json-like словарей в эти иерархии.

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

Сначала я несколько переформулирую задачу, надеюсь, что без https://en.wikipedia.org/wiki/Straw_man

Учем, что в Python (очень упрощенно, но достаточно для моих нужд)
a.b := a.__dict__['b']

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

Плюсы этого подхода понятны - иногда(pun intended) не нужно менять внутреннее представление при изменении формата данных и протоколов.

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

Минусов же - вагон и маленькая тележка:

* Если вам не повезло, то нужно менять и промежуточное представление, и внутренние данные. Это все усложняет, и вы можете стать заложником такого разделения при попытке сменить формат данных.

* Люди, на самом деле, плохо предсказывают будущее, и не везти вам будет сильно чаще, чем хотелось бы.

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

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

* Достаточно subtle вещь, но IMHO важная. В Python dict везде, вы можете очень прозрачно манипулировать этими словарями как объектами, так и как kwargs, и часто это очень удобно. С классами как?
**a.__dict__['b']
? Ну такое.

* На каждое сочетание частей исходных данных классов не наберешься. Я к тому, что разных вариантов нетипизированных словарей у вас может быть очень много(в том числе, data driven), и вам совсем не захочется их все как-то именовать.

* #protaskivanie

Я свои словари разбираю только, если мне нужна полиморфная иерархия классов. И то, я постараюсь словари в поля классов не разбирать, а положить одним словарем все.

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

(Если подумать, то у меня в коде на Python сильно больше словарей и функций, чем классов с методами)

Ну и такое, философское, замечание - вот так вот отказываться от словарей в Python, это как в Lisp от списков.
👍11🤔4👎2
2 новости, одним блоком, потому что, они, по сути, про одно и то же.

https://www.opennet.ru/opennews/art.shtml?num=57414

Люди запускают ядро Linux в виртуалке во FreeBSD, чтобы использовать драйвер для сетевой карты. Звучит всрато? По мне так огонь - это еще один подход к снаряду "драйвера в userspace".

https://www.opennet.ru/opennews/art.shtml?num=57412

"Применение асинхронной буферизированной записи на базе io_uring до 80 раз снизило задержки в XFS"

Как по мне, обе этих новости про то, что монолитные OS уже отжили свое, потому что современные технологии и практики программирования приводят к тому, что не нужно делать context switch на каждый чих, и выселение сервисов OS в user space не бьет больно по throughput и latency.

Уже писал, и еще раз напишу, что будущее осестроения - это ядра, которые будут заниматься установкой соединений между сервисами, и поддержкой вот таких вот uring между сервисами в user space.
👍7🔥41
https://www.opennet.ru/opennews/art.shtml?num=57415

Уязвимость в минорной версии openssl. Я подчеркну "в минорной", потому что хочу рассказать про следующий забавный факт.

Примерно в 20 - 30% случаев за каждым релизом какого-то OSS софта, через день-два следует следующий релиз с исправлениями багов.

Тут можно понимающе усмехнуться, и сказать "ну, на то и минорные релизы, чтобы фиксить проблемы мажорных".

Но, дело в том, что это нифига не так - фиксы следуют один за одним именно в минорных релизах. За последнюю неделю:

neovim 0.7.[1, 2]
popt 1.[17, 18, 19?(непонятно, был он, или нет)]
libidn 1.[40, 41]
телега 4.0.[1, 2]
+ топикстартер.

И это только то, что я вспомнил из головы.

К чему это я все?

Не работает этот ваш #semver, хреначат баги в прод без тестов почем зря.

Хочется уже какое-то правило "обновляться на новый код минимум через 2 дня после релиза, если не было следующего". К сожалению, с существующими инструментами это не очень удобно, придется где-то хранить свой state.
🔥4🤔2😢1
https://tass.ru/ekonomika/15055267 #wot

Развитие событий по делу читов для World Of Tanks.

Что я могу сказать? Я не эксперт в юридических словах, но считал, и продолжаю считать, что тут нет "состава преступления".

Есть "unfair" эксплуатация дыр, это когда ты крадешь номер кредитки в чате игры, и есть "fair":

* автоматизация фарминга

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

* AI для прицеливания(не могу найти ссылку на девайс, который прямо в hdmi потоке рисует рамочки для прицеливания в наборе игр)

Чем отличается официальный донат в играх от вот этого? Только тем, кому идут деньги. И в том, и в том случае игрок получает преимущество в игре за деньги.

Турниры? Ну come on, это мелкая и решаемая проблема, начиная от очных турниров, до полной записи на камеру действий игрока, монитора, и так далее.

UPD: в комментах мне пишут, что это нарушение ToS. Это классическая дилемма - отвечает ли производитель ножей за противоправное их применение. Я считаю, что не отвечает.
👍6😱1
Список зависимостей у библиотеки или программы - очень мощная вещь, по ним, например, можно понять, что cmake через curl лезет в сеть, а это очевидные ай-ай-ай.

Вот так, анализируя кольцевые зависимости freetype + harfbuzz + cairo + pango, я начал понимать, что мои представления о рендеринге шрифтов в Linux очень далеки от реальности.

#freetype #harfbuzz #fontconfig

Раньше я думал, что все очень просто: freetype загружает файл со шрифтом, рендерит его в буффер по заданным размерам, а дальше приложение битблитит эти буфера на канву, почем зря.

Потом в эту модель добавился harfbuzz, как загрузчик opentype шрифтов. Модель изменилась так - или freetype, или harfbuzz рендерят в буффер глифы, дальше приложение битблитает их на канву.

(битблитать недостаточно, https://github.com/revery-ui/revery/issues/108)

Эта стройная модель разбивается о:

* Настройки антиалиасинга живут во freetype. Всем известны infinality freetype, и патченый freetype в arch. Как это все соединяетсяс предыдущей моделью? Как антиалиасятся глифы от harfbuzz?

* subpixel rendering в freetype/harfbuzz? Один и тот же код, или разный, с разными настройками?

* Как мы рендерим цветные шрифты и шрифты под углом? Вряд ли мы поворачиваем глифы, кажется гораздо более естественным поворачивать outlines. Тогда пайплайн такой - freetype/harfbuzz готовят outlines, кто-то отдельный их рендерит. Но, если так, то конечным рендерингом должна заниматься какая-то отдельно стоящая векторная библиотека, типа cairo? А откуда она берет настройки антиалиасинга из freetype, и по каким алгоритмам вообще их имплементирует? А как мы рендерим/поворачиваем subhinted glyphs?

А как в обе этих модели вписываются хинты для взаиморасположения символов? В модель с outlines довольно понятно, а вот в bitmap модель не очень.

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

А если cairo для рисования outlines, то что в QT?

(Я попрошу заметить, что я еще даже не начал писать про подобные неоднозначности в text shape/layout, которыми занимаются harfbuzz и pango, и невесть кто еще)

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

Коллеги, помогите девочке Даше не сойти с ума, и скажите, как оно все на самом деле.

Ну и главный вопрос - чо круче-то, open type или true type шрифты? Как убедиться, что используется ot вариант, и что рендеринг идет правильным путем?
🤯6👍2
Как вы уже поняли, я умею себе находить друзей в интернете. #vkquake

Вот, только что, видимо, закрыл себе все дороги в Tesla, повздорил с автором vkQuake - https://github.com/Novum/vkQuake/issues/500 https://www.mobygames.com/developer/sheet/view/developerId,567237/

Пришел с багой, что у меня его программа с новой версией начала падать.

Один из коммитеров(не оунер проекта) подсказали мне, что дело может быть в размере стека.

И, да, действительно, автор кода не очень бережно обращался со стеком, и ему перестало хватать дефолтного стека в musl.

Я посоветовал ему, "как perf инженер perf инженеру", чтобы он выделил пертредный буфер нужного размера, и использовал его вместо стека.

Автор кода:

* сообщил мне, что я stupid fool(потерто)

* что он 7 лет оттрубил в id Software, и что он-то уж точно знает, как надо. Я, конечно, сообщил ему в ответ, что 20 лет занимаюсь перфом сложного многопоточного софта, что разозлило его еще больше.

* Параллельно он попытался втюхать мне, что выделение в куче time unbounded, а на стеке - нет. Я, конечно, не преминул рассказать ему про то, что стек выделен в virtual memory, и page fault в нем так же time unbounded. И что предложенный memory pool так же решает эту проблему.

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

Всем новоприбывшим, если вам кажется все это странным - я повторю, что не имею задачи подружиться с каждым долбоебом из upstream, у них там много интересных фантазий про разработку софта, но я-то при чем?

Если автор upstream вменяемый, я с удовольствием рассказываю и помогаю в решении возникших проблем, а если вот такой невменоз - ну так он обойдется и без моих патчей, а я у себя их подержу.
🔥24👍11😁10💩1
commit -m "better"
Как вы уже поняли, я умею себе находить друзей в интернете. #vkquake Вот, только что, видимо, закрыл себе все дороги в Tesla, повздорил с автором vkQuake - https://github.com/Novum/vkQuake/issues/500 https://www.mobygames.com/developer/sheet/view/developerId…
Очень мило, у меня появился персональный фанклуб(кстати, далеко не первый, но про остальные как-нить в другой раз), пока там 1 какой-то странный чувак, который хочет предать меня публичному позору:

Это ещё одно, что я хочу показать. 
Как ты поплывёшь и пойдёшь меня
тереть после своего позора

В целом, пофиг, мало ли сумасшедших, вопрос исключительно в модерации.

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

Модерировать я ничего не собираюсь, разве что, конкретную уголовщину, чувака забанил на сутки(уже вернул).

Так как я не публичная инфраструктурная площадка, забанить человека на сутки мне чем-то особо плохим не кажется.
👍14
У меня случилось продолжение историй про #googlesource и про #gitlab

Напомню, что речь идет про 2 следующих факта:

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

* freedesktop пролюбили свою инсталляцию gitlab, и поднимали ее из праха.

Короче, я вчера сделал ix gc - это команда удалила все ненужное из системы, в том числе, все скачанные исходники.

И тут началось.

* из-за того, что freedesktop пролюбили кеш артефактов, и из-за проблемы нестабильности генерации tgz, у меня поехали хеши исходников, указанные в сборочных файлах

* пока я прописывал новые хеши, gitlab снова сломался, и начала вместо исходников присылать html с 502, который и закешировался вместо исходников. К такому меня не готовили, и я снова сделал ix gc

* После этого я нашел зеркала нужных мне исходников на github, и прописал их.

Лично меня бесят эти красноглазые пенсионеры, которые, в своей ненависти к MS(а как еще объяснить желание своей инфры в этом месте?) делают больно дистростроителям на пустом месте.

Не надо, не надо, не надо держать свою инфраструктуру там, где это возможно. Особенно если у вас один админ на 10 минут в неделю на этот проект.

github собаку съел на хранении исходников, у него девяток больше, чем букв в слове freedesktop.
😁13👍1👎1😱1
#gstreamer #plugins #gold

OSS, построенный на консалтинге - зло, так же как и OSS, основанный на продаже вендорам закрытых версий своего же OSS кода.

Пока за фичу кто-то не заплатит, хрен она появится в публичной репе, даже если будут желающие ее запилить просто так.

Вот, например, авторы gstreamer последние 15 лет всем рассказывают, как же динамически загружаемые плагины - это круто.

Но стоило появиться Хуавею, который покрутил пальцем у виска, сказал, что хочет все, как у белых людей, и дал денег, так gstreamer сразу переехал в монорепу, и запилил "почти" статическую сборку.

https://www.collabora.com/news-and-blog/news-and-events/generate-mininal-gstreamer-build-tailored-to-your-needs.html

Конечно, все это сделано максимально говенным способом, накрутили каких-то скриптов поверх meson https://github.com/GStreamer/gst-build/blob/master/scripts/generate_init_static_plugins.py, накостылили прокидывание настроек из основного meson файла в вспомогательные, и, самая мякотка - сказали, "а мы будем собирать все, что найдем, как обычно, а вы потом в отдельном файлике имплементируйте функцию, которая зарегистрирует все нужные вам плагины".

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

Написал однажды, и напишу еще раз.

Самый лучший опенсорс - это опенсорс от больших компаний, который:

* решает побочную для этих компаний задачу, поэтому им нет смысла вот так вот мелко гадить, типа chromium, protobuf, tensorflow, llvm, catboost, etc

* который делается по нормальным корпоративным лекалам, с тестами и KPI
🔥7👍3👎1🤔1
commit -m "better"
Как вы уже поняли, я умею себе находить друзей в интернете. #vkquake Вот, только что, видимо, закрыл себе все дороги в Tesla, повздорил с автором vkQuake - https://github.com/Novum/vkQuake/issues/500 https://www.mobygames.com/developer/sheet/view/developerId…
Вышел новый релиз yaQuake, с фиксом падения под musl, как написано в changelog: #vkquake

https://github.com/Novum/vkQuake/releases/tag/1.20.1

========= Quake Initialized =========

execing quake.rc
execing default.cfg
execing config.cfg
couldn't exec autoexec.cfg
3 demo(s) in loop
Playing demo from demo1.dem.


the Necropolis
Using protocol 15
Segmentation fault

Оно, конечно, продолжает падать, всегда, а не как я ранее думал(в некоторых частных случаях).

Видимо, коллегу в idSoftware магии про стек научили, а вот тестировать код - нет.

Завел issue - https://github.com/Novum/vkQuake/issues/508
😁17👏1
commit -m "better"
У меня случилось продолжение историй про #googlesource и про #gitlab Напомню, что речь идет про 2 следующих факта: * системы контроля версий отдают нестабильные tgz с кодом, если речь идет про снепшот, который готовит сама система контроля версий, а не про…
https://sfconservancy.org/GiveUpGitHub/
https://news.ycombinator.com/item?id=31932250
https://sfconservancy.org/blog/2022/jun/30/give-up-github-launch/
https://lwn.net/Articles/899530

Стоило мне всех позвать на github, как SFC начало всех призывать с гитхаба съехать. #sfc

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

Они - левые упыри.

https://sfconservancy.org/GiveUpGitHub/

Вы мне можете сколько угодно рассказывать, что мелким шрифтом потом все более развернуто, но первая фраза БОЛДОМ из списка аргументов - "Copilot is a for-profit product".

Жадные MS денег заработали, а в SFC не занесли.

Обычная левацкая подмена понятий - они защищают не мою свободу, и не свободу оунеров проектов на github, они нападают на MS. Как обычно для леваков, их аргументация более эмоциональная, чем техническая, почитайте:

"GitHub differs from most of its peers in the FOSS project hosting industry, as GitHub does not even offer any self-hosting FOSS option. Their entire codebase is secret." - ну и чо? В git content addressable storage, там хеши поедут, если они что-нить сделают не так. А в остальном - что такого в проприетарности? Это, в конце-концов, сервис, а не программа.

"GitHub is wholly owned by Microsoft, a company whose executives have historically repeatedly attacked copyleft licensing" - этот аргумент, на мой взгляд, вообще леденящий душу пиздец. Смотреть надо на то, что происходит сейчас.

Ну и такое у меня соображение - SFC, когда чует запах денег, судится. Если не судится - значит, шансов нет.

Еще я не понял, что там с правом на цитирование - типа, совсем небольшой блок кода не считается derived work. Это разве не подходит под copilot?
🔥5👍2🤔2👎1
#xiaomi

https://www.ixbt.com/news/2022/07/01/oled-4k-dolby-vision-xiaomi.html

Кто-то ждет выставок от Apple, а я вот теперь жду Xiaomi. Через 2 дня они представят свои "прошки", и, если доставка будет работать, это будет мой следующий ноутбук.

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

Я родом из славного города Арзамас-16, родины советской атомной бомбы. Родители полжизни проработали на военку, деды вообще были известными в своих областях учеными.

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

Лейтмотивом этих обсуждений было "как бы этот хитрющий Китай не спиздил все наши ценные секретные разработки". Общий консенсус был, что они далеко позади, и им нужны наши технологии.

Прошло 30 лет, у меня и у моих родителей большинство техники - из Китая. Xiaomi, Honor, Huawei, куча ноунейма, продаваемого известными брендами, etc.

Высокие технологии, скоростные поезда - это все не про Рогозина, который хвастается цацками 30-летней давности, а Китай.

Сетевое оборудование, теперь и легковые машины - это все теперь Китай.

Забавно, что все это произошло на глазах одного поколения, и горько от того, что старшему поколению все божья роса - они почему-то никак не могут увязать эти свои разговоры 30-летней давности и текущее состояние, но зато "Россия встает с колен".
😢11👍9🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
https://github.com/Novum/vkQuake/issues/508
https://github.com/Novum/vkQuake/commit/1af0e6ae56c09a14589a9990e9574bd195a3cd06

Автор #vkquake, судя по всему, родил нечто, что более-менее решает проблему переполнения стека.

Собственно, проблема прошлого "решения" была в том, что он брал за размер стека треда размер стека main, который сильно больше.

Почему я считаю, что это, все еще, не совсем годное решение?

Потому что:

* Он делит стек на 2 части - static, размером 128к, и dynamic- все остальное. static - это под заранее рассчитанные вызовы рекурсивных функций, dynamic - под выделение данных неизвестного заранее размера.

* Отсюда сразу вытекает баг - если, вдруг, static часть станет > 128к, то на маленьких картах все продолжит работать, а на больших - будет падать.

Ладно, на это пофиг, по крайней мере, не хуже, чем было до этого.

Самая мякотка вот в чем -
  max_thread_stack_alloc_size = (size_t)CLAMP (0ll, (int64_t)stacksize - THREAD_STACK_RESERVATION, MAX_STACK_ALLOC_SIZE);

Короче, у него размер static части 128k, и размер стека под musl - 128k, то есть, размер dynamic части - 0.

Поэтому вот тут - https://github.com/Novum/vkQuake/blob/master/Quake/mem.h#L48 мы всегда попадаем в "slow" path.

7 лет в idSoftware, my ass.

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

UPD: воспользовался своим "правом первой ночи", сделал malloc() всегда - https://git.sr.ht/~pg/ix/tree/main/item/pkgs/bin/quake/1/vk/ix.sh#L36.
😁13👍3
Будни #bootstrap

Собирал себе какую-то программулю, обнаружил в выхлопе cmake, что она не может найти libavif, хотя зависимость от нее я поставил.

Уже наученный горьким опытом, я обнаружил, что в libavif нет ${out}/lib/cmake.

(кстати, отвлекусь на другую тему - это, конечно, жесть, что разработчики cmake решили сделать свою систему package discovery. Весь unix пользуется pkg-config(*.pc файлы). И жесть в квадрате - нельзя просто попросить найти libXXX, ее надо попросить или через pkg-config, или через встроенный механизм cmake)

https://github.com/AOMediaCodec/libavif/blob/main/CMakeLists.txt#L528

if(BUILD_SHARED_LIBS OR VCPKG_TARGET_TRIPLET)

Охренеть, да? Ну любому же программисту очевидно, что discovery нам нужен только для .so, а для статических библиотек не нужен.

cmake - это херовый интерпретатор языка, похожего на Basic + M4, и зачем-то люди пишут на нем свои сборочные скрипты. Слишком много дурацкой вариативности.

Я выставил в ON вторую переменную, которая нигде больше не используется - https://git.sr.ht/~pg/ix/tree/main/item/pkgs/lib/avif/ix.sh#L11

А еще я теперь на такие штуки пишу тест, который выполняется прямо в момент сборки - https://git.sr.ht/~pg/ix/tree/main/item/pkgs/lib/avif/ix.sh#L15

После этого шаманства все собралось, как надо.
👍7
TIL об https://github.com/posva/catimg

IMHO самая удобная из известных мне программ для просмотра картинок прямо в терминале, не отходя от кассы:

* Не использует богомерзкие sixel

* Использует символы unicode для увеличения разрешения

* Не пытается открыть графическое окно поверх терминала

* Очень компактная. Не пытается реализовать очередную никому не нужную фабрику по загрузке картинок, использует convert из ImageMagick.

* Написана не на перле и баше, а вовсе даже на С.
🔥12👍4
https://gitlab.gnome.org/GNOME/gtk/-/issues/5004
https://www.phoronix.com/scan.php?page=news_item&px=GTK5-Might-Drop-X11

#gnome

Коллеги рассматривают возможность убрать поддержку X11 из GTK5.

Тикет находится в замороженном состоянии, потому что ссылка на него попала в новости. Поэтому прямо сейчас там ЖЫРА нет, но обязательно будет.

Как ни странно, я тут поддерживаю коллег. X11 никто не пилит, бекенд для него в gtk-gdk уже давно не первого класса.

Поэтому довольно логично в новом коде не поддерживать "загнивающую" технологию. Желающим гонять X11 завсегда остаются более старые версии софта, а если хотите продолжать быть луддитами - ну так, пожалуйста, позиция мейнтейнера Xorg, вроде, открыта.

Гномовцы, конечно, в своем стиле:

"If the "handful of environments" cover 90% of the user base, I would not talk about "massive narrowing" as much as a reallocation of the efforts of a volunteer-driven project."

А ничо, что главный разработчик GTK, Matthias Clasen, он делает примерно 40% коммитов в GTK, работает full time на Red Hat?
👍2👎1
Будни #bootstrap

Я тут решил, что, раз уж у меня есть q1, q2, то к ним нужно добавить и q3.

Мой выбор пал на https://github.com/ec-/Quake3e - написано, что оно умеет в vulkan, а я, как вы знаете, строю vulkan first систему. Даже в качестве реализации OpenGL у меня используется Zink.

Сначала мне это показалось нерешаемой задачей - в коде было слишком много завязок на X11, патч получился бы очень большой, а я не люблю большие патчи. Большие патчи потом сложнее накладывать, то есть, мне, как maintainer, придется тратить сильно больше труда.

Но, приглядевшись, я понял, что весь нужный мне патч - это две регулярки на sed - https://git.sr.ht/~pg/ix/tree/main/item/pkgs/bin/quake/3/e/ix.sh#L20

Одной я убираю "плохие" заголовки, второй - регистрацию каких-то функций из glx, которые далее не используются.

Я уже как-то писал свою идеологию патчинга - минимальные процедурные патчи, потому что их сильно проще мержить, и они потом не ломаются, потому что зависят от меньшего объема окружающего контекста.

Вот, хороший пример такого патча.

Если делать его по классике, там несколько сотен строк содержательного кода.

В третий раз в жизни "хачил" компьютерную игру. Причем как-то очень странно - они, зачем-то, оставили в коде проверку на "чистоту" используемых pak файлов, а в инете можно скачать рипнутые. https://git.sr.ht/~pg/ix/tree/main/item/pkgs/bin/quake/3/e/ix.sh#L25 Убрал ее тоже.

Бонус!

Пока разбирался, чо там и как в quak-остроении, обнаружил, что Lord Havoc(автор DarkPlaces), ВНЕЗАПНО, стал Lady Havoc, и вообще, так всегда и было. https://icculus.org/twilight/darkplaces/
🔥7👍2
commit -m "better"
https://github.com/Novum/vkQuake/issues/508 https://github.com/Novum/vkQuake/commit/1af0e6ae56c09a14589a9990e9574bd195a3cd06 Автор #vkquake, судя по всему, родил нечто, что более-менее решает проблему переполнения стека. Собственно, проблема прошлого "решения"…
#vkquake

Извините, в последний раз, больше не буду, но разъебывать - так разъебывать.

Мне стало интересно, чем занимается программа от коллеги из idSoftware.

Я снял perf record, посмотрел perf report, и увидел:

* В аллокаторе, даже после моих патчей, она проводит 0.2% времени.

* Зато 25% времени программа проводит в https://github.com/Novum/vkQuake/blob/master/Quake/tasks.c#L129 Знающие люди сразу тут увидят наивную попытку реализовать spin wait semaphore, функция называется очень даже правильно.

Ладно, не будем придираться, обычный такой spin wait. 3000 итераций sem_trylock - ну такое, кажется, многовато.

В любом случае, опытные собаководы заявляют, что spin lock в user space - ну такое. https://www.realworldtech.com/forum/?threadid=189711&curpostid=189723 Я на эту заметку уже кидал ссылку, но, все равно, почитайте, красивое.

Если позаменять вызов этой функции на SDL_SemWait, то программа начинает жрать существенно меньше CPU, процентов на 10 - 15, ухудшений в latency я не заметил.

Поэтому, конечно, свою версию я запатчил. https://git.sr.ht/~pg/ix/tree/main/item/pkgs/bin/quake/1/vk/ix.sh#L14

UPD: по просьбам трудящихся - https://github.com/Novum/vkQuake/pull/514
🔥17👍81
commit -m "better"
#vkquake Извините, в последний раз, больше не буду, но разъебывать - так разъебывать. Мне стало интересно, чем занимается программа от коллеги из idSoftware. Я снял perf record, посмотрел perf report, и увидел: * В аллокаторе, даже после моих патчей,…
This media is not supported in your browser
VIEW IN TELEGRAM
#vkquake

Сперва коллега, конечно, поступил как на КДПВ - сообщил, что под винду так работать не будет(доля правды в его словах вполне есть), и закрыл тикет. https://github.com/Novum/vkQuake/pull/514

Но потом, видимо, выдохнул, и решил, что перф на дороге не валяется. Сошлись мы на том, что он сократил количество попыток trywait в 30(!!) раз. https://github.com/Novum/vkQuake/commit/5cf860d1be6d12a3f269ea8355818ab17e586390

(Я, на самом деле, не понимаю, зачем ему там динамическая выполнялка графа - все, что он разложил в этот граф, занимает 10% потребляемого CPU. Может, ему просто нравится писать динамические graph execution engine, как вот мне, или Ленарту, имеет право)

Ладно, и так сойдет.
11👍5😁4
https://www.phoronix.com/scan.php?page=news_item&px=KernelMemorySanitizer-v4 #asan

Уже писал, и напишу еще раз.

Самый большой, практически, тектонический, сдвиг в разработке софта за последние 20 лет - это внедрение address sanitizer от Google, Кости Серебряного, и его команды.

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

Экспертное мнение - Rust даже рядом не стоит по масштабу улучшений. Ну, то есть, если бы не было санитайзеров, Rust был бы очень крутой штукой, а так - ну, на 20% еще меньше ошибок. Это не на порядок даже.

Собственно, отрадно видеть, как Google, вопреки вольнице кернел хакеров(почему вопреки? А почему санитайзеры гоняет google, и почему они не встроены в CI?), постепенно превращает ядро Linux из месива, в котором ты боишься обновить минорную версию ядра и/или компилятора, в нечто, что хотя бы не упадет на старте.
👍14🔥9🤬21
Будни #bootstrap

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

Недавеча увидел в этом списке exim. Это самый популярный MTA, и я подумал, что "нужно"!

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

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

Вот этот сборочный файл из arch - https://github.com/archlinux/svntogit-community/blob/packages/exim/trunk/exim.Makefile

Я попрошу отметить, что это файл из репозитория Arch.

В комментариях дали ссылку на gentoo - https://gitweb.gentoo.org/repo/gentoo.git/tree/mail-mta/exim/exim-4.96-r1.ebuild#n170

КМК, это какое-то лютое пренебрежение к пользователю.

Или я чего-то недопонял, и есть путь проще?
👍3