About Me
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/checkerccRecent artworks are mostly related to Final Fantasy 14.
Education
03/2019 - 06/2019
MicroMaster in A.I. and ProgrammingTecky Academy, Hong Kong09/2012 - 08/2014
M.Phil. in MathematicsThe Hong Kong University of Science and Technology, Hong Kong09/2009 - 06/2012
B.Sc. in Mathematics (First Class Honor)The Hong Kong University of Science and Technology, Hong Kong
Experience (IT Related: 5.32 Years)
- 15-May 2023 -Present1 yr 7.8 mosSoftware EngineerWonderbricks LimitedSkills NeededTypescript / Frontend|───React|───Redux-Toolkit|───React-Native Study notes on react-native|───React Native Reanimated|───Expo-Cli (Development Build, ad-hoc Internal Distribution, etc)|───Algolia (Search Engine)|───Socket.io-client|───Push Notification for iOS, Android via EXPOTypescript / 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 NotificationKotlin / 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 modulesPython / Backend|───Flask|───Boto3|───OpenpyxlCloud (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 limitCICD / 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 ECSSystem 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 processesDocumentation (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 LambdaRedis|───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 serversiOS 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.
- Frontend.
- 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
- base64-encoded strings into bytes
- that bytes from .m4a into .mp3
- 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.
- Develop message queue system (wrapped by a class) using RabbitMQ to:
- 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
- Create automated deployment workflows for frontend and backend via github actions. Which includes:
- 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
- Frontend.
- Web Related.
- 15 Aug 2022 -April 20238.4 MonthsAI EngineerEye Catching LimitedSkills NeededPython|───PyTorchTypescript|───Tensorflow|───Onnx
- 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 202210.9 MonthsSenior Software DeveloperRaSpect Intelligence Inspection LimitedSkills NeededPython|───Selenium|───Boto3 (AWS SDK)|───Mongoengine|───gRPC|───PyTorchData Annotation Tool|───CVAT|───COCO-AnnotatorAI-General|───Data Annotation|───DataLoader with Various Data Augmentations|───Model Training for Rust Detection|───Model Training for Crack DetectionAI-Models|───GAN for Producing Synthetic Data|───Faster RCNN from Scratch and its Modification|───Single Stage Headless Face Detector into Rust DetectorJavascript (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.
- Web or Hardware Related.
- Aug 2020 -Mid-Aug 20211 yr 0.4 mosSoftware EngineerEAB Systems (Hong Kong) LimitedSkills NeededTypescript|───React|───Redux|───React-Native|───Express|───Mongoose|───Sendgrid|───TwilioNetworking|───socket.ioPython|───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 and Auto Date-refomatting are separately two models placed inside tensorflow-serving for deployment.
Sep 2019 - Aug 2020
11.9 MonthsFront-end DevelopereLearningProSkills NeededJavascript|───ReactPython|───tkinter|───pyinstallerArt|───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 Months2D Game Artist深圳疯点子科技有限公司Skills NeededSoftware|───Unity|───Autodesk 3ds Max|───Adobe PhotoshopArtistic Skills|───2D Character Design|───UI Assets Design|───Low-poly 3D Model ConstructionResponsible for constructing 3d accessories, creating environment art and character design.Game that I worked on: LinkOct 2015 to Dec 2017
UnemployedSkills NeededThick SkinSelf-DisciplineParental SupportI 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 MonthsSenior Research AssistantDepartment of Mathematics, Hong Kong Baptist UniversityStudy HJB equations arised in specific financial games.Sep 2014 - Feb 2015
6 MonthsResearch AssistantDepartment of Mathematics, Hong Kong University of Science and TechnologyStudy the property of viscosity solution of HJB equations.Sep 2012 - June 2014
1 yr 9.8 mosTeaching AssistantDepartment of Mathematics, Hong Kong University of Science and TechnologyFulfill 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
- Git
- Docker
- Basic CI/CD Pipeline in Gitlab
- Github Actions
- Security Group
- Target Group
- Load Balancer
- ECS with EC2 or Fargate
- Route53
- S3
- CloudFront
- Lambda Functions
- API-Gateway
- RDS
- SQS
- 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
- Spring Boot
- Coroutines
- SSE
- Domain Driven Design
- JOOQ
- Spring Boot
- Hibernate
- iBatis
- Windows Presentation Foundation
- CMake Ecosystem
- Libtorch
- OpenCV
- ImGui for Desktop App
- Gin
- Goose
- Sqlc
- Azure-sdk for Voice
- Go-Jet
- Tensorflow v2
- PyTorch
- Pandas
- Flask
- ONNX
- Openpyxl
- Boto3
- Elliptic Curve Digital Signature Algorithm, Code Implementation
- Debezium (Kafka)
- RabbitMQ
- PostgreSQL
- MongoDB
- 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
- Photoshop CC
- 3DS Max
- 2D Character
- 2D Environment