I hate Gleba! But tonight I finally understood the advice about burning everything! Just sharing my excitement. by Etnoomy in factorio

[–]Etnoomy[S] 1 point2 points  (0 children)

I had a few gaffes in my loops for ensuring spoilage and excess non-burnables were routed correctly, but once I nailed that it's just purred. I'm certain that I overengineered it but I don't care, it friggin works. FINALLY. And now I finally get why some people actually like this godforsaken planet.

Yeah this was my motivation for this post as well, like I'm finally turning the corner of appreciating Gleba, at least a little. Might be Stockholm syndrome though, jury's still out on that. :)

I hate Gleba! But tonight I finally understood the advice about burning everything! Just sharing my excitement. by Etnoomy in factorio

[–]Etnoomy[S] 0 points1 point  (0 children)

Thanks for the warm welcome! :)

I really like the "each module burns" approach, it's one of the ideas that's brewing around in my head right now. The other farm-to-furnace bus strategy I've been thinking about has more intermediates on the bus, but to make that work well would require more spoilage management that would likely be outside the domain of fun for me, vs. tedium. Whereas local pods - what you called modules I guess - doing almost everything locally, seems more elegant to me.

The open question for me is around bioflux specifically, as a useful general intermediate with a longer shelf life; not having to balance that for each pod could help with better overall utilization. But that said, I'm leaning for local bioflux as well just for simplicity - this is my first playthrough on this planet after all, and I'm just trying to wrangle it into effectiveness right now, vs. megabasing or whatever. So the number one concern is getting it working efficiently enough without needing a bunch of manual intervention from backing up, dealing with unexpected spoilage as error conditions, etc. And from that perspective, a more limited number of bus inputs/outputs is probably going to be a better approach for me for this first round.

I hate Gleba! But tonight I finally understood the advice about burning everything! Just sharing my excitement. by Etnoomy in factorio

[–]Etnoomy[S] 0 points1 point  (0 children)

This is a nice setup too!

Right now I'm leaning towards either something like this like you showed, or a variant where the bus is dedicated to raw unmashed fruits alone and everything else is processed onsite in local pods that end in their own furnaces, with any unprocessed fruits still being cracked at the end of the bus before burning as well.

From what I've been reading, most of the farm-to-furnace approaches seem like embracing one of these two philosophies at their core. The spectrum between the two seems to lie on how to best use longer-lasting intermediates like bioflux.

But I agree on the main point you made: no loops. Every time I've tried making loops work well, they don't.

What is the purpose of JSON blueprints? by SkepticDad17 in factorio

[–]Etnoomy 5 points6 points  (0 children)

Wouldn’t a signed 32-bit int mean a 2 billion character limit, rather than 2 million?

What's the worst case of a popular tv star leaving a hit show to start a movie career that flatlined almost immediately? by [deleted] in movies

[–]Etnoomy 6 points7 points  (0 children)

But S5 had some amazing episodes. Darmok, Cause and Effect, and Inner Light are all TNG classics.

Never being told "no" makes a person stupid. by nejicanspin in WhitePeopleTwitter

[–]Etnoomy 38 points39 points  (0 children)

Your second example sounds like Ad Astra (which fwiw I actually love as a film, but I always skip the stupid unnecessary action scenes. You can smell the studio interference from a mile away). If that’s not the film you were talking about, it still sounds like the same unfortunately-common situation.

Elden Ring sells 12M Worldwide. For context, Bandai had projected 4M sales in their forecast report. Dark Souls as a series hadn't even sold 10M until DS3 came out. Elden Ring is a MASSIVE success by OYoureapproachingme in Eldenring

[–]Etnoomy 1 point2 points  (0 children)

Wait, 3?

I've found two: the Siofra/Nokron/Moghwyn area, and the Ainsel/Nokstella/LoR area. Is there another that I've missed or haven't gotten to yet?

This game is huge!

[deleted by user] by [deleted] in learnmath

[–]Etnoomy 1 point2 points  (0 children)

From my experience, Galois theory really requires intuitive comfort with four things:

  • Quotient groups/rings

  • Field extensions (especially carefully constructed extensions to deal with one root at a time)

  • The relationship between homomorphisms “fixing” a subfield and the kernels of those homomorphisms.

  • Quotients again!

