Blog Post (Home)
  Blog Post (Home)

Python Decorators: Not just for decoration

January 14, 2019
Tags: Python

Python decorators are syntactic sugar that most people will run into while working with web frameworks such as Flask or Bottle. For example, the following snippet from the Bottle documentation uses decorators to specify a route:

Read More

  Portfolio (Personal)

Showdown.py

January 10, 2019

A Pokemon Showdown! client for Python 3.4 and 3.5. This was written to make it easier to write bots, interact with users, moderate chat rooms, and collect data. Takes advantages of Py3’s async features to allow multiple connections over websockets, maintain IO channels, and to integrate with existing IRC bots.

Source
Tags: Python, Data Collection, Web, Open Source

  Blog Post (Home)

Rock, Paper, Scissors, Fire, Water, Grass

January 1, 2019
Tags: Python, Data Collection, Game

For those unfamiliar with the finer details of competitive Pokemon, it’s basically just a fancy version of rock, paper, scissors. While RPS gives each player 3 options, a turn in pokemon consists of around 4-9 possibilities for each player. Each player then reveals his or her choice simultaneously, and the results of their actions play out. This makes it different than games like Tic Tac Toe, Chess, or Go where only one player is “in control” at a time, and instead more like a game of Poker where two players are forced to reveal their hands at the same time.

Read More

  Portfolio (Coursework)

⭐ Guavabot Rescue

Course: CS170 (Algorithms)
Term: Spring 2019

CS170 (Algorithms) at Berkeley has a long tradition of handing students an NP-complete problem and holding a competition to see who can produce the best computationally tractable approximation. Guavabot rescue gave a two layered problem:

  • Faulty sensing
  • Steiner-tree approximation

Team “go-bears'; UPDATE Teams SET score = 0 WHERE name != 'go-bears';” got rank 23 out of 320 groups. The important thing, of course, was that countless stranded Guavabots around the world were rescued.

As with other projects I can’t really reveal my group’s approach publicly since this project may resurface in future semesters, but if you’re 1) curious and 2) not planning to enroll then let me know!

Source | Specification

Tags: Python, Berkeley

  Portfolio (Coursework)

Penetration Testing

Course: CS161 (Computer Security)
Term: Spring 2019

A close contender for my favorite security project, however since it mainly consisted of breaking things instead of building I hesitate to list this at the top. I was handed an insecure webserver and was tasked to find 7 exploits. To chain each exploit more effectively I ended up writing a few tools in Python to automate generating and sending malicious payloads.

I can’t really list what the exploits were publicly since this project is still in use by the course, but they’re listed out in the private repo along with the tools.

Source | Specification

Tags: Python, Web, Berkeley

  Portfolio (Personal)
  Blog Post (Home)

Hog Contest (Part 2)

June 15, 2018
Tags: Python, Berkeley

Picking up where we left off from Part 1, so far we’ve found a way to generate an optimal strategy for the game of Hog by recursively calculating which moves would be the best. While effective, it certainly wouldn’t have made for much of a contest if everyone who came up with this approach were tied for first. Luckily, the professor was likely aware of this possibility, and threw a wrench into the probabilistic method by forcing the strategies to work with incomplete information.

Read More

  Blog Post (Home)

Hog Contest (Part 1)

June 1, 2018
Tags: Python, Berkeley, Visualization

The first project of my first CS class at Berkeley was to write the logic for a modified version of the dice game Hog. The game itself is pretty simple (roll die to score points, first to 100 wins), and the project was more a less just a warm-up to get everyone used to Python syntax and higher order functions. The extra credit option, however, was a bit more interesting.

Read More

  Portfolio (Personal)
  Portfolio (Personal)
  Portfolio (Coursework)