Skip to main content


This is Derek Lam's personal site.
Let's get personal.
Scroll, I'll tell you a bit about myself.
Or just enjoy the Shard demo shown above

Spending time

Studying Engineering Science at the University of Toronto is my full-time occupation. There isn’t much about a circuit that is totally uninteresting to me, so I specialized in Electrical and Computer Engineering (ECE).

Links to great groups of people that I have the privilege to work with right now:

Projects on this site

Presence Elsewhere

<my name>
everything here, but smaller

Recent Work

All Projects

Recent Projects

  • Aug 2017


      People love rainbows. The problem is that forecasters lack the... well, foresight, to give the people the lucious rainbow details they want. The idea to fill this gaping hole in supply came from Akira Kakkar at MHacks 6, and I'm lucky to call him, Jenny Zhang and Philip Tsang my co-developers on the project for those critical first 36 hours. I personally released an alpha a year later because this project's momentum isn't allowed to stop. For the sake of all that is round and colorful.

      Detecting rainbows is feasible from just satellite and radar data, and boils down a geometry problem on these two datasets. From a quick detour into the mechanics of rainbows the problem statement will essentially just pop out.

    • Jun 2014

      City of Toronto Open Data -- Intake Tool

      As an intern with the City, in the unique and ever-interesting proxying role of the Open Data dept., I helped develop an internal tool to manage public interactions.

    • Aug 2014


      Shad Valley 2013: Improving the efficiency of human-powered transportation by making the backpack quick-access. Print advertisement and website designs.

    • Oct 2017

      BlueDot EDIT Exhibit

      BlueDot Inc. is a company that analyzes the propagation of disease worldwide. With that description, it was a pleasant shock to be a part of an in-house Design Team in the summer of 2017. Getting to know BlueDot's products, with lots of data backing software and print products that needed to read crystal-clear, there was actually an unending barrage of challenging design work. I got to participate in a particularly exciting one when an opportunity to participate in the EDIT festival came up in the middle of the summer and we seized it. The festival pitted design and futurism against the 17 Millenium Goals, with showcases ranging from aquaculture to threats from globalization (us!) packed into the abandoned Unilever soap factory on the east end of Toronto. We chose to highlight the new "proximity" of the global neighbourhood with the proliferation of shorter and more frequent flights crossing the globe, and the fact that humans are not the only passengers on flights. SARS was an infamous example that locked the global flight network and still saw the cross-continental spread of the disease, consequently spurring the founding the lab that would become BlueDot.

      We were given a corner of the third floor propped between a floor manager's office box and a huge sliding doorway with about 10 feet in the middle.

    • Jun 2016

      Greenvilla Homes

        Greenvilla Homes, with the development of its recent flagship project in late 2015, wanted a modernization of their web image.

      • Sep 2013

        Convergence – Layout and Editing

          Convergence: oldest and largest newspaper of Upper Canada College. As the layout editor and a co-editor to the publication, I modernized the design, diversifying the visual content and expanding the freedom of writers.

        • Aug 2016

          RocScience UI, Print & Database design

            Designed new iconset and UI for RS3 v2, created highly stylized illustrations and print handouts for conferences, heavy SQL crunching dirty CRM data.

          • Sep 2014

            HyperX Systems

              HyperX Systems, an IT infrastructure maintainer in the Eastern US, wanted a fresh take at their brand online to replace their archaic image.

            • Oct 2016


                Monstercat, an electronic label out of Vancouver, is near and dear to me since I grew into electronic music as Monstercat grew. If no part of its identity is spotless, at least the visualizer is and remains iconic without debate, even if not without its own slew of complaints. 63 bars, an equally stark Gotham presentation of artist and title, and across the boundary of its 5-year birthday in 2016, an ebb of particles, replaced later by animated album artwork, I respect its simplicity for showcasing the track.

              • May 2015

                World Affairs Conference Webmaster

                WAC, which pulls hundreds of students from around the GTA, required a major rebrand and legitimate web presence. The conference also needed to increase conversion rates through an intuitive registration system and beautiful advertising. See Registration package & Delegate package.

              All Writing


              1. Guide to InteractiveX in Kotlin

                I was just peeking at Kotlin to see if they supported asynchronous generators. I wasn't expecting much, because when I was making InteractiveX implementations for PHP and Hack last year, Kotlin coroutines weren't publicly documented. Man, I got way more than I bargained for. I knew even just looking at this title to this guide in kotlinx.coroutines:

                Guide to reactive streams with coroutines

              2. ProactiveX

                The maximum is in the middle

                There's a spectrum in the Reactive world. On one side, there's ReactiveX (abbreviated as Rx). On the other side, there is InteractiveX (abbreviated as Ix). For some implementations to see the difference, we can look at the former's many friends — Reactive Streams, Reactor, Flowable — and the latter's more meager and nascent friendbase — really just Kotlin channels for now. Theoretically though, the difference between the two is concise but deep.

              3. How to make a ReactiveX

                I was tipped off to Reactive Frameworks from @Robert Harvey on a long-winded StackExchange question of mine for what "reactive databases" were called. I was infatuated with Hack's elegant async API and let me tell you it absolutely expanded my world in all the right ways.

              4. Why ReactiveX operators are hard to make and InteractiveX operators aren't

                Full-featured reactive stream libraries, like Rx, come with a very large set of operators to create, transform, combine and otherwise process the corresponding streams. Creating your own operators with support for back-pressure is notoriously difficult.

                Coroutines and channels are designed to provide an opposite experience. There are no built-in operators, but processing streams of elements is extremely simple and back-pressure is supported automatically without you having to explicitly think about it.

                from Kotlin's guide to reactive channels

              5. Kotlin Coroutines: How SelectBuilder magically pulls coroutines out of the select block

                I was puzzled for a while about the syntactic sugar around select — Kotlin's experimental feature to process streams from multiple sources (docs). Take a look at this:

                fun main() = runBlocking<Unit> {
                	select<Unit> {
                		launch {
                		}.onJoin { Unit }
                		produce {
                		}.onReceive { Unit }
              6. Logo sketches: Shard

                My logo already uses forced perspective to create an illusion, so why not really force it a little harder? Shard splits polygons at random vertices and carefully hurls them in front of a camera where they appear like the original. That is... until you put a spin on them!

              7. Logo sketches: Trace

                While designing some branding around my personal logo, I noticed the following in-spiral that felt like it was leading somewhere interesting: