7. MadCamp in KAIST (2019-Summer Vacation)


What Is the MadCamp?

From the bulletin board of CSE department web site, there was the post which was collecting the students for the MadCamp in KAIST. MadCamp is the program for the students who don’t know what the programmings for the project is, and let them experience. Also, in the field of conducting projects, cooperation is very important. This program let the participants to experience it too. Thus, it helps the participants have interests toward starting business.
The N1 building in KAIST and rooms no.102, no.103, no.104 were used (picture from

How Many People Are Collected? and Selection Procedure?

A few years ago, MadCamp program was only for the students in KAIST. At then, only 10–20 students can participate in. Nowadays, however, almost 60 students from various university are collected. This program is aimed to gather the students as various as possible such as various personality, various universities, various experiences, and so on. In this order, KAIST, Korea University, Hanyang University, Ehwa Womans University, Toronto University, Melbourne University have been joined.
Applicants should submit a 1-minute video for self-introducing, and fill the forms on Google docs. Questions were as follows below (Not all of the questions because some questions were forgotten).

Q1 : Who are you and where do you belong to?

A1 : This is Jong-Hwan Seo from Korea University Seoul Campus, and I’m in senior grade.

Q2 : Do you have any experience that you proceeded some projects?

A2 : Actually, this is one of my complexes. I only have the experience of term projects like assignment from the major courses.

Q3 : What is your interest?

A3 : Watching Youtube Vidoes, Boxing, Badminton.

Q4 : What do you usually do in your spare time?

A4 : I usually review what I learned from the major courses. Frequently, I search on the Google for finding the things that I don’t know from the courses.

Q5 : Do you have any project that you want to do in this camp?

A5 : I want to know what the Front-End and Back-End. Also if I have a chance, I would like to do the projects which cover both of them.

Q6 : What do you want to learn from this camp?

A6 : The experience of projects, and cooperation by git and github. Especially, how to start and manage projects.

Q7 : What kind of languages can you use?

A7 : I have experiences of using C, C++, python. C is my favorite language.

Q8 : What was your recent programming?

A8 : 1024-bit RSA Simple Version(not using Montgomerry Algorithm)

The Subjects of My Projects in the Camp

Common Stuffs : Git / Github / GitKraken / Slack / TaskWorld
The subject of the projects changes every week.

1) The 1st Week : Common Project

Front-End of Android
Android Studio (Java) / OpenWeatherMap API
This is the app with 3 tabs. The first tab shows contacts information such as name, phone number, email, address, company from the server by getting JSON Object. The users can see the pictures in their internal storage of the phone. In addition, they can open camera app by the camera button. When they take a picture, automatically added on the 2nd tab. By using Wi-fi and GPS sensor, in realtime, the user can catch the local weather where the user is. Weather API from OpenWeatherMap used.

2) The 2nd Week : Common Project

Front-End & Back-End of Android
Android Studio (Java) / Node.js(Javascript) / MongoDB (Atlas) /Multer / Retrofit / Express / Facebook SDK
This app also consists of 3 tabs.To implement the login system, database and server used. On the login screen, the user should type one’s ID and password correctly. If the user doesn’t have an account, account can be made by register button. User’s ID and password is saved on the database, but password is hashed. Thus, the salt value also saved with the hashed password. Besides, if the users don’t want to make their account, they can login with their SNS account: Facebook.The first tab shows the saved contacts on the database. The user can search the other people by their name, email or phone number. Also, the user can add and delete certain contact from database. This app reflect the status of the database in realtime.The second tab is similar to the second tab of 1st Week. The differences are the user can add and delete the picture from server. This function supports realtime service as well.The users can add and edit their plan or diary on the last tab. This tab consists of calendar and the user can pick the date from calendar to write memo. This memos are also on the database with server, so synchronized in realtime between machine and machine.

3) The 3rd Week : New Dawn

Solo&Multi-Shooting Game
Eclipse (Java) / Node.js(Javascript) / Http Communication / / Slick
This game supports both Solo-playing and Multi-playing on the PC environment. Players can beat the enemy and final goal is to make the boss knock down in the Solo-playing. In the Multi-playing, this is not the co-op mode. Multi-playing supports PvP. Players starts with 3 lives in both mode. There are life-up, power-up, temporary shield, key reversing items in the Solo-playing, but not in Multi-playing. Overall theme is avengers, so player character is Iron Man and the boss mob is Thanos. BGM “Avengers — Portals” starts with the execution of the game. Synchronization between two players, server gets the input of each player for some delta-times and spread the inputs to every player per delta-time. Also, collision is detected on each client and the events will be sent to server.

4) The Last Week : Survive

