Forwarded from Backtracking (Дима Веснин)
что общего у следующих игр?
1. игр на досках в 8 или 10 рядов (как индийские игры аштапада и дасапада)
2. игр на вымышленных досках (как шахматы с завязанными глазами)
3. игр, в которых нужно кидать кубик
4. игр с мячом
5. игр с ветряными мельницами сделанных из пальмовых листьев
6. игр, в которых нужно угадывать мысли друзей
7. игр, имитирующих деформации
8. игр, в которых нужно пахать игрушечным плугом
эти и некоторые другие игры можно найти в статье википедии «List of games that Buddha would not play»
1. игр на досках в 8 или 10 рядов (как индийские игры аштапада и дасапада)
2. игр на вымышленных досках (как шахматы с завязанными глазами)
3. игр, в которых нужно кидать кубик
4. игр с мячом
5. игр с ветряными мельницами сделанных из пальмовых листьев
6. игр, в которых нужно угадывать мысли друзей
7. игр, имитирующих деформации
8. игр, в которых нужно пахать игрушечным плугом
эти и некоторые другие игры можно найти в статье википедии «List of games that Buddha would not play»
👍1
#prog #amazingopensource #regex #rust
Язык, который компилируется в регулярные выражения.
(thanks @sergeysova)
Язык, который компилируется в регулярные выражения.
(thanks @sergeysova)
GitHub
GitHub - yoav-lavi/melody: Melody is a language that compiles to regular expressions and aims to be more readable and maintainable
Melody is a language that compiles to regular expressions and aims to be more readable and maintainable - yoav-lavi/melody
🔥5😢3❤2
Forwarded from Архонт щітпосту | #укртґ
«У России три пути: вебкам, закладки и айти»
> OnlyFans приостанавливает работу аккаунтов из России
> полиция Германии ликвидирует Гидру
> Интел полностью останавливает работу в России
У России… нет путей?
> OnlyFans приостанавливает работу аккаунтов из России
> полиция Германии ликвидирует Гидру
> Интел полностью останавливает работу в России
У России… нет путей?
🤔20👍9😢6❤2
Forwarded from partially unsupervised
Существует известная проблема из области социологии: как получить более или менее честные данные в количественном исследовании, если респонденты не хотят/боятся/стыдятся отвечать честно.
И вот случайно наткнулся на простой и изящный подход в духе differential privacy. TL;DR - формируем список из N утверждений, делим респондентов на две группы, одной показываем все N утверждений, другой - все, кроме того самого чувствительного. Вопрос формулируется как "с каким количеством утверждений (неважно, каких именно) вы согласны", и по разнице между группами легко вывести истинную поддержку.
Должно подойти не только для опросов про войну, но и для user research.
И вот случайно наткнулся на простой и изящный подход в духе differential privacy. TL;DR - формируем список из N утверждений, делим респондентов на две группы, одной показываем все N утверждений, другой - все, кроме того самого чувствительного. Вопрос формулируется как "с каким количеством утверждений (неважно, каких именно) вы согласны", и по разнице между группами легко вывести истинную поддержку.
Должно подойти не только для опросов про войну, но и для user research.
EUROPP - European Politics and Policy
Do Russians tell the truth when they say they support the war in Ukraine? Evidence from a list experiment - EUROPP
Survey evidence indicates a majority of Russian citizens support their country’s military action in Ukraine. But does this give an accurate picture of public opinion? Using an innovative list experiment, Philipp Chapkovski and Max Schaub demonstrate that…
🔥11
Блог*
#rust В сорцах rustc банят числа.
Ввиду последних событий, вероятно, будут банить числа 86 и 90
👍1😁1
Forwarded from Незаслуженный учитель России
Задал ребенку блестящее (не могу кривить душой!) задание.
Мы решили (так как беседуем с ней раз в неделю уже третий год), что пора обсуждать литературу. Решили начать с мифа. Ученица начиталась терминологии, объяснила мне, что такое космогонический миф, а что такое онтологический. Было очень здорово, хотя слова эти по первости она произносила по слогам. Мы приводили друг другу примеры, пересказывали мифы разных народов и оба собой глубоко гордились.
И тут ученица задала блестящий вопрос — а выросли ли мы уже, все человечество, из мифов? Я задумался и предположил, что нет. В качестве примера я привел детскую мифологию, объясняющую мир. Например, мне в деревенском детстве объясняли, что убивать пауков нельзя. Если убьешь паука, то Бог плачет и идет дождь. Девочка очень обрадовалась и стала толковать. Пауки полезны, они очищают дом от насекомых, их нельзя убивать; но надо объяснить, почему. Я к этому добавил, что рассказывали мне это про пауков-крестовиков, у которых на спинке буквально крест — отсюда и мотив Бога. Ученица в качестве своего детского мифа привела историю про аиста, приносящего детей.
И тут у меня в голове щелкнуло. Я поразмыслил и предложил ей провести исследование. Буквально расспросить одноклассников о мифах, в которые они верили в детстве и с помощью которых им объяснили мир. А еще лучше — расспросить родителей о том, во что они верили в детстве. Ученица прямо самостоятельно и без напоминания записала все в тетрадочку и сообщила, что это очень остроумное задание. Я не мог не согласиться и решил ей польстить.
— Вообще-то это можно даже назвать антропологическим исследованием! — важно сказал я.
Девочка округлила глаза и тут же записала такое важное и звучное выражение.
Буду держать вас в курсе.
Мы решили (так как беседуем с ней раз в неделю уже третий год), что пора обсуждать литературу. Решили начать с мифа. Ученица начиталась терминологии, объяснила мне, что такое космогонический миф, а что такое онтологический. Было очень здорово, хотя слова эти по первости она произносила по слогам. Мы приводили друг другу примеры, пересказывали мифы разных народов и оба собой глубоко гордились.
И тут ученица задала блестящий вопрос — а выросли ли мы уже, все человечество, из мифов? Я задумался и предположил, что нет. В качестве примера я привел детскую мифологию, объясняющую мир. Например, мне в деревенском детстве объясняли, что убивать пауков нельзя. Если убьешь паука, то Бог плачет и идет дождь. Девочка очень обрадовалась и стала толковать. Пауки полезны, они очищают дом от насекомых, их нельзя убивать; но надо объяснить, почему. Я к этому добавил, что рассказывали мне это про пауков-крестовиков, у которых на спинке буквально крест — отсюда и мотив Бога. Ученица в качестве своего детского мифа привела историю про аиста, приносящего детей.
И тут у меня в голове щелкнуло. Я поразмыслил и предложил ей провести исследование. Буквально расспросить одноклассников о мифах, в которые они верили в детстве и с помощью которых им объяснили мир. А еще лучше — расспросить родителей о том, во что они верили в детстве. Ученица прямо самостоятельно и без напоминания записала все в тетрадочку и сообщила, что это очень остроумное задание. Я не мог не согласиться и решил ей польстить.
— Вообще-то это можно даже назвать антропологическим исследованием! — важно сказал я.
Девочка округлила глаза и тут же записала такое важное и звучное выражение.
Буду держать вас в курсе.
👍4
Forwarded from Макс Силинг
cat вступил в профсоюз и его теперь нельзя уволить с его работы на первом месте в пайплайне
🔥7
Блог*
#prog #rust #моё Тут Даня рассказывает о том, как можно уменьшить время на критические секции с мапой в многопоточном контексте, расчитывая хэш для поиска ключа заранее. Бенчмарк, который он сделал, показывает, что CPU time от подобных манипуляций остаётся…
#prog #rust #article
И ещё немного про мьютексы в Rust.
Why Rust mutexes look like they do (перевод)
(от автора m4vgalib, между прочим)
И ещё немного про мьютексы в Rust.
Why Rust mutexes look like they do (перевод)
(от автора m4vgalib, между прочим)
👍3
#prog #rust #моё
Пусть у нас есть слайс из вот таких структур:
| ||
| |return type of closure is &'2 String
| has type
В чём дело? Посмотрим на сигнатуру sort_by_key:
Что делать? Можно, конечно, клонировать строку, но делать аллокацию в памяти только ради того, чтобы сравнить данные и тут же их деаллоцировать — это расточительно. Проще использовать sort_by, который требует функцию, возвращающую Ordering:
ауф. Так что до новых встреч.
Пусть у нас есть слайс из вот таких структур:
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);
Не менее красиво мы можем отсортировать по имени и по байтам... А нет, погодите, не можем — это потребует возвращать пару ссылок, а кортеж из ссылок ссылкой не является doc.rust-lang.org
slice - Rust
A dynamically-sized view into a contiguous sequence, `[T]`.
👍2