Experience

I have been developing software products specializing in Geographic Information System, Computer Vision, and Spatial Computing. Here are some of the tools, operating systems, languages, frameworks, and libraries I have used to deliver these products.

I've been developing software for over a decade. I've used a lot of tools and technologies over the years. Here are some of the tools I currently use daily.

  • VSCode

    VSCode

    These days I'm using VSCode for my development environments with remote containers. VSCode has a great marketplace of extensions and supports things like remote port forwarding and other automations with ease.

  • Solarized

    Solarized

    I really love the Solarized color sheme. I use it for terminals and editors. If anyone knows how to make VSCode and Terminal/iTerm2 use the OS settings hit me up on twitter.

  • Docker

    Docker

    Docker makes development and deployment dependencies repeatable and consistent. Using images to lock in requirements for things like OpenCV, TensorFlow, PyTorch, all with NVIDIA's Docker Engine for CUDA support make onboarding, developing, and deploying with remote containers a breeze. I've used Docker Hub for private organizations and even host a few of my own images there.

  • Google Colab

    Google Colab

    I've been using Google Colab since before it was released publicly in 2017. It's been a great tool for sharing and pairing on machine learning projects like computer vision for Cainthus, GreenThumb IO, and nSightSurgical.

  • iTerm2

    iTerm2

    Sometimes iTerm2 is great for special usecases like typing, or hitting return, on multiple tabs at once.

  • Jupyter

    Jupyter

    I used to use plain old Jupyter notebooks, but mostly use Google Colab these days. Sometimes I will run notebooks on remote containers with the VSCode extension.

  • Markdown

    Markdown

    I love writing content with markdown. Most of this website is markdown files or markdown in YAML files

  • GitHub

    GitHub

    I really like using GitHub for code version, discussions, and project management. It's just the write amount of features, right in the place you push your code, so why not just user Projects, Issues, and Pull Requests. I also hear good things about GitLab, but just haven't had a opportunity to use their project management features yet.

  • Loom

    Loom

    I'm a big proponent of asynchronous work. Loom is a great way to share ideas and receive inline feedback. From announcements to updates, design revisions to pull request demos, Loom videos provide a great user experience to capture, share, and provide feedback async.

  • Notion

    Notion

    Documentation is critical for async processes and notion is a great way to collaboratively produce documentation.

  • Slack

    Slack

    Slack is a great way to partially sync up with the expectation being you don't have to respond imediately. Chat is self documenting in a way because public channels record ideas and decisions from disucussions that are searchable for posterity. You can easily use integrations to take a message and create a task/doc or just copy paste.

  • Terraform

    Terraform

    Infrastructure as Code is something I'm passionate about. Terraform is a remarkably powerful tool for reproducable cloud infrastructure. I've used it for automated deployment workflows with GitHub Actions.

  • GitHub Actions

    GitHub Actions

    GitHub Actions is my favorate way to automate CI/CD workflows. From testing to infrastructure to deployments GitHub Actions is an incredibly powerful tool to make the developer experience that much better through automating the boring, tedious, and previously manual stuff.

  • CircleCI

    CircleCI

    I used to use CircleCI when it was first released in like 2012 and have used them on and off over the years depending on the project.

  • Figma

    Figma

    I enjoy the async collaborative approach design, feedback, and interating with Figma on product design.

  • Sketch

    Sketch

    I've had the opporunity to contribute to the design of a number of products with Figma

  • Miro

    Miro

    Miro is a great async way to ideate and brainstorm collaboratively.

  • Redis

    Redis

    Redis is a high performance in-memory data store I've used for caching things like rendered views and geocoder look ups. It's a great jobs queue for Sidekiq and is the foundation for Faktory. It's also a powerful PubSub message broker that is used for things like WebSocket broadcasting with ActionCable for live updates pushed from the server to the users.

  • Elasticsearch

    Elasticsearch

    Elasticsearch provides a data store with advanced search engine functionality and analytics. I've used it for location based searches of places for PINSTOP JP and ZALA.

  • Celery

    Celery

    I've used Celery for background job processing for real-time Computer Vision applications at Cainthus. Background jobs like TMS tile analysis jobs rendered heatmaps for matching patterns of target polygons across entire fields on-demand as users interacted with the map interface. For the dairy cow monitoring we used Celery to parallelize our Computer Vision analysis of real-time camera feeds to report analytics to our API.

  • Sidekiq

    Sidekiq

    I started using Sidekiq at Banjo in 2012 as one at one of the first paying Sidekiq Pro customers. I've used it to processing billions of jobs the perform anywhere from geocoding and image processing to email and push notifications.

  • Faktory

    Faktory

    More recently I'ved started using Faktory for my background processing needs. With its simple API and flexible language agnotstic abilities it's proven to be a stable and reliable way to enqueue and process jobs in JavaScript, Python, and Ruby, with community support for job producers and consumers written in Crystal, Go, Elixer, PHP, Rust, and Swift and more!

  • Stripe

    Stripe

    I've built out payments for a handful of products using Stripe, including subscribptions.

  • Twilio

    Twilio

    I've used Twilio for sending email, chat, video, and voice integrations.

  • Telegram

    Telegram

    I've made a few Telegram bots, one of my favorites integrated with TendAir to provide alerts to my group chat for indoor air quality.

  • MailChimp

    MailChimp

    I've integrated with marketing campaigns run using MailChimp. This website might even use MailChimp for subscriptions... some day.

  • MailGun

    MailGun

    I've used MailGun and SendGrid to send emails to users in dozens of products

  • RabbitMQ

    RabbitMQ

    At Cainthus we tested using RabbitMQ with Celery, but ultimitely Redis is my preferred message broker for it's simplicity and powerful feature set.

  • ZeroMQ

    ZeroMQ

    I've used ZMQ for IPC (Inter Process Communication) to share image data between processes on the same machine. I've found using shared memory objects with Faktory to be more performant and more concise to develop with. Faktory also provides the extensibility to use different languages for jobs, like API clients in JavaScript as well as processs jobs on distributed machines.

