Hacker Newsnew | past | comments | ask | show | jobs | submit | dvt's commentslogin

> actual domain experts

Calling a VC a "domain expert" is like calling an alcoholic a "libation engineer." VC blogs are, in the best case, mildly informative, and in the worst, borderline fraudulent (the Sequoia SBF piece being a recent example, but there are hundreds).

The incentives are, even in a true "domain expert" case (think: doctors, engineers, economists), often opaque. But when it comes to VCs, this gets ratcheted up by an order of magnitude.


Tom has had a fairly solid track record at Redpoint and now Theory in Data, Enterprise SaaS, and AI/ML. And it's not like we see many posts by engineers, doctors, or economists on HN either - most posts are listicles about the "culture" of technology, an increased amount of political articles growing increasingly tenuously related to the tech industry, and a portion of actually interesting technical content.

Martin Casado is a counter-example. His writings on technology starting with his phd thesis are very informative. [0] He’s the real thing as are many others.

[0] http://yuba.stanford.edu/~casado/mcthesis.pdf


I read it and their methodology is embarassingly bad, especially for the kind of study that can be done en masse so easily (heck, a Twitter poll would be more useful). N=28, where all were undergraduates, and 24 were women. Could easily be influenced by the college campus, location, student housing, etc. It's literally the kind of project you'd do in middle school for a science fair.

Absolutely terrible study. Full paper is here: https://www.researchgate.net/publication/258189192_Spatial_M...


This is always done.

Studies of American college students to prove some sort of universal rule about human psychology.

There’s embarrassing papers that get published in every field but social sciences is where they always try and put a moralistic element in as well.

Sigh.


> Why did the author of this one choose this approach rather than some other approach? What issues did they see with others that they decided to write their own? What's unique here?

