Raymond Pang
SKILL
Advanced Concurrency
CAS / Atomic API
NIO
Project Loom Virtual Thread
Lock & Condition
RecursiveAction
CompletableFuture
Producer Consumer Pattern
ParallelStream
Thread Pool & ExecutorService
etc
Software Quality & Maintainability
Jenkin
Github Action
Automated Testing
Ansible
Docker
Kubernetes
Versioning
Mockito
JUnit
TDD, BDD
SDLC
DDD
SOLID principle
Design Patterns
etc
Distributed System & System Design
Kafka
Redis
gRPC
CSRQ
SAGA Pattern
5 Caching Strategies
Idempotency
2PC / 3PC
MVCC
Eventual consistency
Consensus
Zookeeper
Websocket
SSE vs WebSocket
RestAPI vs GraphQL
CAP Theory
API Gateway & Service discovery
Load balancer
AWS S3
CDN (Cloudfront)
SSO
OAuth
JWT
Hashing
Cookie
Encryption
Secrets Manager
etc
Database
Query Optimisation
High Availability
Postgres
Clickhouse
NoSQL
MongoDB
MySQL
Stored Procedure
Data Warehousing
Hibernate (alternative to MyBatis)
etc
Spring Boot
ReactJS
Typescript
Java
C++
Python
etc
GITHUB
Stock Exchange Simulator
A concurrent system that simulate the exchange that facilitates the matching of buyers and sellers.
QuickFIX/J
Atomic OperationS (CAS)
JUnit 5
Mockito
JMH
ActiveMQ
MongoDB
MySQL
Collaborative Real-time Drawing app (Demo Available)
A multiplayer-drawing-app is a full-stack web application designed to let users free draw collaboratively in real time.
Typescript
ReactJS
Java Spring Boot
WebSocket
MongoDB
Concurrency
CompletableFuture
In memory Cache
Thread Safe Hybrid Blocking Queue Optimised for High Contention Use Case
A queue that smartly alter between atomic operations and locks based on different circumstances
Java
Concurrency
Lock & Condition
Atomic OperationS (CAS)
High Throughput Message Queue Consumer with Java Virtual Thread
RabbitMQ consumer that guarantees 30K IO throughput per CPU Core.
RabbitMQ
Virtual Thread
Java
Concurrency
EXPERIENCE
Analysing billions of pixels per second, powered by Java & C++
Billions of pixel and millions of timestamp data per second
PyTorch
ReactJS
Algorithm
Optimised and scalable real time communication
Built on gRPC, Kafka, Redis & Websocket
30K x N number of messages, where N is number of CPU core
Unlock the power of Virtual Thread and ComputableFeature in Java for IO intensive tasks
Why do we use Kafka?
Leveraged Kafka brokers to manage a 5x increase in traffic spikes during peak hours by balancing the Java consumer workload for geo-temporal throughput
Why do we use Redis?
Leveraged Redis to cache alert configuration, resulting in a 3x increase in throughput for detection alerts
Real time interactive heatmap, instantly tracking visitors and showing analytics
Billions of pixel and millions of timestamp data per second
ReactJS
Redux
The location of very object at every 0.05 second are stored
By using summary tables, composite index and table partitions, PostgreSQL latency is decreased by 10 times for complex analytics of 1 billion rows of geo-temporal data
In-browser multithreading, ReactJS and HTML Canvas
Handled the rendering of 1M pixels real-time heatmap from 300 million records with hash map and in-browser multithreading with ReactJS and HTML5 Canvas. So, that the browser does not crash, and the avg. latency is also decreased by 8 times.
Idempotency between websocket and REST Api with Redux
There is no error no matter the server crash or user refreshes the page
Queuing Canvas Edit API requests in redux to reduce perceived latency from ~1 second to ~20ms
Allow user to instantly produces multiple Edit actions on canvas without waiting for server response
Fancy and user friendly interface, which supports zooming and dragging and real time editing
User can use mouse to zoom in and out the heatmap, all developed in ReactJS from scratch
Tracking objects through 3D space & time
Billions of pixel and millions of timestamp data per second
PyTorch
ReactJS
Algorithm
Estimating velocity of self-driving car with single camera
Estimating velocity of self-driving car with camera
Using RIPOC to estimate rotation and speed
Object tracking with Kalman Filter and Hungarian Algorithm
Object tracking with Kalman Filter and Hungarian Algorithm.
Video Conference System for 18 Public Hospital & Financial Institutions
Developed a video conference system with Laravel, MySQL and Vue.js, used by critical services including 18 public hospitals and financial institutions in Asia
Laravel (Backend OOP Framework
VueJS
MySQL
MQTT
Comprehensive features built with WebRTC
Start / stop multiple WebRTC video sessions
Invite / kick participants in multiple video session
Replay and download recordings in vp8 encoding
Protect video conferences with password
Build comfortable and appealing user experience view and edit meetings in a calender from scrach with Vue JS
An appealing calender to schedule room bookings
Automatically synchronise with Microsoft with webhooks
View room bookings in daily, weekly and monthly view
Mouse over booking item for details
Drag and drop to modify or remove
Invented the first visual what-if analysis for tabular data at HKUST
Designed and developed a novel algorithm that can generate distinct rule sets from intertwined logical statements, helping Cathay Pacific to find out the cause of airline delay
PyTorch
Python
AWARDS
$100K Funding for Explainable AI based InsurTech Platform - MylifeOmni (currently insurtech.hk)
Recommend the best insurance plan for you with explanation based on over 10 millions different existing scenarios
NodeJS
ReactJS
ReactNative
AWS
Qianhai HK Startup Competition - Finalist
Real-time stunt recognition and similarity estimation application with livestream and result streaming
Java
Python
ReactJS
Multithreading
Virtual Thread
WebRTC
WebSocket
Dynamic Programming
Combining the top techniques in concurrency and algorithms to achieve low-latency movement matching, streaming and rendering
Developed a concurrent system that parallelizes 3D pose estimation, video streaming, and live feed rendering on resource-constrained devices with limited CPU capacity
Find the most similar actions with dynamic programming with O(nk) time complexity. Use sliding windows to limit the scope of search.
Use separate CPU threads for the following tasks to prevent blocking the frame consumer: 1) rending skeleton in frames 2) encoding to VP9 format 3) Pose Estimation
Use thread-safe queue for inter process communication
Use coroutine (ie. virtual thread) for IO intensive tasks such as saving video
Use WebRTC for web streaming and websocket for streaming scoring periodically
Prototyped in Python and rewritten in Java
EDUCATION
Bachelor Degree in Computer Engineering
City University of Hong Kong