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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Inside Rust: Splitting the const generics features

Маленькая заметка о прогрессе с расширением const generics.
#prog #rust #rustlib

Библиотека для todo, которая валит компиляцию при специфических условиях.

lib.rs/todo-or-die
Forwarded from iggisv9t channel
Нашёл тут любопытный список https://github.com/daviddao/awful-ai

Это один из примеров, почему мне не нравится сверхобобщающий термин AI. Но на самом деле, хоть у меня и бомбит от некоторых пунктов списка, ответственность за имидж области лежит на непосредственных её участниках. Так что давайте я попробую внести свой маленький вклад в просвещение.

Меня больше всего напряг самый первый раздел "Discrimination". Потому что примерно половина примеров — это не "they build a racist AI" а просто зеркало того, что люди делают в интернете. Ну научите попугая на твитах, он тоже будет выдавать вам довольно неприятные фразы. Это не расист-попугай, он же не понимает что говорит, он учит распределение данных, которые ему дали. Поэтому да, если в исходных данных белых больше чем people of color, или Dr. чаще стоит рядом с фамилией у мужчин, то чёрт возьми, не алгоритм имеет смещение, а данные. Алгоритмы машинного обучения не вносят никакой логики в данные, не интерпретируют их, грубо говоря, они учат только "как оно чаще бывает в примерах, которые им показали".
И такие работы, которые показывают смещение данных неизбежны и важны. И я бы их как раз пихал не в раздел "фу какие неправильные", а в раздел "смотрите, с этим надо быть осторожными".

И вот тут мы приходим к другой половине раздела и за одно к разделу "Surveillance" а заодно и к "Social credit systems". То есть мы видели на примерах, которые я пытался оправдать, что судить людей алгоритмами не стоит, потому что мы не сможем собрать честные репрезентативные данные, и тем более не сможем вложить в них какую-то этичную логику решений. Потому что они просто учатся правильно угадывать, а не разбираться. И тем не менее, много кто занимается созданием алгоритмов, чтобы прямо искать кого осудить.
С другой стороны, не нужно ограничиваться одними заголовками. Всегда есть тонна деталей, которые могут в корне менять дело, и может оказаться, что AI совсем не AI у них. Просто области, которые касаются отбора людей, разных скорингов и так далее, в принципе такие, что никакой чёрный ящик не допустим, будь то AI или что угодно другое.

Кстати, про переименование NIPS потому что кому-то это напомнило nipples, у меня тоже бомбит. Это напоминает мне ту историю, как за рисунки на рубашке затравили чувака, который посадил Розетту на комету Чурюмова-Герасименко. Какие блин соски? Никто о них и не думал.
#prog #rust #rustreleasenotes

Новый релиз Rust — уже 1.55.0! — и мой новый разбор избранных кусков новых фич.

Теперь в качестве паттернов можно использовать диапазоны с открытой верхней границей:

match x as u32 {
0 => println!("zero!"),
1.. => println!("positive number!"),
}

Конечно, раньше ничто не мешало вместо 0.. написать 0..=u32::MAX, но это требовало знания конкретного типа, что не всегда возможно. Макросы стало писать чуть проще. Что любопытно, паттерны с открытой нижней границей (..42) остаются нестабильными.

rustdoc стал чуть более умным: теперь он понимает ссылки на ассоциированные определения через алиасы на типы и не показывает лишние определения методов в секции реализаций трейтов. Последнее изменение позволило снизить размер страницы с документацией к трейту Read с 128 килобайт до 68. Ну и ещё кое-что по мелочи.

Всё остальные изменения по факту связаны со стандартной библиотекой — и в очередной раз приличная доля изменений сводится к "О боже, как же я вообще раньше жил без этой абсолютно необходимой фичи".

Поменяли алгоритм для парсинга чисел с плавающей точкой. Это позволило в целом ускорить работу парсинга примерно на порядок (а для некоторых вырожденных случаев — на три порядка), позволить корректно обрабатывать граничные случаи, на которых валился старый алгоритм и вдобавок уменьшить количество генерируемого без strip-а кода.

В модуль ops добавили перечисление ControlFlow:

pub enum ControlFlow<B, C = ()> {
Continue(C),
Break(B),
}

