wow, i like that.
-a- but the corner holes position is not symmetric
-b- much more work on the border / bounce needed.
your ball stop
just a idea:
double CoeffFriction=0.98D;
void stoping_ball() {
if (vell.x > -0.1 && vell.x < 0.1) vell.x = 0;
else vell.x *= CoeffFriction;
if (vell.y > -0.1 && vell.y < 0.1) vell.y = 0;
else vell.y *= CoeffFriction;
}