Cadenze aka Boris Li

Boris with his violin case

A scientist, a musician, and a normal student discovering their aspirations. I can usually be found at my discord server. Head over if you want to receive updates when I post, or have a question, or even just simply want to be part of a group.

See below for my unadulterated thoughts, or head to archives for a list of all of them.

I would like to extend a token of thanks to several people, without whom this website would not exist:

  • Jocelyn Baker, for providing all the resources that allowed me to build this;
  • Morgan Arnold, for reigniting my desire to build a website; and
  • Rashid Al-Abri, for being a wonderful head of Hack Club and reccommending the use of Visual Studio Code.

TA Review of Student Feedback (Episode 3)

``

Building on the popularity of this series (2022, 2023), we are once again back with my review of these student comments. We will jump straight into the the funny and interesting responses.

CPSC 110, Term 1

Overall, I would consider this term absolutely disastrous. We had an abundance of new TAs, but unfortunately a significant number of them were unprepared for the job. As a result, there was a lot of tension between the students and the teaching team.

I also had to take on a more senior role on the teaching team, as it became one of my duties to train the newer TAs on the team. I am glad to say that my colleagues have gone on to become great TAs.

"Boris is sensational, really helped and explain concepts thoroughly when I went to his office hours, love this TA and really helped me do really well!"

"Boris is the best TA. He was always willing to explain and answer the dumbest question... Boris also had great office hours, and I really always appreciated his help and teaching."

"Boris was an amazing TA – he is very enthusiastic and it was clear that he cared about his students."

I guess, because of the disparity of experiences with TAs, my reviews have overall been very positive this term.

CPSC 110, Term 2

Now my last term on the teaching team, my attitude changed quite a bit. No longer worried about job security, I am free to throw out more potentially controversial comments and remarks. Moreover, the majority of the team was “culled” by the end of last term, so we had a much more senior teaching team, with multiple semi-retired TAs returning to the team, so the overall experience is better.

"Was kind and responded as quickly as he could when I asked for help. Sometimes a little bit stingy with hints, but still overall helpful"

Brother in heck, it’s literally my job to not give you the answers. Glad you’re not completely wrecking my ratings because you don’t like my hints.

"Once again extremely helpful TA. He makes it impossible to be intimidated by TAs or scared to ask for help; he shows a lot of consideration and is always enthusiastic. He made it a very positive environment to struggle and learn."

"Boris is a very funny, considerate, .... (all the positive adjective that can be used to describe a person) and chill TA. I would want to have him as my TA again."

I am really glad that my jokes have landed quite well, and students do enjoy the lighter atmosphere that I bring. I’ve also enjoyed myself a lot more due to this more relaxed attitude that I’m allowed to have.

"when i landed on this planet, after flying through space for eons after the collapse of my homeworld krypton, this TA adopted and raised me."

I am absolutely flattered.

Science One (SCIE 001)

If the COVID generation is a thing, then it certainly continues to strike. The students again feel harder to handle, and having reduced hours limits the amount of follow-up I can do with students.

"Boris was often passive aggressive when answering questions. He did not provide a comfortable environment. Overall, he was a useless TA."

Let’s start with this one. To whoever wrote this, fair game; no hard feelings. Thank you for noticing that I am passive-agressive, because I did indeed try to do that. I often categorize students into two groups: a group of students that are here to learn, and a group of students that want answers from me. If you fall into the latter category, unfortunately I cannot be as patient, especially when I have already (reluctantly) given you a solution, you should not be questioning such a solution.

"Boris was always very helpful and kind towards us when we asked him for help during his office hours. He explained concepts in a very easily understood way."

"Boris is a great TA who cares about students and makes sure they learn. He holds a lot of additional office hours which are very helpful!"

In contrast, as you can see in the reviews, when a student comes into my office hours to learn, I am willing to spend a lot more time on them. I would like to extend a token of thanks to those who are willing to learn.

