commit -m "better"
3.77K subscribers
1.29K photos
176 videos
3 files
2.75K links
just random thoughts
Download Telegram
Forwarded from Топ Twitter
😁38👍4🥰2🔥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.
👍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, что заметно, потому что терминал не прошел мой стандартный тест:

-> 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␆pY߻V␚]␍␊~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

Да и какие-то странные артефакты рендеринга, как будто автор захотел быть святее папы римского freetype, и навернул там что-то типа (глючного и косого!) clear type.

Короче, какая-то пионерская поделка, а, на первый взгляд, выглядело хорошо!
👍10😁4🐳31🔥1
У меня вчера, внезапно, пропал wifi на ноутбуке.

Ну вот так, посреди закачки, взял и пропал.

Рестарт не помог, кроме того замечательного факта, что в 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-шного.
🔥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, регулярок, локалей, и прочего шлака. Мечты, мечты.
👍9🔥4😐2
Forwarded from Дидлошная
🔥28😁11👌4👨‍💻2
Я как-то уже рассказывал, что я не доверяю tgz, которые сделаны людьми, и всегда предпочитаю tgz, которую сварил github из какого-то тега или бранча.

Сегодня две истории про это.

* https://download.gnome.org/sources/gtk+/3.24/

Вышла новая версия gtk3 - https://download.gnome.org/sources/gtk+/3.24/gtk%2B-3.24.35.tar.xz - от 22 ноября.

В этот архив забыли положить meson.build из https://gitlab.gnome.org/GNOME/gtk/-/tree/gtk-3-24/gdk/wayland/cursor.

Я не знаю, что за рукожоп это делал, но файла нет, и проект без него не собирается, мне пришлось его доложить прямо в сборку, в виде патча. https://github.com/pg83/ix/blob/main/pkgs/lib/gtk/3/ix.sh#L29

Думаю, что RH собирает этот пакет через configure, пакет делает какой-то человек руками, и ему похер на сборку meson.

* Есть такой интересный проект - https://github.com/hyprwm/Hyprland #hyprland

Это такая альтернатива sway, только со свистелками и перделками.

https://github.com/hyprwm/Hyprland/releases/download/v0.18.0beta/source-v0.18.0beta.tar.gz - вот они сделали tgz руками, https://github.com/hyprwm/Hyprland/archive/refs/tags/v0.18.0beta.tar.gz - а это снепшот репозитория.

Признаться, я не понял, что там за наркомания, такое ощущение, что для ручного пакета они взяли содержимое папки src/, и доточили его напильником.

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

Кстати, раз уж начал про этот проект!

Я на нем могу очень хорошо продемонстрировать свой способ patchwork.

https://github.com/hyprwm/Hyprland/blob/main/src/helpers/SubsurfaceTree.hpp#L27

Зацените оператор сравнения. Он не объявлен const. Поэтому он работает в libstdc++, но не работает в clang/libc++ (например, при попытке вызвать list.erase() с такими элементами).

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

А процедурный патч - https://github.com/pg83/ix/blob/main/pkgs/bin/hyprland/unwrap/ix.sh#L42 - занимает 5 строчек кода, потому что природа патча вполне регулярна!

