Forrest Briggs' Portfolio

Table of Contents
  • Class Projects At Harvey Mudd
    • 3D Golf Game
    • 3D Fluid Dynamics Simulation of Smoke
    • Automating the Discovery of Disaster Related RSS News
    • Quantum Computing

  • Research at Harvey Mudd
    • Identifying Introns in the Genome of T. thermophilla
    • Machine Vision for an Autonomous Mars Lander
    • Functional Genetic Programming and Exhaustive Search with Combinator Expressions

  • Music Visualization
    • Fractogroovalicious
    • Ultragroovalicious
    • OpenGL Extension to the WhiteCap Visualizer Engine
    • Visualizer for The White Stripes' Icky Thump Album
    • Music Muncher
    • SoundKeyframeTool
    • Differential Dynamics, Set to 'Hong Kong Triad'

  • Independently Published Games (Mac OS X)
    • Crystal Catastrophe
    • Lumox 2

  • Independently Published Games (Flash 9 / ActionScript 3)
    • Xonf
    • Space Miner
    • How Many Elements Can You Name in 10 Minutes?
    • Cave Flyer
    • Magic Plant

  • Miscellaneous
    • TinyML
    • Squishy Blue Bubble!!
    • Texas Hold 'Em Oracle

  • Mac OS X Graphics Demos
    • Fractalicious
    • Plant Growth
    • OpenGL Feedback
    • Procedural Planet
    • Real-Time Iterated Function Systems in OpenGL
    • Thousands of Tiny Dots

  • Windows Graphics Demos
    • Real-time Ray Tracing
    • Software 3D Engine
    • Hazy Lenses
    • Bubbles and Water
    • Metaballs and Burn Transition

  • Independently Developed Websites
    • MakeCloud.com
    • FeedMarklet.com
    • Video Lecture Database
    • WizzardWiki

  • Work for NolteMedia
    • UrbanStreamRestoration.com

  • Work for The Learning Annex, LLC.
    • BigMoneyExpo.com
    • OneMinuteU.com
    • 'What are my friends learning?' Facebook Application

  • Computer Vision Experiments
    • iSight Image Classifier
    • ActionScript 3 Edge and Motion Detector


Class Projects At Harvey Mudd

3D Golf Game
Rediculosity Golf is a 3D OpenGL golf game, written in C++, for Large Software Development. Some of its best features include:
  • A MilkShape3D model loader
  • Ball-triangle physics that runs efficiently with 30,000 triangles, using an octree space-partioning scheme to accelerate collision detection.
  • Particle systems
  • 5 Courses

3D Fluid Dynamics Simulation of Smoke
For our final project in Computer Graphics, Jon Dodge, Brad Tennis and I developed this 3D Navier-Stokes simulation of smoke, in C++. Our implementation is based on the 2D algorithms given in "Fast Fluid Dynamics Simulation on the GPU," by Mark Harris. Thanks to Prof. Jon Jacobsen for helping us derive the analogous 3D equations.

This image shows the temperature and velocity fields during a simulation, which started with a cube of smoke.

Click here to download a movie of the fluid (3.5MB, MOV)
After recording the results of a simulation to determine how the smoke particles move, we rendered it in PovRay to model volumetric scattering of light.

Automating the Discovery of Disaster Related RSS News
The Harvey Mudd Clinic program is a year-long class in which a team of students and a professor (myself, Prof. Chris Stone, Ryan Ausanka-Crues, Andrew Campbell, and Bill Hewitt), work to solve a real-world problem for a company. We worked with The National Center for Crisis and Continuity Coordination to help them lessen the burden on their employees of sorting through news articles from thousands of sources every day, looking for the few news articles which are relevant to disasters. Our solution consisted of a large-scale news aggregator, duplicate news-item filter, and text classifiers based on Bayesian probability, and neural networks with principle component analysis and random projection for dimensionality reduction. We also delivered 122 pages of documentation, a poster, and gave 4 presentations. Links to the last presentation and the poster are below:

