Skip to content ↓

school projects by Vincent H. '23

aka why i havent been writing in the last few weeks

apparently i haven’t made any blog posts about classes yet so here’s one

i had the misfortune and privilege of taking three classes with final projects this semester. misfortune because all three were due within the same 36-hour period during dec 8th and 9th, making the preceding days and weeks extremely busy, and privilege because i thought all three of the projects were interesting and enjoyable to work on


i. harmony and counterpoint i (21m.301)

21m.301 is one of the early music theory classes at mit. it assumes the ability to read knowledge as well as basic knowledge of key signatures / intervals / scales and then walks you through the theory behind first/second/third/fourth-species counterpoint while also guiding you through singing and piano exercises

the final project is to compose a movement of a string quartet, and it’s cool because on the last day of class they invite a local string quartet group to sight-read and record everyones’ compositions. the actual assignment isn’t very hard – there’s just a checklist of requirements your music has to satisfy, like usage of certain chords and harmonic concepts and total length, so this doesn’t have to be a particularly difficult project. but if you’re like me and want your recording to actually sound good or have a lot of opinions about how music “should” sound, you end up spending a large number of hours on composition

and i think i’m pretty happy with how it turned out! having other people perform music you wrote is always a very surreal experience. here’s a link to the recording and a pic from class: 

a string quartet came to class!

the main thing i realized about my music preferences this semester, both from composing for 21m.301 and from arranging for ohms, is that i’m a strong believer in form follows function (as it pertains to music, not architecture). as in, composition should be done with a specific kind of sound in mind, and any musical construct should only be employed when it brings you closer to the desired sound. or put another way, musical complexity for the sake of complexity or theoretical significance simply doesn’t interest me. for instance, in the case of my ohms arrangement (1:02:00 here) the entire work is designed in an attempt to maximize the power of the second solo; in the case of my 21m.301 project i wanted as high-quality of a recording as possible under the constraint that the musicians would be sightreading, so i tried to write a slow/gentle piece and avoided anything unnecessarily complicated. i don’t think i was particularly successful in either instance as i’m still inexperienced in writing music, but regardless this practice of highly intentional design is very important to me


ii. computation structures (6.004)

6.004 is an overview of the structures that allow computers to accomplish anything, ie. how is it possible for a chunk of metal to perform almost any computation you can think of? it covers topics like assembly languages, circuit and logic gate design, processors, memory systems, etc. and is probably one of the most enlightening classes i’ve taken at mit – at the beginning of the semester i wrote code on a daily basis but had no idea how code execution actually worked, whereas now i think i have a good understanding of all the main steps

the 6.004 final project is completely optional, but everyone i talked to who worked on the project agreed it was the most rewarding part of the class, so i decided to try it .01 okay fine this creates some selection bias, but what can you really do about it then i discovered it also has a ridiculous difficulty curve and the worst-designed grading scheme of any assignment i’ve seen at mit, in the sense that the time spent : points earned ratio is at least 5x higher for the project than the rest of the class. i asked some tas about this and they said (paraphrased) yeah, we have to keep the project completely optional and worth a low number of points because otherwise too many people would fail the class

anyway, the project revolves around sorting arrays as quickly as possible. first you write the software (in assembly) to do the sorting, then you design the processor the software runs on, and then you try to streamline both the hardware and software to make the final sort runtime as fast as possible. i had a lot of fun optimizing the assembly and processor, writing special circuits to accelerate base cases, implementing if/else branch prediction, and so on, but even after spending a large number of hours doing so i still ended up with a result around 4000 nanoseconds slower than the target runtime. at that point i ran out of ideas for further optimizations to implement and gave up. it really is a great project though and i don’t regret choosing to do it


iii. robotic manipulation (6.843)

6.843 talks about algorithms for vision (helping robots make sense of the input they get from sensors and cameras), motion (controlling the positions, torques, velocities, etc. of various robot joints so they can move around and pick up stuff), and planning (high-level stuff so that a robot can break down complex tasks like “clean the table” into subproblems and choose an order in which to execute them). the professor does a good job of structuring the class and lecturing in a way that is accessible for people like me who’ve never worked with robots before, which i appreciated a lot. the final project for this class is completely open-ended, so my project group decided to write our own physics simulator for training robot behaviors

the main idea behind our project is the following: most intro physics classes and basic physics models will model contact forces as being exerted at a single point between two rigid bodies. however, in reality, every time two objects touch, the objects both deform slightly eg. when you stand on the ground you’re actually creating depressions in the ground and sinking slightly, and the same is true for literally all other contact; the deformation produces an entire surface of contact where the force between the two objects is applied, rather than just a single point force

this observation allows you to model contact forces more realistically and also simulate contact with soft objects, so we wrote a lot of code to carry out force computations and physics simulations efficiently under this “hydroelastic” model of contact that other people have written some papers about. the actual displays of the simulation we built aren’t particularly special and look like very ordinary physics simulations:

but regardless i think this is a cool and somewhat counterintuitive framework for thinking about how the world works and what actually happens when you touch stuff!

  1. okay fine this creates some selection bias, but what can you really do about it back to text