I am currently exploring Unreal, Houdini and Machine Learning! Here are some of my work/tests:


Machine Learning


Coding Projects

Programming Notes:

These are the littles things I learnt as a programmer and notes to help me(and others) grow as better engineers:


  • Windows is case insensitive. When developing cross platform a folder/file can be created in Linux that may not be valid on Windows and can cause issues (ie: disappearing directories when os.remove deletes both "folder_A" and "folder_a")!


  • Dock Control to dock pyqt UIs under Maya's menus (ie: Attribute editor etc).


  • Declare variables with "Let" and "Const" to limit their scope rather than "var". More Info
  • "window.localstorage.var" is the same as "localstorage.var". But having the preceding "window" notifies it as a global variable.


  • Print "module.__file__" to troubleshoot and see which module/file is being used.
  • Python needs __init__.py files (can be empty) in directories with modules so that we can do "import dir.module".
  • QPixmap shouldn't be in threads but QImage can (no GUI error). But QImage is optimized for image manipulation and QPixmap is the best for displaying images.
  • Partial is static meaning it doesn't need to resolve again and will be faster than lambda. Example: when calling a function when a Pyqt button is pressed, if the arguments to the function are the same, use partial.
  • Can do: "a, b = [list]" instead of "a=list[0], b=list[1]" if we are sure that list has 2 values.
  • Use QSettings to make your Pyqt App remember values/settings.
  • Pyqt can set "QT_PREFERRED_BINDING" for qt version to use when developing/deploying in multiple environments.
  • ui.exec() freezes other windows and ui.show() doesn't. Dialog documentation.
  • "dir(object)" will print out attributes available for that object. Helpful when working with modules with very little documentation.
  • Logging module: Use % formating instead of format because logger automatically formats it ie: "logger.info("%s %s", string_one, string_two)"
  • Python doesn't automatically deep copy objects, it'll keep a reference to that object when assigned to a variable.
  • Use "__repr__" to help debug because printing an Object can be confusing. A Representation gives more comprehensive information.
  • Check function description formats with this.

Other Tips and Tricks:

  • Returning a function instead of calling a function (anonymous function) can be useful when you want to run a function later in a higher function (Often used in with RV Plugins).
  • Declare global variables outside of a class when you want to access those variables before initializing a class in a module.
  • Declare Static Variables (ie: "@Staticmethod" with @Setters in Python) for methods that makes sense inside a class, but don't need an instance of a class for it to work.
  • When checking booleans, use "is True" instead of just "is variable_name" if the variable type is a Boolean. "is variable_name" can mean 0, False and None.
  • SQL: use "EXIST" rather than "COUNT" when you don't need the value of a query because "EXIST" stops once True, but "COUNT" iterates through all of the data.




profile pic

Hi! My name is Angel (Luchcha) Lam. I am a life-long learner who is passionate about animation, story-telling and technology!

I am always seeking for opportunities to further explore the fascinating hybrid of art and technology, broaden my skills and challenge the boundaries of immersive and innovative technology/storytelling.I hope to bring happiness and unique experiences to the world through animation.

I graduated from the Rhode Island School of Design's Film, Animation and Video program with a concentration in Computation, Technology and Culture. I am currently pursuing my Master's degree in Computer Graphics Technology at Purdue University and will be done in May 2023!

I was born and raised in Bangkok, Thailand. I speak fluent English and Thai with a tiny background in Spanish and Mandarin. I am obsessed with chocolate chips, dogs, frisbee, ice-cream and the outdoors!

View my Resume.

THAI: +66 92-912-6968
US: +1 401-441-0968