anchor.diff:      // stroke borders intersect canvas bounds
       xOffset += 1;
       yOffset += 1;
  -
  -    var isWhite = random.nextBool();
       
  -    context.fillStyle = isWhite ? '#fff' : '#888';
  +    context.fillStyle = this.isWhite ? '#fff' : '#888';
       context.strokeStyle = '#333';
       context.beginPath();
       context.moveTo(xOffset, yOffset + pointHeight * height);
  
positive.code: //    context.strokeStyle = '#00f';
  //    context.strokeRect(scaledImageRect.left, scaledImageRect.top, scaledImageRect.width, scaledImageRect.height);
      context.drawImageScaled(asset, scaledImageRect.left, scaledImageRect.top, scaledImageRect.width, scaledImageRect.height);
    }
  }
  
negative.code:   
    static final num pointHeight = .25;
    
    static final num dotRadius = 2;
  
    static Random random;
    
    num row, col;
    bool isWhite;
    num dotCount;
    
    Tile(this.row, this.col) {
      random = new Random();
      this.isWhite = random.nextBool();
      this.dotCount = random.nextInt(3) + 1;
    }
  
    void draw(CanvasRenderingContext2D context) {
  