[HN Gopher] Seven Years of Factorio Friday Facts (2020)
___________________________________________________________________
Seven Years of Factorio Friday Facts (2020)
Author : destructuredObj
Score : 319 points
Date : 2021-06-09 12:01 UTC (10 hours ago)
(HTM) web link (spieswl.github.io)
(TXT) w3m dump (spieswl.github.io)
| ddoubleU wrote:
| From what I remember from this older interview with the two
| founders (in Czech) the main inspiration for doing Factorio were
| Tekkit-like mods for Minecraft.
| and0 wrote:
| To anyone who loves Factorio as much as I do, I strongly
| recommend the new game Dyson Sphere Program. I never truly beat
| Factorio the way I did DSP, so I can't compare them completely,
| but DSP takes the concept to a 3D planetary scale and is in many
| ways much friendlier.
|
| Also no combat/bugs, at least not yet. The dev team is Chinese
| and are releasing amazing quality-of-life updates at a rapid
| clip, too. Truly impressive piece of software.
| daolf wrote:
| I've been a huge fan of Factorio since 2014.
|
| A huge fan of the game, the team, and the entrepreneurial
| adventure.
|
| Their willingness to share insights, every weeks, for 7 years is
| quite rare in the industry.
|
| It was also awesome to read the thought process behind each
| design decision alongside some nerdy story about C++
| optimization.
|
| Factorio team, if you're ready this, thank you!
| cogman10 wrote:
| The game is also seriously fun :D. It has such replay-ability
| for me. You can either make new factories or you can infinitely
| tweak old ones. So much fun tweaking lines to increase
| efficiency and throughput.
| ghostbrainalpha wrote:
| Any tips on where I could go to read more about the
| entrepreneurial adventure?
| stevenpetryk wrote:
| This reminds me of a cool article I read about how Kerbal Space
| Program 2 renders orbits. I love reading things like this:
|
| https://www.kerbalspaceprogram.com/dev-diaries/6509/
| chairmanwow1 wrote:
| Those disclaimers at the beginning of the article are so out of
| touch
| J5892 wrote:
| I... what?
|
| How?
| Kiro wrote:
| Why?
| DarmokJalad1701 wrote:
| I wish they had expanded on the demo/tutorial mode's "story
| line". I liked how there were these secret half-built/half-
| destroyed bases waiting to be found.
| TOGoS wrote:
| The Friday Facts were fantastic. I don't know of any other non-
| open-source project (but counterexamples are of course welcome)
| that encourages the developers to put that much technical
| information about what they're up to out on the website. I
| especially loved the ones about belt optimizations, multi-
| threading, and the networking model, since those are all
| interesting problems that any game developer is likely to think
| about but not necessarily get around to really solving the way
| that Factorio did. The FFF's inspired me to, on a total lark,
| send over my resume, which turned out to be good timing.
|
| I think my "holy crap I'm working on factorio, pinch me" was
| equivalent to some people's "holy crap I'm working for
| Microsoft." I still remember the odd smell of the office when I
| first walked in ("sorry it smells like acid in here", I was told,
| and was later disappointed to learn that when Europeans say
| "smells like acid" they just mean it smells bad; there was no
| open use of entheogens while I was there).
|
| I'm glad fff-200 made the cut for this guy's list, as that's the
| one where I announced the new 'programmable noise' terrain
| generator. More deets in
| https://www.factorio.com/blog/post/fff-207,
| https://www.factorio.com/blog/post/fff-258, and
| https://www.factorio.com/blog/post/fff-282, among others.
| spieswl wrote:
| Absolutely. I'm a sucker for good writing and I feel that you
| all set an excellent example of how to do technical writing and
| analysis correctly.
| drewmate wrote:
| Thanks for writing (the code and the blogs!)
|
| What are you up to these days?
| TOGoS wrote:
| These days I'm at a 'regular job' that is far less
| interesting, but pays a lot better, which I was especially
| glad about when the furnace needed replacing. So it goes,
| sometimes. I mostly blame the US healthcare^W extortion
| system.
| spieswl wrote:
| Author here. Wow, uh, I definitely did not expect to be featured
| on HN this morning, but seeing this linked put a massive smile on
| my face.
|
| There are just so many examples of captivating writing,
| innovative problem solving, and candid discussion throughout the
| FFFs. Taken all together, the Factorio journey is one of my
| favorite _stories_ to read...and it contributed to becoming a
| better designer and engineer along the way. I really encourage
| people to read more of their blog than just what I've linked,
| since it crosses so many areas of interest.
|
| To anyone reading that's worked on Factorio, thank you and you
| all are wonderful people.
| TheMerovingian wrote:
| Probably the best game I have ever played and the only game I
| bought not once, but thrice (two were gifts).
|
| As a developer, it allowed me to determine what kind of developer
| I am, where my interests lie, and how I contribute to code (or a
| base). The analogue between coding and Factorio is incredible.
| agentwiggles wrote:
| Preamble: I mean this as a compliment to the game, so I hope I
| don't come off too negative.
|
| Factorio is so analogous to coding that I just couldn't get
| into it. I laid out a neat little factory and then requirements
| changed and I realized that I needed to basically abandon what
| I had and build something new. My factory was not really "open
| to refactoring". Something about that feeling felt so similar
| to what I have to do at work all day that I closed the game and
| haven't gone back to it since.
|
| I got really into a technical Minecraft mod back in my college
| days (Better Than Wolves). For some reason I never really had
| the same problem with that, in fact I really enjoyed crawling
| around in tunnels and changing things around. Something about
| the 3d-ness of Minecraft made it feel more like tinkering
| maybe.
|
| Idk, this post has become a ramble - but suffice it to say that
| Factorio felt _too much_ like programming for me to truly enjoy
| it. Maybe that says something about the kind of developer _I_
| am ;)
| Arrath wrote:
| This, for me, certainly drove home how much I hate
| refactoring things. If I need to reconfigure my factory for
| some reason, beyond throwing in a little spaghetti and in-
| filling some gaps to add another few bits of production, I'll
| just waltz off into the distance a ways and start anew,
| piping in resources from the old factory as needed.
|
| And then I run into bottlenecks arising from the utilization
| of the old factory and the process repeats itself.
| scrollaway wrote:
| I find your comment super interesting. I myself deeply
| enjoy refactoring as an activity in software, and I share
| that affinity towards it both in Factorio and Minecraft,
| where I'll deeply enjoy tearing down massive chunks of my
| base to reconstruct them slightly or completely
| differently.
| drewmate wrote:
| There is an inherent tension in Factorio (and software
| engineering!) between trying to get everything right up front
| and just building anything that works and fixing it later.
| I've found a balance that is fun for me in the low-stakes
| video game world.
|
| Every Factorio player I know has an enormous laundry list of
| things they wish they'd done better after their first game.
| That urge never completely goes away, and if that feeling is
| more distressing than energizing to you, then perhaps
| Factorio is not the game for you.
|
| Still, the process of analyzing a system in a factory and
| redesigning it to be more efficient is massively satisfying.
| New challenges arise at every stage of a factory's growth,
| and before long, your 'starter base' is just a small part of
| your whole operation, and the shortcomings there just don't
| matter in the whole scheme of things.
| [deleted]
| kortex wrote:
| That is an oft-echoed sentiment. I've experienced it a little
| bit myself, but the main reason I've fallen out of it (after
| a few fiercely addicted bouts) was it felt like I was
| exacerbating some RSI, especially with my mousing hand.
|
| But yeah once you start thinking about on-demand rail
| delivery using signals as RPC...it's pretty work-like. :D The
| async nature of the inventory system means long-range signal
| transmission handling ends up feeling exactly like bit-
| banging on a microcontroller, which is sufficiently out of my
| current work scope that it's fun and interesting. Oh no, this
| makes me want to attempt the Ben Eater computer in
| factorio...
| clows wrote:
| I've played a few hundred hours of factorio, so by no means a
| _lot_ but I've launched quite a few rockets and "finished"
| the game a few times.
|
| Depending on how long you played you might have missed out on
| the part that's the most fun (for me at least) - the
| later/end game.
|
| Once you have bots the game changes a lot and you stop
| building stuff yourself and let bots build stuff for you.
| Once you have a few hundred bots (and resources) you can
| build/destroy/rebuild/scale up huge parts of the factory.
|
| The starting factory is usually abandoned but a megabase can
| be a beast of it's own with constantly tweaking bottlenecks -
| which can be quite a lot of fun (or it is for me at least)
| 01127790781 wrote:
| hkr
| nindalf wrote:
| For those wondering why this game about factory management keeps
| showing up on the front page of HN, it's because the gameplay
| reminds its fans of software engineering in subtle ways. People
| who are good at one are likely to be good at the other. More
| about this here - https://blog.nindalf.com/posts/factorio-and-
| software-enginee...
| RangerScience wrote:
| There are two kinds of programmers,
|
| Those who look at Factorio and go: "That's my day job! Why
| would I do it for fun?"
|
| and those who look at Factorio and go: "That's my day job! You
| mean I can do it for fun?!"
| munchbunny wrote:
| Having a PM to help me stay focused would not be a bad thing
| when I play Factorio. However, that would probably come
| bundled with having a PM constantly ask me to half-ass (I
| mean MVP) three different new projects in the factory in the
| time it would normally take me to full-ass one project.
| remexre wrote:
| Three halves > 1 full, sounds like a win to me! /s
| bregma wrote:
| You missed those who say "I do this for fun, just like my day
| job!!!1!"
| nthj wrote:
| My day job is getting alignment and approvals on fixing
| things. Factorio is deciding to fix something and then doing
| it.
| wernercd wrote:
| Good lord... I'm #2... I also play FortressCraft and
| Satisfactory and other games of the genre... after working on
| the same crap all day.
| m0ngr31 wrote:
| I've seen this said literally hundreds of times and can only
| imagine that these comments are hyperbole now.
|
| I've given Factorio dozens of shots now, and have played for
| hours and hours with people who are great at the game, but it
| just isn't for me. I get bored in the monotony of the early
| game, and I'm too stupid to keep things going in the mid game.
| scrollaway wrote:
| I don't think there's a statement in there about enjoying the
| game, just the shared skillset and mindset. :)
| m0ngr31 wrote:
| Maybe that's why I don't enjoy it... Feels like I could be
| getting work done on any of my side projects when I play.
| Don't have that same feeling when I'm playing other games.
|
| That being said, I do enjoy it at LAN parties because I
| just build walls and hunt biter nests
| scubbo wrote:
| The comment that really made it click for me is that
| there are two diametrically opposed responses for
| engineers playing Factorio:
|
| * "This game is scratching the same itches as my day job,
| but with more dopamine and less bureaucracy - how can I
| play this all the time?" * "This game requires me to
| expend the same brain-effort as my work/side-projects,
| but I don't even get anything tangible out of it? Why
| would I ever 'play' this?"
|
| Neither of them are wrong - and I suspect that the same
| person might even have different reactions at different
| points in their life.
| imiric wrote:
| I'm square in the second group. Factorio is fun for a
| while, but after somewhere around mid-game you realize
| that it's much more frustrating and less enjoyable than
| actual programming.
|
| I can't easily "refactor" parts of my factory without
| fearing it will break some pipeline that depends on the
| changes. I wish there was a way to "write" "tests" or do
| mass changes safely. Blueprints and robots help automate
| things, but it's not that flexible.
|
| I wish I could use a "debugger" and step through the
| execution and play with changes to see how it affects the
| factory.
|
| And then I finally get to the conclusion that this would
| all be easier from a text editor using proper programming
| tools, and more enjoyable to work on a real project that
| could have tangible benefits (and then never finish that
| either...).
| vbezhenar wrote:
| Most of my games ending when I realized that I have to
| rebuild half of my base because of some thing and I don't
| want to spend so much time with inactive base. And my
| internal perfectionist can't live forever with quickly-
| hacked sub-par solutions.
|
| Robots at least make it somewhat bearable.
| js8 wrote:
| My recipe to monotony of early game was to design a really
| small starter base (~20 red/green/black/blue science per
| minute) with the explicit target to produce construction
| bots. With bots, things become easier.
|
| That being said, I understand the sentiment. I have been
| playing lots of modded Minecraft and Factorio over the past
| decade, and lately I felt a bit of guilt because I feel I
| could be working on some other, more meaningful, project.
| Jakobeha wrote:
| When I first picked up Factorio I loved it for about ~12
| hours. Then I just felt, everything is too hard and there
| isn't a sense of purpose.
|
| For me, I think it would me a fun game if there was more
| strategy or something else to do besides build the factory.
| It seems to me the progression system is actually really
| linear.
|
| > I get bored in the monotony of the early game, and I'm too
| stupid to keep things going in the mid game.
|
| This is my other big issue. I don't like putting in much
| effort when playing video games. It seems like just getting
| blue science takes hours of work, and those hours were fun
| for the first factory, but now it's just repetitive.
| kzrdude wrote:
| The invading bugs sort of are the purpose, to defend
| against those. But I find it tedious, so I like to turn
| them off, and then yes, the game is even more noticeably
| lacking purpose.
|
| I think though that making train networks is my big
| pleasure with the game. Very satisfying.
| derefr wrote:
| An interesting thing about Factorio to me (beyond what's stated
| in the linked article), is that it contains a _nearly_ a
| perfect 1:1 analogy to software concurrency.
|
| * Belts are blocking CSP channels, as seen in e.g. Golang
| (where N producers have to share -- or eventually "merge onto"
| -- one channel representing the blocking-receive point of the
| consumer; which are best only used to transport messages of a
| single type, or if not, then the sum-typed channel must be
| demultiplexed at the end, with this tending to lower
| throughput; where messages of a given type "queue up" until the
| channel is full, and then all producers block when attempting
| to write to the channel; where if you've got producers
| producing at different rates, then the fastest ones can hog the
| capacity of the channel, decreasing throughput and unevenly
| spending input resources such that some components fail long
| before others; where the solution to this is to give each
| producer its own bounded outbox channel that multiplexes onto
| the consumer's channel, such that the producer will block
| _itself_ rather than blocking its siblings; etc.)
|
| * Logistics robots are message-queue topics (where N producers
| can publish messages of a given type, without worrying about
| how they'll get to a consumer; where consumers [demand chests]
| subscribe to specific event message types; where the bus itself
| can get overloaded, causing delivery failures of unrelated
| topics as delivery-threads sit around holding a message unable
| to deliver it; where the solution to this is to add reliable
| MQ-internal storage [network-linked storage chests] for the
| agents to offload produced messages to until demand comes for
| them.)
|
| (Sadly there's no exact equivalent to Erlang-style message-
| passing, where producers target messages of arbitrary type at a
| specific consumer, which all go to the consumer's single inbox;
| and where, if that inbox is full, then the message just
| "evaporates" en route, since the passed message has async
| semantics where the producer isn't linked to its delivery. But,
| interestingly, that type of concurrency totally _could_ be
| added, with a not-even-very-complex mod -- just add a "outbox"
| chest object that can be configured to "target" a specific
| "inbox" chest somewhere else; and a second type of logistics
| robot that _only_ moves stuff from outbox chests to inbox
| chests, not according to "demand" but just because anything
| currently sitting in an outbox chest is "intended to be" in the
| corresponding targeted inbox chest; and then ensure that this
| alternate type of logistics robots have non-reliable delivery
| semantics, where if the "inbox" chest signals to the network
| that it's full, then all active delivery-threads targeting that
| inbox will literally "drop their messages on the ground".)
|
| IMHO it's actually possible to learn how to be an effective
| distributed-systems engineer, just by playing Factorio and
| trying to scale the throughput of a resource-constrained
| system. In the process, you'll likely re-invent many real-world
| concurrent software design patterns. Doing this _first_ , and
| _then_ reading a Distributed Systems textbook, will have a much
| more visceral impact on you, because you'll have already
| _faced_ these problems, struggled with them, and now you're
| being handed all the techniques for solving them on a silver
| platter.
| TOGoS wrote:
| I wanted, but never got around to, creating a mod that
| accepts some kind of data outside the game (lines of text,
| JSON objects, packets from the TUN driver, whatever), wraps
| them up as Factorio objects, and plops them onto a belt, and
| another that reads them and sends them back out.
|
| The idea being that this could be (A) a cool hack (belt speed
| factoring into ping time, lmao), but (B) a way to visualize
| data flow in complex queue systems.
| Buttons840 wrote:
| Oh, that would be cool. You could implement sorting
| algorithms and such.
| kortex wrote:
| Sounds a lot like clustorio.
|
| https://mods.factorio.com/mods/Danielv123/clusterio
| FredPret wrote:
| Hell, why not turn Factorio into a programming language?
|
| If you can translate a real-world problem to in-game
| problems, it'd be so much fun to solve them that you'd
| probably launch a new epoch in human history - the Factorio
| Age
| hanikesn wrote:
| There's a verilog2factorio compiler:
| https://github.com/Redcrafter/verilog2factorio
| FredPret wrote:
| That's amazing!
| bregma wrote:
| And then Mazer Rackham reveals the truth about every
| Factorio game played since the official 1.0 release.
| benlivengood wrote:
| > (Sadly there's no exact equivalent to Erlang-style message-
| passing, where producers target messages of arbitrary type at
| a specific consumer, which all go to the consumer's single
| inbox; and where, if that inbox is full, then the message
| just "evaporates" en route
|
| Train stations plus circuits can do this. Trains can be
| configured to leave a station when not empty (after receiving
| a message item of any type), and recipient stations can be
| disabled by a circuit if the receiver is full, causing the
| train to skip the station. The last station on the train's
| route would empty it before it goes back to waiting for a
| message item to deliver.
| derefr wrote:
| Not quite the same scheduling/locking semantics, though --
| sure, it's "concurrent" and packet-oriented, but it's a
| token ring. It's similar to the original Redis model of
| concurrency: just have everyone make a series of tiny
| requests, and then loop around / select(2) from your
| clients, handling each client's latest request serially,
| with no request queuing because all requests are
| synchronous/blocking for the client making them.
|
| N logistics bots are a much closer analogue to N scheduler
| threads each working _in parallel_ to 1. take a message
| from a priority heap (really, to take a schedulable process
| from a priority heap and then run it to produce messages,
| but same difference) and then 2. synchronously shuttle that
| message to its destination queue.
|
| I suppose you _could_ get the same semantics with N
| parallel train tracks, one per scheduler-thread; plus an
| actual scheduler priority-queue implemented in circuits.
| But I feel like that 's a "non-idiomatic case", in that, no
| matter how you designed your stations or where you put
| them, it'd be incredibly painful to design a
| loader/unloader for a "bus" of parallel train tracks.
| Especially if all the trains arrive together. It'd be a
| setup the devs would take one look at and say "that's too
| much of a kludge, and yet the kludgeyness is necessary, and
| that's our fault for not including a necessary abstraction.
| We'll just put in that abstraction."
|
| (The alternative would be a mod that allows trains to _pass
| through_ one-another on a track. Then you could have one
| train-line where each train cleanly represents a scheduler
| thread. No idea what would happen if they tried to stop at
| the same station at the same time, though. Ghost trains~)
| nthj wrote:
| Also I see trains as network design. You have to commit to
| the train size upfront (network block size) and you can hit
| throughput limits
| FredPret wrote:
| My biggest Factorio lesson was this:
|
| I no longer start a new factory from scratch if I want to do
| things differently. I use my existing - and now outdated -
| factory to launch a new one a few minutes run away.
| kortex wrote:
| Throw the first one away. Especially when starting a run, plan
| on throwing away the starter base.
|
| I learned this trick watching AntiElitz speedruns. He'll build
| a manual bootstrap "factory" (really just mines and smelting)
| to get plates, then build a very-polished-through-iteration
| bootstrap base which builds all the development essentials -
| circuits, arms, belts, ammo, etc. That's used to build the
| _real_ base.
| zentiggr wrote:
| That sounds a lot like the old Gentoo stage 1 / 2 / 3 build
| system...
|
| Makes me a little more interested, in general.
| mikewarot wrote:
| I find myself playing Rocket Rush, without the rush. This allows
| access to all the tech without the grind. I've built so many
| small nuclear plants with a bunch of steam tanks to store the
| power until needed. I've also built a ton of solar arraignments.
|
| The constant things I always buy are 4 heavy oil, and 200
| plastic. I usually get 10 miners, electric furnaces, and level 2
| assemblers. Once I have power, and coal gasification up and
| running for plastic/explosives/batteries, it's just a grind.
|
| I've settled on using an Island terrain, to give it an end,
| rather than just not wanting to keep expanding forever. Once the
| island is cleared, and has radar, it's time to start again.
| alexwebb2 wrote:
| Quick links to the five "must read" posts that William
| highlighted:
|
| > FFF #243 - New GUI tileset: Showing off their GUI design
| document. A MUST READ, if only for a good example of a
| comprehensive design style that fits the game theme perfectly.
| (https://factorio.com/blog/post/fff-243)
|
| > FFF #176 - Belts optimization for 0.15 : Incredible analysis of
| transport belts and optimizing their performance. A MUST READ.
| (https://factorio.com/blog/post/fff-176)
|
| > FFF #204 - Another day, another optimisation : Solid technical
| writeup on how a prefetching optimization patch works across a
| number of resource-heavy factory builds. A MUST READ.
| (https://factorio.com/blog/post/fff-204)
|
| > FFF #296 - All kinds of bugs : The snippet at the bottom is a
| perfect encapsulation of their attitude towards problem solving.
| It's such a simple concept, just going a little farther, that can
| take tremendous discipline and focus. A MUST READ.
| (https://factorio.com/blog/post/fff-296)
|
| > FFF #356 - Blueprint library for real : Michal "kovarex"
| Kovarik, one of the two cofounders, talks about falling out of
| the development process, losing his sense of purpose, and how
| playing Factorio with his son brought him back. Reading this one,
| even through the sometimes-broken English, is inspirational and a
| wonderful look at how things fall apart and come back together.
| Like I mentioned in the intro, this is one of those rare, special
| offerings that is technical in nature but deeply personal and
| human-centric in form. A MUST READ.
| (https://factorio.com/blog/post/fff-356)
| bombcar wrote:
| > Earlier this week we got a bug report about the game
| freezing, consuming all of the available RAM, and then crashing
| when it ran out of RAM. It was again a modded save file so my
| first instinct was to blame it on a mod. Again, I had to test
| it. And again... it's never what you think it is.
|
| > So, I still repeat the phrase: "Crashing on dereferencing
| null? Just add a null check!" as a reminder to myself and
| others to always look deeper into why and never stop at the
| basic symptom of a problem.
|
| I feel this is a very important rule that people often forget -
| most anytime your "safety" code triggers, something went wrong
| somewhere else and it can be worth tracking it down.
| pdpi wrote:
| It's a perfect example of how useful it is to think in terms
| of what invariants should hold and why.
| scrollaway wrote:
| 356 is a really nice read. inspirational indeed.
| throwawaw wrote:
| Yeah, that one caught my eye (and then moistened it).
|
| The way he breaks his slump by sharing Factorio with his son
| -- what a wonderful, unexpected benefit of working in games.
| How many of us will get to do something like that?
| unspecified wrote:
| > FFF #176 - Belts optimization
|
| The last bit of this post mentions UDP packets not making it
| through ISPs if their checksum is 0x0000 or 0xFFFF...what is
| THAT all about? This would have been in February of 2017.
|
| > If you remember from the previous FFF, our map downloader was
| having some extremely rare problems with some mysterious
| packets that would always get filtered over the Internet. We
| already had a fix for it, but I was curious what was going on.
| Thanks to the investigative power of the Factorio community, we
| found out that all those mysterious packets, before NAT, had a
| checksum of 0xFFFF. Admalledd from the forum sent some hand-
| crafted packets through his Internet connection and surprise,
| all packets would go through, except those with a checksum of
| 0xFFFF or 0x0000. At this point I would just assume this
| ISP(and some other few ISPs around the world) have some faulty
| hardware or software that do not handle these special cases of
| UDP checksums.
| zamadatix wrote:
| If the checksum comes out as all 0's you're supposed to make
| it all 1's (0 in a UDP checksum means no checksum) so really
| it's related to that singular value and, if you've ever seen
| the quality of some of the dirt cheap hardware with ancient
| firmware some carriers use, it's really not that surprising
| for it to be bugged as described as they really don't care
| about dropping the occasional UDP packet when it's probably
| dropping more than that of general traffic due to how cheap
| and overrun it is anyways.
___________________________________________________________________
(page generated 2021-06-09 23:00 UTC)