Posts


test

Apr 25, 2024

Project Breakdown: Web Security Workshop

I took a technical writing course (ENGL 210E) this term. For the final project, I made a hands-on tutorial on the basics of SQL injection attacks and how to prevent them. I’ve put together some of the interesting problems I faced during development of this Web Security Workshop.

Dec 27, 2023

Canadian Telecom Horror Story

While looking through boxing day phone plan deals, I remembered that it’s been about a year since having the worst experience imaginable with Rogers. This story is uniquely terrible in that they took advantage of an old lady and were unable to find and fix the problem for weeks.

Nov 15, 2023

Train travel is obscenely expensive

This probably won’t be a surprise to anyone familiar with Canadian passenger rail, but it is incredibly expensive. Does it have to be this way?

Sep 24, 2023

Dual Booting Archlinux and Windows

I recently got a new laptop: a refurbished Dell XPS 13 9315. Just like my previous XPS, I want to dual-boot so I can play steam games on Windows but do my development work in a linux environment. This article covers the steps specific to setting up dual-boot as well as hurdles I’ve run into.

Aug 26, 2023

Project Breakdown: faceit-enhancer-enhancer

I’m getting towards the end of my chrome extension project. It uses the faceit data api to provide more detailed stats about the players in your lobby. There were interesting challenges at every turn, like scraping the dynamically-changing SPA or storing settings. I plan to give an overview of the design and insight into some of these hurdles.

Jun 8, 2023

SpinOk Android Spyware found in 101 apps with 421 million downloads

I originally wrote this article for my computer security and privacy class (CS458). SpinOk is an interesting case of a spyware trojan fooling not the end user, but developers into including it in their projects.

May 2, 2023

Neat Higher-Order Function

While working on my Chrome extension project, I ran into this article on a technique called ‘debouncing’. It uses a higher-order function to ensure that the function supplied is run only once per interval. It’s inspired me to come up with my own to solve the problem of applying user settings. I also apply a lesson from the Pragmatic Programmer!

Apr 9, 2023

How to Win Friends and Influence People: the Missing Rule

How to Win Friends and Influence People is touted as ‘the only book you need to lead you to success’. Now that I know all of the rules, I think there is one more hidden in plain sight that is crucial to being an effective communicator.

Mar 20, 2023

Outsource your brain to ChatGPT

I’m late to the party on this one. Everyone’s tried to use these AI chatbots to automate some annoying aspect of their lives. A prime example of this is the dreaded cover letter. I ran across an internship posting that required one, and instead of skipping it like I usually do, I was curious if GPT could lend me hand.

Feb 26, 2023

Simplifying Hugo Search (and adding Tags)

This article picks up directly from Implementing Search For Hugo with Lunr. That article was about getting search up and running quickly. This one will be about simplifying the implementation and adding a new feature altogether: article tags!

Feb 19, 2023

Implementing Search for Hugo with Lunr

Hugo’s search documentation is not very useful if you want to get simple search up and running quickly. What I’ve done is compiled instructions from a few sources, with extra explanation that may be useful for Hugo noobs like myself.

Oct 10, 2022

Tech Interview Question: Balanced Brackets

This is the first in a series of posts on technical questions I’ve been asked during interviews for software engineering internships. I’ve done dozens as part of UWaterloo’s co-op system, and I’ll be picking the most interesting to share with tips on solving them!