Factorio ракета как пользоваться
Ракета в Factorio выполняет не совсем привычную для реальной жизни роль: здесь ее предназначение ограничено лишь снарядом для ракетницы. Так или иначе, ракета здесь является грозным оружием, очень эффективным для уничтожения вражеских баз. Однако просто так ее получить не выйдет - нужно предварительно провести исследование "Ракетостроение".
При том, что даже базовый урон у ракеты в Factorio очень внушительный, его можно еще больше увеличить, проводя исследование технологии "Ракетный урон".
Ракета также имеет своеобразную модификацию, улучшенную разновидность под названием "Разрывная ракета". Точно так же применяется в качестве снаряда для ракетницы и имеет огромный радиус действия. Но для производства нужно исследование "Взрывные боеголовки".
Совместная игра в Factorio — лучшее собеседование для программистов, что мы проводили
В последнее время много копий сломано вокруг технических собеседований. Очевидно, что инвертирование двоичного дерева на доске практически никак не связано с практическими навыками реального программиста. Примитивный Fizzbuzz по-прежнему остаётся самым эффективным тестом. Как следствие, выросло внимание к опенсорсным проектам, но оказалось, что это тоже не очень хороший показатель, потому что у большинства профессионалов нет на них времени.
Все эти методы интервью не сравнятся с очень простой метрикой: совместная игра в Factorio. Прохождение всего цикла Factorio — практически идеальный показатель, насколько хорошо человек решает общие технические проблемы. Можно даже настроить прохождение игры на основе будущей должности, чтобы лучше понять, как кандидат справится со своей ролью.
Factorio?
Factorio — это игра об автоматизации. Вероятно, лучшим введением будет этот трейлер, но, по сути, ваша задача — построить автоматизированный завод, способный запустить ракету в космос.
Начинаете с нуля. Добываете вручную железную руду и камень, строите плавильную печь, чтобы плавить руду в железные пластины, из которых можно скрафтить автоматический твёрдотопливный бур. Можно самостоятельно забирать железную руду из бура и закладывать её в плавильню, но более эффективно использовать автоматический конвейер. Потом можно использовать полученное железо, чтобы сделать другой бур, который автоматизирует добычу угля. Затем строится конвейер для забора угля и конвейер для его передачи в бур. Эта крошечная фабрика производит железные пластины, из которых можно сделать третий бур — и начать добычу медной руды, которая позволяет крафтить медные плиты, а из них можно сделать медный провод, необходимый для работы погружного насоса. В сочетании с паровым котлом и паровым двигателем это даёт нам первую электроэнергию. Её можно использовать для исследовательского центра и изобретения новых технологий, таких как сборочный автомат. Как только разблокируете сборочные автоматы, можете использовать сделанный вручную провод для создания сборочной машины, которая будет автоматически изготавливать эти провода.
Выбор направления
Игра начинается без установленной цели и почти без направления. Ведущий программист должен быть способен изучить UI и определить цель, а затем разработать план для её достижения. От джуниора ожидают правильного выполнения задач, поставленных ведущим разработчиком. Предполагается, что стажёр работает с наставником, но джуниор должен быть в состоянии самостоятельно устранить основные проблемы со своим кодом, прежде чем просить помощи от старшего. Миддл должен уметь работать независимо, как только ему дают задание, но от него не ожидают архитектурного проектирования.
Конкретные ожидания можно сформулировать так:
Командная работа
Важнейшим аспектом разработки программного обеспечения является умение работать в команде. Это означает координацию усилий с другими людьми, удовлетворение потребностей чужих проектов и сотрудничество с командой, а не самостоятельную работу, когда вы отказываетесь изменить свой дизайн, чтобы помочь интегрировать его с чьей-то работой. Естественно, такие ситуации всё время возникают в Factorio, потому что стандартные чертежи ограничены физическим пространством. В результате нужно тщательно изучить действия других людей, а иногда скорректировать свой дизайн, чтобы вписаться в ограничения по размеру или приспособиться к какому-то чужому чертежу, который занял больше места, чем ожидалось.
Если игрок уйдёт в себя, начнёт делать всё сам или молча исправлять проблемы, это быстро навлечёт на него гнев команды по тем же самым причинам, по которым коллеги злятся на программистов-ковбоев. К счастью, в Factorio есть встроенный эквивалент git blame : он показывает последнего игрока, который изменил любую сущность. Таким образом, если кто-то поставил костыль и не сообщил команде о проблеме, то когда этот костыль наконец сломается — все узнают, кто виноват. Если хотите выиграть, придётся плотно сотрудничать с товарищами по команде.
Отладка
Одним из главных навыков для программиста является отладка. Это, пожалуй, самая очевидная параллель между Factorio и реальной разработкой ПО. Что-то может сломаться очень далеко от фактического источника проблемы. Способность быстро выяснить реальную проблему — это критический навык, и процесс мышления почти идентичен отслеживанию причины сбоя в реальной программе. Если перестал работать сборочный автомат, сначала нужно проверить выходящие потоки. Потом проверить, какого ингредиента не хватает на входе. Затем проследить ингредиент по фабрике, чтобы узнать, где он производится. И повторять процесс снова и снова, до тошноты.
Отладка в Factorio быстро усложняется. Как только вы построите нефтеперерабатывающий завод, то займётесь крекингом, где на выходе три разных трубы (мазут, дизельное топливо и попутный нефтяной газ), и если какая-то из них по какой-то причине стопорится, то весь завод прекращает работу.
Бывали случаи, когда весь завод останавливался, потому что вы начали исследовать что-то, не требующее жёлтой науки. В результате вы перестали использовать каркасы дронов, которым перестали поставляться электрические двигатели, где использовалась смазочная жидкость, для производства которой забирался мазут. В итоге стопорилась выходящая труба на нефтеперерабатывающем заводе, из-за чего у вас заканчивался попутный нефтяной газ (petrolium), что останавливало производство пластмассы. Как результат, прекращался выпуск сигнального красного провода — и вся фабрика выходила из строя. Опытные игроки предвидят подобные сценарии и внедряют самобалансирующийся крекинг нефти, чтобы всегда гарантировать баланс системы. Такой завод остановится только при закупорке выходящей трубы с попутным газом. Если хорошему программисту дадут сломавшийся нефтеперерабатывающий завод, он обычно сможет проследить проблему до источника, понять, что произошло, и быстро попытаться найти решение. С другой стороны, если человек просто плюхает на землю пару новых резервуаров без веской причины (он абсолютно уверен, что смазочная жидкость будет нужна всегда), то это большой красный флаг на методы решения проблем в его программах.
Подобные ситуации позволяют Factorio точно сымитировать сложные взаимозависимости, с которыми обычно имеют дело программисты. Сложность возрастает по мере добавления в геймплей новых концепций. Это очень похоже на рост сложности от дополнительных уровней абстракции в отладке сбоя, который мог произойти глубоко внутри одного из используемых вами фреймворков.
Код-ревью
Сопротивление фидбеку без веских причин — хорошо известный красный флаг. Кроме того, настороженность вызывает программист, который неохотно принимает предлагаемые изменения и отказывается соответствующим образом корректировать будущие проекты. В итоге ему придётся постоянно напоминать о необходимости придерживаться какого-то стандартного способа решения проблемы. При этом человек не объясняет, почему ему не нравится предлагаемый метод. Это потенциально бомба замедленного действия в организации, потому что без присмотра он может быстро накопить технический долг для своих коллег. Такого рода проблемы практически невозможно уловить на традиционном собеседовании, только на стажировке.
Стиль написания кода и фреймворки
Отказ следовать советам — лишь часть гораздо большей проблемы, когда программист не способен нормально интегрироваться в существующую структуру. Есть много способов построить фабрику в Factorio, и каждый требует стандартных методов сборки. Несоблюдение стандартов быстро затормозит всю фабрику, часто тонкими способами, которые не очевидны неосторожному разработчику.
Конструкция магистрального ленточного конвейера включает 4-8 конвейеров, разделённых на две секции (для подземных конвейеров). Он помещается в центре фабрики, и всё производство происходит перпендикулярно ленте. Эта конструкция опирается на несколько правил, нарушение которых может привести к полному хаосу. Во-первых, всегда следует использовать разделитель на выходе с конвейера. Никогда нельзя перенаправлять всю ленту: пустое пространство для другой ленты означает, что вы теряете целый конвейер ресурсов, даже после апгрейда. Во-вторых, все заводы должны масштабироваться перпендикулярно основному конвейеру. Невозможность быстрого масштабирования приведёт либо к огромной потере пространства, либо к невозможности масштабирования производственной линии, потому что она окружена другими производственными линиями.
Логистическая сеть
Есть разные способы построения логистических сетей. Самый простой — с сундуками пассивного снабжения. Но есть другой метод — сундуки хранения с фильтром, который решает проблему с мусором. Оба метода требуют правильной установки ограничителей в нужных местах. Сундуки пассивного снабжения обычно ограничены пространством сундука. К сундукам хранения нужно поставить манипулятор для подключения сундука к логистической сети. И обеспечить не менее N предметов перед установкой манипулятора. Если забыть про эти шаги, то будут впустую потрачены огромные ресурсы. Если программист постоянно забывает про ограничители на выходах — это красный флаг, что человек небрежно относится к производительности в реальных приложениях.
В других случаях команда может применять заранее разработанные чертежи, такие как проект ядерного реактора или роботизированного завода на дронах (bot factory). Они могут быть крайне сложными, но если сделать над собой усилие и разобраться, то они чрезвычайно экономят время. Остерегайтесь кандидатов, которые не хотят настраивать на заводе новый элемент просто потому, что не могут отследить сложную управляющую логику. Или кто бросает попытки разобраться в алгоритме функционирования такого завода, несмотря на очевидные преимущества дронов перед конвейерами.
Неоптимальный дизайн завода на дронах, источник
Многопоточность
Поезда в Factorio — прямой аналог многопоточности: один поезд — это один поток выполнения, а каждое пересечение поездов или остановка — место в памяти, куда два потока потенциально могут писать одновременно. Светофоры — это блокировки (или мьютексы). Все баги в железнодорожной сети проявляются точно так же, как состояние гонки в ПО, потому что они буквально являются физическим состоянием гонки. Все компромиссы применимы и здесь — слишком длительная блокировка уменьшает пропускную способность. Неправильное проектирование светофоров обычно вызывает взаимоблокировку, точно так же, как в программном обеспечении, потому что в итоге возникает циклическая зависимость блокировок. Самая распространённая взаимоблокировка — это когда поезд слишком длинный и неожиданно блокирует второй перекрёсток, ожидая входа в первый. Затем этот второй перекрёсток препятствует отправлению другого поезда, предотвращая разблокировку первого перекрёстка.
Количество путей в железнодорожной сети соответствует количеству ядер CPU. Один железнодорожный путь трудно масштабировать больше, чем на несколько полос, потому что пропускная способность всей системы очень быстро ограничивается, даже с зонами ожидания. Наиболее распространённой конструкцией является двухполосная конструкция, по одной полосе в каждую сторону. Здесь появятся проблемы с пропускной способностью, когда возникнет необходимость постоянно разгружать поезда. Поэтому в больших железнодорожных сетях минимум по четыре полосы, причём две внешние действуют как объездные пути, чтобы избежать пересечений, когда это возможно.
Проблемы со светофорами в этих системах могут проявиться через фантастический промежуток времени. Единственный пропущенный светофор в одной железнодорожной сети однажды вызвал взаимную блокировку после корректной работы в течение двух недель. Так же и в программах состояние гонки может проявляться только раз в месяц, когда под сильной нагрузкой возникает высокая конкуренция потоков.
Масштабирование
Как и в программном обеспечении, масштабирование производства в Factorio вводит новые проблемы в оригинальный дизайн чертежей и часто требует полной перестройки для максимального повышения производительности, с установкой модулей продуктивности и модулей скорости с маяками. Конвейеры становятся узким местом производительности даже на максимальной скорости ленты, заставляя искать способы разделить конструкции так, чтобы позже можно было вставить больше лент, или разделить заводы на модули.
Управление логистической сетью само по себе становится логистической задачей в конце игры из-за того количества проблем, какое вызывают экспансивные дрон-сети. Как правило, нужно приступить к сегментированию логистической сети и либо использовать поезда для транспортировки товаров между сегментами, либо строить сундуки запроса и снабжения, которые будут передавать товары через границы.
В конце игре для управления поездами требует перехода с push-архитектуры на pull-архитектуру, поскольку push-архитектура не справляется с высокой пропускной способностью. Это неизбежно приводит к использованию функции Train Limit и изучению, как использовать логические сети для кодирования базовой логики, чтобы станция запрашивала поезд только тогда, когда действительно готова полностью заполнить его ресурсами, вместо обычной игровой тактики в начале игры, когда куче поездов просто даётся команда ехать за железом. Новая схема сводит к минимуму количество поездов и при этом гарантирует, что в сети обслуживаются все станции.
Часто бывает, что ограничения входных линий в сборочный автомат и лимиты скорости манипулятора требуют перепроектирования заводов вокруг, точно так же, как высокоскоростные вычисления требуют знания узких мест в работе CPU. Эти узкие места почти никогда не являются проблемой, пока вы не достигнете определённого масштаба, но после этого начинают ограничивать производительность.
Микросервисы и модули
В конце концов, заводы становятся настолько огромными, что приходится отказаться от простого дизайна с основным ленточным конвейером или спагетти-дизайна — и перейти на более масштабируемую структуру. Чтобы выйти на мега-уровень, заводы обычно используют либо систему поездов, либо модульную систему, которая примерно соответствует микросервисам или архитектуре с плагинами.
Модульная архитектура пытается сохранить некое подобие основного конвейера, но вместо этого разделяет ленты на заводе и использует модульные блоки, которые принимают стандартные входы и стандартные выходы. Иногда этого можно достичь полностью с помощью дронов, но обычно материалы приходится доставлять по конвейеру на большие расстояния. Это очень похоже на систему модулей для монолитного приложения с теми же компромиссами.
Такие мегабазы представляют верхний уровень дефолтного сервера Factorio. Конечно, существует много модов, которые гораздо усложняют игру.
Распределённые системы
Space Exploration — полностью переделанная версия Factorio для колонизации космоса. Здесь планеты становятся ограниченными ресурсами, требуя от игроков колонизировать другие миры и использовать ракеты для передачи ресурсов между планетами. Из-за огромной задержки с доставкой материалов между планетами, координация этих баз приводит к возникновению проблем, сходных с глобально распределённой системой баз данных. Даже в логической сети приходится бороться с задержкой, потому что автоматическая система теряет из виду элементы, которые запущены, но ещё не достигли целевой планеты. Если это не учитывать, возникают дубликаты запросов для всех нужных элементов. С точно такой же проблемой сталкиваются распределённые системы при попытке обеспечить согласованность между узлами.
Вывод
В целом софтверная индустрия не имеет ни малейшего представления, как находить и нанимать лучших разработчиков. Наверное, совместная игра в Factorio стала лучшим техническим собеседованием, которые мы когда-либо проводили. И это нас сильно смущает. Такое собеседование дико непрактично, занимает более 20 часов в мультиплеере с первого раза или 8 часов для команды опытных игроков. Что из этого можно извлечь? Не знаю. Мы, конечно, не можем перейти на Factorio в качестве метода собеседований — с таким же успехом можно просто дать кандидату домашнее задание.
Интересный этюд Factorio: симулятор завода
Эта игра — очередная очень интересная с точки зрения механики бета, представляющая заодно своеобразный язык программирования.
И здесь самое забавное — это кривая обучения и интерфейсы. Давайте пройдёмся по этим моментам, благо есть отличные находки.
Вы играете за инженера, очнувшегося на незнакомой планете около обломков своего космического корабля. Поскольку вы инженер, а не какой-нибудь агроном, вместо космической картохи предстоит развить технологию и собрать ракету с нуля. В общем, старая добрая игра, описанная у Вернора Винджа — «восстанови цивилизацию за минимальный срок».
Первая задача — используя технологии бронзового века, получить прединдустриальные, а затем собрать жестяной радар, чтобы найти основную часть корабля. Затем — добраться туда на каком-то транспортном средстве. Там забрать ядро компьютера и получить доступ ко всем данным по тому, как правильно делать ракеты, бронебойные патроны, скафандры и прочую мелочь, важную для выживания.
Самое первое, что до безумия удивляет — это то, что это стратегия, где главный герой играет за скролл. Серьёзно, ваш персонаж по центру экрана — это всегда фокус ввода, внимания и интереса. Вместо того, чтобы обезличивать игру, вы получаете сборочный цех с инвентарём на ножках. Инженер! Как быстро выясняется, ещё наш инженер умеет стрелять. Получается некий гибрид Crimson Land (10%) и симулятора реконструкции отечественного автопрома (90%).
Итак, суть. Есть базовые ресурсы — уголь, камень, медь, железо, вода (позже добавляется знание о нефти и солнечной энергии). Задача — собрать ракету. Используя только свои руки в момент начала. В отличие от обычных craft&explore игр (лучший пример из относительно свежего — Radiation Island для планшетов), здесь основной интерес смещён на конвейерное производство и автоматизацию всего того, до чего не может дотянуться ваш персонаж руками.
А ресурсов надо столько, что руками он просто не сможет всё сделать. Даже чтобы приготовить обычную стальную балку, нужно очень сильно попотеть — открыть принципы переработки стали, организовать переплавку металла, собрать печь, обеспечить подвоз топлива (то есть раскопать угольное месторождение) и так далее.
К счастью, наш персонаж не спит, ничего не ест, быстро лечится от ранений сам и умеет собирать вручную почти всё, включая сложные микросхемы. Правда — с линейной скоростью.
Дальше начинается первый этап — вы вручную делаете немного железных пластин, кирпичей и так далее, и собираете первую автоматизированную линию, добывающую руду и копающую уголь. Плюс осваиваете паровой электродвигатель. На выходе из первого этапа — конвейерная лента с железными пластинами, медными пластинами и провод с настоящим током. Из этого можно уже собрать что угодно.
Дерево науки огромное:
Дальше вы исследуете автоматизацию и начинаете делать линии по сборке разных нужных штук — конвейерных лент, манипуляторов, сборочных автоматов, научных пакетов. В общем, всего-всего. Выглядит это примерно так. На рисунке — простейший пример:
Синяя лента сверху — это приходящая железная руда, которая манипуляторами ставится в печи, затем переплавляется в железную пластину. Потом она выгружается из печи манипуляторами на другую ленту. С другой стороны подходят медные пластины. Цель сборочного этюда — получить красные микросхемы. Для производства красной микросхемы нужны зелёные микросхемы, кабель и стальные пластины. Для кабеля нужна медь. Для зелёной микросхемы нужен кабель и стальная пластина. Всё просто.
Конечно, при legacy-driven-проектировании ситуация может немного усложниться:
К моменту, когда вам понадобятся силовые поля, база начнёт приобретать вот такой вид:
Кстати, обратите внимание. как всё красиво дымит и загрязняет окружающую среду. Планета обитаема (и не только вами), и местным кусакам и плевакам (функциональные названия) совершенно не нравится нюхать ваш дым. Они приходят кусаться и плеваться, соответственно. Поэтому вы ещё играете с ними в «перебей их всех и разрушь их гнёзда». Часто это выглядит вот так:
А вот прямо этюд из последних уровней Кримсона:
Планета выглядит примерно так:
Красное по центру — это ваша база, загрязняющая природу. Красные скопления по краям — это гнёзда «зергов», их надо время от времени пропалывать, если зерги лезут к базе. С краю пустыни сверху видно добывающий аванпост с нефтью. Вообще, распределённая база и коммуникации — это одна из важных граней игры. Например, можно играть в Transport Tycoon:
Или строить сеть на летающих дронах:
Ещё одна вещь, которая нам важна — это экипировка своего скафандра. Силовые щиты, экзоскелетные ноги, батарейки, дронстанция, прибор ночного видения, реактор, наплечная турель — куча всего:
Как только вы с этим освоитесь, начинается самая странная часть игры. А именно — автоматизация автоматизации или рефакторинг. Оказывается, дикое удовольствие может доставлять не только кайфно шипящий тормозами поезд «Hello, world!», не только уничтоженное гнездо кусак, но и то, как вы переделаете все процессы, чтобы они шли без вашего участия.
Вообще, тут надо чуть отвлечься и сказать про то, как распределён даунтайм игры:
И начинается рефакторинг базы: к чёрту невозобновляемые источнии энергии, рулит бесконечная нефть и солнце. К чёрту громоздкие производственные линии, всё можно упростить. К чёрту перегрузки и недогрузки — теперь всё работает как часы. От этого вот ощущение «Работает как часы» можно тащиться бесконечно. Впервые оно возникает при разгрузке автоматического поезда, а потом появляется с развитием логической сети.
Итог игры — вылетающая ракета. Но настоящая радость — в песочнице, которая позволяет творить любую фигню, например, музыкальные шкатулки. Вот тут парень упоролся и «написал» программируемые динамики на основе комбинаторов логической сети производства:
UPD: А graninas собрал вообще свой процессор.
Ну а самое интересное — всё же кривая обучения. Чтобы начать играть в «Факторию» первый раз, нужно получить очень много информации — от того, что и как работает до шаблонов строительства базы. Вопрос решён гениально: вы находите чужую базу с двумя аванпостами, разбираетесь, как она работает, и чините её. Заодно хороните павших коллег-гуманитариев, построивших её (на самом деле нет, их сожрали кусаки).
Каждая отдельная миссия короткая, имеет конкретную цель и радует экшном — после первой же кампании хочется чего-то ещё. И там есть ряд логических задач, песочница и всё, что угодно.
В общем, это очень странная игра. Странная тем, что в ней надо работать и фармить — но при этом вы играете. Странная тем, что надо отлаживать процессы: всё всегда идёт не так, но надо следить. Но удивительная тем, что показывает, насколько важна сложность: то, что можно делать руками час, ставится на поток за то же время, и делается тысячами. И поверх этого накручивается ещё виток. И ещё. И ещё. До тех пор, пока всё это будет сложно охватить сознательно. В процессе прямо подводит мысли к тому, что роботы должны делать других роботов посложнее, и так далее.
В общем, ещё один интересный учебный курс. Который вместо традиционного обучения. Хотя бы по схемотехнике, потому что вся карта — эта плата, и вы делаете на ней трассировку своими зданиями и чертежами их совокупностей вроде «блок производства красных микросхем».
How to automate cargo rockets in Space Ex?
I researched the tech I need and I have the AAI mod that I need to program this, but I dont know where to start.
youtube is my main e-learning, but it seems no one is near that stuff in their lets plays (Nilaus / Xterminator). Only JD-Plays, but he is only giving a recap and he works with manual firing rockets.
New comments cannot be posted and votes cannot be castI actually posted a solution to this problem recently to show off a fact that I learned circuitry a bit:
Otherwise, the only way I can really recover that stuff is to go up with my rocket and carry it back by hand, in the command pod.
I kinda glossed over a few things. If you have more specific questions, I could answer them, rather than going into extreme detail of everything.
Читайте также: