Resume - Ming Chia Wu

Just as every company looks for the right employees, I am also searching for the perfect company to work with. It's like dating – mutual satisfaction is essential for a successful partnership.

  • Personal Information

Chinese Name: 吳銘嘉 (Ming Chia Wu)

English Name: Thai

Date of Birth: 1985 / 01

Gender: Male

Highest Education: Private Asia University - Optoelectronics and Communications Engineering - Bachelor's - Taiwan - 2006 / 09 ~ 2010 / 07

Marital Status: Married with one daughter

Phone: 0916446623

Email: ggttoo44@gmail.com

Line ID: thaiwu

  • Primary Work Experience

    Company Name Position Employment Period Reason for Leaving
    YingMan Co., Ltd. Technical Director 2021 / 11 ~ NOW Currently employed
    Paradise Games Co., Ltd. Game Department Manager 2021 / 1 ~ 2021 / 10 Career planning
    Paradise Games Co., Ltd. Game Department Principal Software Engineer 2020 / 3 ~ 2021 / 1 Internal promotion
    Paradise Games Co., Ltd. Game Department Senior Staff Software Developer 2019 / 10 ~ 2020 / 3 Internal promotion
    Centralize Information Senior Technical Director 2018 / 08 ~ 2019 / 10 Company investment end
    Gama Technology Senior Software Engineer 2016 / 11 ~ 2018 / 08 Company stability, limited technical growth
    SYSTEX Information - SoftMobie Software Engineer 2015 / 02 ~ 2016 / 10 Career planning
    Xing Wang International (GPK) Web Frontend, HTML, jQuery 2012 / 07 ~ 2014 / 05 Career planning
  • Personality and Work Traits

  1. Over 12 years of software development experience, with more than 10 years in the gaming industry. Possess four years of management experience, specializing in various game development areas such as slot machines, card games, fishing games, and mahjong. Experienced in architecture design, risk control, and RTP management. Proficient in handling high concurrency and enjoys sharing development experiences. Capable of taking on the role of a technical manager.
  2. Excellent team communication skills, emphasizing interpersonal relationships, actively listening to others' ideas, demonstrating empathy, and offering practical solutions. Provides meticulous guidance.
  3. Strong endurance and attention to detail. Dedication and commitment to fulfilling job responsibilities, valuing work and continuous technical improvement. Self-management skills are exceptional, and a proactive problem solver with a high degree of initiative.

Skills:

Computer Science:

  • Algorithm
  • Data Structure
  • Web Server/Application Development
  • Game Server
  • Epoll/Reactor
  • Multithreading
  • Multiprocess
  • Coroutine

Programming

  • Websocket
  • RESTful API
  • Cluster Systems
  • Microservice
  • High Availability Systems
  • Inversion of Control
  • Depedency Injection

Language:

  • JavaScript
  • Typescript
  • SQL
  • AQL
  • Golang
  • puml
  • markdown
  • shell script

Domain Knowledge:

  • Casino Management System
  • Slot Game
  • Texas Hold'em Game
  • Poker Game
  • Fish Game
  • mahjong[麻將] game

Framework & Tools

  • Nodejs
  • Redis Cluster
  • Docker
  • Mysql
  • ArangoDB
  • Jenkins
  • Mssql
  • Swagger
  • Nginx
  • Jira
  • Git
  • PM2
  • Nats
  • Jetstream

