Dave Gullo
Dave Gullo

My journey with HTML began in 1994. This evolved into countless hacking projects, some of which are contained below. In a few worlds, my hacking spectrum spans from scripting Photoshop to large-scale browser automation, client/server performance to rice-rocketing linux kernels.

Systems I have built have reached billions of users, and dealing with trillions of signals. Some of my best work has gone to the bottom of the ocean on crashed airplanes, and some of it you may have used buying things online or renting skis at a resort.

Currently, I'm focusing on proving new concepts and hacking the full spectrum from Apache Spark to D3.js, while also serving as Camp Counselor, and Armchair Psychologist to my engineering org.

My obesession is optimizing performance; wherever the gap may exist, client, server, device, etc... I'm a big fan of: test-driven-develoment, Readme-driven documentation, product team doing bdd, and human-factors as they relate to user experience.

My role at VideoAmp is Fire Chief of Technology, and Lead Arsonist. It's my responsibility to keep the lights on, AND to spawn innovation.

I enjoy R&D, proving new concepts, plugging complex systems together, and inspiring my fellow Hackers to self-organize and deliver BIG things.

It is my goal to build an environment where engineers have the opportunity to do the best work of their lives, and to be worth more in the marketplace during and after their time with the Company.

Along with programming & systems engineering I ❤ snowboarding,snowboarding, snowboarding, drumming, and wine.


Flow XML

A method for generating instructional training videos in an automated and frequent fashion. Output videos are connected to a Learning Management System (LMS) where the training materials are updated as often as the product is changed. Additionally videos are referenced from our training and help system, and inline from within the GUI where the video applies. A job to re-render the instructional vids is triggered on every GUI software deploy in the Continuous Integration system. The videos of the product ALWAYS look the same as the product, without expensive human intervention involved in re-recording the video.

Apache Spark

VideoAmp's Technology Stack

A full-full-stack look at VideoAmp's platform dealing with 1.2M QPS, and processing many Pb of data per month in Apache Spark.

Flint : Provision Apache Spark Clusters in EC2

In order to control costs, and maximize cluster compute resources, we built this tool to assist our data-scientsts at VideoAmp in provisioning powerful clusters on-demmand. The tool is a GUI and services layer which integrates with the AWS EC2 API and makes the necessary calls to spin up coordinated master/worker instances which combine with a Jupyter notebook allowing for a cluster per person, vs. data scientists battling for RAM and cpu cores.

Jupyter Notebook: Spark SQL to D3/TopoJSON

D3 Plot of Zipcodes SparkSQL A Jupyter Notebook which taps our extensive Spark SQL warehouse. Users simply provide a SQL statement, and bind the column results to a D3 TopoJSON plot which shows the data distribution by zipcode. This project is used as a starter temlate for plotting Spark SQL in Javascript, pick your library!

Chrome Extensions


INSTALL VAST'er, it debugs VAST and VPAID ad-calls in real-time in the browser.

Emailytics 2013

Emailytics is a Chrome Browser Extension that augments the web UI for Gmail, adding a personalized signature which is stamped with customized images that inform the sender of the "read status" of messages. This allows the sender to gauge the effectiveness of emails they have sent, and in a prospecting function to know which leads to follow up on.

LinkedOut 2013

LinkedOut is a Chrome Browser Extension that removes sponsored listings, ads and other kruft from your LinkedIn browser experience.


Forgot or Not - 2013

Forgot or Not Forgot or Not is a gamified LinkedIN-based memory program designed for power networkers. You train your brain against your most recent connections, then play mini-games to test your network familiarity. Once you master your most recent connections, you level-up and start going backwards into time.

Google Glass

Fetchie - 2013

Forgot or Not If you're like me, you have “data rituals” or daily pattern-based behaviors for surfing the web. On a daily basis, I consume dozens of sites, sometimes all day long, which generates lots of repetitive web traffic. In the end of the day, my eyeball only wants a small part of the page, and to know if the data has changed since the last time I looked at it. Unfortunately Desktop formats are often ill-formed on smaller screen devices such as mobile and especially smart watches and Google Glass. To consume this vast data with any frequent rate on a small screen leaves much to be desired.

Fetchie brings the broader web to smaller devices by letting the user build conduits between the traditional web and smaller format devices. Fetchie surfaces these values to the user as a bundled Glass timeline item or a smartphone app alert when they change. In addition, the user may provide thresholds which gate the noise in signals until they become actionable.

