Nathan Friedly
  • Home
  • About
  • Portfolio
  • Tech blog

Portfolio

Nathan Friedly is an engineering leader and JavaScript expert with a history of building companies, managing remote teams, and delivering results.

He loves mentoring people, automating tasks, shipping products, and delighting users.

  • GitHub
  • Stack Overflow
  • LinkedIn
  • Resumé
Click a tag to filter the portfolio Clear Filter [X]
AJAX AWS Android AngularJS Apache Arduino Backbone.js Bitcoin BlueTrip Bootstrap Bower Browserify C# C++ CORS CSS Canvas CasperJS CodeIgniter CoffeeScript Continuous Integration CouchDB DocPad Docpad Drupal ECO ESP8266 Express Flash / ActionScript Go Gulp HTML Handlebars.js Heroku IoT Jade Jasmine Java JavaScript Jekyl LESS Memcached Meteor Mobile First MongoDB MySQL Next.js Node.js Open Source PHP Photoshop PostgreSQL Presentation Python React Redis Require.js Ruby Ruby on Rails SASS SEO SQLite Sails.js Twitter WordPress YUI e-Commerce email gulp.js hardware jQuery npm

[Show more tags]


Puck.js Media Control

This is a Puck.js device running the Espruino JavaScript environment and a script that I wrote to control media playback.

I listen to a lot of AudioBooks, and my earbuds have touch controls that just don't seem to work very well. So, I created this to give me a physical button that works every time and also provides better feedback.

  • A short press toggles play/pause and blinks green once.
  • A long press triggers 3 previous track commands and blinks blue once.

Tagged JavaScript, hardware, Open Source, IoT

Dog feeding tracker

A device that answers the question of "Did anyone feed the dog yet?"

Built with an Adafruit QT Py running CircuitPython, a door sensor, and a dog food container, it detects when the door to the dog food container is opened/closed and colors the LED to indicate when the dog was fed last:

🟢 Green indicates that the dog has been fed her breakfast / dinner (or at least that the food container has been opened within the last 8 hours)
🔴 Red indicates the dog has not been fed her current meal
🔵 Blue indicates the door is opened now, or the wire is disconnected, or the microcontroller rebooted and doesn't know the last time the door was opened. After the door has been opened for a brief period, it switches to rainbow to indicate that the timer has been reset.

Tagged Python, hardware, Open Source

set-cookie-parser

Library to allow Node.js (and other non-browser JS environments such as React Native) to parse Set-Cookie headers sent by other servers.

Most Set-Cookie headers are straightforward to parse, but the HTTP spec allows for headers to be combined into a single comma-separated string, which adds some significant complexity to parsing.

set-cookie-parser is well-tested and widely deployed both in apps and as a dependency in over 100 other libraries with over 1 million monthly downloads.

This library was initially part of unblocker, but was spun off due to its complexity and general usefulness.

set-cookie-parser on NPM set-cookie-parser downloads set-cookie-parser's build status Tagged Node.js, JavaScript, npm, Open Source, React, Continuous Integration

Next.js in 5 minutes - Lightning Talk

This is a Lightning Talk I gave at Tanium's October 2018 Dev Week with a quick overview of Next.js.

Next.js is a React powered web framework with server-side-rendering, simple file-based routing, intelligent CSS handling, and more. It provides everything that create-react-app provides and more, handling all of the plumbing and allowing you to focus on the fun parts.

Tagged Presentation, Node.js, JavaScript, Next.js, React

Tanium Threat Response

Tanium offers a platform and suite of modules for large enterprises and government agencies to manage and secure their entire fleet of computers.

My team and I launched the Threat Response module which has a number of capabilities to support both automatic handling of computer threats as well as supporting manual investigation and remediation.

Threat Response keeps a database of activity on each endpoint such as registry changes, driver loads, and file system modification. It can match these changes against known and suspected threats in real time and efficiently scan the history of every computer on the network once a suspicious pattern has been identified to ensure any threat is fully isolated.

