Forwarded from Neural Machine
После того, как следующие времена наступят, вы увидите, что все было не так плохо.
😭18💯3😱1🌚1
#math #article
Breaking CityHash64, MurmurHash2/3, wyhash, and more...
<...>
As a teaser, this article explains how you can generate strings such as these, thousands per second:
I also show how you can create some really funky pairs of strings that can be concatenated arbitrarily such that when concatenating k strings together any of the 2^k combinations all have the same hash output, regardless of the seed used for the hash function:
(thanks @daily_ponv)
Breaking CityHash64, MurmurHash2/3, wyhash, and more...
<...>
As a teaser, this article explains how you can generate strings such as these, thousands per second:
cityhash64("orlp-cityhash64-D-:K5yx*zkgaaaaa") == 1337
murmurhash2("orlp-murmurhash64-bkiaaa&JInaNcZ") == 1337
murmurhash3("orlp-murmurhash3_x86_32-haaaPa*+") == 1337
farmhash64("orlp-farmhash64-/v^CqdPvziuheaaa") == 1337
I also show how you can create some really funky pairs of strings that can be concatenated arbitrarily such that when concatenating k strings together any of the 2^k combinations all have the same hash output, regardless of the seed used for the hash function:
a = "xx0rlpx!xxsXъВ"
b = "xxsXъВxx0rlpx!"
murmurhash2(a + a, seed) == murmurhash2(a + b, seed)
murmurhash2(a + a, seed) == murmurhash2(b + a, seed)
murmurhash2(a + a, seed) == murmurhash2(b + b, seed)
a = "!&orlpՓ"
b = "yǏglp$X"
murmurhash3(a + a, seed) == murmurhash3(a + b, seed)
murmurhash3(a + a, seed) == murmurhash3(b + a, seed)
murmurhash3(a + a, seed) == murmurhash3(b + b, seed)
(thanks @daily_ponv)
🤔7🔥4👎1
Forwarded from Хреногубка
депутатики госдумы у нас, конечно, охуевшие в край. по другому и не сказать. ильтяков просто конченый.
🤡19🖕10😁4💩4🤬2🍌2🙏1
Блог*
Зачем быть картошкой?
Технологический болт Генона и commit -m "better": рекомендуют канал про IT
Канал про IT:
Канал про IT:
❤13🤡7😁4👎2💯1
#prog #amazingopensource
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
GitHub
GitHub - phiresky/ripgrep-all: rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. - phiresky/ripgrep-all
👍19🥰4👌2
Forwarded from Авва
McMaster-Carr - американская компания, которая продает
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.
https://www.mcmaster.com/
Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:
https://www.youtube.com/watch?v=-Ln-8QM8KhQ
При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).
Много респекта.
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.
https://www.mcmaster.com/
Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:
https://www.youtube.com/watch?v=-Ln-8QM8KhQ
При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).
Много респекта.
Mcmaster
McMaster-Carr
McMaster-Carr is the complete source for your plant with over 700,000 products. 98% of products ordered ship from stock and deliver same or next day.
🔥25👍6🤡2
Forwarded from лингвист реалист
Армянская бабушка на улице отругала меня по-армянски за серёжку в ухе. Мол, ай-яй-яй, в наше время такого ужаса не было.
Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...
Какая-то очень сложная схема сегрегации 😅
Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...
Какая-то очень сложная схема сегрегации 😅
❤16🫡14😁11💯3🤷3
Forwarded from Love. Death. Transformers.
Раньше чтобы тебя не детектили системы как человека надо было носить одежду как справа. Теперь достаточно одежды как слева.
Я напомню что среди DSов есть секта:
ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
Я напомню что среди DSов есть секта:
ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
🌚18😁8🤣3
#prog #rust #rustreleasenotes
Вышла версия Rust 1.83.0! Как всегда, тут только избранные части, а всё остальное в детальных заметках.
▪️В const-контекстах теперь можно использовать
Написание const-кода серьёзно упростилось. Само итоговое значение константы, впрочем, не может быть изменяемой (в том числе через внутреннюю изменяемость) ссылкой.
Также итоговое значение константы теперь может содержать
По понятным причинам итоговое значение константы не может содержать изменяемую (в том числе через внутреннюю изменяемость) ссылку на
▪️Как прямое следствие предыдущего пункта — кучу функций можно теперь использовать в const-контексте, включая множество операций над сырыми указателями (в том числе
▪️Также стабилизировали кучу новых вариантов io::ErrorKind. Забавный факт: эти варианты были и раньше и использовались в std, и в теории по ним можно было матчиться, используя реализацию
▪️Ещё в число стабилизированных API вошли
▪️Одновременные атомарные и неатомарные доступы на чтение из одной локации в памяти одного размера теперь не считаются гонкой данных и потому не являются UB (в C++ — является, поскольку атомарные доступы в C++ происходят через создание atomic_ref, абстрактная машина C++ оперирует типизированной памятью).
▪️Предыдущие версии языка ошибочно считали
следующая функция скомпилируется вне зависимости от того, определена ли она в том же крейте, что и
▪️Из забавного: компилятор теперь выдаёт ошибку на атрибут
Вышла версия Rust 1.83.0! Как всегда, тут только избранные части, а всё остальное в детальных заметках.
▪️В const-контекстах теперь можно использовать
&mut
-ссылки, а также &
-ссылки на типы с внутренней изменяемостью!const fn inc(x: &mut i32) {
*x += 1;
}
const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};
Написание const-кода серьёзно упростилось. Само итоговое значение константы, впрочем, не может быть изменяемой (в том числе через внутреннюю изменяемость) ссылкой.
Также итоговое значение константы теперь может содержать
&
-ссылку на static
, если в типе нет внутренней изменяемости. static S: i32 = 25;
const C: &i32 = &S;
По понятным причинам итоговое значение константы не может содержать изменяемую (в том числе через внутреннюю изменяемость) ссылку на
static
.▪️Как прямое следствие предыдущего пункта — кучу функций можно теперь использовать в const-контексте, включая множество операций над сырыми указателями (в том числе
NonNull
) и различные функции для разбиения мутабельных слайсов на части.▪️Также стабилизировали кучу новых вариантов io::ErrorKind. Забавный факт: эти варианты были и раньше и использовались в std, и в теории по ним можно было матчиться, используя реализацию
Display
. Ещё забавный факт: стабилизацию всех этих вариантов и ещё некоторых запланировали 23 месяца назад, но первый PR со стабилизацией застопорился из-за некоторых вариантов, которые были слишком специфичны для конкретных операционных систем. Собственно, новый PR со стабилизацией приняли лишь потому, что эти варианты из списка на стабилизацию выкинули.▪️Ещё в число стабилизированных API вошли
hash_map::{Entry, VacantEntry}::insert_entry
. Эти методы вставляют переданное значение, но, в отличие от insert
, возвращают не мутабельную ссылку на значение, а OccupiedEntry
.▪️Одновременные атомарные и неатомарные доступы на чтение из одной локации в памяти одного размера теперь не считаются гонкой данных и потому не являются UB (в C++ — является, поскольку атомарные доступы в C++ происходят через создание atomic_ref, абстрактная машина C++ оперирует типизированной памятью).
▪️Предыдущие версии языка ошибочно считали
#[non_exhaustive]
-структуры с ненаселёнными полями населёнными типами вне крейта, в которых они определены. В этой версии это странное поведение исправили. Для пользователей языка это означает, что, например, с вот таким определением:enum Empty {}
#[non_exhaustive]
struct Foo(Empty);
следующая функция скомпилируется вне зависимости от того, определена ли она в том же крейте, что и
Foo
, или нет:fn eliminate<T>(f: Foo) -> T {
match f {}
}
▪️Из забавного: компилятор теперь выдаёт ошибку на атрибут
#[repr(Rust)]
, применённый на определение, которое не является перечислением, структурой или объединением.👍8❤4🎉2