iOS / PhoneGap

Price Predictor - Pasadena Labs 2012

In this project I built the app with PhoneGap 2.1 targeted for IOS-6, and the server-side technology comprised of a node.js server talking to an R server fronted by Varnish. Also I built a large-scale phantomjs crawler which ran on a 64-core Linux box, running ~70 concurrent phantomjs processes fed by a Redis queue of ~10M URIs to crawl.
Price Predictor for Auctions Price Predictor for Auctions Price Predictor for Auctions Price Predictor for Auctions

maneq.in 2012

maneq.in is a shopping-assistant enabling buyers of action sports apparel and specialty goods to purchase by size, narrowing the path to available products in stock, reducing product-sizing confusion, and returns.

snowboards-for-sale.com operated from 1998-2012. After 1000's of live chats with riders, the same question recurred: "what size do I buy?". In 2007, shop by size was born out of necessity.

Read about it here:

maneq.in ipad app maneq.in ipad app maneq.in ipad app


Krux Digital 2011 to 2012

Responsible for architecture and development of web applications, data pipelines, and tools spanning the full technology stack and assisting in operations and deployment of Puppet driven systems running in Amazon Web Services (AWS). Deep focus in browser automation and measurement of data-leakage that occurs from embedding 3rd party tags in websites and processing and displaying the resulting big-data. Provided the raw data for advertising industry-focused reports exposing the types and quantities of data collection that happens to consumers as they surf the web.

Intersting projects include:
  • Browser emulation infrastructure employing Firefox/XUL, and PhantomJS and node.js on 100's of EC2 instances, which are managed by Puppet.
  • A "Browser-as-a-runtime" service powered by Firefox/XUL, with a custom HTTP server written in Firefox with Javascript and XPCOM, intelligently routed and load-balanced with node.js
  • Development of large-scale data processing pipelines in AWS employing EC2, SQS, S3 and RDS with python, mysql and cassandra.

goko.com 2012

Goko Games GOKO serves HTML5 games designed to go anywhere. I served as a node.js programmer bridging the client's Javascript API to node.js and client-side Javascript implementation of the frontend site. The project also involved a great deal of low-level debugging of websockets communicating the client's API server which was wrapped through their Javascript libraries. Tooling included node.js, grunt, and casperjs.


Linux-based In Flight Entertainment Systems : Thales Avionics 2009 to 2011

Developer/Systems Engineer & technical lead for in-flight entertainment systems written in XHTML / Javascript/ jQuery / php / mysql. Working within the boundaries of older client/server hardware and long useful life cycles, this project stretches the envelope of performance due to limitations of processor, disk, ram and network resources.

Responsible for optimizing performance of existing "flying" applications with a range of techniques, such as a "thick-client" architecture in Javascript, client-side & server-side caching, php profiling, and sql optimization. Other areas included: system integrations and bash shell scripting, mysql database administration, php middleware & integration (and troubleshooting) of the client's c/php middleware, acting advisor and developer to 3rd party apps, and helped fix poorly-performing legacy applications.

Snow Valley Ski Resort Rental Management System: 2010

Developed the resort's specialty kiosk-based ❉ ski rental management software ❉ to optimize the resort's rental shop workflow and management procedures. Pieces of this project included a welcome-kiosk where customers would checkin and receive a printed hard-copy of their information with a barcode, which they would bring to a Ski/Snowboard technician. The tech would use custom user-interface and a barcode scanner to check-out merchandise taged to their barcoded information form. At the end of the day, the shop manager would run a report to see any merchandise which did not return, and have information available to contact the customer and/or charge them for lost or stolen equipment. Project was built on top of Ubuntu running Chrome in Kiosk mode, with OpenVPN, php, and mysql.

snowboards-for-sale.com 1998 to 2011

snowboards-for-sale.com was a specialty online snowboard shop powered by LAMP and open source technologies. Read about lifecycle of this company on the Lean Startup Blog. The company delivered stellar customer service and an amazing selection of snowboarding accessories at very competitive prices. The shop used technology to provide a spectrum of services to fully support the customer selection experience, procurement, fullfillment and CRM functions.

