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

Framework & Languages:

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