"Overall, Boris was a solid TA. However, I do wish there was a little more transparency and clarity established for the physics assignment criteria."

I implore, whoever the next physics TA is, to try to get Chris to actually give rubrics for assignments. I’ve tried for three years, and unfortunately on assignments without rubrics, the best I can do is to grade based on vibes. On a related note, I fundamentally do not agree that these assignments are useful in any sense, but merely add more pressure on the student. That discussion is likely going to come on a separate post.

"Super kind, offers great advice about science one physics and major selection in upper years."

With four years of university experience in hand, I do hope I have given some honest opinions on the different programs that I’ve been in, and I’m glad some of you found it helpful.

Finally, I would like to apologize to the readers if they found this article shorter than expected. The response rate for these surveys have once again gone down this year, and that does not give me enough content to work with. Please remember to always give feedback, whether they are good or not, because that lets us improve on our teaching in future terms.

Rubik's Cube Part 3

``

2 years from the last Cube Project post, some of you might be expecting this third edition to come out sooner or later.

The Idea

So far, I have had a single project related to the cube every single year; the Speedcube Method Efficiency Analysis project in first year as part of Science One, and the Cube Timer project in second year as part of CPSC 210. Naturally, it would be ingenious to continue the theme and work on a cube-related project in third year. As such, as part of PHYS 319, an electronics lab course, I have chosen to build a microcontroller-based robotic Rubik’s Cube solver.

The Parts

Stepper Motor

Since we would need to individually move the 6 faces of the cube, we would need motors that have precise positional control, with the additional benefit that they can turn an indefinite amount in any direction. Our choice is the use 6 stepper motors, specifically the NEMA 17 bipolar stepper motors, which you can often find for a cheap price on Amazon.

NEMA 17 stepper motor

Bipolar stepper motors operate on two coils, and given a current alternately between the coils, we can drive the motor shaft (a permanent magnet) to rotate a precise angle, and in our case exactly 1.8°.

NEMA 17 stepper motor schematic

Stepper Motor Driver

However, the delicate task of controlling a single stepper motor requires four output pins on the microcontroller, which adds up to 24 output pins to control six motors, taking up a significant amount of the total available pins. Therefore, we delegate the task of manouvering a stepper motor to a specialized integrated circuit, the stepper motor driver, which requires significantly fewer pins to control..

Breadboard with 6 A4988 stepper motor drivers

The cheapest and most common drivers found on Amazon are the A4988, which we need one each for the six stepper motors. Now they would only require 3 signals each to control, 2 of which can be the same signal between all drivers.

A4988 stepper motor driver schematic

Coupling Mechanism

Now that we have the thing that moves (the motor) and the thing that is about to be moved (the cube), we need to figure out a way to connect those two parts. Since there is no premade component that interfaces a cube and a motor, we must therefore design our own.

To successfully turn the face of a cube, we merely need to turn the center of the cube. Our mechanism relies on the cube having detachable center tiles, which we can slot in our mechanism that grapples on it.

Top view of coupling mechanism - cubeside Bottom view of coupling mechanism - cubeside

This cubeside part must be connected to the motorside part such that as the motor shaft rotates, the parts rotate along with it. We have designed these two parts to be separable so that we gain the possibility and convenience of removing the cube itself without disturbing the motor setup.

Top view of coupling mechanism - motorside Bottom view of coupling mechanism - motorside

A small thank you to Morgan for lending me his 3D printer, which made the production of these parts possible.

Power Supply

The next issue is with a power supply. Since the logic voltage supply is usually either 3.3V or 5V, while the motor voltage supply needs to be above 8V, we must use different power supplies for the logic and motor circuits. As motors can often draw a lot of current and power, to minimize heat dissipation, we have chosen the logic voltage as 3.3V, and the motor voltage to be 12V. Although the motors themselves are rated at 7.3V, we can tune the potentiometer on the driver itself such that no excessive voltage or current will go through the motor.

