Today marks the final day of my OSD700 experience. I can't believe it's already over, it feels like just yesterday when I was mashing my refresh button to ensure that I was one of the lucky few to get accepted into OSD600. Most of my friends weren't as lucky. Some may say it's through the power of fate, though personally I say it's through the power of fibre optic internet.
Chris, shortly after getting into OSD600
One of the things I've found myself ruminating on lately is just how much I've learned these past 8 months. Several questions have come up from friends asking me for advice, most of the time I the answer, or can at least yield some sort of guiding intuition. This intuition was solely gained from my time spent in these courses. I've found similar behaviour in some stackoverflow/reddit questions.
I've made friends too. I've had great experiences working with everyone in the project: from spending late nights working with Josue, to laughing at nonsense with Anton, Abdul, or Ilya, or talking about the benefits of coconut water with Tony, everyone has been a real joy to work with and get to know. I'm really going to miss everyone. My biggest regret is simply that this course couldn't have happened in person, I want my Telescope 2.0 pizza party damn it. Guess I'll just order a party size pizza anyway and send the bill to Dave.
Chris, shortly after finishing OSD700 (kidding of course)
Moreover, today also marks my final day as a Seneca student! My time at Seneca hasn't always been as wonderful as these two courses have been, in fact it's been mostly the opposite. I never considered dropping out or changing programs though, just that perseverance can often be a challenging endeavour in and of its own right. Although, OSD really turned things around for me. I always looked towards the lectures and to the weekly labs and assignments with an excited fervour. These courses ended up being so important to me whereas I would nearly say your time in CPA/CPD is wasted by not having the privilege of taking these courses.
But enough fluff from me. Let's discuss what went on this week with me.
The Maintainer
Sunday! I finally re-approved Tony's PWA PR after we got the final go-ahead approval from Dave. Interestingly, Tony reached out to the PWA's library creator to talk about how updates work when we deploy new code. The creator responded saying the PWA is updated! Because of this the PWA was given the go ahead.
I manually tested an update to a dependency with Doc Josue. We found both instances where the library was used and forced them to perform, like lions, tigers, and bears at a circus. Oh my. Always get excellent guidance from our resident Doc.
I also reviewed Abdul's PR which adds a health check to the posts service. Short, simple, to the point. My favourite type of PR to review.
Monday, bloody Monday. Off to a poor start apparently! I raised an issue but Josue told me that Abdul had beaten me to it. A funny coincidence, as Abdul had pointed out an issue with the users microservice, and was kind enough to throw a ticket up about it.
I also raised another issue to change the Users Microservice port to something that is unrestricted.
T-T-Tuesday. Approved a PR from Yuan which changed something that was bothering me since I created the about page using MDX. I also had the privilege of leading the final triage meeting, which was kind of sad for me. I always enjoyed leading the discussion, even if people were half asleep. I also "helped" by adding screenshot confirmations a few times in both Slack and GitHub to demo the Users Microservice being used live for the first time!
Thursday. Start off by approving Yuan's new slack icon fix. She brought in react-icons
, a library I've used several times before and really enjoy. I also approved a neat addition to satellite which adds the ability to cleanly shutdown a satellite-based service. I also approved another one of Yuan's PRs which updates our dark mode palette. It removes a lot of magic strings we relied on in a few places and properly adds them to the MUI theme file.
Friday! A very sad day as it's our last release day, and the last day of class. I started it off by approving Anton's attempt to speed up CI which unfortunately doesn't seem to make a huge difference, though a lot of larger companies employ such techniques regardless. I then went onto approve Dave's PR which removes tests running prior to shipping a release. He also had an excellent write up to fully explain the process of this.
I then had a short meeting with Abdul to audit the use of createError
in the Users Microservice. We came to the conclusion that it was fine as it was. I later approved his PR. Looks like Abdul has the honour of shipping the last piece of code to Telescope before 2.0 landed. Kudos!
And that was it. I had figured that this last Friday would have been more chaotic, instead it was more neutral. I won't complain about getting some more time to work on my blog post though!
The Microservice
Josue and I started the week off by working on converting the unit tests for the Users Microservice to proper e2e tests. We both got stuck about half way through when several responses seemingly stopped cooperating and refused to properly return what we were requesting. I started working on it the next day and found where the stumbling occurred, we either weren't parsing the JSON via await response.json()
or weren't converting the response text via await response.text()
. Silly little mistakes that we got eventually. With those out of the way we continued on our way and eventually had a lot of great tests written. Josue helped me out a lot with some really neat promise tricks, an area where I still struggle a lot. On another note, I ended up ripping out a lot of the code that checked for hardcoded error messages. More sage wisdom provided to me, as error messages generated by our dependencies may randomly change, leading to failing tests. I also got a little lesson from Sage Dave on the proper use the fat-arrow in JS, or rather how to clearly return a promise. I have a bad habit of saving the response to a variable, only to later return it without performing any logic. An unnecessary task which I changed in the final PR. We finally landed our updated tests on Tuesday.
From here we transitioned to attempting to implement a health check API for Firestore, both the production version and the emulated version. Both of us spent about an hour trying to research potential solutions to this, but at the current time it doesn't seem like this is possible. I even asked a (my first, actually) question on stackoverflow regarding this and was met with neutral responses. I updated the ticket regarding this issue and we moved onto something else.
Finally, we followed this up by trying to work on how a user becomes an admin in the users microservice:
- We tried to
post
&put
a user with a Telescope user token (via Postman) and were denied. - We tried to
post
&put
a user with a Telescope admin token and were granted access.
Given the following, we both came to the conclusion that this work was already done for us. During our final meeting, both of us spoke to Dave about how exactly we're going to limit a user becoming an admin. We received some advice on how to proceed further, which was essentially 'lock down everything', something that I look forward to implementing with Josue. We'll give it another shot ASAP.
In the mean time, we decided to work on replacing the feed parser, which is currently being deprecated but used in a few places in our backend. We started out by curl
ing the feed parser wiki, editing it to only have 3 blog urls (one atom, one rss, and one xml), and running our own web server via npx http-server
, so instead of having our backend parse several hundred blog feeds, we'll only parse 3 of the possible known types of blog feeds. A really amazing idea from Doc. We continued on by doing some research into promise-based feed parsing libraries, which was eventually concluded with Doc suggesting that we replace feedparser-promised
with rss-parser
. From here it's just a matter of manipulating the shape of the data that we feed the new library we're transition too. We called it quits from here, but we'll continue working on it ASAP. Although that about does it with my microservice contributions for the week, I'll try my best to not to make this the last time I work on the microservice.
I'm exceedingly thankful to be working with Josue. He has both taught me a lot, and shown me proper ways of doing all sorts of things with both programming and soft skills. He is an exceedingly talented programmer worth his weight in gold, and more. Both he and Dave are two people that I can only aspire to emulate, surely either of them have forgotten more than I know. I truly wish Josue only the best in his future endeavours and hope that we keep in touch.
The Finale
I'm not sure what else needs to be said, I'm only sure that there's things left unsaid (if that makes sense.) The feelings and experiences from OSD cannot be expressed in a single post. I think my experiences as a digital carpenter in this course can be expressed in the following: I learned how to navigate and contribute to a medium-sized project in 4-8 months, and you can too!
Some big moments for me are as follows:
- When I got my first code merged in OSD600
- When I contributed (several times) to plainoldrecipe, a repo publicized by hacker news.
- My Hacktoberfest shirt arriving!
- Breaking Telescope! (which I think was my first Telescope contribution, naturally reviewed by Josue who was likely cursing my name)
- Finally landing the users microservice
- Learning tonnes of devops such as CI/CD & Docker
- Realizing how many technologies I've touched in the last 8 months. I've worked on so many different, modern, and relevant tech stacks that I can really apply my knowledge to a lot of interesting places and careers.
What's next? Well, I'm not sure. I still haven't decided if I'm going to McMaster University to upgrade to a Bachelor's Degree, or if I'll simply seek a job. I do know one thing, I really need a better chair.
So it goes. See you later everyone, and thanks for all the fish.
Top comments (0)