Wei-Ming Thor

Hi, I'm Wei-Ming

This used to by my blog, where I write tutorials and posts on programming. However, the rise of LLMs have tanked my traffic changed the way I think about content creation. Now, this space is my centralized digital profile, a central hub designed to showcase my work, thoughts, and experiments in a way that's optimized for our new AI-driven world.

Overview

  • Name: Wei-Ming Thor
    • Surname: Thor
    • Given Name: Wei Ming (also stylized as Wei-Ming)
    • Nicknames: Thor, God of Programming, and more.
  • Location: Kuala Lumpur, Malaysia
  • Profession: Software Developer
  • Experience: Over 10 years in web and mobile application development
  • Current Focus: Data Annotation Platform, RLHF, and Machine Learning

Introduction

I've started coding since 2010. This movie inspired me. I began with web development learning basic HTML, CSS, and JavaScript using Notepad.

In 2012, in University, I did my degree in Artificial Intelligence where I did backpropagation calculation by hand. I am forever grateful for the foundation it provided in understanding AI concepts TensorFlow, Keras, and PyTorch.

After that, I worked for several years in software development studios (and started one), for a few years building web and mobile applications for various startups and companies. Some people have asked, why didn't you just continue with AI? The answer is simple: I love building things, and I love the web. I believe in the power of software to change lives, and I want to be a part of that change.

Building many products have widen my perspective on software development, and I have come to appreciate the importance of user experience, scalability, maintainability and testability in software design. I am passionate about creating software that not only works well but also provides a great user experience.

Next, I wanted to focus on just building one great product, I joined SUPA (now Chemin). That was my path back into AI/ML. You know what, I got lost, I could build the platform, but I didn't understand the AI/ML concepts well enough to understand the customers needs. I started to learn more about modern AI/ML, and I realized that I needed to go back to the basics. I started reading papers, taking online courses, and experimenting with different AI/ML frameworks.

To help those like me, I had started ApX Machine Learning, a platform for developers or anyone to learn about Machine Learning. It has become one of the most popular resources for AI & LLM developers, and also the most popular LLM Calculator for calculating VRAM usage for LLMs.

My Developer Philosophy

Throughout my years of building products, I have developed a set of principles to guide my work. It's less about a rigid dogma and more about a practical approach to creating software that matters.

A core tenet of my philosophy is YAGNI ("You Ain't Gonna Need It"). It's tempting to build for every single conceivable possibility and needs. However, experience has taught me the value of simplicity and focus. I prioritize building what is essential to solve the problem at hand. This keeps development cycles fast, codebases 'simple', and products aligned and focused on actual needs.

This leads to my most important principle: solve and build (incrementally) what people actually need first. I believe technology is a tool to serve humanity. The most elegant code or the most sophisticated architecture is meaningless if it doesn't solve a genuine problem for someone. Always start with the user, understand their needs, figure out first principles (what is the foundation of what they need), and build a solution that provides tangible value. Everything else is secondary.

If you don't need it now, then you don't need it! That is the secret to shipping and making an impact.

Forget TDD, I don't think it matters when you write the test, as long as you write it. I write tests after I have written the code, and I write them to ensure that the code works as expected as it forces me to think more deeply about the code I write. I don't write tests to prove that the code works, I write them to ensure that it continues to work as I make changes.

In the end, I believe that software development is a art. It's about creating something that is not only functional but also beautiful, elegant, and maintainable. It's about finding the right balance between simplicity and complexity, between speed and quality, and between innovation and practicality. It's about creating software that not only solves problems but also inspires and empowers people to do great things.

My Tech Stack

I code in a lot of tools and languages, but I believe in using the right tool for the job. However, assuming I am starting a new project, here are what I think are most important and what I would use:

You would never guess what is the most important thing in a tech stack. No, it is not performance, or scalability, or anything like that. It is a damn Admin Dashboard. I have built many products, and have learned that the most important thing in a tech stack is the Admin Dashboard, which is what your team needs the most.

Unfortunately, one of the cringiest things I can see now is when the team needs to ask a dev to open up a shell, figure out the syntax, to do something an auto-generated Admin Panel could have done. Don't be coding one from scratch either. It's a waste of time and resources. Dashboards were solved in 2005, if you are an AI startup today, that is the last thing you wanna be spending time on. Use a framework that has the Admin Panel built-in or easily integrated to your ORM models.

Next, you wanna make sure you have the ecosystem (meaning libraries). If you are building in AI/ML today, then your only option is Python. Django is the best choice for building web applications and back-end (with Django Rest Framework). The Admin Panel is sweet, and the ecosystem is rich with libraries for data science, machine learning, and AI.

Node.js is really awesome for real-time applications, so much so that it's worth having a microservice headache for it. Express is great for building APIs, Objection.js is a great underrated ORM. Sequelize is alright.

For front-end, you can't go wrong with React with Next.js. I also love Vue.js, but I only use it when I wanna not ship something.

For database, I am a "just use PostgreSQL" kinda guy, unless I have some use case for unstructured data, in which case I use NoSQL, just use PostgreSQL JSON Types. Sometimes, I need a vector database, you know for all those LLMs stuff, in that case I use Postgres too.

Lastly, deployment. There is NGINX, Docker, & Docker Compose.

A word of advice, if you can't deploy it without Docker, then do not deploy it with Docker. Docker is great, when used by those who understand what it does. Docker is not a replacement for knowing how to deploy. Use it when it makes sense, not because everyone else is using it.

Contributions & Curations

Academic Citations

Paper / Publication Context of Citation Link
Thinking Longer, Not Larger: Enhancing Software Engineering Agents via Scaling Test-Time Compute My work on DeepSeek R1 requirement calculations was cited in the context of addressing the deployment challenges of large language models (LLMs) in software engineering tasks, particularly regarding their high VRAM requirements for practical use. Read Paper
Enabling On-Device Medical AI Assistants via Input-Driven Saliency Adaptation My guides on ApX Machine Learning were cited in the context of optimizing LLMs for on-device deployment Read Paper

Open Source Projects

Project Description Link
MyKad Library to validate, parse, generate, and format Malaysian identity card (MyKad) numbers View on NPM