Software developer from Toronto. I enjoy security, mobile dev, under-the-hood type work, or just working on cool products.

You can find my CV here or learn more about me on github, twitter, linkedin.

Blog Posts


  • Kikiki (2017)

    HTML5 Multiplayer game using Node.js, Socket.io, Protocol Buffers, and Phaser game engine. This is my first gamedev project. The physics and collision is mostly done on the server-side. It uses client-side entity interpolation for player movement and projectiles to compensate for lag.

  • Bard (2016)

    Native iOS and Android app for mixing people's words to create funny mashups. They both depend on a Node.js based EC2 pipeline that cuts videos into word segmented mp4 videos using speech-to-text, and the segments would then later on be re-assembled on the mobile clients. LRU cache is used on the clients to minimize bandwidth. The Swift app uses AVFoundation to stitch video segments natively, while the Android uses Exoplayer to display the merge preview (which is faster than ffmpeg on android), and uses a AWS Lambda function to do the final merge if needed.

  • ViewInspect (2015)

    This is a developer tool that makes it easier to get familiar with new codebases. It embeds the source file location (whether its server/client rendered) of a DOM element in the data-attribute, which allows to quickly determine which part of code is responsible for rendering a particular UI element. A variety of methods is used depending on the templating library used - monkey patching compiler/parser, intercepting DOM insertion APIs and looking at callstack, stubbing out non-html entities and then using HTML parser to determine and add file:line information of each node

  • Riversub.cc (2013)

    Crowdsourced subtitling platform via youtube, niconico (ニコニコ動画), vimeo and naver. It has a built-in hybrid SPA-based subtitle editor using Backbone.js, jQuery, with Ruby on Rails on the backend. Also wrote Chrome extensions in order to integrate with 3rd party video players.