1.83K subscribers
3.31K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
🤡42🖕9💯5💩4🫡3🌚2🔥1
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:

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:
13🤡7😁4👎2💯1
#prog #amazingopensource

ripgrep-allripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
👍19🥰4👌2
Forwarded from ен сешмно
🤣12😢5🤔2👍1💔1
Forwarded from Авва
McMaster-Carr - американская компания, которая продает
фабричное оборудование, от гаек до защитных шлемов. У них есть каталог из более 700,000 наименований. В твиттере заметили и обсуждают, что их сайт - один из самых быстрых в интернете, каталог и страницы в нем загружаются моментально, реакция на любое нажатие мгновенная, просто кайф зайти на него, даже если не нужны гайки.

https://www.mcmaster.com/

Я когда зашел, сначала подумал, что это просто чистый HTML с картинками, но потом решил, что нет, неправдоподобно быстро даже из Израиля. Наверное, они делают всяческую предварительную загрузку, оптимизируют CSS, возможно нарезают большие картинки на иконки итд. И действительно, кто-то записал видео с подробным разбором сайта, и там много разных трюков специально для быстрого рендеринга и быстрой реакции:

https://www.youtube.com/watch?v=-Ln-8QM8KhQ

При этом вся технология была стандартной уже лет 10 назад, а то и больше. Никаких реактов-шмеактов, разумеется. Скелет сайта вообще спаян на Asp.net, похоже (!).

Много респекта.
🔥25👍6🤡2
Армянская бабушка на улице отругала меня по-армянски за серёжку в ухе. Мол, ай-яй-яй, в наше время такого ужаса не было.

Узнав, что я из России, переобулась и сказала уже по-русски: "А, ну вам можно". И пошла дальше. Типа, вас уже не спасти, что с вами поделаешь...

Какая-то очень сложная схема сегрегации 😅
16🫡14😁11💯3🤷3
Раньше чтобы тебя не детектили системы как человека надо было носить одежду как справа. Теперь достаточно одежды как слева.

Я напомню что среди DSов есть секта:

ОБУЧЕНИЕ ВСЕ, вам достаточно сделать import openai и все. И почему они все ведут какие то курсы... На работу их не берут что ли...
🌚18😁8🤣3
В Армении в последние дни последнего месяца осени пошёл снег. Немыслимо!
🎉4
😭15😁10
Блог*
Я абсолютно ненавижу культуру разработки вокруг BPF
Я ненавижу ошибки верификатора BPF
😁10👍2
Forwarded from someone's shitpost (devilreef)
🤯8🥰5😁1🤔1🥴1
не баян а классика #трудовыебудни
😁14👍9🤔3🔥1🤯1
#prog #rust #rustreleasenotes

Вышла версия 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)], применённый на определение, которое не является перечислением, структурой или объединением.
👍84🎉2