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 computer vision (from deep learning point of view). 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.
- Orchestration of cloud infrastructure via code (such as Terraform)
Apart from technical side, artistically 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.53 Years)
- 15-May 2023 -Present1 yr 10.5 mosSoftware EngineerWonderbricks LimitedSummary.
In the 1st year I focused on building a prototype to test the market reaction, which consists of
- a mobile app written by react-native
- backends using express and springboot
In the 2nd year I focused on cloud infrastructure for better security and product scalability. I am responsible to transit our cloud infrastructure from manual aws console manipulation to generation via terraform code, which is to cater for the need to adopting increasingly complex cloud resources.
Skills 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)Python / Backend|───Flask|───Boto3|───OpenpyxlTerraform (Infrastructure as Code)|───Configure all of the following Cloud (AWS) Resources using TerraformStudies on TerraformCloud (AWS)|───Deploy Lambda Functions for File Generation and Google Authentication in python and nodejs|───Deploy Lambda Functions which is executed via docker image (a replacement of zipped file approach when file size exceeds 250Mb)|───Deploy React App to S3 via Cloudfront and Route53|───Deploy Docker Images to ECS Fargate|───Deploy Spring Boot Application as a snap-started lamda function|───Manage Load-Balancer, listeners and target groups|───Manage Security Groups|───Configure VPC and Lambda inside VPC for Elastic Network Interface|───Configure RDS and RDS-proxy|───Configure IAM role for access right among resources (e.g., create policy to let lambda function access RDS-Proxy)|───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) and in Kotlin (Spring Boot)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.ioDocumentation (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.
- 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
- Terraform
- Security Group
- Target Group
- Load Balancer
- ECS Fargate
- Route53
- S3
- CloudFront
- Lambda Functions
- API-Gateway
- API-Gateway with Websocket API
- RDS
- RDS-Proxy
- IAM Policies
- 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