Welcome to my projects page! Here, I list research projects, software development projects, and some hobby-related projects as well.
I mostly program things that I need to use, which are usually data analysis scripts, research scripts, and other similar software that usually is too specialized to warrant distribution.
From mathworks.com: Embedded Coder® generates readable, compact, and fast C and C++ code for embedded processors used in mass production. It extends MATLAB Coder™ and Simulink Coder™ with advanced optimizations for precise control of the generated functions, files, and data.
I’ve been working with the Embedded Coder in Simulink for a number of years, incorporating usability features and capabilities including the Embedded Coder Toolstrip and the Embedded Coder Dictionary. Embedded Coder, for me, requires making advanced software engineering concepts simple and usable for users who do not necessarily have software engineering experience.
From mathworks.com: MATLAB Coder™ generates C and C++ code from MATLAB® code for a variety of hardware platforms, from desktop systems to embedded hardware. It supports most of the MATLAB language and a wide range of toolboxes.
MATLAB Coder users want their code to convert seamlessly from MATLAB to C and C++. I’ve worked on making the workflow simple and easy while also giving users transparency and flexibility into how their code works. I’ve worked on the MATLAB Coder Code Generation Report, on their automated fixed-point conversion tools, and on improvements to both GUI and command-line features.
User Experience Tools
Axure RP allows the user to test and demonstrate prototypes with a surprisingly high amount of interactivity, which helps development teams understand what designs look like and how they affect user workflows. I also perform user testing with lightweight Axure RP mockups.
Figma enables very rapid drawing of all kinds of applications through the use of layouts, components, and variants, which lets me rapidly iterate on ideas.
Gidget is a debugging game designed to be provided to teenagers. It is a game where you control a robot using an imperative programming language and help the robot rescue animals and clean up toxic waste. I have been helping Andy Ko and Michael Lee with development behind Gidget. Information has been posted at the University of Washington and some information in the game is available in academic publications.
Gidget and the Idea Garden
As part of our involvement in Gidget, we are implementing Idea Garden features into Gidget. The Idea Garden subscribes to a philosophy of “helping end users help themselves” by trying to help them overcome barriers by instilling them with curiosity and the desire to experiment rather than trying to help them overcome barriers by sweeping them under the rug.
The Idea Garden generally takes the form of tooltips that appear in the context of a person completing a task and provides encouragement, strategy information, and ways to learn. It differs from other intelligent tutoring systems in that the Idea Garden is meant not to be used only in the context of course exercises, but also in the context of someone doing a task without the explicit intention to learn.
Information Foraging in Software Engineering
We investigate how software developers build software using an HCI theory, Information Foraging Theory. The theory is a theory of human behaviour that describes how people forage for information. They are predicted to forage in a way to provide maximum benefit for minimum value and to make decisions based on input from the environment that affects this cost/benefit ratio. This theory is applicable to software engineering because software engineering is a very information-seeking intensive activity. People spend a lot of time looking for things—whether it’s “What does this variable do?” down to, “Where can I start investigating this problem?”
By using this lens, we can investigate how developers identify what information they seek to answer certain questions, how they seek this information, and how to arrange development environments to help developers find the information that they need when they need it.
Personal Programming Projects
The Painter’s Cat (Ludum Dare Page; Github)
You’re a cat in a dream, and you’re able to paint black, Mondrian lines against a backdrop of musical notes. Avoid the colored squares and try to “bound” the colors to score points.
This was my first experience using PyGame and the first time I’ve “finished” writing a game. As I did the entire game in a weekend, the source code is really dirty and the controls and difficulty are a little off.
I work primarily on Mac OS X using a combination of TextMate and the command line. However, after doing Ludum Dare 26 and coding a lot in a very short period of time, I’m becoming a little unhappy because it doesn’t have a lot of programming support for Python (no interactive syntax checking, no tooltips for APIs, indentation issues, no auto-reformatting, the Run Task box stays alive after I quit so I end up with a thousand Run Task windows, etc). I’m thinking of migrating to something else.
I’ve learned a lot of programming languages, mostly in the imperative style. Here’s what I’ve been using recently.
- R (a Matlab-like environment for statistics)
I probably enjoy using Ruby the most out of these languages, but I tend to use Python a lot because its third-party module support is a little more mature.
This album came into existence after a YouTube comment alleged that a particular song from the video game Final Fantasy X was so amazing that no one ever remixed it. I co-directed a fan remix album with The Author and coordinated the efforts 9 musicians, an artist, and a webmaster to release Hurry! A Final Fantasy X Impossible Remix Album. The music’s available for free and a number of its tracks were featured on the front page of Overclocked ReMix, a video game arrangement site that is known for its exceedingly high quality music and talented musicians.