On the customer-facing side a shopping mannequin aids the customer in their selections; based on body measurements, also Live Chat connects customers to CSRs in their local IM. On the backend, a robust and custom-built CRM platform the company by providing functionality for sales reporting, SEO console, product management, customer-service, and order lifecycle management functions. 100% of the company's functions are built in-house. The site is integrated with the XML APIs provided by UPS, USPS, Endicia, and Google. A custom SEO console called "positionator" is used to track placements linking to snowboards-for-sale.com from Google, Yahoo and Bing; the main revenue generators for the site. Numerous reports exist to track sales trends, web surfing habits, and search engine positions.

Read More

Positionator, SEO Radar 2001 to 2008

Positionator Positionator is a web-based position tracking software designed to track a portfolio of organic positions online. It was conceived and built in 2001 for snowboards-for-sale.com, and has been modified and maintained to date. Positionator tracks a list of terms on Google, Yahoo, and MSN daily. Reports are created around this data which show trends and movement on each respective search engine. Additionally it provides a historic context to how long many of the positions have been in the portfolio.

Positionator also reports on many types of interesting statistics such as movement of terms, rank of competitors, and market share of sub-segments. A geographically distributed set of agents run continously to record and aggregate data based on a client's wish-list of terms to track. These are centralized in a single reporting server which aggregates and reports on a frequent basis.

Kiwi Motorcycle's Catalog 1998 & 2006

Kiwi Motorcycle Company Kiwi Motorcycle Company Kiwi Mike is a world leader in reproduction motorcycle parts for Indians and winner of many bike building accolades; including Sturgis 2006. As a company Kiwi Motorcycles specializes in building custom Indian Motorcycles, servicing and repairing existing motorcycles, and selling parts.
The Kiwi Motorcycles catalog contains over 40,000 specialized parts and accessories for Harley Davidson and Indian Motorcycles. The site interfaces with an outside B2B system which manages product availability, time in transit, and order procurement functions.
The front-end site involves wrapping or spidering the product content off of the distributor's web site, processing that with DOM+XPath in php and then persisting it to mysql. Categories and product relationships are maintained by slowly and continually spidering the source website for content updates.
Project taken over and modified by CSU San Bernadino in Fall 2008

autos.nytimes.com 2003-2005

Google Integration Served as primary architect and developer-lead for the Automotive Classifieds platform provided by Adicio (FKA Careercast) to the New York Times Online, San Diego Union Tribune, and Orange County Register. Complicated aspects of the project included feed processing from various data sources including print and web, fuzzy make/model matching against an industry-specific database, developing an Object Oriented PHP API to support lifecycle methods for posting and management, implementation of advanced SQL techniques to facilitate an intelligent vehicle search with MySQL 4.1. The project was on tight deadlines as the initial clients needed to terminate existing contracts with other vendors on a drop-dead date. Work happened over the summer of 2004 and the site launched in September of 2004. Adicio now hosts many newspaper clients on this platform and provides one of the industry's leading turnkey print-to-web automotive classifieds solution.

I returned to the company in the Spring of 2006 for a 3-month contract. Projects involved integrating GoogleMaps API 2.0 and several industry-standard photo API's for automotive user interfaces which powered two "Automotive Configurator" and "Automotive Comparator" applications. GoogleMaps tool attached to region-based searches and pin-pointed the results on a map.
NOTE: In Q1 2007 The New York Times switched their automotive platform to another provider.

superbuytires.com 2000 to 2009

SuperBuyTires.com A leader in wheels and tires on the web, SuperBuyTires is rated in the top 15-20,000 websites in terms of traffic and popularity. This site achieves millions of page-views per day in the peak season. Though the site is already well known among car dealers and wheel enthusiasts, it also holds key search-engine placement due to careful formatting and word-smithing. SuperBuyTires attributes over 95% of its sales to their website, and by extension the website's placement on Google, Froogle, Yahoo and Msn.

A customized content publishing system was built to handle large amounts of data-entry in Excel. Bulk updates happen on a daily basis for price changes, and a web-based admin console exists for data corrections, customized reporting, and management of dealers and affiliates. This web admin is built with JX a Java XML UI library I began in 2002. The site is built in PHP / MySQL, XML+XSLT and hosted on Apache in Linux.
The e-commerce aspect of this site is integrated with the MAS500 accounting package by Best Software. Orders are syncronized from the website to MAS500. Syncronization of the SKUs from MAS500 to the webserver happens on a periodic basis.

Dave's List 2006 to present

Daves List RSS Job Aggregator Craig's List is a great site for php contractors like myself. There are lots of great LAMP contracting opportunities available. The problem is that the jobs are spread across 3 categories on the site: 'eng', 'sof' and 'web'. On top of that, I am equidistant between Los Angeles, Orange & San Diego Counties. So rather than reading 9 different pages from Craig's List, and another 5 from Monster, "Dave's List" reads and aggregates all of the RSS feeds representing categories on the Los Angeles, Orange County and San Diego sites. It brings them into one document, sorts each post by date, and removes cross-postings; all in about 130 lines of code.

In addition to Craig's List the aggregator also pulls from other job sites like Monster that offer RSS/RDF feeds. Because the data changes periodically, a conditional GET (HTTP 304 NOT MODIFIED) mechanism was built to save time fetching the feeds. Project was done in 45 minutes and uses php, RSS, and XSLT.

tinycrud 2003 to 2009

Tinycrud is a w3c-based ORM framework for php/mysql employing XSLT, XPath, XSD, and DOM to generate mysql stored procedures and php classes. tinycrud is designed to bootstrap the repetitive tasks in building an object-oriented php application by creating default lifecycle functions, including html forms, php classes and mysql stored procedures. tinycrud

XUL / Firebug

Krux Inspector 2011

Krux Inspector Ad-Ops tool Developer of XUL extension to Firebug designed to expose the user-intent data-theft that occurs in the RTB process of online advertising. By observing HTTP traffic in real time and graphing the results in a tree, this tool is similar to the Net panel in Firebug. The data enables ops professionals to diagnose "rouge-chains" from advertisors embedded in a publishers website. Specific enhancements to the project include 1) an HTTP webserver, allowing the component to accept command and control operations with a REST-ish interface, 2) a lightweight socked-based Redis client allowing the component to contact a database-server directly in emulation mode rather than communicating via HTTP-based middleware.
Install Plugin for Firefox

JSON Content Validator with XUL Proxy 2010

JSON Content Validator This is a content-validation user-interface which reads JSON and images provided by a 3rd party media management agency. However sometimes the media bundles would come across corrupted or mis-mapped, so this allowed the client to find the problems vs. a developer. It is written in xhtml, php, json, & extjs. A json dump of tables via php feeds an ext-js-driven data grid with various filtering features. A XUL plugin is added to allow the GUI to cross-site-script the json fetch to various development and production servers.

Positionator XUL Proxy 2007

Positionator A browser-based overlay that turns Firefox into an HTTP proxy for the purpose of gathering data that feeds into an SEO analysis pipeline. Collecting data from a single source of ip addresses causes false linearities, so this tool is distributed to consumers of the platform to help "croud-source" a more objective data gathering process.

HTML / XML / Javascript / jQuery / extJS

Automatic CSS Sprite Generator 2010

Automatic CSS Sprite generator Generates CSS sprites for large grid views of many products. Allows for very fast page loading time and saves tons of HTTP transactions, and makes our yslow score approach 100! All images for a category are loaded, measured, and combined into a single large image with libGD and php. The dimensions and offsets for these images are recorded into a css file. For fast retrival, both assets are cached until images in the given category are changed.

Shopping Mannequin 2007-2012

Shopping mannequin This shopping assistant was written in php/memcache/json and jquery and allows customers to dial in their dimensions, and then see a list of compatible products. The most often quesiton for snowboards-for-sale.com is regarding size, so we took the fitment information from all of our manufacturers and developed our own size compatibility that drives customers to the right products immediately.

Web-Based Live Chat for CSRs 2009

Product registry editor snowboards-for-sale.com provides live chat services to it's customers with this browser-baseed live chat. The chat program runs over http and is visible to a wide range of customers. Using jQuery on the client, and a php library implementing an XMPP client, this program logs all chats and binds them up to customer records in the company's CRM. Marcros are embedded to send customers expanded faq's/instructions, and to send customers embeded images and hyperlinks.

Product "Registry Editor" 2005

Product registry editor Small, light-weight and client side transactional product edit tool. Allows client to stage multiple add/edit/delete operations at various levels within the product, then committing the changes with a single "Save" operation. The design of this tool enabled an associate to craft new business rules on the fly because they could create key-value pairs. On the programming side, an XML data structure exists that contains the key/value pairs. A programmer can then tie into the data structure to implement product-specific features.

