MSc Interactive Digital Media, Trinity College Dublin
JavaScript and Python Fan ♤


My name is Ying. I am a graduate from the School of Computer Science and Statistics in Trinity College Dublin. Before diving into computer science, I studied economic history with full scholarship. I like to explore things with curiosity and logic.

My coding adventure started with the web. I see a future in universal JavaScript, and I love to make web apps that are pleasant to use.



Github  Demo

JSxPiano Web Appclose

JSxPiano is a web app made with HTML5 canvas and the sound library from p5.js. It's a JavaScript coding challenge for fun. You can play midi in modern browsers except IE 11, Opera Mini and Android Browser under 4.4.4, which don't support web audio API. The app only accepts keyboard input at the moment. Mouse and mobile support will be added soon. I also want to replace the triangle oscillator with a web audio tuning library. So stay tuned !

Museum Building Website
Museum Building

Github  Demo

Museum Building
Frontend Web Developmentclose

The website for the Museum Building in Trintiy College Dublin was designed and created by four students (Adrian, Maria, Pavlina and Ying) in two months. I was the lead developer. It features an interactive panorama, lots of beautiful photographs, and video interviews with professors in Trinity College Dublin.

It was a good exercise for front-end web development and responsive design. I became more familiar with the web technologies, including HTML(5), CSS(3), JavaScript, jQuery, JSON, Content Delivery Network and hosting with Github Pages. The challenge was crafting a responsive layout without the help from any popular front-end frameworks such as Bootstrap and Foundation. I also learned a lots about debugging, browser compatibility, web accessibility and performance issues in this project.

Maps for rice sufficiency rates and sugar plantation in Java
Mapping Foodcrops

Thesis  Demo (chinese)

Mapping Rice and Sugar
Data Visualisation with QGISclose

This project stemmed from my first master thesis in Leiden University, where I used inferential statistics to investigate the relation between rice farming, sugar plantation and land rents on Java. The paper was presented at the 17th World Economic History Congress in Kyoto in 2015.

I resorted to QGIS, an open-sourced Geographic Information System to visualise historical statistics that were collected by province in Indonesia between 1910s and 1920s. Historical maps were georeferenced in QGIS first before applying the foodcrops data to create the choropleths. It showed that sugar plantation overlapped with the areas where rice shortage prevailed. Regression analysis further indicated that the concentration of sugar plantation was encouraged by the low land rents in East and Central Java.

I spent two weeks in 2015 to learn QGIS. STATA and R were used at various stages for data analysis and visualisation. The online demo was made with reveal.js.

User interface for the iPaint programme


iPaint Desktop App
Programming in Processingclose

iPaint is a desktop application created with Processing, a programming language similar to Java with simplified syntax. The app provides pen tools in different styles and colours. You can draw straight lines and simple shapes. Circle and rectangle is unfilled by default, which can be filled with the colour of your choice. It provides a colour picker, giving visual feedback when you are hovering over the palette, or when you confirm the selection. You have an eraser to wipe out unwanted stuffs, or start fresh with a blank canvas. Loading image from local computer, and exporting the canvas are also supported.

This was the most enjoyable individual project in the past year. The highly interactive nature of the programme forced me to pay close attention to the call stack and made sure no side effects was emitted from previous interaction. I spent about a week from designing the interface to finish coding. I love this inspiring programming experience!

User interface for the mini blog project


Backend Web Developmentclose

This is an exercise for backend web development written in Python. It features user authentication, URL binding, and manipulation in a database. It is built with Flask, SQLite, Jinja templates and Bootstrap framework. I spent roughly a week on this project. It helped me grasp Django quickly, another Python framework for web development.

The homepage presents a form for user to log in. You can start blogging after you are logged in, and your posts will be saved in a database. You can also check your old entries in the blog, which will not be displayed if you are logged out.

Money Talk

Github  Demo

Money Talk Websiteclose

