commit -m "better"
3.24K subscribers
1.03K photos
149 videos
3 files
2.39K links
just random thoughts
Download Telegram
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
commit -m "better"
(дисклеймер: мнение автора этого блога никак не соотносится с мнением компании, в которой он работает) Тут вот вышел классный фильм, https://www.kinopoisk.ru/film/5093991/ Это уже третья моя попытка написать про этот фильм, предыдущие две я решил никому…
А все же читают новости, и ссылок давать не надо?

Я так понимаю, что проблема женщин в IT скоро решится сама собой - мужики пойдут на фронт, работать останутся женщины, и нет проблем с гендерным неравенством, ха-ха.
😢15🔥12🍾6👎5😱3👍2💩2🌚1🍌1
commit -m "better"
А вот еще странность нового clang и libc++, и, заодно, задачка на знание С++(я ответа не знаю, я уже лет 10 не сплю со стандартом под подушкой). https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/passport/passport_panel_edit_scans.h#L77…
В clang15 появилось некоторое количество реально полезных ошибок:

Making all in doc
CC src/tramp.lo
../src/tramp.c:262:22: error:
call to undeclared function
'open_temp_exec_file';
ISO C99 and later do not support
implicit function declarations
[-Wimplicit-function-declaration]
tramp_globals.fd = open_temp_exec_file ();
^

Этот код "работает" по чистой случайности, благодаря implicit int, и implicit function declaration.

Ну, вот так - функцию не объявили, но позвать ее можно.

Особенно много такого в gnu software, я так понимаю, благодаря #gnulib, и тому, как они переопределяют функции. Warning про implicit int мне пришлось целиком отключить, потому что с ним ./configure скрипты не работали от слова совсем.

https://github.com/pg83/ix/blob/main/pkgs/bin/clang/lib/cc/ix.sh#L11
👍6👎2🔥2🍌1
"у нас яндекс не открывается, вызовите программиста"

Во мне умер НОК!

(потому что его догнал и убил настоящий, хороший, НОК)
🔥10😁3🍌32👍2💩2🌚1
commit -m "better"
А все же читают новости, и ссылок давать не надо? Я так понимаю, что проблема женщин в IT скоро решится сама собой - мужики пойдут на фронт, работать останутся женщины, и нет проблем с гендерным неравенством, ха-ха.
Сегодня этот текст звучит совсем по другому, да?
А, тем временем, 22 сентября, каналу ровно год.
Писать про то, что сделано, и будет сделано, совсем не хочется.
Наверное, стоит сказать, что я почти "добил" KPI в 1000 подписчиков, и попробую писать и дальше.
Жизнь (пока) продолжается.
🎉225🐳5❤‍🔥3👍1
Forwarded from Дидлошная
😁12🍌3🤩2
😁20🔥5🍌2
У меня для вас сегодня лингвистическое исследование, благодаря одному из наших дорогих радиослушателей!

Коллега решил выяснить, как будет фраза "хуяк-хуяк, и в production" звучать на английском.

Выяснилось, что самое близкое, что можно придумать - это фраза "ping clang", фактически, калька с "дзынь-дзынь", звук, который издают молоточки в кузнице. https://www.merriam-webster.com/thesaurus/clang

Соответственно:

* Фраза целиком - "ping clang and to production", пользуйтесь

* clang вполне можно перевести как "хуяк"

Живите тепрь с этим знанием :D
😁28🔥3👍2🍌1
Флеймообразующая (надеюсь) тема сегодня.

Вам не кажется, что ООП, по крайней мере в формулировке "инкапсуляция, наследование, полиморфизм" - в современном мире скорее мертво, чем живо?

* самое общее - все эти 3 кита можно рассматривать как оптимизации некоторых частных случаев замыканий и lambda. Я не хочу глубоко влезать в эту тему, но для понимания вполне достаточно вспомнить, как устроены объектные модели lua, javascript, lisp(?), и про хак dict["xxx"] == dict.xxx

* в целом, люди предпочитают мономорфизацию и интерфейсы, нежели полиморфизм в стиле C++. Интерфейсы, как нас учит Go, это не полиморфизм(хотя технически может быть сделано и через него).

* наследование не от интерфейса - довольно странная сама по себе вещь, единственное полезное известное мне применение - CRTP/mixin, но, опять же, это довольно нишевая техника.
👍20👎3🔥2🍌2🤔1
🤣17😱7😢7😁6🔥5🌚3👍2👎2🕊1🍌1