Browser Automation At Scale - Part 1

Docker Swarm and Selenium Both Docker and Selenium are pretty much household names these days in the world of software engineering. I’ve been fascinated with Docker since its inception and have been using it for side projects and in my day job for a few years now. I recently came across the need to test a Chrome extension and load a web page while that extension is installed. This test would load the page, wait for it to load, check some JS variables and APIs and then spit out a screenshot and any needed metrics.

Comments    docker swarm, selenium hub, selenium grid, chrome

The Decommissioning of Onslyde

As a creator and overseer of an Open Source project, we must make tough decisions on when to pull the plug and move on. In 2012, I started a web based, real-time feedback project called Onslyde. To me the project was a huge success with many measurable results: Massive amount of research with WebSockets and mobile devices. Based on the code and research I was able to craft many talks for speaking engagements at conferences around the globe.

Simulated RUM testing with PhantomJS 2

Today, many companies are synthetically measuring web performance with various scripts and services. Now that everyone is able to measure those performance numbers and visualize the problem areas, it’s time to raise the bar in terms of scalability, portability and the use of newer DOM APIs. The following charts show a snapshot of data collected over the period of one year (2012-2013) from the home page using Loadreport.js. Loadreport data from 2012-2013 for I started the Loadreport project while working on the CNN homepage in 2012.

A More Better Conference Experience

Overview I’ve been working on an open source project called Onslyde for almost 2 years. If you want to know the details behind it you can read articles here, here or watch a recent interview. This year, at Devnexus 2014, I wanted to take Onslyde a bit further by offering a way for sponsors to ask questions throughout the day between sessions. Since this was a trial/experiment I went old school and didn’t create a web interface for reserving sponsored slots.

Comments    devnexus, onslyde, raspberry pi, rpi

From Startup to Enterprise

Overview At the beginning of 2013 I was given the incredible opportunity to start with an empty canvas and come up with a completely new web application for Apigee. For the past year I’ve been heads down on merging Apigee’s Usergrid and Mobile Analytics products using AngularJS. For those interested: Usergrid, a Backend as a Service, was acquired by Apigee in early 2012 and has served as the core tool of all Apigee trainings and developer outreach efforts.

Jank Busting Apple's Home Page

Overview Watching frame rates on CSS and/or JavaScript animation is pretty addictive. I wrote this article the other day which examines the performance of a simple countdown timer within the Angular lifecycle. I then spent countless minutes playing Jake Archibald’s Jank Invaders to hone my skills and save the universe from jank :) So, I was on Apple’s home page the other day and noticed some jank in their main carousel animation.

Basic Screen Updates with Angular and requestAnimationFrame

Overview Some of the best known approaches for running a countdown or count-up timer in AngularJS are shown on JSFiddle using setInterval and Angular’s builtin $timeout. Both approaches require the use of $scope.$apply, which is completely normal. It forces the page/bindings to update when a change is made outside of the AngularJS lifecycle (like inside a setInterval or setTimeout). If you want to read more about $scope.$apply check out this article.

Comments    rAF, requestAnimationFrame, angular, angularjs, setinterval, settimeout, jank

Fun with Static Site Generators and Travis

Overview If you use a static website generator, then you may be aware of the pain that goes into getting everything automated and pushed out to github pages on each commit. The manual workflow goes something like this: code your site using asciidoc/markdown/haml/sass/less/etc preprocessor (or build) generates static site (locally on your machine) copy static site to your local gh-pages or repo/branch git push new site done Now, with a little scripting we can have: code your site using asciidoc/markdown/haml/sass/less/etc git push to source repo done (with so many other cool features at our fingertips) Most preprocessor tools do have some kind of built in function for this workflow, but when you need to take it to a finer grained level and leverage services on the CI server, then this is what must be done.

Comments    preprocessor, travisci, awestruct, loadreportjs

How Collective Wisdom Shapes a Talk

Overview Exactly one year ago, I started working on a WebSocket prototype that would give audiences the power to control my talks. I used it for the first time at DevNexus 2012 in Atlanta, GA and it produced great engagement results. At that time, the only analytics I had built into the server were through logging, and the results were motivating enough to continue using the prototype. Over the span of 2012, I spent many late nights in hotel rooms preparing my slides for talks and working out bugs of this tool which I named “onslyde”.

Comments    websockets, speaking, audience engagement

Adventures with the Skia Debugger

Debugging jank, reflows, etc… The Skia debugger was mentioned a few weeks ago at EdgeConf as a way to examine how the DOM is loaded and processed in the Chromium web browser. Skia is the open source C++ graphics library backing Chromium/Chrome. It comes with a graphical tool used to step through and analyze the contents of the skia picture format. If you haven’t watched this video, I recommend you take a few minutes and watch the first part to understand the context of why the Skia debugger was mentioned and where it might be useful.

Comments    frontend, html, css, graphics, debug