Money Talk is a Facebook Messenger chatbot that allows user to query account balance, transfer money, and locate nearby ATM on a map. It was built by my fellow coders (Panpan, Mauricio, Jeissie and Julia) using sandbox APIs at the Ulster Bank Hackathon in February 2017. I made a promotional website overnight for the final pitch.

Screenshot for TrinityVR under devlopment


TrinityVR Mobile App
Unity3D Developmentclose

TrinityVR is a mobile app that allows user to navigate in Trinity College Dublin with a cardboard headset. It features realistic texture mapping with panorama, 360 videos and spatialised audios for an immersive experience. The project was developed by 5 students (Adrian, Enda, Hailee, Jill and Ying) in less than 3 months.

The semi-interactive cinematic VR was created with Unity3D Game Engine and GoogleVR SDK. I got a good exposure in C#. I also got the chance to explore ambisonics processing tools like H2n Zoom Recorder, Reaper, and the Facebook 360 Spatial Workstation rendering engine.

Screenshot for the Roller Coaster 3D Animation
Roller Coaster

Github  Demo

Roller Coaster
Blender 3D Animationclose

This 30-second animation is made with Blender, an open-sourced 3D graphics and animation software.

I had no prior experience with animation. This project took me less than a week from start to finish. Modelling was more efficient in Blender than raytracing software such as POV-Ray, but it also takes longer time in the rendering process.

3D modelling of a drum kit
Drum Kit


Drum Kit
POV-Ray 3D Modellingclose

The drum kit is modelled with POV-Ray (The Persistence of Vision Raytracer), a ray-tracing software that produces image from a text-based scene description.

This project gave me a beginner introduction to computer graphics. Besides a quick refresh of Cartesian coordinates and geometric primitives, I also learned about 3D transformation, and how to adjust camera and perspective, setting up three-point lighting in the scene.

I modelled a drum kit for its regularity in shape, which can be created with loops in codes, using only cylinders and spheres. After the modelling was finished, I applied texture mapping to the meshes, and played around with bump mapping, normal mapping, specularity and shading.

I spent about four days on this project, which could be done in less than an hour if Blender was chosen for the modelling task.

arduino circuit on a breadboard to simulate an elevator controller


Electronics Fun with Arduinoclose

SimLift is an elevator simulation project. I used an Arduino micro-controller and an arrange of sensors and electronics to simulate the control of an elevator. Designing an elevator controller is rather complicated in real life, not only for safety considerations, but also because of the demand for optimising travelling and waiting time.

I simplified the movement control with a three-storey elevator model, because I only have two locking buttons as input, while in real life you need at least two sets of buttons for each floor, one set for indicating destination in the car and the other set for travelling request from outside. I combined two locking buttons to get four control options. Three control options were used to indicate at which floor the elevator stopped, and the last option was used to simulate the state when the elevator was traveling, which was achieved with a loop.

I used a buzzer, LEDs and the output of the serial port in Arduinoto to show the current location of the elevator. The tune from the buzzer and message from the serial port was customised for each floor. In the circuit, pull-up resistors for the LEDs and pull-down resistors for the buttons were used to make it more robust. The wires were color-coded, where the black was connected to GND, red and orange for the 5V power, white and yellow for the input pints. It made it easier to read and debug.

I spend one day for this Arduino project.


I speak Cantonese and Mandarin Chinese.
I understand Japanese and Dutch.
I mostly code in Python and JavaScript.

Web Development

Confident - HTML(5), CSS(3), JavaScript(ES6+), SASS, jQuery, Node, Python, SQL
Learning - Vue, React, RxJS, Jest, Mocha, GraphQL, MongoDB
Familiar - Flask, Django, SQLite, Postgres

Data Analysis and Visualisation

Excel, R, Python, D3.js, Plotly, Highcharts, Tableau, STATA, QGIS

Design and Multimedia

Photoshop, Illustrator, Inkscape, Processing, Blender, Unity3D, POV-Ray, Audacity, Cubase, Final Cut Pro


Email: yfeng@tcd.ie