Overall - I really like the guidelines you've created here - it would be great to create this as a website and continually refine these guidelines and provide more motivations/reasons supporting the different guidelines.

1. I think the kebab vs Pascal vs camelCase vs snake_case rules are good to setup before starting a project. The specifics of which format to use where depend more on who the client vs developers are. E.g. if you are targeting the API to be used by front-end developers for a SPA - be javascript friendly which you are here. There used to be an…

Photo by nikko macaspac on Unsplash

Real World Evidence (RWE) is built on the backs of many types of aggregated data. Similar but not equivalent data is often aggregated from different providers like hospitals. The similar but not equivalent data results in challenges for interpreting and normalizing these aggregated data into a consistent and usable dataset.

Working with EHR and Claims data sources is first and foremost a data management and normalization challenge and only secondarily a challenge in analyzing the resulting dataset. Only when you have the ingestion of the datasets correctly handled can you start to develop your analytics on top of that data…

Photo by NOAA on Unsplash

TL/DR: To save acme.json file with LetsEncrypt details for Traefik — volume mount parent directory with Traefik container and configure …acme.storage inside that parent directory /shared/acme.json

# Skipping parts that aren't relevant in docker-compose filevolumes:
- ./shared:/shared
- --certresolv.myresolver.acme.storage=/shared/acme.json


Nope, the picture has nothing to do with this story. It’s just to help me recover my mind after an incredibly stupid and frustrating session with Traefik configuration. Don’t get me wrong, Traefik is a great reverse proxy for managing docker containers, but you definitely want to configure it, step away and never touch the configuration again!

So, let’s…

Fully agree this is the direction we need to go.

Managing use of private data is the only way to go forward. There is too much value to our society in lots of data that is considered private (healthcare data is a big one - knowing that 10 residents of an apartment died of a specific cancer is really valuable and impossible to extract out of our current healthcare system with data pooling to preserve privacy. The more detailed you get - the more potential value for the public good is accessible. …

Wow - most of the highly upvoted commenters are idiots.

Generally women and minorities have to be 2X or better to get the same job. Most are dealing with performance anxiety because if they make ANY mistake - it's an indictment on all women/minorities everywhere. It's idiotic that we need to prioritize diversity (and we absolutely should) when the diverse candidates are more determined and smarter than the typical candidates purely because they have been discriminated against since grammar school.

My hiring approach is to figure that anyone that can deal with this BS, still wants the job, and perform is someone I really want on my team. If other people are too stupid, stuck on themselves to see this - I'll happily work with the better talent that they will accept.

Photo by Chris Lawton on Unsplash

One of the side effects of capturing biological knowledge in a computable language is the ability to transform it into new forms. One of the questions we’ve been asked before about BEL (Biological Expression Language) is whether there are multiple ways to capture the same knowledge. Basically, does BEL force people to capture the same biological relationships in exactly the same way? The short answer is NO.

BEL provides a lot of flexibility. Biology requires that flexibility given how weird, wonderful, and wild biology can be. We are always finding edge cases that prove nothing is without exception in biology…

Photo by Sara Cervera on Unsplash

I’ve spent a lot of time refining my approach to making homemade yogurt. I originally started this because I wanted more dairy in my diet when on a keto diet (I’ll explain further below). We’ve been able to get a higher quality yogurt than is available in the store for a lot less money with minimal effort invested.



  1. Start this at night
  2. Setup the…

Photo by Barth Bailey on Unsplash

Intercom, the customer support tool, is really good at a lot of things — their help documents (Articles) tool is not one of those things. I didn’t see any easy way to extract the documents we had created in Intercom so I had to find another way to liberate them.

I looked into their API, but it was not apparent how to access it as a customer instead of an integration application developer. I created a web-scraping script to extract our content and associated screenshots/images.

This is a quick hacked together script to do what I needed (migrating the HTML content into MkDocs (a markdown static site documentation tool). Feel free to use it, extract some code from it, or run away screaming :)

Photo by Attentie Attentie on Unsplash

I had some fun trying to get SSL working correctly on my Website and API endpoints so that python requests and httpx libraries wouldn’t error out due to SSL (https) access failures.

First off, I love Traefik. It works incredibly well as your reverse proxy for docker containers. Simply, if you want your docker services to be exposed as https://fantasticthing.example.com instead of, Traefik is your BestFriendForever. Less simply — not even going to start :)

Round 1

For a particular application, I had to use a provided wildcard SSL certificate.

Traefik docker-compose partial example

Apologies for using Traefik 1.7 in my example when they are…

Photo by Markus Spiske on Unsplash

I use black and isort to format my python programs. I’m very happy for something to take care of that automatically. I just want my python programs to be consistently formatted. It is quite brilliant to force a specific code formatting (even more than what’s required by the Python language). I also very much appreciate the end of the formatting wars with teammates. Code is collaborative — remove opportunities for contention (and spurious git changes) whenever possible.

I had already setup Black and Isort using these instructions (thank you cereblanco!).

Unfortunately, formatOnSave using black for my python programs stopped working…

William Hayes, PhD

Biomedical Data Science/Text Mining

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store