Это перечисление позволяет указать, надо ли продолжать вычисление или же нужно прервать их. Это удобно для обхода графовых структур. Технически ControlFlow изоморфен Result, но применять Result для тех же целей, что и ControlFlow, было неудобно: в подобных случаях то значение, которое пробрасывается наверх (а для ControlFlow это Break), было Err, и использовать этот вариант приходилось именно по этой причине. Это сбивало с толку, поскольку возвращаемое значение, как правило, не несло семантики ошибки. Теперь эта проблема решена, поскольку ControlFlow реализует Try с удобной семантикой. Что, однако, расстраивает — так это то, что у этого перечисления есть пачка тривиальнейших методов — и все нестабильные :/ Видимо, в своих проектах придётся лепить extension trait.

Тип MaybeUninit обзавёлся методами assume_init_{ref, mut} и write. Первый позволяет объявить значение инициализированным, имея на руках лишь ссылку на него — полезно в тех случаях, когда получить владение не представляется возможным. А ещё это позволяет инициализировать данные, не перемещая их памяти, в отличие assume_init. Метод же write просто записывает переданное значение и функционально эквивалентен maybe_uninit.as_mut_ptr().write(value), но не требует unsafe-блока. Я удивлён, что его стабилизация вообще заняла время.

В продолжение начатым Вафелем изменений в полку связанных со строками итераторов, позволяющих извлекать внутреннюю строку, прибыло: теперь в их число входит std::string::Drain с методом as_str. Дополнительно он теперь реализует AsRef<str> и AsRef<[u8]>.

Операцию map теперь можно применять непосредственно на массивах при помощи соответствующего метода. Больше никаких аллокаций промежуточных векторов только из-за нехватки методов!

На этом от меня всё, ну а более подробные изменения всегда можно почитать в RELEASES.md.
#prog #rust

Rudra — статический анализатор Rust-кода, нацеленный на поиск семантических ошибок в unsafe-коде. Работает с обобщённым кодом, быстр, фантастически эффективен на практике:

"New bugs. We reported 263 previously unknown memory-safety bugs in 145 packages, resulting in 98 RustSec advisories and 74 CVEs (see Table 3 and Table 4). This is an unprecedented number of memory-safety bugs, constituting 51.3% of all memory-safety bugs in the Rust ecosystem since2016 (see Figure 1). Also, the bugs RUDRA discovered are non-trivial: two higher-order invariant bugs in the Rust std library, one SV bug in the Rust compiler, rustc, one SV bug in the official futures library, and several SV bugs in lock_api, a very popular lock abstraction library. These are mistakes made by Rust experts. It is worth noting that the average latent time of the discovered bugs is over three years despite community efforts to manually audit unsafe code inRust [35]."
Поздравляю Вафеля!
Что может быть приятнее, чем
Естественным языкам временами не хватает тайпчекера
#prog #rust #моё #article

Здрасьте. Сегодня поста не будет — но только потому, что я решил написать статью для Хабра. Собственно, вот она.

И напоминаю: если вам это понравилось — поддержите копеечкой автора, я вам благодарен буду: 4274 3200 5402 8520.
1👍1
#article

Создание квайнов часто считается неким нетривиальным искусством. В этой статье автор рассказывает, как можно делать квайны относительно механическим способом, и даже обобщяет этот метод на квайновые цепочки произвольной длины.
#amazingopensource #menacingopensource

Что такое fortraith? Нет, это не опечатка в слове Fortran или, упаси боже, Fortnite. Это — библиотека, реализующая компилятор времени компиляции, который переводит что-то, похожее на Forth, в вычисления на уровне типов Rust. Что? Да.
#psy из блога о сексе, да-да. Но вещь важная
Forwarded from Скучный секс-блог
Хаим Гинотт. «Родитель-Ребенок. Мир отношений»

Зачем в блоге о сексе писать про книгу о воспитании? Во-первых, она мне понравилась. Во-вторых, это не только про детей, а про людей и их чувства.

Психолог Хаим Гинотт умер в 51 год, и сегодня мало кто знает его имя. Его главной работой так и осталась короткая книжка Between Parent and Child (1965). В ней Гинотт первым озвучил идеи, которые сегодня считаются очевидными и применимыми не только к детям, но и к взрослым:

• Что человеку нужно, чтобы его слушали и понимали, а не поучали и критиковали.
• Что самое важное в диалоге - услышать и принять эмоции собеседника.
• Что любые чувства имеют право быть, но не всякое поведение допустимо.
• Что ответственность идет изнутри - это не слепое послушание, а следование ценностям.
• Что гуманного человека можно вырастить только гуманными методами. Ломать или унижать нельзя никого и никогда.

