Jack Chou

Nice to meet you.

I'm a software engineer with many years of backend experience and 3 years of cybersecurity experience from sunny San Diego, CA. The San Francisco bay area was my home from 2012 to 2022, and I currently live in New York City. Outside of software, I enjoy playing music, dancing, learning and practicing languages, taking siestas, drinking tea, playing video games, traveling, taking and editing photos, trying new food, and using the Oxford comma.

Jacobs Institute project submission portal

Ruby on Rails

View on Github

This rails web app, affectionally called Jortal, is a simple central repository for project submissions to the Jacobs Institute for Design Innovation at UC Berkeley.

SecureMe

Java | Android SDK & Studio

View on Github

SecureMe is a simple native Android app targeted at versions 2.2+ (practically 100% of all Android versions in use) that automagically helps users improve security settings on their Android devices. SecureMe checks devices for common security settings like securing a lock screen with a password, PIN, or pattern lock; enabling encryption; and other security-related configurations. Instead of users having to look up how to secure their devices, SecureMe tells users at a quick glance which security settings they have configured well (either manually or by default) and which settings they should take a look at to keep their data safe.

bwReport

Python | Cisco NetFlow

bwReport is an internal command-line interface tool for quick, simple, and precise bandwidth usage analysis. It is useful for gathering network usage statistics over both Ethernet and RADIUS Accounting (RFC 2866) Wi-Fi sessions (hosts behind NAT).

jchou.github.io

HTML/CSS/JavaScript | Twitter Bootstrap

View on Github

You're looking at it! My personal website uses Twitter Bootstrap to deliver a responsive, clean experience.

INFO 290: Sensors, Humans, Data, Apps (quantified self, affective computing, etc.)

Emotional pattern recognition from electrocardiogram signals An exploration.

NeuLog electrocardiogram sensor | Slides

This was my first foray into electrocardiogram signals, so I had a few project goals:

  • Play with the NeuLog ECG sensor
  • Explore ECG correlates with:
      Ephemeral emotional states
      Sustained emotional states
In all data recordings, I placed the NeuLog reference on my left forearm and the left and right nodes on my left and right wrists.

Ephemeral emotional states

I wanted to see if I could reproduce a finding by Teo Kah Ming (Department of Mechanical Engineering, National University of Singapore) of multiple P-wave ECG activity following shock, i.e., sudden emotional disturbance. I subjected myself to videos that would present loud, screaming zombie at times unknown to me. The first few trials yielded unsatisfactory data, as electrical signals from my muscle movements created significant noise and interference with the ECG data. This was a result of the relatively crude nature of the NeuLog ECG sensor, the natural physiological response of muscle tension or movement to shock, and the self-experimental nature of this exploration. By the time I was finally able to acquire a clean signal, I likely already developed a desensitized response to the shock, despite the intermittency of the shocks. From this clean signal, I could not perceive any significant irregularity with any component of the PQRST wave complex, but there was an interesting elevation of total voltage between the final resting ECG and the initial resting ECG. However, this likely has no implications and is presumably an artifact of the nature of collecting data with the Neulog sensor.

Sustained emotional states

I briefly experimented with longer periods of data collection, this time while listening to the sad pieces of the Les Misérables film soundtrack. For both I Dreamed a Dream and On My Own, there were a few peculiar segments of the respective ECGs that nicely correlated to key segments of the respective pieces, but again this may be due to noisy interference from muscular electrical signals in response to my emotional states.

Insights

It was interesting to experiment with the NeuLog ECG sensor. It is very sensitive, yet it is simply clipped onto one's wrists and forearm (or knee), leading to noisy interference with the slightest muscle micromovements. Many other factors affected this exploration, including test subject health and variability (I only collected data from myself; next steps would be to collect the same data from others), and reproducibility of both ephemeral and sustained emotional states. Many thanks to Professor John Chuang and Andy Brooks of the UC Berkeley School of Information for providing guidance throughout the course.

face2emoji

Objective-C | Xcode | Affectiva

Native iOS app that captures facial expressions and outputs a corresponding emoji.

CS 162: Operating Systems and Systems Programming

Shell

C

Implementation of a shell, with support for basic built-ins, $PATH resolution, input/output resolution, signal handling and terminal control, and background processing.

HTTP file and proxy server

C

Implementation of an HTTP file and proxy server, with support for directory index resolution, directory listing, and multiple requests per proxy connection.

CS 160: User Interface Design and Development

You Animal!

Java | Android SDK & Studio

Intuitive native Android app that instantly converts an input age to various corresponding animal years.

CS 186: Database Systems

Contribution data visualization

D3.js | Twitter Bootstrap | Flask | Postgresql

Uses D3.js to visualize campaign contribution data from the FEC.

Distributed query implementation

Scala | Apache Spark

Implements symmetric hash join for distributed asynchronous programming using Apache Spark.

Distributed SQL subroutine caching

Scala | Apache Spark

Implements user-defined function result caching using disk-based hash partitioning and in-memory UDF caching to dramatically reduce performance bottlenecks in a general distributed data processing framework.

Efficient text parser and analyzer

Python | Bash

Efficiently captures the contents of large ebooks in a structured form suitable for analysis via a database or statistical package using streaming and out-of-core divide-and-conquer algorithms.

CS 170: Efficient Algorithms and Intractable Problems

Machine learning classifier for optical character recognition

Python

View on Github

Classifies images of handwritten digits and predicts machine-readable digits using the k-nearest neighbors machine learning algorithm.

DNA sequencer

Python

View on Github

Takes overlapping DNA subsequences and assembles the respective full DNA sequence using shotgun sequencing.

Sudoku SAT solver input generator

Python | STP (SAT solver)

View on Github

Generates the input to STP, a SAT solver, which in turn solves a Sudoku puzzle respective to given input.

CS 168: Networking Architecture and Protocols

Reliable transport protocol emulator

Python

Bears Transport Protocol (BTP) provides in-order, reliable delivery of UDP datagrams in the face of packet loss, delay, corruption, duplication, and re-ordering, using fast retransmit and selective acknowledgments to optimize performance.

Distance-vector router simulation

Python

Simulates a network of distance-vector routers. Each router is an instance of a single DV router class and must correctly forward packets throughout the network of router instances in the face of new links, broken links, routing loops, and no central routing authority.

Stateful firewall

Python

Simulates a network firewall on given input and output interfaces. Performs packet capture, analysis, and forwarding based on specified firewall rules. Covers TCP/UDP, DNS, ICMP, HTTP. Modular and extensible to other protocols.

CS 161: Computer Security

Forensics tool

C

A secure metadata extraction tool for PNG and JPEG-Exif images written in C. Extracts data from PNGs and JPEGs in a safe and secure manner to neutralize image data attack vectors. Safely handles malicious input injected into a PNG/JPEG by an attacker.

DNS spoofer

Python | Scapy

Sends packets to hosts making DNS requests on the same local area network in order to impersonate a DNS server and launch DNS spoofing attacks. When successful, redirects unsuspecting users to desired destination.

CS 61C: Computer Architecture (Machine Structures)

Distributed word co-occurrence analyzer

Java | Apache Hadoop MapReduce | Amazon EC2 cloud computing

Answers the question: given a word, what other words are statistically associated with it? Given a target word, we can find words in a body of text that are closely related to it by ranking each unique word in a document by its co-occurrence rate with the target word.

MIPS instruction set emulator

C

Parses instructions in the MIPS ISA to simulate a processor operating on the MIPS instruction set. Sample instructions include bit shifting, reading/writing in memory, arithmetic operations, conditional statements, instruction execution logic jumps, and system calls.

Optimized parallel image processor

C | OpenMP

Performs optimized 2D convolution on images, using kernels to achieve image filter effects such as sharpening, blurring, inverting, and more. Specific optimization techniques include SSE batch processing, register and cache blocking, loop unrolling, matrix padding, and OpenMP multi-threading and parallel processing.

Processor design

Logisim

Simulates a 16-bit processor in Logisim, complete with a specified ISA including arithmetic operations, writing/reading to/from registers and memory, and instruction logic such as jumping and branching.

CS 61B: Data Structures

Sharks and Fish (simulation)

Java

Simulates an ocean containing sharks and fish, which are created and destroyed according to a given set of rules, similar to Conway's Game of Life. Uses run-length encoding to compress the ocean representation.

Network (the game)

Java

Network is a 2-player game on an 8-by-8 board. A player can win by connecting six or more chips orthogonally or diagonally from the player's edge of the board to the opposite edge of the board. Players can play against simple artficial intelligence logic that uses alpha-beta pruning and the minimax algorithm to determine optimal moves.

Weighted undirected graphs and MSTs

Java

This final project combines a variety of data structures and algorithms to implement a well-encapsulated abstract data type to represent a weighted undirected graph. The second part of the project implements the greedy Kruskal's algorithm to find a minimum spanning tree.

CS 61A: Structure and Interpretation of Computer Programs

Hog (the game)

Python

Hog is a text-based dice game. Among several gameplay rules, the game implements (and allows easy extension of) several different strategies to achieve victory using probability and other heuristics.

Tweet sentiment trends visualization

Python (+ graphics/Tkinter)

Data visualization project that collects public geotagged tweets, assigns a sentiment to each tweet based on its content, geographically aggregates tweets, and colors each US state according to its aggregate tweet sentiment.

Ants vs. SomeBees

Python (+ graphics/Tkinter)

Ants vs. SomeBees is a tower defense game inspired by the popular PopCap Games's Plants vs. Zombies. The project is an exercise in and focuses on code modularity and reusability.

Scheme interpreter

Python

Scheme interpreter interprets a subset of the Scheme programming language, naturally focusing on the power of recursion and functional languages.

EE 40: Microelectronic Circuits

Electroencephalogram

Multisim

As the final project of the course, we designed an EEG complete wth its own power source on Multisim and printed custom PCBs. We tested the EEG on none other than our very own Professor Michel Maharbiz (with the necessary safety precautions). In essence, the EEG can detect electrical impulses the brain fires when moving one's eyeballs up/down and to each side.

EE 20: Structure and Interpretation of Systems and Signals

Acoustic fingerprinting and frequency-based music identifier

MATLAB

This project, written solely in MATLAB, is similar to the popular Shazam music identification service to identify music based on acoustic fingerprinting and frequency analysis.

Let's talk.

email: