41554 blogs · [ { "id": "01a0875f-42cb-724b-b644-09e134e03f67", "title": "The slow boring of hard boards in open source", "url": "http://chrisholdgraf.com/blog/2025/lock-files", "published_at": "2025-10-21T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e13438d490", "title": "My system for beating jet lag", "url": "http://chrisholdgraf.com/blog/2025/jet-lag", "published_at": "2025-10-18T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e133407582", "title": "Why open source foundations try to fund systems, not development", "url": "http://chrisholdgraf.com/blog/2025/fund-systems-not-developmend", "published_at": "2025-05-31T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e132d9e698", "title": "Jupyter can align the needs of its community and its foundation by enabling contribution", "url": "http://chrisholdgraf.com/blog/2025/more-contributors", "published_at": "2025-03-22T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e132d60b93", "title": "The relationship between the Jupyter Executive Council, Software Steering Council, and Foundation", "url": "http://chrisholdgraf.com/blog/2025/jupyter-org-structure", "published_at": "2025-03-02T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1327eeed3", "title": "Ways the Jupyter Foundation could support open source projects", "url": "http://chrisholdgraf.com/blog/2025/os-support", "published_at": "2025-02-26T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1325ceb10", "title": "Why I'm running for the Jupyter Executive Council", "url": "http://chrisholdgraf.com/blog/2025/jec", "published_at": "2025-01-14T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1322459c8", "title": "How I'm trying to use BlueSky without getting burned again", "url": "http://chrisholdgraf.com/blog/2024/bluesky", "published_at": "2024-11-22T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e131a921ee", "title": "Better blog lists with the MyST AST", "url": "http://chrisholdgraf.com/blog/2024/blog-list", "published_at": "2024-11-09T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1318b57ad", "title": "Generate MyST with Jupyter and insert it into content programmatically", "url": "http://chrisholdgraf.com/blog/2024/programmatic-myst-with-jupyter", "published_at": "2024-11-04T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e130c31b46", "title": "Re-building my blog with MySTMD", "url": "http://chrisholdgraf.com/blog/2024/mystmd-with-the-blog", "published_at": "2024-11-01T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e130617b6f", "title": "A few random opportunities in AI for Social Good", "url": "http://chrisholdgraf.com/blog/2023/ai-for-good", "published_at": "2023-10-02T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1303a1ada", "title": "A Sphinx directive for social media embeds", "url": "http://chrisholdgraf.com/blog/2023/social-directive", "published_at": "2023-02-15T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e130002c10", "title": "Report from FOSDEM23: beautiful chaos in a conference", "url": "http://chrisholdgraf.com/blog/2023/fosdem", "published_at": "2023-02-06T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12f60d6a5", "title": "Bundle extensions with your Sphinx theme", "url": "http://chrisholdgraf.com/blog/2023/sphinx-add-extensions", "published_at": "2023-01-19T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12e97ca2a", "title": "Install dependencies from GitHub with `pyproject.toml` or `requirements.txt`", "url": "http://chrisholdgraf.com/blog/2022/install-github-from-pyproject", "published_at": "2022-12-31T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12e11f28e", "title": "Report from the JupyterLite workshop: WebAssembly is pretty cool", "url": "http://chrisholdgraf.com/blog/2022/jupyterlite-workshop", "published_at": "2022-12-10T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12d2853a7", "title": "Load and plot a remote font with Matplotlib", "url": "http://chrisholdgraf.com/blog/2022/matplotlib-remote-font", "published_at": "2022-12-06T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12c49ba93", "title": "How to update Sphinx options during the build", "url": "http://chrisholdgraf.com/blog/2022/sphinx-update-config", "published_at": "2022-12-05T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12b884405", "title": "Automatically update pre-commit hook versions", "url": "http://chrisholdgraf.com/blog/2022/precommit-autoupdate", "published_at": "2022-12-03T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12b3ee45a", "title": "`subprocess.run` can execute shell commands directly", "url": "http://chrisholdgraf.com/blog/2022/shell-split", "published_at": "2022-11-29T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12a9eb830", "title": "Fix phantom GitHub workflows in your ci-cd with protected branch rules", "url": "http://chrisholdgraf.com/blog/2022/phantom-workflows-pull-requests", "published_at": "2022-11-27T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e129aaa17a", "title": "Custom roles and domains in Sphinx with one line", "url": "http://chrisholdgraf.com/blog/2022/sphinx-custom-crossrefs", "published_at": "2022-11-21T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e128dce756", "title": "Automatically redirect folders in Sphinx websites", "url": "http://chrisholdgraf.com/blog/2022/sphinx-redirects-folder", "published_at": "2022-11-19T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12923ac0b", "title": "Automatically updating my publications page with ORCID and doi.org", "url": "http://chrisholdgraf.com/blog/2022/orcid-auto-update", "published_at": "2022-11-19T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1289b078d", "title": "Ask Twitter: Why don't academic researchers use cloud services?", "url": "http://chrisholdgraf.com/blog/2022/cloud-services-academia", "published_at": "2022-09-05T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12891a0cb", "title": "Serving in two roles at once via pre-recorded tutorials", "url": "http://chrisholdgraf.com/blog/2021/2021-12-18-hybrid-tutorial-prerecord", "published_at": "2021-12-17T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12855ed08", "title": "Contributing to open source: A short guide for organizations", "url": "http://chrisholdgraf.com/blog/2020/organizations-help-oss-guide", "published_at": "2020-11-08T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e127f1e44b", "title": "A new blog with Sphinx", "url": "http://chrisholdgraf.com/blog/2020/sphinx-blogging", "published_at": "2020-10-10T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e126da2c58", "title": "Build a simple timeline with `sphinx-design`", "url": "http://chrisholdgraf.com/blog/2020/sphinx-design-timeline", "published_at": "2020-01-22T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12735c846", "title": "What do people think about rST?", "url": "http://chrisholdgraf.com/blog/2020/2020-01-22-rst-thoughts", "published_at": "2020-01-22T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12620d866", "title": "What would Python-style governance look like in Jupyter?", "url": "http://chrisholdgraf.com/blog/2019/2019-10-27-jupyter-governance-python", "published_at": "2019-10-27T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e125212849", "title": "What would Rust-style governance look like in Jupyter?", "url": "http://chrisholdgraf.com/blog/2019/2019-10-13-rust-jupyter-governance", "published_at": "2019-10-13T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e124d96415", "title": "Automating Jupyter Book deployments with CI/CD", "url": "http://chrisholdgraf.com/blog/2019/2019-10-11-automating-jb", "published_at": "2019-10-11T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e124ac74cd", "title": "A few recent talks", "url": "http://chrisholdgraf.com/blog/2019/2019-06-25-a-few-talks", "published_at": "2019-06-25T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e123ec2d10", "title": "Thoughts from the Jupyter team meeting 2019", "url": "http://chrisholdgraf.com/blog/2019/2019-03-16-jupyter-dev", "published_at": "2019-03-30T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e123a0b987", "title": "Three things I love about CircleCI", "url": "http://chrisholdgraf.com/blog/2019/2019-01-29-three-things-circleci", "published_at": "2019-01-29T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e123784d5c", "title": "Automatically mirror a github repository with CircleCI", "url": "http://chrisholdgraf.com/blog/2018/circlci-github", "published_at": "2018-12-18T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1229e0b50", "title": "Open communities need to be partners, not sources of free labor", "url": "http://chrisholdgraf.com/blog/2018/free-labor-partners", "published_at": "2018-12-05T08:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1221e06cd", "title": "My weekly workflow", "url": "http://chrisholdgraf.com/blog/2018/my-workflow", "published_at": "2018-10-26T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1229d71d6", "title": "How do projects signal how \"open\" they are?", "url": "http://chrisholdgraf.com/blog/2018/kinds-of-openness", "published_at": "2018-10-26T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e1212561f6", "title": "I like Rust's governance structure", "url": "http://chrisholdgraf.com/blog/2018/rust_governance", "published_at": "2018-10-18T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12078e76c", "title": "Using CircleCI to preview documentation in Pull Requests", "url": "http://chrisholdgraf.com/blog/2018/circle-docs", "published_at": "2018-10-16T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e120774211", "title": "Summer conference report back", "url": "http://chrisholdgraf.com/blog/2018/conferences-summer-2018", "published_at": "2018-08-01T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e12073757e", "title": "Adding copy buttons to code blocks in Sphinx", "url": "http://chrisholdgraf.com/blog/2018/sphinx-copy-buttons", "published_at": "2018-07-05T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e11fe12181", "title": "Blogging with Jupyter Notebooks and Jekyll using nbconvert templates", "url": "http://chrisholdgraf.com/blog/2018/jekyllmarkdown", "published_at": "2018-05-23T07:00:00+00:00" }, { "id": "01a0875f-42cb-724b-b644-09e11f579a19", "title": "An academic scientist goes to DevOps Days", "url": "http://chrisholdgraf.com/blog/2018/devopsdays-sv-2018", "published_at": "2018-05-18T07:00:00+00:00" } ] posts Claim your blog
Back to chrisholdgraf.com
Blog · corpus.blog/blogs/chrisholdgraf.com/posts

chrisholdgraf.com

chrisholdgraf.com

2025

2024

2023

2022

2021

2020

2019

2018