(Кстати, проект хороший, если хочется поучаствовать в OSS движухе - занесите им это исправление! https://github.com/pg83/ix/blob/main/pkgs/bin/hyprland/unwrap/ix.sh#L59 - там еще два патча про фикс сборки с libc++/clang, но они не такие sexy)
👍6🔥4😁2
https://www.phoronix.com/news/RFC-eBPF-Linux-Scheduler (#ebpf #uring #future)

#ebpf едет в шедулер, а, значит, я скоро смогу попробовать запустить в него свои шаловливые ручки #ananicy

"The belief is that with eBPF support for the Linux kernel scheduler it could ease experimentation and exploration of new scheduling policies, allow for application-specific schedulers and other customizable options via the loading of custom BPF programs, and provide a non-disruptive way for changing out scheduling policies within production environments"

Ну и, совсем не удивляет, что "Engineers from both Google and Meta (Facebook) are behind this initiative"
🔥10👍2🤔2😁1
Forwarded from Метаверсище и ИИще (Sergey Tsyptsyn ️️)
Пост для гиков.

Если поглядеть на картинку (и тред), то маленькая иконка OpenAI указывает на то, как GPT находит баги и эксплоиты в коде (тут конкретно в коде смартконтрактов). Они (пока) простые и достаточно распространенные, но то, как GPT их описывает жутко интересно. А также он декомпилирует байткод и описывает что он делает.
Это я к чему.
Если нужно будет захватить мир путем взлома человеческой инфраструктуры - то ИИ уже готов - дайте только доступ в интернет. И готовьте свои метамаски.
https://twitter.com/gf_256/status/1598104835848798208
👍6🔥4😱3🤔1😢1🤮1
commit -m "better"
Недавно рассказывал, что соорудил рендеринг #svg иконок в png, через #inkscape. Все же, мне этот процесс кажется не очень технологичным: * Inkscape - overkill по зависимостям * И, хотя я и сделал, что от пакета с иконками зависит только финальный #realm…
Мужик сказал - мужик сделал!

Запилил я gdk pixbuf #svg loader поверх #lunasvg!

В процессе, конечно, узнал много чего интересного, чем и спешу поделиться.

Короткая предыстория:

* Сперва у меня вообще не было рендера svg, потому что #rsvg перешел на Rust, а его у меня (пока?) нет.

* Потом я научился использовать довольно старую версию librsvg, которая была написана на C, и глючила, что пиздец - 1/4 иконок была отренжерена с какими-то артефактами. Это, конечно, то еще достижение, учитывая простоту формата svg.

* Потом я научился готовить для всех scalable иконок png заранее, с помощью inkscape. Примерно для 1/4 оставшихся использовался старый rsvg render, с баглом и артефактами.

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

* (мы находимся тут) -> png рендерятся с помощью lunasvg, остатки - тоже.

https://github.com/pg83/ix/blob/main/pkgs/lib/lunasvg/gdk/io.cpp - вот код клея между lunasvg и gdk-pixbuf.

БОльшую часть кода я написал за полчаса, а потом еще часа 3 трахался за последние 5 строк кода, без которых на экране был мусор:

* Примерно полтора часа - это "нормальная" отладка - разбирательство с тем, в каком формате поверхность отдает lunasvg, в каком ожидает GdkPixbuf, и как их "поженить", разбирательство с моделью владения памятью в glib(чтобы не текло и не ездило по use-after-free), и с обработкой ошибок в ней же.

* А вторые полтора часа - это какая-то совершенно безумная ебала, когда, на первый взгляд, я делаю все правильно, при этом, знаю, что command line часть lunasvg родила корректный png, но, если отрендерить его в динамике моим кодом, то на экране - мусор.

В какой-то момент времени я остановился, и подумал: "А какое бы безумное действие я мог бы совершить на месте авторов gtk, чтобы у меня ничего не работало"?

Единственное, что мне пришло в голову - что они, зачем-то, портят xml с svg, перед тем, как его передать мне. Ну потому что как еще объяснить факт, что pixmap data получается разная?

Sooka! Sooka! Аааа!

https://github.com/GNOME/gtk/blob/main/gtk/gdkpixbufutils.c#L249

Короче, они манглят svg во вложенный svg в виде base64 блоба. КМК, это сделано затем, чтобы указать уникальный размер для рендеринга. Да, да, в scalable vector graphics есть width, и height, чтобы им пусто было.

Я, конечно, решил, что раз эти негодяи формируют xml через printf, то парсить я его буду регулярками. https://github.com/pg83/ix/blob/main/pkgs/lib/lunasvg/gdk/io.cpp#L93 (да, да, это точно надо занести в upstream)

После этого почти(в следующей серии!) все заработало, иконки выглядят очень хорошо, всяко лучше, чем в бажной и глючной старой librsvg.
👍10🔥6👌3😁2👏1
Forwarded from Топ Twitter
👍24😁20🤔5🔥1
commit -m "better"
Мужик сказал - мужик сделал! Запилил я gdk pixbuf #svg loader поверх #lunasvg! В процессе, конечно, узнал много чего интересного, чем и спешу поделиться. Короткая предыстория: * Сперва у меня вообще не было рендера svg, потому что #rsvg перешел на Rust…
Продолжение истории про #lunasvg. #svg

Я закончил на том, что у меня часть иконок была отренжерена через lunasvg в процессе построения пакета с иконками, а часть(которая вне этого пакета) - в процессе работы приложения.

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

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

Я бы тут хотел ткнуть вас куском кода из rsvg/cairo/gdk, который страдает такой херней, но я не сумел, там все слишком запутано.

Чего только стоят несовпадения ARGB/RGBA, где-то используется premultiplied alpha, где-то - нет, premultiplied alpha по разным формулам, все эти поверхности постоянно туда-сюда преобразуются.

Я решил просто потвикать r, g, b, a каналы в разные стороны, и посмотреть, что получится.

В процессе я выяснил:

* g, b каналы никак не использовались, ну, то есть, я мог туда записать все, что угодно.

* r канал давал изменение от цвета фона к ярко-желтому цвету. 0 - фон, 255 - ярко-желтый(нет, это не cmyk, и не прочие модели, по крайней мере, не те, что я знаю).

* alpha канал работал, как надо.

Мое лучшее предположение - что рендеринг symbolic иконки - это, собственно, отбрасывание r, g, b, и использование только alpha компоненты для блендинга между фоном и цветом для рисования.

Желтый? Хер его знает, может, для дебага, может, я вообще неверно все понял.

В итоге, решение вида "оставить только alpha канал для svg, которые загружаются как symbolic иконки", вполне себе сработало, я с лупой не нашел отличий. https://github.com/pg83/ix/blob/main/pkgs/lib/lunasvg/gdk/io.cpp#L100

Так-то это достаточно логично - а как еще наиболее дешево "оконтурить" произвольную svg?

Где это происходит в связке rsvg/gdk/cairo, я не нашел, они большие мастера прятать такое говнецо.
👍4🐳32🔥2🌭1🍌1
Вчера ходил на yatalks preparty, поболтать за OSS.
🔥36👍12🥰3😱1