@davegullo
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.
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.
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.
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.
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".
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!
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
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.
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...
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!
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Allow all calls
Deny from (213)
Allow from (213) 874
Deny from (213) 874-3214
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.
NOTE: This was designed/developed pre-AJAX in 2001
NOTE: This was designed/developed pre-AJAX!
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 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.
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.
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.
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.
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.
CI/CD for Driver onboaridng system using Selenium + node.js, various internal tools and data visulizations with python, flask, d3.js.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
"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.