Sequoia McDowell

Computer Programmer

Projects

JS Multimethod

While studying Clojure I learned about multimethods. They seemed like a very cool approach to parametric polymorphism that I had not seen before! I created a JavaScript implementation of the basic multimethods to better understand how they work.

Github 2 Jira

At work we used Jira to track issue status. We also use Pull Request workflow on Github, where PRs also have a status. I grew weary of having to check two places to figure out what status a PR was in (review requested? changes requested? merged?). I created this proof of concept to automatically transition tickets on Jira when the Github PR status changed. This allowed me to see ticket status viewing only Jira, which automatically reflected the up-to-date status of PRs on Github.

VS Code Extension: LoopBack JSON Schemas

StrongLoop asked me to come up with creative ways to improve developer experience for their LoopBack framework. The framework relies on lots of fairly complex JSON configuration files, and working on these files forces one to refer frequently back to the (also fairly complex) documentation. To address this challenge, I captured settings for the most frequently used configuration files in JSON Schema, then created a VS Code extension that automatically maps each schema to the appropriate LoopBack configuration file, providing the user with inline code hints, documentation, and warnings when illegal configuration values are set. "If you can't bring Mohammed to the mountain, bring the mountain to Mohammed!"

Custom Map Editor/Annotator

A client needed a map annotation tool to allow university students and faculty to mark on a map where they like to eat, what routes they bike or drive, what areas they feel unsafe in, and all sorts of other things, with the purpose of better understanding how the campus was used. Functionally speaking, this meant creating a map annotator that allowed users to add paths, polygons ("areas"), and points of various visual styles. I used Leaflet.js and its "editable" plugin for basic annotation mechanics, and added my own special hacks to allow multiple path & point styles on one map, as Leaflet does not support this by default. It was quite a fun exercise!

This Website

I was using Jekyll (with automatic github build), but when they updated the Jekyll version on github my blog exploded. :( I evaluated maaannnyyyy options for a blog/website, eventually deciding to build my own as it's mostly just reading md files & shoving them in a template! Take a look at the repo src/index.js file for the meat of this website builder.

Error Throwing Middleware

Express middleware that randomly throws errors. I made this primarily for workshops teaching Express, but it could be useful if you have need for random errors in your site!

Event Loop Performance Demo

I created this ️simulation for a Node.js training in order to explain the benefits of the event loop in Node.js. The purpose is to illustrate the execution times of blocking I/O + threads vs. non-blocking I/O + event loop visually.

Radio Echoes Downloader

This started as a small script to scrape MP3s from an old time radio website, and grew into a full fledged CLI app with subcommands, switches, help, manfiles-- the whole shebang. I fleshed it out with features primarily as a case-study for a 2015 Empire JS talk.

checkrunning

Small tool I made to assist me during demos/workshops. Moving from demo to demo it's easy to forget to e.g. turn mongod on locally, so I made this li'l utility to check that a process is running & exit if it's not (fail immediately).

repostats

This was fun to build! A client needed me to gather statistics on some packages in NPM & repos on github & put it a google doc, so I wrote a script to do it. It was a bit tricky getting everything all Promisified, particularly the google sheets API but it worked out in the end. Also played a lot with FP style here.

find common slides

Client had a loooot of Reveal.js slide decks across 40 or so markdown files. The decks had lot of duplication in them and it was up to me to find duplicate slide(s) & externalize them. I tried everything I could think of before writing a custom script, but eventually I had to write a custom script. :) Lots of maps & reduces in there... plenty.

IoT Chicken Enclosure Door

I was tired of having to go out to my back yard to check whether we'd closed the chickens in at night, so I made this tool with a SparkFun ESP8266 Thing. Basically the device reads the open/closed state of a door with a hall sensor, pushes new states to data.sparkfun.com, then when you go to the output page (hosted on github) it reads from data.sparkfun & tells you whether the door's open or closed! So ESP8266+github.io+data.sparkfun.com = cluck.

trello-toy

I built this to prepare for an interview where I was told I'd have to build a UI to connect to a JSON REST server. I was thrilled when I was told it "could even be a CLI," as that greatly simplified things! No html, css, etc., just text in text out. Had fun with commander, superagent, cli-table & more-- this is what inspired my later CLI building talk!

Hack for Western Mass

Becky Sweger approached me in 2013 about putting on an event for National Day of Civic Hacking out here in Western MA, and put on an event we did! It was lots of fun & a hundred or so people came. Did it again the following year then moved on to other things. I learned a lot about organizing, getting sponsorship, and event planning from this.

Nodeschool International Day (2015)

I'd been involved in nodeschool for over a year when Nodeschool International Day was put on the schedule so of course I organized a local event! I struggled with how to organize content so it would be useful to beginners and to experts; ultimately I decided to split the day in half: beginner stuff in morning, intermediate in afternoon. It worked pretty well! Had fun, had sponsor $ so attendees attended & ate free & I was able to pay an honorarium to the trainers (myself included). Win-win-win! Can't wait for International Day 2016. :)

LoLshield Sequencer

Built this browser tool to make animations on the LOLShield, an Arduino shield with a 9x14 LED matrix. See blog bost for more:

Afonigizer

"The Afonigizer" was a bookmarklet I made to anonymize facebook (and google+) for screenshots. I had mostly used Javascript with jQuery when I started this project so I started the project with the goal of going no-jQuery, all browser APIs. It was fun & I learned a lot! Unfortunately, because the project relied on facebook & its markup, it would require updates every time facebook changed their markup, so the bookmarklet probably doesn't work today.

FTWin (For The Windows)

My first ever node.js project!! It's very rudimentary, was written oringally for node version... 0.3 maybe? Also I never got it to work fully. README excerpt:

This project is something I created because I wanted to open links on my host windows machine web browser from an ssh session in putty. A friend (Darcy) suggested a node server et voilà, ForTheWindows was born. It's a node.js server that accepts requests (from curl in my case) and performs an action in windows.