With the caveat that Factorio is EXTREMELY addictive, properly described as "programmer crack", here are some other Factorio related discussions:
Factorio – a game where you can automate basically anything (factorio.com)
https://news.ycombinator.com/item?id=11266471
"This game is like crack for programmers." -kentonv (Tech lead for Cloudflare Workers, author of Sandstorm.io, Cap'n Proto)
https://news.ycombinator.com/item?id=11269098
Raycasting engine in Factorio game – Facto-RayO v1.0 [video] (youtube.com)
https://news.ycombinator.com/item?id=19878688
https://www.youtube.com/watch?v=7lVAFcDX4eM
Factorio to talk about horizontal scaling of software services (medium.com)
https://news.ycombinator.com/item?id=19095271
https://medium.com/@chrisfauerbach/gamification-of-horizonta...
Mapping Factorio with Leaflet (cloudflare.com)
-- said at least once by anyone who has played it...
In simpler terms, having to do things the slow and manual way makes the fast and automatic solutions even more gratifying.
He covers it under the introduction "Why bother with async messaging?".
Basically in the analogy the belts are queues. Factorio doesn't require queues, but it quickly leads to problems with resource management, as you essentially have to lock the system until your item is done processing.
https://imgur.com/c51pTnP - here I tried to invent a way to solve the accessibility issues of moving walkways; https://news.ycombinator.com/item?id=17703131 for context.
https://mastodon.technology/@temporal/100646861775747986 - Factorio-inspired tootstorm about what I'd like to see in an IDE/debugger.
Message queues allow the producer to think it's participating in a push architecture, while the consumer believes it's a pull-based arch. Because the message queue itself does very little work, it gets to play a very well-behaved consumer insofar as the producer is concerned, while behaving like a well-behaved producer for the consumer. The queue's buffering then allows both the producer and the consumer to misbehave to some degree while the queue itself keeps the illusion of good behaviour.
Kafka specifically falls under the category of log-oriented message queues, which are eminently useful for distributing any workload that looks like "tail a log and process each line as it comes in" across a large number of nodes.
The big win when introducing Kafka is that (apart from the schema) it completely decouples producers and consumers of messages. That in turn reduces the required coordination between independent teams within an organisation.
Coming into Los Angeles
Bringing in a couple of keys
But don't touch my bags if you please
Mister Customs Man
https://en.wikipedia.org/wiki/EFF_DES_crackerhttps://www.donhopkins.com/home/archive/humor/deep-crack.txt
Factorio does have a rather steep learning curve, and the UI is not the most intuitive. But. Once how it works clicks, it clicks, and suddenly morning. And I'm in my 40's, I'd thought my days of unexpected overnights while working on fascinating problems were mostly behind me. Highly recommended, but be aware.
More seriously, I am curious about what people who haven't played Factorio think of the article. Since I've sunk $bignum hours in to it, I found your explanations clear, but I'd like to hear what those who haven't think.
Give people a firehouse of events or deltas, though, and if they want to query it, performance is now their problem - they build the database, update it, index it, etc.
This is part of scaling organisationally, not just removing the database as a bottleneck.
Events are also a route to making cache invalidation - one of the hardest problems in CS, as we know - tractable. Build your caches as services that consume the firehouse, and invalidate based on a join between events and the cached data.
[1] https://en.m.wikipedia.org/wiki/Principal%E2%80%93agent_prob...
IME it has gotten better over time, but it's still pretty easy to shoot yourself in the foot if you don't understand what you're doing with it.
But wow, what a great game.
You could potentially do that with a separate microservice you communicate with via http, but this requires a "liveness" of the microservice that isn't really necessary; you will often lose events if the microservice isn't able to keep up with the incoming load, and you need to process the events just as fast as they come in. The data flow is really just unidirectional so the response is unnecessary, you just need to reliably transmit the data.
Kafka lets you handle unidirectional data flows in a way that is lazier. The data producers just write to a service and the consumers connect to the service. In between, Kafka just behaves like a distributed message queue. Obviously this is a huge benefit over directly writing to a db or any other kind of offline storage since it can greatly reduce the connection overhead. The main benefit over using a microservice is that it relaxes the constraint that all the data is processed/handled exactly as it comes in. It makes non-critical data flow more redundant by adding this queue
(I don't think the linked article does a great job explaining why you would use kafka / what the alternatives are)
Not... at all? I mean, Vim has a steep learning curve[1]. Factorio is a game meant for the masses.
Of course any game is hard to master, but in that case any game that is not made for 3 year olds has a steep learning curve. You won't know how to set up and manage a 1kspm factory from day one, but that's okay, you can start by exploring and have a lot of fun doing that.
[1] (if you ignore that you can just start by hitting "i" and save with "<esc>:wq" and you have an ordinary editor, but that's not the point.)
However, one of the main advantages of Kafka, I thought, was that it’s so much more than a queue, since data is replayable, etc. The article does mention this as a shortcoming of the analogy, but isn’t this one of the main selling points vs other message queues?
Mind you, compared to other “programming games” like e.g. Shenzhen I/O, the main gameplay loop of Factorio is quite a bit simpler to wrap your head around. It's only when you try to ultra-optimize everything that it reaches that level of complexity. (Or when you "program in Factorio", ala "programming in Minecraft.")
I didn't learn to write code until I was in my late teens although. Ultimately I've found factorio a rather tedious game, that kind of reminds me of my job. I also tend to not code things for fun, seeing how it will ultimately turn into a large project I won't have time to maintain. Kind of like how mechanics don't like maintaining their own cars.
It makes me wonder sometimes.
I initially found Factorio interesting, mostly for the parts that encourage spreadsheet calculation, e.g. balancing the various rates of production and resource intake. Some other aspects appealed too, such as finding drill placements to fully cover ore deposits.
Where I lost interest is when the game became mostly about refactoring large transport belt networks. That reminds me of the non-fun aspects of programming.
Also press Alt
And use "Q" while hovering over an object to put it in hand (if it's in your inventory). Press "Q" again to drop whats in hand. I played waaayyy to long without knowing this and it is unbelievably useful, saves mountains of time digging through your inventory.
Indeed the second best positive percentage according to steamdb: https://steamdb.info/stats/gameratings/
No 29 if you just sort by positive reviews.
(That, and building vast quantities of artillery in the middle of almost fully red zones, then flipping the power switch for the loaders and watching the fun. :D)
There are lots of games I can play for a specified amount of time and be fine with it. Pretty much all of them, really. Factorio, I get annoyed if pulled away in the middle of a project. So now I know to not even start unless it's free time for the rest of the night.
For whatever reason crack allusions are a bad taste joke that people (unlike most of the above) don't seem to realise is bad taste, possibly because they consider crack addicts as either other or lesser to them, rather than unfortunate victims with a shared humanity.
No. For example, my cousin plays it, someone who typically plays games like the Sims (and other games popular amongst women), has no university degree. She has no trouble with Factorio. I am honestly confused how anyone would call Factorio a difficult game. It's nigh impossible to lose unless you change the default settings to generate a more difficult world with much more aggressive biters. It's a building game, not a shooter that requires any kind of skill or specialised software that requires a manual.
Edit: asked said cousin whether she thought it has a steep learning curve. Answer was "lol, yes! And the curve just continues, there is still lots I could do better". I suppose having nearly only programmers as friends skewed my view of how many people had no trouble getting into it.
In high school, my friend was into drugs and partying. I was into EverQuest. I think we'd have both been better long term if he'd gotten me into drugs instead of me getting him into EverQuest.
Please check the picture with the label "All microservice instances consume all messages". From my understanding it is more of a depiction of a consumer group.
As factorio really consumes the messages (they are gone once consumed) you cannot really implement "All microservice instances consume all messages".
Maybe this is BS, i have no Kafka expertise.
I know these things happened, happen and most likely will happen and such metaphors are unpleasant for people affected, but I think it's natural language evolution.
People still get murdered occasionally and families of murder victims might be uneasy when they hear about someone that "he killed her with this joke!" but it won't prevent people from using that phrase because murders are so rare for most people that the word gradually loses its literal meaning.
https://wiki.factorio.com/Blueprint
https://wiki.factorio.com/Blueprint_book
https://www.reddit.com/r/factorio/comments/7vnkze/blueprint_...
One of the stages of evolution of a Factorio programmer is learning how to make scalable modular blueprints that you can stamp down one next to another, with their inputs and output routed so they all plug together easily and run in parallel, without having to be manually wired together.
I can't remember which ones are multi player, but here are some of her playlists -- awesome stuff:
Factorio Tutorials Playlist
https://www.youtube.com/playlist?list=PL4o6UvJIdPNpm9szThfI-...
Factorio 0.17: Entry Level to Megabase 2
https://www.youtube.com/watch?v=el9Ih1gg3i4&list=PL4o6UvJIdP...
Factorio 0.17: Pyanodon with Aven1017
https://www.youtube.com/playlist?list=PL4o6UvJIdPNpUZ230345G...
Factorio Landfill Avalanche! (MP with Aven!)
https://www.youtube.com/playlist?list=PL4o6UvJIdPNrEWhjZOzfC...
Factorio ASMR
https://www.youtube.com/watch?v=P7dasB1a5J0&list=PL4o6UvJIdP...
>Rabbi Tricky: OMG KoS, your voice, your choice of words, it makes me really relaxed. I saw it mentioned before, but its like Bob Ross. Happy little trees are now in my mind, together with happy little miners and such. Please don't make this a one time video, i really love this. Much love
>mithrane: KOS - You really are the Female Bob Ross of Factorio. Love your videos and love this concept.
Just like NPM packages, blueprints just let you get into much more trouble much faster!
My message was not even unsolicited. You were asking why and I gave you an answer.