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 (IT Related: 5.32 Years)

  • 15-May 2023 -
    Present

    1 yr 7.8 mos
    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)
    |
    ───
    Stripe (For Reading stripe content, e.g., Products, Subscription-end-date, metadata, etc)
    |
    ───
    Prisma-Kysely (as type-safe query builder, a counterpart of JOOQ in java; and go-jet in golang)
    |
    ───
    Expo Push Notification
    Kotlin / Backend
    |
    ───
    Stripe (For Subscription and webhook events handling)
    |
    ───
    Spring boot
    |
    ───
    JOOQ as Query Builder and DAO auto-generator
    |
    ───
    JUnit5 For Integration Test and Unit Test
    |
    ───
    Mockk For Mocking Services
    |
    ───
    Algolia (Search Engine)
    |
    ───
    Project modularization into restapi, application, domains, infrastructure, etc
    |
    ───
    Custom Gradle Plugins for dependencies management among modules
    Python / Backend
    |
    ───
    Flask
    |
    ───
    Boto3
    |
    ───
    Openpyxl
    Database
    |
    ───
    |
    ───
    Cloud (AWS)
    |
    ───
    Deploy Lambda Functions for Excel Generation in python
    |
    ───
    Deploy Lambda Functions for File Generation and Google Authentication in nodejs
    |
    ───
    Deploy Lambda Functions which execute function via docker images
    |
    ───
    Deploy React App to S3 via served by Cloudfront and Route53
    |
    ───
    Deploy Docker Images to ECS Fargate
    |
    ───
    Manage Load-Balancer which points to various services and set inbound rules for each port
    |
    ───
    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, React App Projects, 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, Java and Kotlin application into images for deployment via ECS
    System Design
    |
    ───
    Notification System. 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
    |
    ───
    Event-Driven Payment System. A CQRS system for granular control on compensating actions in payment processes
    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 production build for publishing to app store
    |
    ───
    Manage and version the builds for uat, prod, implement force update accordinly
    |
    ───
    Handle App Submissions and and understand Rejections
    |
    ───
    Manage everything above with 2 stages (UAT, PROD) and perform OTA update in UAT when there is no changes in native module.
    • 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 (wrapped by a class) 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 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)
        • Develop a payment system for which:
          • Allow user to pay for subscription plans, via Stripe and our own database, for different usage limit on the web page and the mobile app that I was developing in Wonderbricks Limited.
      • 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 workflows 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 all react-app projects onto S3 > perform cache-invalidation in 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

      8.4 Months
      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

      10.9 Months
      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

      1 yr 0.4 mos
      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

      11.9 Months
      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

      11 Months
      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

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

      6 Months
      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

      1 yr 9.8 mos
      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
    Kotlin
    • Spring Boot
    • Coroutines
    • SSE
    • Domain Driven Design
    • JOOQ
    Java
    • Spring Boot
    • Hibernate
    • iBatis
    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