About


Welcome!

Hey there, welcome to my site! My name is Palmer and I am currently studying computer science as an undergraduate student in the School of Engineering and Applied Science at the University of Pennsylvania in Philadelphia, PA. I am very proficient in many programming languages, and I guess you could say that I have a knack for programming. At the moment, I am just trying to broaden my horizons as much as possible by working on various projects, which can be found on my GitHub. Since coming to Penn, I also have become quite interested in the theoretical side of computer science and have started analyzing algorithms and writing mathematical proofs both for courses and for fun.

Future

This semester, I am enrolled in two computer science courses. CIS 552 Advanced Programming, which is taught in Haskell, “takes good programmers and turns them into excellent ones.” CIS 240 Introduction to Computer Architecture teaches you how a computer works starting from transistors and bits and working up the abstraction chain to assembly and eventually C. I am very excited for both of these classes particularly because of their different perspectives on programming, CIS 240 dealing with the lowest level and CIS 552 dealing with just about the highest level.

Present

I am a TA for CIS 120 Programming Languages and Techniques I for my second straight semester. My responsibilities include leading a weekly recitation, holding weekly office hours, and grading homework and exams.

Over the summer, I successfully completed a Google Summer of Code project for the Elm Software Foundation. My project laid the foundations for using Elm to make native iOS apps. I learned a great deal during this project and really enjoyed it. You can look at the the code for the project on GitHub or read more about it on the GSoC website. (For the uninitiated, Elm is a functional programming language for creating web apps. It has no runtime exceptions, a superb refactoring and debugging experience, and an excellent community. It is a really fun and useful language and I strongly encourage you to check it out.)

Past

During my freshmen year at Penn, I was enrolled in four computer science courses: CIS 120 Programming Languages and Techniques I and CIS 160 Mathematical Foundations of Computer Science in the fall and CIS 121 Data Structures and Algorithms and CIS 262 Automata, Computability, and Complexity in the spring. CIS 120, which is taught in OCaml and Java, covered abstraction and modularity, test-driven development, and how to implement basic data structures. In CIS 160, I learned graph theory, set theory, and combinatorics, as well as how to write rigorous mathematical proofs. In CIS 121 I implemented data structures such as union-find, tries, binary heaps, priority queues, hash tables, resizable arrays, graphs, and BSTs. I also learned about and how to perform rigorous runtime analysis on many algorithms including stable marriage (Gale–Shapley), minimum spanning tree algorithms (Kruskal’s and Prim’s), graph traversals (DFS and BFS), shortest path algorithms (Dijkstra), union-find operations, sorting algorithms, Huffman coding, LZW compression, min-cut approximation, etc. CIS 262 taught me about finite automata (deterministic and non-deterministic), regular languages, context-free grammars, complexity classes, NP-complete problems, RAM programs, and Turing machines.

Two summers ago, I interned at Sefaria as a software engineer. The most prominent contribution I made was the export to drive feature for source sheets. You can read about it here.

In the summer of 2015, I experimented with computer vision using the OpenCV library. My primary project was finding an effective method of determining the gender of a person in real-time using full body images (i.e. no face detection). This project is still a work in progress.

During my junior year of high school, I created a content management system with a friend of mine in Computer Programming Club. I wrote the entire backend using Node.js (Express and MongoDB), as well as a good portion of the frontend using Jade (a nifty little HTML templating language), CSS, and JavaScript with jQuery.

Beginnings

My programming career started in 2012 when my school’s engineering club was building a rudimentary 3D printer, and we needed someone to design some software for it. Despite being a high school freshman and having little to no prior programming experience, I decided to take on the challenge. To suit up for the task, I started learning Python. After completing that project I knew I had caught the coding bug, and went on to teach myself JavaScript, Processing, Java (including the whole AP Computer Science curriculum), and a slew of other programming languages.