3,784 karma · joined March 21, 2018
I'm German and have a foreign spouse living in Germany. I speak English with my spouse, work mostly in English and spend most of my free time using English. For neither of us English is the native language though.
I guess it's a dramatically different experience if you try to teach your child a language that's not used in the household and not used in the country. E.g. me speaking German with my child in Germany, while we use English as the common language, should be a lot easier than my spouse trying to teach a language to our child that's not spoken in the country.
This is all theoretical for me as kids are still a few years away, but a question I have been wondering about in a long time.
Since http1 webservers are usually stuck there for a (more or less) good reason, they won't be converting to http3 anytime soon, while already more modern webservers are easier to upgrade from http2 to 3.
In the meantime you can go to discord.com and use the web application or the mobile version. They both are not affected.
@dang can we block comments on this or delete or something?
the block is real tho. I can't login through my desktop client. Using the browser app works though. Maybe they disabled the Cloudflare CDN on their website as an emergency fix but couldn't easily do it for the desktop (i assume electron?) app?
I don't know why it's flagged tho, because it's true. I can confirm my desktop client is blocked (same screen as in the article), but funnily enough I can go to discord.com and login through the webinterface. Maybe they disabled the cloudflare CDN as an emergency measure in their webapp?
Can you expand on that? I'm not involved in the field, but there certainly exist many low qbit machines with varying technologies around the world that can already be used for calculations. Yes, they're nowhere near big enough to be useful yet, but qbit counts in the biggest machines are multiplying every year similar to Moore's law, so that seems to be just a matter of time.
Because in floating point arithmetic 1 + 2 + 3 + 4 is different than (1+2) + (3+4).
The most ironic part here it isn't the school and education there that makes them exceptional. The schools filter so harshly that just getting admitted already means you are exceptional. And they can do that because of their good reputation, which is mostly based on tradition and perception.
I was under the impression that properly anonymizing location data includes aggregating a sufficient amount of individuals and the radius of this aggregation of course changes based on the population density in a given area. In with anonymized location data we can only draw conclusions on a populace and not an individual, which is still very useful.
Of course, I generally agree with you. In most cases it won't be done properly and just replacing PI with the same "anonymous" id on a set of location data points of an individual achieves next to nothing.
That is an entirely different set of problems than having to deal with a computation that has close dependencies and now you need synchronization and communication to progress the compuation. You don't only have to think about how to synchronize your computation, you also have to think about how to distribute your data to begin with to minimize the need for synchronization. An entire set of problems that just don't exist in the former case.
To pick up a word you used: In one case you have many independent tasks and you want to run them as quickly as possible. In the other case you have a single task and you think about how to split that up to make it faster.
I like this distinction as it also splits the different problem domains quite well. And I don't think it contradicts my definition as much as you might think.
When you have an embarrassingly parallel program you do not have to deal with the problems that come from data dependencies and synchronization of your simultaenously running compuations on different threads/machines. You do not really have to think about your computation running in parallel, but just about how to put them into different execution environments to run them concurrently. So you end up doing "concurrent programming".
When you do not have an embarrassingly parallel program, you still use the base concepts of running something concurrently (e.g. threads), but now your main focus shifts on how the multiple compuations can happen simultaneously. Now you end up doing "parallel programming" or parallel computation.
In the end, the terminolgy here is less than ideal. My main point was that some kind of distinction matters as TFA clearly discusses different topics from what many people think about from a web dev perspective (e.g. async, futures, etc.)
The terminology used might be terrible since they're originally synonyms. Differentiating between the two is very useful though.
I do think the differentation make sense from a perspective of problem classes, as also evident from the comments here. Running independent problems in parallel to better utilize hardware ressources is very different from running problems in parallel in timesteps that have strong dependencies in regards to progress of the overall computation. And that's not a problem of the scheduler, but a much more general concept.
It doesn't sound to me like the author has the whole web service parallelism/concurrency in mind that is very apparent in the comments here.
I agree however they do ultimateively solve two very different domains of problems and there is a lot of confusion going on here.
On a side note: matrix multiplcation is generally not a CPU bound problem, but a memory bound one.
The former and what this book is about deals with the problem of parallelizaing a single sequential program. There usually is strong interaction or dependencies between elements and progress needs synchronization. E.g. timestep iterations in real-time simulations that need synchronization with data communication after each timestep. These simulation also tend to get way to big to be run on a single machine, lest a single thread, and get scaled up to millions of cores/threads in supercomputers.
Concurrent programming is what most developers working with the internet are more familiar with. You have mostly independent tasks that you want to run concurrently. "A concurrent system is one where a computation can advance without waiting for all other computations to complete." [2] E.g. nginx serving thousands of user requests at the same time.
The problem domains have a lot of overlap on the basics (e.g. threading), however the focus is very different. Things like synchronization (mutex, barriers), cache locality and memory bandwith & latency play a central role in parallel programming, while concurrent programming focuses more on the engineering challenge of distributing independent tasks across multiple threads or machines.
However, once you get into simulations you have billions (or multiple orders of magnitude more) elements interacting with each other. When you simulate a wave every element depends on it's neighbors and the finer the granularity the more accurate your simulation (in theory at least).
I teach parallel programming to graduates and the first exercise we give them is a sequential optimization for exactly that reason. Think about if your algorithm is efficient before thinking about all the challenges that come with parallelization.