code: def on_timer(self, event):
      self.theta += 0.5
      self.phi += 0.5
      self.model = np.dot(
          rotate(self.theta, (0, 0, 1)), rotate(self.phi, (0, 1, 0))
      )
      self.program["u_model"] = self.model
      self.update()
  
imports: from PyQt5 import QtCore, QtWidgets
  import sys
  import numpy
  from vispy import app, gloo
  from vispy.util.transforms import perspective, translate, rotate
  from vispy.geometry import meshdata
  from vispy.geometry import generation
label_desc: Use image node_id 2 for calling the Canvas obj's underlying member method code with example usage: obj.on_timer(event) without return types