The sand is going down. Each tick one bit of sand falls from the top left to the bottom of that valley. Over many ticks the sand from the top accumulates up the side of the valley, from over the "cliff". The strange bit is the pieces teleport in one tick one at a time. No matter how you do it you'll end up with some sort of tradeoff like that when using pixel grids instead of particles.
When you write 500 simultaneous users, do you mean:
1. 500 users making multiple calls across our servers at the same time?
2. 500 users on a single call?
1. If you dob't have tests covering code, sure type checks are better than nothing. but if you do, why do you also need type checks?
2. If the tests must be updated whenever the underlying implementation changes it might be testing too much-
it's better to test behaviour, not implementation.
I was addressing the above comments about tests that specifically check types. My position is that declarative types and a type checker are better because each code path is checked automatically without writing additional tests, and because the type checker automatically adapts without changing or writing new tests when the implementation changes. Testing behavior is another thing entirely.
The whole point of node.js/meteor is that you can share the code between client/server, so you dont have to duplicate anything, and have the access to the "real" model.
If they use different IPs, and normal user request speed, the only way to differentiate is by irregular user usage patterns (too many pages for a session, going bfs instead of dfs etc)
But if they don't hit your server heavily, why do you care?
One thing that looks a bit off is that part of the physics engine runs in reverse -
When a piece touch the high part of a pile, the sand is going UP from the bottom of the valley to the top, instead of from the top DOWN to the bottom
When the process finishes the end result is the same, it's just a bit strange :)
Example in https://youtu.be/Hp4nV4EjLgM?t=133