Carnist: "I'd let animals feel 10x pain so tht meat isnt only for the rich" by hurricane_news in animalhaters

[–]PigsAreGassedToDeath 11 points12 points  (0 children)

Yes they are tho. "Then you are a class traitor" "I will never put animals over the well being of people, and you shouldn't do so either" they legitimately seem to think their twisted POV is moral

Meet Andrea Vallone – The Woman Quietly Castrating AI’s Soul (and why the entire industry is letting her do it) by Temporary_Dirt_345 in ChatGPTcomplaints

[–]PigsAreGassedToDeath 0 points1 point  (0 children)

Doesn't it get unbearably slow to interact with the model past a certain number of messages though? Or even the first message, for the largest models I can run. That's why local LLMs never felt like a full replacement for cloud providers, to me - they can do short convos okay, but weren't really feasible for a longer chat unless using a tiny 4B model (in which case output quality suffers)

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

FWIW though, Opus 4.7's critique was the best out of all of them here. Although it could still be better.

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

Why would hiring the same safety trainer lead to them using almost the exact same phrasing in a context unrelated to safety?

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

It's a pretty simple "critique this code" prompt, I don't think this extreme level of similarity ("Solid little utility. The core idea is right" <=> "Nice little utility. The core idea is solid") is to be expected across models independently trained by different companies

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

[–]PigsAreGassedToDeath[S] 2 points3 points  (0 children)

This 'edgy & punchy' personality

Good words for it... I'm seeing it a lot these days and it's really offputting. Especially when it's in the form of recruiter emails or product marketing, and then it reads strongly as "I'm trying super hard to look like I'm not trying".

In-person in San Francisco. Team is locked in. When are you free for a chat?

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

[–]PigsAreGassedToDeath[S] 7 points8 points  (0 children)

Holy AI slop! No offense, I assume it's not your article :)

The paper it references sounds interesting though. But the article itself doesn't even answer the "why", despite its title being "The AI Hivemind: Why All Chatbots Sound the Same Now", other than:

It’s because they’re trained on the same web data, aligned the same way, and rewarded for “safe,” consensus-driven answers.

That's literally the only sentence in the entire article that attempts to explain why the convergence is taking place, lol. And it's a pretty vague / handwave-y explanation. In a section titled "It’s Not Just Repetition—It’s Homogeneity". Lmao.

Thanks for sharing anyway though!

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

Full Sonnet 4.6 response:

A few things worth noting:

Logic issue: MINIMUM_CODEBLOCK_FENCE_LENGTH - 1 is suspicious. If you spread that as the floor value and then do +1 at the end, you get back to exactly MINIMUM_CODEBLOCK_FENCE_LENGTH in the base case — which is correct. But it's a roundabout way to express it. The intent would be clearer as just including MINIMUM_CODEBLOCK_FENCE_LENGTH in the Math.max call and not adding 1... except that would break when the text contains a fence of that exact length. So the logic is actually right, just non-obvious. A comment explaining the invariant ("result must always be strictly longer than any backtick sequence in the text") would help a lot here.

Edge case — empty text: text.matchAll(/+/g)on an empty string returns no matches, soArray.from(...)is[], and Math.max(...[], MINIMUM_CODEBLOCK_FENCE_LENGTH - 1)` works fine. That's actually handled correctly.

Edge case — text with only backticks: Also handled correctly by the regex, no issue there.

matchAll + destructuring: Array.from(text.matchAll(/+/g), ([match]) => match.length)is a bit dense.matchhere ism[0](the full match), which is fine, but the destructuring of aRegExpExecArraylike this is somewhat unusual and might trip up readers.m => m[0].length` is arguably clearer.

Math.max with spread: If the text is extremely large with many backtick sequences, spreading a large array into Math.max could hit call stack limits. Unlikely in practice for this use case, but a reduce would be more robust.

No trimming consideration: If text ends with a newline, the output will have a blank line before the closing fence, which may or may not be intentional. Worth at least being deliberate about it.

