Portfolio | jessechen.net
Portfolio
Currently:
- ENGIN 120 - Engineering Economics
- COMP SCI 169 - Software Engineering
- IEOR 190E - Venture Lab Mobile Applications
- UGBA 196 - Personal Finance
Personal Projects
- Berkeley Campus Shuttle - An Android app that saves you time and frustration by telling you when the next Berkeley Campus shuttle is coming.
- NFC Integration - I integrated Near Field Communication (NFC) technology with the Facebook for Android app as a personal hackathon project at Facebook. As a result, I wrote a tutorial on how to implement NFC technology on the Android platform to help others get started on NFC.
Management and Leadership Courses I have taken
- IEOR 171 - Technology Leadership: We formed groups early on in the semester to work as a team to develop a hypothesis and prediction of an industry change in the next 10 years. My group's semester project was about the potential impact of Near Field Communication (NFC) technology in the United States in the next 10 years. Read our paper here.
- UGBA 196 - New Product Development: An introduction to the engineering design process and conceptual design of products. Emphasis on management of innovation processes for interdisciplinary teams that consists of engineers, designers, and business students.
EECS Courses I have taken:
- CS 61A
- CS 61BL
- CS 61C
- EE 122
- CS 188
- CS 161
- CS 162
- CS 198
- CS 61A - Structure and Interpretation of Computer Programs: This was my first undergraduate computer science course. The class was taught with functional programming - more specifically, Scheme, which is a dialect of Lisp. Emphasized on the skill of closing parentheses and the concept of abstraction - this was not a class that teaches you a programming language, but rather the art of programming.
- Topics we covered in 61A includes: MapReduce, recursion, metacircular evaluator, multipathing, concurrent programming, and interpreters.
- Projects:
- Twenty-One: Implement different strategies for the classic game of blackjack depending on two inputs: customer's hand so far, dealer's card that is face up.
- Adventure Game: Using the fundamental paradigm of OOP, design and simulate a text-based adventure game where there are multiple characters, locations, and objects that can be interacted with. This was a group project and had to collaborate with a partner.
- Logo Interpreter: Design a metacircular evaluator that can use Scheme to interpret Logo commands. This project was tricky because there were minute differences between Scheme and Logo, i.e. Logo uses infix arithmetic expressionswhile Scheme uses prefix arithmetic expressions.
- CS 61BL - Data Structures and Programming Methodology: This was a class that focused on all the various data structures and implementing them in Java. Fundamental dynamic data structures that we covered includes arrays, lists, graphs, hash tables, queues, trees, heaps, and stacks. We learned the tradeoffs between time and memory, and also an introduction to algorithms for sorting and searching.
- Projects:
- PiCTURE: A simpler version of "Photoshop", implemented different photo effects such as rotate, convert to ASCII, blur, and flip. Used basic concepts of data structures such as arrays, and for-loops to process pictures.
- UNIX File System: Simulate the file system in UNIX using tree data structures. Project was loosely specified to allow our group to brainstorm and practice project design.
- BLOCKS: Based off Klotski puzzles, otherwise known as those "sliding-block" puzzles, the goal of this project was to incorporate all the data structures that we learned, such as hash tables and trees, and implement a fast, but memory efficient method way of solving them. Also had to design a front-end GUI to simulate the block movements.
- CS 61C - Machine Structures: This was an interesting class that went from the top to the very bottom of the abstraction in regards to digital computers. We learned about compilers, assemblers, datapath & control, and all the way down to circuit design. We also touched upon a few topics in operating systems, such as I/O, memory management, process switching, and caching.
- Projects:
- World of 61C AdventureCraftHack: A basic object oriented programming project to get our feet wet in C. It involved creating a text-based adventure game where you go around attacking monsters and level up.
- Processor Design: This was the one of the best project I have ever done in my UC Berkeley EECS career. The goal is to use Logism, a graphical tool for designing/simulating logic circuits, to create a 16-bit single cycle CPU. We were not given any pre-built circuits, everything was created from basic gates, multiplexers, and registers. The best part was feeding the CPU a sequence of instructions [similar to MIPS], and seeing the CPU and the various wires and circuits interact to produce the expected output. Like I said, best project I have ever done in my computer science career.
- Caching: Designed our own cache using cache logic. The requirement was to implement the cache logic behind the cache so TIPS can function properly. This was a project that required strong knowledge about the principles of caching.
- EE 122 - Introduction to Communication Networks: I enjoyed this class because I have a strong background in networking and communications. We covered a large spectrum of topics such as the development of TCP/IP, DNS, BGP, Multicast, and congestion control. The class had one semester-long socket programming project.
- Projects:
- Project is similar to SETI@Home - distributed programming between multiple servers and clients. We were to design a client and server model such that they can successfully communicate through TCP and UDP. The servers must be able to support 20 clients, hand out integers to each client for them to check if its a prime number, send out chat messages between clients and use consistent hashing to distribute the prime numbers evenly among the servers. The clients must successfully return various packets with different headers to the server.
- CS 188 - Introduction to Artificial Intelligence: In this class, we were introduced to the world of artificial intelligence. We learned how A* search, and Minimax can be used to efficiently reach a goal state. Markov Decision Processess, and Bayes' Nets were some of the frameworks and probabilistic models that we learned for decision-making. Projects consisted of implementing heuristics and algorithms for the game of Pacman.
- Projects:
- Search: We designed heuristics that were required to be consistent and admissible, such as A* to optimally eat all the food on the board.
- Multi-Agent Pacman: Ghosts were introduced and we had to use minimax, expectimax and alpha-beta pruning to make our decision rules fast and optimal.
- Reinforcement Learning: We implemented reinforcement learning. We designed a Markov decision process framework as well as an approximate q-learning agent for Pacman.
- Ghostbusters: This was the coolest project in the class. This time around, Pacman is actively hunting ghosts in a maze, but he only has a noisy sonar reading from each ghost (manhattan distance from ghost). We used our knowledge of particle filtering and tracking to build a "cloud" of possible locations for each ghost. With each step that is made by Pacman and the ghosts, the "cloud" is constantly updated to track where the ghosts are.
- CS 161 - Computer Security: This course was extremeley interesting because we were often thinking from a malicious point of view, figuring how to break into various computer systems. In this class, we discussed various security topics such as cryptography, network security, and web security.
- Projects
- Security Vulnerabilities: Our first project was to hack into an evil botnet called Calnet using several different known security exploits, such as buffer overflows, arithmetic overflows, and format string hacks in C.
- Network Forensic Analysis: Using Wireshark, Bro, and command line tools, investigate how a company was infiltrated by hackers. We inspect and trace network packets for signs of the Kaminsky attack, directory traversal exploit, session hijacking attack, TCP RST attack, CSRF vulnerabilities, and HTTP packet sniffing.
- CS 162 - Operating Systems: A project-based class that covered topics such as memory allocation, segmentation, paging, and file systems. Worked in a group of 5 to design and build a multi-thread chat server. We had 4 projects total, with each project iterating on top of the previous project.
- Projects
- Thread-safe Chat Server: Build a multi-threaded chat server, meaning, each concurrent user has a consistent view of the system. This involves solving how to ensure concurrent safe access to the data, as well as how to handle the load of a large number of users performing high volumes of concurrent operations.
- Network Programming: Project 1 was just building the server. Using TCP sockets and a custom protocol, we extend it such that the server has the capability to interact with remote clients through a network.
- Cloud Computing: We take our project and send it to Amazon EC2 for deployment. We also add a database to our chat server so it has state and can store offline messages and client data.
- Distributed Chat Server: As the final project, we take our thread-safe, network and database enabled chat server, and break it up into multiple chat servers that work together to balance a heavy load of clients as well as handling all inter-server communications. Using consistent hashing, we were able to effectively distribute the load between all the servers and deliver a consistent state of the entire system.
- CS 198 - Introduction to Open Source Software: Small class for students to learn the skills needed to contribute to open source software and large scale software engineering projects.