commit -m "better"
3.24K subscribers
1.03K photos
149 videos
3 files
2.39K links
just random thoughts
Download Telegram
Доктор: — Вы страдаете извращениями?
Больной: — Что вы, я ими наслаждаюсь!

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

Тут вот вышла книга от Ричарда Столлмана, в которой он рассказывает:

* Как правильно, по мнению GNU, расставлять скобочки в программе на C. Спойлер - не надо так, за это в уважаемом обществе и убить могут. https://en.wikipedia.org/wiki/GNU_coding_standards

* Учение про то, что надо использовать расширения gcc, чтобы проклятые капиталисты не могли своровать безценный код Ричарда код был чище и понятнее. Спойлер - он чище и понятнее не становится, на этих расширениях умеют программировать 3 + 1/2 сумасшедших разработчика glibc, вам к ним не надо.

Особенно доставляет факт, что расширения от gcc не помечены, как таковые, и поэтому человек, решивший по этой книге изучить C, несколько попадет.
😁11🐳4👍1👎1
https://www.opennet.ru/opennews/art.shtml?num=57741

Вышел #gtk 4.8.0

Что они сделали нового, можно почитать по ссылке.

А что сломали - у меня!

Для сборки gtk4 требуется набор xml файлов от wayland. Фактически, это такой хреново сделанный protobuf + protoc + , собственно, сами xml(proto) файлы.

Эти файлы требуются только для сборки, но коллеги из gtk зачем-то впилили runtime зависимость от этих файлов. Пришлось выкорчевывать ее sed'ом - https://github.com/pg83/ix/blob/main/pkgs/lib/gtk/4/ix.sh#L39

Насчет runtime я не уверен, в pkg-config с этим сложно. В том плане, что вот написано, что gtk4 зависит от wayland-protocols. Это что значит? Что wayland-protocols нужны в runtime, или нужны для сборки зависимых от gtk4 целей?
👍4
commit -m "better"
Коллеги, вы, наверняка, решали задачу "купить стол для работы домой". Я вот тоже захотел, но все, что я вижу, по тем или иным причинам, мне не очень нравится. Ищу хороший белый стол на ножках, без регулировки по высоте(хожу много), ну, вот, как в офисе Я…
Продолжаем серию фотографий "из жизни хиккимори".

https://xn--r1a.website/itpgchannel/567

Стол, в итоге, я взял от ZAMM, есть по ссылке в предыдущем сообщении. И кресло, заодно.

Стол хороший, доставка так себе. У меня дом в 100(literally) метрах от границы, до которой они везут сами, везти отказались.

Пришлось везти самому. Удивительный факт - в тарифах Яндекса доехать от Москвы до моего дома на грузовике дешевле, чем на такси.

В первый раз лет за 6 работаю за столом.

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

Но, как говорится, все течет, все меняется.

А еще я на 2 недели ушел в отпуск, и собираюсь за это время добить сайт и документацию, и уже начать писать про #stal/ix более широко.
🔥16👍3
Уважаемые, а что происходит с рынком standalone мониторов для PC?

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

У меня такое ощущение, что я вернулся в 17 - 18 год, с того времени прогресс там произошел, пожалуй что, в герцах, ну и в цене.

Низкие разрешения, PPI << 100, OLED - да вы чо, OLED там вообще нет. Вот, что я нашел из OLED:

* https://4k-monitor.ru/catalog/dell/Dell_Alienware_AW3423DW/ - более-менее норм вариант, но таких денег я в жизни в руках не держал.

* https://aliexpress.ru/item/1005004442033393.html?spm=a2g2w.productlist.list.1.3b023b79EUXm3u&sku_id=12000029193051824 - единственное интересное мне предложение на алике, магазин создан месяц назад, название - OEM. Ну не знаю, не знаю.

* https://4k-monitor.ru/catalog/gigabyte/Gigabyte_AORUS_FO48U/ - а это уже не монитор, но телевизор.

Вообще, какая-то очень странная ситуация:

* телевизоров OLED >= 45 дюймов - жопой жуй, https://4k-monitor.ru/catalog/?set_filter=Y&arrFilter_P1_MIN=&arrFilter_P1_MAX=&arrFilter_63_1241945380=Y&sort=propertysort_IN_STOCK&order=asc&tab=grid&PAGEN_1=3, но куда же я такого монстра себе поставлю? Телевизор у меня уже есть.

* ноутбуков с OLED, с прекрасным PPI, тоже прилично.

А мониторов - нет.

Вот, вроде, годный текст про это - https://overclockers.ru/blog/RaddaR/show/59201/o-prichinah-otsutstviya-oled-monitorov-v-prodazhe-rasskazal-pcworld

Неужели все реально так грустно, и лучше не будет? И у какого из не-OLED мониторов сейчас хорошая картинка?
https://www.opennet.ru/opennews/art.shtml?num=57763

Тут вот пишут, что вышла новая версия #GNU shepherd.

Важная новая фича:

"Клиентские соединения теперь обрабатываются в неблокирующем режиме, что позволяет исключить зависание shepherd при отправке неполной команды"

Хорошо, что я это не стал использовать.

А на вид, если не считать того, что конфиги к ней надо писать на диалекте lisp/scheme, выглядело оно вполне ничего так.
👍4
commit -m "better"
Q: Антон, уже несколько дней как вышел clang15, а ты ничего про это не написал. Даже на opennet уже новость висит!!! https://www.opennet.ru/opennews/art.shtml?num=57739 A: В гробу я видел этот ваш пятнадцатый clang Я этот ваш clang пытаюсь завести еще с rc1…
Когда рассказывал про новую версию, совсем забыл рассказать вот про такой интересный баг.

У меня на первом "прогоне" падало с ошибкой очень много configure тестов. В config.log я обнаружил красивое:

ld.lld: warning: .../lib/libc.a:
archive member 'alltypes.h'
is neither ET_REL nor LLVM bitcode
ld.lld: warning: .../libc.a:
archive member 'syscall.h' is
neither ET_REL nor LLVM bitcode
ld.lld: warning: .../lib/libc.a:
archive member 'version.h' is
neither ET_REL nor LLVM bitcode

И действительно,

pg-> llvm-ar t libc.a | grep '\.h'
alltypes.h
syscall.h
version.h

TL;DR - я написал кривой сборочный скрипт, который положил в .a файл еще и сгенеренные заголовки. https://github.com/pg83/ix/commit/49660edbfc0514382f45bc3ffcdd7179ac74cf4c#diff-d0dfd80046e1a8679abbcdebbc7ee3984b5b75653d63cc2469ec0ee6427b7c20L22

Зачем я тут вообще переделываю .a файл? Потому что musl не поддерживает сборку со сторонним аллокатором, но мне же очень надо.

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

Предполагаю, что дело в том, что stderr от линкера стал непустой, и это сломало какие-то тесты.
🔥3🤔1
https://www.phoronix.com/news/Google-Ghost-Linux-Scheduling

Про user space #scheduler от FB я уже как-то писал, но вот то, что и Гугл делает что-то подобное, я не знал.

С точки зрения API это выглядит очень правильно - агент имеет полное состояние CPU в данный момент(инкрементальными апдейтами), и может отдавать команды вида "запусти тред Х на CPU Y".

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

Почему я думаю, что справлюсь лучше?

Потому что политика вида "любой тред браузера имеет право растолкать всех остальных, но не больше 5 секунд(после чего он признается зависшим javascript)" - это хак, который никогда не будет реализован в ядре, а я смогу сделать.
👍10
https://www.kommersant.ru/doc/5558844

Тут вот опять завиральные планы в области импортозамещения производства полупроводников.

"Дело в том, что стратегия развития электронной промышленности до 2030 года была разработана еще в начале 2020 года, к работе над профильным нацпроектом, реализация которого обойдется в 3,2 трлн руб"