The choice of 12V is also partly due to the cube itself. Inside every single center, there is a tunable spring. If we let the spring be more loose, then we would require a lower torque to overcome static friction, and hence the motor would not require as much power and voltage; however, the faces of the cube will cam outwards as we rotate them, which might lead to small undesired movements of the cube itself, and the faces might get stuck in the middle of a rotation, potentially leading to a rapid disassembly of both the cube and the machine. On the other hand, to prevent that from happening, we woudl require a higher torque to overcome the higher static friction, and hence the motor would require more power and higher voltage. Our final choice of 12V and 1.3A is a good balance.

Before successfully sourcing for a potential power supply, I have been using the AC to 12V that came with the Wi-Fi router at home. Luckily, I had found an identical power supply in Best Buy merely days before the actual presentation for this project, as otherwise my home would have to go without internet every time I try to power up my robot.

Structure

To package together all the components, we must build a frame. We used a Lego set that is readily available, which allowed for quick prototyping of different structures at the cost of a small amount of precision of placements.

Full setup

The other obvious choice for the material for the structure would be laser-cut acrylic sheets. This would have been the preferred way to build the structure, as I am familiar with laser cutters from grades 7 & 8; however, I did not know that we had access to the laser cutters, which were just situated in the engineering physics lab next door.

The Logic

Microcontroller

As the microcontroller itself lacks the computing power to perform a search to find a solution, we can outsource this to a host computer, so the only task the microcontroller really needs to perform is to receive instructions from the host computer and then execute those instructions on the motors.

We have chosen to use the universal asynchronous transmitter-receiver (UART) protocol, and as its name suggests, is a universal protocol for two-way communication. Both sides can initiate a message transmission, which is a desired function, as we want the host computer to raise an interrupt flag on the microcontroller side when we send in a move instruction, allow the microcontroller to perform that move, and let it raise an interrupt flag on the host computer in return as to signal that it has completed the move, and is ready to receive another instruction.

As UART can only send one byte at a time, we can encode information about which motor needs to move and the amount it needs to move by in eight bits, or two hexits. We let the most significant hexit range from 0 to 5, representing the pin that we will enable, and therefore the motor that we will activate; and we let the least significant hexit range from 0 to 2, representing 90° clockwise, 180°, and 90° counterclockwise movements respectively.

The typical cycle of communication looks like the following:

  1. Microcontroller receives a single instruction via UART.
  2. Decodes it into our desired motor and movement.
  3. Activate corresponding motor and change directions.
  4. Step the motor the desired number of times.
  5. Disable motor.
  6. Signal to host computer that movement is complete via UART.

Host Computer

However, we must generate those set of moves before we can send it to the microcontroller. This is written in Python, as Python has a package for serial port communication via UART, and also a twophase package for Rubik’s cube solving. All we have to do is to input the 54 colours of the cube, allow time for the computer to find a solution, encode these moves into hexits, and then send them one by one via UART.

The Algorithm

Well then, one might ask, what algorithm might we want to use to solve the cube? We already had one such discussion in part 1, but that mostly pertains to human solvers, which are very limited in memory and search speed. We could try to implement CFOP or Roux deterministically as we did back then, but number of lookup tables involved there are minimal, which implies we would not be taking the most advantage of the computer.

We now turn our attention to Kociemba’s algorithm. Created by Herbert Kociemba in 1992, this is an algorithm that solves the Rubik’s cube in two phases. Let us first define two groups, $G_0 = \langle U,D,L,R,F,B \rangle$ and $G_1 = \langle U,D,L^2,R^2,F^2,B^2 \rangle$. For those unfamiliar with abstract algebra, we can treat $G_0$ as the set of cube states that we can get to (note that we are equating sequence of moves applied to starting cube state to the cube state itself) by applying any composition of the moves ${U,D,L,R,F,B}$ to the cube (i.e. all possible states); and similarly, $G_1$ is also a set of cube states, but given its generating set of moves are more restrictive, it is a smaller set of possible states, and in fact is a normal subgroup of $G_0$. An easy description of $G_1$ would be that the orientation of all edges and corners are solved, and the 4 edges between the $U$ and $D$ slices are within that slice.

