Skip to content

Instantly share code, notes, and snippets.

View ianjennings's full-sized avatar

Ian Jennings ianjennings

View GitHub Profile

Abstract

Developer experience needs measurements that go beyond email open rates and website analytics. Developers spend time in their terminal, IDE, and help sites. Learn how to apply UX and analytical methods to improve your developer experience, reduce on-boarding friction, and drive your API strategy.

Talk Desctiption

Developer Experience is an emerging field that lacks solid process, tooling, and measurement. In this talk we turn developer experience into a science. Learn how measure the efforts of your marketing and developer relations teams with more than web analytics, produce feedback on demand, and use analytical data to drive your developer strategy.

Ian Jennings has been working in Developer Experience for 8 years. He founded Hacker League hackathon platform which sold to Mashery/Intel and spent 6 years building Developer Experience at PubNub. Now he’s applying user experience and analytics methods to the world of APIs and developer experience in his new company, Haxor.

@ianjennings
ianjennings / 1_goal.md
Last active May 29, 2019 00:18
Sterling API Test Instructions

Your Goal

Build a NodeJS application that performs a background check on a user:

  1. Use the Sterling API to create a NodeJS application that performs a SSN Trace check on the example candidate (see candidate.js below).
  2. Use the Sterling Developer Portal to update the status of the applicant (see callback notes below) and display this status in the NodeJS application.
  3. Use the Sterling front-end JS library to create a GUI for performing the same SSN Trace check, but this time on the front end.
{
id: "",
clientReferenceId: milliseconds.toString(),
givenName: "John",
familyName: "Smith",
email: milliseconds.toString() + '@example.com',
ssn: "112223333",
dob: "1975-02-28",
address: {
addressLine: "222333 PEACHTREE PLACE",
@ianjennings
ianjennings / chat-engine-invite-secure.js
Last active July 19, 2018 02:04
This is an example auth policy for PubNub ChatEngine that sets the first user to enter a new private chat as the owner. Any additional users must be invited by a user that is already in the chat.
// function to check if a uuid (who) exists in a db record (and is permitted in the channel)
let isAuthed = (record, who) => {
if (!record) {
return true;
} else {
return who && record && record.length > 0 && record.indexOf(who) > -1;
}
};

Setup

Checkout The ChatEngine Repository

This example depends on compiled JS SDK found in the auth-policy-refactor branch.

Make sure to compile this version of ChatEngine in the sibling directory:

/chat-engine (auth-policy-refactor)
  • pubnub-cli watch
    • Watch local directory
    • Update remote Event Handlers on change
    • Restart PubNub Functions
  • pubnub-cli test
    • Added unit test command for local testing
    • Modules emulated locally
  • pubnub-cli pull overwrites local files
  • Update to support JS-ON-REST
  • Update to support keys with PAM enabled
// runs on setup
let request = require('request');
let PubNub = require('pubnub');
let channel = 'chan' + new Date().getTime();
let myUUID = 'uuid' + new Date().getTime();
let myAuthKey = "auth" + new Date().getTime();
request.post({
url: 'https://pubsub.pubnub.com/v1/blocks/sub-key/sub-c-67db0e7a-50be-11e7-bf50-02ee2ddab7fe/auther',
// runs on setup
let request = require('request');const config = require('./test-grant-config.js');
let PubNub = require('pubnub');
let channel = 'chan' + new Date().getTime();
let myUUID = 'uuid' + new Date().getTime();;
let myAuthKey = "auth" + new Date().getTime();;
request.post({
url: 'https://pubsub.pubnub.com/v1/blocks/sub-key/sub-c-67db0e7a-50be-11e7-bf50-02ee2ddab7fe/auther',
let PubNub = require('pubnub');
let pubnub = new PubNub({
publishKey: 'asdfasdf',
subscribeKey: 'asdfsadf',
secretKey: 'asdfasdf'
});
const express = require('express')
const app = express()
@ianjennings
ianjennings / eon-chart.js
Created July 6, 2017 22:31
eon updated for webpack
"use strict";
window.eon = window.eon || {};
window.eon.c = {
create: function(options) {
options.debug = options.debug || false;
var clog = function(s, o, e) {