На удивление простая, мудрая и логичная книга с массой конкретных советов. Очень рекомендую и семейным, и бездетным.
Forwarded from Скучный секс-блог
Главные мысли из книги Хаима Гинотта «Родитель-Ребенок. Мир отношений»

По первым страницам книги Хаима Гинотта мне казалось, что ничего нового в ней я не найду. Да, надо признавать и зеркалить эмоции ребенка, бла-бла-бла. В 1965-м это было в новинку, но кого этим удивишь сегодня?

Однако чем дальше читал, тем больше убеждался, что это удивительная, незаслуженно забытая книга.

Гинотт предельно просто описывает философию гуманного родительства и одновременно дает массу практических советов. Помогать ли с домашними заданиями? Как реагировать, если ребенок ворует? Как говорить с ним о сексе и о смерти? Что делать, когда старшие ревнуют к младшим? Об этом вы при желании почитаете в книге. А я лишь расскажу о базовых идеях.

Как общаться с ребенком

• Чаще всего родители говорят с детьми на языке критики и поучений. А детям нужен от нас язык принятия и сострадания. У него два принципа: (1) уважать ребенка, не ущемлять его достоинство; (2) сначала принять чувства ребенка, а уж потом давать советы.

• Главное в общении с ребенком - стремление слушать и слышать. Проявите искренний интерес к его словам и эмоциям. Не отрицайте его чувства и желания. Не высмеивайте. Принимайте все к сведению.

• Цель вашей коммуникации с ребенком - контакт. Реагировать нужно в первую очередь на его чувства, а не на поведение. Если ребенок рассказывает вам о каком-то событии, не выясняйте мелкие подробности - отвечайте на эмоции, которые событие у него вызвало.

• Дети не всегда говорят прямым текстом, им нужно особое внимание. Многие вопросы ребенок задает лишь для того, чтобы получить заверение в поддержке. Когда ребенок рассказывает о том, что его волнует, ему нужна ваша любовь, а не допросы и разглагольствования.

• Говорить с ребенком - это навык, его нужно осваивать. Без него родитель похож на хирурга-недоучку, который оперирует как бог на душу положит, потому что «достаточно любви и здравого смысла».

Как сделать, чтобы ребенок не врал

• Не задавайте вопросов, на которые знаете ответ. Не пытайтесь поймать ребенка на лжи с помощью вопросов-ловушек. Вы лишь унизите его и спровоцируете новую ложь.

• Не путайте ложь с фантазиями, с помощью которых ребенок подсказывает вам, чего хочет и о чем мечтает.

• Не ругайте за правду. Будьте готовы выслушать от ребенка и приятную, и горькую правду. Многие мамы и папы не слушают детей именно потому, что боятся услышать что-то, что им не понравится. Ребенок не станет врать, если будет четко знать, что у него нет необходимости говорить вам неправду.

Отношение к эмоциям

• Эмоции бывают положительными, отрицательными и двойственными. Объясните ребенку, что нормально испытывать любые чувства, в том числе противоречивые. Прямо говорите ребенку о его и своих эмоциях.

• Родители - зеркало детских эмоций: отражая их, мы помогаем детям разобраться в себе. Не будьте кривым зеркалом. Для ребенка важнее знать, какие чувства он переживает, чем понимать, почему он их испытывает. Не обманывайте и не пытайтесь подменить одни чувства другими («Не говори, что ненавидишь братика, ты на самом деле его любишь!») Говорите правду: «Я вижу, ты очень зол на брата».

• Родители тоже имеют право испытывать весь спектр эмоций. Злиться на ребенка - это иногда нормально. Оскорблять или бить ребенка нельзя никогда. Не обязательно быть святым. Просто не прячьте свои чувства, а прямо говоряите о них - без критики и унижения: «Я вне себя от ярости, потому что игрушки разбросаны по комнате». Гнев не следует выражать таким образом, чтобы он нарастал в процессе выражения. Лекарство не должно быть опаснее болезни.

• Эмоции, как реки, нельзя остановить, их можно лишь перенаправить. Пытаться игнорировать вспышки эмоций - все равно что игнорировать стихийные бедствия. Относитесь к ним серьезно и ищите креативные способы направить их энергию в мирное русло.

• Мир в доме не должен зависеть от перемен вашего настроения. Это результат методических сознательных действий: понижайте уровень напряженности, прежде чем она выйдет из-под контроля.

