Other projects that didn't make the cut include teaching undergraduate and graduate courses at the University of Pennsylvania and some software I developed while at school.
My teaching experience at the University of Pennsylvania comes from being a Head TA on CIS320: Introduction to Algorithms, with Prof. Sanjeev Khanna during Spring 2014 and CIS505: Software Systems (Fundamentals of Distributed Systems), with Prof. Matt Blaze during Spring 2013. There I led teams of up to 6 Teaching Assistants to manage classes of up to 193 students, I administered the class back-end, setting up homework submissions on headless UNIX servers, SSH keys and plagiarism detection, I developed Bash scripts for automated software grading, roster management and grade mailing, I designed plenty of homework problems and exams for CIS320, and finally, I supported students extensively (63% and 80% of instructors' responses on Piazza, respectively). I was also a TA on CIS121: Introduction to Data Structures and Algorithms with Prof. Kostas Daniilidis during Fall 2012, where I taught weekly recitations to a class of 7 and lectured occasionally a class of 105 students (e.g., see the midterm review session I designed and presented), among others. I was evaluated by students with 3.5 out of 4 on overall quality as an instructor; compare to an average of 2.81 for the rest of the team.
Finally, I've done some cool C programming projects for classes, like a Unix shell, an interpreter for a first-order functional language, a multi-threaded music streaming server over HTTP, and a compiler for a procedural language, which also included a custom-written Assembly x86 library of standard I/O functions. I've also designed and developed a full-scale distributed chat system over UDP (see attached picture for a screenshot!). This consists of seven threadpools, where each threadpool is responsible for a specific functionality, and threads between different pools communicate with each other through priority queues. Briefly, the functionalities implemented by the pools are: check for alive peers, conduct elections and implement the bully algorithm, exchange coordination messages reliably with another peer over UDP using ACKs and exponential time-outs, transmit chat messages to other peers (FIFO fully-ordered multicast). It also features a super cute ncurses text-based user interface.