Норм, 30 миллиардов долларов за 10 лет.

Почему планы завиральные? Потому что окружающие тоже не стоят на месте:

https://quote.rbc.ru/news/article/606586539a79475feb1f8a2c

"TSMC вложит в производство чипов $100 млрд"

За 3 года. И это одна TSMC.

Давайте зайду с другой стороны.

Мировой GDP - 100 триллионов. Из них производство полупроводников - 1 триллион долларов.

Очень грубая прикидка нам говорит, что на полупроводники работает 1% всего мира.

Россия - 2% населения всего мира.

Не может такая маленькая страна построить в замкнутой среде все нужные цепочки для производства современного процессора.
👍13🐳52🔥1
https://www.supergoodcode.com/spaghetti-recipes/
https://www.phoronix.com/news/RADV-Lower-Draw-CPU-Overhead

#mesa Несколько оптимизаций в radv(драйвер vulkan в mesa), от Майка Блюменкранца(я периодически про него пишу).

Я бы тут хотел отметить, насколько в ПЛОХОЙ форме находится GPU стек под Linux, если один залетный программист, умеющий запускать perf, за пару часов работы может показать такой серьезный профит. Это просто кричит нам о том, что все низковисящие фрукты там далеко не съедены.

Я полагаю, что примерно то же самое происходит и под Винду, и под macOS, просто мы об этом не знаем. В силу того, что этот код появился не так давно, и, очевидно, у индустрии не было достаточно времени, чтобы его как следует вылизать. Возможно, у NVIDIA тут чуть лучше обстоят дела, просто потому, что они в софт вкладывают очень много усилий.
👍8🤯3🍌1
https://lwn.net/Articles/907572/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735 #CVE

"A flaw was found in python. In algorithms with quadratic time complexity using non-binary bases, when using int("text"), a system could take 50ms to parse an int string with 100,000 digits and 5s for 1,000,000 digits (float, decimal, int.from_bytes(), and int() for binary bases 2, 4, 8, 16, and 32 are not affected). The highest threat from this vulnerability is to system availability"

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

