I think it is also possible to just acknowledge the emotions in the heat of the moment, "process" them quickly as unproductive for the situation, and let them go their way.
Like the grandparent comment, I agree that this naturally requires training and effort. I also find that to be a more constructive way than to "suppress" your impulses/emotions for an unpacking later. Not saying you were necessarily directly advocating for that, just something that your comment made me think.
I think you and the person you are responding to are both correct. He added some important details and you added smaller but important details. Reality has a lot of nuances and different situations call for slightly different rules.
> concordance of action and "intention" .... must be united in ethically good action
Yeah, I had to disagree with how TFA brought "fake it till you make it" into this very discussion.
Yes, one can have "faking" that ultimately ends up creating the thing it promised....but I fear that for each such benign or constructive "fake" there are so many cases of Theranos et al that I could ever remove what you called intention and ethically good action from the calculation.
Alice is a horrible sociopathic monster that fakes being good because of the social utility it provides.
Bob is authentically, genuinely a "good" person (however you define it).
If the two are indistinguishable from an outsider's perspective, and arrived at a similar level of social status and "success" (intentionally vaguely defined), the path they got there may not matter to you. At least, it might not at a glance? If you don't think about it too long? Or deal with them for too long?
You are changed by the intention behind your decisions. Someone who continually chooses to do things out of greed turns into a greedier person. Someone who continually chooses compassion becomes a more compassionate person.
Even if the external outcome is the same, the direction towards which the person evolves is vastly different. And when lifted out of a narrow thought experiment, in real life, who you are does determine all the great and small ways you behave, and the methods you are willing to employ.
That’s why in the Sermon on the Mount, Christ says “It was said to those of old, you shall not murder, and whoever murders will be liable to judgement. But I say to you that everyone who is angry with his brother will be liable to judgement.”
You will find similar principles expressed in Buddhist teachings, or the Bhagavad Gita, or Confucian ethical philosophy. In this instance, anger on its own is merely a seed. But if left to grow, and it grows by you watering it, then eventually it expresses itself in a much more destructive way.
Maybe this is how it works, but how can we know this?
It could also be that doing good things for selfish reasons creates habits of doing good things, and after a while that is who you are and what you do.
There’s some real research into relevant topics and evidence-based models of how and why people change.
Generally, a period of ambivalence precedes change (most of the time, though there are documented cases of “quantum change” where a person undergoes a difficult change in a single moment without the usual intermediate stages and never relapses).
Ambivalence exists when a person knows in their mind reasons both for and against a change, and gives both more or less an equal mind share.
When that person begins to give an outsized share of their attention to engaging with thoughts aligned with the change, it predicts growing commitment and ultimately follow-through on the change.
The best resource I know of on this topic is “Motivational Interviewing” in its 3rd or 4th edition. It has a very extensive bibliography and the model of change it presents has proven itself an effective predictor of change in clinical practice.
Based on my understanding of that research, I’m inclined to agree with GP.
The main resource that I recommend is the one towards the bottom of the comment: “Motivational Interviewing” by W.R. Miller and Stephen Rollnick. I’ve read the third and fourth editions. The third edition is more concrete but also more complex, and more focused on the field of clinical psychology, while the fourth edition is a shorter book where it’s been generalized more to be more applicable to all kinds of helping relationships, but contains fewer specific examples of clinical practice.
In the second edition they had not yet broken up the concept of “resistance” into “sustain talk” and “discord,” which I found to be a helpful distinction.
About 10% of the book is its bibliography, so if you want more information about a specific claim you can usually find the primary source by following the reference.
Miller and Rollnick are the ones who developed the technique of motivational interviewing, so they have a strong connection to much of the research cited.
There are multiple ways, all of which are useful for you to decide whether it's true or not.
First, you can trust in the wisdom of those who came before you, i.e. scripture. Second, you could trust in tradition, which may say such things. Third, you can use reason yourself. Fourth, you could rely on personal experience.
If you tend to engage in suspicious behavior, you'll probably start regarding others with suspicion. Essentially, your actions will engender your world view.
This is a good take, and I agree that habits can do that to people.
On the other hand, the intention behind the habit/action easily twists it in actuality to something else.
I think the “fake it till you make it” I brought up upthread a great example of this. Yeah, it might end up with the fake becoming something valuable, or you building character, or whatever.
Or, the habit that is getting built isn’t positive hustle and tenacity, but just a habit of outright lying, constantly reinforcing itself.
Sometimes it’s impossible to see from the outside what is which until it breaks down.
It's a fair question, but would you trust them equally in an unanticipated crisis, where doing the right thing might be costly in hard-to-predict ways?
Yes, then there is no way to elevate Bob above Alice, but in practice I think the assumption of external indistinguishability is too strong, and even the suspicion that Alice is sketchy (i.e. without hard proof) is meaningful.
The trouble is, you can think you're dealing with a Bob, but you're actually dealing with an Alice, even after enduring multiple crises that didn't trigger their specific type of badness.
But as fun as this line of thinking is, my initial charitable post was only asking for a kind of "superficial" indistinguishability. As long as you don't think about it too hard, y'know?
My stance on this is: Try to find a way to do good that doesn't make you miserable. Lying is to yourself is a form of oppression, and lying to others is a tactic for enduring oppression. (Ask a queer person about their time in the closet if you don't understand what I mean here.) Oppression makes you miserable, and misery tends to result in vapid thinkpieces that don't scratch below the surface of the referenced source material.
But also: Be honest with yourself about what you want and why you want it. Whether for good or for ill. That way, at least you can have a modicum of peace. I wrote more about this train of thought recently, if anyone's curious: https://soatok.blog/2025/10/15/the-dreamseekers-vision-of-to...
But that’s not how it plays out.
What we see time and again is people who profess beliefs in positive philosophies and actions that don’t match. Look at any religion you like. Now look at how members of that religion actually behave. They’re people who profess a positive philosophy without the actions to match.
I’ll take someone who consistently does good but without a coherent positive philosophy over someone who talks a good game and behaves badly all day every day.
Exactly. I have been (forced) in catholic circles in my youth because of my mother and it's absolutely frightening how bad those people can act/talk, often openly.
Similarly, I have some far-left friends who constantly advocate for things close to communism but they are (by far) the stingiest and least sharing people I know.
I think there is some sort brain gymnastic that protects them against the incoherence.
This presupposes a constantly stable and omnipresent and benevolent society. Which it is not. Society always has reprehensible things in it, sometimes systematically sometimes sporadically. Society is not omnipresent or omniscient. And things go up and down over time. And one is never exposed to the whole society.
the only reason Alice's intentions matter is their ability to predict her future behavior. if we assume for the sake of argument her behavior will always be identical to bob's then not only does it not matter what her internal motivations are it's arguable that her internal motivations don't actually differ from bob's. Thinking is, after all, an action, and all of their actions are identical. Therefore it seems like your example assumes Alice's behavior both is and isn't identical to Bob's.
> Thinking is, after all, an action, and all of their actions are identical. Therefore it seems like your example assumes Alice's behavior both is and isn't identical to Bob's.
By your logic, I was heterosexual for my entire young adult life when I actively worked to deceive people from realizing my actual orientation :P
People employ dishonesty for lots of reasons, and in myriad ways. Sure, in this thought experiment, perfect indistinguishability means the difference is inconsequential. But you can use crises as an oracle to observe different behaviors, and thus undermine its indistinguishability.
To keep the cryptography going, this is like an active vs passive attack. Sure, it's IND-KPA, but is it IND-CPA or IND-CCA? Perhaps not!
that's the contradiction i'm talking about. deception requires effort and planning, it's not just casually doing something. I think that as I explore this I might fundamentally be arguing that saying the same words when you believe them true vs when you believe them false are measurably different, and that the only way for someone to say something falsely in exactly the same way they do truthfully is for them to believe that they're true. You said yourself, you actively tried to deceive people.
As far as using crises to undermine indistinguishability, that was another part of my point: if actions are indistinguishable between two actors we only care about the actors' motivation as an attempt to guess how likely they are to remain indistinguishable. If a crisis causes the two actors to distinguish themselves then, once again, we've undermined the original premise of the experiment.
then it follows that if their thinking is the same then their intentions are the same. given that thinking is an action, and the description says their actions are the same, then their thinking must be the same and therefore their intentions the same. it's meaningless to think of someone who only does what's right but only does it for wrong reasons as someone can only arrive at right actions through right thought, to allude to buddhism. if alice's motivations are truly different then her actions must diverge from bob's at some point (or we just assume that alice's actions and motivations have no relationship which, again, renders the question meaningless).
Not sure if I'm ready to buy into the "be afraid" mentality yet.
But what articles like this often seem to just completely gloss over is that while, yes, AI might not today be the force that makes every single short-story writer redundant, tech like this seldom goes backwards in capability and instead tends to get better... Cumulative small improvements for, say, 10-15 years does wonders, like the advent of the Internet showed.
> Aaron Ross Powell isn't an expert or even a highly informed amateur
Yeah, it was a embarrassing how hard he missed this mark while at the same time lashing out at "tHe TeCH BRos" and their inadequacy in taste two times in every sentence...
This same phenomenon seems to happen often. My go-to explanation is that the "serious middle ground" you mentioned is actually using the new tools doing some actual work, just a little more efficiently, without much fuss.
That usually does not make it into the headlines, and doesn't "drive engagement metrics" or whatever, so it also isn't in the interest of the news to push that middle ground narrative, and so we get the ridiculous polarization.
In my humblest of opinions, you are probably spot on about the autopilot vs. actually experiencing things.
As a concrete example, someone in this thread mentioned their older relative spending a lot of time with puzzles daily. I too watched my grandpa doing sudokus and crosswords, but in the end if there’s nothing much else, those too will quickly become uninspiring routine.
I really believe truly experiencing life does require some introspection so that you have agency.
And agreed, at one time I really got into Sudoku and Minesweeper, but my nerd mind quickly turned them into brainless pattern matching routines that required effectively no thinking. Don't get me wrong. I appreciate those abilities, but there's a time and place.
A commit is literally a snapshot :) It is also very easy to make.
Stop worrying about titles and content and commit to your heart’s content.
When ready, restructure those snapshots into a coherent story you want to tell others by squashing commits and giving the remaining ones proper titles and commit messages. I use interactive rebase for that, but there are probably other ways too.
Two different models. The metaphor I like to use is that RabbitMQ is a postal system, while NATS is a switchboard.
RabbitMQ is a "classical" message broker. It routes messages between queues. Messages are treated like little letters that fly everywhere. They're filed in different places, and consumers come by and pick them up.
Core NATS isn't really a message broker, but more of a network transport. There are no queues as such, but rather topologies of routes where messages are matched from producers and consumers through a "subject". You don't "create a queue"; you announce interest in a subject (which is a kind of path that can contain wildcards, e.g. "ORDERS.us.nike"), and NATS routes stuff according to the interests. So there's nothing on disk; and if a consumer isn't there to receive a message, the message is gone. Thus you can send messages back and forth, both point-to-point or one-to-many. NATS itself isn't reliable, but you can build reliable systems on NATS.
A common example of the lightweight, ephemeral nature of NATS is the request-reply pattern. You send out a message and you tag it with a unique reply address, the "inbox subject". The subject is just a random string (it may be called "INBOX.8pi87kjwi"). The recipient replies by sending its reply to that inbox. The inbox isn't something that exists; it's just a subject temporarily being routed on. So the sender sends a message and waits for the reply. NATS encourages you to use these ephemeral subjects as much as possible, and there can be millions of them. You can do RPC between apps, and that's a popular use of NATS.
JetStream is a subsystem built on core NATS, and is what you get when the designer of NATS thinks he can outsmart the designers of Kafka. JetStream is basically a database. Each stream is a persistent sequential array of messages, similar to Kafka topics or a RabbitMQ queue. A stream can be replicated as well as mirrored; one stream can route into another, so you can have networks of streams feeding into bigger rivers. Unlike core NATS, but similar to RabbitMQ, streams and their consumers have to be created and destroyed, as they are persistent, replicated objects that survive restarts.
Similar to Kafka, streams are just indexed arrays; you can use it for ephemeral events, or you can store long histories of stuff. Consumers can go back in time and "seek" through the stream. Streams are indexed by subject, so you can mix lots of types of data in a single stream (as opposed to multiple streams) and simply filter by subject; NATS is very efficient at using the index to filter. Like RabbitMQ but unlike Kafka, streams don't need to be consumed in order; you can nack (!) messages, or set an ack timeout, causing redelivery if acks aren't sent in time. In other words, JetStream can work like Kafka (where you always read by position) or like RabbitMQ (where messages are skipped once acked, but retried once nacked). JetStream has deduplication and idempotency, which allows you to build "exactly once" delivery, which is awesome.
Similar to how someone built a database on top Kafka (KSQL), the NATS team has built a key-value store on JetStream, as well as a blob store. They work the same way, through message ID deduplication. A stream is basically a bunch of database rows, with the message ID acting as primary key. So the stream acts as a primitive to build new, novel things on top of.
I think it's fair to say that RabbitMQ gives you opinionated tools to do certain things, whereas NATS and JetStream are a hybrid "multi model" system that can be used for more purposes. For example, you can embed NATS in your app and use it as a really lightweight RPC mechanism. You can use JetStream as a classic "work queue" where each worker gets a single copy of each message and has to ack/nack so the queue moves forward. You can use JetStream as a log of all actions taken in a system, with retention going back years. (NATS/JS is actually awesome for logging.) And so on.
We use NATS for different use cases at my company. In one use case, clients connect to an API to follow live, low-latency change events. For each such client connection, we register a NATS subject; then tons of processes will see this subject (and its settings, such as filters) and will all start send changes to that one subject. There's no single "controller"; it's all based on point-to-point and one-to-many communication.
(Full disclosure: I'm not familiar with newer RabbitMQ versions or the streaming stuff they've added, so it's possible that RabbitMQ has caught up here in some ways.)
Sorry, I'm not familiar with this tech so looked up Jetstream and it seems to be archived https://github.com/nats-io/jetstream. Not sure that would be a good endorsement to try to use something that is no longer maintained or am I looking at the wrong one?
JetStream was originally designed/built separately, but is now built into NATS. So that repo is obsolete. NATS with JetStream is here: https://github.com/nats-io/nats-server.
RabbitMQ shines when you need complex queue routing based on keys or headers. Instead of baking the logic to the app you can offload the routing logic to rabbitMQ. Same is true for NATS and Kafka.
I must say that rmq in k8s, is possible but hard to admin. It’s not a “toy”. But has great documentation. Will take several iterations to key in the right configuration for the use case.
NATS and Kafka can handle higher volumes on the same resources but IMO the use cases are different or you have to write lots of code app side to implement what rmq does with these tools.
NATS, especially in its most elementary form, is braindead simple, stateless, and ootb functional. If I only want a message broker/pubsub, I pick that. If I know on day 1 that I need queues or persistence, I would probably pick Rabbit over NATS’ offering (Jetstream).
Would you use NATS over Redis PubSub or Postgres Notify/Listen? Postgres's option I'm wary of for reasons I've discussed here before but Redis PubSub seems fairly simple to use and likewise not as uber-scalable as Kafka and other more heavyweight message broker systems.
Not the parent, but I would. We've been using NATS for about five years at my company, and we recently adopted JetStream, and have been really impressed with it.
NATS, especially with JetStream now, is a Swiss Army knife of messaging. It can do RPC, Kafka-type batch streaming, low-latency realtime notifications, large-scale network transfer, offline sync, work queues, mirroring, weighted routing, partitioning... it's incredibly flexible. The simple but powerful primitive you have around subject routing/mapping/transforms, stream placement, replication, offline lead nodes etc. are just fantastic. It's super reliable. It scales from tiny apps to huge ones. The CLI and API tooling around streams and consumers is also fantastic.
Everything just feels well-designed and sensible. The new key/value store and blob store (both built on top of JetStream as client-side abstractions) are also super neat, and we've started using this functionality.
Yes, and no issues at all. We run superclusters with a bunch of nodes, and the Raft-based leader election system has worked flawlessly so far (knock on wood!).
Keep in mind that NATS does not yet support value operations other than setting the whole value. Optimistic locking is supported, but NATS does not have inc/decrement, append, set members, etc. I believe such support is on the horizon, however.
I would probably use NATS just because I’m more familiar. I love redis but I’m fairly skeptical when my database starts wanting to be my message broker
Like the grandparent comment, I agree that this naturally requires training and effort. I also find that to be a more constructive way than to "suppress" your impulses/emotions for an unpacking later. Not saying you were necessarily directly advocating for that, just something that your comment made me think.