The term "work-life balance" is wrong since it implies that not having a job is unbalanced.
💯17🤔9👎2
Forwarded from Платиновые мысли гомофобов | ПМГ
В будущем если вы спросите у скрепофреника - где положительные эффекты на демографию запрета на пропаганду ЛГБТ (которому уже 12 лет) - он вам ответит, что положительный эффект - это штрафы для активистов.
Подобное заявление - это настолько же убого, как от идейного коммуниста на вопрос об успехах коммунистических режимов - услышать "ну вот расстреляли n-ное число диссидентов и контрреволюционеров"
За этими запретами никогда не стояло ничего более ненависти тех, кто их поддерживал. Ничего созидательного в них не было. Никому они не помогли. Поэтому эти люди сгинут в истории, не добившись никаких результатов.
Подобное заявление - это настолько же убого, как от идейного коммуниста на вопрос об успехах коммунистических режимов - услышать "ну вот расстреляли n-ное число диссидентов и контрреволюционеров"
За этими запретами никогда не стояло ничего более ненависти тех, кто их поддерживал. Ничего созидательного в них не было. Никому они не помогли. Поэтому эти люди сгинут в истории, не добившись никаких результатов.
👍20🤡7💯3💩2🤔1😢1
Forwarded from Дневник пидора-провинциала | Ярослав Распутин
Вообще охотиться за книгами, которые давно не продают, и издательством, которое уже не существует, это какой-то уникальный просто жест, даже нацисты сжигали книги, которые существовали на тот момент, а эти вот бегают за теми, от которых уже ничего не осталось. Это какое, девятое дело об «экстремизме», если подтвердится? Я уже сбился со счёта. Я никогда не сомневаюсь в завтрашнем дне — завтра будет новое дно, и я прогнозирую, что в какой-то момент ЛВПГ признают экстремистской литературой, потому что стесняться уже нечего.
#гейновости #бомбита
#гейновости #бомбита
Telegram
Парни+
📚 СМИ: Московские силовики задержали сотрудников ЭКСМО по статье за ЛГБТ-экстремизм
В Москве силовики устроили серию облав на сотрудников издательства ЭКСМО, сообщает телеграм-канал ВЧК-ОГПУ со ссылкой на источник. По информации ТАСС, задержан директор по…
В Москве силовики устроили серию облав на сотрудников издательства ЭКСМО, сообщает телеграм-канал ВЧК-ОГПУ со ссылкой на источник. По информации ТАСС, задержан директор по…
🤔9💩2😁1🤡1
Блог*
А сегодня утром она по собственному желанию заплела мне косичку
Внезапно это случилось снова с другой женщиной
🤔8🥴5🤡1🤨1
Forwarded from Experimental chill
Size based vector
https://discourse.llvm.org/t/adding-a-size-based-vector-to-libc-s-unstable-abi/86306
Мы тут в Гугле экспериментировали с тем как репрезентовать вектор. Существует два способа:
1. Указатель на начало, конец и указатель на конец вместимости
2. Или указатель на начало, размер и вместимость
Оба варианта имеют свои особенности и слабые места. Первый вариант плох тем, что когда вы хотите посчитать size(), то вы вычитаете два указателя: end - begin. Вычитание указателей в численном представлении эквивалентно формуле (end_as_num - begin_as_num) / sizeof(T), где T -- тип вектора. Вот это деление на константу порой выбешивает, например, когда sizeof(T) не является степенью двойки. Компилятору приходится это деление переводить в умножение и теперь когда вы вызываете size(), то у вас откуда-то страшные конструкции вида https://godbolt.org/z/zKGz7nEE6
Но первый вариант неплох, когда вы итерируетесь и надо просто сравнивать с концом. Почему? Во втором варианте вам надо при вызове .end() загружать два регистра -- начало и размер, чтобы сложить. В итоге у вас баланс между двумя опциями
.size() выливается в умножение при sizeof(T) не степень двойки
.end() загружает два регистра
Остальные операции чуть чуть поменяются, но в основном размен происходит у этих двух.
Оказалось, что .end() чаще вызывается один раз, а .size() намного чаще в том числе и внутри циклов, потому что... Ну потому что программистам удобнее работать с числами, а не указателями. Или по каким-то ещё причинам.
В итоге мы увидели улучшение перфа всего прода на 0.12% с особенно важными серверами с исправлениями на 0.5-0.6%, о чем и поделились в discourse.llvm. Понятное дело, что кто-то слишком сильно пользовался репрезентацией вектора, но мы всех их починили и выкатили. Теперь хотим выкатить и в unstable ABI в libcxx.
Почитайте ссылку, там больше всяких анализов, в том числе и размер кодгена, и всякой ещё статистики.
https://discourse.llvm.org/t/adding-a-size-based-vector-to-libc-s-unstable-abi/86306
Мы тут в Гугле экспериментировали с тем как репрезентовать вектор. Существует два способа:
1. Указатель на начало, конец и указатель на конец вместимости
2. Или указатель на начало, размер и вместимость
Оба варианта имеют свои особенности и слабые места. Первый вариант плох тем, что когда вы хотите посчитать size(), то вы вычитаете два указателя: end - begin. Вычитание указателей в численном представлении эквивалентно формуле (end_as_num - begin_as_num) / sizeof(T), где T -- тип вектора. Вот это деление на константу порой выбешивает, например, когда sizeof(T) не является степенью двойки. Компилятору приходится это деление переводить в умножение и теперь когда вы вызываете size(), то у вас откуда-то страшные конструкции вида https://godbolt.org/z/zKGz7nEE6
Но первый вариант неплох, когда вы итерируетесь и надо просто сравнивать с концом. Почему? Во втором варианте вам надо при вызове .end() загружать два регистра -- начало и размер, чтобы сложить. В итоге у вас баланс между двумя опциями
.size() выливается в умножение при sizeof(T) не степень двойки
.end() загружает два регистра
Остальные операции чуть чуть поменяются, но в основном размен происходит у этих двух.
Оказалось, что .end() чаще вызывается один раз, а .size() намного чаще в том числе и внутри циклов, потому что... Ну потому что программистам удобнее работать с числами, а не указателями. Или по каким-то ещё причинам.
В итоге мы увидели улучшение перфа всего прода на 0.12% с особенно важными серверами с исправлениями на 0.5-0.6%, о чем и поделились в discourse.llvm. Понятное дело, что кто-то слишком сильно пользовался репрезентацией вектора, но мы всех их починили и выкатили. Теперь хотим выкатить и в unstable ABI в libcxx.
Почитайте ссылку, там больше всяких анализов, в том числе и размер кодгена, и всякой ещё статистики.
LLVM Discussion Forums
Adding a size-based vector to libc++’s unstable ABI
Adding a size-based vector to libc++’s unstable ABI tl;dr We can significantly improve the runtime performance of std::vector by changing its representation from three pointers to one pointer and two integers. This document explains the details of this change…
🔥14
Forwarded from Luntry — безопасность контейнеров
🚨 Случайный ханипот: как мы поймали криптомайнер в контейнере и что из этого вышло
Один демо-стенд, одна замеченная аномальная активность, расследование — и вот он, криптомайнер Redtail, скрывавшийся в контейнере. Как мы его нашли? Конечно, с помощью Luntry.
В новом исследовании в блоге разобрали, как майнеру удавалось прятаться, как мы его обезвредили и что нужно делать, чтобы такой криптомайнер не завелся в вашем кластере.
🔗 Читать статью
P.S. Если думаете, что ваш кластер чист — возможно, вы просто ещё не нашли своего Redtail 😉
#DevSecOps #Kubernetes #Security #Luntry
Один демо-стенд, одна замеченная аномальная активность, расследование — и вот он, криптомайнер Redtail, скрывавшийся в контейнере. Как мы его нашли? Конечно, с помощью Luntry.
В новом исследовании в блоге разобрали, как майнеру удавалось прятаться, как мы его обезвредили и что нужно делать, чтобы такой криптомайнер не завелся в вашем кластере.
🔗 Читать статью
P.S. Если думаете, что ваш кластер чист — возможно, вы просто ещё не нашли своего Redtail 😉
#DevSecOps #Kubernetes #Security #Luntry
🔥3👍1🤔1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.87.0! Как всегда, тут только выдержки, всё остальное — в полных заметках о релизе.
▪️Не фича, но: прошло ровно 10 лет с момента релиза Rust 1.0 🎉
▪️В качестве продолжения темы из предыдущего релиза очень много интринсиков из
▪️Точное указывание захватываемых обобщённых параметров (
▪️При написании impl-а трейта на
▪️Однажды в компиляторе был баг, из-за которого
▪️Унарные операторы теперь корректно парсятся при применении к диапазонам с открытой нижней границей. Как следствие, эта синтаксическая конструкция теперь корректно матчится с макро-фрагментом expr в декларативных макросах, что может привести к тому, что некоторые макросы теперь могут раскрываться иначе.
▪️В стандартную библиотеку добавили поддержку каналов (в смысле pipes). Из неприятного: так как это тонкая обёртка над примитивами OS, указать ёмкость этих каналов нельзя.
▪️Для примитивных чисел добавили методы unbounded_shl и unbounded_shr. Обычные битовые сдвиги сдвигают числа не на указанное число бит, а на число бит, равное остатку от деления указанного числа на битовую ширину. Это хорошо ложится на команды процессора, но это — крайне неполезная для программиста семантика.
▪️У знаковых чисел добавили метод cast_unsigned, а у беззнаковых — cast_signed (включая
▪️Ещё беззнаковым числам добавили метод is_multiple_of. Казалось бы, зачем?
▪️Из несколько более значимого: стабилизировали
▪️Также коллекцию методов
▪️
▪️Целую пачку API стабилизировали для использования в const-контекстах. Наиболее значимым, пожалуй, является
▪️Вывод
▪️Парочка изменений, связанных с fmt-макросами. Во-первых, в одной из версий из-за изменений внутреннего представления стало возможным использовать
Вышла версия Rust 1.87.0! Как всегда, тут только выдержки, всё остальное — в полных заметках о релизе.
▪️Не фича, но: прошло ровно 10 лет с момента релиза Rust 1.0 🎉
▪️В качестве продолжения темы из предыдущего релиза очень много интринсиков из
std::arch
теперь можно вызывать без unsafe-блоков в функциях, на которых есть #[target_feature]
, включающая набор инструкций с этими интринсиками.▪️Точное указывание захватываемых обобщённых параметров (
use<...>
) теперь работает и для impl Trait
в методах трейтов. К сожалению, опускать обобщённые типовые и const-овые параметры всё ещё нельзя.▪️При написании impl-а трейта на
dyn Trait
теперь необязательно реализовывать методы с Self: Sized, так как их всё равно нельзя вызвать.▪️Однажды в компиляторе был баг, из-за которого
dyn A + B
и dyn B + A
считались разными типами и, как следствие, для них можно было написать две разные реализации одного трейта. Баг поправили, но, так как это номинально слом обратной совместимости, оставили это предупреждением. С версии 1.87.0 это теперь ошибка компиляции.▪️Унарные операторы теперь корректно парсятся при применении к диапазонам с открытой нижней границей. Как следствие, эта синтаксическая конструкция теперь корректно матчится с макро-фрагментом expr в декларативных макросах, что может привести к тому, что некоторые макросы теперь могут раскрываться иначе.
▪️В стандартную библиотеку добавили поддержку каналов (в смысле pipes). Из неприятного: так как это тонкая обёртка над примитивами OS, указать ёмкость этих каналов нельзя.
▪️Для примитивных чисел добавили методы unbounded_shl и unbounded_shr. Обычные битовые сдвиги сдвигают числа не на указанное число бит, а на число бит, равное остатку от деления указанного числа на битовую ширину. Это хорошо ложится на команды процессора, но это — крайне неполезная для программиста семантика.
unbounded_*
методы лишены этой проблемы: при сдвиге на значение, большее битовой ширины, методы возвращают 0 для сдвига влево, 0 для сдвига вправо у беззнаковых чисел и размноженный знаковый бит для знаковых чисел (то есть 0 для положительных и -1 для отрицательных).▪️У знаковых чисел добавили метод cast_unsigned, а у беззнаковых — cast_signed (включая
NonZero
). Да, это полностью аналогично использованию кастов через as
, но эти методы позволяют убедиться, что битовая ширина не меняется.▪️Ещё беззнаковым числам добавили метод is_multiple_of. Казалось бы, зачем?
This function is equivalent to self % rhs == 0, except that it will not panic for rhs == 0. Instead, 0.is_multiple_of(0) == true, and for any non-zero n, n.is_multiple_of(0) == false.
▪️Из несколько более значимого: стабилизировали
extract_if
для вектора и для связного списка. Оба итератора извлекают из коллекции элементы, соответствующие предикату, и оба позволяют модифицировать переданные элементы. Версия для вектора ещё и позволяет указать диапазон, на котором применяется фильтрация.▪️Также коллекцию методов
take_*
на слайсах для извлечения указанных частей (со странными на первый взгляд типами self
: &mut &{,mut}[T]
) стабилизировали с именами split_off_*▪️
OsStr{, ing}
теперь имеют методы display, которые возвращают реализующую Display
обёртку. По очевидным причинам обёртка может при выводе терять данные из-за невозможности представить некоторые элементы в UTF-8.▪️Целую пачку API стабилизировали для использования в const-контекстах. Наиболее значимым, пожалуй, является
<[T]>::copy_from_slice
.▪️Вывод
Debug
для сырых указателей теперь включает не только адрес, но и метаданные, при наличии.▪️Парочка изменений, связанных с fmt-макросами. Во-первых, в одной из версий из-за изменений внутреннего представления стало возможным использовать
format_args!
(в том числе не напрямую, а через panic!
) вида format_args!("{}", "a")
в const-контекстах. Эта было ненамеренно, поэтому в 1.87.0 эту возможность прикрыли. Во-вторых, значения для указания максимальной ширины форматирования и максимальной точности теперь ограничены 16 битами. Звучит смешно, но некоторые либы это сломало.👍11🥰3🥴1