(тут нельзя не вспомнить цитату Линуса про "security glory hole" - https://lkml.org/lkml/2008/7/15/296)

А какой-то упырь в python взял и закоммитил ограничение на максимальную длину обрабатываемого числа, тем самым, сделав из generic алгоритма непонятное УГ. Ну, и, конечно, сломал каких-то клиентов.

А почему мы не ограничим сортировку? А почему не ограничим любой > O(n), или даже просто > O(1) алгоритм?

Короче.

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

А разработчики, видимо, тоже мотивированы эти "CVE" потом "фиксить", самым диким образом.

Про тормознутую реализацию bigint из python я вообще молчу, зачем они ее тащат с собой, когда есть более продвинутые и доступные реализации?
😁9🐳32👍2
commit -m "better"
У меня тут сегодня замес про Go и разработчиков на нем. Прочтите посты под тегом #школота перед прочтением, это довольно важно. Я там сформулировал следующую мысль - развитие программиста процесс многосторонний, и, что, когда программист вообще научается…
В продолжение темы про #школота

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

В cargo нашли zip bomb(это когда из маленького zip можно получить кучу говна на диске).

Я тут даже особо распинаться не буду, суть вы можете прочитать в сообщениях по тегу.
😁5🍌5🥱2👎1🤔1
Сегодня прямо очень много хороших новостей, я буду их по одной вываливать.

https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/

Вот, например, cloudflare запилила свой nginx.

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

В тексте хорошо рассказано про мою основную причину, почему я когда-то запилил альтернативу nginx(нет, это не мой NIH синдром) - "Some types of functionality are difficult to add".

Под nginx очень сложно писать модули, потому что его API - это или всратая state machine, или ты ждешь, пока у тебя в буфере в памяти образуется все тело запроса, и ты обслуживаешь его целиком.

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

По моим оценкам 12 лет назад, у меня код нужных мне модулей проксирования в корутинной реализации на С++(когда весь state хранится привычным образом, на стеке, и у тебя есть простая линейная модель выполнения и обработки ошибок) был примерно в 10 раз короче по коду, и примерно так же понятнее.

Ну и, конечно, они верно пишут, что такую core технологию лучше иметь свою, чтобы не разговаривать с сумасшедшим апстримом.
👍30🤔1
commit -m "better"
Q: Антон, уже несколько дней как вышел clang15, а ты ничего про это не написал. Даже на opennet уже новость висит!!! https://www.opennet.ru/opennews/art.shtml?num=57739 A: В гробу я видел этот ваш пятнадцатый clang Я этот ваш clang пытаюсь завести еще с rc1…
Очень бы хотел написать, что перешел на llvm15, но пока обновил только clang, потому что libc++ стала шибко умная:

/ix/store/ElvSJxEDJTM00ADM-lib-c-plus-plus-15/include/__algorithm/iterator_operations.h:100:5: error: static assertion failed due to requirement 'is_same<JSC::DFG::UnlinkedStructureStubInfo &, const JSC::DFG::UnlinkedStructureStubInfo &>::value': It looks like your iterator's `iterator_traits<It>::reference` does not match the return type of dereferencing the iterator, i.e., calling `*it`. This is undefined behavior according to [input.iterators] and can lead to dangling reference issues at runtime, so we are flagging this.
static_assert(is_same<__deref_t<_Iter>, typename iterator_traits<__uncvref_t<_Iter> >::reference>::value,

Еще они в этой версии libc++ зачем-то решили подменить заголовок stdatomic.h: https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdatomic.h

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

Поэтому с этим заголовком полный раздрай - где-то он определен в libc, как в freebsd, где-то его предоставляет компилятор, как, например, gcc и clang, а тут, вот, его решили предоставить в libc++.

Очень странное решение, причем, fallback в какой-то другой stdatomic.h делается не всегда - https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdatomic.h#L223

В моем setup этот файл получается, по сути, пустой, что тоже сломало дофига кода.

(я этот файл стер к херам, чтобы можно было двигаться дальше - https://github.com/pg83/ix/blob/main/pkgs/lib/c++/15/ix.sh)

Поэтому у меня пока такой странный кадавр из clang15 + libc++14.

Ничего особо странного в этом нет, многие люди обновляют libc++ и clang без привязки к их общему релизному циклу.

Если подумать, то у меня прямо сейчас в сборке участвуют три версии llvm - 13, 14, 15. Довольно странно, да?

Я это делаю, потому что хочу поддержать не самые свежие версии gcc для bootstrap.

Поэтому, первым делом, я собираю libc++13 + clang14, это самая новая связка, собираемая gcc 7.

А уже ими собираю libc++14 + clang15.

Феншуй бутстрапа требует, чтобы я этим же компилятором собрал точно такую же связку, и уже ее использовал для сборки всего остального, но меня жаба душит.
👍5🍌2
Forwarded from Дидлошная
🔥17👍7😁3🤩1
Forwarded from Daniel Lemire's blog
Science and Technology links (September 16 2022)

Attractive female students get better grades. They lose this benefit when courses move online. A research paper is much more likely to be highly ranked if the author is famous. The USA has many more prisoners than police officers (three prisoners for every police officer), while every other developed country has the reverse ratio. Diluting the blood plasma of older human beings rejuvenate them. Saturated fat, as found in meat and dairy products, is not associated with bad cardiovascular health. In other words, eating butter does not harm your heart. An electric car has reportedly about half the carbon footprint as that of a conventional car.

https://lemire.me/blog/2022/09/17/science-and-technology-links-september-16-2022/
🤯11👍3🤔2🍌1
commit -m "better"
Очень бы хотел написать, что перешел на llvm15, но пока обновил только clang, потому что libc++ стала шибко умная: /ix/store/ElvSJxEDJTM00ADM-lib-c-plus-plus-15/include/__algorithm/iterator_operations.h:100:5: error: static assertion failed due to requirement…
Забавный код в webkit, который перестал собираться в новой версии:

https://github.com/WebKit/WebKit/blob/main/Source/WebKit/Platform/IPC/ArgumentCoders.h#L540

До этого для конкатенации туплов там использовался свой велосипед - https://github.com/WebKit/WebKit/blob/4fb6881d9ccf5c5ee98163978d16d33eb5b57058/Source/WebKit/Platform/IPC/ArgumentCoders.h#L313

fun fact - вот этот вот код на вход получает такие странные типы, что common generic std::tuple_cat не может справиться с конкатенацией(ошибку для желающих разобраться - по запросу), а велосипед - может.

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

Что это за такие хитросооруженные типы, и почему с ними не работает std::tuple_cat - я так и не понял, с ходу, все должно работать. Возможно, баг в libc++.

Иначе, есть два тупла, результат сложения которых определен(его можно получить другим алгоритмом), но std::tuple_cat не справляется с их конкатенацией.
👍6🍌4🔥1
Forwarded from Дидлошная
🔥19😁12🍌2👎1
commit -m "better"
Забавный код в webkit, который перестал собираться в новой версии: https://github.com/WebKit/WebKit/blob/main/Source/WebKit/Platform/IPC/ArgumentCoders.h#L540 До этого для конкатенации туплов там использовался свой велосипед - https://github.com/WebKit/…
А вот еще странность нового clang и libc++, и, заодно, задачка на знание С++(я ответа не знаю, я уже лет 10 не сплю со стандартом под подушкой).

https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L77

В данной строчке кода ScanListData известна, в том смысле, что известен ее layout, но сгенерить конструктор/деструктор по умолчанию невозможно, потому что ScanInfo не определена.

Сборка с новым llvm дает такую ошибку:

.../passport_panel_edit_scans.h:77:41: note: 
in instantiation of member function
'std::optional<Passport::ScanListData>::optional'
requested here
std::optional<ScanListData> &&data = std::nullopt);

(полная ошибка будет в комментарии)

Вот скажите мне - когда нужна проверка того, что у нас есть конструктор/деструктор у этого std::optional?

А если мы не вызываем этот конструктор List()? А если вызываем?

Вообще, мне это кажется деталью реализации std::optional, я могу написать код и так, и так. А как регламентирует стандарт?
🍌2🔥1
Forwarded from Дидлошная
😁11🔥5👍4🤮1🐳1🍌1🍾1😈1
commit -m "better"
https://www.opennet.ru/opennews/art.shtml?num=56086 Epic win - поддержка протокола mongodb over postgresql. Делать key-value over sql, да еще с более худшими, чем у оригинальной mongodb(хотя куда уж хуже?), гарантиями... Кстати, напомню, что jepsen mongodb…
(дисклеймер: мнение автора этого блога никак не соотносится с мнением компании, в которой он работает)

Тут вот вышел классный фильм, https://www.kinopoisk.ru/film/5093991/

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

Поэтому я просто напишу про 2 ошибки, которые, КМК, были допущены при съемках этого фильма:

* Для того, чтобы говорить, что есть проблема гендерного дисбаланса, надо сначала предъявить какую-то (несмещенную) оценку того, сколько женщин вообще должно быть в IT. Это не сделано. Пока это не сделано, это обсуждение имеет мало смысла. Вот 20%, про которые идет речь в фильме - это мало или много? А исходя из чего вы делаете оценку, что мало, а что много? Статья, на которую я ссылаюсь, вроде, имеет наглость утверждать, что меньше 50%. Пускай авторы этого фильма, и его героини, напишут статью про то, что оно > 20%, с удовольствием ее почитаю.

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

Поэтому этот фильм эмоциональный, и претендовать на то, что он сколько-нибудь разумным образом описывает окружающую действительность, он не может.
👍16💯8🔥3👎2🍓2🤡1🐳1