commit -m "better"
3.76K subscribers
1.29K photos
176 videos
3 files
2.75K links
just random thoughts
Download Telegram
commit -m "better"
Перешел с unbound на dnsmasq, по советам коллег.
Будни #bootstrap

Поменял #dnsmasq на https://github.com/AdguardTeam/dnsproxy #dnsproxy

Потому что:

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

* Почти полностью повторяет #dnsmasq, если почитать их readme, то там прямо так и написано, что они целятся в его ЦА. Функциональность, аргументы cli - прямо все цельнопижжено с dnsmasq.

* Рекомендуется лучшими собаководами openwrt, для всяких там DoH - https://openwrt.org/docs/guide-user/services/dns/dot_dnsmasq_dnsproxy Я жопа ленивая, думать мне самому обычно лень, а тут все готовое.

* Нормально поддерживает DoH, TLS, и прочие новомодные dns штуки. Мне это, внезапно, стало важно, в контексте борьбы с #РКН.

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

Всячески рекомендую, короче.
👍22
https://blog.cloudflare.com/patent-troll-sable-pays-up/

Сказ о том, как Cloudflare победил патентного тролля:

"In the end, Sable agreed to pay Cloudflare $225,000, grant Cloudflare a royalty-free license to its entire patent portfolio, and to dedicate its patents to the public, ensuring that Sable can never again assert them against another company"
🥰19🔥61
Forwarded from Programmer memes
Please open Telegram to view this post
VIEW IN TELEGRAM
😁207🔥5💩2👍1
Будни #bootstrap

https://www.phoronix.com/news/WebKitGTK-2.46-Skia

WebKit перешел на #skia (https://t.me/itpgchannel/2047), для рендеринга.

Перешел и перешел, дело хорошее.

Но он сделал это криво!

Дело в том, что они переписывают сборку внешних компонент на cmake, и вендорят их к себе.

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

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

Мне настолько надоело чинить это "красиво", что я соорудил очередную #herobora прибегнул к ковровым бомбардировкам - сказал, что недостающие символы надо разрезолвить в вызов abort() - https://github.com/pg83/ix/blob/main/pkgs/bin/epiphany/4/ix.sh#L28-L41 (там какие-то запчасти для отладки).

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

Мораль? Лучше не вендорить зависимости, особенно если у тебя нет команды из 5 человек, которые бы это вылизывали для твоей монорепки.
👍12💯4😱3🐳1🆒1
commit -m "better"
You guys are freaked out because I'm moving quickly and you don't have visibility into my own internal process, that's all
https://www.phoronix.com/news/Bcachefs-Fixes-Two-Choices

Вечер перестает быть томным, Linux ставит вопрос ребром - или #Kent подчинится общим правилам, или с вещами на выход:

"You're a smart person. I feel like I've given you enough hints. Why don't you sit back and think about it, and let's make it clear: you have exactly two choices here:

(a) play better with others

(b) take your toy and go home

Those are the choices"
👍11🤡10😁53🐳3🤔1
https://www.opennet.ru/opennews/art.shtml?num=61988

Сама по себе новость не очень интересная, но вот глаз зацепился за

"Фоновый процесс переведён с использования GObject-обвязки GUsb на прямое обращение к libusb и sysfs, что дало возможность вынести эмуляцию устройств в библиотеку libfwupdplugin и реализовать эмуляцию обновления прошивок на фиктивных устройствах hidraw и nvme по аналогии с эмуляцией с использованием фиктивных USB-устройств. Подобная возможность позволила реализовать дополнительные тесты, выявляющие проблемы с обновлением прошивок, возникающие после внесения в fwupd тех или иных изменений"

и

"Из зависимостей исключена библиотека GUdev, предоставляющая GObject-обвязки над libudev. Вместо GUdev процессом fwupd теперь создаётся netlink-сокет для разбора событий udev, передаваемых через netlink. Изменение привело к значительному сокращению потребления памяти и снижению нагрузки на CPU при запуске и в процессе работы, а также упростило добавление поддержки ueventd, которая в будущем позволит реализовать в fwupd поддержку платформы Android"

Ну вы поняли, да?

Проект выкинул зависимости на всякое glib/gnome/gobject gовно, и получил измеримый профит. Как по памяти, так и по перфу.

Библиотеки от проекта GNOME, которые написаны в парадигме gobject - это говно лютое, там на каждый чих по 10 аллокаций памяти, и линейный перебор по куче связанных списков.

А все потому, что в С еще не изобрели хеш-таблицу.
👍17😁9🐳3🤡2
Forwarded from The After Times
😁61👍2
Forwarded from на хуторе please Dick Аньки (Zoibana)
27😁11🔥6💯5👍1
Forwarded from The After Times
😁37👍6💯5🐳3🔥1😱1
Forwarded from I’m CTO, bitch
Я бы не стал спорить с Чаком.
#база
💯14😱7💩3👍1🔥1🐳1
commit -m "better"
А у меня ее нет, зато есть /var/tmp, с разделением по сессиям.
Будни #bootstrap

Я как-то писал про то, что стараюсь делать так, чтобы все программы уважали ${#TMPDIR} - https://t.me/itpgchannel/757

Сейчас я пошел еще дальше, и удалил системную /var/tmp - https://github.com/pg83/ix/commit/ff64cbcb480c9f0557fccce7de3dd9a51ae3aed3#diff-3814a46e233f2ebc67e3992e03a9eaf741405849ee94ff7de2506582e02e1f1bL110.

Да, у меня теперь нет этой помойки под названием "/tmp".

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

Сервис у меня - это вполне формализованное понятие, он хранит все свои файлы в /var/run/{{service_name}}/, и нигде больше. В том числе, все сокеты, нужные для взаимодействия с ним.

Поэтому теперь временные папки создаются для каждого сервиса/сессии, и очищаются, когда они заканчиваются - https://github.com/pg83/ix/blob/main/pkgs/bin/vt/runit/scripts/ix.sh#L9-L13.

Это позволило очищать всякие остатки за завершившимися сессиями, ну и вообще, стало приятнее!
👍29🔥15😁2🆒2
А вы говорите, что атаки Томпсона (https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf) IRL не бывает!

https://rodarmor.com/blog/whence-newline/
👍3
offtop: интересное про bootstrap

https://twitter.com/mitsuhiko/status/1843221230209597666
😁13👍5🤔5🤯3😱3🆒2
Табель учёта рабочего времени возрастом ~ 3500 лет.

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

Например, 2-го месяца лета, 14-го дня, рабочий по имени Пеннуб отсутствовал на работе, потому что бальзамировал усопшую сестру.

Некоторые из причин:

1. Выпивка с Хонсу
2. Кровотечение у дочери.
3. Варка пива
4. Строит свой дом
5. Приготовление лекарства для жены писца
6. Страдание глазом (?)
7. Бальзамирует родственника
8. Жена истекает кровью.
9. Укус скорпиона
10. У него пир
11. Подношение богу
😁21👍12🎉32🔥1
lobste.rs
Windows dynamic linking depends on the active code page Comments  on lobsters
TL;DR - и дейcтвительно, "windows dynamic linking depends on the active code page"
👍5🤔4🤯3🔥1
https://vondra.me/posts/playing-with-bolt-and-postgres/

Коллега собрал postgres с #BOLT.

TL;DR - десятки процентов перфа в плюс.

Кстати, скачать clang + BOLT всегда можно вот тут - https://github.com/yandex/toolchain-registry
🔥23🤯7👍2🌚1
Новости российского IT.
😁8🐳4💊2