Posts by Collection

portfolio

Visualizing TwitterTrails Stories (2018.1 - 2018.10) [poster]

TwitterTrails is a tool that allows members of the media to track the trustworthiness of stories shared on Twitter co-built by Panagiotis Metaxas at Wellesley College. My prototype visualizes the stories (circles) and their tags (linked lines connecting the circles to the dots on the outer bigger circle) alongside their magnitudes of spread (sizes of circles) and levels of trustworthiness (blue=undisputed, red=doubtful) as determined by TwitterTrails’ algorithm. With this interactive visualization, users are able to focus on stories/tags of their interest through the filtering mechanism and interpret metrics of a story more easily without examining its associated tweets.

Venbrace (2019.1 - 2020.7) [thesis] [poster] [demo]

Venbrace is a textual representation for the block-based MIT App Inventor. Its design is principled and empirically evaluated through two user studies. Although no conclusive evidence was found from either study, this project is my first exploration in the space of human-centric programming language design.

Projection Boxes for Education (PB4Edu) (2020.8 - 2021.3) [paper] [talk]

We used Projection Boxes, a Live Programming visualization, in an introductory programming class with 600+ students at UCSD over one academic quarter, and found that students preferred Projection Boxes to the baseline IDE and considered them helpful for their learning.

PopPy (2021.1 - 2021.3) [paper]

I explored the idea of PopPy in collaboration with Kasra Ferdowsi in a class project. Also built on top of SnipPy, PopPy allows the user to write partial instead of full specifications for program synthesis, which can be especially useful when the specs involve long, complicated data structures.

SnipPy+ (2021.3 - 2021.9)

Built on top of SnipPy, SnipPy+ features a new interaction flow where the user can constantly interact with the synthesizer without leaving and restarting the specifications writing process: they can (1) see synthesis results as they are typing in specifications and (2) keep modifying the specifications / inspecting new synthesis results, until they intend to exit the process.

Debugging GUI Applications (2021.12 - 2022.9) [paper]

GUI applications often preserve complex behavior building upon at least three layers of information: GUI changes, code execution, and user-interactions. To help programmers reason about the behavior of GUI applications, we implemented a debugger that directly displays intermediate GUI states without requiring probing into code execution. Without using logs or breakpoints, users can see a timeline of changes in the GUI and their connections to the code in the tool, and such information is always up-to-date to the code.

Online Z3 Guide (2022.6 - 2022.9) [code]

I implemented the Z3 Guide, a 100% client-side web-based programming/learning environment for Z3 during my Internship in summer 2022 at Microsoft Research, working with Ayana Monroe, Dr. Nikolaj Bjorner and Dr. Peli de Halleux. The development of Z3Guide adopted an iterative design, and has been well perceived by educators and learners of Z3. It is also a first step towards reviving rise4fun, a legacy web environment for research tools developed at RiSE @ MSR. See my fork of the version concluded at the end of my internship, or here for the most recent official Z3Guide.

Functional Debugging (2022.9 - 2023.1) [paper]

Programmers use debuggers for imperative languages to facilitate debugging. How about debuggers for functional languages? Do functional programmers use debuggers? Or even, how do functional programmers debug? We do not have enough evidence to answer these questions. As an initial step, we interviewed four expert Haskell programmers to find out. Our preliminary findings show that while debugging strategies for Haskell are similar to strategies for other languages, some features of Haskell and functional programming introduce challenges to using these debugging strategies.

Live Programming in Validating AI-Generated Code (2023.1 - 2023.9) [paper]

AI-generated code is helpful as building blocks towards a complete program, but validating the behavior of such code is not easy. What if we utilize live programming to facilitate the validation of AI-generated code? We built a prototype incorporating live programming and an AI-powered program synthesizer and probed its effects through a user study. Our results demonstrate the effectiveness of live programming in validating AI-generated in a variety of ways.

publications

Paper Title Number 1

Published in Journal 1, 2009

This paper is about the number 1. The number 2 is left for future work.

Recommended citation: Your Name, You. (2009). "Paper Title Number 1." Journal 1. 1(1). http://academicpages.github.io/files/paper1.pdf

Paper Title Number 2

Published in Journal 1, 2010

This paper is about the number 2. The number 3 is left for future work.

Recommended citation: Your Name, You. (2010). "Paper Title Number 2." Journal 1. 1(2). http://academicpages.github.io/files/paper2.pdf

Paper Title Number 3

Published in Journal 1, 2015

This paper is about the number 3. The number 4 is left for future work.

Recommended citation: Your Name, You. (2015). "Paper Title Number 3." Journal 1. 1(3). http://academicpages.github.io/files/paper3.pdf

talks

Talk 1 on Relevant Topic in Your Field

Published:

This is a description of your talk, which is a markdown files that can be all markdown-ified like any other post. Yay markdown!

Conference Proceeding talk 3 on Relevant Topic in Your Field

Published:

This is a description of your conference proceedings talk, note the different field in type. You can put anything in this field.

teaching

CSE 230: Data Structures in Java (Spring & Fall 2018)

Tutor, Dept. of Computer Science, Wellesley College, 2018

This is the CS2 course for students after the intro sequence. In this course, ~80 students learned about data structures and object-oriented programming in Java. Every week as the tutor, I assisted lab sessions, held office hours for group (sometimes individual) help, graded assignments, and attended staff meetings.

CS 251: Principles of Programming Languages

Tutor, Dept. of Computer Science, Wellesley College, 2019

This was a core course for Wellesley College CS majors that exposed students to programming language concepts. In this course, ~40 students learned about lambda calculus, types, parsing, language-programming, etc. in Racket and Standard ML. Every week as the tutor, I held office hours, graded assignments, and attended staff meetings.

CSE 230: Graduate Programming Languages

Teaching Assistant, Dept. of Computer Science and Engineering, UC San Diego, 2021

This is a graduate-level course that exposes students to advanced programming language ideas. In this course, ~200 students learned about lambda calculus, types, parsing, language-programming, etc. in Haskell. Every week as the teaching assistant, I held office hours, graded assignments, and attended staff meetings. At the end of the quarter, I gave synchronous feedback on final project presentations.

CSE 8A: Intro to Programming in Python

Teaching Assistant, Dept. of Computer Science and Engineering, UC San Diego, 2022

This is the CS1 course for students new to programming. In this course, ~500 students learned about primitives, data types, arithmic, control flow, and data processing in Python. Every week as the teaching assistant, I led 60-minute discussion sections and 60-minute lab sessions, designed lab assignments, held office hours for conceptual questions and lab hours for programming assistance, graded assignments and exams, and attended staff meetings.

CSE 193: Introduction to CS Research

Instructor of Record, Dept. of Computer Science and Engineering, UC San Diego, 2023

This undergraduate-level elective course is mandatory for participants in the ERSP program, mainly second-year undergrauate students and first-year transfer students new to research. In this course, 53 students learned about various kinds of Computer Science research, literature review, experimental and analysis techniques, research ethics, and collaborations. As the instructor of record, I led 90-minute lectures twice a week, held weekly office hours for individual and group advising and mentoring, provided feedback on research proposals and presentations, and oversaw a teaching assistant who facilitated grading and weekly meeting with students.