August 2017 - Present
work in progress
WordDropper
More information to come :)
June 2017 - Present
work in progress
Stream Tools / Window Manager / Stats Tracker
  • a cool image of this thing
  • a cool image of this thing
Growing out of the frustration of having to set up Open Broadcaster Software (OBS) to re-hook all the finicky windows in order to live stream properly, I set out to solve this issue with my own solution. Alongside a previous idea of creating a live graphical APM/stats program, I decided to bundle these two ideas together.
Features
  • Text-based stats tracker (APM, mouse movement, summary statistics)
  • Graph-based stats (APM, Mouse)
  • Modular design allows for multiple windows of the same tool
  • Save settings to disk allows sharing of setups
  • Active window hooks (enable/disable certain windows depending on the currently focused window)
  • Web browser
December 2016 - May 2017
6 months
ExceptionNull
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
Gabriel Ho (PM), Chengsu Chen (Design), Jonathan Li (Dev), and I (Dev) set out to graduate. That's pretty much the summary of this milestone.
"Problem Statement"
There is a 3.6% unemployment rate and 263,000 unfilled jobs in the tech industry as of 2017. This, despite the fact that there were 116,00 tech graduates across colleges in America in 2016. Schools do an amazing job of giving us the foundational skills to work in tech but there is a gap between the classroom and the office. Our platform aims to bridge the void through challenges that emphasize best-practices and real-world interactions. In addition, every paying user will be putting money towards goodwill causes for those who may not be able to afford it.
"Our Solution"
Exception Null is a gamified code-learning platform that presents you with interesting and challenging real-world problems. This is done through a network of peer-reviewers (called gurus) and learners (called users). Users will opt into a challenge (with a choice of single-player, group-challenge, and a versus option for both). From here, users with work to solve a real-world problem. Their solutions will be reviewed by gurus that provide detailed feedback and scores.
April 2016 - May 2017
1 year
Distributed Mentoring: A Fanfiction Independent Study
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
I spent a year with a team of researchers, digging into the world of fanfiction writing. We eventually scraped more than 800GBs worth of data into a database and with the help of Tableau, parsed through the mess of information.
Chi 2017 (First Author)
With its roots dating to popular television shows of the 1960s such as Star Trek, fanfiction has blossomed into an extremely widespread form of creative expression. The transition from printed zines to online fanfiction repositories has facilitated this growth in popularity, with millions of fans writing stories and adding daily to sites such as Archive Of Our Own, Fanfiction.net, FIMfiction.net, and many others. Enthusiasts are sharing their writing, reading stories written by others, and helping each other to grow as writers. Yet, this domain is often undervalued by society and understudied by researchers. To facilitate the study of this large but often marginalized community, we present a fully anonymized data release (via differential privacy) of the metadata from a large fanfiction site (to protect author privacy, story, profile, and review text is excluded, and only metadata is provided). We use visual analytics techniques to draw several intriguing insights from the data and show the potential for future research. We hope other researchers can use this data to explore further questions related to online fanfiction communities.
CSCW 2017
From Harry Potter to American Horror Story, fanfiction is extremely popular among young people. Sites such as Fanfiction.net host millions of stories, with thousands more posted each day. Enthusiasts are sharing their writing and reading stories written by others. Exactly how does a generation known more for videogame expertise than long-form writing become so engaged in reading and writing in these communities? Via a nine-month ethnographic investigation of fanfiction communities that included participant observation, interviews, a thematic analysis of 4,500 reader reviews and an in-depth case study of a discussion group, we found that members of fanfiction communities spontaneously mentor each other in open forums, and that this mentoring builds upon previous interactions in a way that is distinct from traditional forms of mentoring and made possible by the affordances of networked publics. This work extends and develops the theory of distributed mentoring. Our findings illustrate how distributed mentoring supports fanfiction authors as they work to develop their writing skills. We believe distributed mentoring holds potential for supporting learning in a variety of formal and informal learning environments.
August 2015 - September 2015
1 month
SLICK
Fresh out of an internship, I wanted to dive deeper in dependency injection, and what better way than implementing my own solution. At the time, I was rewriting the engine I was using for Powerbot scripting (see below), so the development was focused around that logic.
Constructor Injection
This is the core concept behind Slick's implementation of DI. Instead of always having to type
new Objects(with, a, lot, of, dependencies)
, it's a simple
slick.get(WhatIWant.class)
.
Recursive Injection
If a dependency is not met for a specific class, Slick will recursively attempt to instantiate dependent class objects, until all dependencies are met. This allows for very highly flexible use cases.
#provide
non-injectable types
If there's an external API that you need to use, but can't be wrapped, you can simply
slick.provide(api)
it for use by your dependent classes. This will store it as a singleton instance for injection later on.
Strong Singleton Binding
Require that a class be singleton through all uses? Annotate it
@Singleton
and that's it! Slick enforces that both class definition and constructor parameter be annotated to maintain code clarity. Alternatively, one can also simply #provide the instance.
May 2015 - July 2017
~2 years
PHP 7.1 Commons
Starting originally as a package to hold the common utilities throughout the PHP based projects I worked on, PHP commons has morphed into a PHP 7.1 abusing machine to tackle the issues of the PHP language.
Language
PHP is a language that gets a lot of flack due to its mix of naming conventions and irregular styles. The language package attempts to mitigate some of these by providing standard, safe methods for accessing parameters, checking preconditions, using sessions, etc. This package also provides java-like importing via PHP's
spl_autoload
ing features, so no more
include
s!
MySQL
No one likes connecting to the database, verifying the connection, executing a query, validating and verifying the query went through, then setting up control structures to handle the resulting data, and then finally tearing down. The MySQL package removes all this boilerplate by exposing a very succinct interface that handles all this for you. If more flexibility is needed, the underlying structures are always available for use.
Router
Exposes only a centralized router page to the public server domain, creating an environment of guaranteed entry. No more
include
s or
require
s. This package simply helps lock down your server environment instead of the more traditional "expose all public .php files."
Template
A lightweight, superfast templating engine that outperforms all other templating platforms on the market. Supports nested templating and template field guarantees. No special syntax introduced.
May 2015 - June 2015
1 month
INFO 200 Poster Project
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
At the end of this class's quarter, students (myself included) had to create a representation of a solution to a data driven issue. Instead of a poster, I opted to create a semi-live mock up of my group's idea.
Because the informatics program is built around the interaction of people with technology and data, I developed the site with a very customizable interface. The mock includes internationalization, allowing to change the language between 5 different presets. The mock also allows for customization of the color theme, provided by Bootswatch.
Our Idea
Students and staff at the University of Washington often run into the issue of being unable to find a quiet place to study. Our goal is to bring together these people with quality study spaces. Be it simply a quiet place, a room with classmates, or a hangout spot with friends, our focus is to save time by figuring out how busy places are, so you don't have to.
February 2015 - June 2015
4 months
Stak - The Task Organizer
  • a cool image of this thing
  • a cool image of this thing
