In the late 1980's I started hacking BASIC on the Commodore 64, then on the IBM 286xt, BBS-ing, PovRay / PolyRay raytracing, and then HTML in 1994. This evolved into an array of projects, some of the coolest and most interesting are contained within. 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 have processed ~1 trillion signals. Some of my best work has gone to the bottom of the ocean on crashed airplanes, or you may have interacted with it to buy things online or rent skis at a resort.

I love public speaking because it is challenging and does not come naturally to me. Over the years I've hosted roughly 100 meetups in San Francisco and LA centered around tech and entepreneuership, and have taken titles like "Socially Capable Geek", and "Geek Whisperer". As I became more ensconced with startup life, entrepreneuerial meetups became difficult so thought leadership through blog posts and public speaking became the better choice. I have highlighted some of these blogs and technical talks within this portfolio.

Currently, I'm focusing on engineering organizational transformation by scaling up systems, people, and processes. When there's time, I'm working with my architects proving new concepts and hacking the full spectrum from Apache Spark to D3.js. These activities are punctuated with serving as Camp Counselor, and Armchair Psychologist to my engineering org.

My obesession is with optimizing performance; wherever the gap may exist: individual contributor, team, org, client, server, device, etc... I'm a big fan of: test-driven-develoment, Readme-driven documentation, product and engineering management joined at the hip, and human-factors as they relate to user experience and organizational development.

My role at VideoAmp as technical co-founder has colloquially been "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, inspiring my fellow Hackers to self-organize and deliver BIG things, and put the best people in the right places.

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 the occasional glass of wine. I'm now based in Austin, TX.

Videate

Within large companies, the adoption of Digital Transformation platforms has been on the rise. Covid has accelerated existing (and new) mandates to deliver software training remotely and on-demand with video, vs in-person software training.
The challenge is that as you record software videos, they go out-of-date as early as your next release. We call this “Video Debt”. With agile development and continuous software releases, the only way to guarantee videos are always up to date is by automating their production.
Videate solves this by reading and understanding tech and training docs, then "spieling" through the workflow in the customer’s UI. Along the way it's recording quality that show and tell, and pass the Video Turing Test.
... continue

CTO Interview Series

Read the full article | Listen to the Podcast Series | iTunes Subscribe
Talent is super competitive to attract and retain. We'll call them "Brains". As technology leaders, we gain a competitive edge for attracting and retaining Brains by offering growth and career path coaching for each of our team members. As a Brain, your overall career path is achieved through growth and by adopting a continuous improvement approach to life. We live continuous improvement/learning as an Org, and discuss it with each new individual, from first contact to the job offer, manage it during employment, and even after separation.
... continue

Interview Junior to Senior

Listen on iTunes
Dave brings up important aspects of career life in his discussion with David where he discusses the cultivation of skills, the importance of passion and persistence, and some fun stories on how not to do an interview.
... continue

For Brains, it’s Largely a Seller’s Market

I noticed that it is a battle to get top technical / engineering talent, and at VideoAmp, we settle for nothing less. I reached out to my network and beyond to get some input from other CTOs on their biggest pain points. ... continue

Why Typescript?

Some changes in software engineering happen quickly that you expect to take a long time. Our mongo to postgres migration is one example where we thought it would take a quarterand it took just a few weeks despite the ginormous codebase. Our transition from ES6 to Typescript was a similar endeavor which produced tremendous value with a small initial investment. ... continue

Blindspots

To avoid surprises, one must always have their “head on a swivel”. Like a hockey player or wide receiver.. and just like a tactical operator “check your six”. It’s all about continually scanning your blind spots. ... continue

Your Security Cameras are Snitching on You…

We installed a high-end 4K security camera system around our house last summer. The cameras have high fidelity, and a bunch of configurable features like sub-streams, alerts, and motion detection, but there was one glaring problem…. they are constantly snitching on us by uploading data to the cloud.