My personal contributions covered a variety of tasks including:

  • Performance optimizations to enable near-real time search of upwards of a million computers
  • Mentoring and training of the team, covering Node.js and security vulnerabilities in particular
  • Automated E2E testing that included spinning up and managing entire virtualized networks of computers
  • Enhancing the WebSocket "Live Endpoint Connection" to support remote file system manipulation
  • Developing cross-platform python scripts that run on millions of endpoints simultaneously
  • UI & UX improvements with AngularJS and later React
  • Automated linting and unit tests with ESLint, Pylint, Jasmine, tox
  • SQL Server, Postgres, and SQLite database administration

Tagged Node.js, JavaScript, AngularJS, React, Continuous Integration, Python, C++, Go

Speech to Text demo

The Speech to Text demo allows live transcription of microphone input, user-provided audio files, and sample audio files via the Watson Text to Speech service.

I re-created the app, building on top of my Speech JavaScript SDK and our React Components Library.

The updated demo is cleaner, faster, mobile-friendly, better-tested, and easier to work on and extend than the earlier one.

Tagged JavaScript, Node.js, React, Express, Continuous Integration, Open Source, Mobile First

Color OLED display library for Particle Photon

Library to connect an Adafruit SSD1351 1.5" Color OLED breakout board to a Particle Photon.

I built on top of the working driver created by Adafruit and the Particle community, filling in the gaps and adding polish.

My contributions included adding wiring instructions, adding and tweaking the example, packaging it in the Particle library format, and generally improving the documentation.

Tagged C++, IoT, hardware, Open Source

Watson React Components Library

My team and I started developing a collection of reusable React components that build on top of the Watson UI Components library to support rapidly building demos and other web apps.

The components are general UI widgets that do not directly interact with Watson services, but the library includes things such as an image picker that would be helpful when building Watson-powered applications.

My contributions included creating and enhancing several of the components, automating deployment, improving testing, and improving the documentation and examples.

Watson React Components Library on NPM Watson React Components Library downloads Tagged React, JavaScript, Open Source, Continuous Integration, Express

Contentful Dictate UI Extension

Contentful is a hosted CMS with a friendly-yet-powerful back-end UI, and an API-only front-end. Their UI Extension SDK enables custom content fields to provide greater flexibility when needed.

Contentful Dictate was a quick 2-hour hack (+ some polish added later) to create a voice dictation text field with my Watson Speech SDK.

The extension automatically matches the content's locale to the closest Watson voice model, and also matches contentful's styles.

Given that microphone access is only available in fairly modern browsers, I was able to use quite a lot of ES6/ES2015 syntax without needing any ES5 transpilation.

Tagged Node.js, JavaScript, Open Source, Express

Watson Developer Cloud Speech JavaScript SDK

Easy to use SDK for working with the Watson Speech-to-Text and Text-to-Speech services in web browsers.

Can synthesize voice audio from text input and transcribe speech from various sources including microphone input, download files, and user-provided files. Advanced usage allows for input from arbitrary audio sources. Supports Promises, Streams, and outputting directly to a given HTML element, including live-updating.

The library is built around a series of composable Node.js-style streams, and a few helper methods for common use cases.

Available as watson-speech on npm and Bower, and also as a standalone JS file. Thoroughly documented and tested, with continuous integration and delivery.

Watson Developer Cloud Speech JavaScript SDK on NPM Watson Developer Cloud Speech JavaScript SDK downloads Watson Developer Cloud Speech JavaScript SDK's build status Tagged JavaScript, Continuous Integration, npm, Open Source

◢ Incline

After more than a dozen years as nFriedly Web Development, I decided to rebrand my business as Incline. The new name better represent the growing size, scope, and goals of the business.

The design features a stunning mountain photo captured by Sam Ferrara, and a color scheme chose to compliment it.

It's built with Jekyl and Bootstrap v4-alpha. At the time of writing, it's not fully complete, but it is live and functional. It's currently using several emojii, although they will likely be replaced by Font Awesome once v5 ships.

Tagged Jekyl, Ruby, Bootstrap, SASS, HTML, Open Source, Continuous Integration, Mobile First

Node SDK Technical Deep Dive Presentation

I gave an internal presentation at IBM on the Watson Developer Cloud Node.js SDK that goes through installation and setup and then builds a small app to analyze, translate, and speak text.

The presentation was done live, the video is from one of my practice runs with some slight editing.

Tagged Presentation, Node.js, JavaScript

Visual Recognition Demo

A sample app that shows off the capabilities of the IBM Watson Visual Recognition service. The service can recognize arbitrary pictures, detect faces, gender, age range, and even some well-known celebrities. It's also customizable and trainable, and the demo shows off every aspect of the service.

I served primarily in an advisory role, but also did some of the development work aimed, simplifying the internals and adding automated testing / continuous delivery.

Tagged Node.js, JavaScript, React, Open Source, Continuous Integration, Express

Document Conversion Demo

The Watson Document Conversion service accepts documents in a variety of formats and converts them to formats compatible with the Watson Retrieve and Rank service.

I helped to create both the initial version of the Document Conversion demo, and the updated one based on our React components Library.

Tagged JavaScript, Node.js, React, Express, Open Source, Continuous Integration

Klopfer Building

The Klofer Building, where Incline's offices are located, has a couple of additional office spaces available. The building owners asked me to set up a new site to advertise the available spaces and provide a directory of of current tenants.

The site makes extensive use of microformats to facilitate rich, automated processing. It also provides floorplans, a map, and some of the history of the building.

Tagged Bootstrap, SASS, HTML, Mobile First

Naughty or Nice Candy Machine

Whoopi Goldberg trying out the Candy Machine We built a Watson-powered candy machine: it gives sweet or sour candy depending on the semtiment of one's statement. It was initially built for IBM's 2016 InterConnect event and then displayed at subsequent events including the Tribeca Film Festival.

I worked on both the hardware side, assembling an Arduino to control the machines, and the software side, developing the Watson Speech JS SDK that helps capture and transcribe the user's voice. There was also a python script running in the background that orchestrated everything.

Tagged IoT, hardware, Arduino, Python, JavaScript

IBM Watson Developer Cloud Website v2

I worked with the design team to get the new Watson Developer Cloud design under a tight deadline. The new design further improved on the previous one in terms of flexibility, performance, usability, and aesthetics. V2 used the same DocPad static site generator as the previous version and integrated with the same underlying content sources.

Tagged SASS, HTML, ECO, DocPad, CouchDB, SEO, JavaScript, CoffeeScript

Watson Developer Cloud Node.js SDK

The watson-developer-cloud module on npm is currently the most popular way of accessing Watson APIs. It provides idiomatic Node.js access to every single public Watson API in a single consistent and easy-to-use package.

I took on responsibility for the overall library shortly after it's initial release, and have since authored a fair portion of it including several of the services, automated testing, documentation, and publishing.

Watson Developer Cloud Node.js SDK on NPM Watson Developer Cloud Node.js SDK downloads Watson Developer Cloud Node.js SDK's build status Tagged Node.js, JavaScript, Continuous Integration, npm

Internal Service Management Tool

An IBM internal web app to assist with bringing new Watson APIs public. Connects to various services and servers including LDAP, DataPower, Eureka, Zuul, our Bluemix Service Broker, and others to ensure everything is aware of and correctly handling a given API.

My contributions included dockerizing the app and scaling it out to multiple processes/servers, adding support for moving an API through the Experimental/Beta/General availability stages, and numerous bug fixes and performance enhancements.

I also set up automated testing both with mocha-based unit tests and CasperJS-based UI and integration tests that run on each commit and report results to the team's Slack channel.

Tagged Node.js, JavaScript, Express, Jade, CasperJS, Continuous Integration

Watson/IoT presentation at Disrupt SF 2015

I presented on using Watson and IoT together at Tech Crunch's Disrupt SF 2015. I put together a demo to accompany the presentation that allowed you to use voice control to turn light on and off over the internet. It combined an ESP8266 connected to the IoT Foundation cloud service (MQTT broker), a web app employing the Watson Speech to Text service, and a Node Red instance connecting all the dots.

The presentation itself had voice-controlled slides and gave an overview of the various pieces of the demo, how they fit together, and how to build on them to create new applications.

Tagged Presentation, IoT, hardware, Arduino, ESP8266

Load more...

Loading...

Contact Nathan

  • nathan @ (this website)

Site Map

  • Home
  • About
  • Portfolio
  • Tech blog

Website by Nathan Friedly

Creative Commons License Content licensed under Creative Commons Attribution.

Source code available on Github under a MIT License

Built with DocPad, Bootstrap, and Node.js.