1,781 karma · joined July 17, 2009
Co-founder of Antithesis
Co-founder of FoundationDB
Co-founder of Visual Sciences
If someone is offering that today, they aren't marketing it well. And again, actually signing the certificates would be a negligible part of the business (or the cost).
Actually, if I were in the insurance business I'd actually think about pushing this direction. If you could get the browsers to sign up for giving it special treatment it would probably greatly increase the size of the market. (Right now operators seem to mostly just escape significant liability for compromises)
I'm not trying to draw a moral equivalence. But I think the barriers to immigration raised over the last century and more everywhere in the first world are something that can't be blamed on any single party or political movement.
It's one thing to caution against removing all barriers literally overnight. I don't know that it would be a disaster, but I don't know for sure that it wouldn't, and it's reasonable to exercise some caution. But, at the risk of making an inflammatory analogy, it would have been morally defensible to ask if there was a way to end chattel slavery in the US without a civil war that killed ~3% of the population. It was not morally defensible to oppose ending it. Global apartheid is an evil of a similar scale, and first world governments its active cause, not innocent bystanders. It is our duty to figure out how, not whether, to end it.
If you want a more rigorous extrapolation, which tries to account for confounding factors and isn't limited to one pair of countries... you are going to have to look at the research (of economists).
Instead the first world does its best to wall itself off from economic migrants, because the right fears that migration will threaten their culture and the left fears that migration will threaten the welfare state.
As with any prohibition, the economic opportunity gets colonized by criminals. People seeking a better life will be taken advantage of and some of them will even wind up worse off than they started. But the root problem isn't the criminals, and it isn't customers who want cheap electronics. It's the prohibition of migration.
I'm not sure, but I doubt this algorithm is "faster" than the previous one on a single processor.
(The article is drivel; I couldn't figure out what they were talking about either, until I looked at the paper)
In general, if a business is clearly profitable it should continue no matter how thoroughly you screw up the capital structure: the worst case is a bankruptcy in which the shareholders get nothing, the debt holders get very little, and a new capital structure gets created. When this doesn't happen, it's because the business is worthless or nearly so.
If someone thinks they can figure out how to make a workable business out of big box toy stores, it sounds like the name is for sale.
When you eat 1kg of peanut butter, if I've done my math right, you'll breathe out about 2.3kg of CO2. Dry cereal would be about 1.5kg. Most foods have a lot of water in them, though.
var c = 0
function deterministic_not_pure() {
return c++
}
is not pure, and you can't reason over it equationally. But it is deterministic: if I make a series of calls to this function in my browser, and you make the same series of calls in your browser, and someone else emulates the code using a Turing machine made of rocks in the desert [1] we will all see the same results. (And consequently, there is nothing that such code can do to learn about its environment!)As far as I know everything in Javascript-the-language has this property! [2] (Equally, so does WebAssembly). And most of the browser's APIs do as well, though the sheer size of that surface means that any attempt to fix the rare cracks will still be daunting. The vast majority of information that browser JS gets is either through events (i.e. function arguments) and I think most of the rest could be safely forced to be deterministic during the execution of a JS function.
It's still obviously possible for these events to leak timing information about the execution of JS, but I think that can be fought. For example, you could delay the delivery of every event by the number of nanoseconds that JS has executed on the page so far, though of course that naive approach will gradually degrade in performance. But I think for example doing that until you have 10ms of delay and then resetting would probably make timing attacks totally impractical.
All of this needs way more thought, and I'm not at all suggesting that it's easy. But browser JS is closer to an actually-securable-against-side-channels state than almost any other widely deployed platform, and I think it's sad for the people that control the platform (which is, let's face it, basically the Chrome team) to throw it away because they love performance.now() and SharedArrayBuffer.
[2] Well, ECMAScript probably doesn't specify a random number generator, for example. But it could.
I'm not sure, but I think they are giving up on the best strategy here. The holy grail is for untrusted code to be totally deterministic, so that it cannot exploit Spectre or any other side channel attack.
Browser Javascript, which is historically single-threaded and event driven, is much closer to this than native code ecosystems where there are decades of investment in shared memory multithreading (which is very hard to make deterministic!) I don't think it would be impossible to make a JS engine where any given Javascript event handler and all the synchronous APIs it can call are deterministic, so that all interaction with the nondeterministic outside world is through events (and the "outgoing" side of these interactions would be delayed until the event handler stops running). Then I think you could make it so that the runtime of JS isn't measurable, or at least is only extremely coarsely measurable, via these events.
(This ultimately violates the Bekenstein bound - as your server cube grows it will eventually collapse into a black hole - but this is not really a concern with forseeable technology! More practically, though, Earth's gravity makes it hard to build very high in the air, which limits you to O(N^1/2), and things like cooling and maintenance access probably impose a limit somewhere in between.)
The truth is that complexity theory is always done relative to some abstract machine model, and as with all models it's up to you to determine if the model is a good fit for your practical reality. "To the extent that mathematics reflects reality it is not certain, and to the extent that it is certain it does not reflect reality." There exist abstract models, like the cache oblivious model, that do a somewhat better job of grappling with this issue but don't require to just throw up your hands and rely solely on benchmarks of real hardware. There is probably room for new theory in this area.
[1] not throughput, which isn't as hard to scale up
This is true, but it's "a big if." And the result might be faster than a good implementation of serializable isolation (since the latter is working to maintain some invariants that you don't actually care about), but it could easily be much slower: very broad invariants will require very broad locks which cause much more "serialization" than is required for serializability.
Let's say you want the same sum invariant but across rows: all users' balances must sum to zero. The straightforward application of your reduction is to essentially have a global mutex for all balance transactions, but this is nowhere near the most scalable solution. Whereas a good serializable database will handle this situation scalably, safely, and automatically.
This is a good try at a theory of when you can use weak isolation. But as stated, I believe it is false. If the invariant is A+B=C, I think this sequence is permitted by READ COMMITTED:
T1: read A=1
T2: read B=1
T2: write A=2
T2: write C=3
T2: commit
T1: write B=10
T1: write C=11
T1: commit
Now A=2, B=10, C=11
More to the point, invariants aren't always local to a row, and people don't usually even fully articulate them.
> There is no need to pay the huge performance price of serializing those transactions with all the rest of transactions in the system
Serializable execution can be made very very fast when there aren't actually a lot of conflicts. And then when there are you can do the hard work of trying to prove that something weaker will work. The failure mode in the other direction is silent corruption of your data.
Charging someone for calling you would also block them permanently, so almost no one is going to do this to their friends just to mess with them. There should be no appeal: if someone wants to charge every caller, that's totally fine. People will stop calling them pretty fast. Likewise I would let the callee choose the charity, or even keep the money. All that matters is that if you are calling someone who wants your calls you won't be charged, and if you aren't, you should be. If you aren't sure, you pay your money and take your chances that you are in fact imposing on someone else.
I can't see how this would hurt anyone of any socio economic level other than spammers. If you are calling someone who doesn't want your calls, you are a spammer.
The raycasting code in this article, on the other hand, seems to be missing the Lambert term! Just because a surface is not in shadow doesn't mean that it will appear at uniform brightness. If it is diffuse/matte, which seems like a reasonable starting point for most terrain, each light ray L should have a contribution to the brightness of the point proportional to L dot N, where N is the normal vector of the surface (and to find that you need, sorry, the gradient). In short, light almost tangent to the surface doesn't illuminate it much. Other kinds of surfaces will have different BRDFs (e.g. they can be shiny) but none of them will have the completely unshaded behavior shown. Of course, it's fine to do totally nonphysical things if it helps emphasize some aspect of the data, but it doesn't seem to be done knowingly and I think it produces a misleadingly flat look.
(Actually, I think you could probably use the article's approach in combination with DFA techniques to build something that's both fast and scalable. Something like a finite state automaton doing something like what's in the article at each node. But I don't need this and am not going to invest in trying to figure it out or learn whether there is prior art.)
I don't know if, in practice, the constant factor speedup in the article would beat out this asymptotic advantage for the table sizes that matter to the author. But the article doesn't mention considering and rejecting this approach.