Phil Goo Kang Portfolio
Email : philgookang@gmail.com Phone Number : 010-9126-0221
Github : github.com/philgookang Resume : resume.philgookang.com
NameTibero Multi-Layer Disaster Recovery Server (Standby Cascade)
CompanyTmax
Duration2020-09-10 ~ 2021-02-24
Environment

Ubuntu 18, Docker
C, Shell

Details Tibero RDBMS uses 9 seperate process called LNW to send changes occured on the database to a secondary disaster recovery server called Standby.

The problem with this method is that their is a maximum of 9 processes and puts a drain on the performance of the main database. To solve this issue, I enabled the Standby server to be able to process the received data, as well as, pass on the data to the next Standby server waiting in line.



(a) Tibero limited secondary disaster recovery server architecture
(b) Tibero using Standby Cascade which enabled secondary disaster recovery
server to send to other disaster recovery servers

This method enables a variety of use cases. The most basic would be used as a second standby server when the primary database server goes down. However, they can also be used as a read-only server, archiving server, testing server, and many more.


(a) Tibero Primary(main) database can connect to Standby via sync/async protocol
(b) Tibero using Standby Cascade can use sync/async protocol on the first
layer but cannot on the next layer due to delays

One large limitation of using Standby Cascade is the data sync protocol. On the first layer (Primary -> Standby) both sync and async works because Primary db generated all the information and the delay for primary having to wait for standby is minimal.

However, once several layers of Standby Cascade nodes are connected, the amount of time primary needs to wait exponentially increases. Therefore, I developed the connection to only accept async protocols. This in turn created cracks in data because of the delay in being updated. To solve this issue, a separate project was undertaken.
NameDetecting Parts of Speech from Image for Caption Generation Using Deep Learning Models
CompanySeoul National University (서울대학교 인터넷 데이터베이스 연구실)
Duration2018-10-14 ~ 2019-10-15 (12 Months)
Environment

Ubuntu 18, Anaconda
Python 3, Pytorch, NLTK, CUDA, 4 Titan Xp GPU Devices

Github

https://github.com/philgookang/pcr

Survey Results

https://bit.ly/2MfbAGj

발표자료

https://bit.ly/2rjCdD1

Details The capability to generate a description about the content of an image is becoming more important with the integration of smart devices and reliance on AI into our daily lives. In this research, I propose a novel approach that utilizes multiple Convolutional Neural Network(CNN) models that have been specially trained to detect features related to the Parts of Speech(PoS) such as noun, verb, pronoun, adjective, preposition, and conjunction. Using the PoS based CNN models, I extract features that the Long-Short Term Memory (LSTM) model uses to generate image captions. I validated my finds by using MSCOCO dataset through two different human surveys and several text metrics such as BLEU, ROUGE, CIDEr, and SPICE.

A overview of our model

To check if our Parts of Speech based CNN Models can detect Parts of Speech related features, we test our model through object detection. We use our Parts of Speech CNN Models to detect different objects in the image and mark the activated regions of the Convolution Layer by using a Grad-CAM Heat Map. The following images are examples for the Adjective CNN Model and the Verb CNN Model.

(Left) Original input image with the caption that our model made. (Center)Grad-CAM Heat Map.
(Right) Overlay of the Grad-CAM Heat Map and the input image with the word detected by our Adjective Model.

(Left) Original input image with the caption that our model made. (Center)Grad-CAM Heat Map.
(Right) Overlay of the Grad-CAM Heat Map and the input image with the word detected by our Verb Model.

Example captions generated by our model with the best results

Example captions generated by our model with some errors
NameInterior Based Social Networking Service and Online Commerce Server Development
CompanyJibggumigi (집꾸미기)
Duration2016-03-01 ~ 2017-03-01 (12 Months)
PositionDev Team Leader & Server Developer
Environment

Amazon EC2, RDS MySQL, Route 53, S3, Cloudfront CDN
Apache2, PHP, Codeigniter, CRON, Shell Script

Details Service Introduction
Jibggumigi is an online house interior magazine service that tags all furniture within the images of the magazine enabling the customer to view details about the furniture, links to any magazine with the same furniture, and also instantly purchase the furniture just by clicking the tag. This service is available for all platforms: web and mobile applications.

How I Designed the Server Architecture
Jibggumigi Facebook and Instagram page had over 750,000 followers thus resulting in large traffic on the webserver. Moreover, whenever our magazine went on Kakao Channel or Naver News, massive amounts of traffic occurred on our site. To handle the massive traffic, I distributed the connections onto 10 EC2 instances using a load balancer. To prevent the database from being overloaded, a Master-Slave architecture was utalized and also all queries results were cached to several Redis servers which also had a load balancer. All reading SQL queries were sent to the slave databases using Round Robin. All write related SQL queries were sent to the master database. User sessions and data within the sessions were placed in a separate Redis server what was designed has the session cache. An additional set of EC2 servers were generated for scheduling backup, push/email/sms notifications, and analytics. When accessing the web server, the database, or any of the internal production components, I implemented a 'gateway server'. The purpose of the gateway server is to limit access to any of the production components. The gateway server uses only internal private IP addresses to connect to each component and only the gateway server is accessible vis ssh publicly. An overview of the server architecture is available below.

The server architecture for Jibggumigi

