#gamedev #video
Как дизайн уровней в Uncharted 3 позволяет направлять игроков без целеуказателей в HUD.
youtu.be/k70_jvVOcG0
Как дизайн уровней в Uncharted 3 позволяет направлять игроков без целеуказателей в HUD.
youtu.be/k70_jvVOcG0
YouTube
Why Nathan Drake Doesn't Need a Compass
🔴 Get bonus content by supporting Game Maker’s Toolkit - https://gamemakerstoolkit.com/support/ 🔴
How does Naughty Dog let you explore the worlds of Uncharted and The Last of Us without the clunky navigational aids found in other linear games? The answer:…
How does Naughty Dog let you explore the worlds of Uncharted and The Last of Us without the clunky navigational aids found in other linear games? The answer:…
👍4❤1
#gamedev #video
О том, как в Mirror's edge: Catalyst сломан открытый мир и о том, как он мог бы работать на примере Burnout paradise: игре, в котором открытый мир работает.
youtu.be/gg0Nbfzo_00
О том, как в Mirror's edge: Catalyst сломан открытый мир и о том, как он мог бы работать на примере Burnout paradise: игре, в котором открытый мир работает.
youtu.be/gg0Nbfzo_00
YouTube
What Mirror's Edge Catalyst Should Have Learned From Burnout Paradise
🔴 Get bonus content by supporting Game Maker’s Toolkit - https://gamemakerstoolkit.com/support/ 🔴
Mirror's Edge finally got a sequel in Mirror's Edge Catalyst, but the addition of an open world has polarised fans of the first game. Let's dive deep into the…
Mirror's Edge finally got a sequel in Mirror's Edge Catalyst, but the addition of an open world has polarised fans of the first game. Let's dive deep into the…
Forwarded from Programmer memes
Редактор: «Нам надо изменить слово Тинькофф на Т-банк на всем сайте».
Программист: «Ни слова больше»
8️⃣ Programmer memes
Программист: «Ни слова больше»
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36🤡5
Forwarded from Аниме-блог | Cheetamaru
Игра слов в названиях 20 аниме — от Psycho-Pass до Kill la Kill
Игра слов — действенный способ привлечь внимание зрителей. Сериал сразу же запоминается необычным каламбуром или забавным сочетанием фраз в заголовке.
В статье я перечисляю 20 аниме-сериалов, в названиях которых применяется японская игра слов. Список поделён на три группы: Каламбуры, Словослияние и Особенности японского языка.
(15 000 символов / 12 мин. чтения):
Telegraph
#текст
Игра слов — действенный способ привлечь внимание зрителей. Сериал сразу же запоминается необычным каламбуром или забавным сочетанием фраз в заголовке.
В статье я перечисляю 20 аниме-сериалов, в названиях которых применяется японская игра слов. Список поделён на три группы: Каламбуры, Словослияние и Особенности японского языка.
(15 000 символов / 12 мин. чтения):
Telegraph
#текст
Telegraph
Игра слов в названиях 20 аниме — от Psycho-Pass до Kill la Kill
Игра слов — действенный способ привлечь внимание зрителей. Сериал сразу же запоминается необычным каламбуром или забавным сочетанием фраз в заголовке. Поэтому некоторые авторы любят использовать этот приём в своих произведениях. В статье я перечисляю 20 аниме…
👍5🌚1
Forwarded from лингвист реалист
А это мои любимые шутки про отличную учёбу.
Вот я совершил такую ошибку: беспроблемно учился на "пятёрки" по шестой класс. А потом стало сложно, да и надоело. Но имидж уже устаканился - как в школе, так и в семье. В итоге снижение успеваемости было воспринято как катастрофа. В том числе и с моей стороны: с одной стороны, я был рад перестать гоняться за оценками, с другой - мне долго за это было стыдно.
Интересно, насколько человек реально способен учиться в старших классах на настоящие, не "натянутые" отлично? Ну типа одинаково хорошо шарить в алгебре, истории, иностранном, химии, экономике да ещё и отжиматься на физре как боженька? Это уже что-то за пределами нормальности, нет?
Кстати, вы помните, где лежит ваш аттестат?
Вот я совершил такую ошибку: беспроблемно учился на "пятёрки" по шестой класс. А потом стало сложно, да и надоело. Но имидж уже устаканился - как в школе, так и в семье. В итоге снижение успеваемости было воспринято как катастрофа. В том числе и с моей стороны: с одной стороны, я был рад перестать гоняться за оценками, с другой - мне долго за это было стыдно.
Интересно, насколько человек реально способен учиться в старших классах на настоящие, не "натянутые" отлично? Ну типа одинаково хорошо шарить в алгебре, истории, иностранном, химии, экономике да ещё и отжиматься на физре как боженька? Это уже что-то за пределами нормальности, нет?
Кстати, вы помните, где лежит ваш аттестат?
👍4😁1🤔1😢1
лингвист реалист
А это мои любимые шутки про отличную учёбу. Вот я совершил такую ошибку: беспроблемно учился на "пятёрки" по шестой класс. А потом стало сложно, да и надоело. Но имидж уже устаканился - как в школе, так и в семье. В итоге снижение успеваемости было воспринято…
BTW в аттестате у меня одни пятёрки. Не то чтобы мне это сильно помогло, на самом деле...
😁4😭3🤣1
#prog (#suckassstory?)
Костыли Linux из-за "просто текста" в /proc.
Link (самая ранняя версия с этой проверкой)
Костыли Linux из-за "просто текста" в /proc.
Link (самая ранняя версия с этой проверкой)
😁8🤡2🤔1
Блог*
#prog #rust #dotnet #article Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска Compiling Rust for .NET, using only tea and stubbornness! автор опубликовал три заметки, рассказывающие…
#prog #rust #dotnet
Компилятор из Rust в .NET достиг состояния, когда он может скомпилировать guessing game.
old.reddit.com/r/rust/comments/1db8vmg/media_the_rust_to_net_compiler_backend_can_now/
Компилятор из Rust в .NET достиг состояния, когда он может скомпилировать guessing game.
old.reddit.com/r/rust/comments/1db8vmg/media_the_rust_to_net_compiler_backend_can_now/
🔥7😁4
#prog #rust #rustreleasenotes
Вышла версия Rust 1.79.0! Как обычно, тут только избранные моменты, остальное в полных заметках.
▪️Стабилизированы inline const блоки! Одно из самых непосредственно полезных применений — array repeat expression. Если раньше приходилось писать что-то в духе:
, то теперь можно писать просто
(конечно, при условии, что вывод типов поймёт конкретный тип
Ещё одно полезное применение — статические ассерты. Вместо того, чтобы выписывать
Это тоже работает в обобщённых контекстах, но по очевидным причинам при зависимости от обобщённых параметров может выстрелить только при мономорфизации:
К сожалению, сейчас у этой фичи есть ограничения. Именно,
Ещё одна особенность — если
▪️Теперь можно писать ограничения на ассоциированный тип прямо в баундах:
▪️Продление времени жизни ссылок на временные значения теперь работает и при возврате из
▪️main теперь может быть реэкспортом, а не определена непосредственно в корне иерархии:
Так можно использовать и функцию из другого крейта.
▪️Команды cargo теперь по умолчанию учитывают MSRV (minimal supported Rust version) при выборе версий зависимостей.
▪️rustdoc теперь показывает имена в результатах поиска один раз, даже если они доступны по нескольким путям из-за реэкспортов.
▪️У трейта
Вышла версия Rust 1.79.0! Как обычно, тут только избранные моменты, остальное в полных заметках.
▪️Стабилизированы inline const блоки! Одно из самых непосредственно полезных применений — array repeat expression. Если раньше приходилось писать что-то в духе:
const EMPTY: Option<Vec<u8>> = None;
let foo = [EMPTY; 100];
, то теперь можно писать просто
let foo = [const { None }; 100];
(конечно, при условии, что вывод типов поймёт конкретный тип
Option
внутри массива). Более того, в обобщённых контекстах это тоже работает:fn create_none_array<T, const N: usize>() -> [Option<T>; N] {
[const { None }; N]
}
Ещё одно полезное применение — статические ассерты. Вместо того, чтобы выписывать
_
-константы, можно просто окружить ассерт const {}
:fn broken() {
const { assert!(2 + 2 == 5) } // ошибка компиляции
}
Это тоже работает в обобщённых контекстах, но по очевидным причинам при зависимости от обобщённых параметров может выстрелить только при мономорфизации:
use std::mem::size_of;
const fn foo<T>() -> usize {
const { assert!(size_of::<T>() > 1) }
size_of::<T>() - 1
}
fn main() {
_ = foo::<i32>();
_ = foo::<u8>(); // ошибка компиляции
}
К сожалению, сейчас у этой фичи есть ограничения. Именно,
const
-блоки можно использовать только в выражениях, но нельзя, в отличие от обычных констант, использовать их в паттернах (на это сейчас есть отдельная фича). Так что следующий код, к сожалению, пока что требует nightly (и #![feature(inline_const_pat)]
):enum Enum {
Foo,
Bar,
Baz,
}
impl Enum {
fn from_usize(n: usize) -> Result<Self, usize> {
use Enum::{Foo, Bar, Baz};
Ok(match n {
const { Foo as _ } => Foo,
const { Bar as _ } => Bar,
const { Baz as _ } => Baz,
_ => return Err(n),
})
}
}
Ещё одна особенность — если
const
-блок находится в статически недостижимом коде, то он может быть не вычислен и, соответственно, не вызвать ошибку компиляции на ошибочной константе.▪️Теперь можно писать ограничения на ассоциированный тип прямо в баундах:
T: Trait<Assoc: Bounds...>
. В stabilization report рассказывается более подробно, чем это полезно. Одно из применений — возможность указывать ограничения на ассоциированных типах на неназываемых impl Trait
типах.▪️Продление времени жизни ссылок на временные значения теперь работает и при возврате из
if
и match
. Этот код компилируется сейчас и не компилировался раньше:let a = String::from("a");
let _ = if true { &a } else { &String::from("b") };
let _ = match () {
() => &String::from("c"),
};
▪️main теперь может быть реэкспортом, а не определена непосредственно в корне иерархии:
mod foo {
pub(crate) fn bar() {}
}
use foo::bar as main;
Так можно использовать и функцию из другого крейта.
▪️Команды cargo теперь по умолчанию учитывают MSRV (minimal supported Rust version) при выборе версий зависимостей.
▪️rustdoc теперь показывает имена в результатах поиска один раз, даже если они доступны по нескольким путям из-за реэкспортов.
▪️У трейта
Clone
есть метод clone_from
с сигнатурой fn(&mut self, source: &Self)
, который позволяет перезаписать содержимое self
напрямую вместо того, чтобы замещать self
полностью свежей копией. Однако это только возможность, и большинство типов используют реализацию по умолчанию: *self = source.clone()
. Более того, для некоторых типов переопределение этого метода может иметь наблюдаемое изменение поведения по сравнению с реализацией по умолчанию, даже если clone_from
не имеет намеренно отличную семантику. По этой причине std
теперь документирует переопределённый метод clone_from
на коллекциях.🔥3
▪️Стабилизирована пачка штук в
🔸num::NonZero<T>. Именно, теперь это один тип, а не 12! Старые имена вроде
🔸<[T]>::split_at{, _mut}_unchecked — unsafe вариант
🔸path::absolute возвращает каноничную версию пути без реального обращения к файловой системе. Как следствие, она не следует по символическим ссылкам и может вернуть несуществующий путь.
🔸<[u8]>::utf8_chunks — итератор, возвращающий валидные в UTF-8 куски набор байт. Конкретно этот итератор возвращает Utf8Chunk, позволяющий извлечь валидную и невалидную части (последняя — длиной не более трёх байт). Это позволяет, помимо всего прочего, сделать аналог String::from_utf8_lossy, который будет иначе обрабатывать невалидные UTF-8 последовательности.
🔸Методы len и is_empty на сырых указателях на слайсы (включая
🔸Метод is_aligned на сырых указателях (включая
🔸Методы
Также некоторые функции теперь можно вызывать в
std
. Некоторые из них:🔸num::NonZero<T>. Именно, теперь это один тип, а не 12! Старые имена вроде
NonZeroU8
всё также доступны, но теперь являются просто алиасами на NonZero
с соответствующим типовым параметром. Это изменение теперь позволяет с лёгкостью записывать ненулевые варианты чисел, которые сами определённы через алиасы — такие, как, например, множество типов из libc.🔸<[T]>::split_at{, _mut}_unchecked — unsafe вариант
split_at
без проверки границ. Честно, я не понимаю, почему это добавили только сейчас.🔸path::absolute возвращает каноничную версию пути без реального обращения к файловой системе. Как следствие, она не следует по символическим ссылкам и может вернуть несуществующий путь.
🔸<[u8]>::utf8_chunks — итератор, возвращающий валидные в UTF-8 куски набор байт. Конкретно этот итератор возвращает Utf8Chunk, позволяющий извлечь валидную и невалидную части (последняя — длиной не более трёх байт). Это позволяет, помимо всего прочего, сделать аналог String::from_utf8_lossy, который будет иначе обрабатывать невалидные UTF-8 последовательности.
🔸Методы len и is_empty на сырых указателях на слайсы (включая
NonNull<[T]>
)🔸Метод is_aligned на сырых указателях (включая
NonNull
)🔸Методы
unchecked_{
add,
sub,
mul}
на примитивных числовых типах, которые дают UB при переполнении. Также некоторые функции теперь можно вызывать в
const
-контексте, включая геттеры Location.doc.rust-lang.org
NonZero in core::num - Rust
A value that is known not to equal zero.
❤🔥4❤2🔥1
ТГ Шевченка
Photo
Русская служба The Moscow Times
Путин предложил прекратить огонь в Украине и назвал три условия
Россия готова прекратить огонь в Украине, если Киев выведет войска из четырех оккупированных РФ регионов и объявит об отказе от вступления в НАТО, а Запад примет решение отменить санкции.
🤡13❤1