I wrote a bot to play solitaire on messenger. Before you ask -- NO, it does not use any form of machine learning.
The core principle of the algorithm is simple. Based on the current state (and the current state only), a list of actions with preference is given. Execute the one with the highest preference. Keep doing this unil the program achieves a fixed point. While it is not guranteed that the program wins all games, well designed rules and state space ensure that the execution always terminate.
The point of the bot IS NOT to win the game all the time. It is, rather, to win enough times to humuliate human scores.
The bot was written in in a mix of Java and C++. Java is used for it's genericity with the Robot Class. Most of the image processing and all of algorithm is implemented. The bridge between the languages is done using JNI. Click here for a demo and Click here for the source code
April 2017 - September 2017
I was a software engineer intern in London, United Kingdom.
I worked on distributed systems, compilers and task parallelisation at Jane Street. I written primarily OCaml during my time here and have become adapted in functional programming and type systems. Some of my work included performance patches to the OCaml compiler's optimizing pass, Flambda.
This bot plays Basketball FFVR, otherwise known as the Facebook messenger basketball game, automatically, destroying even the best human high scores. The bot treats the game as a blackbox, essentially playing the game simply by moving the mouse as a human would to control the ball's projection.
I worked on this project in a ski trip when I grew frustrated from the inability to beat my friend's high score (165 points), after trying for over three days. The bot's gameplay is based on simple physics laws. Click here for a video demo. The source code is available in github.
January - April 2017
Along with the Imperial College Robotics Society, I have participated in the UK round of Eurobot 2017. I worked on the computer vision, localization and motor controller algorithms of the robot.
June 2016 - September 2016
I was a software engineer intern in Google, Mountain View CA, United States.
I Worked on pytype, a python type inference and static analysis tool. My main contribution was integrating pytype with an internal code review tool to facilitate the company's transition to typed python.
My work helped discovered bugs in several projects and was adapted by several teams, including the python team and borg , google's cluster manager.
January - March 2016
I wrote a C-compiler, from scratch, in C, targeting the MIPS 1 architecture. My compiler supported a turing-complete subset of C operations, namely:
RAMEAR is a project heavily based on GSMem [Mordechai Guri et al] . In this project, we program an air-gapped computer (a computer that is not connected to the external world via any means, including ethernet, bluetooth, wifi etc.) using the memory bus as an antenna, to transmit data to a signal receiver. This is achieved by periodically bombarding the memory bus to denote a HIGH BIT and using the average environment noise as a LOW BIT.
I worked on this project with 3 others in PennApps Spring 2016, one of the largest student-run hackathon in the world. Our project won the grand prize in the hackathon.
June - August 2015
I worked on a hosting company classification project. My tasks mainly comprises of writing tools to partially automate data classification and designing and implementing features to aid manual data classification. I wrote Perl, bash and PHP extensively in this internship.
Fishotron is a computer-vision based application that measures the size of a fish using chilli tags and a mobile phone.
The implemention is based on a combination of OpenCV and chillitags' project from EPFL, along with custom statistical anomaly detection and shape fitting algorithms.
I worked on this project with Tom Hartley in Fishackathon 2015, sponsored by the State Department of the United States. Our project won the global hackathon organized in over 10 cities throughout the world.
The application takes a real-time camera feed and adjusts a custom-made focal knob to get a a focused image to be. The video was a pure FPGA-based passive autofocus application. The control flow logic was implemented using a C++ based HLS tool and some latency-sensitive blocks using verilog. The algorithm is a heuristic search for the peak of the graph that maximizes the number of edges in the resultant image.
I worked on this project with a coursemate as part of our First Year Project. We were awarded the best first year project prize.
I worked on a web-based simulation (in addition to simulation in a few other languages) of the water-pouring problem to demonstrate Breadth-first search and euclid's extended algorithm. This project was used in one of the Malaysia Computing Olympiad training camp to demonstrated the mentioned algorithms.