Anyway, the particulars of this person's struggle don't matter. The default marriage contract is stupid and it seems you can get into bad situations that might not even be possible with a non-marriage contract; don't go into a marriage blind.
851 karma · joined March 26, 2009
Anyway, the particulars of this person's struggle don't matter. The default marriage contract is stupid and it seems you can get into bad situations that might not even be possible with a non-marriage contract; don't go into a marriage blind.
Snake oil alarm: "the keys to productivity" - maybe there's proof that this approach can work, but "THE keys"? As in there's nothing else that can work? Come on.
Good luck.
Let's not get into plagiarism-detection arms race; consider automatic refactorings / pretty printers with variations, and human input to vary variable names.
The premise is that for real world inputs some code may never be used, and so it's an advantage for late-checked types that you can have wrong code that will never cause any observed bug. I'd rather "waste" my time deleting nonsense code after it fails an early type-check. Less code = better reading/maintenance/extension.
Better to focus on the real advantages of single-type languages (usually, terser programs, although type inference can make some haskell/ML programs apparently type-less).
But we can agree that the images on the TV screen are caused by the configuration of physical matter making up the TV, just like our consciousness is caused by the physical matter making up our brain.
Granted, people have subjective (i.e. feel-happy) reasons to throw out Occam's razor and suppose we have e.g. an eternal soul, but the search for the soul-receiver in the brain will just give you fits (not so bold prediction: they'll never find it, because it doesn't exist).
Imagine that everyone on HN were actively optimizing what they say according to what gets voted up. Sound good?
There are men like that. So what? Long-winded article w/ poor quality of evidence and thinking.
[Send 4 bytes * 200, then (round trip latency later) receive 4 bytes * 200] is fundamentally different than [(send 4 bytes, then (round trip latency later) receive 4 bytes) * 200]. Whether the message content is "ignored" is irrelevant.
Or, put another way, it's ridiculous for you to modify the Go program in that way (which will very likely send and receive only a single TCP segment over the localhost "network") and report the faster time as if it means anything. If you modify both programs in that way, fine. But it's something completely different.
I do think he's doing the smart/right thing (now).
The comments on the article page have a different report which doesn't suffer from this implausibility:
go server + go client 22.02125152
scala server + scala client 3.469
go server + scala client 3.562
scala server + go client 4.766823392
I wonder what makes this thread so different. More people are focused on the costs as well as the benefits (I agree that the costs are significant). If it's not just a random difference in the initial seeding of comments, I'd have to guess that it's the authority of latimes.com talking about how (many!) Californians are startled etc. Now this is a safe, approved line of thought.
This calls into suspicion the independence of the typical HN comment. If you're just posting to be seen on the prevailing side, why comment at all? The less deeply you think before talking, the more you're swayed by subtle priming and attention-focusing trivia.
Also interesting, a years-ago attempt to shame Apple into enabling Amber alerts: https://news.ycombinator.com/item?id=509741
It sounds like a less intrusive amber-alert UI (a regular text, for example) would be accepted by most, although I'm sure if you tally up the attention spent vs. the increased odds of catching a criminal vs. increased harassment of near-matches, it's not a clear win.
To explain the Nagle algorithm's irrelevance to this case, we have to understand how it works. It doesn't delay any writes once you read. It only affects two consecutive small writes (my memory was fuzzy so I checked http://en.wikipedia.org/wiki/Nagle's_algorithm ). Odds of preemption between the client's write and its read seem small, so it shouldn't matter whether you Nagle or not.
Unless you have evidence that Go has MacOS-only bugs, this is meaningless speculation (though I agree that it's possible that there's no problem on Linux and that people don't generally run mac servers, I'm not sure why we should privilege your hypothesis).
Agreed about GOMAXPROCS=4 - that seemed questionable to me (I don't know what it does, precisely, but I don't see a 4-anything limit in the Scala code).
p.s. to parent: "the JVM TCP stack?" really?
Your modified Go server doesn't return "Pong" for "Ping". It returns "Ping". And the "a small change" version is nonsense. It's fundamentally different. - you're firing off all your requests before waiting for any replies, and so hiding the latency in the more common RPC style request-response chain, which is a real problem.
You speculate a lot ("hiding some magic" "likely doesn't need to observe the answers") when you haven't offered any insight.
EDIT: Nagle doesn't matter here - it doesn't delay any writes once you read (waiting server response). It only affects 2+ consecutive small writes (here I'm trusting http://en.wikipedia.org/wiki/Nagle's_algorithm - my own recollection was fuzzy). If Go sleeps client threads between the ping and the read-response call then I suppose it would matter (but only a little? and other comments say that Go defaults to no Nagle alg. anyway).
People are so good at rationalizing their preferences that they sometimes say really stupid stuff withour realizing it. This nightmare scenario of relying on boost, std::vector, or whatever - it's really basic stuff that's both open source and easy to understand/debug - e.g. https://github.com/graehl/boost/tree/object_pool-constant-ti... (reminds me - I should really get around to submitting this)
That said, avoiding libraries (especially avoiding templates and just using void*-like stuff) does keep binaries/libs smaller, but I'll gladly make the computer work slightly harder considering that the result is the same speed (C++ is often faster than C, in practice).
The downside I care about is compilation speed. Simple C projects compile/link faster than modern C++ ones, even though the code for the same functionality is far more brittle, unsafe, and opaque