Dynamic Order form 2004

Dynamic price sheet An order form that auto-totals on the client-side with Javascript. The goal was to create an order form that gives the dealer an idea of their order before placing the order. This needed to be done without excessive technology, and in a format that could be easlily updated by a sales associate. The file is then emailed to the sales associate, and is imported into the accounting system as a sales quote.

Stored Query Builder 2004

Stored Query Builder This component allows you to build a custom query against a contact management database. This is very similar to the advanced search feature of many search engines. Using logical operators and sets of relational operators, the user of this tool can quickly construct a customized query.

Technologies involved in this project include client-side JavaScript objects, client and server-side XML, dynamic HTML & ASP, and COM+ on the server-side. As with the ACL manager, this component sends client-side XML to the server where it is disassembled with the MSXML parser.

Call Policy Manager 2003

JXTree in action This tool allows you to set call policies for a phone account. The concept is similar to allow/deny rules on a firewall. The benefit of call policies on a toll-free number is that you can restrict excessive charges due to accidental / rogue callers, i.e. an insistent telemarketer auto-dialer that calls you every day at dinner time.

Sample policy
Allow all calls
Deny from (213)
Allow from (213) 874
Deny from (213) 874-3214

Dynamic Form Builder 2001

A set of tools that allows a client to build custom forms for their online contact manager. The fields of a given form map to fields in the contact manager. These forms are embedded in websites and are posted to the system containing the contact manager. A hierarchical series of COM+ objects reflects the HTML implementation of <form> objects. These objects build client-side JavaScript and HTML to represent a given form.

The most challenging aspect of this project was building an engine that dynamically creates a client-side sanity checker using regular expressions.

ACL Manager 2001

ACL Manager NOTE: This was designed/developed pre-AJAX in 2001
The Access Control List manager allows the granting of data access permissions for users and user groups. This component tool features client-side JavaScript that builds a hierarchical XML string that represents the data-structure in an efficient manner. You will notice that when you click "Submit," the XML string will appear as an alert box. On the server-side (not demonstrated here), an XML parser library is used to serialize the XML string back into the necessary COM+ component method invocations.

Data-Bound Spreadsheet 2001

spreadsheet NOTE: This was designed/developed pre-AJAX!
A data-bound client-side spreadsheet. This simulates the experience of using Excel within any web browser that supports Javascript and DHTML. The changes to any cell are broadcast back to the server, and result in immediate updates to the database. Also, the UP/DOWN arrow keys toggle between rows. This is a fast, lightweight UI widget that can handle up to ~500 rows of data. For larger data sets, the cousin component JXTable can be used which is written in Java and can safely handle tens of thousands of rows. Written circa 2001.

Java / Swing / XML

JXTree 2001-2005

JXTree in action A Java XML tree control built with Swing components and the JAXP API for XML processing. This project was conceived long before the rise of AJAX, and long before the slow and perceptual death of Java in the Desktop GUI. The tree provides many usable features such as context-sensitive right-click popup menus, drag-and-drop tree nodes, auto-scrolling drag operations, remote sub-trees in the form of XML, and drag-and-drop file uploads directly from the desktop. This component also uses XSD to validate the XML data structures as they are fetched from the network.

This client-side component is perfect for displaying hierarchically arranged data structures. This tree is user friendly, similar to Windows Explorer or the MacOS finder.

The JXTree control is the perfect widget for large application-based websites because it reduces the number of web pages required to complete an operation and it preserves state without successive page reloads.

This component, like its cousin JXTable, only requires knowledge of XML to use. Optionally, you can use XSDs on the server to validate the XML before it is retrieved by the client-side applet.

JXTable 2001-2005

JXTable in action This is the cousin component to JXTree and also uses Java 2, Swing and JAXP. The listview is the perfect tool for presenting large amounts of columnar data. This component provides intuitive usability similar to many desktop applications by implementing context-sensitive rightClick menus, singleClick / doubleClick / onChange events, and drag-and-drop operations compatable with the JXTree component.

Technologies for this component include XML, XPath, XSD and XSL. The transport from server to client is XML. The table's model is represented by XML. XSL is used to sort each column in ascending / descending order. XSD is used to validate the data during development and can optionally be disabled in production to enhance performance. Background threads work to load large data sets into the table's model. When the component receives events, XPath is used to retrieve data from the model layer.

