I'm Ethan, a student at Cornell Engineering interested in hardware, programming languages (PL), and systems. I'm a part of Cornell Electric Vehicles, and I'll be working as a PL researcher with CAPRA over the summer.
Outside of academics, I've done a lot of personal projects, from reverse-engineering to creating interactive physics lessons. If you're interested, you can also check out my blog. I'll especially be maintaining my class reviews page throughout my undergraduate career.
I wrote an optimizing compiler from scratch in OCaml with two friends. My major contributions involved:
My other two friends wrote the IR generation, register allocation, rest of the parser/lexer, and randomized testing.
I am creating a Simultaneous Localization and Mapping library, integrated with ROS, for my project team. This subproject implements the Iterative Closest Points (ICP) algorithm. Scan matching uses ICP to determine position and velocity from laser scans.
I reverse-engineered the object file format on Apple software, designed an extensive analysis tool, and wrote documentation for compiler developers.
I programmed an interactive physics lesson on the principle of least action with simulations and animations. It was featured by Grant Sanderson in the Summer of Math Competition, winning top 100 and a spotlight in the results.
This is a UNIX TUI library that I wrote, golfed (i.e., wrote in as few characters as possible) to 869 bytes.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <termios.h> #include <fcntl.h> #include <poll.h> #define I STDIN_FILENO #define O STDOUT_FILENO #define P printf #define U struct termios #define E "\033" #define Y(x)TC##x##FLUSH struct tui{int w;int h;char k;int f;U t;U u;char*b;struct pollfd p;}; #define tui_begin(T,W,H)T.w=W;T.h=H;P(E"[?25l");T.f=fcntl(I,F_GETFL);tcgetattr(O,&T.t);fcntl(I,F_SETFL,T.f|O_NONBLOCK);T.u=T.t;T.u.c_lflag&=~(ECHO|ICANON);tcsetattr(O,Y(SA),&T.u);T.p.fd=I;T.p.events=POLLIN;T.p.revents=0;T.b=malloc(W*H);memset(T.b,' ',W*H); #define tui_end(T) P(E"[?25h");fcntl(I,F_SETFL,T.f);tcsetattr(O,Y(SA),&T.t);free(T.b) #define tui_keys(T) T.k=0;if(poll(&T.p,1,5)>0)read(I,&T.k,1) #define tui_draw(T) P(E"[H");for(int i=0;i<T.h;i++){for(int j=0;j<T.w;j++)putchar(T.b[i*T.w+j]);putchar('\n');}tcflush(O,Y(IO))
I programmed a 3D graphics pipeline from scratch that can render triangle primitives using ray casting.
The next steps are to incorporate lighting, which is tricky, especially given that this project is entirely on the CPU.
Here are some miscillaneous projects I've worked on. Keep in mind that some are rather old!
You can read my statement on privacy here.