Блог* – Telegram
1.9K subscribers
3.46K photos
135 videos
15 files
3.69K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Backtracking (Дима Веснин)
что общего у следующих игр?

1. игр на досках в 8 или 10 рядов (как индийские игры аштапада и дасапада)
2. игр на вымышленных досках (как шахматы с завязанными глазами)
3. игр, в которых нужно кидать кубик
4. игр с мячом
5. игр с ветряными мельницами сделанных из пальмовых листьев
6. игр, в которых нужно угадывать мысли друзей
7. игр, имитирующих деформации
8. игр, в которых нужно пахать игрушечным плугом

эти и некоторые другие игры можно найти в статье википедии «‎List of games that Buddha would not play»
👍1
Патриотизм — это, на самом деле, так тупо
👍16👎9🤮9🤔3💩3
🤔1
Forwarded from Чылік
Забалтывание
20👍10🤮3🤬2
«У России три пути: вебкам, закладки и айти»

> OnlyFans приостанавливает работу аккаунтов из России
> полиция Германии ликвидирует Гидру
> Интел полностью останавливает работу в России

У России… нет путей?
🤔20👍9😢62
Forwarded from partially unsupervised
Существует известная проблема из области социологии: как получить более или менее честные данные в количественном исследовании, если респонденты не хотят/боятся/стыдятся отвечать честно.

И вот случайно наткнулся на простой и изящный подход в духе differential privacy. TL;DR - формируем список из N утверждений, делим респондентов на две группы, одной показываем все N утверждений, другой - все, кроме того самого чувствительного. Вопрос формулируется как "с каким количеством утверждений (неважно, каких именно) вы согласны", и по разнице между группами легко вывести истинную поддержку.

Должно подойти не только для опросов про войну, но и для user research.
🔥11
Блог*
#rust В сорцах rustc банят числа.
Ввиду последних событий, вероятно, будут банить числа 86 и 90
👍1😁1
Задал ребенку блестящее (не могу кривить душой!) задание.

Мы решили (так как беседуем с ней раз в неделю уже третий год), что пора обсуждать литературу. Решили начать с мифа. Ученица начиталась терминологии, объяснила мне, что такое космогонический миф, а что такое онтологический. Было очень здорово, хотя слова эти по первости она произносила по слогам. Мы приводили друг другу примеры, пересказывали мифы разных народов и оба собой глубоко гордились.

И тут ученица задала блестящий вопрос — а выросли ли мы уже, все человечество, из мифов? Я задумался и предположил, что нет. В качестве примера я привел детскую мифологию, объясняющую мир. Например, мне в деревенском детстве объясняли, что убивать пауков нельзя. Если убьешь паука, то Бог плачет и идет дождь. Девочка очень обрадовалась и стала толковать. Пауки полезны, они очищают дом от насекомых, их нельзя убивать; но надо объяснить, почему. Я к этому добавил, что рассказывали мне это про пауков-крестовиков, у которых на спинке буквально крест — отсюда и мотив Бога. Ученица в качестве своего детского мифа привела историю про аиста, приносящего детей.

И тут у меня в голове щелкнуло. Я поразмыслил и предложил ей провести исследование. Буквально расспросить одноклассников о мифах, в которые они верили в детстве и с помощью которых им объяснили мир. А еще лучше — расспросить родителей о том, во что они верили в детстве. Ученица прямо самостоятельно и без напоминания записала все в тетрадочку и сообщила, что это очень остроумное задание. Я не мог не согласиться и решил ей польстить.

— Вообще-то это можно даже назвать антропологическим исследованием! — важно сказал я.

Девочка округлила глаза и тут же записала такое важное и звучное выражение.

Буду держать вас в курсе.
👍4
Forwarded from Макс Силинг
cat вступил в профсоюз и его теперь нельзя уволить с его работы на первом месте в пайплайне
🔥7
#prog #rust #моё

Пусть у нас есть слайс из вот таких структур:

struct Data {
name: String,
whatever: u32,
bytes: Vec<u8>,
}

, и нам надо отсортировать слайс по полю name. Казалось бы, плёвое дело:

arr.sort_by_key(|d| &d.name);

Но компилятор ругается:

error: lifetime may not live long enough
--> src/lib.rs:8:21
|
8 | arr.sort_by_key(|d| &d.name);
| -- ^^^^^^^ returning this value requires that
'1 must outlive '2
| ||
| |return type of closure is &'2 String
| has type &'1 Data

В чём дело? Посмотрим на сигнатуру sort_by_key:

fn sort_by_key<K, F>(&mut self, f: F) where
F: FnMut(&T) -> K,
K: Ord,

Обратите внимание, параметр K не параметризован никакими временами жизни и потому считается независимым от переданной ссылки на T. Очевидно, в нашем случае это не так: ссылка на поле структуры не может жить дольше ссылки на структуру целиком.

Что делать? Можно, конечно, клонировать строку, но делать аллокацию в памяти только ради того, чтобы сравнить данные и тут же их деаллоцировать — это расточительно. Проще использовать sort_by, который требует функцию, возвращающую Ordering:

arr.sort_by(|a, b| a.name.cmp(&b.name));

Окей, это работает, но выглядит уже не очень. Нам приходится повторять себя, да и идея "сравнить по name" уже не так хорошо читается. А если нам потребуется сравнивать сначала по name, а потом по bytes?

arr.sort_by(|a, b| (&a.name, &a.bytes).cmp(&(&b.name, &b.bytes)));

Ох, выглядит так себе, от обилия скобочек немного рябит в глазах. А если переписать на методах Ordering?

arr.sort_by(|a, b| a.name.cmp(&b.name).then_with(|| a.bytes.cmp(&b.bytes)));

Лучше особо не стало. И, кстати, что там, что там велик соблазн скопипастить выражения для a и заменить на b — великолепный способ, чтобы забыть в каком-то месте поменять. Мы можем сделать лучше! Упрячем sort_by в одном месте и выставим интерфейс, который принимает функцию для вынимания ключа:

trait SliceExt<T> {
fn sort_by_ref_key<K, F>(&mut self, f: F)
where
F: FnMut(&T) -> &K,
K: Ord + ?Sized; //
почему "?Sized"?
}

impl<T> SliceExt<T> for [T] {
fn sort_by_ref_key<K, F>(&mut self, mut f: F)
where
F: FnMut(&T) -> &K,
K: Ord + ?Sized,
{
self.sort_by(|a, b| f(a).cmp(&f(b)));
}
}

Теперь мы можем красиво отсортировать по имени:

arr.sort_by_ref_key(|d| &d.name);

Не менее красиво мы можем отсортировать по имени и по байтам... А нет, погодите, не можем — это потребует возвращать пару ссылок, а кортеж из ссылок ссылкой не является ауф. Так что до новых встреч.
👍2