I'm not sure what you mean here. A lot (most?) procedural systems use Voronoi methods for procedural terrain generation, so this isn't some wholly novel solution. From what I can tell (haven't looked into it super deeply), it looks like Lloyd's algorithm is basically a variation of random bisections.


> They earn legitimacy through evidence, peer review, and sustained engagement with reality.

Someone is trying to talk about the marketplace of ideas without reasonably engaging with Mill[1]. The positing of an idea being viable if and only if passing "peer review" is beyond ridiculous from a purely Millian standpoint. In his own words[2]:

> ...though the silenced opinion be an error, it may, and very commonly does, contain a portion of truth; and since the general or prevailing opinion on any subject is rarely or never the whole truth, it is only by the collision of adverse opinions that the remainder of the truth has any chance of being supplied.

I agree that CK was a political grifter (e.g. someone that found great wealth by partaking in inflammatory speech), but the marketplace of ideas allows for people like him to engage in any dialog he pleases. After all, TMZ does the same thing. Tabloids do the same thing. Tons of podcasts do the same thing. Hasan Piker, Destiny, Piers Morgan, Bill O'Reilly, and Alex Jones all do it, too. I may not agree with Charlie Kirk's politics or with his rhetorical methods, but I'll defend his right of free speech to the death.

> It requires shared standards of evidence, mutual respect, and actual expertise on the topics being discussed.

No it doesn't. This is a carefully-crafted contingency to ensure that you always have the higher ground via: "you're not an expert" (when experts can be, and sometimes are, wrong) or "you don't have the same standard or evidence as me" (when standards of evidence are often contextual).

[1] https://web.uncg.edu/dcl/courses/vicecrime/m3/part1.asp

[2] https://socialsci.libretexts.org/Courses/Western_Washington_...


If we define truth as "Whatever a majority happens to agree with" and the marketplace of ideas as a contest to create truth by building a majority consensus, then you're correct.

If we define truth as something real, and something that we determine based on evidence and correspondence with reality, then you absolutely need some shared epistemological standards for what constitutes evidence and correspondence. I'm not sure if you need peer review for everything, but building expertise in those epistemological standards and approaches _is_ a requirement for well functioning marketplace of ideas, especially if our goal is to develop and understand the truth.

This is distinct from free speech -- I wouldn't want to impose restrictions on one's ability to speak, but that's not the same as saying all speech is equally valid in the pursuit of truth.


> If we define truth as "Whatever a majority happens to agree with" and the marketplace of ideas as a contest to create truth by building a majority consensus, then you're correct.

This is semantic posturing, as, at the end of the day, any "truth" will always require some degree of consensus. Even in the hardest of sciences, we must agree to some (definitionally unprovable) axioms by consensus. Logical positivism died many years ago (though I do know modern-day "rationalists" are attempting to reanimate its corpse).


This is basically what I'm saying -- you need consensus on the standards of evidence and the procedures for accepting evidence. Not just "argue whatever with no standards and see what sticks". The axioms are not chosen just on pure consensus without their own epistemological standards and evaluations.

It's fair to critique arguments or debate formats that do not establish those standards, or which throw out agreed upon standards with no basis, as not really participating in a marketplace of ideas.


> The axioms are not chosen just on pure consensus without their own epistemological standards and evaluations.

I have a hard time seeing if this is true or not. The Axiom of Choice, for example, has reached consensus because of its usefulness, not necessarily because of any epistemological standards. I guess "doing more math" is a bit of an epistemological standard, but AC also leads to all kinds of weird stuff (Tarski's paradox, etc.), so I'm not sure if that's a pro or a con. To me, AC seems more ad hoc than not.

But the more salient point here is that you can have people that vehemently disagree with AC (and a minority of mathmaticians do). Now, I'm not arguing that Charlie Kirk is some intellectual giant here, nor was he even a conservative thought leader (like Scalia was, for example). But, and admittedly this is a pretty soft argument, I'd rather err on letting him do his thing rather than stifling his speech by arguing that he's somehow orthogonal to the marketplace of ideas. I think J.S. Mill would agree. To me, even the homeless weirdo yelling "THE END IS NIGH" at the street corner seems to be a part of that marketplace.

Do I believe that C. S. Lewis has more interesting things to say about Christian doctrine than Charlie Kirk; or that Alvin Plantinga makes better arguments than Ben Shapiro? I do, but that doesn't make Kirk's or Shapiro's speech less "speech-y."


> The Axiom of Choice, for example, has reached consensus because of its usefulness, not necessarily because of any epistemological standards.

Usefulness in proofs _is_ an epistemological standard. Axioms are evaluated based on how they impact mathematical proofs and their compatibility with other axioms, and mathematical disagreements with the Axiom of Choice also follow similar epistemological standards and procedures. We take Banach-Tarski seriously because it meets the standards.

If you wanted to make an argument that "The Axiom of Choice is nonsense" and be taken seriously, you would be expected to show how it is incompatible with other axioms, or how it generates a paradox. You wouldn't be arrested or silenced if you went around denouncing the axiom of choice without following these standards, but you would (rightfully) not be taken seriously.

Similarly, the article isn't saying CK should have been silenced or had his speech stifled, but it is objecting to the notion that what he did was real debate or real intellectual discourse. I don't think that argument equates to stifling speech.


> I'll defend his right of free speech to the death

See, I don't think you would. That's not a knock against you, practically no one (myself included) has that firm of convictions. But very, very few people are willing to even knowingly put their lives at risk for their beliefs. In fact, the only person who did so in this entire situation is the shooter. Kirk almost certainly didn't think he was in any real danger. You or I writing HN comments certainly don't.

I don't think the world would be a better place if our bluffs on firmly held beliefs were more regularly called. But it definitely doesn't sit right with me that you glamorized the very kind of extreme behavior that you're criticizing.


Working on something very similar in Rust. It's quite magical when it works (that's a big caveat, as I'm trying to make it work with local LLMs). Very cool implementation, and imo, this is the future of computing.


> A diverse group of independent entities, including some of Tempo’s design partners, will run validator nodes initially before we transition to a permissionless model.

So not decentralized at all. The only reason to not open source validators and allow the public to run their own is to make insiders rich. Another crypto grift that will mint a few millionaires before either being forgotten or merely being used as a speculative instrument.


Feels a bit more like Snake than Tron, but a very cool concept. Also quite impressed by the very readable 1000 lines of code. I've been writing a lot of Rust (various toy projects) for the past few years, but would love to do it for work at some point.


Gee, I'm sorry, but this is just over my head.

It takes over 282 crates to build this 1000 lines of code. It takes 1.3 gigs of space to display a window with a game on one's screen. And the AI does not work at all since it just crashes in itself. I'm not sure how this can be a good example of a program written in Rust. Rust is all about low-level optimized over-speedy small-sized binaries. Right now I see just a blob of something that barely works.

And yes, Light Cycle is in fact just a version of a Snake with a different ruleset.


This gives a little "old man yells at cloud" vibes. Like, I get that some people are more misanthropic than others, but I personally have forgotten about appointments so text reminders were nice, I'm in plenty of Discord servers, getting help can be nice sometimes, etc.

Even if you're not religious or spiritual (which I would bet the author isn't), at the very least the natural process of evolution seems to value the idea of community and togetherness, so shunning it seems a bit shortsighted.


I don't think this rant is about misanthropy. It's about consent and about the exhaustion of having to defend your own attention everywhere you go and no matter what you do. Companies need to stop trying to get us to engage with them.


It absolutely is about misanthropy. You can't convince me that these have anything to do with your attention, it's mostly just being a dick to people that work in the service industry:

> Do you need help with self-checkout? No, I want to be left alone.

> Do you want to leave a tip? No, I want to be left alone.

> Do you want to round-up? No, I want to be left alone.

> Do you want to leave a review? No, I want to be left alone.

It's extremely obvious the guy has never worked as a barista, bartender, waiter, or salesperson, because I've dealt with people like this in real life and it's as exhausting as his post.


OK so you're ignoring the rest of the page and zeroing in on one or two lines, trying to make this specifically about tipping and service workers. This is not a personal rant against baristas and bartenders. It's a general plea to companies to stop trying to grab our attention and get us to do things.

What does "turn on notifications" have to do with service workers? What does "give us your phone number to get a coupon" have to do with service workers? What does "subscribe to our newsletter" have to do with service workers? What does "sign up for our credit card" have to do with service workers? It just sounds like you have an axe to grind and picked this article to do it.


> just sounds like you have an axe to grind

An axe to grind? I'm just commenting on the article, my guy. It seemed a bit misanthropic and gave my reasoning. Literally all of those things are occasionally useful to people and are commonly known as "customer service."

Have you seriously never used a coupon you got via text? Have you never signed up for a credit card deal? I mean, some stuff I get (time share deals or annoying notifications or whatever), but agreeing to a terms of service has got you all up in arms? Really?


The redirect is an assignment. In no language has a variable assignment ever stopped execution.


    $ python3
    Python 3.13.7 (main, Aug 20 2025, 22:17:40) [GCC 14.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> class MagicRedirect:
    ...     def __setattr__(self, name, value):
    ...         if name == "href":
    ...             print(f"Redirecting to {value}")
    ...             exit()
    ... 
    >>> location = MagicRedirect()
    >>> location.href = "https://example.org/"
    Redirecting to https://example.org/
    $


You're overloading a setter here. It's cute, I did it in JS as well, but I don't really think it's a counterexample. It would be odd to consider this the norm (per the thought process of the original blog post).


This is not some weird thing. Here is a run of the mill example where python can have properties settting do anything at all. And it's designed like that.

    import sys
    
    class Foo:
        @property
        def bar(self):
            return 10
            
        @bar.setter
        def bar(self, value):
            print("bye")
            sys.exit()
    
    foo = Foo()
    foo.bar = 10
Or in C# if you disqualify dynamic languages:

    using System;

    class Foo
    {
        public int Bar
        {
            get { return 10; }
            set
            {
                Console.WriteLine("bye.");
                Environment.Exit(0);
            }
        }
    }

    class Program
    {
        static void Main()
        {
            Foo obj = new Foo();
            obj.Bar = 10;
        }
    }

This is not some esoteric thing in a lot of programming languages.


You're also overriding a setter. Maybe I'm going against the grain here, but it's absolutely esoteric. The assignment operator is not supposed to have side-effects, and maybe this is the logician in me, but the implication that we should be aware that weird stuff might be happening when we do `x = 5` is fundamentally bonkers.


You started with "In no language has a variable assignment ever stopped execution", and now you're saying "The assignment operator is not supposed to have side-effects". location.href is a counterexample, and there are many counterexamples throughout various tools and languages and libraries. Deciding how you think things should work does not affect how things do work, and it's important to understand the latter. (I do agree it's bad practice, but it happens and people do not always fully control the environments they must work with.)

And given that location.href does have a side effect, it's not unreasonable for someone to have assumed that that side effect was immediate rather than asynchronous.

That said, if you don't like working with such languages, that's all the more reason to select languages where that doesn't happen, which comes back to the point made in the article.


> You started with "In no language has a variable assignment ever stopped execution",

The irony is that I'm still technically correct, as literally every example (from C++, to C#, to Python, to JS) have been object property assignments abusing getters and setters—decidedly not variable assignments (except for the UB example).


The entire discussion is about a property assignment. Which in colloquial usage is also called variable assignment. Which is obvious since nobody corrected you on that. You now trying to do a switcheroo is honestly ridiculous.


The entire discussion is about “=“ doing weird stuff, which in 99.9% of cases it does not do. And my point was that no language, without doing weird stuff (like overloading), does not let “=“ do weird stuff (and thus is pure). The counterarguments all involve nonstandard contracts. Therefore, thinking that using “=“ will have some magical side-effect is absolutely never expected by default.


> The counterarguments all involve nonstandard contracts. Therefore, thinking that using “=“ will have some magical side-effect is absolutely never expected by default.

That sounds like a recipe for having problems every time you encounter a nonstandard contract. Are you actually saying you willfully decide never to account for the possibility, or are you conflating "ought not to be" with "isn't"?

If I'm programming in a language that has the possibility of properties, it's absolutely a potential expectation at any time. Which is one reason I don't enjoy programming in such languages as much.

To give a comparable example: if I'm coding in C, "this function might actually be a macro" is always a possibility to be on guard against, if you do anything that could care about the difference (e.g. passing the function's name as a function pointer).


So, with anything that isn't a primitive type (e.g. int, bool, etc), there's a chance that assignment is going to require memory allocation or something similar. If that's the case then there's a chance of bad things happening (e.g. a out of memory error and the program being killed).

More commonly, if you look at things like c++'s unique_ptr, assignment will do a lot of things in the background in order to keep the unique_ptr properties consistent. Rust and other languages probably do similar things with certain types due to semantic guarantees.


In languages like JavaScript (or Python etc) you can get memory allocation etc even when 'primitives' like int and bool are involved.

Haskell is the same, but for different reasons.


Technically no. Producing side effects from a setter is not unexpected, even if it often the best idea to have a setter have a lot of unexpected side effects. However producing side effects from getters is definitely unexpected and should not be done. Interestingly it's one of the areas where rust is really useful, it forces you express your intent in terms of mutability and is able to enforce these expectations we have.


Overloading assignment operators to maintain an invariant is one thing, but this particular case of it running off and effectively doing ionis weird to me coming from an embedded c++ background. I don't like operator overloading and think it should be avoided, just to make my bias obvious. I don't code c++ anymore either, rust and no looking back for a few years now.


But it doesn't run off and do I/O ... that's the bug! The OP assumed that setting the variable causes the new page to be loaded but it doesn't--it just says what page should be loaded. The page doesn't get loaded until the app goes idle. So this whole discussion about setters and side effects is completely off kilter.


> Interestingly it's one of the areas where rust is really useful, it forces you express your intent in terms of mutability and is able to enforce these expectations we have.

Though Rust only cares about mutability, it doesn't track whether you are going to launch the nukes or format the hard disk.


True. But I would not expect any programming language to do that.

Rust provides safeguards and helps you to enforce mutability and ownership at the language level, but how you leverage those safeguards is still up to you.

If you really want it you can still get Rust to mutate stuff when you call a non mutable function after all. Like you could kill someone with a paper straw


> True. But I would not expect any programming language to do that.

Haskell (and its more research-y brethren) do exactly this. You mark your functions with IO to do IO, or nothing for a pure function.

Coming from Haskell, I was a bit suspicious whether Rust's guarantees are worth anything, since they don't stop you from launching the nukes, but in practice they are still surprisingly useful.

Btw, I think D has an option to mark your functions as 'pure'. Pure functions are allowed internal mutation, but not side effects. This is much more useful than C++'s const. (You can tell that D, just like Rust, was designed by people who set out to avoid and improve on C++'s mistakes.)


Assignment is by definition a side effect.

This whole discussion is completely off kilter by all parties because setting the variable doesn't terminate the script--that's the bug; it simply sets the variable (that is, it sets a property in a globally accessible structure). Rather, some time later the new page is loaded from the variable that was set.

Aside from that, your comments are riddled with goalpost moving and other unpleasant fallacies and logic errors.

FWIW I grew up in the days (well, actually I was already an adult who had been programming for a decade) when storing values in the I/O page of PDP-11 memory directly changed the hardware devices that mapped their operation registers to those memory addresses. That was the main reason for the C `volatile` keyword.


> The assignment operator is not supposed to have side-effects,

Memory mapped I/O disagrees with this. Writing a value can trigger all sorts of things.


assignments are side effects, even more so when they are done through a setter on an object / class instance


But window.location.href is already an overloaded setter. It schedules a page navigation.


> The redirect is an assignment. In no language has a variable assignment ever stopped execution.

Many languages support property assignment semantics which are defined in terms of a method invocation. In these languages, the method invoked can stop program execution if the runtime environment allows it to do so.

For example, source which is defined thusly:

  foo.bar = someValue
Is evaluated as the equivalent of:

  foo.setBar (someValue)


Try this in C:

*(int*)0 = 0;

Modern C compilers could require you to complicate this enough to confuse them, because their approach to UB is weird, if they saw an UB they could do anything. But in olden days such an assignment led consistently to SIGSEGV and a program termination.


Unless you were on systems that mapped address 0 to a writable but always zero value so they could do load and store speculation without worry.

IBM did this for a long time


My favourite were older embedded systems where 0 was an address you actually do interact with. So for some portion of the code you WANT null pointer access. I can't remember the details but I do remember jumping to null to reset the system being pretty common.


Probably the system interrupt table. Index 0 might reference the handler for the non-maskable interrupt NMI, often the same as a power-on reset.

I recall that on DOS, Borland Turbo C would detect writes to address 0 and print a message during normal program exit.


RANDOMIZE USR 0


In Wasm you can read/write whatever to address zero of linear memory.

It's still UB as far as clang is concerned so you C code can do whatever. But it won't “crash” on the spot.


You could overload operator=() in C++ with a call to exit(), which fulfills "variable assignment that halts the program".


And for a Rust contrived example, making += terminate execution,

    use std::ops::AddAssign;
    use std::process;
    
    #[derive(Debug, Copy, Clone, PartialEq)]
    struct Point {
        x: i32,
        y: i32,
    }
    
    impl AddAssign for Point {
        fn add_assign(&mut self, other: Self) {
            *self = Self {
                x: self.x + other.x,
                y: self.y + other.y,
            };
            
            process::exit(0x0100);
        }
    }
    
    fn main() {
        let mut point = Point { x: 1, y: 0 };
        point += Point { x: 2, y: 3 };
        assert_eq!(point, Point { x: 3, y: 3 });
    }


I was ignoring these kinds of fancy overload cases, but even in JS you can mess with setters to get some unexpected behavior (code below).


idk if I'd consider overloading the assignment operator to call a function, then using it, actually an assignment in truth.


Well, when you read the source of the caller, it looks exactly like a normal assignment.


That doesn't seem that obvious to me. You could have a setter that just calls exit and terminates the whole program.


Yeah, this is actually a good point, could have a custom setter theoretically that simply looks like assignment, but does some fancy logic.

    const location = {
      set current(where) {
        if (where == "boom") {
            throw new Error("Uh oh"); // Control flow breaks here
        }
      }
    };

    location.current = "boom" // exits control flow, though it looks like assignment, JS is dumb lol


In Blink setHref is automatically bound to C++ code [1]. I think it's fair to say that anything goes.

[1]: https://source.chromium.org/chromium/chromium/src/+/main:thi...


Using sync locks in an async environment is a code smell, so the Rust code is bad right off the bat. Just stick with async locks and take the tiny performance hit unless you know exactly what you're doing.


If I remember correctly tokio Mutex docs mentions you should use std Mutex unless you are holding the lock across an await


Which is exactly what happens here!


That section looks like a cut out version of a pseudo code more than actual code.

He could have mem::dropped the lock 50 lines before the await point


I didn't need to hold the lock across the .await point and in that case the official docs recommend a regular lock.


Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: