This is mistaken for Windows. Even if programs are run from Program Files, they will often source their DLLs from other locations.
15,505 karma · joined September 8, 2013
sillysaurus3 at gmail.
https://news.ycombinator.com/item?id=16089930
Keybase username "sillysaurus". Hit me up to chat! I'm happy to hear from you.
This is mistaken for Windows. Even if programs are run from Program Files, they will often source their DLLs from other locations.
You didn't respond to my actual comment. Again, it is victimless because no one would've bought the overpriced book except for those who have $40 to throw away on a lark.
If we focus on making a quality product at a reasonable price, sales follow. The fact that technology has reduced this price to near $0 is unfortunate but is merely a consequence of computers.
I get that technology is often upsetting, but why take it out on users? The way to win is to pay attention to trends and adapt, not wish the world were different.
Riddle me this: Why did people write books before there was an economic incentive for them to? The crux of our disagreement appears to be this: it wouldn't hurt the world for us to return to those times. And technology seems to make this inevitable.
I wish I could get paid to write programming languages all day, but many people wish they could be paid for many things that are not feasible. Are you so sure your book would have maid those thousands of dollars in an era before it was possible to widely distribute it? Who would buy it? And moreover, who would hear about it and how?
https://www.gnu.org/philosophy/right-to-read.en.html
Of course, Lissa did not necessarily intend to read his books. She might want the computer only to write her midterm. But Dan knew she came from a middle-class family and could hardly afford the tuition, let alone her reading fees. Reading his books might be the only way she could graduate.
It's always interesting to watch Stallman's writings become reality.
In fact, this is so prescient as to be worth quoting in full:
Programmers still needed debugging tools, of course, but debugger vendors in 2047 distributed numbered copies only, and only to officially licensed and bonded programmers. The debugger Dan used in software class was kept behind a special firewall so that it could be used only for class exercises.
It was also possible to bypass the copyright monitors by installing a modified system kernel. Dan would eventually find out about the free kernels, even entire free operating systems, that had existed around the turn of the century. But not only were they illegal, like debuggers—you could not install one if you had one, without knowing your computer's root password. And neither the FBI nor Microsoft Support would tell you that.
Substitute "Microsoft Support" for "Apple". We even have officially-licensed and bonded programmers now: The $100 developer ransom.
Lissa did not report Dan to the SPA. His decision to help her led to their marriage, and also led them to question what they had been taught about piracy as children. The couple began reading about the history of copyright, about the Soviet Union and its restrictions on copying, and even the original United States Constitution. They moved to Luna, where they found others who had likewise gravitated away from the long arm of the SPA. When the Tycho Uprising began in 2062, the universal right to read soon became one of its central aims.
You claim you are a victim. Yet you refuse to acknowledge that there are people who can't afford your work who would otherwise be enriched by it. Of the two victims, it's hard to say which is worse. Especially given that people will continue writing books even when there is no incentive to.
Is that an accurate summary? I am trying to respond to the strongest possible interpretation of what you're saying.
What is the difference between someone doing this, which is an illegal victimless crime, and recreational drug use, which is also an illegal victimless crime? Why is one immoral and unethical, but not the other? Furthermore, why is it justifiable to believe that it's an important right to be able to ingest whatever you want into your body as long as you're not harming anyone else? And are you sure the same argument doesn't apply to this case?
That may sound like a dismissive question, but it's at the crux of our disagreement. If we can resolve that, we might be able to see eye to eye.
You act as if I have $40. Would it surprise you to learn my power was cut off within the last few months?
Another point: "Stealing" implies something was lost. The words are still there, even if I have copied them.
The game industry and the iPhone app store have proven that when you price something closer to $1, it will generate exponentially more revenue than $40.
I think you could've made the same sort of argument against movies or music before netflix and napster, but here we are, and the markets still seem thirsty for new content.
Also if you were to somehow poll everyone reading this and ask "Did you buy this book?" you'd get some number, x. But if the book were priced at $5, then $5y would be much greater than $40x.
I bought a bamboo fineline pencil for $50 the other day. It's a tool that will serve me for at least a year. It's unclear whether this book would.
I want work like this to exist, and for the author to be rewarded for it. But ultimately, in an era when words are infinitely and instantaneously copyable, the economic value of words seems to drop.
Given the choice between stealing knowledge and not stealing knowledge, when you wouldn't have paid for it anyway, where's the harm?
Also Library Genesis is amazing: http://libgen.io/search.php?req=knuth
It's everything I dreamed of when I was a kid. I used to spend hours at the local library scouring through crummy "Learn C++ in 24 hours" type books.
http://custodians.online/ is worth a read too.
It's worth being aggressively negative toward such companies, because negotiating to your market value is step one in leading a good life. The fact that they would have you not do this means they don't care about the quality of your life, so you shouldn't care about their company.
At first glance, this seems to be a useless theory, since it's not refutable. But it lends itself to a belief system: by studying the universe, we gain an understanding of whatever created it. This is helpful as a motive: a reason for studying any of this at all, in absence of economic or social incentives.
This seems important. As the centuries tick by, and as we confirm and re-confirm that we are indeed alone and that we do indeed have a mostly-complete model of physics, there will become less and less incentive to analyze the corner cases. It's costly, and takes decades. But at one time, it was costly and took decades to build a cathedral. Yet we accomplished these impressive feats due to a shared belief system.
The reason I brought this up is that we often like to believe there is an advanced alien civilization tucked away in some corner of some galaxy, sending out messages via gravitational waves or neutrinos. But why do humans find this idea so seductive? It's because of an underlying loneliness: we want to believe that we are connected with the universe in some fashion, that our existence has a point, and that there is reason to do anything at all in a universe that will exist long after we've gone, long after our solar system and sun has gone. Because if there were an alien civilization, at least we would not be so alone.
In that context, a solution to Fermi's paradox is simply to believe that our very universe exists due to some higher-order phenomena not knowable within our reality. And by studying the laws of physics, we gain a glimpse into the boundary between our universe and its hypervisor.
One of my favorite videos is on his alternate channel, 2veritasum. Survivor Bias: https://www.youtube.com/watch?v=_Qd3erAPI9w
If you don’t have funding, a team will get some and blow your bootstrapped app out of the water.
The point is, if you can serialize closures, I think you can serialize continuations.
(See the section “memory leaks”.)
These questions usually have straightforward answers, but some are counterintuitive.
Stuff like that adds up. It's why Lua is so fast compared to JS, too.
Every time an article like this comes out, crypto shoots up shortly after. It's like a perfect negative signal.
And how could it be otherwise? The worst time to buy is when everyone else is buying.
function foo() {
return doSomething();
}
async function doSomething() {
...
throw ScanError();
}
Spot the bug? That's an async function. Every JS programmer worth their salt will tell you how many times they've been annoyed to discover a missing await, and that the promise is failing mostly-silently (or worse, it works by accident until it doesn't, since that code will work fine most of the time).Well JS does provide this via exceptions.
Second it's totally crazy that emacs depends on longjmp
It's not crazy.
function bar() {
[1,2,3].forEach(x => {
if (x == 2) /* return from bar...? */
}
}
Why can't you write this code? I mean you "can": function bar() {
let tag = [];
try {
[1,2,3].forEach(x => {
if (x == 2) { tag.value = x; throw tag; }
}
} catch (e) {
if (e === tag) {
return e.value;
}
}
But holy crap that's terrible. EDIT: I also forgot to rethrow the error, showing just how easy it is to screw up.Just write it as a for loop, then. Well sure, except for the hundreds of libraries that don't support that style. What do you do when you want to return prematurely from the iterator functions you pass to them? Now you can't just make a for loop unless they provide Symbol.iterator. And 9 times out of 10 they give you a promise, meaning you're forced to convert your code to async style.
It's a huge mess, and longjmp saves you a lot of headaches in disciplined situations. Every tool has its place, and it's strange to argue that a computer should be able to do less, not more.
The goal is to save you time in the long run. And those 5 lines better be exactly right, or you'll waste a lot.
longjmp, however, is a crucial missing facility in JS. Emacs relies on it heavily in its design -- it's how catch / throw work, and it's why you can do things like
(catch 'foo
(map (fn (x)
(if (= x 42) (throw 'foo x)))
values))
Without longjmp, you can't do that. Just as you can't in JS.So what? Well, that means you can't write emacs, because you're limited to what JS provides you. An entire class of software is beyond your ability to write, because you cannot provide the same features that other runtimes give.
This gets me started on the lack of any kind of reasonable error definitions in JS. In elisp, you define errors. Imagine you want to write some code that parses some parens -- it turns "(a b (c))" into ["a", "b", ["c"]]. What do you do when your program encounters "(a b" and then the end of the string? Throw a scan error!
Not in JS. It's considered poor manners to throw errors to the people using your library. Worse, it's a pain in the ass for users to catch and respond to errors. If you use someone's library, you usually don't expect to have to wrap it in a try-catch. And the code is massive:
try { operation } catch (e) { if (e instanceof ScanError) { do something else } }
Contrast that with elisp:
(condition-case nil
operation
(scan-error do something else))
There's no contest. It's way easier to write the latter than to use the tools JS gives you. But it's a cultural difference, and culture is slow to change.That's why webassembly at least gives an escape hatch.
The cultural pressure not to fail is so immense that it drives people insane. I watched it firsthand with my friend's father. He mismanaged the business into the ground and never really got over that. Trying again doesn't even come into his mind.
And that same mentality is very often the way we bring up children. Play it safe. Get a good job. Prioritize work over your own desires. Sacrifice yourself for others. And whatever you do, make sure it goes well.
Green threads. No silver bullet, but sometimes you upgrade your pistol.
JS needs greenthreads. There's no reason you shouldn't just spin up a thread for every blocking context. This is arguably what async/await already does, but you don't have control over the toplevel loop. Point out where your while (userIsOnWebsite) { ... } loop is. :)
Having a toplevel loop is very important for simplicity -- but even moreso for what you mention: having ultra fine-grained control, and not constantly fighting with the underlying scheduler / ecosystem.
function loadImage(src) {
loadRealImage(src).then(img => /*... return img from loadImage ...?*/);
}
"Just make it an async function." Well yes, but then the async nature contaminates the rest of your code. You have to make sure to set up a toplevel try-catch for every one of your async chains, for example.What do you do when you want to have an async generator? That is, you want to both await on something, and yield N values from the function. JS makes that difficult.
There are all kinds of limitations like this, and everyone has their own favorite hacks around them. But they're hacks, not unification. And yes, hacks can be effective, but a unified framework can be tactical.