Download Presentation Slides (pdf)
Download Poster (pdf)

Quantum Computing
Under the supervision of Profs. Ran Libeskind-Hadas, Chris Stone, and John Townsend, I did a semseter of independent study on Quantum Computing. To conclude this study, I gave a presentation entitled 'Quantum Computing for Computer Scientists', with the goal of providing a comprehensible but accurate introduction to the field, for an audience that is familiar with Computer Science, but not with Quantum Mechanics. You can download the presentation slides below:

Download Presentation (pdf)

Research At Harvey Mudd

Identifying Introns in the Genome of T. thermophilla
Prof. David Asai's Lab at the the Harvey Mudd Biology Dept. is interested in T. thermophilla because it is a model organism in which to study the molecular motor Dyenin. The geneome of T. themophilla was sequenced, but not annotated, which means that the DNA sequence contains introns. Introns are sequences of DNA which are not translated into proteins. In order to know what protein a DNA sequence will make, it is necessary to know where the introns are. Unfortunately, there is no known rule that describes exactly where introns are located, but there are lab proceedures that can verify the presence of a suspected intron. However, these proceedures are time consuming, so it is necessary to make well informed guesses about the locations of introns in order to find them expediently. Working with Profs. Asai, David Harris, and Elizabeth Sweedyk, I developed a software package to predict the locations of introns the genes of T. thermophilla. To find new introns, we used a combination of statistics from known introns, as well as the results of local sequence alignment tests with BLAST against homologous proteins. I also developed a Mac OS X graphic user interface to all users to explore and visualize information about possible introns.

Download Poster (pdf)

Machine Vision for an Autonomous Mars Lander
It takes several minutes to send a message to Mars at the speed of light, which makes it difficult to control a spaceship as it is landing. Thus, it is desirable to have a spaceship that can land itself. However, it must not land in a crater, or on a slope too steep that it will tip over, or in a patch of large rocks. Prof. Ruye Wang (Harvey Mudd), and Dr. Yang Cheng (Jet Propulsion Laboratory, NASA), and I worked on a solution to this problem wherein a Mars lander is equiped with a downward-facing camera, and takes pictures as it descends. Our goal was to write software to analyze such a series of images (with additional data from onboard gyroscopes and accelerometers), to determine safe places to land, and to calculate the position and the orientation of the lander relative to the landing sites. I developed a software package to simulate a moving ship with a mounted camera, taking pictures of a 3D model of the surface of Mars, obtained from satelite data. The software allowed us to test the accuracy of various algorithms that determine the ship's motion, because using the simulation, it is possible to know exactly how the ship has moved, and compare that to the output determined by analyzing the pictures it takes. I implemented and tested the motion estimation algorithm from "Estimating 3-D Motion Parameters of a Rigid Planar Patch, II: Singular Value Decomposition" by R. Y. Tsai and T. S. Huang.

Download Poster (pdf)

Functional Genetic Programming and Exhaustive Search with Combinator Expressions
Prof. Melissa O'Neill and I did two semesters and a summer of research on program representations for genetic programming. We showed that combinator expressions are a powerful program representation for genetic programming and ordered program search, because they provide the full expressive power of polymorphic functional programming languages such as Standard ML or Haskell, but have a very simple structure, which makes them well suited to manipulation for the purposes of evolution. We published two papers on this research:

Forrest Briggs and Melissa O'Neill. Functional genetic programming with combinators. In The Long Pham and Hai Khoi Le and Xuan Hoai Nguyen editors, Proceedings of the Third Asian-Pacific workshop on Genetic Programming, pages 110-127, Military Technical Academy, Hanoi, VietNam, 2006. (Download PDF)

Forrest Briggs and Melissa O'Neill. Functional genetic programming and exhaustive program search with combinator expressions. To Appear in the KES Journal, 2008.

Music Visualization

