Sunday, September 23, 2018

A 2 Month Research Trip to Osaka: FrontierLab@OsakaU

//Long Post Alert
My 2018 summer has been remarkably challenging and has kept me busy up until the very start of school. This includes my two day stay in Taiwan right after my last final during the Spring 2018 quarter ended, my two month stay in Osaka, Japan, studying rigorous algorithm engineering at the prestigious Osaka University, and a two week stay in Taiwan with my family that consisted of studying and software development that kept me up until roughly 4-5 AM daily. 

Finally, I had a final three week stay in my new apartment in Los Angeles, preparing for Operating Systems and Artificial Intelligence courses. Oh, I also spent time developing my GameMaker project with a team, working on an iOS application with my friend, developing two course curricula for SuperCoding, studying Cracking the Interview and Game Programming in C++, and wrapping up an online Computer Network Fundamentals course on Coursera. Furthermore, I spent around 120 hours in this time span developing my own site from a blank text document (which you can view here), which was an excellent learning experience. 
There has been nothing short of orderly chaos in my life over the last three months, and I cannot get enough of it! This is the kind of challenge I was expecting to go through at some point during my time as a college student. Regardless of the chaos, I must talk about my two month trip to Osaka, and how it has opened my eyes on the many wonderful elements of living in Japan that I have discovered first-hand.

I landed in Japan in the evening of June 17th, and walked straight into a massive earthquake that took place on the morning of the 18th. I was walking to the train station that would take me to Osaka University's orientation, but the train railway bridge above me made the loudest noise as the earthquake happened, and I honestly thought that it would fall and actually crush me. Luckily, it didn't (...). That was my real first 'welcome' to Japan. I lived in Kaohsiung, Taiwan, before moving to UCLA so earthquakes were not that big of a deal, but it was a nice opener.

After that, each day would consist of me researching something I had no clue about - the rotor router mechanism. Everything I found on the Internet pointed me to different directions (like a rotor router, haha), and I was lost for a good amount of time. My fluency in Japan led everyone (EVERYONE) in the lab to speak to me about everything in Japanese. This was fine, but hours of nonstop communication about topics ranging from men and women to computers and networks really trained my brain to process greater amounts of Japanese. 
I eventually got the handle on what the rotor router mechanism was about (which you can read about in my paper here), and started working on a big paper that looked at the benefits and disadvantages of using the mechanism. I was then suddenly bombarded with a midterm presentation report that I had to do in the lab sometime during Week 5 (the next week). Oh, and they wanted me to do it in Japanese - a new challenge that I was ready to take. You can check out the presentation slides here.
Okay, so after week 5, my work started to become more streamlined - I was able to write a lot about everything, and also completed the development of a C++ simulation program that would check the average stabilization period of a bot roaming a set-up graph. I will explain this in layman's term now (look at the graphic below): If we have a little robot exploring a bunch of computers (the circles), and the robot magically locks into a path that repeats forever. My simulation finds out how many steps (A to B is one step) it takes for the robot to lock into that repeating path, and what the average number of steps is over X number of simulations run on the same graph.
The results for one of the two graphs that I investigated (the graph above in this case) can be seen below. In a 2002 paper covering the basics of the rotor router mechanism, the stabilization period was proven to be O(2mD), which equates to 2 * the number of edges * the diameter of the graph. However, there has been no research on the actual stabilization period average for graphs, and this is where the importance of my research and paper comes in. The visual below clearly shows that despite the worst case for the (above) graph being 44, all of the million test cases led to the stabilization period being less than 13, and having an average of 1.25. This may have to do with the number of edges in the graph being high, but it still gives us a good look into the efficiency of the rotor router mechanism as a whole. 

I would love to talk more about the rotor router mechanism in a future post - particularly further enhancements that have been made to the original algorithm, and how using multiple robots at the same time would affect the stabilization period. If you have any questions about the mechanism, my paper, or anything else, definitely comment below or send me an email!

Wednesday, September 19, 2018

New Website & Bank Showdown Updates

Hey everyone! It's been another few months, and a lot of things have happened! I'll be talking about my two month trip to Japan in an upcoming post, but for now, I would like to mention my new website and an update on Bank Showdown.

---Personal Website---

Progress: Complete (for now)
Languages: HTML, CSS, JavaScript

So, I got back to Taiwan after my two month trip to Osaka, and decided that it was time to get serious with everything. Like, really more serious than ever before. I started to work on my own site, but things were pretty slow. Instead of working on my own site (at the time), I decided to focus more on reading a couple textbooks and taking a Computer Network course (that I have completed) on Coursera. A textbook I read some bits of is Game Programming in C++, by USC's Sanjay Madhav, who seems like a really cool dude who knows a ton about SDL and C++. 

Anyways, I got back to LA in early September, got my stuff all set up at my new apartment, and started grinding on the new website for around two and a half weeks. I estimated about 120 hours of research and actual coding, and it took all of my HTML and CSS skills. The JavaScript bit was a bit on the low end, but those special effects and animations are small additions I can make to my site later on. You can actually check the site here. If you have any comments or criticisms, feel free to comment them or shoot me an email. I am not super experienced with site building, especially from a blank document. This is a great opportunity for me to really build up a solid foundation of front end design skills, as (visual) art is a really tough subject for me. 

