Эссе о разработке игр, мышлении и книгах

Системное мышление на практике

Спросили, использовал ли я системное мышление в реальной жизни и как оно мне помогло. А вот и не знаю, использовал ли :-)

Конечно знаю: использовал, помогло. Но чтобы ответить подробнее надо больше строк.

Есть несколько нюансов, которые усложняют ответ.

Во-первых, термины «система», «системное» перегружены значениями. Особенно в русском языке. В непрофессиональном контексте они имеют очень широкую трактовку, а профессионалы не горят желанием формализировать понятия. Особенно в рунете. В англоязычной среде дела идут лучше, но я бы не сказал, что на много.

Во-вторых, «системное мышление», «системная инженерия» — это мемплексы — наборы мемов-практик. Если я использую 2 практики из 10 — я использую мемплекс? А если 51 из 100? Кто вообще определяет входит практика в мемплекс или нет?

Использовать системную инженерию то же самое, как использовать гибкие методологии разработки. В том или ином виде их все используют, но в разных вариантах и с разным успехом. Эталонный agile вы вряд ли встретите, как и эталонную системную инженерию.

Поэтому отвечу сразу для нескольких контекстов.

Далее

Как я знакомлюсь с историей

История — наука во многом субъективная — каждый трактует её как хочет. Поэтому я стараюсь избегать исторических книг от историков. Особенно от современных. Особенно жизнеописаний. Особенно научно-популярных.

Однако, история — штука интересная и полезная для формирования более-менее объективной картины мира. Либо набиваешь шишки на личном опыте, который ограничен временем жизни и источниками информации, либо изучаешь историю. Можно ещё копать в сторону психологии, антропологии и смежных дисциплин, но там свои нюансы.

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

Когда человек пишет что-то, он, обычно, хочет повлиять на своих современников. Максимум, на ближайших потомков. Поэтому, через 100, 200, 1000 лет после автора, становится намного легче вычленять суть из его текстов:

  • Совершенно точно автор не пытается залезть именно в ваш мозг.
  • Мир сильно изменился и многие авторские искажения видны на контрасте.
  • Контекст, в котором жил автор, известен не хуже, чем современная повестка, а часто — лучше. Это упрощает понимание мыслей и поступков автора.
  • Вклад автора в развитие цивилизации, его место в истории, если не определены точно, то по крайней мере под них размечена область на его полотне.
  • Часто известно зачем именно автор писал свои тексты.

Конечно, не всегда получается придерживаться этого принципа.

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

В остальном же, читать явно пропагандистские Записки Цезаря или наполовину технический судовой журнал Джеймса Кука, о котором будет следующий пост, в плане восприятия информации на много легче, чем книги наших современников. Вы могли обратить внимание, что в их обзорах я периодически жалуюсь на проскальзывание повестки со слабым обоснованием.

Типы в Python не радуют

Сделал ещё один заход на контроль типов в Python. На этот раз со стороны собственной библиотеки для контроля изменений типов переменных в runtime.

Общие выводы ясны из названия поста, хотя полученная библиотека более-менее работает и я попытаюсь её со временем довести до ума. Если разработчики Python наведут порядок у себя в проекте.

Задумка

Как уже писал в обозрении актуального состояния типизации в Python, правильный подход к контролю типов в языке с динамической типизацией — делать контроль во время исполнения программы.

Краткое обоснование:

  1. Важная часть семантики программы на динамическом языке программирования конструируется во время выполнения программы.
  2. Поэтому закодировать её статически не получится — сложно и дорого.
  3. Поэтому статический анализ типов для динамических языков не пригоден — он игнорирует критические части логики и провоцирует разработчиков на создание костылей для обхода этого игнорирования.
  4. Поэтому анализировать типы имеет смысл только время выполнения программы.

Из библиотек для контроля типов Python во время выполнения можно выделить только typeguard, которая позволяет контролировать входные и выходные параметры функций и методов. Это уже хорошо и удобно, но хочется большего.

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

Библиотеку для такой функциональности я и попытался реализовать, но столкнулся с суровой реальностью.

Далее

О блоге

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

Он состоит из трёх частей:

  • Исторической справки — как я маялся с блогом, как пришёл туда, куда пришёл.
  • Ответа на вопрос почему я веду блог.
  • Размышлений о текущем состоянии блога.

Первая часть вряд ли вам будет интересна — это скорее подводка для меня к следующим  главам.

Далее

Больше новостей о процедурной генерации

Примеры генерации 3D модели по запросу "A capybara made of voxels sitting in a field"

Примеры генерации 3D модели по запросу "A capybara made of voxels sitting in a field"

На этот раз Open AI рассказали о новой нейронке (на русском) а-ля GPT-3, но для изображений. Пример её работы можно видеть на заглавной картинке. Изображения сформированы для фразы «A capybara made of voxels sitting in a field» (капибара из вокселей, которая сидит в поле).

На странице с анонсом можно посмотреть другие примеры работ, включая разные способы изображения (3D рендер, изометрию, низкополигональные модели, etc).

Результаты, конечно, кривоваты. Но, надо учесть два нюанса:

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

А вот если бы её допилить, специализировать на фэнтези, да подключить к Сказке… Но у меня столько денег нет :-) А у кого-нибудь обязательно найдутся.

Постепенно вырисовывается новый пайплайн для арта:

  • нейронка для постановки задания;
  • нейронка для генерации контента;
  • нейронка для устранения неточностей на картинке;
  • нейронка для стилизации;
  • нейронка для вылизывания;
  • нейронка для выделения 3D меша;
  • нейронка для оптимизации меша;
  • нейронка для анимации;

Интеграция контента, позиционирование камер, цвет, свет, звук и прочее — тоже нейронки. Ну вы поняли :-D

Товарищи, которые научатся делать эти лопаты, сорвут большой куш.