Size: a a a

2021 October 02
Блог*
У вас нету причины не пройти Pyre.

И нет, не пытайтесь о ней что-то прочитать, к этой игре лучше подходить, ничего о ней не зная.
источник
2021 October 03
Блог*
Всё так и было
источник
Блог*
источник
Блог*
А тихой сапой подкралась очередная круглая цифра — тысяча подписчиков. Казалось бы, вполне ожидаемое событие, учитывая, что в последние месяцы это число медленно, но верно росло — но меня оно всё равно застигло врасплох. Думаю, за это стоит поблагодарить несколько каналов, которые недавно прямо упоминали Блог*: @oleg_log (Олег, разблокируй уже в чате, пожалуйста), @lilfunctor (который недавно тоже перевалил за тысячу участников, в связи с чем искренне поздравляю Михаила) и @nosingularity. Спасибо, мужики.

Что же это значит для меня? Ну, во-первых, что я, оказывается, умею писать интересно — в смысле достаточно интересно, чтобы заинтересовать большее количество людей, чем с которым я могу познакомиться лично. Во-вторых — то, что число подписчиков — не особо осмысленная величина, но всё же приятно греет душу. В-третьих... Что большое количество подписчиков не обязательно означает большое количество финансовой отдачи 😅.

Впрочем, я веду блог не ради денег — иначе бы я уже давно бросил это дело. Как бы то ни было — спасибо, спасибо вам всем, в том числе и за временами плодотворные дискуссии в Чат*е. Вперёд, к новым вершинам — и к новым тысячам!
источник
Блог*
источник
Блог*
И традиционно попрошу новоприбывших ответить в опросе
источник
Блог*
#music

"8-битный" ремикс

youtube.com/watch?v=J_6lIik2fxM
источник
2021 October 04
Блог*
По :debian: в Телеграме выползает эмодзи 🍥 теперь.
источник
Блог*
> Footnotes now supported in Markdown fields

YES YES YES

<source>
источник
2021 October 05
Блог*
#prog #rust #article

Статья о распространённых плохих практиках новичков в Rust
источник
2021 October 06
Блог*
Как перестать забывать обедать на работе
источник
2021 October 07
Блог*
#prog #article

Статья про паттерн для работы с IO.

"There’s a pattern that I keep recommending to teams over and over again, because it helps separate concerns around I/O; sending and receiving things over a network, interacting with AWS, saving and loading things from data stores. It’s an old idea; you’ll find it filed under “Decorator” in your Gang of Four book.

<...>

Decorators are a great compositional pattern allowing the different concerns that inevitably cluster around I/O boundaries to be neatly separated and recombined. This opportunity presents itself several times in every app we write, and does not require any fancy language, type system, or framework."
источник
2021 October 08
Блог*
Всё в этой жизни уравновешано: если сегодня ты стукнулся правой коленкой, то завтра стукнешься левой
источник
2021 October 09
Блог*
#article

А раньше мемы были проще. И теперь это доказали.

(thanks @psilon)
источник
2021 October 10
Блог*
Кажется, я теперь буду скупать все призмы и похожие штуки. Посередине кубик со световыми фильтрами.
источник
2021 October 11
Блог*
#prog #rust #article #abnormalprogramming

Статья о том, как сделать в Rust свои примитивные численные типы. Ну, почти.
источник
Блог*
#prog #article

Статьяпродолжение) о дизайне hypothesis — библиотеки для property-based тестирования (вообще для Python, но с портами на другие языки, включая Rust). В отличие от родоначальника подхода QuickCheck, в котором для генерирования произвольных значений опирается на классы типов (и, следовательно, типы), hypothesis опирается на явные генераторы значений, которые, в отличие от генераторов QuickCheck, могут иметь состояние. В статьях убедительно аргументируется, что это позволяет сделать минификацию тест-кейсов значительно более эффективной, как в смысле райнтайм-производительности, так и в смысле снижения числа отбрасываемых тест-кейсов.

А вообще советую почитать остальные статьи в блоге, там много интересных.
источник
Блог*
Собственная Фудзи должна быть у каждого японского школьника - об этом позаботилась компания PLUS Stationery. Она продает стирательные резинки, которые поначалу выглядят обычно (слева на фото), но постепенно превращаются в Фудзи со снежной шапкой. Изобретательно!

Линейка таких резинок постоянно обновляется, и сейчас в продажу поступил осенний вариант с кленовыми листьями.
источник
Блог*
#prog #rust

fmt_ext — библиотека для прикрепления кастомных реализаций Debug и Display к чужим типам.

Вместо тысячи слов:

use std::{fmt, marker::PhantomData};

use fmt_ext::{debug::*, DebugExt};

// Create a type that will implement custom debug...
struct SliceWithLenDebug<T>(PhantomData<T>);

// Implement custom debug...
impl<T> CustomDebug for SliceWithLenDebug<T>
where
   T: fmt::Debug,
{
   type Target = [T];

   fn fmt_target(target: &Self::Target, f: &mut fmt::Formatter<'_>) -> fmt::Result {
       write!(f, "Slice {{ len: {}, items: {:?} }}", target.len(), target)
   }
}

// Attach custom debug implementation to the target type...
impl<T> AttachDebug<SliceWithLenDebug<T>> for [T] {}

// Look! Now we have just call `debug` method on the target type...
fn main() {
   let numbers = [0, 1, 2, 3];
   println!("{:?}", numbers.debug());

   let strings = vec!["I", "am", "a", "custom", "debug"];
   println!("{:?}", strings.debug());
}

(thanks @ilyavenner)
источник
Блог*
#prog

Даниил опять рассказывает интересное. На этот раз — про внутреннее устройство branch predictor-а
Telegram
Experimental chill
Недавно задался вопросом, а где вообще почитать про процессоры и как они устроены. К сожалению, архитектура практически всех современных процессоров закрыта.

С одним небольшим исключением, которое мне скинули друзья из ARM. Это процессоры Exynos, которые делались для каких-то Samsung вплоть до S20. Это единственные продакшен процессоры, которые соревновались с Snapdragon и Apple A* на мобильных устройствах. Серверные процессоры скорее отличаются большими кешами, а вот branch predictions, pipelining достаточно похожи. Статья сложная, но хочу рассказать о ментальной моделе, которую я выучил.

Branch Predictor во всех процессорах это мелкие перцептроны (однослойные нейронные сети), которые собирают три-четыре объекта

GHIST (Global History) — хэш информации о том, как последние N бранчей были взяты или не взяты. В статье сказали, что в M1 модели было 160 бит, к 4 поколению 200
PHIST (Path History) — хэш нескольких бит адресов (со второго по четвёртый) последних бранчей, массив длины 80
PC (Program Counter) — хэш…
источник