Parse every SQL and send read sql to slave and write sql to master
NameBeep! Enable Any Smart Device To Because A Credit-Card Reader
CompanySK플래닛
Duration2012-09-06 ~ 2014-03-29 (17 Months)
PositionServer & API Developer
Environment

Amazon EC2, RDS MySQL
Apache2, PHP, Codeigniter

News Article

https://goo.gl/GNv9gt

Details Service Introduction
Smartphone has been quickly adopted into Korea. We wanted to use the processing power of the smartphone and reduce the load for delivery men and small food store owners. Beep! is a purchasing platform that enables smartphones to process all credit cards purchases through NFC or attach a dongle removing the need to carry or buy a heavy card reading device.

How I Designed the Server Architecture
My responsibility for this service was to develop the API and manage the server and the database. This service was built on Amazon AWS services. The webserver API was developed using PHP with Codeigniter as the based framework. The database was built on Amazon RDS MySQL instance. We used a dedicated network line to connect to the VAN(PG) company to request purchases.

Front page of the Beep! service

A screen shot of the iPad application of Beep!

Back-end Structure of Beep!
NameTium Tium: Battle With Elements Game Application
CompanySamsung Software Membership (삼성전자 소프트웨어 멤버십)
Duration2012-03-02 ~ 2012-05-07 (2.5 months)
PositionApp Developer
EnvironmentWindows 7, Bada SDK
Bada IDE, Visual Studio
C++, Cocos2d-x, OpenAL
Details Game Introduction
This game introduced a Radish that was born to stop the elements of nature from destroying the entire planet. Using the same interface that Super Mario uses, the user fights against the different types of enemy elements that appear on the screen.

Developing Process
This game was developed using Cocos2d-x on the Bada OS smartphone. Using tile mapping, I designed each level, the floor and the movement of the player. This game was registered to Samsung Young & Smart App competition and received 3rd place.

Game characters from player, minions, and boss

Tile mapping concept

Actual tile map used in the game


Compressing Image Resources
To reduce file size and count, all the images were combined into one large image with the location of each image save in a seperate config file. The large image would only be loaded once and reused over and over again-reducing loading time.

Sprite sheet containing the images used in the app

Samsung App Store Screen Shot

Samsung Young & Smart Mobile App Competition Certificate
NameTest Case Tool Using PDF Reading
CompanySamsung Software Membership (삼성전자 소프트웨어 멤버십)
Duration2011-12-05 ~ 2012-02-15 (2.5 months)
PositionPDF Viewer Developer
EnvironmentWindows 7, WinForm, PDFLib.net Library, Office Winwork Library
Visual Studio IDE, SQLite, C#
Details Program Introduction
This program, called Chaser, decodes a PDF file and presents the PDF file using a custom viewer with all the test cases within the file highlighted and record in the Test Case tab. For any test case not detected, the user can highlight the text and add it to the Test Case List. Whenever a test case is complete, the user can mark it as complete. Also, when the file is updated with additional test cases, the program will detect the new test case and also detect delete old test cases.

Developing Process
Due to the patient on PDF reading, there was no available library to decode the PDF file in winform, therefore, it required us to build every component of the program. My responsibility was to create the PDF viewer. Since there are no libraries that decode a PDF file as a viewer, the approach I used was to convert all the pages of the PDF into an image and use an image viewer to mimic the PDF reader. However, an issue with this approach was that we were unable to have the user interact with the content of the image. Therefore, we tracked the movement of the mouse and the down and up click and drew a blue selection box to represent the area the user has selected. Because we are using an image viewer, I also added a lazy loading feature that would reduce the memory required and make the program more responsive.

Chaser Program Screen Shot

Code to calucate the selection of the user and draw a 'selection blue box'

Chaser program main screen with section explaination

Toolbar and Test Case List(tab) Explaination

Linking a preexisting Test Case

Revision Screen: compare changes between an updated document
NameAltroid: Space Battle Game Application
CompanySamsung Software Membership (삼성전자 소프트웨어 멤버십)
Duration2011-02-02 ~ 2011-05-30
PositionApp Developer
EnvironmentiOS, Objective C, OpenGL ES, Cocos2d
Xcode, Photoshop CS, GarageBand, CFXR
Youtube

https://bit.ly/2rfSGbj

Details This game is a single shooter game with three levels. Developed on iOS, the player uses a joystick to maneuver and shoot the enemy planes. For this project, I planned, designed, and developed the entire application.

System Structure of Altroid

I developed a custom joystick library class that will enable the user to freely control their airplane. The library uses the following attributes and functions to generate the virtual joystick.

Screen Shot of the Joystick Structure & Ussage

Object (Enemy) Motion Algorithm
A smartphone screen is a 2-dimensional plane that gives enemy objects a x and y coordinate moves them in a linear motion. However, simple linear motion is easy to predict for the user and offers a low gaming experience. To give a naturalistic motion and better gaming experience, all motions used the Law of Sine and Cosine. When using Sine and Cosine, the motion was limited to Sine(0~2pi) and cosine (1~2pi) limiting the motion between pi and 2pi.
Therefore, to solve the issues with the limits of Sine and Cosine, I utilized the Beizer Curve (BC) and High Order Curve (HOC) which uses the time domain to generate a smooth curve trajectory. The Bernstein Polynomial Formula was used to calculate the BC and HOC for the moving objects as seen in the images below.

An example showing the Beizer & High Order Curve from the formula to the implementation

Multiple Game Screen Shots