C++ project generator

Another day at home, I was trying to get my head around Cmake. It is a tool that I must learn since I want to code in C/C++ in the future. So I dig into youtube and learnt what is necessary for a while. However, after making a few test projects, it seemed unnecessary to know those syntaxes by a heart and it is enough to have some automated tools to generate Cmake for me.

Calling the script and showing its result.

Yeah, then I started coding with python and ended up with a script that can be called an automatic C++ project generator. This script takes a project name, path, and names of classes as arguments then generate CmakeLists.txt, MakeFile for a master project controller, and basic folder structures and header and source files. For an instance, the above shows that a project “King” is generated at “/home/tim/Desktop/PythonTricks/c prj creator” directory with “Soldier, Queen, General, Cavalary” classes.


MakeFile is a master controller that can run clean, run_cmake, and run commands for the project. run_cmake call a few CMake commands to build the project. With this script, a process of building C++ project becomes easier. I am sure that a powerful IDE has this built-in; but, hey, I had fun coding it. From here, the script can be seen.

3Ds Max project assist tool

One of the annoying task during 3D production is managing scene files and files associated with the scenes. As it is very easy to forget to update or change a texture location of a newer scene or any other file path, I usually had ended up with missing links to necessary files when I started using 3d. Also, there is a need to manage a bunch of 3D scenes of different shots and production. You know a distinct 3d scene is needed for each stage of production i.e model, texture, light, rig, visual effects, and render etc.

So to ease this mundane task, I have coded a few scripts in 3ds max script. So far, those include new scene creator, project creator, fumefx cacher, and pflow cacher.

A new project creator

I have learned it from Allan McKay’s FX TD Transformation course. While studying computer science, I registered it as soon as Allan opened his course. Now as I am graduating, I think I will devote more time to the course.

A new scene creator. It also shows all projects I am working on.

Going back to the tools, firstly I created a startup script on 3ds max script startup directory. It would be here:

C:\Program Files\Autodesk\3ds Max 20XX\scripts\startup

3ds max automatically loads all scripts inside this directory. I put only one script there including some functions to call other scripts and variables that help me describe functions there. Since I am calling functions by their path, I put scripts responsible to get the job done somewhere in my disk.

Actual scripts automatically create necessary directories and set a project when they are called. So that way, I will have an identical directory structure and scene management whenever I work on. As for pflow and fumefx cachers, they cache a selected particle object. The cache directory is also setup automatically with the project creator script.

Next, I will convert those script to python as it is becoming an industry standard.

Image Resizer

During Christmas break, I wanted to develop python software or package following industry practice. So I had started a data science project, machine learning deployment, and python package. I have not finished the first two but finished the latter.

It is an open source python package that resizes images. You can install it from PyPI by:

pip install

This package takes a json input which specifies necessary settings and resizes images by parallel. The reason I use a JSON input is I aimed to use this package for web development. Here is GitHub:


Working on this project, I have learned to structure python project, used Travis CI for continuous integration, used pytest to write unit and coverage tests, uploaded the package to pypi, and studied a lot about speeding up python and parallelising python. I would say it is a lot.

Have a look and let me know what you think. Personally, I think I would re-factor it again and implement pooling to increase its efficiency even more.