[{"content":" This project is currently live at poliguessr.vercel.app!\nI took all the precincts from the 2024 election, picked coordinates within them, and recorded the vote tallies for that precinct. This game picks a random one of those to quiz you! Can you guess, just from street imagery, how a neighborhood voted?\nHeavily inspired by the NYT\u0026rsquo;s version for the 2020 election.\nMade with open-source data from 21MetcalfJ and the NYTimes.\n","permalink":"https://ezzhang8.github.io/projects/poliguessr/","summary":"Geoguessr but you guess a region\u0026rsquo;s politics!","title":"Poliguessr"},{"content":" This project is currently live at repl.poker!\nMy friend requested the data of all his past hands on PokerStars. We parsed it all into a database and built a web app to analyze his performance.\nYou can log in with the following credentials to see a demo:\nUsername: test_user Password: Testpassword123!\n","permalink":"https://ezzhang8.github.io/projects/poker-replay/","summary":"Visualize past hands you played on PokerStars!","title":"PokerReplay"},{"content":"Background I first joined Canada\u0026rsquo;s largest telecom company last May as a summer student. Since then, I continued working for Bell part-time and then took a return offer for my second co-op work term. I\u0026rsquo;m so grateful to have spent a year building software with amazing people!\nDuring my work terms, I worked primarily with full-stack web development. Our tech stack included Vue, Node, Express, and SQL. I also received training for and gained familiarity with Microsoft Power BI, given I worked for the Contract Management Business Intelligence (CMBI) team.\nMy work arrangements were primarily remote with occasional trips to the Downtown Toronto and Mississauga offices.\nA family of geese greets me to the Mississauga office\nTraining I spent my first few weeks on the job getting a comprehensive education about the telecom industry. Although not related directly to software engineering, I have always been passionate about the intersection between and software and hardware. Ultimately, I appreciated our lectures on central offices, copper decommissioning, outside plants, and fiber to the home, because they helped contextualize the work that followed.\nMain Project A still from the Contractor Dashboard promotional video, published by our senior manager.\nContractor Dashboard is the project I was deployed to work on. It\u0026rsquo;s mostly an internal application that bridges the gap between Bell corporate and its thousands of contractors. The website has many modules spanning many corners of the business, and contractors are only given access to relevant modules, using a Keycloak OAuth server. It\u0026rsquo;s responsive and mobile friendly, and is often used on the go.\nWireless Home Internet My first assignment was to create a module for managers and contractors within the Wireless Home Internet (WHI) division. WHI connects those in rural and remote areas to the Bell network via cell towers instead of hard cables, providing an essential service to many Canadians with few other connectivity options.\nHowever, not every potential customer can actually make use of the service. Some customers may have no line of sight to the nearest cell tower for a multitude of reasons. The company wants to survey what went wrong in these instances to optimally direct future infrastructure investments.\nThe existing workflow was to send contractors a Google Form to fill out. This wasn\u0026rsquo;t the best for security, and made it difficult to query the collected data to hold contractors to surveying a certain percentage of missed customers. Everything also had to go through the contractors\u0026rsquo; managers before reaching the on site contractor at the customer\u0026rsquo;s location to fill out a survey.\nBy shifting this process to Contractor Dashboard, contractors\u0026rsquo; surveys now go directly into Bell\u0026rsquo;s database where they can be queried. I also created a scorecard to keep track of completion metrics, greatly reducing the workload of managers on this issue, and improving the integrity of data collected.\nBell Smart Home My next assignment was to extend my previous work into the realm of smart homes. Bell has a stake in smart home systems owing to their acquisition of Alarmforce. (Remember that commercial?) A program known as Security Business Net (SBN) has to be run by a contractor to ensure the system is armed and sensors are operational. Otherwise, Bell could risk liability for a breach of an alarm system by an intruder.\nWith help from my manager in gathering data from Alarmforce, we expanded my module on Contractor Dashboard to enable contractors to report a follow-up for when the SBN software failed. This helps ensure as many Bell Smart Home customers are linked up properly.\nClaims Bell\u0026rsquo;s property is damaged on a daily basis, sometimes in ridiculous ways. Whether it\u0026rsquo;s a car accident, construction negligence, or copper wire thievery, there\u0026rsquo;s got to be a claim against someone written up eventually. The company was using antiquated claims software from the early 2000s, with the license to that due to expire soon.\nI joined my colleagues towards the end of the development cycle for incorporating claims management software to Contractor Dashboard, taking on a few story points each sprint to increase our team\u0026rsquo;s output leading up to launch.\nSome work I did for Claims include keeping track of the claims adjuster, troubleshooting SQL queries, and saving user preferences in LocalStorage.\nBest of luck to whomever writes up this claim.\nSide Quests Over the course of my work terms, I occasionally explored some other technologies.\nGoogle Cloud Platform When I joined the team, Contractor Dashboard stored the raw binary of files in an SQL table. This wasn\u0026rsquo;t a sustainable way to handle file uploads, and could cause considerable strain on the server. My module for WHI used this system initially, but was first to transition off of it, as part of a company-wide commitment towards cloud storage.\nI migrated files stored on the SQL server to a bucket on GCP, after restructuring my backend code for any API endpoints related to file uploading.\nPower BI Reporting On an ad-hoc basis, I updated some Power BI dashboards and scorecards for internal metrics. While not an expert, I definitely gained some experience with this software in a professional setting.\nDocumentation Took a deep dive into Swagger in my final weeks of the internship, to adequately document everything about my backend code, while writing everything I knew to Confluence. For any potential employers reading this\u0026mdash; I seek to keep my deliverables operational as long as possible, even after I leave the company. I take ownership of my work, and will invest in communicating both the nitty gritty technical details to the broad high-level overviews to the team.\nLessons Learned SELECT * is bad!!! I will never use a DBMS as a file management system. It\u0026rsquo;s like storing treasured family photos in a spreadsheet. git blame came in extremely handy when I was given 30 minutes to find the cause of a production issue. No more generic error messages. This wasn\u0026rsquo;t a hackathon project anymore, it\u0026rsquo;s very helpful to code errors so bug reports can identify the problem for you. Exciting Anecdotes Some cool stories from the past year, less work-related!\nWizards @ Raptors I was lucky to grab some Raptors tickets that Bell was giving away. Bell owns 37.5% of the Raptors, so it\u0026rsquo;s really great to see them letting us in on the fun. They were awesome seats, just 14 rows from the action, and I got to bring a friend!\nEnjoying the game with my friend, Aryan Sharma\nThis was the game on November 13th, 2023, where the Raptors erased a 23 point deficit to beat the Wizards at Scotiabank Arena. Pascal Siakam put up a season-high of 39 points, in what was one of his last games before being traded to the Pacers.\nHalfway through the game, I joked to my friend that watching a Raptors game would be free, but watching them win would cost us again. Glad we ultimately stayed to see a victory and one of the last 2019 champs perform his best for the team.\nRaps win 111-107!\nLaptop Upgrade CGI, our IT provider, is extremely stringent on scheduling us for upgrading equipment. My work laptop was due to be upgraded, but it was either go into the office on final exam day, or bear with my clunky overheating laptop for another 5 months.\nI managed to do well on my ECE 222 exam that evening despite commuting from Waterloo to Mississauga and back. Totally worth it in the long run, since my productivity was boosted for the next 5 months.\nConclusion I couldn\u0026rsquo;t have asked for a better start to my software engineering career. Heartfelt thanks to everyone in CMBI who made this opportunity possible. Looking forward, I\u0026rsquo;m excited to bring the experience I developed at Bell to future internships!\n","permalink":"https://ezzhang8.github.io/posts/bell/","summary":"Applying popular technologies to niche problems","title":"Reflecting on my time at Bell"},{"content":"\rWhy this project? \u0026ldquo;What\u0026rsquo;s the schedule for tomorrow?\u0026rdquo; and \u0026ldquo;when\u0026rsquo;s next class?\u0026rdquo; were some of the most common questions asked by my peers. School started at 8:23 AM, and lunch was at 11:52 AM. Classes were 63 minutes long, with an 11 minute recess and 3 minutes to move between each class. Even eighth graders were expected to keep track of these odd lengths of time. Sometimes school would end 25 minutes early and follow an entirely different schedule, but it was never communicated effectively, and some people would be left waiting at school for a ride home.\nWhat does it do? STMC is a tabbed application with four views.\nThe default view, Schedules, shows the period rotation for upcoming school days, exact times for each class, and school events on that day. Students in my high school took 8 classes year round, with 4 on one day and 4 others on the next day, labelled A through H. The order was scrambled by moving the first class of one day to the end of the next day in the rotation.\nThe Explore tab shows six divisions of the school, houses, and points they\u0026rsquo;ve collected by demonstrating school spirit. Below that, Bulletins show brief announcements and news by administration. Below that, there are some static resources of the school such as locker and room locations.\nThe Notifications tab shows past push notifications sent out by school officials. Push notifications were enabled in the app for students to get announcement information at an instant at the end of the school day.\nThe last tab, Resources, shows more static information about the school such as its website, phone number, and links to other tools used by students.\nHow was it made? Tech Stack Frontend I made the frontend interface using SwiftUI in Xcode 13. At the time, there were some features lacking in SwiftUI so I implemented some workarounds with UIKit as well. I used a 2012 Mac mini for development and my iPhone 8 for testing.\nBackend The information presented in the app is fetched from API endpoints that were written in PHP, that retrieved information from a SQLite database. PHP is a bit odd in retrospect, but I chose it because it would require the least configuration of school servers.\nI was given FTP access to a subdomain on the school website. Using PHP I could create endpoints with files. SQLite was chosen because the database was just a file, and I could execute queries on my local machine and then transfer it to the server. I would approach this differently if I worked on this today, but I think I made the most out of my technical ability at the time.\nThe endpoint for getting school schedules and events used Google Calendar\u0026rsquo;s PHP library with a service worker account granted access to the school\u0026rsquo;s private calendar. For user content, I created a dashboard using React.js where admins could update information associated with bulletins, schedules, and notifications.\nDeployment I got the support of school administrators in getting my project deployed and operational. My school was able to register for a free Apple Developer Program account as a nonprofit institution, and I was able to release my project using App Store Connect. I made several updates since the app was first released in October 2020. I did all this work for free, as I was passionate about software development, and the school gave me an opportunity to gain experience with professional tools.\n","permalink":"https://ezzhang8.github.io/projects/stmc-app/","summary":"A student life app I developed and released for my high school, which shows schedules, events, announcements, and other resources.","title":"STMC iOS App"},{"content":"Why this project? The development of this project was alongside the STMC App.\nI created a Chrome Extension which would display class schedules, bulletins, competitions, and push notifications to managed school Chromebooks. This program uses the same REST API as the iOS app, and can be managed by admins in the same admin dashboard I developed.\nThis was a way of making access to the same information collected by my API available to all students, even those who did not have an iPhone\nHow does it work? Here are some of the main views of the STMC Chrome extension. This explore tab shows upcoming schedules, bulletins, and the results of the house competition. More information about these features can be found here. This view shows details about each school day, school events, and the times of each class. Resources is a dynamic list of links that school admins can pin to this page. This provided quick access to many common websites used, and also raised awareness about lesser known resources the school paid for.\n","permalink":"https://ezzhang8.github.io/projects/stmc-ext/","summary":"A Chrome extension I developed for my high school, accompanying the iOS app.","title":"STMC Chrome Extension"},{"content":"Summary We had the incredible opportunity to conduct lithium-ion battery research on the synchrotron beamlines of the Canadian Light Source in Saskatoon, as part of the renowned Students on the Beamline program.\nIn brainstorming research project ideas, I floated studying the degradation of lithium ion batteries, as clean energy and the rise of EVs were really hot topics these past years.\nWe sourced our sample batteries from a connection at Tesla (NASDAQ: TSLA) and another set from local Burnaby startup Nano One Materials (TSX: NANO). The batteries used different manufacturing processes and chemistry, giving us an opportunity to identify differences in ion distributions post-cycling.\nThis research project was much larger than just my individual contributions. Check out the video below for the full presentation.\nHere\u0026rsquo;s a snippet of the poster we released that summarizes much of the results! View the full poster here.\n","permalink":"https://ezzhang8.github.io/projects/li-ion/","summary":"Collaborating with the Canadian Light Source, Tesla, and Nano One Materials Corp.","title":"Lithium-ion Battery Research"},{"content":"Overview After a successful CanSat (can shaped mini \u0026lsquo;satellite\u0026rsquo;) mission last year, I again took the technical lead on a new CanSat project. We couldn\u0026rsquo;t use the same mission idea again, so we got the idea to measure ionizing radiation.\nInternals of this CanSat\nWe attended a in-person launch in Lethbridge, Alberta. I am writing this a bit after the event, so here\u0026rsquo;s some contemporary media coverage of what we did!\nMedia Coverage DIY Geiger Kit in a Rocket\nCanSat Design Challenge finalists plan Lethbridge competition April 30\n","permalink":"https://ezzhang8.github.io/projects/csdc2022/","summary":"Tracking ionizing radiation in a soda can form factor.","title":"Canadian Satellite Design Challenge (2022)"},{"content":"Overview We put an infrared camera into a soda can form factor, and launched it from the sky over Abbotsford airport, taking pictures on the way down. I\u0026rsquo;d probably be repeating a lot of details verbatim from one source, so please check out the post published in Teledyne FLIR\u0026rsquo;s blog, for all the details on this exciting project!\n","permalink":"https://ezzhang8.github.io/projects/csdc2021/","summary":"Winning the inaugural CanSat competition for high schools.","title":"Canadian Satellite Design Challenge (2021)"},{"content":"\rSoftware Engineer Intern, Coinbase May 2025 - Aug 2025 Financial Services \u0026amp; Loyalty — Coinbase One\nSoftware Engineering Intern, Super.com Sep 2024 - Dec 2024 Earnings/AdTech\nSoftware Developer Intern, Bell Canada May 2023 - May 2024 Contractor Dashboard\nRead more\nMeta Open Source, MLH Fellowship May 2022 - Aug 2022 OSM-HOT Tasking Manager/RapID Editor\nSee what I worked on!\nSoftware Development Intern, Troutwood June 2021 - May 2022 Finulator\nSee what I worked on!\n","permalink":"https://ezzhang8.github.io/experience/","summary":"Software Engineer Intern, Coinbase May 2025 - Aug 2025 Financial Services \u0026amp; Loyalty — Coinbase One\nSoftware Engineering Intern, Super.com Sep 2024 - Dec 2024 Earnings/AdTech\nSoftware Developer Intern, Bell Canada May 2023 - May 2024 Contractor Dashboard\nRead more\nMeta Open Source, MLH Fellowship May 2022 - Aug 2022 OSM-HOT Tasking Manager/RapID Editor\nSee what I worked on!\nSoftware Development Intern, Troutwood June 2021 - May 2022 Finulator","title":"Work Experience"}]