Jared Sohn's Portfolio
WELCOME!


Welcome to my portfolio page. Here you can learn more about projects that I have completed for my employers, classes, and own amusement. Feel free to e-mail me (sohn @ cs.wisc.edu) if you have any questions.

View My Resume: MSWord ASCII

SELECTED PROJECTS

Mass Transit APIs (Summer 2007)

For fun, I created a mashup to compare mass transit distances of potential homes/apartments or workplaces from other points of interest, with the eventual goal of creating a site to help a person choose where to work or live so that they can reduce the aggregate time spent commuting. (Unfortunately, since 1) this project was never completed to a polished state and 2) I do not have public django web hosting, it is unavailable to the public.) Written in Python, django, JavaScript, the hopstop.com mass transit API, and the Google Maps API on a Windows machine.

(No picture yet)

Content-Based Routing (Spring 2005)

With Eric Hill and Mindy Preston, I implemented an application-layer framework that efficiently routes XML-like traffic based on its content and user subscriptions. You can find our project writeup here; I wrote most of the VBF code and the initial version of the subscriber. This project is an implementation of a paper coauthored by our networking professor. Written with C++, pthreads, Berkeley sockets, and XML on a Linux machine.

(No picture yet)

Extended Channel Film Plug-in for PBRT (Spring/Summer 2005)

I have written a plug-in for Stanford Graphics' Physically Based Ray Tracer that allows writing depth, surface normals, surface parameterizations, and world coordinates to OpenEXR files. This has been made available to the PBRT community and can be found (with source) here. This started out as a portion of a project for my rendering class in the spring, but I rewrote it (in a cleaner, more extensible way) over the summer. Written in C++ with OpenEXR on both in both Linux and Windows.

(No picture yet)

Pac-Man-like Game (Spring 2004)

Over the period 2003-04, I built a few 2D games to try my hand at game design and understanding how to make a polished game. I created a Tetris clone, a Pac-Man like game, and a two-player tile puzzle game. My Pac-Man-like game features basic 2D collision detection, finite state machines, and A* path-finding. The game uses AI for not only the ghosts, but for Pac-Man as well. (The reason this is possible is that the game features two Pac-Men racing to get the most coins before time runs out.) Written in C++ with OpenGL on a Windows machine.

More details...


Download It (EXE, 680 KB)

Flocking Simulation (Spring 2002)

For the second project in my animation class, I implemented Craig Reynolds' flocking simulation. The simulation allows a group of objects to travel together without centralized control. I wrote an OpenGL program to fine-tune the algorithm and then created a plug-in for the algorithm in Maya. This software was used to animate fleeing rats in the short animation Gertie, Interrupted. Written in C++ with OpenGL on a Windows machine.

Click on the below link to read the official documentation for this software.

More details...


Download It (EXE, 230 KB)

Motion Capture Viewer (Spring 2002)

In my computer animation class, Chris Mizerak and I created a program to view and edit motion capture data. The program allows displaying multiple animations, editing the motion's path, and includes visuals such as shadows, a reflective floor, and a spotlight that follows the motion. Click on the link below for a more thorough list of features, accompanied with screenshots.

Note that to make use of this program, you will need to find one or more BVH files, since the ones that we tested the program with were proprietary. I found one here, although I have not had a chance to see if this particular file parses okay (unfortunately, the program uses a large window and doesn't allow resizing it, so I can't run it on my laptop to test it.) Written in C++ and OpenGL on a Windows machine.

More details...


Download It (EXE, 220 KB)

Rules-Driven Simulation (Spring 2001)

I built this program with Michael Tesch in a Natural Language Processing and Virtual Reality course. The idea is that semantic triples (which originate from a natural language parser, the execution of prior rules, or sensing the scene) can be used to control the movement of 3D meshes. The program supports some general Boolean (and, or, not) and geometric (follow, flee, spin, collides, etc.) relations and includes a collection of OBJ meshes. If the program was extended further, it could potentially be used to create simple rules-driven games where rules can be changed on the fly via natural language expressions. Written in cross-platform Linux/Solaris/Windows C++ with OpenGL mostly on a Linux machine.

Town Simulation (Fall 2000)