Artificial Intelligence > Machine Learning > Deep Learning

  • ONNX Runtime

    ONNX Runtime

    I've used ONNX Runtime for deploying computer vision models to edge compute devices using CUDA and CoreML Execution Providers. I've also used ONNX Runtime for multitarget inference with multiple models loaded on CPU, GPU, and Edge TPU devices.

  • PyTorch

    PyTorch

    I've used PyTorch for training and deploying neural networks, mostly for computer vision.

  • PyTorch Lightning

    PyTorch Lightning

    Recently I've used PyTorch Lighting for more performant inference at nSightSurgical AI

  • Tensor Flow

    Tensor Flow

    I've deployed ML pipelines that train and use nueral networks for computer vision inference on image data.

Programming Languages

  • Ruby

    Ruby

    I've been using Ruby for over a decade. I still learn new things and find joy writing Ruby.

  • Python

    Python

    I mostly use Python for Computer Vision and other Machine Learning tasks.

  • JavaScript

    JavaScript

    I use JavaScript mostly for browser based applications, but have also made React Native mobile and Electron desktop applications

  • TypeScript

    TypeScript

    I have done audits for and deployed a few applications in TypeScript, but it's not my daily driver. Typing great, but it's not an excuse to skip testing.

  • PHP

    PHP

    I have done audits for and deployed a few applications in PHP, but it's not my daily driver.

  • Rust

    Rust

    Rust is pretty sweet and I look forward to doing more work with it.

  • Elixir

    Elixir

    Elixir and the Pheonix framework have had my interest for a while, but I've limited production experience.

