This project involved building a modern network speedtest to replace AT&T’s flash based speedtest. My client (DslReports.com) brought me in to write a speed testing wrapper around their current speed testing API in pure javascript, which could be used to package DslReports’s current speedtest as an embedable widget to be used on any of their customer’s websites. The challenge was making sure the script size remained small while containing complex pieces of code and being supported on all browsers so the script could be easily be used by anyone to embed the speedtest on their page. But after lots of prototyping I was able to build something that fulfilled all requirements and had a tiny size. For the graphics I used the HighCharts js (due to its vast support for all browsers).

View it Live: http://speedtest.att.com

The finished product

The interface of the speedtest library that I wrote. Powering the visual part is the Highcharts JS library.

Performing a Speedtest

Here’s how it displays results

My Work at DslReports

  • Wrote a pure JavaScript library for providing the company’s clients an interface to embed the network testing widget on their websites.
  • Developed widgets from scratch using HighCharts, D3.js for interfaces. One of the widgets is live here: https://speedtest.att.com.
  • Created interactions from scratch using wireframes for the UI, and parameters from client for the functionality.
  • Wrote cross browser compatible code and standards compliant CSS based layouts
  • Wrote modular code adhering to best practices and DRY principles.
  • Succesfully handled JSON data and carried out JSON parsing for form submissions and DOM manipulation.
  • Wrote a cross platform command line application for network speed testing in Go
  • Extensively used Go Routines for testing network throughputs.
  • Wrote a WebSocket based network testing server in both Go and C (libwebsockets)
  • Developed CLI speedtest into a system service that remained always on, that could be remotely invoked and post results to the DSLR API.