Skip to content

Blog

Developing in WSL Containers (Now with GPU support!)

As a programmer there were a lot of version/environment issues I faced while developing with Python, Node and other tools. Some examples:

  • Switching between different Python versions on Windows is difficult and requires third-party solutions e.g. Chocolatey
  • Switching between different Node versions also requires a third-party solution (nvm)
  • While pipenv, venv and poetry are ways to manage different Python environments, they still depend on the base Python version installed, which is another external dependency
  • Maintaining other dependencies such as CUDA drivers, ffmpeg etc.

To Endowus, Or Not?

Endowus has been making waves in the robo-advisor market in Singapore, hitting $1 billion in assets under management (AUM) recently.

It offers tailored investment solutions, customized for your risk appetite. Its portfolios are constructed from institutional-level fund classes, so fees are lower. Endowus also rebates trailer fees they receive from funds, so you pay even less. Finally, you can even build your own portfolio, using funds from PIMCO to Dimensional.

With that in mind, should you switch from IBKR to Endowus?

The useLayoutEffect hook

Suppose you have a parent component A and a child B, and you want to run a useEffect hook on mount in the parent first, followed by another useEffect hook in the child.

For example, you have a child component which overrides the default styles of the parent on mount.

Python Package Management

Update 2024-04-07

I've to using remote containers over SSH.

I use pdm as a Python package manager, which is something like npm.

I've found it much better in terms of updating dependencies (pdm update -u) and ensuring build reproducibility with the use of lockfiles.

Regarding automatic dependency updates and deployment:

- The main use of Github workflows is being able to automatically rebuild hosted web apps when dependencies are detected to have been changed.
- If the project is hosted locally, I can update dependencies myself with pdm update -u or ncu -u now and then.
- Dependabot doesn't support pdm lockfiles, and even if it did, when there is an update, I would have to access the terminal to rebuild the container, in which case I might have as well have did the update and tested it there and then myself.

Update 17/11/21

I now use WSL2 containers in VSCode. Additionally, I use requirements.txt files generated with:

pip list --format freeze --not-required

--not-required ensures only top-level packages are printed.

In addition, I use == X.Y.* (aka compatible version specifiers) to pin the major and minor version of packages, while allowing for patch versions to be updated automatically each time the container is rebuilt. This prevents surprises during deployment (e.g. missing functionality in minor versions) while allowing bugfix versions to automatically be upgraded without hassle.