I learned to program in graduate school because I was tired of wasting my time doing simple, repetitive things that are surpisingly common while doing neuroscience research (neuroscience). Now much of my professional life and personal time is spent learning how to use technology to solve research problems and build things.
Experience
Programming languages are tools, and I’m always looking to expand my toolbox so I can reach for the right tool for the task at hand.
Python is my go-to scripting and quick data exploration/processing language.
I use R extensively for statistics, data wrangling, and scientific graphics.
I started exploring Clojure a few years ago after I stumbled across some of Rich Hickey’s talks. I like Clojure because it is a simple, flexible, and well though out language (I built originally built this website when using Clojure). Clojure changed the way I think about programming more than any other language despite the fact that I rarely use it day to day.
Recently, I’ve begun exploring Go and Rust. Over the years, I have built some cool things, but I also felt the pain of distributing software written in scripting languages like Python and R. Try explaining a virtual environment to a scientist who just discovered a terminal and you’ll see what I mean. This is a big problem! I’m venturing into compiled languages for greater efficiency, type safety, and easier distribution.
Some tools I’ve worked on
- ABF Explorer A GUI for looking at and simple analysis of ABF files from electrophysiology experiments
- ImageJ/Fiji Microscopy Scripts Plugin for ImageJ/Fiji. Tools for automating common and tedious image processing tasks
- Python image analysis Notes for plotting and image analysis using Python
Programming posts
2025/
- Tracking Salary Transparency in Biotech Jobs with PharmaPayWatch.com
Published: January 14, 2025
Last updated: January 14, 2025
2024/
- NIH Should Buy 23andMe
Published: November 24, 2024
Last updated: November 27, 2024
- Static Dashboards
Published: November 4, 2024
Last updated: November 26, 2024
- man(ual) pages are all you need
Published: April 14, 2024
Last updated: April 14, 2024
- Bootstrapping Ansible on FreeBSD
Published: April 2, 2024
Last updated: April 3, 2024
2023/
- Learning C in 2023
Published: December 3, 2023
Last updated: December 3, 2023
- Returning Pydantic Models (or Python Dataclasses) from SQLite3 Queries in Python
Published: September 17, 2023
Last updated: September 17, 2023
- Asynchronous Runtime on a Worker Thread in Rust
Published: July 2, 2023
Last updated: July 2, 2023
- Using Python's argparse for tests
Published: March 11, 2023
Last updated: March 11, 2023
- Consistent Server Environments with Ansible
Published: February 19, 2023
Last updated: February 19, 2023
- Making HTTP Requests with Pyodide
Published: February 12, 2023
Last updated: February 19, 2023
- Hugo tips for the new year
Published: January 7, 2023
Last updated: March 11, 2023
- No more magic, please!
Published: January 4, 2023
Last updated: February 19, 2023
2021/
- Pre- activate scripts for pip and virtualenvwrapper
Published: October 6, 2021
Last updated: January 8, 2023
- A simple, extensible organization structure for scientific data
Published: May 27, 2021
Last updated: January 8, 2023
- Is Go (or Rust) a better language for scientific tools than Python?
Published: January 12, 2021
Last updated: January 8, 2023
- Building static websites with Clojure: an update
Published: January 5, 2021
Last updated: January 8, 2023
2020/
- Returning a list of dictionaries from a python SQLite3 query
Published: December 16, 2020
Last updated: September 17, 2023
- Write your own CSS
Published: November 2, 2020
Last updated: January 8, 2023
- SQLite3 for data analysis and inter-language exchange
Published: October 14, 2020
Last updated: January 8, 2023
- Organizing Scientific Metadata with SQLite3 and Python
Published: September 19, 2020
Last updated: January 8, 2023
- Scientists don't test their code
Published: September 16, 2020
Last updated: January 8, 2023
- Consistent style for scientific figures with ggplot2
Published: August 30, 2020
Last updated: January 8, 2023
- Working with Ilastik HDF5 files using python and h5py
Published: May 21, 2020
Last updated: January 8, 2023
- (Implicit) Update in place is evil. How to write in a functional style with mutable defaults in Python
Published: March 4, 2020
Last updated: January 8, 2023
- Setting up and using the NEURON simulation environment and python with virtual environments
Published: February 27, 2020
Last updated: January 8, 2023
- Building and deploying my website with make
Published: February 20, 2020
Last updated: January 8, 2023
- Making a lookup table (LUT) for ImageJ from an existing image
Published: January 5, 2020
Last updated: January 8, 2023
2019/
- Building ImageJ/Fiji Plugins with Clojure
Published: February 26, 2019
Last updated: January 8, 2023
- Making figures with R
Published: January 13, 2019
Last updated: January 8, 2023
2018/
- Why Clojure?
Published: September 8, 2018
Last updated: January 8, 2023
- A YASnippet for org-mode publishing
Published: August 26, 2018
Last updated: January 8, 2023
- Building my static website with Clojure
Published: August 18, 2018
Last updated: January 8, 2023
- Org-mode changed my life: resources and notes
Published: August 18, 2018
Last updated: January 8, 2023
- Helpful git links
Published: August 13, 2018
Last updated: January 8, 2023
2017/
- Science without Microsoft Office
Published: October 26, 2017
Last updated: January 8, 2023
- Org-reveal and GitHub Pages
Published: September 28, 2017
Last updated: January 8, 2023
- Using python in org-mode
Published: August 27, 2017
Last updated: January 8, 2023
- PlatformIO and Emacs
Published: July 16, 2017
Last updated: January 8, 2023
- Setting up and configuring org-ref
Published: July 14, 2017
Last updated: January 8, 2023
- Setting up LaTeX on a Mac
Published: July 4, 2017
Last updated: January 8, 2023
- Building a static website with Flask
Published: June 26, 2017
Last updated: January 8, 2023