I'm pretty proud of it, despite many minuses here and there. If only I had more time to make more websites... that would be great. Okay, now let's talk about another project...!

---Bank Showdown---

Progress: Complete (for now)
Language: Python 3.6

So I finished the multiplayer mode for Bank Showdown a couple months ago, and multiplayer is generally pretty easy to program because it simply consists of running a function two times, but with two different parameters, then running a bunch of tests and things to create an effect depending on the choices both players made.

I decided in the past that I would probably make around three difficulties (or two if I was lazy), and today was the day it happened! Easy mode and Normal mode were relatively easy to code, but Hard was a challenge. In fact, it was not really the coding that was difficult for Hard mode, but rather thinking of how a human would outsmart their opponent when playing a game like this. I spent a while drawing all over my huge whiteboard and mapping out potential situations given certain scoring situations, and even made a few more functions and variables to help me obtain data that the other difficulties otherwise wouldn't need. Examples of this include checking the player's previous move history, and the computer's previous move history as well. I tried to find a creative way to write it, and I think it went well in the end. After coming up with a decent algorithm for the AI, the implementation was pretty easy.

This wraps it up for my talk on Bank Showdown and my site. You can check out Bank Showdown here - do give me a star if you end up not being able to beat Hard difficulty in under three tries... or even if you do, I would love a star for the time you've spent on it... haha! Regardless, I had a really great time thinking up of ways the computer can trick the player and make life difficult for them. I hope to make more small to mid scope projects like this in the future.

Let's go Bruins!

Wednesday, June 6, 2018

New Python Projects: Grade Calculator & Bank Showdown

I have been slightly inactive on here over the last 10 weeks because of the rigorous CS180 (Algorithms & Complexity) and LING165B (Syntax II) courses. I have to write a 10+ page single spaced paper on long distance binding on a slightly obsolete Japanese reflexive and come up with lots of reductions for a variety of NP problems. 

Anyways, I have some new scripts to show you all - check them out!

---Grade Calculator----

Language: Python 2/3

I've spent some time developing a nice grade calculator script (in Python 2 and 3) to help calculate some of reach grades I will be attempting to get this quarter.

It takes any number of categories (like Quizzes, Tests, Homework, etc..), and any number of assignments for each categories (Quiz 1, Quiz 2, etc...), and supports weighting (Quiz 20%, Test 30%, Homework 10%, etc.). It was fun playing with lists and not using set functions for certain categories, and instead making a general function that can take any category as a parameter. Check out an image of the output below, and the link to it below the image.

---Bank Showdown---

Language: Python 3 (Still in progress)

I was playing Shin Megami Tensei: Strange Journey Redux and found a mini game in it called 10 Rocks, which I found to be really interesting, tricky, and fun. I decided to implement this on my own using Python 3 and with 2 player multiplayer and changed a few things to make it go from rocks to money (and hence, Bank).

The game runs like the following: You and your opponent start with 5 dollars, and have the goal of reaching 10 dollars. You need to choose one of three moves each turn, and the round ends when both players choose a move. 
  • Move choice 1 is adding a dollar to your balance from the bank. 
  • Move choice 2 is stealing two dollars from the opponent's bank account. 
  • Move choice 3 blocks any stealing attempts from an opponent
    • If the opponent chooses a 2 and you block it, YOU obtain 2 dollars from them!
These rules make it a strategic game that has a strong base allowing for further developments in the future. I used classes and member functions with Python to help make this work, acting as a base for a few things that are still currently on my mind. 

Currently, one can compile the script and play it with a friend, but some features that are currently either unfinished or planned to be added include the following: 
  • Single player mode with multiple AI difficulties
  • Characters to choose from, each one having a unique skill (with cooldowns, hopefully)
  • Ability to change the starting balance and end-game balance amounts.

--- Summer Plans ---

I am going through Week 10 and a bunch of crazy Syntax (II) essays that are making me think about languages from a completely different perspective. After this quarter ends, I will be heading to Japan for two months as an undergraduate research assistant researching parallel and distributed systems and network algorithms at the Graduate School of Information Technology at Osaka University.

After that, I will be heading back to Los Angeles early September to spend some time taking online courses, designing my own games using Unity and GameMaker Studio 1.4, and managing future curricula and the website for SuperCoding Inc (Site). By the way, I am now going to be a partner for the company, which is really exciting; I cannot wait to see what I can do to make SuperCoding even more successful!!

Until my next post, happy coding~

Tuesday, March 20, 2018

Spring Break and Updates #1

Spring break is ahead of me from the tragic Winter Quarter that I have gone through...

My grades have hit a wall... either because I have been taking too many classes (5!) or because my brain has not been set on studying as much as it was when I took CS33.

I'm just going to write about a few things as I look at finishing up my final final (Math 61, Discrete Mathematics) tomorrow.

1. SuperCoding
I have been working really hard as an instructor, teaching three programming / game development different classes every Sunday at SuperCoding ( to teenagers and children. It's really fun, but I am still not used to teaching 6+ hours every week after a long and tough time with linux, discrete math, and impossibly hard syntax (linguistics).
I currently teach three courses - Practical Coding (HTML/CSS & C++), GameMaker Coding 1 (Game Design), and GameMaker Coding 2 (Harder Game Design), and creating three presentations throughout the week plus homework assignments and quizzes is quite the challenge. However, I manage to somehow get it done every week with the cost of my Saturday, or just Saturday night (all night, hehe).
Next quarter, I will be teaching Practical Coding 1 and 2 (2 is Python & JavaScript), GameMaker Coding 1 (again), and GameMaker Coding 3 (Next Step). I'm looking forward to it! Another interesting thing that I have noticed is that the location of the office / place itself is quite far from UCLA - around 20 miles. I do not have a car yet, so that makes travel a bit intense, especially when the traffic is not playing nicely. I will keep you all updated on how this goes. For now, I will be heading back to Taiwan for spring break and look forward to developing some games.

2. Game Development
I realize that I do not have as much time as I thought, especially taking so many classes and working so many jobs/internships at the same time, for game development, so I will be dedicating my spring break working on presentations for the next quarter (for SuperCoding) and also using HTML/CSS/JavaScript to develop mini games. I got a textbook earlier this quarter that I have not really had the time to look at, but will be bringing it back to Taiwan and going hard!

I will also be going through a video tutorial of how to make a turn based RPG game using GameMaker Studio 2.0 and look forward to making my favorite type of a video game a reality. This will be top priority along with the textbook that I will read and analyze, so look forward to some game development news over the next week or two.

If I somehow have time outside of these two big goals, I will spend it playing games and working on Trials of Rice and learning how to use Unity. I already understand C# relatively well, compared to the past, and have had experience playing with Unity, so it seems like something that is doable! Spring break is the perfect time to get a jump start on these things, so I will be getting to it!

Well I have plenty more things I want to talk about and work on, but I will leave those things for another time. In the mean time, hopefully my finals end well, haha...

Bonus End

$ touch goodbye.txt && vim goodbye.txt
i Goodbye and see you next time! :wq
$ cat goodbye.txt
Goodbye and see you next time!

Wednesday, January 24, 2018

Bi-Monthly Newsletter Announcement!

Hi everyone, it's been a while!

I was busy during my first quarter as a sophomore at UCLA, primarily because of the insane workload CS33 (computer microarchitecture) I had to deal with weekly, but I have some news.


I attended a Game Fair at UCLA early on in the quarter and presented Trials of Rice to a group of people, which was really cool! Everyone seemed to be pretty interested in it, which has given me more motivation to work on ToR and make it awesome.

A Bi-Monthly Newsletter will be sent out now, starting with the first volume, February-March, within the next couple weeks, and will discuss how ToR has been developing, with links to music tracks on Soundcloud and details about the story and characters. I will also be posting these newsletters on this site, in the new 'Newsletters' page!

I am currently taking five courses at UCLA this quarter (including the dreadful CS35L), which means that time is going to be a bit of a problem again, however, I have decided that this project needs some serious progress, and a newsletter would be the best way to set things straight!

Message me if you have any questions...
I would love to have a chat with anyone interested in learning more about ToR!

Until next time,

Sunday, September 10, 2017

C++ Projects Page Updated!

Hey, I'm back!

After spending time working on my Resume: Project Works document, I've decided give the C++ Projects page a revamp with a list of the projects I have worked on and their summaries, concepts used, and details found in them. The majority of projects are games, however there are some non-game projects that are on there. I plan on working on some games before Fall Quarter starts for me to get back into the coding groove, and think that a few non-game projects could be a splendid idea as well.

Check it out when you have time, as the page is listed on the top of this blog! I will be providing more status updates regarding my C++ projects as time goes on.

Wednesday, August 23, 2017

Video Game Music (2017) Official Release

Hello, it's certainly been a while since our most recent post!
Today, we will go over a brand new release in the music department!

Video Game Music
Release Date: August 21st, 2017
Tracks: 10 || Price: $4 (or more)
Links: itch.ioBandcamp

Video Game Music (2017) is an album featuring 10 tracks that can be used in commercial video game projects, and is now available on Bandcamp! The official description can be found below, and an embedded music player can be used to listen to all of the tracks:

Video Game Music is a album consisting of various tracks that have been written to sound like what you would hear in a game! Actually, I have been working on my own projects recently and compose the music for them, but have yet to even post a single project online.

So the music ends up going nowhere... I borrow some elements for my video game-esque music from JRPGs because they certainly are my favorite game genre. So what does that mean? Mixing violins and pianos with drums, utilizing organs, harpsichords, and the electric base to create some thrilling rhythms to go alongside the melodic flutes and violins, and some play with electronic keyboards/instruments, special effects, and even some African percussion!

Some pieces are meant to be battle pieces, while others are dungeons or the field. Let's have some video game music fun!