Stak started out as a complex bundle of ideas that stemmed from my frustration at current homework-management systems. A change in one assignment's due date cascaded issues all the way down through 30+ assignments which all needed to be changed individually. So Stak was conceived to fill the functionality that was lacking in current systems.
Bulk Task Management
Tired of manually modifying repeated tasks one by one? See how Stak provides a powerful bulk editor for recurring unique assignments.
Reminders
Projects or large tasks aren't meant to be done on the day they're due. So why are they only shown once? Stak integrates reminders for those looming projects and even allows you to segment them down to more manageable bite-sized pieces.
100% Modular
Don't like or need a feature? or two? or three? Disable them! Stak is designed with you in mind, providing plugins and features that matter to you, and allowing you to completely fit out your experience with what only YOU need.
May 2014 - April 2015
1 year
Visual Music Project
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
After watching some music videos with fancy audio spectrum analyzers, I got to thinking: "why aren't these a popular thing anymore?". Looking towards windows media player and the numerous visualizations available, I was inspired to create something similar in providing a framework for which users could create their own designs easily without touching the music itself. Here's to "Bars and Waves " from WMP.
September 2012 - July 2013
~1.5 years
Mercer Island High School Computer Reservation System
Mercer Island High School had multiple computer labs and laptop carts that were available for teachers to reserve for their classroom. The system in place at the time was showing its age and needed a revamp. I took on the responsibility of redesigning and implementing a completely new system.
2011 - January 2014
~3.5 years
KodleeShare: Minecraft
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
Kodleeshare's Minecraft server was a game server started as a place for my friends to play Minecraft together. Starting as a simple vanilla server, we eventually moved to Bukkit and its plugin platform to provide extras like administrative functions, game content, and more. At the request of a fellow friend named Carson Beck, we partnered up and started advertising on various platforms; one of which was Roblox. We turned from a server having 5-6 people iteratively, into 10+ constantly.
My Contributions
With my partner working the PR side of things, I was tasked with providing the service. I created plugins that helped our admin team keep peace within the walls of our server, managed the server hardware so that our uptime was near 100%, and created a web portal for users to manage their in-game accounts. The drive to create a fun and popular platform drove me to gain a deeper understanding of database management, hardware/server infrastructure, front end development, back end development, and game development.
Why It Ended
With changing interests and an aging platform, in December of 2014, we decided to pull the plug on what was one of the most enjoyable two years of our high school lives. We were surprised at how long it lasted in the first place, exceeding our own expectations; but the end was still bittersweet, as it meant the closing of a chapter in our lives. Carson Beck and I poured our hearts and souls into the community and we received tenfold the amount back from our users. For that, we thank everyone who was a part of it.
February 2011 - July 2013
2.5 years
KodleeShare: MIDI
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
The very second website I created (albeit, not the first rendition of it) was this glory of a site. I was at the height of my interest for video editing and music, and I concluded that a dynamic website would be the perfect way to store everything and get some experience with relational databases.
Why MIDI?
At the time, MIDI samples were easy to find, clean up, and redistribute. Piggy backing off of popular songs also provided a means for attracting attention to the project. This allowed me to experiment with a ton of database and web technologies on a site that had a moderate amount of live data flowing.
Search
Don't even ask how this is implemented. But it works (sorta). Playing around with weights, full-text search, and other things that shouldn't be done via relational databases.
Parallax
Laggy to no end, but at the time, was the coolest thing out there. Still is today when implemented correctly.
September 2008 - August 2017
~9 years, on and off
My Personal Website
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
Fru1t.Me is simply my personal website/portfolio where I dump my doings through the years. It's almost like a diary, without the overly embarrassing things.
2007 - September 2015
~8 years
RSBuddy / Powerbot / Runescape Scripting
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
  • a cool image of this thing
