Operation Shopify 🎓

After graduating a few months ago I wanted to take time & consideration before choosing my next leap. Doing so while I continue teaching/mentoring, exploring local startup programs, and learning about potential opportunities. University was awesome: learning new things every week, exploring different fields every semester, doing internship after internship. The growth was amazing and ideally I want to keep learning at the same rate.

On the other hand I thought of doing a master’s degree in one of the many fields I had interest in (ML, Security, Cloud/DevOps, etc). But decided it’s better to secure a few years in the workforce and get more experience first before doubling down on an area of expertise.

Why stay in Canada? 🇨🇦

First of all, it’s home. But also because Canada provided me with the environment & services that helped me grow & have access to great opportunities. For such services and opportunities to be accessible to future generations, we need to stick around & contribute back once we’re in the workforce.

Shopify

One of the top companies on my list was Shopify. It’s a Canadian company that stuck here through pressure to move to SF, the company name is growing and the mission to help small independent businesses compete with the big names is the kind of underdog mission that excites & motivates me. I’ve also heard great things about the company culture from people who’ve worked there. Oh and did I mention the office is BEAUTIFUL!!! 😍

Team I interviewed with was awesome and they took a chance on me. Looking forward to starting my next journey @ Shopify 😁 😁

Make Commerce Better For Everyone

Mentoring at a coding bootcamp

Here's the story of my first involvement in a coding bootcamp

As you’ve probably noticed, for the past year I’ve had a theme guiding many of my activities: give back to the community and relay to others the knowledge I’ve gained over the past few years.

Lighthouse Labs

Lighthouse Labs is a Canadian coding bootcamp that offers a 10-week intensive (reallyyyy intense 😅) web development program. Through this bootcamp, students are taught industry standard web-development skills from React & NodeJS, to databases & Ruby on Rails. They finally end the bootcamp by working on a project and presenting it to the cohort and potential employers. It’s intensive, but if you stick to it the rewards are enormous.

As part of the bootcamp mentors are available round the clock to assist students as they tackle the day’s work. Based on my experience teaching/mentoring, and how much I enjoy doing so, I knew it would be a great fit for me. So I joined the team, committing to around 20 hours per week.

Working with the Lighthouse family has been a blast 😄

Mentoring

The cohort I was assisting was filled with very smart people with incredibly diverse backgrounds. I don’t know if I just got lucky, but it’s true. The relationship I built with them was similar to when I was teaching, I really felt responsible for their progress, and even became friends with them. I deeply cared about their well-being.

On top of the usual tech mentor assistance, I took my own different approach. A lot of times the group was simply exhausted (rightly so) and needed to look at things from a different angle or have something reignite their creativity. The more I worked with them the more I understood how much they knew about the material, and how much help each person would require for a given problem. Which meant sometimes I would talk about a different topic, knowing that if they took a step back to refocus, they would find the information they need to solve the problem at hand without any external help. Other times I would provide the direct answer if a fundamental point was missing. I can’t stress enough on the importance of teaching the process of getting to a solution over the solution itself. It’s also really important to provide clear encouragement that struggling through technical problems/bugs is natural and expected at all levels; so struggling along with them as you look for ways to solve problems is extremely important. This removes a huge mental roadblock surrounding self-doubt.

Personal reward

As always, teaching and mentoring also benefits me. In fact, I ended up learning Ruby on Rails in order to be better at teaching it and I’ve strengthened my web development knowledge across the board. It’s good to validate and reinforce what you already know, and clear up things that you took for granted but didn’t truly understand. It was also incredibly rewarding to see the cohort graduate after weeks of working extremely hard. I felt proud and honored to have played a part in the start of their new careers. What an incredible group of individuals, I know they will go on to do great things ❤

Lighthouse Family

Teaching programming to beginners at a non-profit

March was a pretty busy month for me. All the work with the AI society, final stretch of my degree (exams, projects, etc.); oh and I also started teaching 4 nights per week 😅.

As previously mentioned, I realized I enjoyed mentoring and helping others learn to code (mentoring at hackathons, giving workshops, etc.), so when the opportunity came up to kickstart a free coding workshop program at a non-profit, I decided to jump in and start teaching.

The purpose of that initiative was to bridge the gap in tech literacy and make quality classes accessible to everyone. The target audience was beginners who have never really touched code before. So I prepared a curriculum and started teaching introduction to Python twice/week and introduction to web development twice/week.

The classroom

In my classes there were people studying physics, arts, biology, and there were even high school students. On top of that, there were a few students currently enrolled in computer science at University and skipping their equivalent class to attend my lecture, citing it was more helpful 😁.

One of the biggest challenges was to keep the material engaging for an audience with such a high level of contrasting backgrounds.

Class size started at around 25 for each course and trimmed down to about 15-20 by the end of the month. I did reach out to people when they would stop coming and reasons mainly involved other scheduling conflicts (it is a free class after all), difficulty to add another course on an already heavy university course-load, and difficulty keeping up with the course material 😩.

Teaching

When building my slides/curriculum and problem sets, I went in with the target audience in mind: how do I introduce the basics and cover enough in 8 lectures to allow them to continue exploring the topic independently. My goal wasn’t to teach the latest in web development frameworks or PyTorch for beginners, but for students to be able to write/read code and to understand the fundamentals behind how the web is built.

But I quickly realized that pre-course preparation was only useful for guidance, and to truly be effective I had to adapt the course material/pace/timeline based on the progress and response of my students on a daily basis.

During the whole month, I couldn’t stop thinking about how I can help students with their struggles, always trying to come up with better exercises, it was constantly occupying my mind even before my own class assignments and exams. Understanding that any attempt at a one size fits all solution would not be successful, I always worried about how to not bore the highest performers but still keep the ones having the most difficulty engaged & not feeling left behind.

Overall I’m incredibly satisfied in my experience as a first time teacher. Programming can be intimidating to those trying it for the first time, I knew I could help not only teach, but also breed confidence in people through empathy and the way I simplify and parallelize concepts with other aspects of life they can relate to. That personal connection and understanding I built with students was the key to success.

Conclusion

Often time, people who have skills in an area find it difficult to empathize with people who are new and not equipped with as much experience in the field. This is my strength, and I hope that as I progress in my career I never lose this ability. Teaching others from the start is a great way of working on my own empathy in tech.

I’ve always appreciated the work teachers do in educating generations after generations of people, building the foundation of our society, but I built even stronger empathy through this experience. The work of a teacher extends far beyond the confines of a classroom and should never be underappreciated. Its more than a fulltime job, it’s an immense burden of responsibility. Thank you to all the teachers who’ve played a part in my development, you are the real MVPs.

Teachers are some of the most valuable people in society

EDIT:

Another semester is now underway! 😃😃

Python Classroom

Aftermath: Natural Language Understanding Conference

NLUCON (The 'almost sold out' Banner 😛)

Our main event for the Winter semester as part of the AI Society was NLUCON, short for Natural Language Understanding Conference. The venue was packed with over 120 people and frankly it went even better than expected :)

The goal

Bring together some of Montreal’s natural language understanding and artificial intelligence leaders under the same roof to discuss contemporary research in NLU as well as its potential and already realized roles in enterprises and in society. We also wanted to give the community an opportunity to interact with experts and each other through a post-conference networking event.


The event

Speakers 🔈

We managed to regroup an amazing list of speakers from different backgrounds, and the talks included information for beginners and experts alike. Very balanced and informative I must say 😊.

  • Professor Sabine Bergler, founder of the Computational Linguistics Lab at Concordia, talked about NLP & DNNs.

  • Mathieu Fortier, AI/NLP team lead at Keatext, talked about challenges in NLP and their potential solutions, and how to design AI for customer happiness.

  • Sydney Swaine-Simon from NeuroTechX dove deep into the impact of NLU on Society with a fun presentation (as always!).

  • Finally Hector Palacios, Senior Research Scientist at Nuance, closed it off with an awesome technical presentation about the research being done at Nuance, including the challenges faced and applications being deployed.

  • Oh and I slid in there right in the middle with a presentation on how anyone can build a chatbot with little knowledge thanks to some easy to use tools offered by leaders in NLU 😉 It was aimed at bridging the gap between the most technical attendees and beginners in the field, or non-computer science or linguistics backgrounds. The timing of the presentation was fitting and helped transition between topics (luckily 😅).

Networking 🎷

In the middle of the talks there was a short break for food & coffee. The team was mostly scrambling to make sure everything stays organized and on time, but the rest of the attendees seemed to make the most of the break to talk about job opportunities and how good the pizza was 😃

Post-conference we moved to another area, where we had a band setup (one of our team member’s very own indie rock band 😎), snacks & drinks, and more. It was a fairly formal and enjoyable setting, judging by the fact that most people stayed for more than the allocated time. At this point the team & I finally had some time to relax and just enjoy the setting. The room was full of incredibly smart people and I personally had a blast engaging in many thoughtful conversations.


Retrospect

NLU Conference

Every big event has challenges: venue, ticket sale, getting speakers, catering, logistics, etc., but time and time again I absolutely love working on these kind of events. Finding issues and taking initiative, working as a team, getting people together, seeing your plan come to fruition and making people genuinely enjoy their time; so satisfying. I’m really proud of the work we did as a team. We started off worried about not selling enough tickets, but ended up having to limit the number of tickets available because the amount of interest vastly exceeded the venue size. I really wanted to put a picture of the whole AISC team here but we were working so hard we forgot to take a group picture ¯\_(ツ)_/¯. We’ll take one soon 😉.

TCP Connection: a sample interaction

During my computer networks class a friend of mine asked me to give a quick overview of how TCP connections work. Without going into congestion control, timeouts, etc, I decided to bring up a sample TCP connection trace and go through the steps of requesting data from a web server. I dropped it here in case it could be useful to anyone else.

1. First let’s listen in on connections to and from port 80 (web server):

tcpdump -n port 80 -l > tcpdump.txt

2. On another terminal let’s make a GET request to a website (example.net) using netcat:

printf "GET / HTTP/1.1\r\nHost: example.net\r\n\r\n" | nc example.net 80

3. Now let’s examine our tcpdump.txt file:

(I removed some noise from the output to focus on what we’re describing)

start connection

The following are the steps for the initial ‘handshake’, where the client (10.0.2.15.43830) tries to establish a connection to the server (93.184.216.34.80). The ‘S’ flag represents an attempt to send some message, and the ‘.’ flag is the ACKnowledgement that a message was received (based on seq #). When possible, both are packaged together as a response + acknowledgement.

IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [S], seq 3558958912, win 29200, length 0
IP 93.184.216.34.80 > 10.0.2.15.43830: Flags [S.], seq 2944001, ack 3558958913, win 65535, length 0
IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [.], ack 1, win 29200, length 0

The client asks ‘Can we connect?’; the server says ‘Got your message, ready to connect’; client responds with ‘Got it.’

end of three-way handshake

sending the GET request

The client sends the actual GET request. You can see that the length isn’t 0 anymore and then the ‘F’ bit signals the end of data being transmitted and that the host is ready to disconnect.

IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [P.], seq 1:38, ack 1, win 29200, length 37
IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [F.], seq 38, ack 1, win 29200, length 0

The server responds with an acknowledgement for both of these messages.

IP 93.184.216.34.80 > 10.0.2.15.43830: Flags [.], ack 38, win 65535, length 0
IP 93.184.216.34.80 > 10.0.2.15.43830: Flags [.], ack 39, win 65535, length 0

response data from the server

The server responds with a big chunk of data (in this case its the home page of example.net).

IP 93.184.216.34.80 > 10.0.2.15.43830: Flags [P.], seq 1:1593, ack 39, win 65535, length 1592: HTTP: HTTP/1.1 200 OK

The client acknowledges that it received that data.

IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [.], ack 1593, win 31240, length 0

Now its the server’s turn to signal that it is ready to disconnect.

IP 93.184.216.34.80 > 10.0.2.15.43830: Flags [F.], seq 1593, ack 39, win 65535, length 0

& the client acknowledges it.

IP 10.0.2.15.43830 > 93.184.216.34.80: Flags [.], ack 1594, win 31240, length 0

end of connection teardown

  • An important thing to note is that a host can still receive data once it sends the F bit, but it can no longer send anything (only ACKs).
  • The sequence number is initially random during the handshake phase, but its then the size of the chunk of data being sent + the current sequence number at this point in the connection. For example when the server sends 1592 bytes of data, the following acknowledgement number from the client is 1593. The next piece of data sent from the server will start at 1593.