Fractogroovalicious iTunes Visualizer
Fractroogroovalicious was my first iTunes visualizer. It uses a highly optimized and hackish adaptive-subsampling algorithm to render Julia fractals that react to music in real-time. It is available as a freeware download. Download Fractogroovalicious.


Ultragroovalicious iTunes Visualizer
Ultragroovalicious was my second visualizer. It is written in C++, and uses OpenGL for 3D effects. Some of the effects include electromagnetic field lines and a swarm of dancing insects. Ultragroovalicious has been distributed on CDs included with MacAddict, MacWorld, MacWorld UK, and Mac Fan Japan magazines. For more information about Ultragroovalicious, visit www.groovyvis.com.


OpenGL Extension to the WhiteCap Visualizer Engine
SoundSpectrum, Inc. is the maker of the popular G-Force music visualizer (the defualt iTunes Visualizer is a modified version of G-Force). In the summer of 2006, I worked with Andy O'Meara, the creator of G-Force and Whitecap, to extend the SoundSpectrum cross-platform, cross-media player visualization engine from purely software based rendering to also being able to render using OpenGL. This amounted to implementing OpenGL port and context management code for Mac OS X and Windows in C++. I also developed several new visual effects in the engine's scripting language, to utilize some of the new rendering capabilities.

Click to Visit SoundSpectrum's WhiteCap Screenshot Page

Visualizer for The White Stripes' Icky Thump Album
A manager for The White Stripes asked me to write a music visualizer for their new Album, Icky Thump. In collaboration with SoundSpectrum, Inc., I developed 10 visual effects in Python and OpenGL, using the red and white button theme of the album. Due to legal disputes between SoundSpectrum and The White Stripe's management, the visualizer was not released. However, screenshots are available:


Music Muncher
Music Muncher is a game that runs as a plugin inside of iTunes. What happens in the game is determined by the music that is playing.

Click to Visit the Music Muncher Page

SoundKeyframeTool
SoundKeyframeTool finds precise beat and note timing for music. It can be used to create tightly synchronized audiovisual compositions (see Hong Kong Triad + Differential Dynamics), or games which closely correlate gameplay and music (see Lumox 2). To get the timing information for a song, a user roughly taps a key along with the beat. The tapping does not have to be very accurate. After about 10 taps, it runs an algorithm that finds a regular beat reconstruction that optimally matches the user's tapping. To find this beat reconstruction, it assumes that beats are evenly spaced (which works extremely well with computer generated music, and not as well with human played music). This beat period is simply the average delay between user taps. Next, it calculates the phase for the beats which minimizes the sum-squared error between the reconstructed beat and the user's taps (I derived a closed form expression for the optimal phase by setting the derivative of the sum-squared beat reconstruction error, with respect to the phase, to 0). After calculating the basic beat of a song, the user can press other keys to record moments of special drama or other keyframes in the song, which are automatically snapped to beat timing.

Click to Visit the SoundKeyframeTool Page

Differential Dynamics, Set to 'Hong Kong Triad'
Computer-based music-visualization pioneer John Whitney introduced a method of creating an animation that is visually analogous to music, in the sense that it creates tension and resolution by cycling regularly between chaos and order (much like a melody meanders from its base note, creating tension, and then eventually returns, creating resolution). This technique is called differential dynamics. It consists of a collection of objects moving at rates which are multiples of each other. Sometimes the objects appear jumbled, but at regular, predicatble intervals, they all line up. For my final project in Harmony of Light and Sound, I used SoundKeyframeTool to get precise beat timing information for the song 'Hong Kong Triad', by Thievery Corporation. Then, I wrote visuals based on the principle of differential dynamics that synchronize with the song in such a way that whenever all of the moving objects align, it occurs exactly on a musical beat. The program is written in C++ and OpenGL, and runs in real-time on Mac OS X.


Click here for a screenshot
Click here to download a movie (45MB, H264 MOV)

Independently Published Games (Mac OS X)

