-   // Random software

A collection of random software projects I've created over the years...

/* One Click Debug (OCD) - A tool-suite for debugging crashes on Xbox 360 & PS3 */

OCD is a full client/server collection of applications that were developed for the sole purpose of improving the workflow of debugging crashes and soft-locks. On Xbox 360 and PS3, the kernel will write a memory dump at the time of an exception ("crash"), which can then be loaded by a developer in a debugger to view the all memory, threads, locals, callstack, etc., as if the developer were connected to the console at the time of the exception. OCD automates the collection and deployment of these crash/core dumps to the point were the developer just needs to perform one click to begin debugging.

In addition, OCD goes one step further by performing automatic analysis of the crash/core dump upon collection. Once the memory dump is harvested from the console, it is uploaded to the server, associated with a bug, and a debugging script is processed which automatically performs certain debugger commands to extract some basic information (i.e. callstack with parameters and values, local variables, etc.). This information is then attached to the bug with the goal of providing the developer a quick glance at the crash to route the bug to the appropriate owner as soon as possible.

OCD has also integrated Microsoft symbol server and source server technology so that when an Xbox 360 crash dump is deployed to a developer and opened in the debugger, the exact version of source code is extracted from the SCM servers for that specific build (even if there are newer versions of that file). As the developer walks the callstack, this process repeats for any new files and the correct version of source is continually extracted for debugging.

The success of OCD was largely due to the fact that it was simple, automatic, and required virtually no setup by game teams to adopt. It was simply "turned on" one day, and began feeding additional data to developers. The OCD client is a self-updating, web-hosted application (Click Once) and supports Xbox 360 and PS3.

/* XeHiber - A C# application used to create and restore Xbox 360 memory dumps */

XeHiber was created to provide a way for taking "snapshots" of a live xenon system without interrupting the game, inserting artificial code paths to produce the dump, and without crashing the system. The ultimate goal for this tool is to also provide a means to "restore" this dump, also known as Hibernation on Windows operating systems. XeHiber remotely connects to the console, determines if it is a Devkit or Testkit, it will halt all threads for devkits (and resume them when finished), and will proceed to write a memory dump. This all happens without disturbing the game running on the 360. This was developed while working at Electronic Arts for those rare bugs that are hard to reproduce, for softlocks where a crash does not occur, and for bugs where snapshots of the system leading up to the bug would be helpful. The Hibernation portion of this utility is still under development.

/* SmogReport - A Perl/PHP application primarily used as a Google gadget */

SmogReport is a Perl/PHP application that displays the current air quality conditions for any city in the United States. The data is gathered every hour by parsing the EPA's air quality webpage using Perl, storing the data via RSS, XML, and in a database. Currently the data is simply used in a Google gadget to display the current conditions. However, I have been gathering this data for several years now and plan to expand the services and information related to air quality.



/* PoEMake - A C# automation tool for compiling and packaging software */

PoEMake is a custom C# application that automates many processes needed to compile and properly package software that is released by "Point of Existence" (POE). Intended to be expanded even further, currently the tool unpacks a zip or rar of the software, and based on the inputs provided to the tool, will generate NSIS install scripts, extract resources from itself (such as icons, bitmaps, etc.) needed to compile the installer, and can even generate a patch file (using RTPatch), modifying the generated NSIS install scripts to compile as a patch instead of a full install. Future plans involve connecting directly to the source control server (instead of requiring a compressed copy) to pull down the build, packing the mod, generating md5s, and any other routine task that is performed when creating a build.

/* PoEX - A custom C# DirectX graphics library */

PoEX is a custom graphics library utilizing DirectX. Though still under development, the library is the primary rendering engine that will be used in another project I'm working on titled "HUDEdit". The goal is to provide an easy interface to display and manipulate the HUD of Battlefield 2 using DirectX, providing a rapid HUD development tool to eliminate the need to launch the actual game during development. The HUDEdit project provided me an excellent excuse to begin learning DirectX and apply it to solve an actual problem.

/* HUDEdit - A C# Graphical HUD Editor for Battlefield 2 */

HUDEdit is a graphical interface for editing HUD configurations in the EA Game "Battlefield 2". Working in my spare time as a developer for the Battlefield mod "Point of Existence" (POE), my primary role is to provide needed internal tools to the development group. This tool in particular stands out as it is desired throughout the mod community. Configuring the Heads Up Display for in-game content involves manually editing text configuration files, providing screen coordinates for each HUD Element...along with endless hours of starting the game to test, and restarting the game to test any changes during development.

To speed up development and eliminate the need for launching the actual game to test any changes, I conceived the idea (before discovering others thought of this as well) of HUDEdit, providing developers a GUI to edit the configuration of the HUD and see the results in real-time by simply loading the vehicle or object's HUD from a drop-down list and dragging the HUD elements around on screen to position them properly (versus guessing what the coordinates should be). Once configured, HUDEdit writes out the new configuration to a file using the custom scripting language; eliminating the need for the developer to learn a new language, and reducing the development time by over 90%. HUDEdit contains a wealth of other features as well, but only the essentials are covered to provide a brief description of this project.

/* SCMWebAPI - A C# library that provides an interface to SCM metadata */

SCMWebAPI is a C# library that provides a class representation for an XML data feed which describes the current state of all software components in source control available on an internal release management site (SCMWeb). This was developed while working at LSI Logic, one of the many tools that are now in widespread use. The server XML feed provides an enormous amount of information that needs to be parsed and organized. Any software utilizing this library only needs to instantiate an instance of SCMWebAPI to have instant acess to any data needed.

/* SCMNotify - A C# application that notifies users of new internal software releases */ 

SCMNotify is a system-tray application that leverages the SCMWebAPI library, providing the user with a list of internal software components to monitor, allowing them to select which ones to monitor and how often (advanced mode), or the user can simply run in "easy mode" and get notified of all releases as they occur. Running in the background, SCMNotify polls at the scheduled interval to determine if a new version of a monitored component has been released. When detected, a balloon tip is displayed, allowing the user to navigate directly to the download URL of the newly released component.

/* ReverseSWF - A C# app that parses a swf file and extracts information */

My original goal was to provide a graphical view of the data in a swf, ultimately allowing the user to export it in an XML format (i.e. for use in a conversion pipeline). So far I have only found time to parse the swf header byte code and extract the version information, and whether the swf is compressed or not.

/* SourceParse - A console C# scriptable app that parses source code for search patterns */

SourceParse is a simple C# application that I wrote out of necessity to create an automated process that would parse all source code for key words, and if found, email the development group the search results. SourceParse simply parses all source files for the specified string (i.e. "TODO", "HACK", "Fixme", etc.) and outputs the entire line of code that the keyword was found to the console. Using this application, I created a NAnt script that would run at a scheduled interval and send out an email to the development group with the search results. The goal was to remind those developers that tagged "todo's" to actually do them and finish their's amazing how something this simple can have such a positive impact on meeting deadlines.

/* WordParse - A C# application that provides real-time search results of Word documents */

In an effort to experiment with the Microsoft Office COM object during a boring meeting, I created this small application that loads a Microsoft Word document and displays it's contents in the main form. The user can then start typing their search query in a search box at the top of the form. As the user types, search results appear in another form specific to the letters that have been typed so far, updating each time the user types the next letter.

 /* POENotfiy - A custom C# email notifier for POE to announce news updates */

POENotfiy is an internal tool I created for the Public Relations group of the POE mod. News updates are sent weekly to several hundred mod community sites via email, notifying them of the latest status of POE. POENotify automates this process by pulling the latest news update via an RSS feed, parsing the data, converting HTML tags to standard text, and converting links intelligently (selecting the link or the text being linked) to plain text. The user can then load an excel spreadsheet (via the Microsoft Office COM object) and POENotify automatically pulls all names and email addresses from the document. Finally the user selects the method to send the emails (GMail URL interface, mailto interface, or Microsoft Office 2003).