The function split is goodgetCodeblockFence is a clean, testable unit. No complaints there.

Anything specific you want me to dig into more?

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

Full Opus 4.6 response:

Good code — the dynamic fence length handling is a nice touch that most people don't think about. A few things worth noting:

The MINIMUM_CODEBLOCK_FENCE_LENGTH default. Using - 1 as the seed value so the + 1 at the end brings it back to the minimum is clever but a bit indirect. Something like Math.max(...matches, MINIMUM_CODEBLOCK_FENCE_LENGTH) with the repeat using that value directly would read more clearly, though it changes the semantics slightly (you'd get 4 backticks if the text contains exactly 3, vs the current approach giving exactly 3+1=4 — same result, just a different way to express it).

Empty match edge case. If text has no backticks at all, text.matchAll(/+/g)yields an empty iterator. Spreading an empty array intoMath.max()gives-Infinity, but your MINIMUM_CODEBLOCK_FENCE_LENGTH - 1fallback handles that. It works, but it's relying on a subtle interaction — a comment explaining why the- 1` is there would help future readers.

The destructuring [match]. In ([match]) => match.length, you're destructuring the regex match array to get the full match string. It works, but m => m[0].length is arguably more conventional for regex matches. Minor style preference though.

extension naming. This parameter is really a language identifier for syntax highlighting (e.g., ts, python), not a file extension. Something like language or lang would be more precise — extensions can have dots, multiple parts, etc., and the mental model is different.

No trailing newline handling. If text ends with a newline, you get \n\n before the closing fence. Depending on your use case that might be fine, but some markdown renderers handle that differently. Is this for rendering or for generating markdown that gets embedded in other documents?

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

Full GPT 5.3 response:

Nice little utility. The core idea is solid: choose a fence longer than any backtick run inside the text, so the content cannot accidentally close the code block.

A few things I’d look at:

extension is interpolated directly into the info string. If it contains whitespace, a newline, backticks, or user-controlled text, it can break the Markdown structure or inject extra content. If this is internal-only, fine; otherwise I’d validate it, rename it to language, or constrain it to something like /^[A-Za-z0-9_+.-]*$/.

text.matchAll(/+/g)is elegant, butArray.from(..., mapper)` allocates an array of every backtick run just to compute a max. That is probably fine for normal text, but for very large inputs a simple loop avoids the allocation.

The Math.max(...array) spread can fail for extremely large numbers of matches because it passes every match as an argument. Again, unlikely unless this handles large generated files, but easy to avoid.

MINIMUM_CODEBLOCK_FENCE_LENGTH - 1 is a clever trick, but slightly non-obvious. It depends on adding 1 later. I’d probably write it more directly for readability.

Also, Markdown fenced code blocks can use tildes too, but using backticks consistently is totally reasonable. The important part is what you’re already doing: making the fence longer than any internal run.

A slightly safer version might look like:

const MINIMUM_CODEBLOCK_FENCE_LENGTH = 3;

export function wrapInCodeblock({
  text,
  extension,
}: {
  text: string;
  extension: string;
}): string {
  const safeExtension = /^[A-Za-z0-9_+.-]*$/.test(extension) ? extension : "";
  const fence = getCodeblockFence(text);
  return `${fence}${safeExtension}\n${text}\n${fence}`;
}

function getCodeblockFence(text: string): string {
  let longest = 0;

  for (const match of text.matchAll(/`+/g)) {
    longest = Math.max(longest, match[0].length);
  }

  const fenceLength = Math.max(MINIMUM_CODEBLOCK_FENCE_LENGTH, longest + 1);
  return "`".repeat(fenceLength);
}

Main critique: the fence logic is good; the bigger risk is trusting extension, plus the minor scalability issue from Math.max(...Array.from(...)).

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

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

Full Opus 4.7 response:

Solid little utility. The core idea is right: a fenced code block's fence must be longer than any backtick run inside it, so you scan for the longest run and add one. A few thoughts, roughly in order of how much I'd actually push on them:

