Living in Toronto for Eight Months (COVID-19 Edition)
If you asked me a year ago I would be pretty shocked to see this title on my blog, knowing that I was not supposed to be in Toronto for even a single month in 2020. As you are all probably aware, COVID-19 led to many internships and school terms turning virtual and remote, and I followed suit with this.
Luckily, aside from location and being remote I wasn’t very impacted, and I am fortunate to have a safe place to live and continue my studies along with my parents at home.
April - May 2020
This period marked the gap between my Facebook and Google internships. During this time, I received my first full-time return offer from Facebook which was very exciting, and I could be rest assured that despite the pandemic taking place, I could still secure full-time employment at a top choice company for me.
I also had some spare time to explore numerous side-projects. Several notable projects include:
1) Exploring the field of Real-Time Communication at large, which originated from a report I wrote for school in relation to my term at Facebook, and later I greatly expanded it out of personal interest. Feel free to download the paper.
2) Further learning of React and Selenium web-scraping to create a data visualization site for WaterlooWorks statistics. The project involved scraping data off of Waterloo’s job board, cleaning the data and placing it on a CDN along with making the responsive site. This is my first mobile responsive site and I’m fairly proud of it. Check it out here!
3) Creating the initial services for a major overhaul of my personal site and side-projects.
I will not go into details here yet (stay tuned in 2021!) but the essence is that I am working on creating my own Raspberry Pi farm to host all my side-projects, while having failover onto AWS. This distributed cross-cloud and micro-services architecture was motivated to allow me to reduce costs on AWS EC2 instances, while maintaining reliability and flexibility. It is an ambitious project that I plan to continue for fun on weekends once I start full-time.
During this time period, I focused on creating the low-level C++ server that leverages Boost.asio to create a multi-threaded HTTP reverse-proxy and handler for different types of requests, allowing for rerouting and redirection capabilities similar to Apache or NGINX. The multi-threaded server is capable of handling around 1350 requests per second on my 2012 MacBook Pro, and is configurable to most of my use-cases. The bulk implementation was completed, alongside a basic telemetry system with heart-beats that provides analytics on particular service health.
May - August 2020
This period defines my Google internship on Firebase SDKs. While my last co-op was unfortunately virtual, the Google and Firebase culture certainly bled through and it was an absolute joy to work at such an extremely Engineering focused company. Special shoutout to my host and everyone else at Firebase!
During my term at Firebase I focused on the server-sided Admin SDKs. In my first month I built and shipped the ability to bulk import users into Firebase using the C# SDK. The remainder of my term focused on designing and prototyping the next-generation Firebase Node.js Admin SDK.
In particular, I researched best-practices on TypeScript (such as ECMAScript module export edge-cases) along with lessons learned from other SDKs to paint a picture on how the future SDK could look like. After careful evaluation of several designs, with heavy support of my host and members of adjacent teams, alongside 40+ pages of design documentation and several prototypes, I am proud to confirm that the formal proposal was approved (alongside some minor changes) and sets the future overarching design for the most popular Firebase server-sided SDK.
Alongside writing lots and lots of documents and prototypes, I started a new initiative to auto-generate typings from source. Previously, the Node.js SDK would have a separate
d.ts typings file for all TypeScript types manually annotated, which was required due to complex monkey-patching cache logic used to lazily load modules. This process is error-prone (I ended up finding and fixing >20 bugs related to this), and keeping them in sync can be non-trivial.
However, with some careful implementation, I refactored the majority of the SDK to auto-generate typings along with adopting several new open-source tools such as API extractor and reviewing the documentation generators to play nicely with the new typing scheme. Shortly after I left, the remaining work was completed and as of today all typings are auto-generated in the Node.js SDK.
Road Biking + Tennis
During the 2020 cycling season, I managed to bike 3,786.3km across 60 rides, making it furthest distance I biked thus far in a year. Nearly every weekend, I’d ride 115-140km with my dad to Oakville and back, which was a significant contributor to this. Special shoutout to my friends as well who I went on group rides with!
My previous cycling distance record was 209km set the day after graduating high-school. This year, I broke that record by riding 245.6km with an average speed of 28.0km/h from Toronto to St. Catherines and back.
Of course, I could not use that as an excuse to not do my annual Niagara Falls bike ride, so here it is! The following ride was pretty cute as well, thought it’d mention a shoutout. If you want to do that route, keep in mind the east side is 10x more photogenic than the west.
In terms of other sports, I played tennis twice per week with several friends, and just went on regular walks.
YouTube (Learn in 5 Minutes Series)
If you subscribe to me on YouTube, you would likely be aquainted with my “Learn in 5 Minutes” YouTube series. The objective is/was to provide short clips introducing viewers to a topic sufficiently for obtaining background in it. Every week I would post a video either related to algorithms or software engineering.
During the summer (and a bit into fall) I created 27 videos spanning numerous topics including number theory algorithms (sieves, modular combinatorics) and in-depth view at software engineering concepts such as HTTP header compression (HPACK/QPACK). Feel free to visit the repository repository or website.
Given my experience with YouTube, I expected two things:
I will receive very few views at the beginning, particularily because my videos were traditionally scattered and my subscribers are saturated across various interests
The occasional video will rank well, and consequently consistently receive views
And turns out my hypothesis served correct so far. Broadly speaking, I have two types of videos: either it is consistently growing in views or it is dormant. Unfortunately, the vast majority of videos are in the second camp, but some still receive views and I am optimistic that they will receive more views later on.
This entire project was extremely time consuming, and occasionally I wondered “is it worth it?”. For many of the topics chosen, I did not have expertise before the videos, so I would need to familiarize myself with the concepts to deliver a presentation, create the presentation, record, edit and upload. To upload at a cadence of one video per week, I would need to spend at least 6hrs/week creating videos.
I will not hide the fact that delivering content every week became a stressful ordeal at times.
However, the answer to this question is still yes. Even in the case of nobody watching the videos, at the very least I learned something new. All the topics in my videos are topics that I was always interested in but did not have the time to learn them comprehensively, and through the videos it motivated me to take a deeper look. Reading through the QPACK draft because there is very little online documentation on the bleeding edge of the standard takes some level of dedication. Secondly, the views are bonus, and I am glad when my viewers learn something new from my videos :)
I’m a fairly firm believer that building fundamentals is important, and this was an example of this. I am glad to confirm for more than half the videos, I already applied the particular knowledge gained in some area (Google conversion interview, univeristy course or casual conversation). My LZ77 compression video helped a friend with her interview (coincidentally that popped up!), HTTP XSS attacks were a core focus in CS 458 (security at Waterloo) and more. Moral of the story: learning is never a waste, and sometimes wish more people took this mindset instead of simply cramming and forgetting (i.e., Leetcode or school courses).
September - December 2020
This period marks my 4A CS term. There is not much to outline for the academic term. As with many academic terms at Waterloo, my schedule quickly got busy as I had to conquer assignments from multiple classes with occasionally tricky deadlines. The school term for me was not too difficult, although it was time consuming because I took two “bird” courses that ended up having lots of essays to write.
I will outline one strategy that I used to keep myself at ease during the term, which was creating a structure during my days and trying to stick with it. Every night (morning?) at 12:00am I would make a TODO list for the next day, broken down into hourly chunks with goals. At the beginning of the term, I outlined hotspots with heavy assignment loads and ensured that I would start working on those assignments ahead of time.
Forward Looking at 2021
Without a doubt, 2020 was a strange year. Next year will be significant for me as it marks the ending of my undergraduate time at the University of Waterloo, and the beginning of my full-time career as a Software Engineer. I am hoping to end off strong at Waterloo, have some rest, and start strong at Facebook in a team that will align with my interests.
As with any major transition period, while it comes with excitement for new beginnings it is critical to keep priorities aligned, goals set and move with an open-mind for potential changes and challenges.
I wish all the best for everyone in the New Year with lots of success, health and happiness.