Side note. As we noted earlier, we are treating the moves and the cube states as the same exact group. Formally speaking, the group of moves $G_0$ acts on a set $G_0$ of all possible legal cube states, with correct spin and parity. Choosing the starting state of a solved cube $1 \in G_0$, the orbit of $1$ under $G_0$, defined as the set of all possible cube states in $G_0$ (the set) that we can obtain by applying the moves in $G_0$, must be the entire set $G_0$.

The first phase of the algorithm searches through the coset space $G_0/G_1$, that is, trying to find a solution that gets us to a cube state in $G_1$. By exhausting through all possibilities in this state, we can generate lookup tables that also serve as a heuristic function for the search function, which helps us evaluate which moves we should try first. Moreover, the generated lookup tables allow us to prune away large amounts of incorrect moves, reducing the computation time at the cost of memory.

The second phase of the algorithm now continues the search using only the moves ${U,D,L^2,R^2,F^2,B^2}$, permuting through the possible locations for each piece. Notice that we do not terminate the algorithm at the first complete solution; we will now continue to search the second phase by using less optimal solutions in the first phase. Suppose we originally needed $n$ moves in the first phase, and $m$ moves in the second phase. After we have found this solution, we will now proceed to a suboptimal solution of $n+1$ moves in the first phase, and attempt to find a solution of less than $m-1$ moves in the second phase. We repeat this process until $m=0$, which implies we have found an optimal solution.

As we only need to find a relatively good solution and not the absolute optimal one, we can terminate the search early. This is a balance between computation time and solve time.

End Result

After assembling everything together, the final product is one such video.

TA Review of Student Feedback (Episode 2)

``

Whenever a class finishes, students get an opportunity to give feedback to their instructors by ranking them according to several criteria, and also more importantly, write a few comments. Just like last year, we are going to continue the tradition of replying to some of these comments that were given to me in the past two terms, based on how interesting or funny their responses are.

CPSC 110, Term 1

Now an experienced member of the teaching team, I was selected to lead two labs and to also assist Gregor in monitoring his online lectures. It turns out that being a lecture TA is anxiety-inducing due to Gregor’s presence, but is much easier than leading a lab. I also had the pleasure to lead a Friday 6-9pm lab, which often led to frustrations as nobody, TA or student, wanted to be in that lab.

"Boris was in my lecture section and fulfilled his role well with helping Professor Kiczales making Zoom polls, raising of hands, and question management."

Yeah, this really sums up my experience as a lecture TA. Can’t complain about this arrangement at all.

"Boris is always very patient and always takes the time to explain things clearly and thoroughly during his office hours. Thank you Boris :)"

Lots of comments about “considerate”, “patient”, and “helpful”, which I totally did not expect; it is always a welcome surprise to see students enjoying the class as much as I do, even though the material is often times painstakingly difficult.

CPSC 110, Term 2

As I told a fellow TA before the start of this term, I felt really burnt out from teaching CPSC 110, and especially repeating the same concepts many times over both throughout the week for different labs, and throughout the different terms. Nevertheless, a job is a job and I must earn a living.

"Piazza comments were vague"

Yep, intentionally vague.

"Boris was always prepared to answer questions he motivated me at the start of labs, and I never felt like I was being judged or scrutinized when it came to grading problem sets."

"Boris was always very helpful and encouraging! He made the labs more enjoyable because he seemed very interested in the course."

It is often a very difficult task to walk the fine line between showing interest in the course material and being too animated, which might lead to students misunderstanding that as frustration.

Science One (SCIE 001)

Compared to the class from the previous year, it was definitely a lot tougher this year for me as a TA. Personally, I felt like there were a greater proportion of students that merely wanted from me higher grades instead of a deeper understanding. Part of my job is to give out marks for the course, but the other part of my job is the actually help people learn; some of you might have forgotten the latter as the year progressed.

"I hope that Boris can give more constructive and personalized feedback. Soemtimes students would ask him questions about the quiz reflection or written homework and he will just tell them to read the instructions. He sometimes assumes that we can understand things by just reviewing the lecture notes."

"Boris was a well-prepared and knowledgeable TA who was at some times rather curt in his manner. This made him slightly less approachable, but he was certainly effective and did his job well."

I hope this is just a teaching style thing. When a student comes to me asking about instructions generally, of course the first response I should give is to direct them to a resource that is already available. I presume that if a student has a more specific question, they will come back and ask that question again. I will however admit that I have definitely lost patience many times over the year.

"Very kind and effective teacher. It would be highly appreciated if you would be more clear on expectations and criteria for written assignments."

"...However, it was not made clear what criteria he was marking on."

Dear sirs and mesdames, I unfortunately do not get to decide what the expectation or the criteria will be for a given assignment. If I had a say in it I would have written up a rubric.

"...One thing that I wish were held more is zoom office hours, so that commuting students or those who are not able to come to the oliver room can still participate."

First off, I would like to mention that there is no possibility for more office hours. I am merely contracted for 2 hours a week, and I am already going over that limit. Secondly, my office hours are set during lunchtime, which I expect most people to be able to attend, on campus or commuters included. If not, there is still the opportunity to contact me outside of class time.

"Boris was always accessible and always willing to help us students out! He clearly always knew what he was talking about, but I put emphasis on the fact that he was always there for us students."

"Easy to contact, always willing to help, incorporates humour into his teaching in a very effective way, very knowledgeable, took his own time to give review sessions before quizzes"

"His office hours were always extremely helpful! He explains concepts in a way that was very easily understandable. He is always willing to help outside office hours too."

"Boris was very helpful throughout the year with very useful test review sessions, lots of office hours, can bug him anytime in person or online."

As I said earlier, I consider it to be an extra effort to be available to students outside of class time and office hours. I would just like to mention that this is not the norm, and we do not get paid for such work, so please respect our time when you approach us outside of working hours, and do not place any blame on us if we are unable to be contacted.

The Torture Symbol

``

This year we will be pivoting towards new mathematical ideas.

Introduction

In this article we will construct and define the torture symbol, which we will show plays an important part in real analysis, and extends well beyond what we will discuss here, with plenty of applications outside the field of mathematics.

Definition

We first define a ‘mutilation’ $\mathcal{M}$ on a (real) interval. This is the act of splitting an interval into finitely many parts. Suppose we have a bounded function $f:[a,b] \to \mathbb{R}$. We denote the supremum and the infimum on each of the mutilated parts as $M_i = \sup{f(x): x \in [x_{i-1},x_i]}$ and $m_i = \inf{f(x): x \in [x_{i-1},x_i]}$ respectively. We can now coerce the function to add up all its mutilated parts and define $U(\mathcal{M},f) = \sum_{i=1}^n M_i \Delta x_i$ and $L(\mathcal{M},f) = \sum_{i=1}^n m_i \Delta x_i$.

If we now attempt to torture each of these sums, we can define $T_U(f) = \inf U(f)$ and $T_L(f) = \sup L(f)$, where the infimum and supremum are taken over all possible mutilations of our interval $[a,b]$. If these two torture methods equate to each other, we now say that the torture is successful, and we denote that value as $T(f)$ or $T_a^b(f)$ if we want to emphasize that we are torturing the function over a specific interval.

Some Specific Results

In order to prove some results, we will first define one more thing. The supermutilation is defined as cutting up an original mutilation into more parts. Notice that the supermutilation must have the same cuts as the original one. A common supermutilation is defined to be the mutilation that has exactly the cuts of two other mutilations.

We claim that for any function, $T_L(f) \leq T_U(f)$. Suppose we have two arbitrary mutilations $\mathcal{M}_1$ and $\mathcal{M}_2$. Let $\mathcal{M}^\star$ be the common supermutilation. We can see it is obvious that $L(\mathcal{M}_1,f) \leq L(\mathcal{M}^\star,f) \leq U(\mathcal{M}^\star,f) \leq U(\mathcal{M}_2,f)$, so in particular, $\sup L(\mathcal{M},f) \leq U(\mathcal{M}_2,f)$, and hence $\sup L(\mathcal{M},f) \leq \inf U(\mathcal{M},f)$, which is exactly our definition for the torture methods.

The following theorem gives a criterion on the torturability of a function. We claim that a function is torturable if and only if there always exists a mutilation that allows $U$ and $L$ to be arbitrarily close. If a function is torturable, then we know $\sup L(\mathcal{M}) = \inf U(\mathcal{M})$. For any $\epsilon > 0$, we can find a mutilation $\mathcal{M}_1$ such that $T(f) - L(\mathcal{M}_1) < \epsilon/2$, and similarly we can find another mutilation $\mathcal{M}_2$ such that $U(\mathcal{M}_2) - T(f) < \epsilon/2$. Then it is easy to see that the common supermutilation $\mathcal{M}^\star$ must be $U(\mathcal{M}^\star) - L(\mathcal{M}^\star) \leq U(\mathcal{M}_2) - L(\mathcal{M}_1) < \epsilon/2 + \epsilon/2 = \epsilon$ as desired. For the reverse direction, we know that $0 \leq T_U(f) - T_L(f) \leq U(\mathcal{M}) - L(\mathcal{M}) < \epsilon$. Since the choice of $\epsilon$ is arbitrary, $T_U(f) - T_L(f) = 0$ and they must be equal.

A Few Exercises for the Reader

We will leave the linearity of the torture symbol and some other properties as an exercise for the reader. Nevertheless, we will formally state them here.

  1. $T(f_1 + f_2) = T(f_1) + T(f_2)$.
  2. $T(cf) = cT(f)$.
  3. $f_1 \leq f_2 \implies T(f_1) \leq T(f_2)$.
  4. $T_a^b(f) = T_a^c(f) + T_c^b(f)$.
  5. $|f| \leq M \implies \left|T_a^b(f)\right| \leq M(b-a)$

The Deep Connection

We will now demonstrate that the torture symbol is deeply linked to other parts of analysis, in particular a concept that is usually taught early on in calculus. This will be presented in two so called ‘fundamental theorems’.

The first fundamental theorem states that suppose $F(x) = T_a^x(f)$. Then $F$ will be continuous, and if $f$ is also continuous at some point $x_0$, then $F$ is also differentiable at that point, with $F’(x_0) = f(x_0)$. We first prove continuity. Since $f$ is torturable, it is bounded for some $|f| \leq M$. Let $|y-x| < \delta = \epsilon/M$. For $a \leq x \leq y \leq b$, it is easy to see that $|F(y) - F(x)| = |T_a^y(f) - T_a^x(f)| = |T_x^y(f)| \leq M|y-x| < M\delta = \epsilon$. We now prove differentiability. For $h > 0$, $\frac{1}{h}[F(x_0+h)-F(x_0)]-f(x_0) = \frac{1}{h}T_{x_0}^{x_0+h}(f) - f(x_0) = \frac{1}{h}T_{x_0}^{x_0+h}(f-f(x_0))$. By continuity of $f$, we can always find a $\delta$ such that $|t-x_0| < \delta \implies |f(t)-f(x_0)| < \epsilon$. Let $h < \delta$. Then $|\frac{1}{h}[F(x_0+h)-F(x_0)]-f(x_0)| \leq \frac{1}{h}T_{x_0}^{x_0+h}(|f-f(x_0)|) < \frac{1}{h}\epsilon h = \epsilon$.