Crystal Catastrophe
Crystal Catastrophe is a game for Mac OS X, based on the mechanics of Super Puzzle Fighter II for Playstation (a little bit like Tetris). Jon Dodge, Brad Tennis and I developed the game engine for Crystal Catastrophe from scratch in C++. The game engine provides an OpenGL drawing in either windowed or full screen mode, with screen resolution detection and switching, keyboard and mouse input, sound, bitmap-font text rendering, and resource management. The game features a 50 level puzzle mode, 10 AI skill levels (tuned by evolutionary competition), and 2 player vs. mode. Jason Arold made the graphics for the game in Maya.

Click here to visit the Crystal Catastrophe page

Lumox 2
Starting with the engine from Crystal Catastrophe, Brad Tennis and I set out to develop a puzzle game based on the mechanics of popular Playstation Portable game Lumines. Lumox 2 is an arcade / puzzle game in which the player must form groups of blocks of the same color, so they can be swept clear by a beam of electricity. What makes this game special is that nearly every aspect of it is exactly synchronized to the beat of its original 35 minute sound track, by Trademark. For example, blocks move down every four beats, and electricity sweeps every 16 beats. As the player's score increases, the music tempo adjusts to smoothly vary the difficulty of play, keeping the player in their "Flow zone". The visuals of the game are inspired by concepts from music visualizers; at any given time, the what the player sees is a composition of a color scheme, a block texture style, a block grid pattern, and a background effect. There are thousands of ways in which these aspects of the visuals can be combined. Other visual effects include the background grid rippling when blocks are destroyed (it is actually a mesh of springs), blocks leaving tracers, and blocks disappearing in a puff of smoke (with perlin velocity field driven particles, to quickly approximate turbulent fluid). Lumox 2 is over 25,000 lines of C++.

Reviews:
"Lumox 2 delivers an excellent gameplay experience that is both fun and addictive." 8.25 / 10 rating
Inside Mac Games

"In short, Lumox 2 is breathtaking just to look at, and very, very engrossing to play."
MacWorld


Click here to visit the Lumox 2 page
Click here to watch a movie of Lumox 2 (32MB, MOV)

Independently Published Games (Flash 9 / ActionScript 3)

Xonf
Save humanity from an invasion by a never ending swarm of aliens, each of which is different. In this top-down space shooter, the enemies and their flight paths are procedurally generated, so they are always different. The shield reflection and combo mechanics are inspired by the old-school classic Mars Matrix.

Click here to play Xonf

Space Miner
Pilot your space ship through dangerous asteroid fields to collect precious crystals. Avoid the spike balls and turrets that oppose you.

Click here to play Space Miner

How Many Elements Can You Name in 10 Minutes?
Test your knowledge of chemistry. How many elements can you name in 10 minutes?

Click here to play 'How many elements can you name in 10 minutes?'

Cave Flyer
Fly your ship through an ever winding and shrinking cave. Go as far as you can.

Click here to play Cave Flyer

Magic Plant
Help a magic plant grow by giving it the elements it needs.

Click here to play Cave Flyer

Miscellaneous

TinyML
TinyML is a minimal, polymoprhic, lazy functional programming language implemented in SML. Including lexical analysis, parser, evaluator, static type checker, and test cases, the source code for TinyML is under 700 lines of code. The type system supports arbitrary algebraic recursive data types, such as lists, tuples, trees and options.

Click here to visit the TinyML page

Squishy Blue Bubble!!
Squishy Blue Bubble!! is a toy for Mac OS X Dashboard. It is a squishy bubble that follows the mouse. It realistically bounces, jiggles, and rolls. The bubble's physics are simulated as a fully connected graph of point-masses and springs, which are subject to friction when in contact with the bubble's container. On May 3, 2006, Squishy Blue Bubble was the most downloaded widget on Apple.com.

Click here to visit the Squishy Blue Bubble!! page

Texas Hold 'Em Oracle

