Блог*
#prog #rust #article Очень хорошая демонстрация пользы от type-level наворотов. The Rust language offers a promising approach to safe systems programming based on the principle of aliasing XOR mutability: a value may be either aliased or mutable, but not…
#prog #rust #amazingopensource
Один человек попытался реализовать некоторые из стандартных коллекций при помощи GhostCell. Получилось вроде даже неплохо.
github.com/matthieu-m/ghost-collections
Один человек попытался реализовать некоторые из стандартных коллекций при помощи GhostCell. Получилось вроде даже неплохо.
github.com/matthieu-m/ghost-collections
Forwarded from Generative Anton
Недавно некоторые СМИ писали и перевсполошились, что Apple теперь будет искать снимки и видео с насилием над детьми автоматически и сообщать куда надо. Но нас интересует не эта этически-правовая сторона вопроса, а техническая реализация.
Чтобы снимки никуда не отправлялись (представьте заголовки “Apple решила собрать самую большую библиотеку медиа насилия над детьми”), это будет происходить на устройстве. Для каждой фотографии будет считаться NeuralHash. И это такой вот алгоритм (Neural как бы уже говорит про ML), который умеет не обращать внимания на кропы/шумы/вотермарки и возвращать одинаковый хеш для двух одинаковых по контенту фотографий. Работает он на удивление хорошо. В идеале: помечаешь один раз непотребство, а потом оно само начинает мониториться по хешу. Но есть проблема.
Hash в названии алгоритма отвечает, как можно догадаться, за собственно хеш изображения/контента на фотографии/называйте как хотите. Мораль истории в том, что одна из самых прекрасных вещей в хеш-функциях (даже если они Neural) — коллизии.
Умные люди поковырялись и выяснили, что оказывается для NeuralHash существует два типа коллизий: естественные и искусственные.
С искусственными все просто: есть картинка и мы на нее таким образом накладываем шум, чтобы ее хеш был равен хешу необходимой картинки. В общем это все очень старо и применялось еще в безопасности, когда зараженные файлы пытались прикинуться здоровыми, добавляя себе такие байты, чтобы хеш был равен исходному, и антивирус считал, что с файлом все хорошо. Ну и все современные Adversarial Attacks создаются таким же механизмом.
Другое дело естественные коллизии. Только в ImageNet’e их нашлось аж 2 пары: топор-нематода и гвоздь-горная лыжа. Есть даже репозиторий с обновляемым списком найденных коллизий.
Интересно, когда уже Adversarial Attacks перестанут быть маргинальными игрушками (прости, Свят) и станут серьезной дыркой в безопасности крупных корпораций. Еще интереснее, как с этим будут бороться, потому что сейчас собираются затыкать человеком с другой стороны, который глазками отсмотрит всю непотребщину, что вызывает такие же этические вопросы, как и модераторы Facebook, страдающие от депрессии и шутящие над пришедшим на модерацию суицидом.
Чтобы снимки никуда не отправлялись (представьте заголовки “Apple решила собрать самую большую библиотеку медиа насилия над детьми”), это будет происходить на устройстве. Для каждой фотографии будет считаться NeuralHash. И это такой вот алгоритм (Neural как бы уже говорит про ML), который умеет не обращать внимания на кропы/шумы/вотермарки и возвращать одинаковый хеш для двух одинаковых по контенту фотографий. Работает он на удивление хорошо. В идеале: помечаешь один раз непотребство, а потом оно само начинает мониториться по хешу. Но есть проблема.
Hash в названии алгоритма отвечает, как можно догадаться, за собственно хеш изображения/контента на фотографии/называйте как хотите. Мораль истории в том, что одна из самых прекрасных вещей в хеш-функциях (даже если они Neural) — коллизии.
Умные люди поковырялись и выяснили, что оказывается для NeuralHash существует два типа коллизий: естественные и искусственные.
С искусственными все просто: есть картинка и мы на нее таким образом накладываем шум, чтобы ее хеш был равен хешу необходимой картинки. В общем это все очень старо и применялось еще в безопасности, когда зараженные файлы пытались прикинуться здоровыми, добавляя себе такие байты, чтобы хеш был равен исходному, и антивирус считал, что с файлом все хорошо. Ну и все современные Adversarial Attacks создаются таким же механизмом.
Другое дело естественные коллизии. Только в ImageNet’e их нашлось аж 2 пары: топор-нематода и гвоздь-горная лыжа. Есть даже репозиторий с обновляемым списком найденных коллизий.
Интересно, когда уже Adversarial Attacks перестанут быть маргинальными игрушками (прости, Свят) и станут серьезной дыркой в безопасности крупных корпораций. Еще интереснее, как с этим будут бороться, потому что сейчас собираются затыкать человеком с другой стороны, который глазками отсмотрит всю непотребщину, что вызывает такие же этические вопросы, как и модераторы Facebook, страдающие от депрессии и шутящие над пришедшим на модерацию суицидом.
Блог*
#video (видео ли?) #music Bad apple, но с картинкой, составленной из субтитров. (thanks @zoraxblog)
YouTube
Bad Apple!! but it's 4800 moon emojis
Because ASCII-art is not fun anymore.
Source code (Processing 3):
https://github.com/pavlus/bad_apple_moon_emoji
#badapple #processing3 #pcd2021share #PCD2021
Source code (Processing 3):
https://github.com/pavlus/bad_apple_moon_emoji
#badapple #processing3 #pcd2021share #PCD2021
xxx: Как приятно, когда пайплайны проходят 🙂
yyy: Если ваши пайплайны проходят, это значит что мало тестов написано 8))
#трудовыебудни
yyy: Если ваши пайплайны проходят, это значит что мало тестов написано 8))
#трудовыебудни
Forwarded from dev optozorax
Видео про самые дикие числа в математике. #repost
Если вы считаете что преисполнились в своём познании зная про i²=-1 и ε²=0 (дуальные числа), то приготовьте уран.
В данном видео показывается простая игра, в которой есть два игрока и граф, прикреплённый к полу с красными и синими палками. Суть игры в том чтобы последовательно ходить и отрезать ветки своего цвета. Выигрывает тот кто сделал ход последним. От графа зависит то кто гарантированно выиграет если будет следовать оптимальной стратегии. Поэтому математики захотели описать граф числом — положительные обозначают выигрыш синего игрока, а отрицательные — выигрыш красного. Определение величины числа производится через добавление другого графа сбоку, который может сбалансировать игру до невыигрышного состояния. Сначала мы приходим к целым числам: положительным, отрицательным и ноль. Затем приходим к дробям двойки. Затем добавляется зелёная палка, которую могут рубить оба и начинается жесть: появляются очень странные числа, которые меньше любого обычного числа, которые называют
Знаете, одно дело выдумывать числа из воздуха, а другое — просто брать их из игры, то есть из своего рода реальности. И всё это так красиво выглядит, что я испытал математический оргазм во время просмотра. Теперь я хочу купить 1000-страничную книгу из которой взята эта тема и прочитать её. Кстати, одним из авторов этой книги является Джон Конвей.
Видео длится 57 минут, сделано через рисовалку от 3blue1brown и (я надеюсь) обязательно займёт призовое место в SoME1. Автор этого видео очень старался, делал видео суммарно 200 часов, и это его первый опыт. Но у видео на данный момент всего 800 просмотров, и оно не очень хайпит, поэтому СМОТРИТЕ, ЛАЙКАЙТЕ, РЕПОСТИТЕ ЧТО ЕСТЬ СИЛ.
Если вы считаете что преисполнились в своём познании зная про i²=-1 и ε²=0 (дуальные числа), то приготовьте уран.
В данном видео показывается простая игра, в которой есть два игрока и граф, прикреплённый к полу с красными и синими палками. Суть игры в том чтобы последовательно ходить и отрезать ветки своего цвета. Выигрывает тот кто сделал ход последним. От графа зависит то кто гарантированно выиграет если будет следовать оптимальной стратегии. Поэтому математики захотели описать граф числом — положительные обозначают выигрыш синего игрока, а отрицательные — выигрыш красного. Определение величины числа производится через добавление другого графа сбоку, который может сбалансировать игру до невыигрышного состояния. Сначала мы приходим к целым числам: положительным, отрицательным и ноль. Затем приходим к дробям двойки. Затем добавляется зелёная палка, которую могут рубить оба и начинается жесть: появляются очень странные числа, которые меньше любого обычного числа, которые называют
*
(star), затем появляются числа ↑
(up) и ↓
(down), которые не равны *
. Ну и потом математики упарываются по-полной и в попытках описать самые разные графы приходят к сюрреалистичным видам чисел: бесконечностям, самому маленькому возможному числу tiny
и так далее. Самых различных чисел настолько много что математики уже стали рисовать зоопарки с животными и географические карты чисел. И в отличие от комплексных чисел, здесь всё _упорядочено_, то есть любое число можно сравнить с другим и сказать кто из них больше.Знаете, одно дело выдумывать числа из воздуха, а другое — просто брать их из игры, то есть из своего рода реальности. И всё это так красиво выглядит, что я испытал математический оргазм во время просмотра. Теперь я хочу купить 1000-страничную книгу из которой взята эта тема и прочитать её. Кстати, одним из авторов этой книги является Джон Конвей.
Видео длится 57 минут, сделано через рисовалку от 3blue1brown и (я надеюсь) обязательно займёт призовое место в SoME1. Автор этого видео очень старался, делал видео суммарно 200 часов, и это его первый опыт. Но у видео на данный момент всего 800 просмотров, и оно не очень хайпит, поэтому СМОТРИТЕ, ЛАЙКАЙТЕ, РЕПОСТИТЕ ЧТО ЕСТЬ СИЛ.
YouTube
HACKENBUSH: a window to a new world of math
A playful venture into the vast and mysterious forests of combinatorial game theory.
This one simple game will change the way you look at numbers forever! Hackenbush is easy to pick up, but exploring its strategy leads us down a fantastical mathematical…
This one simple game will change the way you look at numbers forever! Hackenbush is easy to pick up, but exploring its strategy leads us down a fantastical mathematical…
👍1
Forwarded from partially unsupervised
Today I learned: в
Очень удобно, если у вас бывает своеобразный код, где логи - это единственный side effect. С другой стороны, такой код может быть и звоночком - возможно, с дизайном что-то не так.
pytest
можно легко тестировать логирование. Не нужно самому возиться с моками для логгера, все уже готово - достаточно использовать дефолтную фикстуру caplog (пример использования для ленивых).Очень удобно, если у вас бывает своеобразный код, где логи - это единственный side effect. С другой стороны, такой код может быть и звоночком - возможно, с дизайном что-то не так.
Software Gems
5 Advanced Pytest Tricks
We write tests because they help us build confidence in our code. They also help us write clean and maintainable code. Yet, writing tests requires some effort. Fortunately, there are libraries we can …
#prog #c #rust #successstory
И, кстати, пример, где может пригодиться константный
t.iss.one/psauxww/543
И, кстати, пример, где может пригодиться константный
Vec::new()
.t.iss.one/psauxww/543
Telegram
Segment@tion fault
Злые языки говорят, что Rust медленнее чем С - С же почти ассемблер, а Rust какие-то миллениалы придумали.
Хорошо. Вот решаю (пока простую) задачу. Нужно унифицированное SDK для драйверов системы. В данном примере каждый драйвер должен иметь три функции:…
Хорошо. Вот решаю (пока простую) задачу. Нужно унифицированное SDK для драйверов системы. В данном примере каждый драйвер должен иметь три функции:…
Forwarded from Linker Unsafe
This media is not supported in your browser
VIEW IN TELEGRAM
Пора пить чай 🍮
Forwarded from мне не нравится реальность
Итак, я всё-таки сделал себе блог! Теперь он доступен по адресу ihatereality.space.
И там уже есть моя статья “Why null sucks, even if it's checked”!
Блог работает на Zola и GH pages. Все сорцы открытые, если вдруг кто-то хочет посмотреть/стырить мои настройки =)
И там уже есть моя статья “Why null sucks, even if it's checked”!
Блог работает на Zola и GH pages. Все сорцы открытые, если вдруг кто-то хочет посмотреть/стырить мои настройки =)
#prog #rust
Rust и Вафель не перестают меня удивлять.
В Rust есть паттерны. Они есть (в том числе) для массивов и слайсов. Если у нас есть массив на пять элементов, то мы можем переместить из него первый и последний элементы вот так:
Очевидно, имя, привязываемое к
Вот тебе и арифметика на массивах!
(thanks @wafflelapkin)
Rust и Вафель не перестают меня удивлять.
В Rust есть паттерны. Они есть (в том числе) для массивов и слайсов. Если у нас есть массив на пять элементов, то мы можем переместить из него первый и последний элементы вот так:
let [first, _, _, _, last] = arr5;
В Rust также есть паттерны для слайсов, которые позволяют матчиться по последовательностям произвольной длины. Характерной их особенностью является возможность использовать паттерн ..
для обозначения "все оставшиеся элементы слайса". Выглядит это примерно так:fn trim_ends<T>(arr: &[T]) -> Option<&[T]> {
match arr {
[_, rest @ .., _] => Some(rest),
_ => None,
}
}
Очевидно, имя, привязываемое к
..
внутри паттерна слайса, имеет тип &[T]
. Однако ..
можно использовать и для паттернов массивов! В этом случае имя, привязываемое к этому паттерну, будет иметь тип массива, содержащего все остальные элементы:struct Foo;
fn main() {
let [_, rest @ .., _] = [Foo, Foo, Foo, Foo];
let _: [Foo; 2] = rest; // тайпчекается
}
Вот тебе и арифметика на массивах!
(thanks @wafflelapkin)
Forwarded from мне не нравится реальность
Хотите быстро инициализировать переменные в Rust? Просто используйте @!
let a @ b @ c @ d @ e = 0;Это реально работает.
> уезжаю на работу слишком рано, чтобы забрать доставку из пункта выдачи
> приезжаю с работы слишком поздно, чтобы забрать доставку из пункта выдачи
😒
> приезжаю с работы слишком поздно, чтобы забрать доставку из пункта выдачи
😒