My Skills

A comprehensive overview of my technical and professional skills.

AI/LLM Development

AI is taking over the world. I've been working on LLM-based AI app development for the past year or so. I am familiar with open-source libraries like LangChain, LangGraph, and LlamaIndex, and other more "standard" AI SDKs from OpenAI and Google, etc. Also, I'm no expert, but I have a good understanding of prompt engineering. Anybody who wants to start LLM development should first start learning effective prompting.

LLM Chatbots

The most common LLM applications are custom chatbots augmented with domain-specific knowledge, e.g., primarily through RAG (retrieval augmented generation). RAG is more of an art than a science. There are a lot of factors to consider to build an effective RAG system such as chunking, choice of embeddings and vector databases, etc. And, ultimately, understanding and managing "context", and not just prompts, is required to build effective chatbots.

AI Agents

A new kind of LLM-based apps, generally called 'AI Agent', are getting a lot of attention these days. They are typically characterized by the fact that they use "tools", e.g., relying on MCP (model context protocol), often based on the decision made by the agents themselves. Hence we sometimes call them "autonomous AI agents", but this characterization is debatable. "Deep research agent" is one of the fastest developing areas.

General LLM Development

Besides chatbots and autonomous AI agents, I've done some general LLM development, such as quantization and fine-tuning, etc., in addition to RAG. Also, LLM-based document analysis is really an application of RAG. What else can we do with LLM technologies?

Fullstack Web Development

I've been doing fullstack web app development for many years now. I started as a backend developer, and picked up frontend development over the years. For backend development, I mostly use Java, C#/.Net, Go, Python, and Javascript/Typescript (Node.js). For frontend, I generally use frameworks like Angular and React/Next.js. I also use various UI libraries such as Tailwind CSS and Shadcn UI. Web development is really my bread and butter. Despite the fact that I may be rusty in some of the technologies, this is the areas I can deliver consistently, whatever the requirements are.

Cloud App Dev and Ops

I've been using various services of AWS and Google Cloud for many years now, and to a lesser degree other cloud platforms like Azure. (The first Google Cloud service I used was App Engine (GAE), back in 2011. At the time, I was working on a URL shortener service, and the cold start problem of GAE was a big issue. (Oh my my. How many different tricks I tried to beat the cold start problem?) On top of this, Guido van Rossum refused to support naked domains. The project was ultimately abandoned. It's funny that I remember these things after all these years. πŸ˜„)

SQL/NoSQL Databases

I've used, quite extensively, pretty much all widely-used databases like Postgres and MongoDB, and Redis, etc. I am also familiar with various cloud-based database services such as AWS RDS, DynamoDB, Aurora, and Google Cloud Firestore and CloudSQL. I have been also using vector databases like Chroma and Pinecone recently as well as the pgvector extension of Postgres.

Mobile Apps

I did Android app development for many years, until a few years ago. (Haven't done it much recently. Last time I worked on Android apps was 2018. There is some story as to why I stopped doing Android development at least for my own projects, which I will not go into here. On a related note, I also stopped selling my books on Amazon bookstore. We are living in a twisted world where bullies rule the world, at every level of society, because very few people stand up to them. I believe that somebody has to.) I also have some limited experience with cross-platform tools like React Native and Flutter.

Desktop GUI Apps

I did a lot of GUI programming (especially earlier in my life, as a hobby), primarily on Windows using MFC (Microsoft Foundation Class). (Oh boy, was I an expert in MFC back then. πŸ˜„) Last time I did Windows GUI programming was in the late 2010s with UWP (Universal Windows Platform), which seems like eons ago for some reason. I have some experience with other GUI toolkits as well such as Qt.

Computer Vision

Before the current age of LLM, computer vision meant using tools like OpenCV. I used OpenCV for a little while. I also did some VR/AR development with Google Glass and Microsoft HoloLens (virtual reality, augmented reality), e.g., using Unity3D. It seems like AI-based computer vision is the next frontier. Despite some (limited) success of using LLMs for computer vision, that is clearly a wrong approach. Language is primarily one-dimensional/sequential, whereas vision is two-dimensional. Ultimately, we will need something like LVM (large vision models),

Machine Learning

I did postdocs for a few years, in my previous life, doing research on machine learning, primarily, with respect to the feedforward neural networks. (A physicist, John Hopfield, received the 2024 Nobel prize in physics for his contribution in this area. And, I was essentially doing research on the same topic although, well, I didn't win a Nobel prize. πŸ˜„) More recently, I've been using tools like TensorFlow and PyTorch. (This skill seem somewhat obsolete at this point, with the recent rise of LLMs, unless you want to train LLMs yourself. The AI field has changed, in my view. Most of us, with limited resources, should focus on using LLMs. That is, until something better than LLM comes along. πŸ˜›)

Programming Languages

I am somewhat unusual in that I love learning programming languages. I've learned and used over 20 different languages over the years, including C/C++, Java, Javascript/Typescript, Python, Go, Rust, Haskell, Julia, Scala, Kotlin, Ruby, Perl, PHP, Tcl/Tk, and Lua, just to name a few. (And, of course, Fortran and Basic πŸ˜„ although I was never a big fan of Pascal.) This was partly due to the job requirements, but also because I love learning new languages just for the sake of learning.