Продолжение завтра
Forwarded from Скучный секс-блог
Идеи из книги Хаима Гинотта «Родитель-ребенок». Часть 2

Характер ребенка формируют наши с ним отношения. Поэтому первый шаг - твердое намерение живо интересоваться тем, что он думает и чувствует, а не просто реагировать на его поведение.

Дисциплина

• Суть дисциплины в том, что мы разрешаем ребенку любые чувства, мысли и желания. Ограничиваем только нежелательное поведение.

• Недопустимое поведение пресекайте решительно, но без унижений и критики. Не ругайте личные качества ребенка («как ты смеешь бить сестру, жестокий мальчишка!»). Остановите его и объясните свойства предметов: «Сестры не для битья». В идеале дайте приемлемую альтернативу: «В мяч играют во дворе, а не в доме».

• Запрет должен быть сформулирован четко и безлично. Расплывчатые формулировки лишь сбивают с толку, лучше полный запрет. Не «не брызгайся слишком сильно», а «брызгаться нельзя».

• Правила легко придумать и сложно соблюдать. Не устанавливайте железных правил без крайней необходимости. Если установили - требуйте соблюдения без долгих обоснований.

• Не грозите наказаниями и не пытайтесь подкупить ребенка. Это не работает.

Ответственность

• Ответственность - это набор ценностей, а не послушание. Чувство ответственности невозможно навязать, оно растет изнутри. Ценности нельзя преподать, их можно только впитать. Ребенок повторяет за теми, кого уважает и любит. Демонстрируйте ценности на деле, а не на словах.

• Чтобы ребенок умел принимать решения, давайте ему право выбора. Не перекладывайте на него ответственность за здоровье и безопасность, но пусть с малых лет решает за себя. Как малышу приготовить яйцо: всмятку или пожарить? Какую футболку купить - красную или зеленую? Пусть с каждым годом зона ответственности расширяется.

Снисходительность

• Дети - это дети. Чистая рубашка на ребенке недолго будет чистой; на деревья нужно залезать; бегать веселее, чем ходить шагом. Не требуйте, чтобы ребенок перестал быть ребенком. Дюжина недорогих и легких в уходе рубашек будет куда полезнее для его психического здоровья, чем постоянные наставления об опрятности.

• Учите детей отличать незначительные происшествия от реальных трагедий. Не реагируйте на разбитое стекло так, словно это ваша разбитая жизнь. Мелкая неудача может служить хорошим поводом задуматься о том, что по-настоящему важно.

• Не стремитесь сделать ребенка максимально эффективным. Целесообразность - враг детства, разорение детской души. Дайте ребенку возможность экспериментировать, ошибаться, учиться без понуканий и стопроцентного КПД.

Похвалы и отказы

• Хвалить ребенка следует за конкретные вещи - за старание и результаты усилий - а не за абстрактные черты характера, которые вы хотели бы ему приписать. «Ах, какой послушный мальчик» - неудачный, оценочный вариант. «Спасибо, что убрал все игрушки, вижу, это было нелегко» - куда полезнее.

• Учитесь говорить «нет» мягко. Если вынуждены отказать ребенку в чем-то, то хотя бы не отнимайте у него удовольствие помечтать. Покажите, что понимаете его желание. Например: «Я вижу, как тебе хочется иметь эту прекрасную игрушку. Мне очень жаль, что я не могу ее тебе купить прямо сейчас». При возможности предложите альтернативу: «Если очень хочешь, можем попросить эту игрушку на Рождество».

О разном

• Авторитет подразумевает краткость. Родители говорят слишком много и подробно. Не вдавайтесь в долгие разъяснения, если ребенок об этом не просит.

• Всегда, при любой возможности старайся поддержать и усилить чувство собственного достоинства ребенка.

• Не давайте клятвенных обещаний. Клятвы значат лишь, что простому вашему слову нельзя верить. Кроме того, не все в вашей власти: в день обещанного похода в зоопарк может полить дождь или сломаться машина.

• Никогда не поднимайте руку на ребенка. И никогда не давайте бить себя: «Люди не для битья».

• Если не понимаете, как правильно поступить, лучше ничего не делайте. Подумайте и разберитесь в собственной позиции.

• Вырастить гуманного человека можно лишь гуманными методами. Цель не оправдывает средства. Нет ни одной высокой цели, ради которой можно было подавлять, ломать и обижать ребенка.