Work History

  • YingMan Co., Ltd. - Technical Director / Principal Software Engineer / Principal Software Architect (Managed 24 people) 2021 / 11 ~ NOW

    • Project Development: Third-party sports platform development, third-party electronic gaming platform development, entertainment casino platform development, USDT wallet services for transfers.
    • Job Responsibilities:
      1. Led the team in developing third-party sports platforms.
      2. Led the team in developing third-party electronic gaming platforms.
      3. Led the team in developing the entertainment casino platform.
      4. Led the team in developing USDT wallet services.
  • Paradise Games - Electronic Gaming Department - Game Department Manager / Principal Software Engineer / Principal Software Architect (Managed 55 people) 2021 / 1 ~ 2021 / 10

    • Project Development: WebSocket core development, electronic gaming platform development, game bet query platform, backend management operation platform.

    • Job Responsibilities:

      1. Developed a WebSocket framework in Golang for game servers, providing a foundation for RDs to handle communication and buffer transmission, including push, multicast, broadcast, topic subscription, topic unsubscription, topic broadcasting, cluster broadcasting, etc. It also automatically converted Golang objects into compressed data packets for transmission.
      2. Created a JavaScript SDK for Cocos used on the frontend, allowing it to handle communication with the company's WebSocket server, relieving the frontend of handling the conversion process from buffer to JavaScript objects.
      3. Designed a proprietary packet layout for communication between the frontend and backend.
      4. Encapsulated the Golang WebSocket framework with an MQ communication mechanism to support cluster communication among servers subscribed to the same topics.
      5. Reconstructed the wallet system, including the design and planning of a second-generation wallet system.
      6. Developed platforms for various games, such as slot machines, card games, fishing games, and mahjong, along with bet query platforms, RTP control, and risk control systems.
      7. Directly managed nearly 30 people (pure RDs) and indirectly managed close to 55 people (including artists). Main responsibilities included game backend, bet query web frontend and backend, game cocos frontend, and 2D/3D art task assignment and scheduling.
    • Job Achievements:

      1. Developed the Yggdrasill Framework for WebSocket core.
      2. Created JS Client SDK for WebSocket Server.
      3. Developed Golang Client SDK for WebSocket Server.
      4. Built electronic gaming platform systems, including bet query, RTP, and risk control systems.
      5. Developed a second-generation wallet system using distributed services.
      6. Constructed a network platform community system.
      7. Launched electronic games, online card games, and various Chinese Mahjong products (popular, Hong Zhong, Blood Battle, Blood Flow, Wenzhou, Shanghai, Guizhou) since June 2020.
      8. Successfully established a complete team from scratch, growing from 4 to 55 members.
    • Centralize Information - Senior Technical Director (Managed 5-8 people) 2018 / 08 ~ 2019 / 10

      • Project Development: Development and construction of 15 games (poker and slot machine) and backend architecture, risk control, RTP control.
      • Job Responsibilities:
        1. Led the backend team in building a Microservices structure for gambling games and developing systems for live casinos.
        2. Developed games, including slot machines (score calculation, jackpot), multiplayer Texas Hold'em, and multiplayer Baccarat.
        3. Used Golang to develop Texas Hold'em (GRPC) and slot machines (score calculation) and CPU operation types.
        4. Designed the database schema and data modeling from NoSQL to Redis clusters.
        5. Utilized asynchronous I/O epoll mechanism, a mathematical model for Linux's user/kernel thread event loop, and node.js to manage frequent I/O in the architecture.
        6. Designed a frontend game SDK with development documentation to simplify communication between the frontend and backend, allowing the frontend to focus on game interface development without dealing with the conversion of buffer formats to JavaScript objects.
        7. Managed high-concurrency connections and data volume.
        8. Used shell scripts, Jenkins, and other tools to handle unit testing, integration testing, versioning, deployment, and testing environment setup after each git commit.
        9. Designed a microservices architecture, including a distributed transaction control system, and created microservice documentation.
        10. Provided training and education to RDs, project management, task allocation for suitable candidates, cross-team communication and coordination, and meetings with PMs to implement functionality and timeframes (development department, testing department, project managers).
      • Job Achievements:
        1. Developed versioning processes from development to production environments, using puml and markdown for documentation.
        2. Designed a microservices architecture.
        3. Achieved a throughput of 80,000 data entries per second using NoSQL Arangodb SSD, with WebSocket handling 180,000 messages per second and one core processing 250,000 requests.
        4. Optimized algorithms and improved the performance of Golang probability engineering programs, achieving a 5-10x speed boost.
        5. Ensured stability and reliability through testing on an Intel Core i7 8700 with 16GB of RAM, capable of accommodating 8,000 users for 48 hours without errors.
        6. Trained five junior engineers who had just completed their military service, collaboratively developed and shared development experiences.
        7. Resolved server bugs remotely using a mobile phone, achieving a unique milestone.
        8. Successfully established an RD team from scratch, growing from 0 to 8 members.
    • Gama Technology - Software Engineer (Managed 4 people) 2016 / 11 ~ 2018 / 08

      • Project Development: New architecture development, casino management, Baccarat score calculation, member management, backend administration, bet query, loyalty, reward points, cashback, first deposit, and agent commission systems.
      • Job Responsibilities:
        1. Primarily developed an API server framework, rewriting and upgrading the existing codebase from C++ to Typescript + KOA2.
        2. Designed a base framework for the new API server using IOC and DI design patterns, and trained other engineers on how to develop new features using this framework efficiently. Unit testing was performed using Mocha, and document integration testing employed Dredd and Newman.
        3. Conducted document integration testing using Dredd and Newman, with API documentation written in Swagger.
        4. Used Jenkins for automated builds, running tests automatically after each git commit.
        5. Implemented jslint and tslint for code quality, and used git hooks to execute these tests automatically when committing, ensuring the code met expectations.
        6. Developed functionality for promotional server architecture, enabling dynamic loading of platform-specific requirements such as first deposit promotions, cashback promotions, agent commissions, and deposit gifts.
        7. Developed an Android mobile app for live Baccarat operators, along with the corresponding API server.
  • Portfolio

    1. A server example written in Node.js, with benchmark data. It transfers backend JSON to binary to reduce transmission costs. On the frontend, it uses a custom SDK to convert it back to JSON format.

      Benchmark Data

    2. Benchmark data for the ArangoDB NoSQL database.

      Benchmark Data

    3. Technical documentation in video format. Due to the need for quick reference, these are hosted on YouTube.

      Technical Documentation

    4. Backend SDK for game frontend, along with technical documentation. It breaks down game requirements, allowing the frontend to focus on game screen development.

      SDK

    5 5. Some game projects: 1 2

  • Expected Salary: Negotiable.

  • Chinese Autobiography

    • My Specific Requirements

      1. I am not interested in jobs that involve employee performances at company banquets or serving as entertainers for clients.
      2. My wife and child work and attend school in Taipei. Currently, my parents are retired and living in Taichung. My father is in the fourth stage of lung adenocarcinoma, so I hope to have two days of remote work within a week, full paid leave, or rotation between Taichung and Taipei work. However, the company's needs remain a priority.

      During typhoon days, I can cooperate with my colleagues and work as usual. I won't insist on taking leave. I take responsibility for completing what needs to be done within the given time frame. Overtime can be accommodated based on project requirements.

      I am fortunate to join a company that is generous to its employees, and I will equally reciprocate with my full commitment.

    • Learning Period

      During my time at Xingwang International, I initially considered resigning. I decided to start from scratch and develop my technical skills. Through self-study and classroom assistance, I attended Hengyi Institute for six months. While it may not compare to four years in a university, the condensed coursework was intensive. Apart from diligent class attendance, I often stayed up late after class, reading the original texts, self-translating, and researching to strengthen my fundamentals.

      My inquisitive nature drives me to seek deeper understanding and grasp the underlying principles. This results in me having very little sleep each day. At some point, I even considered returning to a university for a full four-year degree, which I completed, but I chose to follow my teacher's advice to prioritize entering the workforce and then pursue a master's degree while working. Following the end of my courses, I successfully entered the Android development department at True Sincerity Information and accepted the challenge.

      These experiences have affirmed my passion for programming and my self-learning abilities. They have boosted my self-confidence and influenced my actions.

  • Working Experience and Achievements

    A collection of various experiences and achievements, which can be skipped if you prefer, as the self-introduction has already concluded.

    • Centralize Consultants - Technical Director (Managing 5-8 Team Members) - August 2018 to October 2019

      I joined the company from its inception, and within a year, we went from having no games and backend architecture to completing 15 games, including slot machines, baccarat, and more. In the first four months, the team was still not fully recruited, so the actual development time was just over half a year.

      I led a team to develop game server microservices for various gambling games, including slot machines, jackpot calculations, multiplayer Texas Hold'em, multiplayer baccarat, risk control, and RTP management.

      Since the company lacked a Database Administrator (DBA), I took responsibility for designing NoSQL database schemas and modeling data keys for a Redis cluster.

      While Node.js is single-threaded and processes events with its event loop, it automatically employs C++ for handling asynchronous I/O events using an epoll mathematical model.

      The probability engineer provided algorithm rules, and they used Golang to write verification programs. However, upon receiving the reel data, we rewrote the scoring program in Node.js to optimize the algorithm. The Golang verification program took two minutes to execute ten million times, whereas the optimized Node.js algorithm only needed 25 to 30 seconds, capable of running over 400,000 times per second. The core scoring algorithm was the most CPU-intensive part of the program, but often, there aren't dedicated algorithm engineers to perform these optimizations, leading to bottlenecks in the system.

      We used a Node.js version with C/C++ bindings for WebSockets, allowing one process to handle millions of live WebSocket connections, consuming only 500MB of memory.

      During load testing for slot machine connections, which included interactions with Redis and database transactions, one Node.js process was able to handle 2,000 connections per second, spinning once per second.

      On a standard desktop PC with an Intel i7 processor, 16 cores, and 16GB of RAM, using the PM2 process manager to run 12 processes in a cluster for load balancing, the system could handle up to 24,000 concurrent users. The bottleneck typically occurred when managing Redis clusters and partitioning microservices.

      I had the privilege of learning a lot from Centralize Consultants' CTO, who was a former Google Cluster Project Technical Manager, particularly principles for microservices segmentation and decision-making.

      I left Centralize Consultants due to some high-level political issues and the boss's refusal to pay salaries, ultimately resulting in the company's dissolution.

    • Gama Tech - Software Engineer (Managing 4 Team Members) - May 2017 to November 2018

      A subsidiary of SenaTech, Jama Tech is a gaming company. Currently, I am leading a project focused on developing an API server framework. This initiative involves a significant rewrite, transitioning from C++ to Typescript+KOA2.

      We've been using frameworks like Inversion of Control (IoC) and Dependency Injection (DI) to design this API server. For unit testing, we employ Mocha, while we rely on two different tools, Dredd and Newman, for integration testing. API documentation is composed using Swagger. Automation of our build process is handled by Jenkins, running tests automatically after every Git commit.

      During regular development, we adhere to coding standards and make use of linters like JSLint and TSLint. Typically, when we finish developing a feature, we've already written its corresponding test (currently, the project's test coverage exceeds 90%). We utilize a common framework to enhance the efficiency of developing mock data and test code.

      Upon completion of API development, we also update the Swagger documentation. I've set up Git hooks, so every time I commit, these two types of tests are automatically executed to ensure the code performs as expected.

      Additionally, we have a requirement that test coverage must be higher than 80% to commit code. Failing to meet this criterion forces us to write additional tests. This requirement forms the basis for future refactoring and assures test coverage.

      For end-to-end (e2e) testing, we wait until integration with the frontend, ensuring that only backend modifications impact the frontend when the frontend remains unchanged. We also ensure that everything meets expectations, employing Jenkins for this task.

      Lastly, we conduct stress testing to meet the project's requirements. Upon successful completion of all these tests, we package the project. However, we are still missing Docker technology to guarantee the restoration of the testing database. This aspect will be addressed in the future.

      Whenever a bug is reported or a quality assurance (QA) issue arises, we add scenario tests to ensure the problem does not reoccur, reinforcing our commitment to code quality. We typically use Jira for issue tracking and managing branches on Git, along with merging and other processes.

      Anyone who understands both Java and JavaScript knows the contrast between the two. Before joining this company, I wasn't very familiar with JavaScript. Therefore, I spent roughly a month working on bug fixes. Afterward, I started developing new features, and eventually, I began working on new projects.

      Later, I transitioned to Typescript. It only took about two weeks to get comfortable with it, and I started developing a framework for the team members to use when creating a new API server. I'm open to language transitions and always eager to learn.

    • SYSTEX Information - SoftMobie - Software Engineer - February 2015 to October 2016

      I worked with Jing Cheng Information from 2015 until the end of October 2016. During this period, I was involved in various projects, primarily related to securities. Occasionally, I worked on projects related to music. Since the company was engaged in contract work, we worked on whatever projects the management assigned.

      You can find my blog at:

      https://thaiwu0107.github.io/ThaiWu/

      My GitHub repository is available at:

      https://github.com/thaiwu0107

    • Xing Wang International (Parent Company of GPK's Earliest Origin) - Web Engineer and Customer Activity Planner

      My second job was with an online gaming company, where I initially applied as a web frontend developer responsible for HTML and CSS. The graphic design was provided by the design team, and it was my responsibility to turn these designs into frontend web styles. The designs were then handed over to the backend team for implementation. My primary tasks included creating pages for various activities, the company's homepage, and producing content related to online sports events and gaming.

      Subsequently, due to certain circumstances, I took on additional roles, such as an activity planner and assistant manager for coordinating work and product schedules across various departments, essentially becoming a liaison for the different departments.

      Besides my web development duties, I also coordinated schedules and facilitated communication among departments. This was mainly because web development projects were infrequent, usually occurring during holidays or major sporting events when new activities needed to be created. During downtimes, I was responsible for assisting with these matters while learning and gaining more insights into the gaming industry and event planning.

      Later, the manager of the payment department was set to depart. Given our positive working relationship and mutual trust, he taught me the application process and handling of exceptional cases related to third-party payments in mainland China, as well as other matters concerning payment operations.

      Subsequently, I was also responsible for the company's payment applications and customer service department. I managed issues related to exceptions and developed skills in communication with third-party payment providers in mainland China. These were domains that I had not previously worked in, but I gladly accepted these responsibilities and embraced the opportunities to learn.