This was the final project in my introductory computer graphics class. The goal was to simulate a large town and to bring it to life (kind of like a poor man's Grand Theft Auto III). The professor wrote his own solution to the assignment that we could build off of, but Bob Marinier and I decided to write our own from scratch. I designed a system to manage the location, size, and the display of each object in the world. One of the challenges in this project was that if you draw the entire world, it results in a really low frame rate. We used techniques such as drawing only cars, buildings, and trees that are near the camera, back-face culling, and pre-computing cars' paths to speed up the program. Written in C++ and OpenGL on a Windows machine.

Town

Gertie, Interrupted (Spring 2002)

This is a three-minute animation that my group (Michael Freytag, Rachel Heck, Thien Tran, and I) created as a final project in my computer animation class. The film features Gertie the Dinosaur, the first character created primarily for the purpose of animation. The goal of this project was for each group member to design a technical piece and to integrate them into the animation pipeline. I wrote a Maya plug-in to animate the rats as they escape the crushed house. I also modeled the mountains and laid out the houses and trees that made up the world.

If you click on the link below, it will take you to the project website. If you have problems watching the movie, you may need to install the DivX codec. (Get it here.)

More details...


Watch It (AVI, 63 MB)


EMPLOYMENT EXPERIENCES

Packet Trap Networks (August 2007 - Present)

Packet Trap Networks is an early stage startup that creates Windows-based tools for managing networks.

My work at Packet Trap includes:

  • developing Cisco configuration, syslog, and switch port mapper tools in C# for the company's pt360 Tool Suite and Perspective platform
  • creation of a scripting framework for downloading/uploading configuration, enabling SNMP, and other such tasks for Cisco, HP, Pix, and Linux (where applicable). I also created a common interface for using existing telnet and SSH libraries.
  • developing wizards to effectively enable SNMP and deploy agents within heterogeneous environments
  • writing code to automatically enable netflow/jflow/sflow for a device given an SNMP or telnet/SSH credential
  • writing/maintaining scripts to automate builds that work within a patching infrastructure
Code written in C# in a Windows environment.

Digital Anarchy (contractor, August 2006 - May 2007)

Digital Anarchy creates After Effects, Final Cut Pro, and Photoshop plug-ins for broadcast designers, 2D animators, and professional photographers.

I worked some to adapt the Data Animator product to create an initial release of Data Animator Lite. Work includes understanding and improving the maintainability of an outsourced codebase, stripping out non-Lite features, fixing bugs, adding some new features (random data generation and data morphing), and creating a new math-related chart type.

I also worked some to create a new wxWidgets GUI for Knoll Light Factory for Photoshop. Code written in C++ using wxWidgets and After Effects and Photoshop plug-in architectures in a Windows/Mac environment.

BitTorrent, Inc. (contractor, March 2006-August 2006)

BitTorrent, Inc. is a media site that links to free (and now for-pay) content that can be downloaded using the BitTorrent protocol.

I developed a component that provides an internal interface for disk-related tasks (i.e. blacklisting/unblacklisting, uploading/changing content, setting/changing torrent metadata, etc.) Code written in Python with XML-RPC-like web services.

Stottler Henke Associates (intern, Summer 2004)

Stottler Henke Associates is a consulting company that specializes in projects that make use of artificial intelligence. I worked there as an intern.

My project at SHAI was to help build a decision support agent for the Navy. This involved writing path editing code (i.e. allow a user to draw a curve, sample points from it, and then allow splitting/merging/deleting curves and setting properties.) I also developed some heuristics related to their decision support system and implemented them as a finite state machine using their SimBionic product. Code written in Java with Swing.

Analytical Mechanics Associates, Inc. (2002-2004)

AMA is a NASA contractor in Hampton, VA.

At AMA, we built an advanced engineering environment to help NASA decide which space shuttle designs they should fund. Each space shuttle design is expressed as a ~2 MB XML file filled with a component hierarchy and tens of thousands of measurements.

The challenge in this project from a software perspective was writing plug-ins and creating libraries to get the COTS tool (Phoenix Integration ModelCenter) to handle models that are more complicated than the software was designed for.

I conceived of and developed a linking library that allows model links to be logged, created via scripts, and changed as the model runs. I also conceived of/developed a program to analyze each of our ModelCenter models and determine which dependencies are relevant when we make changes to our XML file. This had a huge impact on the project, since we were able to remove cruft from the XML document while minimizing its impact on members of our distributed team. Also, during my first six weeks on the job (and this was my first post-college position), I successfully did most of the programming for a set of tools to automatically generate an initial XML file from existing datafiles and Excel-exported CSV files.

Since AMA is a contracting company, I often worked simultaneously on multiple projects. Highlights of other work include building a prototype for an OpenGL tool that allows user-in-the-loop extrapolating of multidimensional datasets and creating an Excel Add-In (GASolver) that uses genetic algorithms to find optimal solutions for complex multivariate problems. Most code was written in Java and C++.

University of Wisconsin-Extension Local Government Center (1999-2002)

I wrote a software package for the University of Wisconsin-Extension called Graphing Revenues, Expenditures, And Taxes (G.R.E.A.T.). The software provides convenient access to revenue, expenditure, property value, and property tax data for every city, town, village, and county in Wisconsin since 1987 by generating charts in Excel. The software is used to educate local officials about public finance.

Some of the program's features include:

  • User can compare a municipality against groups of similar municipalities, create customized calculations, and import updated data
  • Updates data, calculations, and comparison groups without losing user-defined data
  • Uses aggregations to integrate revenues/expenditures and property value/property tax databases
  • Program and database validated extensively
One thing that is unusual about this program is that it is very complete in terms of code maintainability, developer/customer documentation, thinking through use cases, a clean setup experience, data validation, etc. When I spoke to my boss recently (Spring 2005), she remarked that the person who helps her integrate the latest database with the program is very impressed with it and even offered to maintain the software (which he normally avoids like the plague) because everything is so well-organized. My boss has also heard positive feedback from each of the project's maintainers hired over the years. Click on the following link to view the G.R.E.A.T. user documentation (and get a better idea of what the software is like).

More details...

G.R.E.A.T.

JSM Tele-Page, Inc. (1991-2001, Dec 2004-June 2005)

JSM Tele-Page is a Wisconsin-based telecommunications company, which happens to be owned by my parents. I wrote several programs to help manage its paging system and internal operations. This software:

  • Nightly checks the status of a couple hundred towers to find problems before customers do
  • Logs, monitors, and searches paging traffic
  • Sends text messages to pagers via a modem, a network server, a web site, or e-mail. This product (JSM JPage) is used internally to send half of the system's traffic and is sold to customers.
  • Semi-automatically creates invoices from the paging terminal database
I did most of this work in middle school, high school, and college. It taught me a lot about the importance of having an adaptive (i.e. don't just strictly follow some already established methodology) software development process and helped me to develop and exercise the kind of strong work ethic that one gets by thinking like an owner (since I was working closely with my parents).

Also, I learned the value of writing software that is easy to maintain (at least in business contexts where it makes sense), since I worked with some pieces of code for over a ten-year span.