/* WinDbgRemote - A C# app that detects & publishes active remote debug sessions */

WinDbgRemote is a system-tray application that runs in the background, scanning all running sessions of WinDbg (Windows Kernel Debugger) to detect any sessions that are available for remote debugging. These are then posted to a custom PHP web application, providing a list of remote debug sessions on a centralized internal website. The goal was to provide an automated way of easily finding remote debug sessions thoughout the corporate intranet by simply visiting a website and clicking on a session to connect to. WinDbgRemote not only reports the remote debug session to the web application, it also sets up a custom "windbg://" protocol to properly launch WinDbg from the website using the information published for the remote session. This eliminated the need of both testers and developers to learn about setting up and connecting to remote debug sessions; the end result is a simple web-interface, requiring one click to quickly connect to the desired remote debug session anywhere in the world. 

/* UsageAPI - A PHP web application that provides a simple interface for tracking the usage of software */

This API was developed to provide a real-view into how internal tools are used. Often times it is difficult to justify the cost of developing certain internal tools that don't directly generate revenue to the company. Metrics proved to be critical in my situation in justifying the time and cost of developing these tools, which is why I created this API. The usage API was created to provide a simple interface to any tool using any language (C#, Perl, etc.) that could ping a URL. Using the interface, any internal tool could simply ping a specified URL with certain input each time that tool was installed, started, a certain feature was used, etc., causing the web application running the API to collect invaluable statisitics on the backend for the usage of these internal tools. This information was then used to generate important statistics and display them via a web-interface, helping management gain visibility into the positive impact of these tools on their project's schedule.

 /* POE Tracker - A PHP web application that provides statistical data about users */

POE Tracker is a web application that provides crucial information about the user-base of their software. When a user installs the software, they are given the option to participate in sending anonymous data about their installation to POE. If they choose to do so, data about their installation is transmitted to the POE tracker and indexed in a database, providing real-time statistical information about the user-base and installation statistics such as geographical location, installation time, any installation errors, how long a user keeps the software installed, how they perform upgrades, etc. The client-side of this application that provides and posts the data was written in NSIS and incorporated in the software's installer.

/* DFU - A C# app that removes residual traces of uninstalled Windows device drivers */

Driver Force Uninstall (DFU) is an application I wrote to perform a tedious task that was often needed during driver development. Often times when a device is uninstalled, the Windows operating system retains the original installation package of the device driver to provide an easy hardware installation experience the next time the device is detected. This "feature" can sometimes conflict with certain test cases, often times resulting in the test team performing clean installations of Windows; using this tool saves 30-45 minutes by simply removing this package and providing a "just installed" feel that is required for these test cases.

/* WinTweak - An NSIS application that provides a wizard to customize Windows */

WinTweak is a wizard-style application created using the NSIS scripting language (often used for installers) that provides an easy step-by-step GUI to enable and disable certain features in the Windows operating system that normally requires in-depth knowledge of the registry. This was needed by a test group to quickly enable and disable certain features in Windows that normally had to be done by hand before starting certain test cases. This application was also configured to run silently, using default options so that it can be integrated into custom Windows installation CDs to be executed at the end of the OS installation.

/* Driver/BIOS Bundle - An NSIS application that creates BIOS update, and Linux/Windows driver disks */

This application is also a wizard-style application created using NSIS that bundles the latest released BIOS, and drivers that were released internally each week into a single executable that any customer or tester can run to create installation disks. Previously these components were released as a single zip file that was not secure, and relied heavily on the end-user having knowledge on how to create the disk image or unzip the files in the appropriate location. After spending many hours educating end-users on how to properly create these disks, I created this application that walked them through the process and created the disk for them.