Frontend frameworks

  • Electron

    Electron

    I've used electron to deliver react apps to desktop

  • React

    React

    I've used react to deliver dozens of products for startups over the years.

  • Redux

    Redux

    I've been using redux for managing state in React apps

  • Stimulus

    Stimulus

    Stimulus controllers are just enough JavaScript for me.

  • Tailwind CSS

    Tailwind CSS

    Tailwind is a great CSS utility framework that makes me feel like I'm not terrible at CSS. This site uses the Tailwind UI Spotlight template as a base with minor customizations.

  • Alpine.js

    Alpine.js

    Alpine is great, lightweight and there's even a sprinkle of Alpine in this site!

  • PostCSS

    PostCSS

    PostCSS is great for processing CSS with plugins like Tailwind CSS and Autoprefixer.

Web Application Frameworks

  • Rails

    Rails

    I've been using Rails to create Web applications and APIs since Rails 2. I've launch dozens of full-stack products with Rails even a few with classic Turbolinks. I'm really excited about HOTwire and the new community tooling like Turdbo Reflex.

  • JSON Web Tokens

    JSON Web Tokens

    I've been using JWT for authenticated user credentials for almost all of my projects.

  • WebRTC

    WebRTC

    I've used both Twilio Video and hand rolled WebRTC signaling servers and WebRTC clients with WebSockets to provide product solutions for realtime communcation through audio/video and collaboration through screen shares.

  • Sinatra

    Sinatra

    I've built a few microservices with Sinatra to expose APIs with Ruby. One of the most interesting examples that made it to production was a geocoding service that took coordinates and returned location names using OSM, PostGIS, and Redis for a caching layer. It could handle batches of coordinates with a custom stored proceedure and serviced tens of millions of requests a day.

  • Flask

    Flask

    At Cainthus we served our APIs with Flask for our React apps that rendered data derived from Computer Vision

  • Express.js

    Express.js

    At Momentage we created a simple file upload service with Express JS and MongoDB's GridFS for resumable file uploads with S3 and CloudFront serving the uploaded assets.

  • Django

    Django

    At Cainthus we used Django for our Drone mapping web app with Celery for background jobs to process map tile analysis and visualizations.

  • CakePHP

    CakePHP

    At Focus Testing Services we had a CakePHP JSON API serving our desktop app that was built with Flash FlexBuilder using ActionScript 3

  • Laravel

    Laravel

    Laravel is cool in my book.

  • GraphQL

    GraphQL

    I've used RESTful APIs for over a decade and starting working with GraphQL in 2017

  • Apollo GraphQL

    Apollo GraphQL

  • PostgreSQL

    PostgreSQL

    I've built dozens of web applications backed by PostgreSQL databases. The first production service I deployed with postgres was in 2013 using the PostGIS extention to leverage powerful geo indexing and querying to deliver a high throughput (tens of millions of requests per day) reverse geocoding service for Banjo.

  • MongoDB

    MongoDB

    I used MongoDB heavily at Banjo in 2012 we had a 24 hour TTL collection of all social posts from Twitter, Instagram, Facebook, and Foursquare and a collection for geo posts at events detected by our events service I designed and built.

  • MySQL

    MySQL

    I have contrinbuted to a number of my client's web applications with MySQL server backends. I had initially started using MySQL before the Oracle debacle and also at Focus Testing Services in 2011, but I've ended up using PostgreSQL for most of the application my teams and I have developed.

  • Microsoft SQL Server

    Microsoft SQL Server

    At CATS we used Microsoft SQL Server. I help to maintain the Windows Server machine's hardware (SCSI RAID, UPS battery backups, etc.) and software upgrades (Windows System and Applicaiton Dependencies). I also had an opporunity to contribute to the development of our Java JBoss web app and services for the backend with a good old JDBC Microsoft SQL Server driver and Swing Desktop frontend. Coincidentally it was my first time using SQL and last time using Microsoft SQL Server.