The second such theorem states that if there exists a differentiable $F$ such that $F’ = f$ torturable, then $T_a^b(f) = F(b) - F(a)$. Indeed, for any mutilation, $F(b) - F(a) = \sum_{i=1}^n [F(x_i)-F(x_{i-1})]$. By the very familiar mean value theorem, we can find some $t_i$ between our two $x$ such that $F(b) - F(a) = \sum_{i=1}^n F’(t_i) \Delta x_i = \sum_{i=1}^n f(t_i) \Delta x_i$, and this value is definitely between $L$ and $U$. Also we notice that $T_a^b(f)$ is also bounded by $L$ and $U$. By taking $L$ and $U$ arbitrarily close to each other, we can see that $F(b) - F(a) = T_a^b(f)$ eventually.

We can now clearly see that this coincides exactly with the fundamental theorems of calculus. Hence we conclude that the torture symbol can be written as $T_a^b(f) = \int_a^b f \, dx$.

Acknowledgements

I know I’m too busy this year to write up an actual April’s Fools post, so I had to borrow material from known sources. In any case, I would like attribute the material to (the torture inflicted on me by) Walter Rudin’s ‘Principles of Mathematical Analysis’ Chapter 6, in particular Definitions 6.1 and 6.3, and Theorems 6.5, 6.6, 6.12, 6.20, and 6,21; and of course by extension to the 3rd year real analysis courses at UBC. Furthermore, a big thank you to Madeline Forbes for providing inspiration and coining the term ‘torture symbol’.

TA Review of Student Feedback (Episode 1)

``

At the end of every term, students receive a survey and they get to give feedback to the instructors that taught them. In this post, I will cherry-pick a few of the responses from each class that I have TA’d for in the past two terms, based on how interesting I thought they were, or how funny the response was.

CPSC 110, Term 1

My very first term as a TA, where I got thrown into the deep end, and had to handle leading a lab, teaching the material, and administration all on my first day, without any guidance from more senior TAs, plus the fact that all my labs were held online over Zoom. Not the best experience, but I think I turned out fine as a TA.

"I appreciate how he put up with me despite taking a long time to go through problems, often needing to go beyond lab time to finish up solutions because I was constantly struggling. He was very considerate and took the time to answer any of my questions, which I highly appreciated :)"

Although I would very much prefer students that understood the instructions and just worked away, students that are willing to learn and listen come as a close second. That said, going beyond lab time is not something that I’m particularly proud of, since I think students should both be aware of their progress and comfortable with asking the TA questions, such that we can strive towards finishing the lab during the alloted lab time.

"Boris was very friendly and came well–prepared for each lab session. He made sure to help students when they needed assistance without giving them the direct answer (to encourage them to think deeper and arrive at the answer themselves)."

This is somewhat directed towards the TAs, but I feel like once the TA is fed up with the class, they often just want to give away the answers and end the lab as soon as possible. It is quite important as a TA to not get frustrated, and keep a cool head throughout the term, even when faced with students that simply refuse to learn.

CPSC 110, Term 2

While the term started online, we returned to in-person instruction after 4 weeks. Both Zoom labs and in-person labs had its pros and cons, but in-person definitely made conveying ideas a lot easier.

"Boris explains concepts in a clear and concise manner. He is patient, professional and always willing to answer any additional questions :))"

"Boris did a great job in answering questions when I was stuck on problems, was supportive during Problem Set long grading, and was overall great to work with. Thanks Boris! :)"

Yes yes, I am glad I could remain “patient”, “professional”, and “supportive” without going insane. Part of this might be due to that this lab is on Monday, and therefore it is the first lab of the week for me.

