I am currently doing my Internship at PSA Corporation as a Product Engineer Intern.
I have a keen interest on Full-stack Enterprise Development and have been learning
about it since the second year of my study.
Personally, I feel that technology has played a huge role in the advancement of today's
society
in
every aspect (and still continue to!), and
I wish to be part of the driving force to spread awareness and empower people by leveraging
technology.
Interests
Web Development
I have the most experience in Java Enterprise Edition (EE) platform with JavaServer Faces (JSF)
and AngularTS as the server-side and client-side framework respectively.
Presently, I am exploring more on development in a full JavaScript environment (nodeJS,
expressJS and React),
and I would LOVE to talk more about it.
My next interest to learn more on is on .NET framework, seeing that it is one of the most
popular framework in Singapore, but that's something for the future :)
Computer Network and Security
Ever since my diploma education (Business Information Technology), I have always been passionate
about Information Security and Networking.
Web development do not require much prerequisite on networking, but having an understanding of
the lower level socket programming and
it's underlying protocols allowed me to appreciate how things work.
On the other hand, security measures are required to enforce the Confidentiality, Integrity and
Availability of information.
Always excited to discuss on information security management topics!
Portfolio
Some of the projects that I've worked on during my school.
CoolBins
Smart Waste Management System
SDGKMS
Knowledge Management System
SaveSave
Interest Rates Optimiser
Shoeper Market
Full Stack Web Development Project
Crowd Funder
Database Project
Merlion Car Rental
My First Java EE Project
Edu-tainment System
Temasek Polytechnic's Final Year
Project
Want to know more?
Have a quick chat with me on any of the links!
CoolBins
Smart Waste Management Project
This was one of the most memorable project I've had as it is an Internet-of-Things (IoT) project. Disposal of garbage is
a highly important task that unfortunately, nobody likes to do. Hence, CoolBins aim to simplify the unpleasant experience of
dealing with rubbish.
The Smart Waste Management's architecture consist of 3 layers:
Plant (Physical location of our bins with the sensors and motors in it)
Fog Processor
Cloud Server
At the Plant layer, the bin is equiped with multiple Microbits with different sensors. The Microbits communicates with each other via
radio wave, and there is a central Microbit that sends the bin's data upstream to the RaspBerry Pi (Fog Processor) via serial over usb communication. Similarly, the
central Microbit receives information from the RaspBerry Pi and propagate it to the rest via radio signal.
Secondly, at the Fog Processor layer, the RaspBerry Pi is able to display the current information of it's own Bin on its own's onboard LED display for users to view the status. On top of that,
it will send it's information up to the Cloud Server via Message Queuing Telemetry Transport (MQTT).
Lastly, the Cloud Server runs on a lightweight Flask Application that is able to display the statuses of all the CoolBins at the different location in a dashboard.
It also feature a floorplan where it shows a heatmap of the usage of the bins to allow the management users to better plan the cleaning schedule and placement of bins in popular spots.
Check out this short video demo of CoolBins in action!
The SDGKMS enable users to kickstart their social project to achieve any of the 17 SDGs, as well as developing a portfolio page for their
institution and/or personal page. In a typical project, project owner may require additional resources to sustain their project, which may be offered
by other individuals or institutions at a cost or even for free.
The recommendation algorithm developed by the team helps to match resource requests to
relevant offers by a series of keyword matching and the availability, reducing the effort required for project owners to manually seek donors. Additional,
a reward and leaderboard systems helps to motivate more users to contribute to different resources and projects.
SDGKMS features a data mapping utility, where administrators can use of web scrapping tools to scrape for social entreprenuers' basic information into an excel spreadsheet to import into the system.
Based on the imported information, the SDGKMS will automate the profile creation process for these social entreprenuers and send an invitation email to them to activate their account.
SDGKMS also follows a Freemium Model, where basic services (limited search, profile views) are provided to every users. At a small costs, users get to upgrade their
account to premium users and they get to enjoy unlimited access to other users' projects and portfolio.
The SDGKMS consists of an Angular Web Application, an Ionic Mobile Application with Jakarta Enterprise Edition (EE) as the common backend service.
The Jakarta EE service was built and ran by Maven and deployed onto our local GlassFish server with mySQL.
Java Persistence API (JPA) was the Object-Relationship Mapping (ORM) technology used to map the Jakarta EE entities with the mySQL records.
Additionally, other services such as Java Cryptography API (for Role-Based Access Control), Enterprise JavaBeans (EJB) Timers , PayPal Payment API, etc were utilised.
In this project, every member is a full stack developer. We handled from backend logic to frontend UI/UX for our individual modules.
I wrote the application logic on our Enterprise SessionBean Layer and exposed them via RESTful APIs on the Jakarta EE Application for the Angular and Ionic Application to call.
My key focus areas were: Project Management module such as the Creation, Read, Update, Deletion (CRUD) of projects, Management of team members
in a project, Key Performance Index (KPI) management, Resource Offers Management and the Freemium Model. Fortunately, the concept of the two-way data model,
writing service classes for the angular components to call were familiar with me as I have had prior experience with Angular.
On the other hand, it took me slightly longer to design the Ionic mobile app, as I had lesser experience with working with Ionic. Working with Ionic is also slightly
trickier as the native design for iOS and Android were different, which meant that certain design may not work as intended for the other OS. Fortunately, I had wonderful
groupmates who helped one another that led to the successful implemention of our project.
Lastly, as part of the testing requirement, I used JUnit as the testing framework, and wrote test cases to assert the Jakarta EE's Session Beans to ensure that the backend programming
implementations are written correctly such as: exceptions thrown properly when validation fails, expected results returned when cases passes, etc.
For more information about this project, feel free to check out the project showcase page here! Thanks to everybody's
dedication to the project, we even achieved 3rd in place for the popularity votes during the showcase session!
Keywords: Jakarta EE, Angular, Ionic, JPA, MySQL, JUnit, Knowledge Management System
SaveSave
Interest Rate Optimiser
I spent my summer interning as a Front End Web Developer at NUS FinTech Lab. SaveSave
was
a Financial Technology (FinTech) web application that provide users with spending
recommendations
for their bank accounts by analysing their bank statements.
The tech stack chosen for this project was ReactJS for it's frontend web
framework,
nodeJS/expressJS as
the backend logic, and the relational database was hosted on the cloud by
Microsoft
SQL Server.
In this project, I made use of the React State Management and the browser's local
storage heavily to
store insensitive information about our user. Additionally, React props were used to
in page routing in order to
push information from a page to another.
Although my official job title was Front End Web Developer, I implemented password
salt and hashing for the
backend logic and also in the database scheme.
I also performed network engineer roles by configuring the
Virtual Machine to connect to the Ubuntu Server from the School of Computing. I
setup
Nginx Web Server to host SaveSave's
webpage and configured Nginx to act as a reverse proxy to handle any RESTful
api calls.
As this was a project for the NUS FinTech Lab, I can only give a brief description on it's setup
feel free to PM me to discuss more about React and other FinTech applications!
Keywords: ReactJS, NodeJS, Microsoft SQL, Ubuntu 16.4, Nginx
Shoeper Market
Full Stack Web Development
Shoeper Market was a project done for my software development module (IS3106), where
my groupmates and I
built an online platform for shoe lovers to buy/sell their shoes.
Shoeper Market is a multi-tier (3-tier) architecture application which consist of
the Data, Logic and Presentation tier.
The data tier runs on mySQL, the logic tier runs on Java Enterprise Edition (J2EE),
and the presentation tier runs on JavaServer Faces (JSF) and AngularTS.
Java Persistence API (JPA) was utilised as an Object-Relational Mapping (ORM) to
manage persistence and interaction between the server and database.
Shoeper Marketplace (the customer facing web app) was built on AngularTS while
Shoeper Market (the admin and vendor management portal) was built on JSF.
Both frameworks followed the Model-View-ViewModel (MVVM) framework, whereby
managedBeans and typescript objects were used in the JSF and AngularTS framework
respectively.
I wrote RESTful Web Services using J2EE's JAX-RS to handle incoming HTTP requests
from the Shoeper Marketplace and to send the appropriate
outgoing HTTP responses. For Shoeper Market, the managedBean's dependency injection
helped to call the logic that were in the EJB layer.
Login Page for customers (AngularTS)
SignUp Page for customers (AngularTS)
Reset Password for customers (AngularTS)
Editing Profile for customers (AngularTS)
Landing Page [Admin/ Shoe Vendors have different dashboard view]
(JSF)
Vendor checking shoe stocks level (JSF)
Internal staff managing restock requests (JSF)
Vendor credit management and sales performance tracking
Keywords: Java Enterprise Edition, JPA, Java Server Faces, AngularTS
Crowd Funder
Database Project
Crowd Funder was another school project that focused more on database management.
The objective of this system was to provide a platform for users to host their
events
and to have other users support them by 'funding' them.
The main technology stack used were HTML/PHP/PostgreSQL, and they were hosted using XAMPP. Since this
project was focused on
database management, more emphasis were placed on writing PostgreSQL triggers and
designing the Entity Relationship (ER) Diagram.
A Trigger is a special kind of stored procedure that triggers upon an
occurance of any CRUD operations.
On the other hand, while designing the ER diagram, a huge focus was on enfocing the
relationships (One-to-one/ One-To-Many/ Many-To-Many)
and the particiation contraints (Total/Partial).
While users can create/fund projects, there are also admins managing the system
(ban/suspend projects and users),
and triggers were used to enforce constraints such as ensuring that a user is not
banned, a project has must have a minimum
number of goals to reach, etc.
*Note: Since this was focused on DMBS, there was minimal weightage on
UI/UX, hence I spent more time on the backend over the UI.
ER Diagram
One example of complex query: 'Find my top fan'
Another example of complex query: 'People with similar interests'
Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!
Date: August - November 2019
dasd: PHP, asd
Merlion Car Rental
First Java EE Project
This was my first experience working with Java EE. The main focus on this
application was to get familiar with working
with the Enterprise JavaBeans (EJBs) for logic processing, the difference between
stateless/stateful/singleton session beans,
when to use the different states and the javabeans convention for getter/setter.
Additionally, bean validations were used to enforce the correct data format of given
input.
In this application, Merlion Car Rental simulated a car rental system that allocates
available rental cars to users
at their desired location, and also for Merlion Car Rental's staffs to transport the
car over to the location if it was unavailable at that particular pickup point.
Since the main objective of this project was to focus on Java EE's capabilities, the
only 'UI' is a system log on the terminal that parse
user's inputs for their choice selections.
Class Diagram
Entity Diagram
Screenshot of terminal UI: Entrance 'page'
Screenshot of terminal UI: Viewing the different car rental rates
Together with Aventis School of Management, my groupmates and I built an Edutainment
(Education + Entertainment)
system.
This project was built mainly on HTML5/PHP and mySQL database. The system was split
into 2: Front End for students to view learning materials and
a backend content management system for administrators to upload new videos.
Other than designing the UI in the Front End, my main scopes included: Designing the
'recommended video' feature, Login Page, and Comment Section for each videos.