Solo-RPG Game
Unity (C# scripts) / VS Code / Android SDK
This game is 2D Solo-playing RPG Game on the mobile environment. When the player open the app, it starts with the intro-animation scene. Soon, the player can select the button whether start the game or exit the app. When the game starts, player should survive from starving and monster. The condition for the victory is beating the boss “Zombie Chicken”. Player can train the character by leveling up. If the mob is dead, player earns certain exp points. As levels up, the stats : HP, MP, Attack Damage, Attack Speed, Movement Speed increased. The player has two skills. One is stabbing forward with more powerful Attack Damage, the other is replicating the character and make them attack the nearest mob. The boss uses two skill. One is debuffing Attack Speed and Movement Speed of the enemies in certain radius with damaging 30 HP per second. This skill lasts for 3 seconds. The other is summoning 20 random mobs near the boss. Both skills has the idle time for random 5 to 10 seconds.Also, there are 4 basic items which reinforce player’s stats. These items can be combined each other and produce a new item with new properties and former properties.The player should solve the starving by consuming meat from monsters before the starve gauge meets 0. Raw meat fill the gauge very little, so the player needs to cook it on the campfire.There are 20 campfire places on the map, and they are generated randomly when the game starts. To make the fire on the campfire, the player needs a fire wood. This material can be obtained from trees. When the fire on, this lasts for 5 seconds.

What Kind of Issues Did You Experienced?

The view in KAIST from the party place in the 1st week of the camp
Actually, solving bugs were the daily duty when I was proceeding projects. Thus, I cannot remember all of the issues, but some of crucial does.
Common Issues- When I pulled the repository from github, there were a lot of conflicts. This was happened because of lack of the understand of using github. The and using VS code for editing conflicts were my solution.- I didn’t understand the tree of the git quite enough. Thus, I got help from GUI program “Git Kraken” to merge well and restore the old version.
The 1st WeekI didn’t have the concept of the asynchronous function, so when I got the contacts from server by JSON object, it didn’t work well.There were some problems to get permissions from the android app. Because of the order of the asking permission, the app usually terminated. Solved by making the initial activity to get the all of the permissions which were used in the app.To program the weather service, I used GPS sensor, but when the machine was in the building, it didn’t work well. Solved by adding the internet connection when I use the service.
The 2nd WeekThis project was the first trial of making Back-End, so I didn’t know which way to implement Back-End and make connection between Front-End and Back-End. I used Retrofit Library on Android Studio for Front-End, Express Library on Node.js for Back-End.I didn’t have to use schema because of using NoSQL “MongoDB”. However, I had to use the terminal circumstance to check the database, so there was a difficult to recognize the information at a glance. Thus, I used the “Atlas” on MongoDB. This database is working as cloud service, so I didn’t have to store the data on my computer. Also, I can check the collections well because it supports GUI. In addition, the data can be edited (addition, deletion, and setting data type) easily.Uploading the images to server was quite unfamiliar. At the first time, I uploaded the images by using Bitmap, but saving the images as binary form on the database was quite inefficient. Soon, I found the way to upload the images on the server by using “Multer” on Node.js.
The 3rd WeekThe game programming was also the first trial as starting programming. Thus, organizing the classes for OOP was quite difficult. I tried to make them clear with my project mates, but I had difficulties to edit them when I had to change the orientation of the project.Processing collision detection of bullet to kill the monster was not bad, but processing on PvP mode didn’t work well. When the opponent hit by player should lose the life point, but it didn’t. The reason was the timing of collision detection. The bullet was also extending the sprite type which can be collided. Thus, the bullet collided and vanished before affecting player. The solution was adjusting the timing of executing collision detection of bullet.Synchronization between two players were not easy. The idea was server gets the input of each player for every delta-time and spread the inputs to every player per delta-time, but there were so many sending packets. This cause serious lagging. The solution was reducing the packets that server gets. Adjusting sending interval the delta-time to some delta-times makes the game immediate react. Also, removing the logs of movement coordinate from each player per delta-time makes less lagging than before.
The Last WeekThough using unity was easy more than C++ programming to make game, making game pad on the screen to implement on the android mobile was quite difficult.Besides, had to find all of the resources on web sites. There were few open resources, so I used the project mate’s assets which were made by his co-worker designer.The original plan was making online PvP survival game, but we had some difficulties with synchronize the players when we were proceeding the project. There were some factors we had to consider, how to synchonize all of the random movements from monsters were the main problem among them. The idea for the solution was using message queue like StarCraft. Instead of using transmitted coordinates of monsters, we suggested the seed of random values and calculate the coordinates on each client. Also, the seed values were transmitted by message queue. However, we could not make it.Making monster’s state machine and instantiating the world with its components, but they were relatively easy issues more than others.

How Was the Camp?

From this camp, I found the facts that I failed the “Software Maestro” recruitment. If I ever tried programming on some projects, I could have answered some of the questions from interviewers. Because I experienced all of the issues which were asked by interviewers. Though starting a business and programming were not of my businesses , I wanted to prepare many projects, and I hope to get a change to start a business from them. I could plan during summer vacation, and I knew exactly what should I do. A regret from this camp was I think I didn’t do my best because of the hard works. I was really sorry for my project mate and had to pile up my programming skills. From the rest of this summer vacation, I will start to read “Effective Modern C++”, study flutter, conducting game programming from the easiest one, and solve algorithm problems. I felt there are a lot of things to do, I hope to try all of them until this year and post on this blog.