Drag-n-Drop File Upload Widget 2002

This tool allows you to drop one or more files from your desktop or filesystem directly onto the drop target. The file(s) are then uploaded to the server. Callback functions in Javascript are invoked upon success or failure of the transaction. The upload target is written with Java, and interfaces with Javascript. The image shown, the background color of the applet, and the callback functions are defined with applet parameters.

Java Screen-Pop Applet 2006

Used for the snowboards-for-sale.com backend toolkit, this applet pops up a window via Javascript when a phone call comes to the toll free number (888-777-7212) from the Earnware telephony system. When a call comes in, a custom call-flow menu is requested over HTTP from the Earnware telephony server to the snowboards-for-sale.com web server. This request calls a php script and performs an insert into the s4s call log and writes the unique id to a port on the servers localhost. The s4s support agent who is currently logged in tunnels a port over SSH from their desktop to this port on the server. The applet sits in the support agent's backend user interface and listens on this port. When a uniqueid is passed over the port, the applet will then launch a window containing the new call log record. The notes field is automatically focused, and the callerid and location of the caller is presented in the call window.

View Source Code

Java NNTP Reader 1998

J Before there were file-sharing networks, there were the newsgroups and the NNTP protocol. I built a command-line multi-threaded NNTP client that reads specified newsgroups and compares message headers against a regular expression "wish list." Headers with that match are flagged for download and a separate thread downloads and reassembles multi-page attachments. This project was a valuable experiment with JDBC, sockets, regular expressions, multi-part MIME attachments, while learning the NNTP protocol.

ASP / COM+ / SQL Server

efastparts.com 1998-2000

A manufacturer-direct ecommerce site for a variety of producers of after market automotive parts. Interesting technologies included incorporating an industry-standard automotive database to provide a hierarchical listing of all makes, models and years of vehicles. This database was also used to maintain a compatibility index for parts to cars. Other technologies included the integration of EDI into the participating members manufacturing sites. This interchange allowed members to more accurately predict the demand of products on a real-time basis.

enjoythedrive.com 1998-2000

EnjoyTheDrive homepage An automotive info-tainment web site developed for SEMA, this site features thousands of articles and glossary terms that are cross-linked together. Designed to increase consumer awareness in after market parts for automobiles, this site provides users with information about a variety of different topics. Also, a very large database of products and manufacturers allows the user to find SEMA members. A weighted search engine makes it easy to find relevant articles, manufacturers and glossary terms quickly.

Ad console This site also features targeted advertisement banners. I developed ad server application to tag collections of banners to relevant pages based upon keyword matches and page groups. Using a campaign-based metaphor similar to the print publication industry, sales agents use a robust backend to tag banners to campaigns. The campaigns are then staged and committed when payment is received.

Other interesting projects included web applications such as a dynamic calendar of events, a "customize your ride" interface that uses dynamic image composition on the server-side, a weighted search engine that incorporates rule-sets and scoring based upon SQL full-text indexing, and an "Ask the Experts Forum."

ralphs.com 1998-2000

Ralphs.com, the web presence of Ralphs Grocery Company, was a high-profile account of our agency circa 1998. It was my duty to administrate web and database servers and to oversee the programming team in development of the site. Some interesting applications that I developed included an admin console for publishing weekly coupons, a database-driven store locater, recipes online, several pilot ecommerce projects, an advertisement placement backend, and many weekly/monthly promotions.

Responsibilities for the Ralphs account included estimating design and programming projects and interfacing with Ralphs' agency and top company executives with regard to campaigns & promotions.

csuchico.edu / videomaker.com 1994-1998

"Webmaster" for College of Communication's website. Studied with an emphasis in Human Computer Interaction, Web Design and Alternative User Interface technologies. Independent study in 3D User Interfaces, HTML and web based Content Management Systems. A-student in CSI Animation courses on the Silicon Graphics Indy workstation and Onyx render farm running Alias Wavefront. Beta-user for Sense8 Software's "WorldUP" 3D User-Interface IDE used for designing simulation systems. "Webmaster" for Videomaker magazine building automated web publication systems for magazine content. Designed and built an ad-management platform in Cold Fusion and SQL Server.