I am Paul Tan, a computer engineer from Singapore. My specialties are in computer graphics and the design and implementation of programming languages. I enjoy programming, and have worked on a large variety of projects and technologies. I try to keep a blog on my progress.
I have a bachelor's degree in Computer Engineering from the National University of Singapore.
I've done web dev (2 years), computer graphics (2 years), compilers (2 years), embedded systems (1 year). See my Projects List for more details.
- 10,000+ lines written: C, Python
- 1,000 -- 5,000 lines written: OCaml, Java
- 500 -- 1,000 lines written: Scala, Haskell, C++
- 100 -- 500 lines written: GLSL, Verilog, POSIX shell, Lua
Do take a look at my Projects List to get a good idea of my interests and specialties. Historically, I've mostly done programming stuff to "scratch my own itch", and my interests reflect that.
Programming language design / Compiler Engineering
My journey in Compiler Engineering began as a possible way forward for me to achieve the holy grail of "write once, port anywhere" application development. I wasn't just interested in applications that can be easily re-compiled for different operating systems, but for the web as well. In 2019, this has been accomplished via bpat, which leverages DSLs and transpilers to compile the same code base to multiple platforms.
Nowadays, I am interested in exploring the use of compilers and programming language design to allow programmers to write more expressive code without sacrificing correctness or performance. I developed CIR, for example, as an experiment on using advanced metaprogramming techniques on top of C by pairing it with a compile-time JIT compiler.
3d computer graphics
I find writing 3d computer graphics code extremely fun, and it's even better when the results turn out good. After my first foray into 3d graphics rendering with Bouncy Boar 3 where I used the well-established OGRE 3d rendering engine, I then placed my sights on developing my own 3d rendering engine from scratch using OpenGL. That was... a very long journey to say the least, but recently parts of the 3d rendering engine I've developed has shown up in projects such as DSL for Visual Novels in Scala as well as the web port of Bouncy Boar 3. Many new opportunities for me to showcase my rendering engine are on the way, so look out for it ;-).
ninja and friends.
It's not that fun, really, but it's certainly important.
I believe that a good build system setup is the lifeblood of any non-trivial project
(especially one that cross-compiles to multiple platforms, like bpat),
and so I've done some research/experimentation on them in the past,
and keep track of any new developments.
I use my own build system, ngkbuild, for some internal projects,
Typescript compiles too slowly though, so I'm
currently exploring swapping it with a custom statically typed scripting language.
- National University of Singapore Outstanding Undergraduate Researcher Prize (2019)
- Dean's list: AY 2016/2017 Sem 2, AY 2017/2018 Sem 1, AY 2018/2019 Sem 1 and 2
- CS4215 Programming Languages: Letter of Commendation (AY 2018/2019 Sem 2)
Having benefited from open source projects, I try to contribute back when time permits and interests align. Some of my contributions include:
Sceneas FXML root support in Gluon SceneBuilder
- JavaFX: WICCreateImagingFactory: defer CoUninitialize() call to thread exit
- Diagnosing a bug in the TLSv1.3 implementation in OpenJDK (bug report is written by me)
- libuv: workaround broken pthread_sigmask on Android
Nowadays, I don't really have time to play video games, but when I do my go-to game is Splatoon 2, especially when I need more salt in my diet from playing ranked. I mostly play the Sloshing Machine and Bamboozler.
Other games that I really enjoyed include:
- Splatoon / Splatoon 2
- The Advance Wars series
- Portal 2
- Mario & Luigi: Bowser's Inside Story
Stuff that I have read and liked:
- On Understanding Data Abstraction, Revisited by William R. Cook which explores the difference between Objects and Abstract Data Types. A must read for developers who wish to gain a greater understanding of what OOP is!