Files
cv/miti99.yml
T

259 lines
9.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# yaml-language-server: $schema=https://raw.githubusercontent.com/rendercv/rendercv/refs/tags/v2.8/schema.json
cv:
name: Tien Nguyen Minh
headline: Senior Java Software Engineer | Java 21, Backend Systems, Real-Time Multiplayer, CI/CD
location: HCMC, Vietnam
email: tiennm99@outlook.com
photo: avatar.jpg
phone: (+84) 869 156 149
website: https://miti99.com/
social_networks:
- network: LinkedIn
username: miti99
- network: GitHub
username: tiennm99
- network: Telegram
username: tiennm5
sections:
education:
- institution: Ho Chi Minh City University of Technology
area: Computer Science and Engineering
degree: B.E.
date:
start_date: 2017-09
end_date: 2023-06
location: HCMC, Vietnam
highlights:
- "GPA: 8.0/10 — Academic Excellence Scholarship; Five Good Student Award"
- "Thesis: Survival2D — 2D multiplayer Battle Royale game server in Java (Netty/WebSocket); authoritative architecture, FlatBuffers serialization to reduce packet size compared with JSON, behavior tree AI bots, and server-side anti-cheat"
experience:
- company: ZingPlay Game Studios, VNG Corp.
position: Senior Software Engineer
date:
start_date: 2020-07
end_date: present
location: HCMC, Vietnam
summary: Senior Java engineer with 5+ years building and operating production backends for real-time multiplayer games. Experienced in Java 21, Netty/Vert.x, Redis, Couchbase, Kafka, automated testing, CI/CD, production debugging, and cross-functional delivery.
highlights:
- "[Chaos Age 2](https://play.google.com/store/apps/details?id=vn.zps.tl2): Primary Java backend contributor for gameplay systems, battle synchronization, matchmaking, payments/webpay, admin tooling, automated tests, and delivery pipelines"
- "Built and maintained Java 21 backend modules with Netty/Vert.x, Couchbase, Redis, Kafka, Gradle, JUnit 5, Mockito, Docker-based local dependencies, and GitLab CI pipelines; used automated tests around gameplay, payment, and release-critical flows"
- "Applied OOP and design patterns to reusable packet handlers, gameplay workflows, payment/config modules, and admin tooling for live products"
- "[Burkozel](https://play.google.com/store/apps/details?id=zps.games.burkozel), [Show](https://play.google.com/store/apps/details?id=zps.games.show), and [Sky Garden](https://play.google.com/store/apps/details?id=vn.kvtm.js): Maintained backend gameplay events, payment/config updates, metrics, concurrency fixes, live diagnostics, Redis/runtime debugging, CI/deploy support, and release support"
- "Standardized Java game-server scaffolding, packet-handler generation, framework usage, and AI-assisted delivery workflows with documented guidance"
projects:
- name: "[Store Scraper Bot](https://github.com/tiennm99/store-scraper-bot) / [Java original](https://github.com/tiennm99/store-scraper-bot-java)"
start_date: 2025-11
end_date: present
summary: Telegram bot for tracking Apple App Store and Google Play app updates; original Java 21 implementation later ported to Node.js/Vercel.
highlights:
- "Built Java bot with Gradle, MongoDB, Telegram command handlers, reusable repository abstractions, Docker/Compose setup, and JUnit scraper tests"
- "Ported operational bot to serverless Node.js with Upstash Redis, Vercel Cron, webhook/cron request validation, and GitHub Actions syntax/leak checks"
- name: "[Gomoku](https://github.com/tiennm99/gomoku)"
date: 2026
summary: Multiplayer Gomoku game with authoritative Go WebSocket backend, protobuf binary messages, Docker Compose, GitHub Actions CI, and Phaser client.
highlights:
- "Designed server-authoritative gameplay with move validation, win detection, PVP/PVE/spectator modes, per-player state machine, and minimax AI"
- "Covered game, lobby, network codec, and state flows with Go tests; CI runs go vet, go test, server build, and client build"
- name: "[Rplace](https://github.com/tiennm99/rplace)"
date: 2026
summary: Collaborative pixel canvas on Cloudflare Workers using Durable Object SQLite storage, WebSocket pixel broadcasts, edge validation, and Svelte client.
highlights:
- "Implemented batch pixel placement, per-user cooldowns, real-time broadcast, and 4096x4096 canvas chunking"
- "Added Vitest coverage for worker validation, Durable Object storage, canvas loading, cookies, WebSocket behavior, and rate limits"
skills:
- label: Languages
details: Java, Go, JavaScript/TypeScript, Shell
- label: Frameworks & Libraries
details: Netty, Vert.x, Spring Boot, JUnit 5, Mockito, Cocos2d-x, Godot, WebSocket
- label: Databases
details: Couchbase, Redis, MySQL, Kafka, ClickHouse
- label: Infrastructure & DevOps
details: Docker, GitLab CI, GitHub Actions, Linux, AWS Lambda/SAM, Cloudflare Workers, Vercel
- label: Architecture
details: Object-oriented design, reusable backend components, game server architecture, real-time multiplayer systems, event-driven design
- label: Delivery Practices
details: Unit testing, code review, production debugging, CI/CD, DevOps collaboration, AI-assisted development workflows
- label: Languages (Spoken)
details: Vietnamese (Native), English (TOEIC 600+)
design:
theme: engineeringresumes
# page:
# size: us-letter
# top_margin: 0.7in
# bottom_margin: 0.7in
# left_margin: 0.7in
# right_margin: 0.7in
# show_footer: true
# show_top_note: true
# colors:
# body: rgb(0, 0, 0)
# name: rgb(0, 79, 144)
# headline: rgb(0, 79, 144)
# connections: rgb(0, 79, 144)
# section_titles: rgb(0, 79, 144)
# links: rgb(0, 79, 144)
# footer: rgb(128, 128, 128)
# top_note: rgb(128, 128, 128)
# typography:
# line_spacing: 0.6em
# alignment: justified
# date_and_location_column_alignment: right
# font_family:
# body: Source Sans 3
# name: Source Sans 3
# headline: Source Sans 3
# connections: Source Sans 3
# section_titles: Source Sans 3
# font_size:
# body: 10pt
# name: 30pt
# headline: 10pt
# connections: 10pt
# section_titles: 1.4em
# small_caps:
# name: false
# headline: false
# connections: false
# section_titles: false
# bold:
# name: true
# headline: false
# connections: false
# section_titles: true
# links:
# underline: false
# show_external_link_icon: false
# header:
# alignment: center
# photo_width: 3.5cm
# photo_position: left
# photo_space_left: 0.4cm
# photo_space_right: 0.4cm
# space_below_name: 0.7cm
# space_below_headline: 0.7cm
# space_below_connections: 0.7cm
# connections:
# phone_number_format: national
# hyperlink: true
# show_icons: true
# display_urls_instead_of_usernames: false
# separator: ''
# space_between_connections: 0.5cm
# section_titles:
# type: with_partial_line
# line_thickness: 0.5pt
# space_above: 0.5cm
# space_below: 0.3cm
# sections:
# allow_page_break: true
# space_between_regular_entries: 1.2em
# space_between_text_based_entries: 0.3em
# show_time_spans_in:
# - experience
# entries:
# date_and_location_width: 4.15cm
# side_space: 0.2cm
# space_between_columns: 0.1cm
# allow_page_break: false
# short_second_row: true
# summary:
# space_above: 0cm
# space_left: 0cm
# highlights:
# bullet: •
# nested_bullet: •
# space_left: 0.15cm
# space_above: 0cm
# space_between_items: 0cm
# space_between_bullet_and_text: 0.5em
# templates:
# footer: '*NAME -- PAGE_NUMBER/TOTAL_PAGES*'
# top_note: '*LAST_UPDATED CURRENT_DATE*'
# single_date: MONTH_ABBREVIATION YEAR
# date_range: START_DATE – END_DATE
# time_span: HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS
# one_line_entry:
# main_column: '**LABEL:** DETAILS'
# education_entry:
# main_column: |-
# **INSTITUTION**, AREA
# SUMMARY
# HIGHLIGHTS
# degree_column: '**DEGREE**'
# date_and_location_column: |-
# LOCATION
# DATE
# normal_entry:
# main_column: |-
# **NAME**
# SUMMARY
# HIGHLIGHTS
# date_and_location_column: |-
# LOCATION
# DATE
# experience_entry:
# main_column: |-
# **COMPANY**, POSITION
# SUMMARY
# HIGHLIGHTS
# date_and_location_column: |-
# LOCATION
# DATE
# publication_entry:
# main_column: |-
# **TITLE**
# SUMMARY
# AUTHORS
# URL (JOURNAL)
# date_and_location_column: DATE
locale:
language: english
# last_updated: Last updated in
# month: month
# months: months
# year: year
# years: years
# present: present
# month_abbreviations:
# - Jan
# - Feb
# - Mar
# - Apr
# - May
# - June
# - July
# - Aug
# - Sept
# - Oct
# - Nov
# - Dec
# month_names:
# - January
# - February
# - March
# - April
# - May
# - June
# - July
# - August
# - September
# - October
# - November
# - December
settings:
current_date: "2026-06-11"
render_command:
design:
locale:
typst_path: miti99.typ
pdf_path: miti99.pdf
markdown_path: README.md
html_path: index.html
png_path: miti99.png
dont_generate_markdown: false
dont_generate_html: false
dont_generate_typst: false
dont_generate_pdf: false
dont_generate_png: true
bold_keywords: []