Talks and Trainings
Talks
Talks listed in reverse chronological order.
Debugging Node.js
This talk goes over Node.js debugging techniques from the simple such as using the Debug module and named functions to more complex including interactive debugging running applications, capturing and analyzing CPU profiles, capturing and comparing heap dumps, and more.
Node.js: Flow Control with Streams & Promises
This talk covers asynchronous flow control mechanisms in Node.js, Streams, Event Emitters, and Promises in particular. I created this talk for Nodeschool International Day 2015 to suplement the Nodeschool training materials.
- Nodeschool International Day 2015, 2016, Holyoke, Massachusetts, USA
- Slides
Building Shell Tools with JavaScript
Talk title is fairly self-explanatory. I walk through building a configurable web-scraping CLI with Node.js, starting with a simple script and improving the UI & adding features (and man
pages!) along the way.
- EmpireJS 2015, NYC, USA
- Video
- Unedited Video where you get to see me improvise when the machine running the slides (not my machine) freezes, twice 😅
- Slides (click "Present" and advance with spacebar to see transitions)
- Demo code
Package Management in PHP
I gave this talk back when Composer and the concept of using an automated dependency manager was still fairly new to many in the PHP world. It's a gentle introduction to the concept an the tool. I used the fantastic ansi2html.sh script to capture the command line interactions, and used Reveal.js "fragments" to fade them in bit by bit, faking the command line interactions in the slides.
Testing JavaScript with Jasmine
This was my first conference talk! It's a very rudimentary introduction to unit testing for JavaScript developers. Like the Composer talk above, this talk was introducing a common practice (in this case unit testing) where it was not yet a common practice.
- Valley Summit 2012, Northampton, Massachusetts, USA
- Slides
- Demo code (look through branches for different steps)
Trainings
Also listed in reverse chronological order.
Getting Started with Encrypted Communications
I created this ongoing series of trainings to introduce complete beginners to encrypted communication tools and practices. The hands-on workshop was designed with beginner-friendliness as an explicit top priority, and as such it covers only the most necessary concepts and recommends specific tools rather than offering lists of options.
The workshop has evolved over the years. In 2014 it was focused on OTR chat using tools like Pidgin. As the major desktop chat providers (primarily google and facebook) shut down their XMPP services and as people moved to mobile, OTR & Pidgin became less relevant. By 2018 the workshop focused primarily on using the Signal chat application, due primarily to its ease of use.
PGP/GPG was also covered upon request, but not recommended as a "getting started" tool due to the more complicated nature of setting it up and using it properly.
Starting in 2016 I printed stickers that said "Crypto Educator" to give to attendees as a reward for getting at least one friend set up with the tools they had just learned to use. This served several purposes:
- Ensuring attendees had at least one person to chat with using the new tool
- Empowering attendees, giving them "permission" to teach the skills they just learned
- Creating evangelists: when someone sees the sticker on the attendee's phone or laptop, they'll ask "what's that?" and the attendee/educator will have the opportunity to get another person onto encrypted tools!
- Hackers On Planet Earth 2014, 2016, 2018, NYC, USA
- NERD Summit, 2016, Amherst, Massachusetts, USA
- Slides
- Handout
Intro to Node.js: 2-day Intensive
This training was commissioned by O'Reilly in 2016 for their flagship web conference, FluentConf. From the abstract:
Topics covered include:
- JavaScript review: scope, callbacks, and other key concepts
- When to use Node: replatforming vs. complementing your current stack
- Core libraries: reading files, parsing URLs, resolving paths—the Noder’s toolbox
- Understanding async: one weird trick for handling high throughput on a single thread
- NPM and the Node ecosystem: finding, consuming, and creating Node modules + NPM tricks
- Databases and ORMs: using Mongo and MySQL in Node.js
- Building a web server: using Express.js, the most popular web framework in Node.js
This training covers a lot!
- FluentConf 2016, San Francisco, USA
- Slides
- Code examples
Practical Microservices: Exploring design patterns, platforms, and tools with Docker and Kubernetes
Wow, that's a long title! This training was also commissioned by O'Reilly for FluentConf & Velocity. It covered a very wide variety of platforms and topics in the "whirlwind tour" format. We started with a monolith application then worked on decomposing it to microservices in various patterns, including Function-As-A-Service, Platform-As-A-Service (Now.sh), and containerization with Docker & Kubernetes. We also surveyed providers, deploying our stack across a variety of environments including Now.sh, IBM Bluemix, AWS Lambda, & Google Cloud Engine.
This was a challenging training to design, owing to the facts that "Microservices" is an extremely broad topic and that it means something different to everyone.
- FluentConf/Velocity 2017, San Jose, California, USA
- Slides
- Code Examples (see the readme for instructions)
Nodeschool International Day
As a core organizer of the Nodeschool organization, I was involved in plannig and organizing the first Nodeschool International Day, both at the international level and in my own community. The purpose of the event was to evangelize Node.js and offer free trainings to developers using the Nodeschool training content.
For the International Day events, I created a couple presentations, one introducing Node.js generally and one explaining Node.js streams as well as other asynchronous flow control mechanisms in Node.js.