Skip to article frontmatterSkip to article content

Hi, I’m Chris Holdgraf 👋

Profile picture of Dr Chris Holdgraf
A bit about me...
💼 Executive Director @ 2i2c
☁️ Former Cloud DataHub team @ Berkeley CDSS
🌕 Distinguished Contributor @ The Jupyter Project
🧠 PhD graduate in neuroscience @ UC Berkeley

I also work extensively with Project Jupyter, particularly the Binder Project and Jupyter Book.

Recent blog posts

How I'm trying to use BlueSky without getting burned again

Some quick thoughts on moving from Twitter/X to BlueSky and how I'll try to use social media after being burned once by Twitter.

Date: November 22, 2024 | Author: Chris Holdgraf
Better blog lists with the MyST AST

On my journey to learn more about writing with [the new MyST engine](https:///mystmd.org), I built upon [my recent update to my blog infrastructure](./programmatic-myst-with-jupyter.md) and made some improvements to my blog post list. Here's what it looks like now: ````{note} Click here to see how it looks now :class: dropdown ```{postlist} :number: 3 ``` ```` Here's a quick rundown

Date: November 09, 2024 | Author: Chris Holdgraf
Generate MyST with Jupyter and insert it into content programmatically

While I've been [converting my blog to use the new MyST engine](./mystmd-with-the-blog.md), I discovered a useful MyST feature. It's not yet possible to [natively parse Jupyter Markdown outputs as MyST](https://github.com/jupyter-book/mystmd/issues/1026) but there's a workaround if you don't mind generating a temporary file. The trick is to _write to a temporary file_

Date: November 04, 2024 | Author: Chris Holdgraf
Re-building my blog with MySTMD

Wow it has been a long time since I've last-written here. It turns out that having two small children and a very demanding job means you don't have as much time for blogging. But that's a whole different blog post... I've decided to convert my blog to use the new [MyST

Date: November 01, 2024 | Author: Chris Holdgraf
A few random opportunities in AI for Social Good

Recently a few friends have reached out asking if I knew of any opportunities to work on AI-related things that also have some kind of pro-social tie-in. I think a lof people see AI as a technology with a lot of potential, but in an environment of companies that don't seem

Date: October 02, 2023 | Author: Chris Holdgraf
A Sphinx directive for social media embeds

:::{note} This probably doesn't work anymore I've since moved my blog to use [the MyST Document Engine](https://mystmd.org) so this example will no longer work on my personal blog. See [this permalink for the latest working version](https://github.com/choldgraf/choldgraf.github.io/blob/ae8ee9792c74aac72f46c645d19352abc439d572/blog/2023/social-directive.md). ::: I often want to link to social and other types of web-based media in my Sphinx

Date: February 15, 2023 | Author: Chris Holdgraf
Report from FOSDEM23: beautiful chaos in a conference

I recently attended [FOSDEM 2023](https://fosdem.org/2023/), my first FOSDEM! I had heard of the conference before, but hadn't really looked into it too much. Fortunately, after some urging from friends and social media, I took a deeper look and decided I should join to see what all the fuss was about. Here are a

Date: February 06, 2023 | Author: Chris Holdgraf
Bundle extensions with your Sphinx theme

Sphinx is great because it has a ton of useful extensions that let you grow its functionality. However, a downside of this is that users have to actually _learn about_ those extensions and activate them manually. It's not hard, but it's a non-trivial amount of discovery work. One way to solve this is

Date: January 19, 2023 | Author: Chris Holdgraf
Install dependencies from GitHub with `pyproject.toml` or `requirements.txt`

This is a short post to demonstrate how to install packages directly from GitHub with `pyprojects.toml` or `requirements.txt`, including custom branches and commits. It will focus on `pyprojects.toml` because this is newer and there's less information about it, but the general pattern holds for `requirements.txt` as well. In `pyproject.toml`, you can specify

Date: December 31, 2022 | Author: Chris Holdgraf
Report from the JupyterLite workshop: WebAssembly is pretty cool

I recently attended [the JupyterLite community workshop in Paris](https://blog.jupyter.org/community-workshop-jupyterlite-e992c61f5d7f?source=collection_home---6------6-----------------------), here are some quick thoughts from the three-day event[^ack]. [^ack]: Many thanks to the [QuantStack](http://quantstack.com/) team for organizing this event, and to [OVHCloud](https://www.ovhcloud.com/en/) for providing a physical space for everyone. For those without any background, JupyterLite is a distribution of Jupyter's user

Date: December 10, 2022 | Author: Chris Holdgraf