Telegram Web Link
Довольно увлекательная статья о том, как человек участвовал в RAIC 2020. В этот раз необходимо было запрограммировать бота для игры в сильно упрощённый Старкрафт.
Человек решил офигенное количество с виду простых задач по разруливанию поведения юнитов на поле. И когда казалось, что все возможные грабли учтены, оказывалось, что находилась ещё ситуация (и не одна!), когда алгоритм действовал не лучшим образом.

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

В-общем, стоящая статья, я получил удовольствие от прочтения. Краткий вывод:
1. Для участия в RAIC 2021 нужно уволиться с работы или взять отпуск месяца на 2 😊
2. Большинство задач тривиальны, но обобщённое и эффективное решение части из них позволяет разом убить 100 "зайцев" и избавиться от костылей в будущем.
3. Для участия не нужно иметь опыт в AI, ML, DL и других аббревиатурах, нужно просто уметь писать if-ы и циклы😉, но желательно уметь дебажить и профилировать код.

https://m.habr.com/ru/post/535310/
В закладки. Очень подробная, хоть и несколько субъективная статья Optozorax-а о разных клавиатурных компромиссах, костылях и решениях.
Forwarded from dev optozorax (илья шепрут)
Как известно, я очень упорот по клавиатурам.

И в этой области я развиваюсь уже много лет, поэтому мне есть что сказать. И вот думал что неплохо было бы написать статью о своей раскладке (а она довольно уникальна). Получилась, конечно, статья о раскладке, но случайно я параллельно рассказал про десятипальцевый метод, про неверность стандартных клавиатур и историю своего развития. Получилась огромная статья на 200к символов, которую читать, наверное, 2 часа.

Так что приятного чтения! 🍿

#клавиатуры
Sandy Maguire (известный в хаскельных кругах товарищ) дописал книгу, которая раньше имела рабочее название "Structure and Interpretation of Haskell Programs" (отсылка к знаменитой SICP). Можно сейчас уже скачать pdf.

https://reasonablypolymorphic.com/blog/algebra-driven-design/
Энтузиаст начал переводить эту красоту на русский. Вообще, 3b1b иногда просто приятно смотреть из-за классных анимаций, даже не пытаясь вдумываться в содержание.

https://youtu.be/aCvnUuYaRH8
Интервью одного человека, с которым я когда-то работал и которого я уважаю. Сам он говорит, что его застали врасплох и получилось не очень, а по мне так получилось очень хорошо. История с Боингом как будто бы типичная, но ребятам могло на самом деле повезти, мне в аналогичной ситуации повезло и дефектов не случилось.😊
https://www.saratovit.ru/interview/andrej-gusev/
И мы видим, что менеджера в айти все больше и больше воспринимают как ничего не понимающего человека, раздающего малоосмысленные указания и действующего по шаблону в ущерб здравому смыслу.
Forwarded from илья optozorax
По мотивам недавнего мемчика из профунктора
О недостатках Rust на сегодняшний день

Doge Shibu:
Такая возможность была бы полезна практически везде.

Простейший пример - мы хотим из метода трейта возвращать итератор (абсолютно разумная и естественная идея):

trait MyTrait<'a> {
type MyIter: Iterator<Item = &'a MyType>;
fn get_iter(&'a self) -> Self::MyIter;
}


Ок, пишем реализацию:
impl<'a> MyTrait<'a> for MyTraitImpl {
type MyIter = ???;
fn get_iter(&'a self) -> Self::MyIter {
let some_value = self.some_method(...);
self.something.iter().map(|x| some_value.wtf(x))
}
}


И теперь выходит, что мы не можем назвать тип, который должен идти в MyIter, из-за того, что у нас там будет Map<???, ...>, в котором надо будет указать имя типа замыкания, чего мы сделать не сможем. И соответственно так реализовать трейт тоже не сможем.

У нас остаются два варианта - бокс + dyn, что в случае итераторов смешно, или переходить на найтли и давать имя MyIter через type MyIter = impl Iterator<...>;

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

И, кстати, вот эта проблема - это то из-за чего я почти во всех своих проектах сижу на найтли и считаю, что раст без найтли - не сказать, чтобы сильно удобен.
Одна из моих любимых песен с тех пор, как её один супермозг визуализировал на 64 ядрах (128 аппаратных потоках) процессора AMD Threadripper 3990x.👇
Любопытное. Если погуглить по "rust tracing" выпадает такая красота.
Дженерики для го приняли тоже. Хороший пример фичи системы типов, которую нужно планировать заранее с самого начала, иначе вкорячивать придётся не самым красивым образом.
С другой стороны отличная демонстрация, что "вода камень точит".
Гугл спонсирует переписывание разных штук на Rust. Представьте, сначала тулзы, потом и сам POSIX, а потом появится и safe-слой для сисколлов :-P (ага, размечтался..)

https://security.googleblog.com/2021/02/mitigating-memory-safety-issues-in-open.html
Модель трёх тел хоть и сложна и аналитически не решается, но её всё равно нужно усложнить ещё дальше, чтобы она стала реалистичной. Например, добавить радиус планеты в параметры и столкновения между планетами, с образованием отлетающих кусков, которые становятся новыми планетами. Есть теория, что наша Луна — это отколовшийся когда-то кусок Земли в результате столкновения с каким-то шальным астероидом.
This media is not supported in your browser
VIEW IN TELEGRAM
Initial states:
m: 0.950 x: 0.841 y: -2.945 vx: 0.055 vy: 0.867
m: 7.171 x: -1.359 y: 2.404 vx: 0.573 vy: -0.282
m: 1.920 x: -2.252 y: -4.907 vx: -0.063 vy: 0.047
Interest-ness score: 61
2025/09/16 18:16:48
Back to Top
HTML Embed Code: