About Me

Ching-Cheong Lee
Software Engineer in
Hong Kong
machingclee@gmail.com

Graduated from HKUST with an M.Phil degree in Mathematics, worked in both academic and nonacademic fields with solid knowledge in frontend programming.

I used to have strong interest in deep learning in computer vision. Recently my interest drifts towards software development, especially on backend and cloud architecture such as:

  • Choices of Databases
  • Choices of Message Brokers
  • Choices and Tradeoffs of Different Ways to Deploy a Service
  • A combo of services such as sqs, dynamodb, lambda functions, cloudwatch events for scheduled jobs, etc.

I have been a game artist as well in mainland China. My art portfolio can be found in

https://www.artstation.com/checkercc

Recent artworks are mostly related to Final Fantasy 14.

Education

  • 03/2019 - 06/2019

    MicroMaster in A.I. and Programming
    Tecky Academy, Hong Kong
  • 09/2012 - 08/2014

    M.Phil. in Mathematics
    The Hong Kong University of Science and Technology, Hong Kong
  • 09/2009 - 06/2012

    B.Sc. in Mathematics (First Class Honor)
    The Hong Kong University of Science and Technology, Hong Kong

Curriculum Vitae in PDF

This pdf contains an organized copy of the Experience session below.

Experience

  • 15-May 2023 -
    Present

    Software Engineer
    Wonderbricks Limited
    Skills Needed
    Typescript / Frontend
    |
    ───
    React
    |
    ───
    Redux-Toolkit
    |
    ───
    |
    ───
    React Native Reanimated
    |
    ───
    Expo-Cli (Development Build, ad-hoc Internal Distribution, etc)
    |
    ───
    Algolia (Search Engine)
    |
    ───
    Socket.io-client
    |
    ───
    Push Notification for iOS, Android via EXPO
    Typescript / Backend
    |
    ───
    Express
    |
    ───
    Mongoose
    |
    ───
    Socket.io
    |
    ───
    Algolia (Search Engine)
    |
    ───
    Googleapis + Nodemailer (for Sending Emails)
    |
    ───
    Prisma (db migration only)
    |
    ───
    Prisma-Kysely (as type-safe query builder, a counterpart of JOOQ in java; and go-jet in golang)
    |
    ───
    Expo Push Notification
    Kotlin / Backend
    |
    ───
    Springboot Project
    |
    ───
    Spring-Data-MongoDB for MongoDB
    |
    ───
    JOOQ as Query Builder
    |
    ───
    JUnit5 For Integration Test and Unit Test
    |
    ───
    Mockk For Mocking Services
    |
    ───
    Algolia (Search Engine)
    Python / Backend
    |
    ───
    Flask
    |
    ───
    Boto3
    |
    ───
    Openpyxl
    Database
    |
    ───
    |
    ───
    Cloud (AWS)
    |
    ───
    Deploy Serverless Flask Backend for Excel Generation in Lambda
    |
    ───
    Deploy Serverless Node.js Backend for Google Authentication in Lambda
    |
    ───
    Deploy React App to S3 with Cloudfront
    |
    ───
    Deploy Docker Images to ECS Fargate
    |
    ───
    Manage Load-Balancer which points to various services and set inbound rules for each port
    Kafka + Debezium + kafkajs
    |
    ───
    Create database change stream to support our monitoring service.
    |
    ───
    Delayed Queue by means of Dead-letter Queue, e.g., pin a message to the top and restore its position 1 week later
    |
    ───
    Direct Exchange with prefetchCount for rate limit
    CICD / Github Actions Study Notes for Github Actions
    |
    ───
    Create CICD Workflow for Frontend Deployment (Documentation System, Old Webpage Project, etc)
    |
    ───
    Create CICD Workflow for Backend Deployment via pushing image to ECR, updating ECS Task and updating ECS Service
    |
    ───
    Create CICD Workflow for Serverless Functions Deployment in Python (Flask) and in Nodejs (Express)
    Docker
    |
    ───
    Containerization of Python, Node.js and Java application into images for deployment onto cloud
    System Design
    |
    ───
    LLM Summary Workflow using RabbitMQ for rate limiting
    |
    ───
    In-App Notification as a new table storing user-specfic data, with careful synchronization to true dataTable Design
    |
    ───
    Caching system with the help of in-app notification table which successfully separates user-specific data from general data
    |
    ───
    REST api based chat system with messages populated by socket.io
    Documentation (Docusaurus Project)
    |
    ───
    Initiated this project and consistently make change/progress record for different projects
    |
    ───
    Implemented CICD to encourage contributions from staffs
    |
    ───
    Google Authenticated via backend served in Lambda
    Redis
    |
    ───
    Implemented caching layer to offload query tasks from database
    |
    ───
    Clear understanding why we first update db, then clear cache, but not the vice versa
    |
    ───
    Used as Redis-Adapter to scale up node-js based socket-io servers
    iOS Deployment to AppStore with EXPO
    |
    ───
    Create Development Build for Native Modules
    |
    ───
    Create Internal Ad-Hoc Distribution (obsoleted due to hassles such as QR-code scanning, device registration, debug mode, ..., etc)
    |
    ───
    Create Store Build for publishing to App Store Connect
    |
    ───
    Create Internal and External Test via TestFlight
    |
    ───
    Handle App Submissions and Rejections
    |
    ───
    Manage everything above with 4 stages (DEV, UAT, POC, PROD) with different
    • bundleIdentifier
    • ascAppId
    • version and buildNumber
    • env (EXPO_PUBLIC_ 's)
    • Web Related.
      • Frontend.
        • Build, revamp and maintain React projects in Typescript.
      • Backend.
        • Maintain SpringBoot project, build APIs using MyBatis and mongo-java-driver
      • Cloud.
        • Move part of the services in SpringBoot project from pyinstaller-created executable to a single serverless Python Flask server, which are APIs to generate excel and pdf documents when receiving json data.
        • Serverless part have been summarized here for future reuse, additionally created a functioning template for nodejs express.
    • Mobile Related.
      • Frontend.
        • Develop this realtime text-messaging and LLM based project from scratch by React-Native and EXPO
        • Create reusable components by proper props design or packaging into a class
        • Create custom interactive components by React-Native-Reanimated
      • Backend.
        • Develop entire backend application from scratch by nodejs, express, socketio, etc.
        • Develop Lambda functions in python and nodejs for generating report in excel or word.
        • Designed middleware to let user send text, audio, images via REST apis and get the messages in the room they joined via socket.io.
        • Implement jwt authentication and refresh-token mechanism in both front and backend.
        • Develop Push notifcation system for ios and android.
        • Design tables for our backend to fulfll ever-changing requirements from product manager.
        • In table design, make careful consideration on the data-type of primary keys. Replaced the purely random UUID by ULID to improve performance of insertion.
        • Unify the structure of API response so that the frontend can handle errors gracefully.
        • Migrate schema of PostgreSQL DB via Prisma. Have good experience of creating, resolving, and testing migration scripts in dev and non-dev environments.
        • Create instant audio uploading on speech ends and create data processing pipeline in stream to transform
          1. base64-encoded strings into bytes
          2. that bytes from .m4a into .mp3
          3. upload resulting stream of bytes of mp3 to azure blob storage
      • System Design.
        • Develop message queue system using RabbitMQ to:
          • Rate limit api which has a limit of 100 concurrent calls (azure openai service)
          • Delay actions by means of DeadLetter Queue
        • Develop a class in the above message queue system to organize consumption logic, error-report logic and msg-publishing logic in a type-safe way
        • Develop a caching system (and a class) to GET and SET cached value in a managable way
        • Develop in-app notifcation to separate user-specifc data from our API, making those API cachable (userId independent)
      • iOS Deployment to AppStore with EXPO.
        • Internal Ad-Hoc Distribution
        • Store Build for publishing to App Store Connect
        • Internal and External Test via TestFlight
        • App Submissions and Rejections
        • Managed everything above with 4 stages (DEV, UAT, POC, PROD) with diferent bundleIdentifer, ascAppId, version and buildNumber, env (EXPO_PUBLIC_'s)
      • DevOps / CICD.
        • Create automated deployment workfows for frontend and backend via github actions. Which includes:
          • Containerize the nodejs backend > push to image registry > update task defntion > instruct ECS Fargate to use updated task
          • Deployment of documentation project onto S3 and cache-invalidation of cloudfront
      • Other.
        • Initiated a google‐authenticated documentation project by using Docusaurus to record detail that our developer should know
        • Lead, guide and nurture junior programmer by constantly sharing articles, my github projects, and related youtube videos when there are knowledge that they lack of
    • 15 Aug 2022 -
      April 2023

      AI Engineer
      Eye Catching Limited
      Skills Needed
      Python
      |
      ───
      PyTorch
      Typescript
      |
      ───
      Tensorflow
      |
      ───
      Onnx
      C++
      |
      ───
      Libtorch
      |
      ───
      Imgui
      |
      ───
      CMake Ecosystemstudies on CMake
      • Maintain angular project.
      • Study eye-tracing related algorithm.
      • Study and deploy machine leanring algorihtm in web-app and desktop-app.
      • Completely translate a BlazeFace model in python into the same model in libtorch of C++ for GUI application.
      • Implement methods to ensure weights in pytorch model can be used in libtorch model.
      • Study CMake and develop software to combine libtorch model and imgui application.
    • Sep 2021 -
      July 2022

      Senior Software Developer
      RaSpect Intelligence Inspection Limited
      Skills Needed
      Python
      |
      ───
      Selenium
      |
      ───
      Boto3 (AWS SDK)
      |
      ───
      Mongoengine
      |
      ───
      gRPC
      |
      ───
      PyTorch
      Data Annotation Tool
      |
      ───
      CVAT
      |
      ───
      COCO-Annotator
      AI-General
      |
      ───
      Data Annotation
      |
      ───
      DataLoader with Various Data Augmentations
      |
      ───
      Model Training for Rust Detection
      |
      ───
      Model Training for Crack Detection
      AI-Models
      |
      ───
      GAN for Producing Synthetic Data
      |
      ───
      Faster RCNN from Scratch and its Modification
      |
      ───
      Single Stage Headless Face Detector into Rust Detector
      Javascript (Legacy Project)
      |
      ───
      Next
      • Web or Hardware Related.
        • Maintain React Next project.
        • Data scrapping for house transactions records.
        • Automation on tracking latest rtk-data from official geodetic website and data-processing pipeline.
        • Work with a local grpc based service in Python to interact with a compiled binary (.exe), messed with multi-threading stuff.
      • Object Detection Related.
        • Text Detection. Implemented text detection (EAST) to facilitate signboard defect classification.
        • Crack Detection. Help implement detection model for crack and spalling.
        • Rust Detection. Implemented two solutions: (i) Text removal -> classifcation pipeline; and (ii) direct object detection model using faster rcnn.
      • Image Generation/Inpainting.
        • DefectGAN. Implemented image-generation model following this paper that generate synthetic data on cracks and spallings for training defect detection models on facades.
        • Text Removal. Experimented with existing algorithms like various GAN or image-inpainting method in pytorch. Finally I follow this paper to obtain a text eraser with satisfactory performance.
          For an example of failed model, we refer the results to here.
    • Aug 2020 -
      Mid-Aug 2021

      Software Engineer
      EAB Systems (Hong Kong) Limited
      Skills Needed
      Typescript
      |
      ───
      React
      |
      ───
      Redux
      |
      ───
      React-Native
      |
      ───
      Express
      |
      ───
      Mongoose
      |
      ───
      Sendgrid
      |
      ───
      Twilio
      Networking
      |
      ───
      socket.io
      Python
      |
      ───
      Pandas
      |
      ───
      Tensorflow v2
      • Build video conferencing frontend and backend application in React, Twilio and express.
      • Build CMS system that lets users create their own single page application.
      • Machine Learning Related. Build CSV Importer (together with an express layer and a Flask layer) that can parse a csv/excel file and perform:
        • Data Classification.
          • Sample Code: Link
          • Classify column based on existing data using LSTM model with two dense layers and finally a softmax.
        • Auto Date-reformatting.
          • Sample Code: Link
          • Based on machine learning model (transformer in NLP) that can translate all common form of date into YYYY-MM-DD format.

      • Data Classification and Auto Date-refomatting are separately two models placed inside tensorflow-serving for deployment.
    • Sep 2019 - Aug 2020

      Front-end Developer
      eLearningPro
      Skills Needed
      Javascript
      |
      ───
      React
      Python
      |
      ───
      tkinter
      |
      ───
      pyinstaller
      Art
      |
      ───
      Adobe Premiere
      |
      ───
      Adobe Photoshop
      |
      ───
      Saola Animate (CSS Animation)
      • Create HTML5 Coursewares, maintain web pages and construct React frontend application."
      • Created a python GUI project for text extraction from an image (a work necessary to translate old fresh game into html5 game).

        Detail can be found here.

    • Jan 2018 - Dec 2018

      2D Game Artist
      深圳疯点子科技有限公司
      Skills Needed
      Software
      |
      ───
      Unity
      |
      ───
      Autodesk 3ds Max
      |
      ───
      Adobe Photoshop
      Artistic Skills
      |
      ───
      2D Character Design
      |
      ───
      UI Assets Design
      |
      ───
      Low-poly 3D Model Construction
      Responsible for constructing 3d accessories, creating environment art and character design.
      Game that I worked on: Link
    • Oct 2015 to Dec 2017

      Unemployed
      Skills Needed
      Thick Skin
      Self-Discipline
      Parental Support

      I was striving to become an artist within two years. Of this time I was taking online courses and drawing on a daily basis. I aimed at being able to draw a variety of game assets (not just character).

      My outcome based on this period can be seen here.
    • Mar 2015 - Oct 2015

      Senior Research Assistant
      Department of Mathematics, Hong Kong Baptist University
      Study HJB equations arised in specific financial games.
    • Sep 2014 - Feb 2015

      Research Assistant
      Department of Mathematics, Hong Kong University of Science and Technology
      Study the property of viscosity solution of HJB equations.
    • Sep 2012 - June 2014

      Teaching Assistant
      Department of Mathematics, Hong Kong University of Science and Technology
      Fulfill teaching duty as required in obtaining studentship in the course of M.Phil study. Subjects include:
      • Calculus II
      • Linear Algebra
      • Mathematical Analysis
      • Real Analysis
      Teaching Material: Link

    Programming Skills

    Source Control
    • Git
    Deployment
    • Docker
    • Basic CI/CD Pipeline in Gitlab
    • Github Actions
    Cloud (AWS)
    • Security Group
    • Target Group
    • Load Balancer
    • ECS with EC2 or Fargate
    • Route53
    • S3
    • CloudFront
    • Lambda Functions
    • API-Gateway
    • RDS
    • SQS
    Typescript
    • React
    • React-Native
    • Redux
    • Redux-Saga
    • Next.js
    • Electron.js
    • Electron with Next.js
    • Node.js
    • Express.js
    • Socket.io
    • Twilio.js
    • Knex.js
    • Mongoose.js
    • Prisma.js
    • Prisma-Kysely.js
    Java
    • Spring Boot Project Maintenance
    • Hibernate
    • MyBatis
    • JOOQ
    C#
    • Windows Presentation Foundation
    C++
    • CMake Ecosystem
    • Libtorch
    • OpenCV
    • ImGui for Desktop App
    Golang
    • Gin
    • Goose
    • Sqlc
    • Azure-sdk for Voice
    • Go-Jet
    Python
    • Tensorflow v2
    • PyTorch
    • Pandas
    • Flask
    • ONNX
    • Openpyxl
    • Boto3
    Rust
    Data Streaming
    • Debezium (Kafka)
    Message Broker
    • RabbitMQ
    Database Query & Management
    • PostgreSQL
    • MongoDB
    Deep-Learning
    • Embed custom trained pytorch model in ONNX format into frontend
    • Implementation from scratch and training experience with CNN such as
      • Object Detection
      • Text Detection with Rotation
      • Image Classification
      • Image Generation and Image In-painting
    • Implementation and training experience with LSTM Model and Transformer to do:
      • Summarization on a column of data
      • Translation of random date format into standard YYYY-MM-DD one

    Art Skills

    Tools
    • Photoshop CC
    • 3DS Max
    Thingies I Draw
    • 2D Character
    • 2D Environment

    Computer Set-up for Deep-Learning

    • OS: Windows 10 Professional
    • CPU: Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz 2.81 GHz
    • Graphic Card: NVIDIA GeForce RTX 3090
    • RAM: 32.0GB
    • Many Others ...