(Click here for a screenshot)
Texas Hold 'Em Oracle calculates the probability of winning a game of Hold 'Em, given any amount of information about which cards have already been dealt that the user can supply. To do so, it uses a Monte Carlo algorithm, which means that it simulates a large number of random games that meet the constraints specified by the user, and counts the the fraction of games in which the user wins. Using an efficient memory representation enables it to process over 10,000 games in one second on a 2 ghz Intel processor, which is enough to compute the probability of winning to within 2%. The user interface is written in Cocoa and Objective-C, and the probability calculation is written in C++.

Mac OS X Graphics Demos

Fractalicious
Fractalicious renders Julia fractals in real-time. Optimizations include an adaptive-subsampling algorithm and unrolled loops. It also has an optional real-time 'backlighting' effect. Fractalicious is a Mac OS X application written in C++.


Plant Growth
PlantGrowth generates 3D plants based on a genetic code in realtime and renders them in OpenGL. This program is open source and compiles on both Mac OS X and Windows.

Screenshot

OpenGL Feedback
Feedback illustrates how to create a warping feedback effect (ala G-Force or Fractogroovalicious,) in OpenGL by rendering the screen to a texture and applying that texture to a wapring surface. It is like what happens when there are two mirrors facing each other, and one of the mirrors is bending. This program is open source.

Screenshot

Procedural Planet
Planet Discordia is generated entirely from scratch by first tesselating a sphere into triangles, then perturbing it with fractal noise and smoothing. Finally, the mesh is colored based on altitude relative to sea level. This program is open source and compiles on both Mac OS X and Windows.

Screenshot

Real-Time Iterated Function Systems in OpenGL

(Click here for a movie, 1MB MOV)
Iterated function systems are a kind of fractal that is drawn with a very large number of dots. To determine where to draw dots, I used the 'chaos game' algorithm, which starts with a dot at the origin, then picks a random transformation from a small set, applies that transformation, and repeats the process. Which transformations it applies determines the shape of the fractal. By interpolating between the transformations that define different fractal shapes, it is possible to morph between those shapes smoothly. It draws tens of thousands of dots every frame in real-time using OpenGL.

Thousands of Tiny Dots

(Click here for a movie, 5.9MB MOV)
Thousands of Tiny Dots is an exploration of the animations that can be created with a very large number (tens of thousands) of moving dots. The motion of the dots is determined by Perlin noise velocity fields. It is written in C++ and OpenGL, and runs in real-time.

Windows Graphics Demos
I wrote these programs in C++ for Windows. They ran in real-time on a computer with a 600 mhz Intel processor.

Real-time Ray Tracing
This demo renders 3 spheres using real-time ray tracing with diffuse shading and shadows. After ray tracing, a back lighting effect is applied. This was my entry for the Flipcode light and shadow demo contest in 2000.

Screenshot Movie (1MB, MOV)

Software 3D Engine
This demo shows a software 3D triangle rasterizer (i.e. hardware graphics acceleration is not used), with z-buffer, flat shading and motion blur, written in C++.

Screenshot Movie (2.3MB, MOV)

Hazy Lenses
Hazy Lenses precalculates a lookup table for a bilinear-sampling lense distortion effect, which allows a large number of lense distortions to be applied. In addition to the lense distortion effects, there is some feedback.

Movie (1MB, MOV)

Bubbles and Water
This demo consists of a particle system of bubbles and a water ripple effect.

Screenshot Movie (4.3MB, MOV)

Metaballs and Burn Transition
This demo consists of 2D metaballs and a burn transition effect that is accomplished by blending several images based on a time-varying threshold.

Screenshot Movie (1.5MB, MOV)

Independently Developed Websites

MakeCloud.com
MakeCloud simplifies the process of adding a cloud to any web page. Give it an RSS feed, and it makes a link cloud that summarizes the contents of the feed, and provides code to embded the cloud anywere. MakeCloud is written in PHP and MySQL, and designed in HTML and Photoshop. As of Feb 10, 2008, MakeCloud has served over 637,500 clouds.