Runescape was the all the rave when I was in elementary and partially middle school. Setting itself apart from the entertainment crowd that included Neopets, Maplestory, and adobe shockwave/flash game websites, Runescape commanded an immersive MMO/RPG game within the confines of a browser via Java. But as with all games, you want to be the bigger, better player; or in the case of Runescape, have the highest level in a specific skill. Enter scripting. Scripting, against the rules of Runescape, enabled automating tasks (like mining, firemaking, etc) so that your character would level up while you were away from the computer. While a game killer, this earned bragging rights amongst friends, and ultimately, popularity.
The Start
As a scripter, you would use an API from a handful of providers that did the hard work for you (figuring memory locations, providing hooks, etc). All you had to do was write the actions you wanted to character to perform (like, walk to a location, click specific interface icons to use items, or do actions). With a huge community and tons of example scripts, getting started was a matter of copy-pasting lines and compiling. This was a great dive introduction into programming as you had tangible products from the get-go. The curiosity of performing different actions, or figuring out ways to get around anti-scripting methodologies employed by Jagex (Runescape's creator), led to the improvement in my programming ability. My motivation was no longer to have the most powerful character, but rather, have the most useful and widely known scripts.
My Contributions
I started this adventure into scripting when I was in the 7th grade. By the time the scene quieted down some 4-5 years later, I had more than 250,000 unique users use my scripts, at a peak of 10,000 unique concurrent users. I created a total of 8 scripts which each focused on a different skill within the Runescape realm, with two flagship scripts garnering ~70% of my userbase. As the exhilaration of creating the biggest and best script pushed me to expand my scripts functionality, the technology turned away from in-game features, to out-of-game features like metrics, analytics, and stats tracking on a personal website, throwing me into database management, front end development, and back end development.