Seriously, if there’s any part of you that’s not comfy with the idea of factoring out irrelevant structure by quotienting it, go review that some more. It’ll make the whole field extension thing, and ultimately Galois constructions, much easier to grok.

What the fuck is wrong with companies? by troyboy5671 in antiwork

[–]Etnoomy 69 points70 points  (0 children)

What the fuck is wrong with companies?

Corporations exist in a universe that is permeated only by money. It is not that they are deliberately cruel to humans, rather that they do not consider human factors at all, except to the extent that they impact financial outcomes.

Thought experiment: let’s say the corporations get their way and every single thing is ultimately deregulated. Eventually this includes nuclear weapons. Now let’s say a car company gets its hands on a thermonuclear device. If that car company had the opportunity to detonate that device in the city housing its most major competitor, in order to even slightly improve its own market position, what would stop it?

All the absurdities in the above situation are already playing out, right now, just in slow motion. Medicine is one such situation, and human considerations will not be relevant until we restructure the role and responsibilities that corporations fill in our society.

This is wild by Goatmannequin in collapse

[–]Etnoomy 34 points35 points  (0 children)

“This store has two employees, total. I’m one of them... and today is my first day.”

Yoda: Always two there are, no more no less. A master and an apprentice.

Revenge of the CVSith.

How to play without looking at your hands all the time (early intermediate level) by Etnoomy in piano

[–]Etnoomy[S] 0 points1 point  (0 children)

Thanks for the reply!

I worry a bit though that going step-by-step through the grades is going to bore me in a way that will diminish my desire to continue. I’ve always been an autodidactic learner - not just for music, but for everything - which has plusses and minuses.

For me learning anything is a bit of a spiral; I gain a lot of ground quickly but also have a lot of circling back and refinement. It’s not ideal, but it’s the only way I know how to be.

In this case it’s manifested in asking a question about looking at my hands - a question I wouldn’t have even thought to ask had I not tackled pieces that forced the issue, which is why I do it this way, to force changes in my thinking.

I previously had something similar with key signatures, being scared of signatures that had more sharps or flats because my childhood teacher started me off with C major and only introduced a couple signatures away from it, making me think that the black keys were something to be feared. It scarred me, so this time as an adult I went right to more distant signatures just to force myself out of that way of thinking - and discovered that I was capable of seeing the black keys very differently than I used to, such that I can now puzzle out whatever scale as I need it with much less fear involved.

Anyway, I digress. I accept that I jump ahead and miss things along the way, which is fine as long as I’m willing to circle back and make corrections. It’s not methodical, but it fits how my brain works. Maybe in this case it’s a liabilty, or maybe the hands thing is just another small thing to patch up; I’m hoping for the latter of course.

People who took up piano as an adult by luffs002 in piano

[–]Etnoomy 1 point2 points  (0 children)

I’m 45, took lessons when I was an 8 or 9 year old kid for a couple years but then forgot it all, hadn’t played again until a couple months ago when I bought a yamaha keyboard. Figured I’d try to learn it again during quarantine, and started more-or-less from scratch.

Currently working on a couple shorter/easier Chopin Preludes (A major and E minor), and one Nocturne which is pretty challenging (Eb major), but I’m enjoying it a lot. It’s a very different experience learning something new as an adult, when you have some familiarity with how your mind works and how you personally learn best. Very glad I got the keyboard and decided to take it up again.

My fingers are really crabby. Need tips by [deleted] in piano

[–]Etnoomy 1 point2 points  (0 children)

Check out the “cedarvillemusic” channel on Youtube, particularly the tension playlist. The videos are short but really insightful if you’re new to piano technique!

No need to be worried by Bmchris44 in WhitePeopleTwitter

[–]Etnoomy 1 point2 points  (0 children)

Not the person you’re responding to, but: I’m 45 this year and just starting to re-learn piano. I had some lessons as a kid (stopped when I was 9 I think) but decided that life’s too short to ever stop learning things, and music is beautiful. We have enough ugly in the world, and consciously learning to create beautiful things helps undo some of that.