"9.5/10 great TA, wished sometimes you could simplify some of your explanation but you are really good at TAing"

"Boris does very well in troubleshooting questions quickly, although his responses are sometimes a bit complex so they take a while to fully understand. He gives good constructive feedback which is usually very helpful in either fixing or knowing how to improve the function for the next time."

"Very well prepared and clear understanding of what he is talking about. Has a tendency to talk quite fast leaving me a little confused on what was just stated Also leaves an intimidating presence when asking questions."

In stark contrast, this lab is on Wednesday, and being the third and last lab of the week for me, I am fresh out of “patience” and “professionalism”. It is also quite interesting to see the favourable percentage over 5 different categories (well-preparedness, helpfulness, consideration of students, ease of understanding, effectiveness as an instructor) all having a minor downward trend over the Monday, Tuesday, and Wednesday labs.

"Boris clearly knows what he's talking about, and he did a great job of helping me find the answer on my own instead of just giving it to me."

"He was very well prepared and was always ready to answer any queries."

"Very kind and knows the material well. very helpful and leads the lab really well. great ta that really knows how to teach students who are confused or struggling."

I don’t know if this is just me reading too much into these comments, but what kind of TAs have you all been having for the other courses if “well prepared” and “knows the material well” became a merit for a TA? I always thought it was just the basic requirement.

Science One (SCIE 001)

Perhaps my favourite class, Science One students were almost always a joy to teach, and since there is a dedicated space for the students, it was much easier to interact with them.

"Boris is single–handedly the only reason why I have not failed physics this year! His enthusiasm makes me enjoy the subject, even when I am absolutely lost in the material."

You might be giving me a little bit too much credit here :)

"Boris was a very effective TA and always gave helpful feedback when contacted both during and outside of OH."

Ah, the joys of Discord. Since 95% of my spare time is spent online, I am almost always reachable, the only exception being classtime and time occupied by other obligations (such as busy TA’ing another course). I think this arrangement has increased my value as a TA by magnitudes, and makes up for some of my weaknesses when compared to Rio and Annudesh.

"I really liked your flexibility and ability to answer all questions. From going to your office hours, I was actually able to understand the music unit!"

"The explanations on the physics of music were really clear and the review sessions were super helpful."

The very first time I looked into intervals and tuning systems was when I was in grade 6. I spent hours on the Wikipedia page for the list of musical intervals, listening to the differences between a tritone and a diminished fifth, and understanding what a “limit” is in terms of tuning. I am very fortunate to be a physics TA under a professor that explicitly wants to teach something that I just so happened to read about many years ago as an aspiring musician.

"– Great TA that knows his stuff :) Though I noticed a lot of his explanations are very theoretical, and I wish he could talk a bit more on exam strategies to answer questions properly."

I almost always want to prioritize understanding over regurgitation, and hence my explanations might come off as more “theoretical” rather than immediately “exam-applicable”. However, I do believe that knowledge about a subject is completely different from skills required for exams. Good feedback, will take that for next year.

"Super helpful and good at explaining physics! Appreciated the late night OH and the super long OH before finals. Thank you so much :)"

I owe this one to Rio. When I was in Science One, Rio always held his office hours on Monday evenings, which I thought were the best time for me personally; I always had time to digest both the material I learnt and the dinner I just ate. Same goes for the long office hours before finals. I think Rio had 9 hours of office hours over the 3 days before finals, and the sheer amount of times that some topics were repeated allowed me to drill the concepts into my mind.

"Boris is very helpful and really takes the time to make sure we understand! He is also very kind and respectful and I never feel embarrassed to go to him with stupid questions/when i can't find my stupid mistakes. I've also loved just getting to talk to him because he is in the major that I am planning on doing next year, and so it's just been really nice to get to hear from someone who is doing what I will be doing next year. Thank you Boris for always being so kind and so willing to chat :)"

And of course, thank you all very much for a great year!