Geo Information Systems and mapping tools for location based applications

  • Google Maps

    Google Maps

    I've used Google Maps for a number of projects. PINSTOP was one of the more comprehensive mapping projects built with a Google Map interface that supported place search with eh Google Places API along with custom pindrops and place details.

  • Leaflet

    Leaflet

    LeafLeft was used for the drone mapping and analytics product I built at Cainthus. We used it to render customer Tile Map Server (TMS) layers and also to provider a user interface for drawing polygons around areas of interest. These polygon area's were then used as the query parameter for a computer vision analysis across the TMS top layer with on demand heat map renderings as users zoomed in/out and panned around.

  • Mapbox

    Mapbox

    MapBox has a great suite of solutions with their APIs and SDKs, though most of the products I've built have been too high volumen and on early stage startup budgets to afford using them as opposed to handrolled solutions.

  • OpenStreetMap

    OpenStreetMap

    OpenStreetMap is a fantasic open source data and tool set that provides multipolygon information about administrative regions, streets, and buildings around the world. It was the foundational dataset used in the Banjo reverse geocoder service that I built in 2013.

Media processing tools for manipulating and analyzing audio, video, and image data

  • FFmpeg

    FFmpeg

    I've developed a few computer vision pipelines with FFMPEG decoding inputs that splits into two outputs for computer vision processing and encoding outputs for demos.

  • OpenCV

    OpenCV

    OpenCV is a lower level library for video/image manipulation and computer vision inference using ONNX, CuDNN, a I've been using OpenCV for a little under a decade. I have built a number of Computer Visions Applications as products for startups and even have a few OSS projects built with OpenCV.

I've used a number of cloud hosting providers over the years.

  • Amazon AWS

    Amazon AWS

    I've managed classic EC2 instances, but typically will automate a VPC with ASG policies for ECS instances.

  • DigitalOcean

    DigitalOcean

    It's been a while since I've deployed with it, but DigitalOcean still has some great offerings.

  • Google Cloud

    Google Cloud

    I've managed a number of deployments on GCP using Compute and Run environments.

  • Heroku

    Heroku

    I started using Heroku is 2012 and I still really enjoy Heroku to this day. I should probably checkout some of the new hotness like Render, Vercel, Fly.io, and the like, but I mostly just use AWS ECS/EKS with Terraform and GitHub Actions

  • Linode

    Linode

    I've managed a couple of client's deployments on Linode, but it's definitely not my preference.

I've used a number of hardware devices for prototyping and production deployments.

  • Arduino

    Arduino

    I've been tinkering with Arduinos building sensors with ESPs or that talk to Raspberry Pis over serial.

  • Myriad X - OpenVino

    Myriad X - OpenVino

    Movidus acquired by Intel - I've used the Myriad VPU for computer vision inference on edge compute devices like the Raspberry Pi and

  • NVIDIA

    NVIDIA

    I have nearly a decade of experience delivering CUDA power products to market with experience in CUDA, cuDNN, TensorRT, and more. I've used NVIDIA GPUs for training and inference with PyTorch, TensorFlow, ONNX Runtime, and OpenCV. I also have experience developing for the NVIDIA Jetson Nano device line.

  • Apple Silicon

    Apple Silicon

    I've been able to leverage the Apple Silicon architecture using CoreMLTools in python to leverage the Apple Neural Engine for on-device inference. I've also used OpenCV and NumPy with Silicon support for GPU computations.

  • Raspberry Pi

    Raspberry Pi

    I have been tinkering with Raspberry Pis for over a decade now. Anywhere from heliostats to monitoring plants with computer vision to water them

I've used a number of operating systems over the years to develop and deploy software.

  • Windows 95

    Windows 95

    My first operating system as a kid. We soon upgraded to Windows 98 and Windows 98 Plus. Good times.

  • Windows XP

    Windows XP

    I couldn't find a logo for Windows 2000, but Windows XP styled like Windows 2000 was my daily driver early in my career.

  • Windows 11

    Windows 11

    Currently using Windows 11 mostly for gaming. You can follow me on Twitch to checkout my build and content there.

  • Ubuntu

    Ubuntu

    I've been using Ubuntu for well over a decade now. I've used Ubuntu Desktop for development as well as Ubuntu Server for cloud and on-premise deployments