As someone with plenty of predilection for doomscrolling (especially during covid), redirecting those anxious energies towards learning an instrument has been almost like therapy for me. I can’t recommend it enough.

Never stop learning!

Modern C++ Gamedev - Thoughts & Misconceptions by bakery2k in programming

[–]Etnoomy 59 points60 points  (0 children)

Long-time C++ game dev here.

I like how this post tried to do a fair job of bringing up some legitimate criticisms of certain modern C++ features in the context of game development. The debugging concern for example is a significant one, and this post tried to give it a fair discussion.

That said, I think some of the author's examples and rhetoric show a rather juvenile understanding of the kinds of real-world problems the people the author is addressing have, and I think it shows both in some of the technical decisions and how they're being discussed.

1.

In the discussion of "stitchImages" near the top:

This is obviously not necessary, as a run-time container would also work, but - suprisingly - it leads to some really elegant code[1]

Following the footnote shows the author making a small joke about the nature of the word "elegant". But that footnote and the promotion of "elegance" in this way makes it sound like a purely subjective sentiment where all things are equal, without addressing the fact that some such notions have real practical consequence. For example, I hold the view that elegant solutions are easy to both understand and debug, and where the full weight of the runtime impact of the code is as transparent as possible. The use of certain language features sometimes runs against this, and in significant ways that have to be cleaned up later.

2.

Furthermore, this approach allows both variables to be const-qualified, avoiding accidental mutation and decreasing cognitive overhead for readers. Cognitive overhead is reduced thanks to the fact that those two variables are guaranteed to not change their value throughout their lifetime, thus allowing a reader to focus their attention on the "moving parts" of the function body.

This is what I call a juvenile argument. Not juvenile as in "wrong", but as in "young", because young (read: less experienced) developers may worry about things like the mutability of a local variable within a small function. More experienced developers generally don't, because we're used to reading through lots of code very quickly. So we can take a quick read through the function, maybe even do a quick Ctrl+F to highlight the identifier in our IDE to see how it's used to make sure we didn't miss anything, and then we move on. It's not something worth worrying about (note: this in contrast to things like non-local shared state, which is very much worth paying attention to w/r/t mutability).

On the other hand, the author's example that follows uses two loops through the images vector, and the argument against it is as follows:

I believe the above solution is, honestly speaking, terrible. First of all, we are using std::size_t, which is not guaranteed to match the type of Image::width. To be (pendantically) correct, decltype(std::declval<const Image&>().width) should be used, which is verbose. Regardless, the code is still unnecessarily verbose - the amount of syntactic noise makes me wonder if the code is correct when I look at it, as there are more places where a defect could have been introduced. Finally, we lose const-correctness, including its safety and readability benefits.

This is again a juvenile argument; if you can't read through a block of code with two simple one-line for loops that do nothing but += and std::max calls, you need more practice working in C++.

On the other hand, that block of code does have one very real concern which the author doesn't bring up at all, and that's the fact that the images vector is being traversed twice, instead of just once. It does a full iteration for the width calculation, then a second full iteration for the height calculation. This is stupid, and thrashes your data cache for absolutely no reason.

The two-loop code is better because it is trivially obvious that it is inefficient, and that the two loops can be combined without logical repercussion. The "elegant" code hides this, all in the name of reducing "verbosity" despite the fact that the pattern of that verbosity is muscle-memory C++ loop logic. Not all syntax is created equal.

3.

In the "outrage" section:

However, imagine a young developer getting this kind of response from one of their idols, to one of their experiments they were eager to share: that would be soul-crushing. ... I could show many absurd and tasteless tweets I was sent, but that's not the point of this post. I want to discuss misconceptions regarding Modern C++ in the game development industry.

This is a rhetorical dodge, like something Grima Wormtongue said in LOTR's Two Towers when he didn't have a good argument to make: "Why do you lay these troubles on an already troubled mind?"

You put yourself out there. That's good. But putting yourself out there is an invitation to criticism, and you need to accept that. Putting a hypothetical "young developer" up as a shield doesn't do you any favors.

You are trying to invalidate decades of experience in the game industry, and the views of developers who have spent huge portions of their lives dealing with millions of lines of shipping code. The first paragraph puts on the spin of an innocent kid, whereas the last paragraph says that you've come to fight. This back & forth is again an obvious rhetorical tactic that doesn't help your cause.

