Category: learning

  • A Bachelor’s Degree

    A Bachelor’s Degree

    This year it has officially been 15 years since I started my first job as a web developer. In all these years, I never finished a degree. Since 2021, I’ve been working on a BSc in Information Systems and Information Technology from TU Dublin. The course is modular with several exit paths. One could choose to exit at a Higher Certificate (Level 6/2 years), BSc Ordinary (Level 7/3 years), or BSc Honours (Level 8/4 years). When I started, I was thinking I’d exit at BSc Ordinary but later decided to stick with it for another year just in case I decided to get a Master’s degree in the future.

    The view from the Central Quad. I came here for exams every January and May.

    The course is fairly modular, you can pick which modules you want to do in every semester at the start of the year. This is unlike most courses at the university and it meant, registration was quite a stressful time every year. While I was never elected the class rep, from the 2nd year onward, I had to step in and talk to the course coordinator regularly at the start of term to get information about the start of classes. We organized ourselves into a Discord server pretty early on and it helped!

    The stairs in the Central Quad building. They were always fascinating.

    The first 2 years of the course taught us fundamentals. This is probably when I learned the most. The fundamental math and algorithm classes were fun and taught by excellent lecturers. I also got a chance to learn about the theory behind relational databases, networking, and encryption further than I had explored myself. All of these subjects had some great lecturers who went in-depth. In theory, the university would have let me skip some courses, but I explicitly chose not to. I wanted to get a feel for doing the work and allocating time in low stakes courses in the first year. Every semester went something like this: One course were I’m learning new things, 2 courses were what’s being taught is familiar enough and I can probably trivially pick up the new pieces.

    Our class started with roughly 18 students. Due to different folks and their availability, not everyone went at the full pace of talking all the subjects in every semester. At the end of the third year, there were 3 of us who were from the start, we adopted 2 more folks who had started before us, but were targeting to finish with us.

    The classes were from 6:30 pm to 9:30 pm on Tuesdays to Fridays in most years. The last year of the course was chaotic since the days of the week shuffled around. Additionally, we had to do a project and that had its own classes to talk about the report. I also had a meeting with my project supervisor to top off the class about it. If I had a time machine and choice, I’d probably not try doing the project and a full course load. That nearly burned me out at the end of the academic year.

    I approached by assignments like an SRE, it was all version controlled in Git and I wrote most of it with LaTeX. The only exception was a math course that took only 15 mins on paper. It would have taken a good hour with LaTeX. I ended up with a standard LaTeX template for my assignments that I kept reusing. The good news is that it looked consistently good across the board!

    Standing in line to get my parchment. Disbelief that this is finally over!

    At end of October, we graduated finally! The sense of relief among the 6 of us were palpable! Would I got back for a Master’s degree? Not any time soon. I need the distress and burn out of the last 4 years to leave me before I try that again.

  • Crucial Conversations Training

    In the first week of July, I attended an internal training on Crucial Conversations. I’ve been eyeing that training ever since I started at Red Hat. It’s a skill that I’m poor at. I tend to avoid difficult conversations. When do I have them, I let emotions get the better of me or go the path that has the least amount of conflict. The training involves hands-on practice with methods and techniques taught in the book. I’d read about half the book before I went into the training, but the training was way more effective.

    One of the possible outcomes of a crucial conversation

    I learned two important lessons from this training. One, you can get into a conversation and very often it can turn into who’s winning and who’s losing. At this point, it’s very likely you’ve lost track of the original goal of the conversation. The second is to observe when a conversation is escalating due to aggression or silence. De-escalate the conversation first. Otherwise, you’ll have of two things happen. The other person will be angry and the conversation becomes a conflict. Or the person will agree to everything while utterly unhappy about it.

    Image Credit: Jule Falk on Flickr (license)

  • The story of hgstats

    tl;dr: I built a thing to see public graphs of hg.mozilla.org called hgstats.

    Lately, we’ve had problems with Mercurial at Mozilla. The Developer Services Team added a bunch of instrumentation to the hg webheads to help us track what is going wrong and when, to give us somewhat an early indicator of when things get shot to hell. All of these are on the Mozilla Graphite instance which are behind employee-only LDAP. However, an interesting quirk is that the image rendering is actually available without authentication. As a community Sheriff, I’ve been keeping close watch on hg throughout my shift with images that releng folks or hwine gave me. This gave an indicator of when to close trees so that we don’t end up having everything turn red. On Thursday evening, I was watching the conversation in #vcs on irc.mozilla.org, when bkero mentioned he’d made a dashboard in graphite. It suddenly dawned on me that I could just embed those images onto a page and quickly have a public dashboard!

    Armed with a bunch of images from Ben, I created a github pages repo with a lovely theme that’s available by default. I embedded the images onto a static HTML page and suddenly, we had a minimal dashboard. It wouldn’t auto-refresh or let you alter the duration of the graph, but hey, now we had one place for things! This first step took about 15 minutes.

    There were two features I had in my mind as must-haves: a) the page must let me change the hours of the graphs (i.e. last 2 hours, last 4 hours, last 8 hours, etc), and b) it should auto-refresh. I’ve looked at backbone several times in the past and I figured this was a good time as any to get cracking on building a backbone.js app.

    I started slowly, the first step was, get everything I have right now, rendered with backbone. I spent a lot of frustrating hours trying to get it to work, but couldn’t because of silly mistakes. I haven’t been coding in JS much and it shows 🙂 I think I stayed up until 2 am trying to diagnose it, but I couldn’t. When I woke up in the morning, I spotted the trouble immediately and it was a tiny typo. Instead of <{13371f13f0bf161e7595c2ac5df92e005bed3de1d132ef646d0a44f3a1a9ee62}=, I typed <{13371f13f0bf161e7595c2ac5df92e005bed3de1d132ef646d0a44f3a1a9ee62}$. After that first step, I got the router bit working and I had an app that could dynamically change the range of hours in the graph! I’d met my first goal!

    I talked to mdoglio who took a quick look at the code and thought models might be a good idea if I’m dealing with data. I refactored the code again to use models, which cleaned it up quite well! Overnight, I had a pull request from hwine to add another graph as well, which I also made more dynamic.

    The hardest bit was getting auto-refresh working. I couldn’t figure out an easy way to solve the problem. Eventually, I ended up with setTimer, but the full credit for the right incandation goes to bwinton.

    High Five!

    Working with backbone has been great, but I wish the documentation did more than just tell me what each function did. Python’s documentation often gives you more than function’s description, it tells you how you would use it practically. Of course, there quite a few resources that already fill this gap. I found backbonetutorials.com pretty useful. I got most of the basic idea of backbone from the site.

    I also submitted it to Webdev Beer and Tell (my first submission!). Mike kindly presented it for me (no, he’s not the real nigelb!) and you can watch the video on Air Mozilla if you have some free time 🙂 I would totally recommend watching the whole video, but if you don’t have a lot of time, skip to 6:37.

    This is the first time I’ve built a single-page app, so I’d love feedback (extra points if you can do a code review). The code is on GitHub.