When setting up the system online I explicitly checked boxes not to backup to “the cloud” or use any cloud-based services, however we did intend to use the associated viewer app to watch the video remotely. I naturally assumed that the uploading of data would only happen when we requested it from our phones…. well, I was wrong.

... continue

What are your Imperatives?

VideoAmp has been hiring like gangbusters this year. Right now we are running a burgeoning talent pipeline involving a dozen+ recruiters, 5 roles, 4 leads, and a run rate of closing ~20 Brains / quarter. Let’s discuss some fine-tunings that we are applying to our hiring process, so that we don’t lose our early-stage startup engineering mojo as we scale.

... continue

TechCrunch: Dev Process for Startups

As the co-founder of a “142-proof” software development agency in the Silicon Valley catering to pre- and post-money companies, I’ve observed quite a bit of variance when it comes to the development process. The capabilities range wildly, from hack-and-slash “oh shit commits” all the way to buttoned-down tests and infrastructure that makes us all giddy when we see it. It’s pretty much The Good, The Bad and The Fugly. ... continue

Warm Fuzzies Reacting to MethBot

They say that the 42nd year is the banner year for Geeks, and I must humbly say that 2016 has been the most remarkable year of my life. As we come into the waning days of 2016, I'd like to reflect on some of the highlights (and lowlights) of this past year in the data and engineering side of VideoAmp.

... continue

The Toddlers are Raising the Infants

I thought that I had seen it all last year with some of the sketchy and downright underhanded tactics from recruiters. So much so, that we fired all of our recruiters and decided to take an organic, direct-hire approach to our growth at VideoAmp. Now, I have seen a new tactic on the supply-side; “bait-and-switch candidates".

... continue

Why we switched from Mongo to Postgres

Quite a few people have reached out since announcing that VideoAmp finalized our migration from MongoDB to Postgres. For us, it was about data integrity. We had budgeted 6-8 weeks for migrating models, and shoring up tests; we did it in 3.5 weeks end-to-end!

... continue

Fixing Suboptimal API Integrations

Nothing is more annoying than an incomplete or inefficient API integration experience. The majority of the time we do an integration with an external API at VideoAmp, it’s like being a kid in a candy store full of chocolate covered bugs. Some symptoms of this include

... continue

Welding Donald's Boat

The week after I graduated High School, I joined a construction company which was doing the façade work at Disneyland's Toon Town. I had been no stranger to hard work while growing up. I delivered newspapers, mowed lawns, and collected rare coins. I came to realize over that summer that construction was a magnitude beyond all of that in intensity.

... continue

Falling Into Business

In 1998 I founded snowboards-for-sale.com which was a curated, person-to-person classified ads website for specializing in snowboarding gear. By 2001 the site grew to over 30k posts, and at the time had more daily posts than eBay or Craigslist for similar items. The problem was that it became so popular, it evolved into a channel for fraudsters. Unwitting customers would send cash in envelopes from USA to Canada. That was a big mess...

... continue

OC node.js - Hybrid Use of Scala and Node.js

node.js is great for certain problems, but scala is much better for very high volume and low-latency purposes. VideoAmp uses node.js for API services and in conjunction with our react.js frontned. Scala is ideal for our real-time bidder because of shared memory, and the JVM's thread-pool executor which allows smoother scaling across cores and CPUs. This chat was given to the OC node.js meetup to discuss the use cases. ... watch

SoCal node.js - Fixing Suboptimal API Integrations

The majority of the time we do an integration with an external API at VideoAmp, it’s like being a kid in a candy store full of chocolate covered bugs. Some symptoms of this include: Incomplete Specification, Fuxored Example Code, Not really REST-ful, Sandbox not full of sand, Immortal Garbage Data, Snail Mail support times, and more .. ... watch

AWS: VideoAmp at Container Day 2016

Our use of Docker was instrumental to developing, deploying, and ultimately moving out of Amazon's EC2 with a massive workload in just 3.5 months. This video explains our use of Docker in Amazon's ECS container service which was very helpful for us in our earlier years, and prior to us outgrowing EC2's multi-tennancy problems and network partitioning which ruined some of our critical application's performance. ... watch

