Steve Gregory

About Me

Hello, I'm Steve, a software engineer and design hobbyist. I graduated from the University of Southern California a few months ago and recently joined the Web team at Evernote. I made this site to post a few personal projects I've done and talk little about them. If you have any questions, feel free to contact me by email at [email protected] or on LinkedIn here.

View my resume

Roller Coaster

Here's a clip from a roller coaster simulator that I made with OpenGL. It takes any list of 3D points and builds a track out of a Catmull-Rom spline. The resolution of the track adapts to the curvature of the spline so there are more track segments in round areas and fewer segments in straightaways.

Download full resolution video


In the fall of 2013 I worked with a couple friends on a research project we called PennyRender. We looked at the concurrency problems that would arise in developing a web app for realtime-collaborative 3D mesh modeling. The plan was to see if we could come up with a highly usable system for handling the concurrency and consistency problems, and then design an abstraction layer on which any mesh editing tool could be built. We came up with a system that accomplished this by using optimistic selection locking, and drafted a paper describing the solution. You can read the paper and more about the project here.

We named the project PennyRender because we thought the best business strategy for such a web application would be to let anybody use it for free, and then charge small amounts in an integrated online marketplace for things such as rendering on cloud-GPUs, models built by other users, and advanced tools built by third parties on the abstraction layer. The microtransaction strategy has the advantage of lowering the barriers to entry for individual freelancers and small studios, while allowing those who are well funded to hold large accounts and buy many items.

By the time we wrote the paper, others in the 3D software industry launched impressive products that accomplished everything we were hoping to do (particularly and Autodesk 360) so we decided to forgo implementation and instead work on things that are more cutting edge.

Ray Tracer

I wrote a small ray tracer in C++ that renders simple scenes with Blinn-Phong shading. It supports soft shadows and adaptive multisampling. It renders in three passes - the first takes a sample in the center of every pixel, finding the intersecting surface and light contributions; the second multisamples the pixels that appear to be on an edge of a surface; and the third calculates the shading from all the samples and blends them together. Here's a clip of it working.


Squid is an Xbox indie game I made a few years ago with my friend Sam. It's a neon space shooter. We got over 4,000 downloads and an indie gem from Joystiq. Here's the trailer we made.

Close Download PDF Download Word Doc
201 572 9806
University of Southern California, Viterbi School of Engineering
May 2014
B.S. Computer Engineering & Computer Science, Major GPA: 3.57
Relevant Coursework: Operating Systems, Computer Systems Organization, Introduction to System
Design Using Microprocessors, Introduction to Algorithms and Theory of Computing, Circuits and
Electronics for Computer Engineers, Computer Graphics, Digital Geometry Processing
Software Engineer Intern, Apple Inc. iPhone Hardware Team
Summer 2013
Meteor (a Node.js web framework), MongoDB, Reactive Programming, jQuery
Architected an internal web platform for organizing and sharing iPhone project information in real-
time, significantly boosting the communication abilities of the team
Learned and developed methods of concurrency control for real-time collaborative web applications
that allow for both responsiveness and consistency, including patterns for caching, locking, and
distributing data
Maximized the usability of a web UI by gathering requirements and iterating on design mockups to
develop a design with a reduced learning curve and lower cost of adoption
Developed a client-side encryption system to secure confidential project information and comply
with a need-to-know basis of disclosure
Continually integrated feedback from many users into improved versions, working with the users to
prioritize improvements by importance and size
UI Development Associate, USC Application and Data Services Team
2012 - 2013
Sharepoint, HTML, CSS, Adobe Suite
Used Microsoft SharePoint to maintain web applications for the USC Marshall School of Business
Developed an understanding of the design of component-oriented portal systems
Mobile Applications Engineer Intern, nSphere Inc. Mobile Applications Team
Summer 2011
Android, Node.js, CouchDB
Engineered a mobile push notification framework for legacy Android versions lacking native push
Designed a spatial hashing algorithm for fast geographic database lookups
Followed Scrum methodology and became proficient at developing loosely coupled components
with rapid release cycles
December 2013
Researched approaches to concurrency control for an online real-time collaborative 3D mesh editor
Co-authored a paper describing the general design of a solution based on optimistically locking data
by user selection, along with an abstraction layer allowing for simple creation of arbitrary
collaborative mesh editing tools without needing to consider concurrency or consistency
VGA Snake
May 2012
Developed a version of the classic game Snake in full color on a Spartain-6 FPGA using Verilog
Learned common design patterns and pitfalls for low-level digital circuits
January 2011
Co-created an indie Xbox game that received over 4,000 downloads and an Indie Gem award from
Joystiq (an affiliate of Engadget)
Learned the basics of shading languages and methods for parallelizing computation on GPUs