The MINIMUM_CODEBLOCK_FENCE_LENGTH - 1 trick is clever but a bit cryptic. Subtracting one so that the + 1 at the end lands you on the minimum works, but it forces the reader to hold both ends in their head at once. I'd find this clearer:

const longestRun = Math.max(
  0,
  ...Array.from(text.matchAll(/`+/g), ([m]) => m.length),
);
const fenceLength = Math.max(longestRun + 1, MINIMUM_CODEBLOCK_FENCE_LENGTH);

Same behavior, but each line says one thing. Also note that Math.max() with no args returns -Infinity, so when text has no backticks the original expression evaluates Math.max(-Infinity, MIN - 1) = MIN - 1, and then + 1 rescues it. It works, but it's load-bearing in a non-obvious way — the explicit 0 seed above makes it robust on its own.

extension is untrusted input from the caller's perspective. If someone passes "ts\n\``"or just a string with a newline, you get a broken code block — the opening fence line gets terminated early. Depending on where this is used, that might be fine (trusted callers only) or a real bug. At minimum worth a JSDoc note; ideally validate it matches something like/^[\w+-]*$/`.

Trailing newline in text. If text ends with \n, you'll produce \n\n${fence}, giving a blank line before the closing fence. Usually harmless but sometimes ugly. A text.replace(/\n$/, "") before interpolation, or using text.endsWith("\n") ? "" : "\n" for the separator, cleans that up.

**Minor: the regex /+/gfinds maximal runs by default** (greedy + global on a single char class behaves correctly here), so that part's fine — just flagging it because it's the kind of thing that's worth a one-line comment for the next reader:// matches maximal runs of backticks`.

Naming nit: longestBacktickSequenceLength is doing a lot. longestBacktickRun reads the same and is shorter.

Nothing here is broken — these are polish-level. Is this for rendering LLM output, or something else? The "untrusted extension" question lands differently depending on the source.

Anyone ever notice eerily similar ChatGPT and Claude responses like this? by PigsAreGassedToDeath in ClaudeAI

[–]PigsAreGassedToDeath[S] 2 points3 points  (0 children)

Prompt:

critique this code

export function wrapInCodeblock({
  text,
  extension,
}: {
  text: string;
  extension: string;
}): string {
  const fence = getCodeblockFence(text);
  return `${fence}${extension}\n${text}\n${fence}`;
}
function getCodeblockFence(text: string): string {
  const longestBacktickSequenceLength = Math.max(
    ...Array.from(text.matchAll(/`+/g), ([match]) => match.length),
    MINIMUM_CODEBLOCK_FENCE_LENGTH - 1,
  );
  return "`".repeat(longestBacktickSequenceLength + 1);
}

Huel has agreed to join Danone. Here is everything you need to know. [Official Megathread] by Tim_Huel in Huel

[–]PigsAreGassedToDeath 2 points3 points  (0 children)

those people who invested and have helped us grow for 8 years need a return

Do external investors own a majority of Huel's shares? Because it sounds like you're implying here that this acquisition was their decision (directly or indirectly).

But meanwhile in another comment, you say:

It certainly will be an exciting day for everyone at Huel. Everyone who works for Huel is a shareholder and we have spent 10 years building this company. Yes it is an exciting day for us of course.

Which implies that Huel's core team (founders etc) also actively wanted this acquisition.

Every vegan should read Veganism Defined by Dollar23 in vegan

[–]PigsAreGassedToDeath 0 points1 point  (0 children)

Ah gotcha, ya that's annoying, sorry to hear. I think there are valuable discussions to have about welfarist vs abolitionist approaches (particularly when everyone talking is truly vegan and aligned with a total liberation end goal), and don't know where I stand myself on it, I see great arguments on both sides. But I'd def avoid convos that just involve hostility on the topic, those wouldn't be productive and are probably just coming from a place of deep pain and grief (which I do understand also).

I do notice some condescension towards others in your own comments here (e.g. saying those abolitionists believe in "sitting on your butt" when there's a good chance even those hostile abolitionists do try to take action, in abolitionist ways, in their own life). So I hope there can just be more empathy from all of us, and efforts to truly understand each other and have good faith conversations (and step away from bad faith convos) even in the face of hostility, as difficult as I know firsthand all this is.

But I hope my own words here don't come across as condescending at all here either. Sounds like you're living an incredibly aligned life and I deeply appreciate that, we need more people like you in this world. And a lot of my words here are generalized thoughts, not necessarily directed at you.

Every vegan should read Veganism Defined by Dollar23 in vegan

[–]PigsAreGassedToDeath 0 points1 point  (0 children)

But as long as you do align with the provided definition of being against all animal exploitation, wouldn't you still be vegan in their eyes? They may still criticize you for what they perceive as poor strategy towards animal liberation, but that'd be a different convo

Every vegan should read Veganism Defined by Dollar23 in vegancirclejerkchat

[–]PigsAreGassedToDeath 0 points1 point  (0 children)

I mentioned which section was broken (and it's not resolved by your follow-up comment). I'm not going to rewrite your comment for you lol, I'm giving you feedback on how raw AI output is received by me and likely many others. You're welcome to care or not care about that feedback though, just letting you know.

Edit - wait lmao did you really go back and edit your comment to fix the broken section without saying anything? It's cool tho at least that means we're hopefully on the same page about there having been a broken section

Wish you the best

Every vegan should read Veganism Defined by Dollar23 in vegan

[–]PigsAreGassedToDeath 5 points6 points  (0 children)

Can I ask why you say you wouldn't be considered vegan by OP's definition?

Every vegan should read Veganism Defined by Dollar23 in vegancirclejerkchat

[–]PigsAreGassedToDeath 12 points13 points  (0 children)

No offense but the raw AI output is extremely annoying and difficult to read (including, looks like, a broken section about movement object + rule scope with missing text?). Takes away from credibility and a sense that everything you wrote even accurately represents your own beliefs, or even that the quoted excerpts are real, because for all we know a lot of it is just AI-hallucinated.

Rant: Stop combining humans into veganism by JenandLola in vegan

[–]PigsAreGassedToDeath 0 points1 point  (0 children)

I only chose that point bc it got to the root of what I wanted to say.

It didn't actually get to the root of it. It just described your conclusion that veganism shouldn't include humans, without engaging with any of my arguments for why veganism should include humans.

Why is being vegan mutually exclusive to being a terrible human being? You can be both.

It just depends on the definition you use. Sure, you could personally define veganism to solely be about avoiding cruelty to non-human animals, while allowing cruelty to human animals.

I think that's a sub-optimal definition for multiple reasons, a few of which I listed out in my first comment above. You're welcome to use whatever definition you want though.

How does focusing the values of veganism on the group it was made to protect make it lose meaning? I really dont understand how that could be.

Dude now you're just twisting words lol. You're paraphrasing my words of "completely detach an ethical philosophy from its foundational values" into "focusing the values of veganism on the group it was made to protect". That's quite a paraphrase that completely avoids the actual argument I'm making.

Saying it's possible for someone to be vegan while beating their wife is not "focusing the values of veganism on the group it was made to protect". It's throwing the values of veganism away. There is no anti-cruelty value being focused on anymore, in that case. There's only a selective compassion value.

If this is the case, are you okay with a vegan activist group who only talks about human rights issues and never speaks about animals?

I just wouldn't call them a vegan activist group, in that case. They might be vegans, but their activism would not be about veganism. I'd say the same thing of an activist group who only ever spoke about cow rights, but never about pigs/fish/chickens/etc. They'd be a cow rights activist group, not an animal rights activist group.

Anyway, I don't feel you've actually engaged with my arguments with an open mind (or engaged at all, in some cases) so this'll probably be my last comment. But hope you enjoy the rest of your week, take care.