Click here to visit www.MakeCloud.com

FeedMarklet.com
FeedMarklet instantly creates an RSS feed and a browser button. You can click the browser button to add whatever page you are currently reading to the feed. It makes it faster and easier to save links, because you do not have to interupt your browsing flow to go to a different website, and it automatically extracts information to save you the effort of entering it manually. FeedMarklet is written in PHP and MySQL, and designed in HTML and Photoshop. As of Feb 10, 2008, 23,849 links have been posted to RSS feeds using FeedMarklet.

Click here to visit www.FeedMarklet.com

Video Lecture Database
Video Lecture Database is a collection of links to streaming video lectures on subjects ranging from quantum mechanics to literature. The lectures are tagged to make them easy to search. Video Lecture Database is written in PHP and MySQL, and designed in HTML.

Click here to visit Video Lecture Database

WizzardWiki
WizzariWiki is a wiki for users familiar with HTML. It places no restrictions on HTML or JavaScript use, which lets users freely create complex pages within the wiki. While a user is editing a page, they get a real-time preview of what the final page will look like (so there is no separate 'preview' step; the preview is always up to date and visible). WizzardWIki is written in PHP and MySQL, and designed in HTML and Photoshop.

Click here to visit WizzardWiki

Work for NolteMedia

UrbanStreamRestoration.com
I developed UrbanStreamRestoration.com as an intern in high school for NolteMedia. It is written in Flash 4, HTML, and Perl and designed in Photoshop.

Click here to visit UrbanStreamRestoration.com

Work for The Learning Annex, LLC.

BigMoneyExpo.com
BigMoneyExpo.com lists upcomming expos sponsored by the Learning Annex, LLC (featuring speakers such as Donald Trump), and allows users to register for those expos. I also wrote a backend section of the site that allows administrators to change the details for expos and speakers. BigMoneyExpo.com is written in Witango and MSSQL. The graphic design is by Neil Alto.

Click here to visit BigMoneyExpo.com

OneMinuteU.com
OneMinuteU.com allows users to upload and view instructional videos and articles (similar to YouTube). I wrote most of the front-end code, Jim Ashman wrote most of the administrator back-end and video transcoding code, and Neil Alto did the graphics design. The front-end logic is written in Witango, PHP and MSSQL. The video players, ad rotator, and featured video mosaic are written in Flash 9 / ActionScript 3. The video player on the front page interacts with JavaScript and DHTML. To avoid distrupting a playing video, many of the actions that can be performed from a video page are done using DHTML and Ajax (for example, a user can vote on a video without reloading the page while the video is playing). Other features of the site include DHTML playlists, zipcode-based local search results integrated with Google Maps, offsite video embedding, RSS feeds, a system for users to request new videos, and a WordPress blog.

Click here to visit OneMinuteU.com

'What are my friends learning?' Facebook Application

(Click here for a screenshot)
'What are my friends learning?' is a Facebook Application that allows users of OneMinuteU.com to share their favorite videos with their friends on Facebook. After installing the application in Facebook, it retrieves the favorite videos of any friend who also uses OneMinuteU.com. The application is written in Flash 9 / ActionScript 3, Witango and PHP.

Computer Vision Experiments

iSight Image Classifier

(Click here for a screenshot)
Image Classifier is a program for Mac OS X which uses the iSight camera to capture images. The user can easily label a few images taken with the camera, then train a neural network classifier to separate new images into 2 or more categories. The user interface and video camera access code is written in Cocoa and Objective-C, and the image classification code is written in C++.

ActionScript 3 Edge and Motion Detector

(Click here for a screenshot)
This Flash program accesses any compatible video camera and performs real-time edge and motion detection algorithms on the video stream. Click here to try it (you will need a video camera, and you may need to configure the Flash player settings).