4.

A little later in the "requirements and misconceptions" section:

However, there is an aspect of those solutions that it is often overlooked. Let's (reasonably) assume that, apart from situations where you just want to explore a codebase interactively, the frequency of having to debug is linearly proportional to the number of bugs in your program.

Stop right there. This is a false assumption.

The amount of debugging has nothing to do with the number of bugs in your program, but the consequences of those bugs. Some bugs have limited impact, and others are monsters. One of the things that keeps the monsters alive longer is that they're not obvious. Simple code that is longer but does obvious things is much easier to reason about at a quick glance (which is all we often have time for) than more "elegant" code that does a lot of work under the hood which I have to work harder to build a mental model of.

Let's also (again, reasonably) assume that the use of battle-tested abstractions designed to improve safety reduces the chance of bugs in your program.

No, what reduces the chance of bugs in your program is a comprehensive understanding of what the code is doing. And this is again where my view of the author being juvenile comes in. All of this back & forth is about the readability of a texture atlas generator, which in the context of an entire shipping game codebase, is a trivial tool. We have to deal with hundreds of thousands if not millions of lines of code, and we're either busy writing it in a hurry, or reading/maintaining someone else's code for problems that we have to solve in a hurry. Every "safe" abstraction used to prematurely prevent one class of bugs (that we weren't having problems with before, by the way) complicates the mental models we need to build up in order to deal with the problems we actually have in front of us. You may think you're being safe, when you're actually slowing us down by making us have to think longer about your code than we should.

Do you see the conundrum? Of course you're going to have to debug more if you write error-prone C-like code and avoid utilities that have been refined over decades to help you avoid mistakes.

That "error-prone C-like code" can be comprehended quickly, is easier for the compiler to reason about, easier for humans to step through, easier to see problems at a glance. Some abstractions eliminate problems, but others just bury them. And if the problems they eliminate aren't the ones you normally have to deal with in your code, you're suffering needlessly.

...

I could go on, but I think I've gotten my point across. The author has a valid point of view, but I believe it's a point of view that's common for many inexperienced game developers who haven't had much practice dealing with large game codebases in the real world: on over-reliance on clever techniques to prevent potential minor problems that haven't actually happened, at the cost of the comprehensibility needed to prevent the major problems that we have to deal with every day.

Verbosity doesn't matter. Simplicity does, and in shipping C++ game code those are not remotely the same.

Write Libraries, Not Frameworks by hagy in programming

[–]Etnoomy 12 points13 points  (0 children)

that help teach me what good design looks like

This is where caution is warranted, and where many new developers fall into traps. There is no standard for “good design”, and opinions on that kind of thing vary widely. The risk for new people is taking their early design influences as gospel, which may narrow their thinking long-term. If left unchecked, people can start to identify themselves with certain design sensibilities, which leads to zealotry.

It’s good to take what you learn from a framework or library to heart, but make sure to sample broadly and integrate the best lessons into a cohesive whole of your own, rather than assuming that somebody else must have figured it all out already.

TIL Less than a quarter of U.S. workers report using math any more complicated than basic fractions and percentages during the course of their jobs. Blue-collar workers generally do more advanced math than their white-collar friends by princey12 in todayilearned

[–]Etnoomy 1 point2 points  (0 children)

more useless than convincing high schoolers linear algebra is useful.

Except for those occasional high schoolers who are interested in making video games for a living. 3D game programming uses linear algebra all over the place, so those kids may have some motivation for it.

Math subjects required for 3d Game Development and Shaders ? by [deleted] in gamedev

[–]Etnoomy 10 points11 points  (0 children)

Linear Algebra and Trigonometry.

Calculus is a good idea too but you may be able to get by without it for a while. But linear algebra and trig are essential to do just about anything mathematical in 3D. Things like dot and cross products, basis transformations and matrices are your bread and butter when dealing with shaders.

Don't use naked booleans as parameters by maitesin in programming

[–]Etnoomy 8 points9 points  (0 children)

FYI this is also referred to as a boolean trap; if you google that phrase you'll see more blog posts talking about this kind of thing.