I've always been interested in electronic projects from a young age, and programming projects extend nicely from there. I'm always keen to try out new technologies, and see what I can build from them. Every technical project involves problem solving - which I enjoy. As a person with interests in many things technology, I have a varied array of projects under my belt - not just limited to software development. So here's just a collection of projects I would like to share.
Having originally started development on this website in December 2021, I have been continually updating it as I've learned more techniques in frontend developement, such as a move from Single Page Application (SPA) design to Multi Page Application (MPA) design with Static Site Generation (SSG), using my own technique with Webpack. The project was set up to be easy to maintain and update. Details and explanation regarding the configurations I used for the project can be viewed in its repository.
Built as the final project for CS3216 Software Product Engineering for Digital Markets. Launched in Fall 2022.
I got into 3d printing as a hobby as I found the ability to fabricate parts at home exciting, and useful for electronic projects. I also liked the idea that a hobbyist like myself could harness such seemingly cutting-edge technology, thanks to the open-source nature of the 3d printing community. I first started in 2017, when I built a cheap 3d printer out of parts from China to minimise cost. Since then, I've honed my ability to debug the myriad of errors that 3d printers can encounter and how to fix them to get great prints. Addtionally I've also done some 3d modelling in Autodesk Fusion360 to make my own parts for projects. Now I'm using a printer that is considerably better than the one i first started with, upgraded with custom components to enhance print quality. I've also marketed 3d printing services, which has almost entirely eliminated the financial cost of the hobby.
This project was born from the desire to make the simple remote-controlled appliances in my room like the fan, lights and air-conditioning 'smart' (an example would be turning on the lights at a specific time of day). The main problem I faced stemmed from the fact that these devices were not designed to be 'smart', hence to interface the applicances with my Raspberry Pi (the control hub), I had to wire up their remote controls to the GPIO outputs of the Pi, and write python programs that triggered the right output (with correct timing of 'button presses') depending on the action wanted. With the Raspberry Pi as a backend server, I later built a simple android app to control the devices through my phone (to use as my unified remote control for all appliances), and also incorporated voice control through the Alexa Skills Kit (ASK).
This was a project I undertook for a sustainability module I took in the National University of Singapore (NUS), GEH1074. It was designed to be a solution to the problem of food wastage by hostel residents who left food till expiry in hostel fridges, either by forgetting or not being able to finish their food. A Telegram bot was chosen as Telegram is an application used by pretty much everyone in NUS, thus reducing the onboarding process. Fridge view bot provided students with a convenient platform to log the food they placed in the refrigerators, and put their items up for sharing in the bot when they were nearing expiry and they could not finish them. Fridge view bot also sent reminders to students as their items neared expiry. One problem faced in implemenation was how to allow other people to know where a shared item was in the fridge. A simple solution I came up with was to incorporate storing of images of the locations of the items in the fridge on the backend server, and sending the image to a user corresponding to the item being retrieved by that user.
This was a fun mini-project I undertook as I was trying out Harvard's CS50 Game Development course. I was interested in the complexities of implementing a multiplayer game (which I discovered were immense as I researched for the project). I settled on a simple setup whereby one player would be the server and the other the client. The game would essentially run on the server machine, and deliver and receive data from the client via UDP packets. The game was designed to be able to handle lost packets as long as not too many were lost. Upon playing the finished game, an acceptable framerate of around 40-60 fps with little choppiness being observed on the client's computer. While the premise of the project, the game pong, is extremely simple, by simply trying to make a multiplayer version, it became a lot more complex and exposed me to some of challenges faced in multiplayer game development, like handling packet delays/losses, interpolation etc. It was also pretty fun to play the finished product with a friend!