Flickering screens, stalled machines and not working like it used to
One definition of insanity is doing the same thing over and over, expecting different results. One thing that can drive programmers insane is doing the same thing over again and GETTING different results.
In a past life, working in tech support, I learned that whenever anyone calls and says,
I did it exactly like your example and it didn’t work for me.
– they are lying.
In my experience, when you have the same programming statements but get different results, something else is always different and that something is often the demands put on the system.
How can that be if your statements are the same? Let me give two examples, one using javascript and one using SAS.
Javascript
I had made a game using canvas and html5. The game had three layers. The background was the bottom layer, some game objects that mostly stayed in the same place were the middle layer and the top layer was a game object that changed with each move. The init function on load drew all the layers. On update, all three layers were updated by calling one function. All was well.
function drawAll() {
draw1();
draw2();
draw3();
}
Then, I made another game the exact same way and I could not get rid of the screen flicker every time the player piece on the top layer moved. I tried clearing the canvas between each re-draw which had solved the problem in the past. Nope. What finally did work, in case you run into this problem yourself, is that I only drew the background in the init function and never re-drew it.
function init(){
layer3 = document.getElementById(“layer3”) ;
layer2 = document.getElementById(“layer2”) ;
layer1 = document.getElementById(“layer1”);
ctx = layer1.getContext(‘2d’) ;
ctx2 = layer2.getContext(‘2d’) ;
ctx3 = layer3.getContext(‘2d’);
window.addEventListener(‘keydown’,getkeyAndMove,false);
startwall() ;
draw1() ;
draw2() ;
draw3() ;
}
function drawall() {
draw2();
draw3();
}
Problem solved. My conclusion was that the second program involved a lot more complicated drawing of objects. Instead of just placing an image here or there, the program needed to compute collisions, read lines from an array, draw objects and the time it took was noticeable.
SAS
Several times I have written a program that worked wonderfully on a high performance computing cluster but crashed on my laptop, or failed on SAS on demand but worked beautifully on my desktop . The difference in all of those cases was that the processing requirements exceeded the capabilities of the machine. All is not lost in those cases. One pretty obvious but not always feasible solution is to use a different machine. When that isn’t an option, there are workarounds. For example, if I wanted students to analyze an enormous dataset, I could have them analyze the correlation matrix instead of trying to load a 100gb dataset – but that is another post.