The Slow Death of Traditional Media and the future of Content and Role of Data

A panel discussion at TechSauce Asia 2017 regarding the role of digital content vs. traditional media. Shared the stage with executives from Facebook, GroupM, and WebTV Asia. Video TBD, it's not available online at this time.

How VideoAmp Evolved The Company Culture And Process

VideoAmp turns 4 years old this month. So many memories, and so much growth. Let’s reflect on some of the worst decisions and associated learnings that have been fundamental to our growth. Why the worst you say? Because when you accelerate your learning rate in a fail-fast environment, it then allows you to make fast decisions vs. the analysis paralysis predicament. ... continue

Exchange Wire: What really happens when a video ad is auctioned?

Online content is saturated with ads; the delivery of which is powered by numerous third-party technologies that ‘facilitate’ the delivery of an advertiser’s ad creative to a publisher’s website. Much of this activity is only seen and understood by ad-ops professionals and engineers, perhaps by design. In this piece, Dave Gullo, technical co-founder, VideoAmp reveals the proliferation of the technology middlemen and the implications of ad tech overkill. ... continue

Martech Interview Series : Dave Gullo

Existing viewability metrics are a reaction to an industry that got too cozy with low quality and often fraudulent traffic sources. In the next two years, more Video will be bought directly, using automation and data. ... continue

Built In LA: An interview with VideoAmp co-founder and CTO Dave Gullo

Technology can be a double-edged sword. Inevitability, it displaces people and jobs but can better their quality of life. Automation, whether it is the invention of electricity or different applications of software, has the ability to disrupt the norm. When it comes to present day with the invention of the World Wide Web and the ‘As-a-service‘ delivery model, you have a similar kind of deal. VideoAmp does advertising. In our case, automation provides better yields and efficiencies and people can focus their time on higher-level tasks. ... continue

Resolve: My developer reacts defensively to feedback

A bit of fun roleplay with Resolve about how to handle a developer who is not taking feedback accordingly. It important to tailor feedback around constructive means, and to reiterate a comapnies standards, and how they can be better met. Get this wrong, and you trigger a fight or fight response. Note this question was sprung on the fly during a broader interview, so my response was off the cuff.... ... continue

VideoAmp Raises USD $21.4m in Series B Funding

Dave Gullo, co-founder and CTO, VideoAmp, tells ExchangeWire: “We are very enthusiastic with the recent capital infusion and validation from our investors in this Series B round. We will be growing our data science and data engineering teams to increase capacity and reduce the innovation time in our linear suite of products. Given our lean-and-mean engineering ethos, our commitment to continuous learning and improvement, and our contributions to the open-source Apache Spark project, we have the best data science and engineering team in this space pound-for-pound.” ... continue

LA Times: SoCal geek/tech startup scene

Today's job titles are nothing your dad would recognize, and neither are the jobs: try 'geek whisperer,' 'experience curator' and 'entrepreneur in residence.' I sat down in a dimly lighted red leather tuck-and-roll booth with the geek whisperer, Dave Gullo, 38. Gullo lives in Orange County but works as an engineer for a San Francisco company, Krux Digital, flying up to the Bay Area several times a month. "I have a saying: I'd rather fly to San Francisco than drive to Santa Monica," Gullo said. ... continue

Techcrunch: The War for Developer Talent

I would say the #1 mistake professional recruiters make are the hard sell and aggressive tactics. This includes calling your current workplace, trying to pierce through the company to get an engineer directly on the line. In a way, this can be flattering but oftentimes off-putting and zaps precious attention units. ... continue

Behind the Scenes with Big Data

Last week, Tech in Motion Orange County hosted Dave Gullo, co-founder of CLI, in Irvine for their September Tech Talk. With over 150 attendees, Dave Gullo’s talk drew a large crowd that was ready to learn about how every minute we spend online, we are being bought, traded, and sold. ... continue

High Tech Shopping and Unbeatable Customer Service

snowboards-for-sale.com was a specialty online snowboard shop focusing in snowboard protection, racks, boards/boots/bindings, bags, packs, travel luggage and offers many accessories related to the snowboarding market. I spent 3,000 man hours on the ecommerce, seo, crm, and warehouse inventory management system. We were small, but used alot of great tech to serve our customers. ... continue

Home Security

Woofer: Home Security Watchdog

Woofer is your "on-prem" home security system which scans your 4K security cames, and detects human movement. Motion sensors cause plenty of false positives, but Woofer does not alert unless the detected region looks like a person. False positives are virtually eliminated. With integration to the home alarm provider, Woofer will text and/or email you if the home's security system is active, and can tap into home-automation systems to turn the lights on when a person is detected outside late at night.


Apache Spark

Jupyter Notebook: Spark SQL to D3/TopoJSON

D3 Plot of Zipcodes A Jupyter Notebook which taps our extensive Spark SQL warehouse. Users simply pprovide 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! SparkSQL


Chrome Extensions

VAST'er

VASTER visulizes and 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.

Large Scale Browser Automation

Columbo 2014-2017

Columbo was designed to do site quality assessment with the sites VideoAmp sees in the real-time bid stream for video advertising. It vists the site, and does a series of scans to assess the quantity and quality of content, volume of ad clutter, and size, position and viewability of video players. The data is over sampled and a map is projected over each site showing the typical screen resolutions for video players on the given site, and allow us to make informed descisions on behalf of our customers.

In his particular example, (which was really just a video code review for my team), I was comparing the efficiency of "skim" vs. "queue" based schedulers in a Selenium Grid of several work queue scheduler models, and the goal was to maximize the 128 worker cluster as close to 100% as possible.



Google Glass / Personal Bot Agents

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.
Fetchie 2.0 : Personal Car Shopping Bot The 2017 version of Fetchie dropped Google Glass and became a browser-based personal shopping agent. A server-side bot component crawls all "watched" pages, and a Chrome Extension overlays price history data on websites that you watch. This allows you to watch 100s of pages, and only focus on the movers. Any drastic price drop is detected within an hour, and you have the advantage of being a first-mover to close a deal. This bot found my rare and prized sports car.


Firebug Extensions

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.

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.

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

HTML / XML / Javascript / jQuery / extJS

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 its 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.

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.

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.

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.

Tree + Table

JXTree in action

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 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.

PYTHON / DJANGO / FLASK

Krux Digital 2011 to 2012

Krux Digital 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.


Lyft 2013-2014

Lyft CI/CD for Driver onboaridng system using Selenium + node.js, various internal tools and data visulizations with python, flask, d3.js.



PHP / MySQL

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. 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

NODE.JS

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.

Android

Forgot or Not - 2013

Forgot or Not Forgot or Not is a gamified memory game/program designed for power networkers, drawing from LinkedIn network connections. In order to cure "facial blindness", you train your brain against your most recent connections, then play mini-games to test your network familiarity. When you choose right, it rewards you. When you choose wrong, it shows you the right answer and does a cardflip, exposing more details on the back. Once you master your most recent connections, you level-up and start going backwards into time. After playing for 3-7 minutes / week, I got to 97% familiarity with ~4,000 connections. Project was scuttled due to increasing limitations with LinkedIn's API.


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.

snowboard-factory.com 1993-1997



  1. AUTOMATIC GENERATION OF VIDEOS FOR DIGITAL PRODUCTS USING INSTRUCTIONS OF A MARKUP DOCUMENT ON WEB BASED DOCUMENTS
  2. Targeting TV advertising slots based on consumer online behavior
  3. Sequential delivery of advertising content across media devices
  4. Cross-screen optimization of advertising placement
  5. Programmatic TV advertising placement using cross-screen consumer data
  6. YIELD OPTIMIZATION OF CROSS-SCREEN ADVERTISING PLACEMENT
  7. SEQUENTIAL DELIVERY OF ADVERTISING CONTENT ACROSS MEDIA DEVICES