<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ISciNumPy.dev</title>
    <link>https://iscinumpy.dev/</link>
    <description>Recent content on ISciNumPy.dev</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>henryfs@princeton.edu (Henry Schreiner)</managingEditor>
    <webMaster>henryfs@princeton.edu (Henry Schreiner)</webMaster>
    <lastBuildDate>Sun, 05 Apr 2026 20:00:00 -0500</lastBuildDate>
    <atom:link href="https://iscinumpy.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Repo Review 1.0</title>
      <link>https://iscinumpy.dev/post/repo-review-1/</link>
      <pubDate>Sat, 04 Apr 2026 10:52:51 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/repo-review-1/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just released &lt;a href=&#34;https://github.com/scientific-python/repo-review&#34;&gt;repo-review&lt;/a&gt; 1.0 with a huge update to the WebApp, along&#xA;with some other solid improvements in speed, simplicity, and stability.&#xA;Repo-review&amp;rsquo;s two most popular plugins, &lt;a href=&#34;https://github.com/scientific-python/cookie&#34;&gt;sp-repo-review&lt;/a&gt; and&#xA;&lt;a href=&#34;https://validate-pyproject.readthedocs.io&#34;&gt;validate-pyproject&lt;/a&gt;, can take full advantage of the new asynchronous fetching&#xA;mechanism. And if you use the upcoming Python 3.15, the CLI is more responsive&#xA;than ever thanks to lazy loading!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working to make Python lazy</title>
      <link>https://iscinumpy.dev/post/flake8-lazy/</link>
      <pubDate>Tue, 24 Mar 2026 09:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/flake8-lazy/</guid>
      <description>&lt;p&gt;Python 3.15a7, which is now just a &lt;code&gt;uv python install 3.15&lt;/code&gt; away on all major&#xA;platforms, has lazy imports! This exciting feature, proposed in &lt;a href=&#34;https://peps.python.org/pep-0810&#34;&gt;PEP 810&lt;/a&gt;,&#xA;promises to make CLI applications faster (especially when using flags like&#xA;&lt;code&gt;--help&lt;/code&gt;), and could make a lot of large code with lots of imports that don&amp;rsquo;t&#xA;always get used faster too. Unlike the earlier, failed attempt, this requires&#xA;libraries to put in some work. I&amp;rsquo;ve developed a helper tool to make it easy; I&amp;rsquo;d&#xA;like to cover what lazy imports are and how to use my tool. Since this is the&#xA;first library that I used AI heavily in developing, the second half of the post&#xA;will cover how my experience with AI for a task like this went.&lt;/p&gt;&#xA;&lt;p&gt;TL;DR: run &lt;code&gt;uvx flake8-lazy --apply&lt;/code&gt; to make your code magically faster on&#xA;Python 3.15!&lt;/p&gt;</description>
    </item>
    <item>
      <title>New in boost-histogram 1.7 / Hist 2.10</title>
      <link>https://iscinumpy.dev/post/hist-2-10/</link>
      <pubDate>Fri, 06 Feb 2026 17:16:40 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/hist-2-10/</guid>
      <description>&lt;figure class=&#34;dark&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/post/boost-histogram-06/images/BoostHistogramPythonLogo.png&#34;&#xA;    alt=&#34;boost-histogram logo&#34; width=&#34;405&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I&amp;rsquo;ve just released &lt;a href=&#34;https://github.com/scikit-hep/boost-histogram/releases/tag/v1.7.0&#34;&gt;boost-histogram 1.7&lt;/a&gt; and &lt;a href=&#34;https://github.com/scikit-hep/hist/releases/tag/v2.10.0&#34;&gt;hist 2.10&lt;/a&gt;, with a major new&#xA;feature and a big typing improvement! I&amp;rsquo;d like to quickly outline what&amp;rsquo;s new&#xA;here. Python 3.10+ is now required.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tools to help you write better code</title>
      <link>https://iscinumpy.dev/page/presentations/2026-01-16-sqat/</link>
      <pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2026-01-16-sqat/</guid>
      <description></description>
    </item>
    <item>
      <title>How we made Python&#39;s packaging library 3x faster</title>
      <link>https://iscinumpy.dev/post/packaging-faster/</link>
      <pubDate>Fri, 09 Jan 2026 13:30:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/packaging-faster/</guid>
      <description>&lt;p&gt;Along with a &lt;a href=&#34;https://github.com/pypa/pip&#34;&gt;pip&lt;/a&gt; (and now &lt;a href=&#34;https://github.com/pypa/packaging&#34;&gt;packaging&lt;/a&gt;) maintainer, Damian Shaw, I have&#xA;been working on making &lt;a href=&#34;https://github.com/pypa/packaging&#34;&gt;packaging&lt;/a&gt;, the library behind almost all packaging&#xA;related tools, faster at reading versions and specifiers, something tools like&#xA;pip have to do thousands of times during resolution. Using Python 3.15&amp;rsquo;s new&#xA;statistical profiler and metadata from every package ever uploaded to PyPI, I&#xA;measured and improved core Packaging constructs while keeping the code readable&#xA;and simple. Reading in &lt;code&gt;Version&lt;/code&gt;s can be up to 2x faster and &lt;code&gt;SpecifierSet&lt;/code&gt;s can&#xA;be up to 3x faster in &lt;a href=&#34;https://github.com/pypa/packaging/releases/tag/26.0&#34;&gt;packaging &lt;code&gt;26.0&lt;/code&gt;&lt;/a&gt;, now released! Other&#xA;operations have been optimized, as well, up to 5x in some cases. See the&#xA;&lt;a href=&#34;https://discuss.python.org/t/announcement-packaging-26-0rc1-released/105631&#34;&gt;announcement&lt;/a&gt; and &lt;a href=&#34;https://packaging.pypa.io/en/stable/changelog.html&#34;&gt;release notes&lt;/a&gt; too; this post will focus on the&#xA;performance work only.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advent of Code 2025 in Typescript</title>
      <link>https://iscinumpy.dev/post/aoc-2025/</link>
      <pubDate>Wed, 24 Dec 2025 00:09:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/aoc-2025/</guid>
      <description>&lt;p&gt;After two years of &lt;a href=&#34;https://adventofcode.com&#34;&gt;Advent of Code&lt;/a&gt; in &lt;a href=&#34;https://rust-lang.org&#34;&gt;Rust&lt;/a&gt;, I thought I&amp;rsquo;d try&#xA;&lt;a href=&#34;https://www.typescriptlang.org&#34;&gt;TypeScript&lt;/a&gt;. I&amp;rsquo;ve always wanted to improve &lt;a href=&#34;https://repo-review.readthedocs.io/en/latest&#34;&gt;repo-review&lt;/a&gt;&amp;rsquo;s&#xA;&lt;a href=&#34;https://learn.scientific-python.org/development/guides/repo-review&#34;&gt;webapp&lt;/a&gt;, and that requires knowledge of the packaging&#xA;systems for JavaScript, so I thought I&amp;rsquo;d try TypeScript this year. I also used&#xA;this as an opportunity to learn more AI tooling too, mostly CoPilot in&#xA;&lt;a href=&#34;https://code.visualstudio.com&#34;&gt;VSCode&lt;/a&gt; &amp;amp; &lt;a href=&#34;https://chatgpt.com&#34;&gt;ChatGPT&lt;/a&gt;. I&amp;rsquo;d like to share my experience and thoughts! My code&#xA;is at &lt;a href=&#34;https://github.com/henryiii/aoc2025&#34;&gt;aoc2025&lt;/a&gt; (and &lt;a href=&#34;https://github.com/henryiii/aoc2024&#34;&gt;aoc2024&lt;/a&gt;, &lt;a href=&#34;https://github.com/henryiii/aoc2023&#34;&gt;aoc2023&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s new in Python π</title>
      <link>https://iscinumpy.dev/page/presentations/2025-11-24-rse/</link>
      <pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-11-24-rse/</guid>
      <description></description>
    </item>
    <item>
      <title>Python Histograms</title>
      <link>https://iscinumpy.dev/page/presentations/2025-11-12-rse/</link>
      <pubDate>Wed, 12 Nov 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-11-12-rse/</guid>
      <description></description>
    </item>
    <item>
      <title>Using Venvs</title>
      <link>https://iscinumpy.dev/page/presentations/2025-09-19-hsf-india/</link>
      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-09-19-hsf-india/</guid>
      <description></description>
    </item>
    <item>
      <title>UHI 1.0: histogram serialization</title>
      <link>https://iscinumpy.dev/post/uhi-1-0/</link>
      <pubDate>Wed, 20 Aug 2025 16:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/uhi-1-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/scikit-hep/uhi/releases/tag/v1.0.0&#34;&gt;UHI 1.0&lt;/a&gt; is out, with a major new feature: a new histogram serialization&#xA;spec! This spec supports multiple formats (HDF5, zip, and JSON initially), and&#xA;can be supported by multiple libraries (Boost-histogram/hist initially). There&amp;rsquo;s&#xA;also a new test suite helper for libraries targeting the UHI indexing spec.&lt;/p&gt;</description>
    </item>
    <item>
      <title>pybind11 3.0.0</title>
      <link>https://iscinumpy.dev/post/pybind11-3-0-0/</link>
      <pubDate>Thu, 10 Jul 2025 00:13:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/pybind11-3-0-0/</guid>
      <description>&lt;figure class=&#34;dark&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/post/pybind11-2-6-0/images/pybind11-logo.png&#34;&#xA;    alt=&#34;pybind11 logo&#34; width=&#34;405&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Pybind11 3.0 has been released! I would like to highlight some of the key&#xA;changes below; be sure to check out the &lt;a href=&#34;https://pybind11.readthedocs.io/en/latest/changelog.html&#34;&gt;changelog&lt;/a&gt; and &lt;a href=&#34;https://pybind11.readthedocs.io/en/latest/upgrade.html&#34;&gt;upgrade guide&lt;/a&gt; for&#xA;more information! This release includes an ABI bump, the first required bump in&#xA;many years on Unix (Windows has had required bumps more often). This release&#xA;contains the multi-year smart-holder branch, multi-phase init and subinterpreter&#xA;support, &lt;code&gt;py::native_enum&lt;/code&gt;, an interface to warnings, typing improvements, and&#xA;more. CMake now defaults to &lt;a href=&#34;https://cmake.org/cmake/help/latest/module/FindPython.html&#34;&gt;FindPython&lt;/a&gt; mode.&lt;/p&gt;&#xA;&lt;p&gt;Support for Python 3.14, 3.14t, GraalPy, PyPy 3.11, and iOS have been added,&#xA;while legacy support for Python 3.7, PyPy 3.8/3.9, and CMake &amp;lt;3.15 has been&#xA;removed. Most deprecated features have been kept for this release, but anything&#xA;producing a warning in 3.0 may be removed in a future 3.x version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Packaging a Scientific Python Project</title>
      <link>https://iscinumpy.dev/page/presentations/2025-0709-scipy/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-0709-scipy/</guid>
      <description></description>
    </item>
    <item>
      <title>🎡 cibuildwheel 3.0</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-3-0-0/</link>
      <pubDate>Thu, 05 Jun 2025 01:54:45 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-3-0-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cibuildwheel.pypa.io&#34;&gt;cibuildwheel&lt;/a&gt; 3.0.0 is out, with some very big additions. We&amp;rsquo;ve added&#xA;GraalPy, Python 3.14 (and 3.14t) betas, and iOS support! We&amp;rsquo;ve got several new&#xA;options: &lt;code&gt;test-sources&lt;/code&gt;, &lt;code&gt;test-environment&lt;/code&gt;, and (experimental)&#xA;&lt;code&gt;pyodide-version&lt;/code&gt;. We now fully use &lt;code&gt;enable&lt;/code&gt; (and PyPy requires using it), and&#xA;we no longer inject setuptools and wheel in build environments. Defaults have&#xA;changed, too: &lt;code&gt;build&lt;/code&gt; is now the default frontend, &lt;code&gt;manylinux_2_28&lt;/code&gt; is the&#xA;default manylinux image, with 32-bit linux now being opt-in. We&amp;rsquo;ve removed&#xA;support for Python 3.6 and 3.7, we now require 3.11+ to run cibuildwheel itself,&#xA;and EoL manylinux/musllinux images now need to be fully specified.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve had some fantastic releases of cibuildwheel since my last post over 2.19,&#xA;so I&amp;rsquo;ll include a few of the new features from those releases, too. I&amp;rsquo;ll also&#xA;note a few of the features being worked on for future releases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python π</title>
      <link>https://iscinumpy.dev/post/python-314/</link>
      <pubDate>Thu, 08 May 2025 09:05:54 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-314/</guid>
      <description>&lt;p&gt;Python π (3.14) is out! The big feature this time around is template strings.&#xA;Free-threading is no longer experimental. There&amp;rsquo;s also lots more color&#xA;(including syntax highlighting in the REPL!), remote debugging, deferred&#xA;evaluation of annotations, and the usual error message and performance&#xA;improvements. Subintepreters are now accessible without the C-API (finally!),&#xA;and free-threaded Python is no longer experimental.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Python Packages</title>
      <link>https://iscinumpy.dev/page/presentations/2025-03-19-rse/</link>
      <pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-03-19-rse/</guid>
      <description></description>
    </item>
    <item>
      <title>Tools to help you write better code</title>
      <link>https://iscinumpy.dev/page/presentations/2025-01-22-sqat/</link>
      <pubDate>Wed, 22 Jan 2025 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2025-01-22-sqat/</guid>
      <description></description>
    </item>
    <item>
      <title>scikit-build-core 0.10</title>
      <link>https://iscinumpy.dev/post/scikit-build-core-0-10/</link>
      <pubDate>Mon, 05 Aug 2024 23:09:13 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/scikit-build-core-0-10/</guid>
      <description>&lt;p&gt;Scikit-build-core 0.10 is out, and it is one of the largest releases we&amp;rsquo;ve&#xA;produced in terms of new configuration options. It automatically reads your&#xA;minimum CMake version, you can tell it to read your scikit-build-core&#xA;minimum-version, and there are settings for many of the advanced things users&#xA;used to do with scikit-build (classic), like rebuilds or pure Python fallbacks&#xA;on build failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The two flavors of Python 3.13</title>
      <link>https://iscinumpy.dev/page/presentations/2024-07-01-pyhep/</link>
      <pubDate>Mon, 01 Jul 2024 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2024-07-01-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>🎡 cibuildwheel 2.19</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-2-19-0/</link>
      <pubDate>Mon, 10 Jun 2024 12:05:51 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-2-19-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cibuildwheel.pypa.io&#34;&gt;cibuildwheel&lt;/a&gt; 2.19 is out, with some very big additions. A new platform,&#xA;&lt;a href=&#34;https://pyodide.org&#34;&gt;Pyodide&lt;/a&gt;, has been added for building WebAssembly wheels. We&amp;rsquo;ve added CPython&#xA;3.13 free-threaded builds, now on all OS&amp;rsquo;s. And we have an opt-in speed&#xA;improvement with the &lt;code&gt;build[uv]&lt;/code&gt; build-frontend option.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve had some fantastic releases of cibuildwheel since my last post over 2.10,&#xA;so I&amp;rsquo;ll include a few of the new features from those releases, too, with a&#xA;highlight on a larger feature that can use more explaining: &lt;code&gt;inherit&lt;/code&gt; for&#xA;overrides.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modern binary build systems</title>
      <link>https://iscinumpy.dev/page/presentations/2024-05-17-pycon/</link>
      <pubDate>Fri, 17 May 2024 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2024-05-17-pycon/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.13</title>
      <link>https://iscinumpy.dev/post/python-313/</link>
      <pubDate>Thu, 09 May 2024 15:33:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-313/</guid>
      <description>&lt;p&gt;Python 3.13 betas are out (Edit: 3.13.0 is out!), which means the features are&#xA;locked in. For the first time in thirty years, Python has a new, more colorful&#xA;REPL! There&amp;rsquo;s also a no-GIL compile-time option (free-threaded), an optional&#xA;JIT, some new typing features, and better error messages (again).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Quality Assurance Tooling</title>
      <link>https://iscinumpy.dev/page/presentations/2024-01-23-sqat/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2024-01-23-sqat/</guid>
      <description></description>
    </item>
    <item>
      <title>Learning Rust with Advent of Code 2023</title>
      <link>https://iscinumpy.dev/page/presentations/2024-01-10-rust/</link>
      <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2024-01-10-rust/</guid>
      <description></description>
    </item>
    <item>
      <title>Inline run dependencies in pipx 1.4.2</title>
      <link>https://iscinumpy.dev/post/pep723/</link>
      <pubDate>Mon, 04 Dec 2023 15:00:06 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/pep723/</guid>
      <description>&lt;p&gt;While it can also do much more, Python is a fantastic language for writing small&#xA;scripts and utilities with it&amp;rsquo;s expressive syntax and batteries-included&#xA;standard library. But what if you need just a bit more? PyPI is one of the best&#xA;package repositories for any language, and being able to access it &lt;em&gt;without&lt;/em&gt;&#xA;having to write a multi-file library and setting up virtual environments would&#xA;be a dream - one that is becoming reality. Pipx 1.4.2 has an experimental&#xA;implementation of the &lt;del&gt;provisionally&lt;/del&gt; accepted &lt;a href=&#34;https://peps.python.org/pep-0723&#34;&gt;PEP 723&lt;/a&gt;, and I&amp;rsquo;d like to&#xA;show it off here, as it&amp;rsquo;s tremendously useful for simple scripts &amp;amp; utilities.&#xA;Support is also available in Nox 2024.04.15 and Hatch 1.10.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Project report - henryiii</title>
      <link>https://iscinumpy.dev/page/presentations/2023-11-13-rsepeer/</link>
      <pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2023-11-13-rsepeer/</guid>
      <description></description>
    </item>
    <item>
      <title>Software Quality Assurance Tooling</title>
      <link>https://iscinumpy.dev/page/presentations/2023-10-27-sqat/</link>
      <pubDate>Fri, 27 Oct 2023 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2023-10-27-sqat/</guid>
      <description></description>
    </item>
    <item>
      <title>C&#43;&#43;23</title>
      <link>https://iscinumpy.dev/post/cpp-23/</link>
      <pubDate>Mon, 23 Oct 2023 11:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cpp-23/</guid>
      <description>&lt;p&gt;C++23 is complete and pretty much finalized, so let&amp;rsquo;s explore the new features&#xA;in C++, from a data science point of view. This is not as large of a release as&#xA;C++20 or C++11, but it&amp;rsquo;s still a hefty release with lots of nice new features -&#xA;larger than C++17.&lt;/p&gt;&#xA;&lt;p&gt;Some of the major new features are building on themes from C++20, such as vastly&#xA;expanded ranges and views, more &lt;code&gt;constexpr&lt;/code&gt;/&lt;code&gt;consteval&lt;/code&gt;, module support for the&#xA;standard library, &lt;code&gt;std::print&lt;/code&gt; to supplement &lt;code&gt;std::format&lt;/code&gt;, and a&#xA;&lt;code&gt;std::generator&lt;/code&gt; to support coroutines. There are also several general features,&#xA;lambdas and classes get along much better now, there are new preprocessor&#xA;additions (!), a stacktrace library, flat maps/sets, and new &lt;code&gt;std::optional&lt;/code&gt;&#xA;monadics, deducing &lt;code&gt;this&lt;/code&gt;, and many various additions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Scientific Python Development Guide</title>
      <link>https://iscinumpy.dev/post/cookie/</link>
      <pubDate>Fri, 14 Jul 2023 00:45:32 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cookie/</guid>
      <description>&lt;p&gt;One outcome of the&#xA;&lt;a href=&#34;https://scientific-python.org/summits/developer/2023/&#34;&gt;2023 Scientific Python Developer Summit&lt;/a&gt;&#xA;was the &lt;a href=&#34;https://learn.scientific-python.org/development&#34;&gt;Scientific Python Development Guide&lt;/a&gt;, a comprehensive guide to modern&#xA;Python package development, complete with a &lt;a href=&#34;https://github.com/scientific-python/cookie&#34;&gt;new project template&lt;/a&gt;&#xA;supporting 12 build backends and a &lt;a href=&#34;https://learn.scientific-python.org/development/guides/repo-review&#34;&gt;WebAssembly-powered checker&lt;/a&gt;&#xA;with checks linked to the guide. The guide covers topics like &lt;a href=&#34;https://learn.scientific-python.org/development/guides/packaging-simple/&#34;&gt;modern&lt;/a&gt;,&#xA;&lt;a href=&#34;https://learn.scientific-python.org/development/guides/packaging-compiled/&#34;&gt;compiled&lt;/a&gt;, and &lt;a href=&#34;https://learn.scientific-python.org/development/guides/packaging-classic/&#34;&gt;classic&lt;/a&gt; packaging, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/style/&#34;&gt;style&lt;/a&gt; checks, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/mypy/&#34;&gt;type&#xA;checking&lt;/a&gt;, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/docs/&#34;&gt;docs&lt;/a&gt;, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/tasks/&#34;&gt;task runners&lt;/a&gt;, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/gha-basic/&#34;&gt;CI&lt;/a&gt;, &lt;a href=&#34;https://learn.scientific-python.org/development/guides/pytest/&#34;&gt;tests&lt;/a&gt;,&#xA;and much more! There also are sections of &lt;a href=&#34;https://learn.scientific-python.org/development/tutorials/&#34;&gt;tutorials&lt;/a&gt;, &lt;a href=&#34;https://learn.scientific-python.org/development/principles/&#34;&gt;principles&lt;/a&gt;, and&#xA;some common &lt;a href=&#34;https://learn.scientific-python.org/development/patterns/&#34;&gt;patterns&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This guide (along with cookie &amp;amp; repo-review) started in &lt;a href=&#34;https://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt; in 2020.&#xA;During the summit, it was merged with the &lt;a href=&#34;https://nsls-ii.github.io/&#34;&gt;NSLS-II&lt;/a&gt; guidelines, which provided&#xA;the basis for the &lt;a href=&#34;https://learn.scientific-python.org/development/principles/&#34;&gt;principles&lt;/a&gt; section. I&amp;rsquo;d like to thank and acknowledge Dan&#xA;Allan and Gregory Lee for working tirelessly during the summit to rework,&#xA;rewrite, merge, and fix the guide, including writing most of the &lt;a href=&#34;https://learn.scientific-python.org/development/tutorials/&#34;&gt;tutorials&lt;/a&gt;&#xA;pages and first &lt;a href=&#34;https://learn.scientific-python.org/development/patterns/&#34;&gt;patterns&lt;/a&gt; page, and rewriting the &lt;a href=&#34;https://learn.scientific-python.org/development/tutorials/dev-environment/&#34;&gt;environment&lt;/a&gt; page as a&#xA;tutorial.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing repo-review</title>
      <link>https://iscinumpy.dev/post/repo-review/</link>
      <pubDate>Thu, 13 Jul 2023 22:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/repo-review/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve released a new&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; toolkit for running checks, similar to Ruff and Flake8&#xA;but designed to check configuration, called &lt;a href=&#34;https://repo-review.readthedocs.io&#34;&gt;repo-review&lt;/a&gt;. It requires Python&#xA;3.10+&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; to run and has no built-in checks, but is easy to write plugins for. A&#xA;set of checks based on the &lt;a href=&#34;https://learn.scientific-python.org/development&#34;&gt;Scientific Python Development Guide&lt;/a&gt; (which I also&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/cookie&#34;&gt;have a post about&lt;/a&gt;!) are available as a plugin, &lt;code&gt;sp-repo-review&lt;/code&gt;.&#xA;You can run &lt;code&gt;repo-review&lt;/code&gt; in WebAssembly (via Pyodide), or in pre-commit, or as&#xA;a GitHub Action. It supports multiple output formats, including Rich, HTML, and&#xA;JSON. The system is based on fixtures (like pytest) and topologically sorts&#xA;requirements. You don&amp;rsquo;t need to depend on repo-review to add a repo-review&#xA;plugin. You can see a live version using sp-repo-review&#xA;&lt;a href=&#34;https://learn.scientific-python.org/development/guides/repo-review/&#34;&gt;in-place here&lt;/a&gt;&#xA;or &lt;a href=&#34;https://scientific-python.github.io/repo-review/&#34;&gt;standalone here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.12</title>
      <link>https://iscinumpy.dev/post/python-312/</link>
      <pubDate>Mon, 19 Jun 2023 17:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-312/</guid>
      <description>&lt;p&gt;Python 3.12&amp;rsquo;s beta&amp;rsquo;s are out, which means the features are locked in. The theme&#xA;this year has been cleanup and typing. &lt;code&gt;distutils&lt;/code&gt; has been removed, and&#xA;setuptools is no longer present in default environments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Quality Assurance Tooling</title>
      <link>https://iscinumpy.dev/page/presentations/2023-01-23-sqat/</link>
      <pubDate>Mon, 23 Jan 2023 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2023-01-23-sqat/</guid>
      <description></description>
    </item>
    <item>
      <title>Setup Windows</title>
      <link>https://iscinumpy.dev/post/setup-windows/</link>
      <pubDate>Mon, 12 Dec 2022 11:54:16 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/setup-windows/</guid>
      <description>&lt;p&gt;I set up an ARM DevKit recently, so I wanted to catalog what I do to setup&#xA;Windows here. This is not as polished or complete as my macOS setups, because&#xA;this is not something I use as a daily driver. But it might be useful, and I&amp;rsquo;m&#xA;open to suggestions to improve it. This should work for Intel or ARM Windows.&lt;/p&gt;&#xA;&lt;p&gt;Also see &lt;a href=&#34;https://iscinumpy.dev/post/setup-a-new-mac&#34;&gt;macOS&lt;/a&gt; &lt;a href=&#34;https://iscinumpy.dev/post/setup-apple-silicon&#34;&gt;(AS)&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s new in Python 3.11</title>
      <link>https://iscinumpy.dev/page/presentations/2022-10-19-rse/</link>
      <pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-10-19-rse/</guid>
      <description></description>
    </item>
    <item>
      <title>🎡 cibuildwheel 2.10</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-2-10-0/</link>
      <pubDate>Tue, 13 Sep 2022 08:42:26 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-2-10-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pypa/cibuildwheel&#34;&gt;cibuildwheel&lt;/a&gt; 2.10 is out, with some important additions. PEP 517 config&#xA;settings added, &lt;code&gt;--only&lt;/code&gt; (which has an interesting use in GHA), and Cirrus CI&#xA;support (including our first Apple Silicon native runner!) are highlights. We&#xA;also support Python 3.11 now (as of 2.11.2, RC&amp;rsquo;s in older releases).&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve had some fantastic releases of cibuildwheel this year, including some very&#xA;powerful features you might be interested in using, and I haven&amp;rsquo;t covered&#xA;releases since 2.2, so let&amp;rsquo;s take an in-depth look at what&amp;rsquo;s new for this and&#xA;the last few releases!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Everything you didn&#39;t know you needed</title>
      <link>https://iscinumpy.dev/page/presentations/2022-08-05-codas-hep/</link>
      <pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-08-05-codas-hep/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.10</title>
      <link>https://iscinumpy.dev/post/python-310/</link>
      <pubDate>Sat, 23 Jul 2022 10:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-310/</guid>
      <description>&lt;p&gt;Python 3.10 is out (and has been for a while, I&amp;rsquo;m late posting this), with new&#xA;features and changes. The big new language feature this update is pattern&#xA;matching. We get much better errors, the always-present typing improvements, and&#xA;finally some real usage of the new PEG parser from 3.9.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building binary extensions with pybind11, scikit build, and cibuildwheel</title>
      <link>https://iscinumpy.dev/page/presentations/2022-07-15-scipy/</link>
      <pubDate>Fri, 15 Jul 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-07-15-scipy/</guid>
      <description></description>
    </item>
    <item>
      <title>Awkward Packaging: building Scikit-HEP</title>
      <link>https://iscinumpy.dev/page/presentations/2022-07-14-scipy/</link>
      <pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-07-14-scipy/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.11</title>
      <link>https://iscinumpy.dev/post/python-311/</link>
      <pubDate>Wed, 11 May 2022 16:11:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-311/</guid>
      <description>&lt;p&gt;Python 3.11 has hit the beta (now released!) stage, which means no more new&#xA;features. It&amp;rsquo;s a perfect time to play with it! The themes in this update are the&#xA;standard ones: The faster CPython project is now fully going (3.11 is 25% faster&#xA;on average), along with improved error messages, typing, and asyncio. Beyond&#xA;this, the only major new feature is a library for reading TOML files; this&#xA;probably only exciting if you are involved in Python packaging (but I am, so I&amp;rsquo;m&#xA;excited!).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scikit-HEP Developer Pages: Guidelines for modern packaging</title>
      <link>https://iscinumpy.dev/page/presentations/2022-04-30-pycon/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-04-30-pycon/</guid>
      <description></description>
    </item>
    <item>
      <title>Building Binary Packages</title>
      <link>https://iscinumpy.dev/page/presentations/2022-04-29-pycon/</link>
      <pubDate>Fri, 29 Apr 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-04-29-pycon/</guid>
      <description></description>
    </item>
    <item>
      <title>Digital RSE: Automatic Code Quality Checks</title>
      <link>https://iscinumpy.dev/page/presentations/2022-03-09-rse/</link>
      <pubDate>Tue, 08 Mar 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-03-09-rse/</guid>
      <description></description>
    </item>
    <item>
      <title>boost-histogram / Hist</title>
      <link>https://iscinumpy.dev/page/presentations/2022-03-02-pyhep/</link>
      <pubDate>Wed, 02 Mar 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-03-02-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>CMake best practices</title>
      <link>https://iscinumpy.dev/page/presentations/2022-02-02-sc/</link>
      <pubDate>Wed, 02 Feb 2022 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2022-02-02-sc/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.7</title>
      <link>https://iscinumpy.dev/post/python-37/</link>
      <pubDate>Sat, 15 Jan 2022 22:41:05 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-37/</guid>
      <description>&lt;p&gt;Python 3.7 has been out for a while. In fact, it&amp;rsquo;s the oldest version of Python&#xA;still receiving support when this was written. I&amp;rsquo;d still like to write a &amp;ldquo;what&amp;rsquo;s&#xA;new&amp;rdquo;, targeting users who are upgrading to a Python 3.7+ only codebase, and want&#xA;to know what to take advantage of!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Poetry Versions</title>
      <link>https://iscinumpy.dev/post/poetry-versions/</link>
      <pubDate>Thu, 09 Dec 2021 11:00:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/poetry-versions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://python-poetry.org&#34;&gt;Poetry&lt;/a&gt; provides a all in one solution to Python packaging. I want to focus&#xA;on why I was quite hard on Poetry in my last post, specifically on its default&#xA;version capping and solver quirks, and also a few other negative things. This is&#xA;a followup to&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/bound-version-constraints&#34;&gt;Should you have upper version bounds&lt;/a&gt;, which&#xA;you should read before this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Should You Use Upper Bound Version Constraints?</title>
      <link>https://iscinumpy.dev/post/bound-version-constraints/</link>
      <pubDate>Thu, 09 Dec 2021 10:00:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/bound-version-constraints/</guid>
      <description>&lt;p&gt;Bound version constraints (upper caps) are starting to show up in the Python&#xA;ecosystem. This is causing &lt;a href=&#34;https://github.com/scikit-hep/pyhf/discussions/1595&#34;&gt;real world problems&lt;/a&gt; with&#xA;libraries following this recommendation, and is likely to &lt;a href=&#34;https://github.com/pypa/packaging/pull/482#issuecomment-963030131&#34;&gt;continue to get&#xA;worse&lt;/a&gt;; this practice does not scale to large numbers&#xA;of libraries or large numbers of users. In this discussion I would like to&#xA;explain why &lt;em&gt;always&lt;/em&gt; providing an upper limit causes far more harm than good&#xA;&lt;em&gt;even for true SemVer libraries&lt;/em&gt;, why libraries that pin upper limits require&#xA;&lt;em&gt;more frequent&lt;/em&gt; updates rather than less, and why it is not scalable. After&#xA;reading this, hopefully you will always consider every cap you add, you will&#xA;know the (few) places where pinning an upper limit is reasonable, and will&#xA;possibly even avoid using libraries that pin upper limits needlessly until the&#xA;author updates them to remove these pins.&lt;/p&gt;&#xA;&lt;p&gt;If this 10,000 word behemoth is a bit long for you, then skip around using the&#xA;table of contents, or see the &lt;a href=&#34;#tldr&#34;&gt;TL;DR&lt;/a&gt; section at the end, or read&#xA;&lt;a href=&#34;https://bernat.tech/posts/version-numbers&#34;&gt;version numbers by Bernát Gábor&lt;/a&gt;, which is shorter but is a&#xA;fantastic read with good examples and cute dog pictures. Or&#xA;&lt;a href=&#34;https://hynek.me/articles/semver-will-not-save-you/&#34;&gt;Hynek&amp;rsquo;s Semantic Versioning Will Not Save You&lt;/a&gt;&#xA;Be sure to check at least&#xA;&lt;a href=&#34;#analysis-of-a-javascript-project&#34;&gt;the JavaScript project analysis&lt;/a&gt; before you&#xA;leave!&lt;/p&gt;&#xA;&lt;p&gt;Also be warned, I pick on &lt;a href=&#34;https://python-poetry.org&#34;&gt;Poetry&lt;/a&gt; quite a bit. The rising popularity of&#xA;&lt;a href=&#34;https://python-poetry.org&#34;&gt;Poetry&lt;/a&gt; is likely due to the simplicity of having one tool vs. many for&#xA;packaging, but it happens to also have a special dependency solver, a new upper&#xA;bound syntax, and a &lt;a href=&#34;https://python-poetry.org/docs/faq/#why-are-unbound-version-constraints-a-bad-idea&#34;&gt;strong recommendation to always limit upper&#xA;versions&lt;/a&gt; - in direct opposition to &lt;a href=&#34;https://snarky.ca/why-i-dont-like-semver/&#34;&gt;members of the&#xA;Python core developer team&lt;/a&gt; and PyPA developers. Not&#xA;all libraries with excessive version capping are Poetry projects (like&#xA;TensorFlow), but many, many of them are. To be clear, Poetry doesn&amp;rsquo;t force&#xA;version pinning on you, but it does push you really, really hard to always&#xA;version cap, and it&amp;rsquo;s targeting new Python users that don&amp;rsquo;t know any better yet&#xA;than to accept bad recommendations. And these affect the whole ecosystem,&#xA;including users who do not use poetry, but want to depend on libraries that do!&#xA;I do really like other aspects of Poetry, and would like to&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/scikit-build-proposal&#34;&gt;eventually&lt;/a&gt; help it build binary packages with Scikit-build&#xA;(CMake) via a plugin, and it has some great developers. If I don&amp;rsquo;t pick on&#xA;Poetry enough for you, don&amp;rsquo;t worry, I have a&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/poetry-versions&#34;&gt;follow-up post&lt;/a&gt; that picks on it in much more detail.&#xA;Also, check out &lt;a href=&#34;https://pdm.fming.dev&#34;&gt;pdm&lt;/a&gt;, which gives many of the benefits of Poetry while&#xA;following PEP standards. Also &lt;a href=&#34;https://pixi.sh&#34;&gt;pixi&lt;/a&gt;, which works with the Conda ecosystem.&lt;/p&gt;&#xA;&lt;p&gt;If you come across something that can&amp;rsquo;t be solved, try using&#xA;&lt;code&gt;--exclude-newer &amp;lt;DATE&amp;gt;&lt;/code&gt; in &lt;a href=&#34;https://github.com/astral-sh/uv&#34;&gt;uv&lt;/a&gt; and &lt;a href=&#34;https://pdm.fming.dev&#34;&gt;pdm&lt;/a&gt;. This limits the solve by&#xA;ignoring packages newer than some date.&lt;/p&gt;</description>
    </item>
    <item>
      <title>App vs Library</title>
      <link>https://iscinumpy.dev/post/app-vs-library/</link>
      <pubDate>Thu, 09 Dec 2021 09:00:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/app-vs-library/</guid>
      <description>&lt;p&gt;What is the difference between an app and a library? This seemingly simple&#xA;question confuses some, and it turns out to be a harder question to answer than&#xA;you might expect. While the actual distinction between these common terms will&#xA;always be muddled in practice, I propose a specific definition to be used when&#xA;considering dependencies. This distinction is important when&#xA;&lt;a href=&#34;https://iscinumpy.dev/posts/bound-version-constraints&#34;&gt;discussing bound version constraints&lt;/a&gt; in the&#xA;next post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scikit Build Proposal</title>
      <link>https://iscinumpy.dev/post/scikit-build-proposal/</link>
      <pubDate>Wed, 27 Oct 2021 08:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/scikit-build-proposal/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent the last few years trying to make it easy for anyone to extend Python&#xA;with compiled languages. I&amp;rsquo;ve worked on &lt;a href=&#34;https://github.com/pybind/pybind11&#34;&gt;pybind11&lt;/a&gt;, a powerful C++ library&#xA;that allows users to write advanced Python extensions using just C++11, used by&#xA;some of the largest projects, SciPy, PyTorch, Google, LLVM, and tens of&#xA;thousands of other libraries, down to very small extensions. I also work on&#xA;&lt;a href=&#34;https://github.com/pypa/cibuildwheel&#34;&gt;cibuildwheel&lt;/a&gt;, which makes building binaries (called wheels) on continuous&#xA;integration (CI) simple. It is again powerful enough to used by huge projects,&#xA;like Scikit-learn, matplotlib, mypy; and is simple enough to be used by hundreds&#xA;of other packages. Recently it was accepted into the Python Packaging Authority&#xA;(PyPA). There is one missing piece, though, to complete this picture of compiled&#xA;extensions that easy to use for small projects, and powerful enough for large&#xA;projects: the build system. I believe the solution to that is &lt;a href=&#34;https://github.com/scikit-build/scikit-build&#34;&gt;scikit-build&lt;/a&gt;,&#xA;and I&amp;rsquo;d like to work on it over the next three years.&lt;/p&gt;&#xA;&lt;p&gt;Scikit-build is a tool for integrating a package with a CMake build system into&#xA;Python. You can utilize the vast collection of packages and projects using CMake&#xA;already, and you have access to modern building features, like multithreaded&#xA;builds, library discovery, superb compiler and IDE support, and all sorts of&#xA;extended tooling. Modern CMake is quite pleasant to write compared to times&#xA;past; I have written &lt;a href=&#34;https://cliutils.gitlab.io/modern-cmake/&#34;&gt;a book&lt;/a&gt; and &lt;a href=&#34;https://hsf-training.github.io/hsf-training-cmake-webpage&#34;&gt;training course&lt;/a&gt; on it. We&#xA;ship up-to-date &lt;code&gt;cmake&lt;/code&gt; and &lt;code&gt;ninja&lt;/code&gt; wheels for all binary platforms.&lt;/p&gt;&#xA;&lt;p&gt;Update: Funded! I&amp;rsquo;ll be working on this starting August 1, 2022!&lt;/p&gt;&#xA;&lt;p&gt;I wrote a proposal for an NSF CSSI Elements project containing three parts. The&#xA;first part will cover core development on Scikit-build to address the current&#xA;shortcomings and to prepare it for a post-distutils (Python 3.12+) world. The&#xA;second part would cover assisting libraries with a science use case in either&#xA;transitioning to scikit-build (ideally from an existing CMake build system with&#xA;Python bindings, but I can help mentor developers in writing bindings (ideally&#xA;pybind11), setting up CI, and writing CMake code as well (see my book or&#xA;workshop on Modern CMake, and I&amp;rsquo;m happy to help old scikit-build projects&#xA;transition to better practices). As part of this, I would be building up the&#xA;examples and documentation, leading into the third part of the proposal: A&#xA;series of training events and training material, including plans for something&#xA;alongside SciPy.&lt;/p&gt;&#xA;&lt;p&gt;You can also see an outline at&#xA;&lt;a href=&#34;https://github.com/scikit-build/scikit-build/wiki&#34;&gt;scikit-build/scikit-build/wiki&lt;/a&gt;&#xA;or at the end of this post.&lt;/p&gt;&#xA;&lt;p&gt;Thank you for all the projects! The proposal was submitted Dec 8, 2021; mid year&#xA;we should find out if it was accepted!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Useful Links</title>
      <link>https://iscinumpy.dev/page/useful-links/</link>
      <pubDate>Fri, 22 Oct 2021 15:44:45 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/useful-links/</guid>
      <description>&lt;h1 id=&#34;python&#34;&gt;Python&lt;/h1&gt;&#xA;&lt;h2 id=&#34;learning-materials&#34;&gt;Learning materials&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hepsoftwarefoundation.org/training/curriculum.html&#34;&gt;HSF training curriculum (Python, bash, git, docker, and more)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;topical-articles&#34;&gt;Topical articles&lt;/h2&gt;&#xA;&lt;h3 id=&#34;cpython-core-developers&#34;&gt;CPython core developers&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Brett Cannon&lt;/strong&gt; is a CPython core developer, and is very interested in&#xA;standardizing packaging. &lt;a href=&#34;https://snarky.ca&#34;&gt;https://snarky.ca&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://snarky.ca/why-i-dont-like-semver/&#34;&gt;Why I don&amp;rsquo;t like SemVer anymore&lt;/a&gt;:&#xA;A great resource to make you think about what SemVer means and where it falls&#xA;short.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://snarky.ca/what-the-heck-is-pyproject-toml/&#34;&gt;What the heck is pyproject.toml&lt;/a&gt;:&#xA;A intro to modern Python packaging&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://snarky.ca/a-quick-and-dirty-guide-on-how-to-install-packages-for-python/&#34;&gt;A quick-and-dirty guide on how to install packages for Python&lt;/a&gt;:&#xA;This showw the &amp;ldquo;correct&amp;rdquo; way to throw together packages (pre-pipx).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Paul Ganssle&lt;/strong&gt; is CPython core developer, and maintains zoneinfo.&#xA;&lt;a href=&#34;https://blog.ganssle.io&#34;&gt;https://blog.ganssle.io&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>🎡 cibuildwheel 2.2</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-2-2-0/</link>
      <pubDate>Wed, 20 Oct 2021 11:27:29 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-2-2-0/</guid>
      <description>&lt;p&gt;Another great release from &lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;cibuildwheel&lt;/a&gt;, &lt;a href=&#34;https://github.com/pypa/cibuildwheel/releases/tag/v2.2.0&#34;&gt;2.2.0&lt;/a&gt;, is out! There are a few&#xA;important additions in this release that you should be aware of, so I will&#xA;outline the major changes here. We will cover the new musllinux wheels, overload&#xA;configuration, and incoming changes to pip and PyPy expected in the next&#xA;release. As always, it is recommended that you pin your cibuildwheel version and&#xA;then provide some automated way to keep the pin up-to-date, such as GitHub&amp;rsquo;s&#xA;dependabot. You should be updating just before you make a release, as well, but&#xA;you probably don&amp;rsquo;t want to be surprised by new wheels during your release&#xA;process!&lt;/p&gt;</description>
    </item>
    <item>
      <title>🎡 cibuildwheel 2.0</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-2-0/</link>
      <pubDate>Fri, 16 Jul 2021 12:23:20 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-2-0/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;cibuildwheel&lt;/a&gt; package has just had a major release with some fantastic&#xA;features. Python 2.7 and 3.5 support has been removed (and PyPy3.6), allowing us&#xA;to update to the latest manylinux and auditwheel versions, and support the newly&#xA;unified manylinux PyPy3.7 images. We now allow users to select &lt;code&gt;pypa/build&lt;/code&gt; as a&#xA;build frontend. We now have a custom option to enable pre-release Pythons (3.10&#xA;currently) for testing before they are ABI stable (please don&amp;rsquo;t release wheels&#xA;until that happens). Maybe most exciting, cibuildwheel now supports&#xA;configuration in &lt;code&gt;pyproject.toml&lt;/code&gt;, allowing you to be even further isolated from&#xA;dependence on your CI system; you can easily produce Linux and Windows wheels&#xA;locally (macOS still installs to system locations). And, since my&#xA;&lt;a href=&#34;https://iscinumpy.dev/posts/cibuildwheel-1-9-0&#34;&gt;last post&lt;/a&gt; and&#xA;&lt;a href=&#34;https://iscinumpy.dev/posts/overview-of-cibuildwheel&#34;&gt;introduction post&lt;/a&gt;, cibuildwheel is now part&#xA;of the PyPA!&lt;/p&gt;</description>
    </item>
    <item>
      <title>pybind11</title>
      <link>https://iscinumpy.dev/page/presentations/2021-07-16-scipy/</link>
      <pubDate>Fri, 16 Jul 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-07-16-scipy/</guid>
      <description></description>
    </item>
    <item>
      <title>Announcing CLI11 2.0</title>
      <link>https://iscinumpy.dev/post/announcing-cli11-20/</link>
      <pubDate>Wed, 14 Jul 2021 14:34:02 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-cli11-20/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in&#xA;C++11, has &lt;a href=&#34;https://github.com/CLIUtils/CLI11/releases/tag/v2.0.0&#34;&gt;been updated to 2.0&lt;/a&gt;. A lot of deprecated things have been&#xA;removed, and there was a lot of cleanup under-the-hood; making CLI11 simpler. A&#xA;few defaults have changed slightly, like better TOML support by default.&lt;/p&gt;&#xA;&lt;p&gt;CLI11 does a better job than ever understanding any sort of container you&#xA;provide - complex numbers are natively supported, along with atomic types. A&#xA;long requested feature, simple version flags, has been added. Subcommands are&#xA;more customizable. And there have been quite a few bugfixes for rare issues.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Powerful Python Packaging for Scientific Codes</title>
      <link>https://iscinumpy.dev/page/presentations/2021-07-08-pyhep/</link>
      <pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-07-08-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>High-Performance Histogramming for HEP Analysis</title>
      <link>https://iscinumpy.dev/page/presentations/2021-07-07-pyhep/</link>
      <pubDate>Wed, 07 Jul 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-07-07-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>Level Up Your Python (part 2)</title>
      <link>https://iscinumpy.dev/page/presentations/2021-07-06-pyhep/</link>
      <pubDate>Tue, 06 Jul 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-07-06-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>Level Up Your Python (part 1)</title>
      <link>https://iscinumpy.dev/page/presentations/2021-07-05-pyhep/</link>
      <pubDate>Mon, 05 Jul 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-07-05-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.9</title>
      <link>https://iscinumpy.dev/post/python-39/</link>
      <pubDate>Fri, 12 Feb 2021 12:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-39/</guid>
      <description>&lt;p&gt;Python 3.9 is out (and has been for a while, I&amp;rsquo;m late posting this), with new&#xA;features and changes. The themes for this release have been heavily internal&#xA;improvements, such as a new more powerful parser, and the usual static typing&#xA;improvements, along with a several bits new-user facing new syntax. This makes&#xA;3.9 a smaller release, but still it has some nice features of note.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup an Apple Silicon Mac</title>
      <link>https://iscinumpy.dev/post/setup-apple-silicon/</link>
      <pubDate>Thu, 11 Feb 2021 17:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/setup-apple-silicon/</guid>
      <description>&lt;p&gt;I recently got an M1 mac, and I&amp;rsquo;ll be cataloging my experience with using it for&#xA;scientific software development. I&amp;rsquo;ll be returning to update this page&#xA;periodically, and will eventually have a focused recommendation for Apple&#xA;Silicon setup, similar to &lt;a href=&#34;https://iscinumpy.dev/post/setup-a-new-mac&#34;&gt;my Intel setup&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>🎡 cibuildwheel 1.8.0 and 1.9.0</title>
      <link>https://iscinumpy.dev/post/cibuildwheel-1-9-0/</link>
      <pubDate>Sun, 07 Feb 2021 20:13:41 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cibuildwheel-1-9-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;&lt;code&gt;cibuildwheel&lt;/code&gt;&lt;/a&gt; has just had two back-to-back releases, two weeks apart,&#xA;representing several months of hard work and some exciting few features! I will&#xA;be covering both releases at once, so we will discuss Apple Silicon support,&#xA;architecture emulation on Linux, integrated PEP 621 Requires-Python support, the&#xA;native GitHub Action, extended build and test controls, and more!&lt;/p&gt;&#xA;&lt;p&gt;If you are following the releases, 1.7.0 came out last November (2020), and&#xA;included the fantastic output folding feature, which makes logs much easier to&#xA;read on CI systems that support folding, and makes it much easier to see how&#xA;long each step takes. The 1.7.x series also included the addition of the&#xA;&lt;a href=&#34;https://cibuildwheel.readthedocs.io/en/stable/working-examples/&#34;&gt;working examples section&lt;/a&gt; of the documentation, which tracks&#xA;some known projects using &lt;code&gt;cibuildwheel&lt;/code&gt;, such as scikit-learn, Matlotlib, and&#xA;MyPy; it is a great place to go to look into how other projects have integrated&#xA;&lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;&lt;code&gt;cibuildwheel&lt;/code&gt;&lt;/a&gt; into their workflow.&lt;/p&gt;&#xA;&lt;p&gt;I have an &lt;a href=&#34;https://iscinumpy.dev/posts/overview-of-cibuildwheel&#34;&gt;general overview post&lt;/a&gt; as well. Now&#xA;let&amp;rsquo;s look at what&amp;rsquo;s new! Update: cibuildwheel is now an official package of the&#xA;PyPA!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overview of cibuildwheel 🎡</title>
      <link>https://iscinumpy.dev/post/overview-of-cibuildwheel/</link>
      <pubDate>Sat, 06 Feb 2021 20:58:16 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/overview-of-cibuildwheel/</guid>
      <description>&lt;p&gt;This is the first of two posts on &lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;&lt;code&gt;cibuildwheel&lt;/code&gt;&lt;/a&gt;, a fantastic project I&#xA;joined after switching to it from my own &lt;a href=&#34;https://github.com/scikit-hep/azure-wheel-helpers&#34;&gt;azure-wheel-helpers&lt;/a&gt;, which I&amp;rsquo;ve&#xA;blogged about &lt;a href=&#34;https://iscinumpy.dev/post/azure-devops-python-wheels/&#34;&gt;here before&lt;/a&gt;. It is the best wheelbuilding&#xA;system available for Python today, and can make something that is normally a&#xA;pain to setup and a headache to maintain a breeze (by forcing all the headaches&#xA;on us, of course, as maintainers, but it&amp;rsquo;s better to solve issues centrally!&#xA;Obviously we rather like solving these problems. Or we are just crazy, which is&#xA;also possible ;) ).&lt;/p&gt;&#xA;&lt;p&gt;Be sure to checkout&#xA;&lt;a href=&#34;https://iscinumpy.dev/posts/cibuildwheel-1-9-0&#34;&gt;the followup post over new features in 1.8.0 and 1.9.0&lt;/a&gt;,&#xA;too! Also, &lt;code&gt;cibuildwheel&lt;/code&gt; was recently accepted into the PyPA!&lt;/p&gt;</description>
    </item>
    <item>
      <title>CMake: Best Practices</title>
      <link>https://iscinumpy.dev/page/presentations/2021-02-02-scrt/</link>
      <pubDate>Tue, 02 Feb 2021 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2021-02-02-scrt/</guid>
      <description></description>
    </item>
    <item>
      <title>pybind11 2.6.0</title>
      <link>https://iscinumpy.dev/post/pybind11-2-6-0/</link>
      <pubDate>Wed, 21 Oct 2020 15:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/pybind11-2-6-0/</guid>
      <description>&lt;figure class=&#34;dark&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/post/pybind11-2-6-0/images/pybind11-logo.png&#34;&#xA;    alt=&#34;pybind11 logo&#34; width=&#34;405&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I am pleased to announce the release of &lt;a href=&#34;https://github.com/pybind/pybind11/releases/tag/v2.6.0&#34;&gt;pybind11 2.6.0&lt;/a&gt;! This is the largest&#xA;release since 2.2 (released over three years ago). I would like to highlight&#xA;some of the key changes below; be sure to check out the &lt;a href=&#34;https://pybind11.readthedocs.io/en/latest/changelog.html&#34;&gt;changelog&lt;/a&gt; and&#xA;&lt;a href=&#34;https://pybind11.readthedocs.io/en/latest/upgrade.html&#34;&gt;upgrade guide&lt;/a&gt; for more information! The focus of this release was stability,&#xA;packaging, and supporting more platforms, though there are a lot of small&#xA;features and useful additions, covered by &lt;a href=&#34;https://pybind11.readthedocs.io&#34;&gt;newly expanded docs&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making of SciPy 2020&#39;s High Performance Histograms as Objects</title>
      <link>https://iscinumpy.dev/post/making-of-scipy-2020/</link>
      <pubDate>Thu, 13 Aug 2020 12:05:13 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/making-of-scipy-2020/</guid>
      <description>&lt;figure class=&#34;dark&#34;&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ERraTfHkPd0&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/post/making-of-scipy-2020/images/final.png&#34;&#xA;    alt=&#34;Screenshot of SciPy video showing overlay effect&#34; width=&#34;80%&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Now that SciPy 2020 is over, I would like to share the process I used to create&#xA;the talk video. The effect was designed to recreate the feeling of watching an&#xA;actual in-person talk. I will first cover parts, detailing what I got and some&#xA;general suggestions, then I&amp;rsquo;ll discuss the filming process, and finally, I will&#xA;cover the post-process procedure and software. The entire process took about a&#xA;day and a half, with an overnight render, and cost about $200 (best compared to&#xA;the cost of registration of a live conference).&lt;/p&gt;</description>
    </item>
    <item>
      <title>The boost-histogram Package</title>
      <link>https://iscinumpy.dev/page/presentations/2020-07-17-pyhep/</link>
      <pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2020-07-17-pyhep/</guid>
      <description></description>
    </item>
    <item>
      <title>boost-histogram: High-performance histograms as objects</title>
      <link>https://iscinumpy.dev/page/presentations/2020-07-07-scipy/</link>
      <pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2020-07-07-scipy/</guid>
      <description></description>
    </item>
    <item>
      <title>Johns Hopkins COVID-19 Dataset in Pandas</title>
      <link>https://iscinumpy.dev/post/johns-hopkins-covid/</link>
      <pubDate>Mon, 30 Mar 2020 15:30:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/johns-hopkins-covid/</guid>
      <description>&lt;p&gt;COVID-19 is ravaging the globe. Let&amp;rsquo;s look at the excellent Johns Hopkins&#xA;dataset using Pandas. This will serve both as a guideline for getting the data&#xA;and exploring on your own, as well as an example of Pandas multi-indexing in an easy&#xA;to understand situation. I am currently involved in &lt;a href=&#34;https://science-responds.org&#34;&gt;science-responds&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python, NumPy, and Pandas</title>
      <link>https://iscinumpy.dev/page/presentations/2020-01-28-rdm/</link>
      <pubDate>Tue, 28 Jan 2020 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2020-01-28-rdm/</guid>
      <description></description>
    </item>
    <item>
      <title>The boost-histogram beta release</title>
      <link>https://iscinumpy.dev/post/boost-histogram-06/</link>
      <pubDate>Fri, 13 Dec 2019 11:00:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/boost-histogram-06/</guid>
      <description>&lt;figure class=&#34;dark&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/post/boost-histogram-06/images/BoostHistogramPythonLogo.png&#34;&#xA;    alt=&#34;boost-histogram logo&#34; width=&#34;405&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The foundational histogramming package for Python, &lt;a href=&#34;https://github.com/scikit-hep/boost-histogram&#34;&gt;boost-histogram&lt;/a&gt;, hit beta&#xA;status with version 0.6! This is a major update to the new &lt;a href=&#34;https://github.com/boostorg/histogram&#34;&gt;Boost.Histogram&lt;/a&gt;&#xA;bindings. Since I have not written about boost-histogram yet here, I will&#xA;introduce the library in its current state. Version 0.6.2 was based on the&#xA;recently released &lt;a href=&#34;https://www.boost.org&#34;&gt;Boost C++ Libraries&lt;/a&gt; &lt;a href=&#34;https://www.boost.org/users/history/version_1_72_0.html&#34;&gt;1.72&lt;/a&gt; Histogram&#xA;package. Feel free to &lt;a href=&#34;https://boost-histogram.readthedocs.io/en/latest/&#34;&gt;visit the docs&lt;/a&gt;, or keep reading&#xA;this post.&lt;/p&gt;&#xA;&lt;p&gt;This Python library is part of a larger picture in the &lt;a href=&#34;https://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt; ecosystem&#xA;of tools for Particle Physics and is funded by &lt;a href=&#34;https://diana-hep.org&#34;&gt;DIANA/HEP&lt;/a&gt; and &lt;a href=&#34;https://iris-hep.org&#34;&gt;IRIS-HEP&lt;/a&gt;.&#xA;It is the core library for making and manipulating histograms. Other packages&#xA;are under development to provide a complete set of tools to work with and&#xA;visualize histograms. The &lt;a href=&#34;https://github.com/scikit-hep/aghast&#34;&gt;Aghast&lt;/a&gt; package is designed to convert between&#xA;popular histogram formats, and the Hist package will be designed to make common&#xA;analysis tasks simple, like plotting via tools such as the &lt;a href=&#34;https://github.com/scikit-hep/mplhep&#34;&gt;mplhep&lt;/a&gt; package.&#xA;Hist and Aghast will be initially driven by HEP (High Energy Physics and&#xA;Particle Physics) needs, but outside issues and contributions are welcome and&#xA;encouraged.&lt;/p&gt;</description>
    </item>
    <item>
      <title>High-Performance Python: GPUs</title>
      <link>https://iscinumpy.dev/page/presentations/2019-12-05-minicourse/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-12-05-minicourse/</guid>
      <description></description>
    </item>
    <item>
      <title>High-Performance Python: CPUs</title>
      <link>https://iscinumpy.dev/page/presentations/2019-11-20-minicourse/</link>
      <pubDate>Wed, 20 Nov 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-11-20-minicourse/</guid>
      <description></description>
    </item>
    <item>
      <title>Recent developments in histogram libraries</title>
      <link>https://iscinumpy.dev/page/presentations/2019-11-07-chep/</link>
      <pubDate>Thu, 07 Nov 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-11-07-chep/</guid>
      <description></description>
    </item>
    <item>
      <title>Python 3.8</title>
      <link>https://iscinumpy.dev/post/python-38/</link>
      <pubDate>Fri, 25 Oct 2019 14:11:20 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-38/</guid>
      <description>&lt;p&gt;Python 3.8 is out, with new features and changes. The themes for this release&#xA;have been performance, ABI/internals, and static typing, along with a smattering&#xA;of new syntax. Given the recent&#xA;&lt;a href=&#34;https://numpy.org/neps/nep-0029-deprecation_policy.html&#34;&gt;community statement on Python support&lt;/a&gt;,&#xA;we should be staying up to date with the current changes in Python. As Python 2&#xA;sunsets, we are finally in an era where we can hope to someday use the features&#xA;we see coming out of Python release again!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.8: What&#39;s new</title>
      <link>https://iscinumpy.dev/page/presentations/2019-10-17-pyhep-python38/</link>
      <pubDate>Thu, 17 Oct 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-10-17-pyhep-python38/</guid>
      <description></description>
    </item>
    <item>
      <title>Python Histogramming Packages</title>
      <link>https://iscinumpy.dev/page/presentations/2019-10-17-pyhep-hist/</link>
      <pubDate>Thu, 17 Oct 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-10-17-pyhep-hist/</guid>
      <description></description>
    </item>
    <item>
      <title>Boost Histogram Roadmap</title>
      <link>https://iscinumpy.dev/page/presentations/2019-09-12-irisretreat/</link>
      <pubDate>Thu, 12 Sep 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-09-12-irisretreat/</guid>
      <description></description>
    </item>
    <item>
      <title>Modern CMake Workshop</title>
      <link>https://iscinumpy.dev/page/presentations/2019-08-20-atlas/</link>
      <pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-08-20-atlas/</guid>
      <description></description>
    </item>
    <item>
      <title>Modern CMake</title>
      <link>https://iscinumpy.dev/page/presentations/2019-08-14-picscie/</link>
      <pubDate>Wed, 14 Aug 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-08-14-picscie/</guid>
      <description></description>
    </item>
    <item>
      <title>C&#43;&#43;20</title>
      <link>https://iscinumpy.dev/post/cpp-20/</link>
      <pubDate>Sat, 20 Jul 2019 22:42:21 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cpp-20/</guid>
      <description>&lt;p&gt;The final meeting for new features in C++ is over, so let&amp;rsquo;s explore the new&#xA;features in C++, from a data science point of view. This is the largest release&#xA;of C++ since C++11, and when you consider C++14 and C++17 to be interim&#xA;releases, the entire 9 year cycle is possibly the largest yet! It may not feel&#xA;quite as massive as C++11, since we didn&amp;rsquo;t have interim releases for C++11 and&#xA;because C++11 is a much more complete, useful language than C++03, but this is&#xA;still a really impactful release! This is also the first version to include&#xA;every major feature from Bjarne Stroustrup&amp;rsquo;s &amp;ldquo;The design and Evolution of C++&amp;rdquo;,&#xA;also known as D&amp;amp;E, from 1994!&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s look at the major new features, as well as collections of smaller ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup a New Mac</title>
      <link>https://iscinumpy.dev/post/setup-a-new-mac/</link>
      <pubDate>Thu, 18 Jul 2019 11:01:06 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/setup-a-new-mac/</guid>
      <description>&lt;p&gt;Here is a list of my favorite things to do to properly setup macOS for&#xA;scientific work. I periodically update it; feel free to leave a comment if&#xA;something breaks. This should work on macOS 11 on Intel; see&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/setup-apple-silicon&#34;&gt;my post on Apple Silicon&lt;/a&gt; to track progress on a&#xA;similar setup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AmpGen &amp; Particle/DecayLanguage</title>
      <link>https://iscinumpy.dev/page/presentations/2019-06-19-iris-apd/</link>
      <pubDate>Wed, 19 Jun 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-06-19-iris-apd/</guid>
      <description></description>
    </item>
    <item>
      <title>Histograms</title>
      <link>https://iscinumpy.dev/page/presentations/2019-06-19-iris-hist/</link>
      <pubDate>Wed, 19 Jun 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-06-19-iris-hist/</guid>
      <description></description>
    </item>
    <item>
      <title>Azure DevOps: Python Wheels</title>
      <link>https://iscinumpy.dev/post/azure-devops-python-wheels/</link>
      <pubDate>Tue, 07 May 2019 22:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/azure-devops-python-wheels/</guid>
      <description>&lt;p&gt;Note: I now &lt;em&gt;highly&lt;/em&gt; recommend &lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;cibuildwheel&lt;/a&gt; instead of custom binary wheels.&#xA;See &lt;a href=&#34;https://scikit-hep.org/developer/gha_pure&#34;&gt;GHA Pure Python Wheels&lt;/a&gt; and &lt;a href=&#34;https://scikit-hep.org/developer/gha_wheels&#34;&gt;GHA Binary Wheels&lt;/a&gt; for modern methods to&#xA;produce wheels on GitHub Actions (directly applicable to Azure, as well, with&#xA;minor changes; cibuildwheel works on all most major CI providers).&#xA;&lt;a href=&#34;https://iscinumpy.dev/tags/cibuildwheel/&#34;&gt;See my new posts on cibuildwheel!&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the third post in &lt;a href=&#34;https://iscinumpy.dev/categories/azure-devops&#34;&gt;a series&lt;/a&gt; about Azure&#xA;DevOps. This one is about making Python wheels. If you &lt;a href=&#34;https://pythonwheels.com&#34;&gt;want to play&#xA;nice&lt;/a&gt; with Python users, or you have a complex build, this will&#xA;make your package far more accessible to users. They are faster to install and&#xA;to use and more secure. We will quickly cover making universal wheels, then we&#xA;will move on to fully compiled binaries, including C++14, manylinux2010, and&#xA;other hot topics. This series was developed to update the testing and releasing&#xA;of Python packages for &lt;a href=&#34;http://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt;. The results of this tutorial can be seen&#xA;in the &lt;a href=&#34;https://github.com/scikit-hep/boost-histogram&#34;&gt;boost-histogram&lt;/a&gt; repository, under the &lt;code&gt;.ci&lt;/code&gt; folder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure DevOps: Releases</title>
      <link>https://iscinumpy.dev/post/azure-devops-releases/</link>
      <pubDate>Tue, 07 May 2019 21:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/azure-devops-releases/</guid>
      <description>&lt;p&gt;This is the second post in &lt;a href=&#34;https://iscinumpy.dev/categories/azure-devops&#34;&gt;a series&lt;/a&gt; about Azure&#xA;DevOps. This one is about release pipelines; if you use Azure to build packages&#xA;(like binaries, etc.), how do you push them to a final endpoint? In this&#xA;example, we will be building a simple pure Python package, and pushing the&#xA;result to Test-PyPI. You can adapt it to your situation, however. The&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/azure-devops-python-wheels&#34;&gt;third post&lt;/a&gt; will cover building Python&#xA;binaries. This series was developed to update the testing and releasing of&#xA;Python packages for &lt;a href=&#34;http://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt;. Several of the projects in SciKit-HEP are&#xA;using release pipelines, include &lt;a href=&#34;https://github.com/scikit-hep/boost-histogram&#34;&gt;boost-histogram&lt;/a&gt; and &lt;a href=&#34;https://github.com/scikit-hep/particle&#34;&gt;Particle&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Note: I now highly recommend GitHub Actions, which is almost &amp;ldquo;Azure 2.0&amp;rdquo;. You&#xA;can read my tutorials on GitHub Actions on the &lt;a href=&#34;https://scikit-hep.org/developer/gha_basic&#34;&gt;Scikit-HEP developer pages&lt;/a&gt;.&#xA;The release process, in particular, is simpler, and you still get the benefit of&#xA;artifacts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure DevOps: Introduction</title>
      <link>https://iscinumpy.dev/post/azure-devops-intro/</link>
      <pubDate>Tue, 07 May 2019 20:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/azure-devops-intro/</guid>
      <description>&lt;p&gt;Continuous Integration (CI) is fantastic for software development and&#xA;deployment. One of the newest entries into the CI market&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; is Microsoft&amp;rsquo;s&#xA;&lt;a href=&#34;https://azure.microsoft.com/en-us/services/devops/&#34;&gt;Azure DevOps&lt;/a&gt;. Their Open Source support is impressive; it is likely part of&#xA;the recent push&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; by Microsoft to be more Open Source friendly. Open Source&#xA;projects get 10 parallel builds, unlimited build minutes, 6 hour job timeouts,&#xA;and incredibly fast jobs on macOS, Linux, and Windows, all via a single&#xA;platform. Quite a few major projects&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; have been moving to Azure since the&#xA;initial release in December 2018. The configuration of DevOps is second only to&#xA;GitLab CI in ease of use and possibly the most expressive system available. The&#xA;multiple pipeline support also scales well to complicated procedures.&lt;/p&gt;&#xA;&lt;p&gt;This is the first in &lt;a href=&#34;https://iscinumpy.dev/categories/azure-devops&#34;&gt;a series&lt;/a&gt; of posts covering an&#xA;introduction to setting up projects in Azure DevOps, developed to update the&#xA;testing and releasing of Python packages for &lt;a href=&#34;http://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt;, a project for a&#xA;coherent High Energy Physics Python analysis toolset. The&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/azure-devops-releases&#34;&gt;second post&lt;/a&gt; covers release pipelines, and the&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/azure-devops-python-wheels&#34;&gt;third&lt;/a&gt; covers building binary Python packages&#xA;using DevOps.&lt;/p&gt;&#xA;&lt;p&gt;Note: I now highly recommend GitHub Actions, which is almost &amp;ldquo;Azure 2.0&amp;rdquo;, if you&#xA;are interested in setting up CI. The language is very similar, although&#xA;simplified, with some non-backward compatible bugfixes (such as multiline&#xA;expressions will error if any line files, instead of just on the last line in&#xA;Azure). You can read my tutorials on GitHub Actions on the &lt;a href=&#34;https://scikit-hep.org/developer/gha_basic&#34;&gt;Scikit-HEP developer&#xA;pages&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A hybrid deep learning approach to vertexing</title>
      <link>https://iscinumpy.dev/page/presentations/2019-04-17-iml/</link>
      <pubDate>Wed, 17 Apr 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-04-17-iml/</guid>
      <description></description>
    </item>
    <item>
      <title>boost-histogram and hist</title>
      <link>https://iscinumpy.dev/page/presentations/2019-04-15-iris/</link>
      <pubDate>Mon, 15 Apr 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-04-15-iris/</guid>
      <description></description>
    </item>
    <item>
      <title>A hybrid deep learning approach to vertexing</title>
      <link>https://iscinumpy.dev/page/presentations/2019-04-03-ctd/</link>
      <pubDate>Wed, 03 Apr 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-04-03-ctd/</guid>
      <description></description>
    </item>
    <item>
      <title>Conda: a complete reproducible ROOT environment in under 5 minutes</title>
      <link>https://iscinumpy.dev/page/presentations/2019-03-21-how-conda/</link>
      <pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-03-21-how-conda/</guid>
      <description></description>
    </item>
    <item>
      <title>Machine Learning for the Primary Vertex reconstruction</title>
      <link>https://iscinumpy.dev/page/presentations/2019-03-20-how-ml/</link>
      <pubDate>Wed, 20 Mar 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-03-20-how-ml/</guid>
      <description></description>
    </item>
    <item>
      <title>A hybrid deep learning approach to vertexing</title>
      <link>https://iscinumpy.dev/page/presentations/2019-03-11-acat/</link>
      <pubDate>Mon, 11 Mar 2019 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2019-03-11-acat/</guid>
      <description></description>
    </item>
    <item>
      <title>ROOT on Conda Forge</title>
      <link>https://iscinumpy.dev/post/root-conda/</link>
      <pubDate>Wed, 13 Feb 2019 10:18:37 +0100</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/root-conda/</guid>
      <description>&lt;p&gt;For High Energy Physics, the go-to framework for big data analysis has been&#xA;CERN&amp;rsquo;s &lt;a href=&#34;https://root.cern&#34;&gt;ROOT&lt;/a&gt; framework. ROOT is a massive C++ library that even predates the&#xA;STL in some areas. It is&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;also&lt;/em&gt; a JIT C++ interpreter called Cling, probably&#xA;the best in the business. If you have&#xA;&lt;a href=&#34;https://andersy005.github.io/blog/2018/01/20/play-interactively-with-cpp-getting-started-with-xeus-cling/&#34;&gt;heard of&lt;/a&gt;&#xA;the &lt;a href=&#34;https://github.com/QuantStack/xeus-cling&#34;&gt;Xeus&lt;/a&gt; C++ Kernel for Jupyter, that is built on top of Cling. ROOT has&#xA;everything a HEP physicist could want: math, plotting, histograms, tuple and&#xA;tree structures, a very powerful file format for IO, machine learning, Python&#xA;bindings, and more. It also does things like dictionary generation and arbitrary&#xA;class serialization (other large frameworks like &lt;a href=&#34;https://qt.io&#34;&gt;Qt&lt;/a&gt; have similar generation&#xA;tools).&lt;/p&gt;&#xA;&lt;p&gt;You may already be guessing one of the most common problems for ROOT. It is huge&#xA;and difficult to install &amp;ndash; if you build from source, that&amp;rsquo;s a several hour task&#xA;on a single core. It has gotten &lt;a href=&#34;https://root.cern/install/&#34;&gt;much better&lt;/a&gt; in the&#xA;last 6 years, and there are several places you can find ROOT, but there are&#xA;still areas where it is challenging. This is especially true for Python; ROOT is&#xA;linked to your distro&amp;rsquo;s Python (both python2 and python3 if your distro supports&#xA;it, as of ROOT 6.22); but the common rule for using Python is &amp;ldquo;don&amp;rsquo;t touch your&#xA;system Python&amp;rdquo; - so modern Python users should be in a virtual environment, and&#xA;for that ROOT requires the system site-packages option be enabled, which is not&#xA;always ideal. And, if you use the &lt;a href=&#34;https://www.anaconda.com/distribution/&#34;&gt;Anaconda Python distribution&lt;/a&gt;,&#xA;which is the most popular scientific distribution of Python and massively&#xA;successful for ML frameworks, the general rule even for people who build ROOT&#xA;themselves has been: don&amp;rsquo;t. But now, you can get a fully featured ROOT binary&#xA;package for macOS or Linux, Python 2.7, 3.6, 3.7, or 3.8 from &lt;a href=&#34;https://conda-forge.org&#34;&gt;Conda-Forge&lt;/a&gt;,&#xA;the most popular Anaconda community channel! Many more HEP recipes have now been&#xA;added to Conda-Forge, as well! ROOT now also provides a &lt;a href=&#34;https://root.cern/new-docker-images/&#34;&gt;conda docker image&lt;/a&gt;,&#xA;too!&lt;/p&gt;</description>
    </item>
    <item>
      <title>ROOT Install Options</title>
      <link>https://iscinumpy.dev/post/root-install/</link>
      <pubDate>Mon, 04 Feb 2019 10:44:37 +0100</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/root-install/</guid>
      <description>&lt;p&gt;For particle physicists, ROOT is one of the most important toolkits around. It&#xA;is a huge suite of tools that predates the C++ standard library, and has almost&#xA;anything a particle physicist could want. It has driven developments in other&#xA;areas too. ROOT&amp;rsquo;s current C++ interpreter, CLING, is the most powerful C++&#xA;interpreter available and is used by the Xeus project for Jupyter. The Python&#xA;work has helped PyPy, with CPPYY also coming from ROOT. However, due to the&#xA;size, complexity, and age of some parts of ROOT, it can be a bit challenging to&#xA;install; and it is even more challenging when you want it to talk to Python. I&#xA;would like to point to the brand-new Conda-Forge ROOT package for Linux and&#xA;macOS, and point out a few other options for macOS installs. Note for Windows&#xA;users: Due to the fact that ROOT expects the type &lt;code&gt;long&lt;/code&gt; to match the system&#xA;pointer size, 64-bit Windows cannot be supported for quite some time. While you&#xA;can use it in 32 bit form, this is generally impossible to connect to Python,&#xA;which usually will be a 64-bit build.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Illustrations and videos</title>
      <link>https://iscinumpy.dev/page/illustrations/</link>
      <pubDate>Mon, 10 Dec 2018 11:32:00 +0100</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/illustrations/</guid>
      <description>&lt;p&gt;These are some illustrations and videos that I have made over the years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Histogram Speeds in Python</title>
      <link>https://iscinumpy.dev/post/histogram-speeds-in-python/</link>
      <pubDate>Thu, 01 Nov 2018 14:58:09 +0100</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/histogram-speeds-in-python/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s compare several ways of making Histograms. I&amp;rsquo;m going to assume you would&#xA;like to end up with a nice OO histogram interface, so all the 2D methods will&#xA;fill a Physt histogram. We will be using a 2 x 1,000,000 element array and&#xA;filling a 2D histogram, or 10,000,000 elemends in a 1D histogram. Binnings are&#xA;regular.&lt;/p&gt;&#xA;&lt;h4 id=&#34;1d-10000000-item-histogram&#34;&gt;1D 10,000,000 item histogram&lt;/h4&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Example&lt;/th&gt;&#xA;          &lt;th&gt;KNL&lt;/th&gt;&#xA;          &lt;th&gt;MBP&lt;/th&gt;&#xA;          &lt;th&gt;X24&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NumPy: histogram&lt;/td&gt;&#xA;          &lt;td&gt;704 ms&lt;/td&gt;&#xA;          &lt;td&gt;147 ms&lt;/td&gt;&#xA;          &lt;td&gt;114 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NumPy: bincount&lt;/td&gt;&#xA;          &lt;td&gt;432 ms&lt;/td&gt;&#xA;          &lt;td&gt;110 ms&lt;/td&gt;&#xA;          &lt;td&gt;117 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;fast-histogram&lt;/td&gt;&#xA;          &lt;td&gt;337 ms&lt;/td&gt;&#xA;          &lt;td&gt;45.9 ms&lt;/td&gt;&#xA;          &lt;td&gt;45.7 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Numba&lt;/td&gt;&#xA;          &lt;td&gt;312 ms&lt;/td&gt;&#xA;          &lt;td&gt;58.8 ms&lt;/td&gt;&#xA;          &lt;td&gt;60.7 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h4 id=&#34;2d-1000000-item-histogram&#34;&gt;2D 1,000,000 item histogram&lt;/h4&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Example&lt;/th&gt;&#xA;          &lt;th&gt;KNL&lt;/th&gt;&#xA;          &lt;th&gt;MBP&lt;/th&gt;&#xA;          &lt;th&gt;X24&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Physt&lt;/td&gt;&#xA;          &lt;td&gt;1.21 s&lt;/td&gt;&#xA;          &lt;td&gt;293 ms&lt;/td&gt;&#xA;          &lt;td&gt;246 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NumPy: histogram2d&lt;/td&gt;&#xA;          &lt;td&gt;456 ms&lt;/td&gt;&#xA;          &lt;td&gt;114 ms&lt;/td&gt;&#xA;          &lt;td&gt;88.3 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NumPy: add.at&lt;/td&gt;&#xA;          &lt;td&gt;247 ms&lt;/td&gt;&#xA;          &lt;td&gt;62.7 ms&lt;/td&gt;&#xA;          &lt;td&gt;49.7 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NumPy: bincount&lt;/td&gt;&#xA;          &lt;td&gt;81.7 ms&lt;/td&gt;&#xA;          &lt;td&gt;23.3 ms&lt;/td&gt;&#xA;          &lt;td&gt;20.3 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;fast-histogram&lt;/td&gt;&#xA;          &lt;td&gt;53.7 ms&lt;/td&gt;&#xA;          &lt;td&gt;10.4 ms&lt;/td&gt;&#xA;          &lt;td&gt;7.31 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;fast-hist threaded 0.5&lt;/td&gt;&#xA;          &lt;td&gt;(6) 62.5 ms&lt;/td&gt;&#xA;          &lt;td&gt;9.78 ms&lt;/td&gt;&#xA;          &lt;td&gt;(6) 15.4 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;fast-hist threaded (m)&lt;/td&gt;&#xA;          &lt;td&gt;62.3 ms&lt;/td&gt;&#xA;          &lt;td&gt;4.89 ms&lt;/td&gt;&#xA;          &lt;td&gt;3.71 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Numba&lt;/td&gt;&#xA;          &lt;td&gt;41.8 ms&lt;/td&gt;&#xA;          &lt;td&gt;10.2 ms&lt;/td&gt;&#xA;          &lt;td&gt;9.73 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Numba threaded&lt;/td&gt;&#xA;          &lt;td&gt;(6) 49.2 ms&lt;/td&gt;&#xA;          &lt;td&gt;4.23 ms&lt;/td&gt;&#xA;          &lt;td&gt;(6) 4.12 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Cython&lt;/td&gt;&#xA;          &lt;td&gt;112 ms&lt;/td&gt;&#xA;          &lt;td&gt;12.2 ms&lt;/td&gt;&#xA;          &lt;td&gt;11.2 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Cython threaded&lt;/td&gt;&#xA;          &lt;td&gt;(6) 128 ms&lt;/td&gt;&#xA;          &lt;td&gt;5.68 ms&lt;/td&gt;&#xA;          &lt;td&gt;(8) 4.89 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;pybind11 sequential&lt;/td&gt;&#xA;          &lt;td&gt;93.9 ms&lt;/td&gt;&#xA;          &lt;td&gt;9.20 ms&lt;/td&gt;&#xA;          &lt;td&gt;17.8 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;pybind11 OpenMP atomic&lt;/td&gt;&#xA;          &lt;td&gt;4.06 ms&lt;/td&gt;&#xA;          &lt;td&gt;6.87 ms&lt;/td&gt;&#xA;          &lt;td&gt;1.91 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;pybind11 C++11 atomic&lt;/td&gt;&#xA;          &lt;td&gt;(32) 10.7 ms&lt;/td&gt;&#xA;          &lt;td&gt;7.08 ms&lt;/td&gt;&#xA;          &lt;td&gt;(48) 2.65 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;pybind11 C++11 merge&lt;/td&gt;&#xA;          &lt;td&gt;(32) 23.0 ms&lt;/td&gt;&#xA;          &lt;td&gt;6.03 ms&lt;/td&gt;&#xA;          &lt;td&gt;(48) 4.79 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;pybind11 OpenMP merge&lt;/td&gt;&#xA;          &lt;td&gt;8.74 ms&lt;/td&gt;&#xA;          &lt;td&gt;5.04 ms&lt;/td&gt;&#xA;          &lt;td&gt;1.79 ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>PV finding with CNNs</title>
      <link>https://iscinumpy.dev/page/presentations/2018-09-26-lhcb/</link>
      <pubDate>Wed, 26 Sep 2018 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2018-09-26-lhcb/</guid>
      <description></description>
    </item>
    <item>
      <title>iminuit: interactive python wrapper around MINUIT2</title>
      <link>https://iscinumpy.dev/page/presentations/2018-09-12-root/</link>
      <pubDate>Wed, 12 Sep 2018 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2018-09-12-root/</guid>
      <description></description>
    </item>
    <item>
      <title>A Python upgrade to the GooFit package for parallel fitting</title>
      <link>https://iscinumpy.dev/page/presentations/2018-07-09-chep/</link>
      <pubDate>Mon, 09 Jul 2018 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2018-07-09-chep/</guid>
      <description></description>
    </item>
    <item>
      <title>Binding Minuit2</title>
      <link>https://iscinumpy.dev/post/binding-minuit2/</link>
      <pubDate>Sat, 07 Jul 2018 21:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/binding-minuit2/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s try a non-trivial example of a binding: Minuit2 (6.14.0 standalone&#xA;edition).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tools to Bind to Python</title>
      <link>https://iscinumpy.dev/post/tools-to-bind-to-python/</link>
      <pubDate>Sat, 07 Jul 2018 21:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/tools-to-bind-to-python/</guid>
      <description>&lt;p&gt;This was originally given as a PyHEP 2018 talk, It is designed to be&#xA;interactive, and can be run in SWAN if you have a CERN account. If you want to&#xA;run it manually, just download the repository:&#xA;&lt;a href=&#34;https://github.com/henryiii/pybindings_cc&#34;&gt;github.com/henryiii/pybindings_cc&lt;/a&gt;.&#xA;It is easy to run in Anaconda.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tools to bind to Python</title>
      <link>https://iscinumpy.dev/page/presentations/2018-07-07-pyhep2018/</link>
      <pubDate>Sat, 07 Jul 2018 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2018-07-07-pyhep2018/</guid>
      <description></description>
    </item>
    <item>
      <title>Announcing CLI11 1.6</title>
      <link>https://iscinumpy.dev/post/announcing-cli11-16/</link>
      <pubDate>Wed, 27 Jun 2018 14:44:40 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-cli11-16/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in&#xA;C++11, has &lt;a href=&#34;https://github.com/CLIUtils/CLI11/releases&#34;&gt;been updated to 1.6&lt;/a&gt;, the largest update ever. CLI11&#xA;output is more customizable than ever, and has a better functionality separation&#xA;under the hood.&lt;/p&gt;&#xA;&lt;p&gt;CLI11 has had the formatting system completely redesigned, with minor or&#xA;complete customization of the output possible. Configuration files reading and&#xA;writing also can be configured; a new example with json instead of ini&#xA;formatting is included. Validators (finally) have custom help output, as well.&#xA;Many odd corner cases have been made possible, such as interleaving options.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CMake 3.11</title>
      <link>https://iscinumpy.dev/post/cmake-311/</link>
      <pubDate>Mon, 02 Apr 2018 11:16:57 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cmake-311/</guid>
      <description>&lt;p&gt;CMake 3.11 was just released; this is particularly exciting release for CMake.&#xA;I&amp;rsquo;d like to give a quick and friendly introduction to the new features that&#xA;might make the largest difference for CMake users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing GooFit 2.1</title>
      <link>https://iscinumpy.dev/post/announcing-goofit-21/</link>
      <pubDate>Thu, 07 Dec 2017 03:20:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-goofit-21/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://iscinumpy.dev/images/post/2017/GooFitLogo21small.png&#34; alt=&#34;GooFit logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;GooFit 2.1 introduces the full-featured Python bindings to GooFit. These&#xA;bindings mimic the C++ usage of GooFit, including bindings for all PDFs, and&#xA;also provide NumPy-centric conversions, live Jupyter notebook printing, pip&#xA;install, and more. Most of the examples in C++ are provided in Python form, as&#xA;well.&lt;/p&gt;&#xA;&lt;p&gt;Several other API changes were made. Observables are now distinguished from&#xA;Variables and provided as a separate class. Both these classes are now passed&#xA;around by copy everywhere.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; The three and four body amplitude classes have&#xA;been refactored and simplified. OpenMP is now supported via homebrew on macOS;&#xA;GooFit is one of the only packages that currently can build with OpenMP on the&#xA;default macOS compiler. Eigen is now available, and &lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt; has been updated to&#xA;version 1.3.&lt;/p&gt;&#xA;&lt;p&gt;GooFit 2.1 will receive continuing support while development on GooFit 2.2&#xA;presses on with a new indexing scheme for PDFs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Software</title>
      <link>https://iscinumpy.dev/page/software/</link>
      <pubDate>Wed, 06 Dec 2017 13:17:33 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/software/</guid>
      <description>&lt;h2 id=&#34;my-projects&#34;&gt;My projects&lt;/h2&gt;&#xA;&lt;p&gt;Besides being an admin at &lt;a href=&#34;https://scikit-hep.org&#34;&gt;Scikit-HEP&lt;/a&gt;, and active in conda-forge and&#xA;homebrew, these are some of the projects I work on directly:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pybind11.readthedocs.io&#34;&gt;pybind11&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Binding C++11+ and Python beautifully.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cibuildwheel.readthedocs.io&#34;&gt;cibuildwheel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Create Python wheels beautifully.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/scikit-hep/boost-histogram&#34;&gt;boost-histogram&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Histograms in Python based on Boost.Histogram for C++14.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A powerful but easy to use C++11 command line interface parser.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/scikit-hep/particle&#34;&gt;Particle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Particle descriptions in Python.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/scikit-hep/decaylanguage&#34;&gt;DecayLanguage&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Decay chains in Python.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plumbum.readthedocs.io/en/latest&#34;&gt;Plumbum&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A shell tools library for Python, with color, ssh, paths, cli, and more.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GooFit/GooFit&#34;&gt;GooFit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;An OpenMP/CUDA powered fitting library.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iris-hep/jekyll-indico&#34;&gt;Jekyll-Indico&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A plugin to collect Indico meetings for Jekyll, written in Ruby.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/conda-forge/root-feedstock&#34;&gt;Conda-Forge ROOT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A project that did the impossible: make ROOT a conda package!&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/utgwkk/pytest-github-actions-annotate-failures&#34;&gt;pytest-github-actions-annotate-failures&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A utility to convert pytest errors to annotations in GitHub Actions.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Classic or smaller historic projects:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Include What You Use</title>
      <link>https://iscinumpy.dev/post/include-what-you-use/</link>
      <pubDate>Tue, 05 Dec 2017 14:06:35 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/include-what-you-use/</guid>
      <description>&lt;p&gt;Include-what-you-use is a promising little tool for cleaning up a codebase. It&#xA;didn&amp;rsquo;t end up working for the use I had for it, but it still could be useful.&#xA;Here is a quick guideline on installing it on macOS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing CLI11 and Boost PO</title>
      <link>https://iscinumpy.dev/post/comparing-cli11-and-boostpo/</link>
      <pubDate>Sun, 03 Dec 2017 16:31:50 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/comparing-cli11-and-boostpo/</guid>
      <description>&lt;p&gt;CLI11 started years ago as a set of tools built on Boost Program Options (PO),&#xA;and has since matured into the powerful, easy-to-use stand-alone library it is&#xA;available today. If you would like to see the original inspiration for CLI11,&#xA;look at&#xA;&lt;a href=&#34;https://github.com/CLIUtils/CLI11/blob/v0.1/include/Program.hpp&#34;&gt;Program.hpp in CLI11 0.1&lt;/a&gt;.&#xA;The rest of the post will focus on a comparison between making a CLI app in the&#xA;two libraries. I am going to assume that you are preparing fairly basic but&#xA;non-trivial programs in the following comparison.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; CLI11 is more concise, and provides more control with better defaults&#xA;in many cases, but was inspired by Boost PO.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing CLI11 1.3</title>
      <link>https://iscinumpy.dev/post/announcing-cli11-13/</link>
      <pubDate>Fri, 01 Dec 2017 09:03:50 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-cli11-13/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in&#xA;C++11, has &lt;a href=&#34;https://github.com/CLIUtils/CLI11/releases&#34;&gt;been updated to 1.3&lt;/a&gt;, the largest update ever. CLI11 is&#xA;more powerful than ever, and has simpler and more consistent parsing under the&#xA;hood.&lt;/p&gt;&#xA;&lt;p&gt;This version focused on refactoring several key systems to ensure correct&#xA;behavior in the interaction of different settings. Most caveats about features&#xA;only working on the main App have been addressed, and extra arguments have been&#xA;reworked. Inheritance of defaults makes configuring CLI11 much easier without&#xA;having to subclass. Policies add new ways to handle multiple arguments to match&#xA;your favorite CLI programs. Error messages and help messages are better and more&#xA;flexible. Several bugs and odd behaviors in the parser have been fixed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Watching GitHub Releases</title>
      <link>https://iscinumpy.dev/post/watching-github-releases/</link>
      <pubDate>Tue, 28 Nov 2017 16:54:14 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/watching-github-releases/</guid>
      <description>&lt;p&gt;If you use an RSS feed reader, you can watch all your favorite GitHub&#xA;repositories for new releases! Just follow:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/USER/REPO/releases.atom&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can see a long discussion with other options&#xA;&lt;a href=&#34;https://github.com/isaacs/github/issues/410#issuecomment-163761492&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenMP on High Sierra</title>
      <link>https://iscinumpy.dev/post/omp-on-high-sierra/</link>
      <pubDate>Mon, 13 Nov 2017 15:41:35 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/omp-on-high-sierra/</guid>
      <description>&lt;p&gt;Building OpenMP code is actually possible using Apple Clang that comes default&#xA;with macOS&amp;rsquo;s Xcode! Although Apple does not build the OpenMP library, the&#xA;compiler still supports it. In this post, I demonstrate the procedure necessary&#xA;to include OpenMP in your build, both with the new support in CMake 3.12, as&#xA;well as how it would be done without it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing</title>
      <link>https://iscinumpy.dev/page/writing/</link>
      <pubDate>Fri, 10 Nov 2017 22:08:21 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/writing/</guid>
      <description>&lt;h2 id=&#34;gitjupyter-books&#34;&gt;Git/Jupyter Books&lt;/h2&gt;&#xA;&lt;p&gt;Here is a list of GitBooks that I have either written or helped write:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://henryiii.github.io/level-up-your-python&#34;&gt;Level Up Your Python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Intermediate to advanced Python, for a Princeton Research Computing Workshop.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cliutils.gitlab.io/modern-cmake/&#34;&gt;Modern CMake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A fantastic, up-to-date resource for CMake the way it should be.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/henryiii/compclass&#34;&gt;CompClass&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Computational Science in Python course given at the University of Cincinnati, Fall 2018.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://lhcb.github.io/developkit-lessons/first-development-steps/&#34;&gt;DevelopKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Developing software in LHCb&amp;rsquo;s Run 3.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cliutils.gitlab.io/plugin-term&#34;&gt;GitBook Plugin - Term&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A powerful terminal formatting plugin (used in other GitBooks).&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cliutils.github.io/CLI11/book/&#34;&gt;CLI11 Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Command line parsing made beautiful.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://goofit.gitlab.io/root-tutorial&#34;&gt;UC ROOT Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Basic ROOT for HEP, conversion from old material.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://goofit.gitlab.io/Goo2Torial&#34;&gt;GooFit 2Torial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Using GooFit, writing GooFit.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;tutorials-and-workshops&#34;&gt;Tutorials and workshops&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://hsf-training.github.io/hsf-training-cmake-webpage/&#34;&gt;HSF Modern CMake workshop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Workshop on CMake for ATLAS students at LBNL.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/henryiii/python-performance-minicourse&#34;&gt;Python CPU minicourse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Minicourse for high-performance CPU programming.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/henryiii/pygpu-minicourse&#34;&gt;Python GPU minicourse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Minicourse for GPU programming.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/henryiii/pandas-notebook&#34;&gt;Pandas demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Demo of Pandas.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;websites&#34;&gt;Websites&lt;/h2&gt;&#xA;&lt;p&gt;These are websites I have either created or worked on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About the author</title>
      <link>https://iscinumpy.dev/page/about/</link>
      <pubDate>Tue, 10 Oct 2017 14:17:15 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/about/</guid>
      <description>&lt;p&gt;Henry Schreiner is a Computational Physicist / Research Software Engineer in&#xA;High Energy Physics at Princeton University. He specializes in the interface&#xA;between high-performance compiled codes and interactive computation in Python,&#xA;in software distribution, and in interface design. He has previously worked on&#xA;computational cosmic-ray tomography for archaeology and high performance GPU&#xA;model fitting. He is currently a member of the IRIS-HEP project, developing&#xA;tools for the next era of the Large Hadron Collider (LHC).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goofit 2.0</title>
      <link>https://iscinumpy.dev/page/presentations/2017-08-22-acat2017/</link>
      <pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2017-08-22-acat2017/</guid>
      <description></description>
    </item>
    <item>
      <title>Recent developments in GooFit</title>
      <link>https://iscinumpy.dev/page/presentations/2018-02-12-diana-goofit/</link>
      <pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2018-02-12-diana-goofit/</guid>
      <description></description>
    </item>
    <item>
      <title>GPUs in LHCb for Analysis</title>
      <link>https://iscinumpy.dev/page/presentations/2017-08-03-dpf2017/</link>
      <pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2017-08-03-dpf2017/</guid>
      <description></description>
    </item>
    <item>
      <title>Modernizing GooFit: A Case Study</title>
      <link>https://iscinumpy.dev/page/presentations/2017-07-12-pearc17/</link>
      <pubDate>Wed, 12 Jul 2017 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2017-07-12-pearc17/</guid>
      <description></description>
    </item>
    <item>
      <title>Announcing GooFit 2.0</title>
      <link>https://iscinumpy.dev/post/announcing-goofit-20/</link>
      <pubDate>Thu, 08 Jun 2017 17:54:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-goofit-20/</guid>
      <description>&lt;p&gt;The next version of the premier CUDA/OpenMP fitting program for HEP analysis,&#xA;GooFit 2.0, &lt;a href=&#34;GooFit&#34;&gt;has been released&lt;/a&gt;. GooFit is now easy to build on a wide&#xA;variety of Unix systems, and supports debuggers and IDEs. GooFit is faster, has&#xA;unit tests, and working examples. More PDFs and examples have been added, as&#xA;well as newly released example datasets that are downloaded automatically.&#xA;GooFit now has built in support for MPI, and can use that to deploy to multiple&#xA;graphics cards on the same machine. A new command line parser (&lt;a href=&#34;https://github.com/CLIUtils/CLI11&#34;&gt;CLI11&lt;/a&gt;) and&#xA;drastically improved logging and errors have made code easier to write and&#xA;debug. Usage of GooFit specific terminology is now reduced, using standard&#xA;Thrust or CUDA terms when possible, lowering the barrier for new developers. A&#xA;new Python script has been added to assist users converting from pre 2.0 code.&lt;/p&gt;&#xA;&lt;p&gt;The file structure of GooFit and the build system have been completely revamped.&#xA;The fake &lt;code&gt;nvcc&lt;/code&gt; features have been removed, as have the &lt;code&gt;rootstuff&lt;/code&gt; copies of&#xA;ROOT classes. PDFs are now organized by type and compile and link separately.&#xA;Multiple PDF caching support has improved. The build system now uses CMake and&#xA;manages external libraries.&lt;/p&gt;&#xA;&lt;p&gt;A new feature of the CMake build system is GooFit Packages, which are complete&#xA;packages that can be added to GooFit and built, allowing analysis code to live&#xA;in a separate location from GooFit, rather than the old method of simply forking&#xA;GooFit and adding your analysis manually. A GooFit Package can be made into an&#xA;example trivially. See &lt;a href=&#34;https://github.com/maddocbf/goofit_KKPiPi&#34;&gt;this package&lt;/a&gt;&#xA;for an example.&lt;/p&gt;&#xA;&lt;p&gt;GooFit 2.0 will receive continuing support while development on GooFit 2.1&#xA;presses on.&lt;/p&gt;&#xA;&lt;h4 id=&#34;links&#34;&gt;Links:&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/GooFit/GooFit&#34;&gt;GooFit on GitHub&lt;/a&gt; • &lt;a href=&#34;https://GooFit.github.io&#34;&gt;GooFit webpage&lt;/a&gt; • &lt;a href=&#34;https://GooFit.github.io/GooFit&#34;&gt;API documentation&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing CLI11 Version 1.0</title>
      <link>https://iscinumpy.dev/post/announcing-cli11-10/</link>
      <pubDate>Thu, 01 Jun 2017 14:05:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/announcing-cli11-10/</guid>
      <description>&lt;p&gt;CLI11, a powerful library for writing command line interfaces in C++11, has just&#xA;been released. There are no requirements beyond C++11 support (and even&#xA;&lt;code&gt;&amp;lt;regex&amp;gt;&lt;/code&gt; support not required). It works on Mac, Linux, and Windows, and has&#xA;100% test coverage on all three systems. You can simply drop in a single header&#xA;file (&lt;code&gt;CLI11.hpp&lt;/code&gt; available in &lt;a href=&#34;https://github.com/CLIUtils/CLI11/releases&#34;&gt;releases&lt;/a&gt;) to use CLI11 in your own application.&#xA;Other ways to integrate it into a build system are listed in the &lt;a href=&#34;https://github.com/CLIUtils/CLI11/blob/master/README.md&#34;&gt;README&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The library was inspired the Python libraries &lt;a href=&#34;http://plumbum.readthedocs.io/en/latest/&#34;&gt;Plumbum&lt;/a&gt; and &lt;a href=&#34;http://click.pocoo.org/5/&#34;&gt;Click&lt;/a&gt;, and&#xA;incorporates many of their user friendly features. The library is extensively&#xA;documented, with a &lt;a href=&#34;https://github.com/CLIUtils/CLI11/blob/master/README.md&#34;&gt;friendly introduction&lt;/a&gt;, a tutorial filled (in&#xA;progress) &lt;a href=&#34;https://cliutils.gitlab.io/CLI11&#34;&gt;GitBook&lt;/a&gt;, and more technical &lt;a href=&#34;https://cliutils.github.io/CLI11&#34;&gt;API docs&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CLI11</title>
      <link>https://iscinumpy.dev/page/presentations/2017-04-24-diana-cli11/</link>
      <pubDate>Mon, 24 Apr 2017 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/presentations/2017-04-24-diana-cli11/</guid>
      <description></description>
    </item>
    <item>
      <title>Perfect forwarding for methods</title>
      <link>https://iscinumpy.dev/post/perfect-forwarding-for-methods/</link>
      <pubDate>Fri, 17 Mar 2017 10:43:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/perfect-forwarding-for-methods/</guid>
      <description>&lt;p&gt;I often see perfect forwarding listed for constructor arguments, but not usually&#xA;for functions with a return or methods. Here is my solution for an method method&#xA;of class &lt;code&gt;Cls&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Cls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result_of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;decltype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Cls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Cls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;forward&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)...);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is useful if you want to call protected classes from a “helper” friend&#xA;class, for example, to expose them to tests without having to require&#xA;GoogleTest/GoogleMock to be available for regular users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up SSH forwarding</title>
      <link>https://iscinumpy.dev/post/setting-up-ssh-forwarding/</link>
      <pubDate>Wed, 01 Mar 2017 10:49:33 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/setting-up-ssh-forwarding/</guid>
      <description>&lt;p&gt;SSH forwarding can improve your security along with reducing the need to type&#xA;passwords and have multiple keys linked to your GitHub/GitLab instance. The&#xA;procedure is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lua Environment Modules</title>
      <link>https://iscinumpy.dev/post/lua-environment-modules/</link>
      <pubDate>Wed, 11 Jan 2017 06:08:00 -0800</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/lua-environment-modules/</guid>
      <description>&lt;p&gt;This is a guide to setting up Lmod (lua environment modules) on a CentOS system.&#xA;I&amp;rsquo;ve used a similar procedure to set them up on a Mac, as well, so this is still&#xA;a useful guide to the workings of Lmod if you use a different system; mostly&#xA;paths will change. On a Mac, you&amp;rsquo;ll want to install &lt;code&gt;Lmod&lt;/code&gt; from the &lt;code&gt;science&lt;/code&gt;&#xA;tap in &lt;code&gt;brew&lt;/code&gt;. There are several good pages covering environment modules (TCL&#xA;version), but not many that use the newer Lua syntax. This document aims to fill&#xA;that roll.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3 upgrade</title>
      <link>https://iscinumpy.dev/post/python-3-upgrade/</link>
      <pubDate>Wed, 12 Oct 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/python-3-upgrade/</guid>
      <description>&lt;p&gt;About ten years ago, Guido Van Rossum, the Python author and Benevolent Dictator&#xA;for Life (BDFL), along with the Python community, decided to make several&#xA;concurrent backward incompatible changes to Python 2.5 and release a new&#xA;version, Python 3.0.&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;17</title>
      <link>https://iscinumpy.dev/post/cpp-17/</link>
      <pubDate>Sat, 10 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cpp-17/</guid>
      <description>&lt;p&gt;The every-three-year cycle has changed the development of C++; we are now&#xA;getting consistent releases somewhere in-between the major and minor releases of&#xA;old. The 2017 release may be called minor by some, with a huge portion of the&#xA;planned improvements being pushed back another 3-6 years, but there were several&#xA;substantial changes in useful areas; it is much more impactful than C++14, for&#xA;example. This almost feels like a lead-in release to C++20.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;std::variant&lt;/code&gt;, &lt;code&gt;std::optional&lt;/code&gt;, and &lt;code&gt;std::any&lt;/code&gt; additions to the standard&#xA;library are huge, and can restructure the way you program (and are available for&#xA;older C++ releases through Boost and other libraries).&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;14</title>
      <link>https://iscinumpy.dev/post/cpp-14/</link>
      <pubDate>Fri, 09 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cpp-14/</guid>
      <description>&lt;p&gt;Unlike C++11, this is a minor release, focused mostly on improvements on top of&#xA;C++11 changes, with very little that one could call &amp;ldquo;new&amp;rdquo;. C++14 feels a little&#xA;more natural than C++11 by expanding the usage of features and implementing&#xA;common sense additions that were missed in the original C++11 release. There&#xA;were also quite a few bug fixes; several of these were backported into C++11&#xA;mode in compilers.&lt;/p&gt;&#xA;&lt;p&gt;Also, while C++11 is always available in ROOT 6, C++14 requires a flag and&#xA;compatible compiler, so C++14 features are often unavailable. The Conda-Forge&#xA;ROOT package has C++17 enabled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;11</title>
      <link>https://iscinumpy.dev/post/cpp-11/</link>
      <pubDate>Thu, 08 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cpp-11/</guid>
      <description>&lt;p&gt;C++11 was the largest change ever made to C++; and due to the changed release&#xA;schedule, probably will remain the largest single change. It is a well thought&#xA;out, mostly backward-compatible change that can cause you to completely rethink&#xA;the way you write code in C++. It is best thought of as almost a new language, a&#xA;sort of (C++)++ language. There are too many changes to list here, and there are&#xA;excellent resources available, so this is meant to just give you a taste of some&#xA;of the most useful changes.&lt;/p&gt;&#xA;&lt;p&gt;Many of the features work best together, or are related. There already are great&#xA;resources for learning about C++11 (listed at the bottom of this lesson), and&#xA;C++11 is already in use in most software. Therefore, the remainder of this&#xA;lesson will cover a few of the common idioms in C++11 that a programmer&#xA;experienced with the older C++ might not immediately think of.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GoogleTest and CMake</title>
      <link>https://iscinumpy.dev/post/googletest-and-cmake/</link>
      <pubDate>Fri, 25 Mar 2016 16:12:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/googletest-and-cmake/</guid>
      <description>&lt;p&gt;This is a quick recipe for setting up CMake to use googletest in your projects.&#xA;First, make a &lt;code&gt;tests&lt;/code&gt; folder in the root of your project. Then, add&#xA;&lt;code&gt;add_subdirectory(tests)&lt;/code&gt; to your &lt;code&gt;CMakeLists.txt&lt;/code&gt;, after you&amp;rsquo;ve finished adding&#xA;the libraries in your project. Note that the way I&amp;rsquo;ve written this probably&#xA;requires CMake 3.4+.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A simple introduction to asyncio</title>
      <link>https://iscinumpy.dev/post/a-simple-introduction-to-asyncio/</link>
      <pubDate>Thu, 19 Nov 2015 09:46:00 -0800</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/a-simple-introduction-to-asyncio/</guid>
      <description>&lt;p&gt;This is a simple explanation of the &lt;code&gt;asyncio&lt;/code&gt; module and new supporting language&#xA;features in Python 3.5. Even though the new keywords &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt; are new&#xA;language constructs, they are mostly&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; useless without an event loop, and that&#xA;is supplied in the standard library as &lt;code&gt;asyncio&lt;/code&gt;. Also, you need awaitable&#xA;functions, which are only supplied by &lt;code&gt;asyncio&lt;/code&gt; (or in the growing set of async&#xA;libraries, like &lt;code&gt;asyncssh&lt;/code&gt;, &lt;code&gt;quamash&lt;/code&gt; etc.).&lt;/p&gt;</description>
    </item>
    <item>
      <title>A little example of how asyncio works</title>
      <link>https://iscinumpy.dev/post/a-little-example-of-how-asyncio-works/</link>
      <pubDate>Thu, 19 Nov 2015 09:43:00 -0800</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/a-little-example-of-how-asyncio-works/</guid>
      <description>&lt;p&gt;This is a simple example to show how Asyncio works without using Asyncio itself,&#xA;instead using a basic and poorly written event loop. This is only meant to give&#xA;a flavor of what Asyncio does behind the curtains. I&amp;rsquo;m avoiding most details of&#xA;the library design, like callbacks, just to keep this simple. Since this is&#xA;written as an illustration, rather than real code, I&amp;rsquo;m going to dispense with&#xA;trying to keep it 2.7 compatible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Feynman Diagrams in Tikz</title>
      <link>https://iscinumpy.dev/post/feynman-diagrams-in-tikz/</link>
      <pubDate>Fri, 30 Oct 2015 07:02:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/feynman-diagrams-in-tikz/</guid>
      <description>&lt;p&gt;There is a package for making Feynman diagrams in LaTeX. Unfortunately, it is&#xA;old and &lt;code&gt;dvi&lt;/code&gt; latex only. If you are using pdflatex or lualatex, as you should&#xA;be, it does not work. Even in regular LaTeX, it&amp;rsquo;s a bit of a pain. Why is there&#xA;not a new package for pdflatex? Turns out, you don&amp;rsquo;t need one. Due to the&#xA;powerful drawing library Tikz, you can create any diagram easily, and can&#xA;customize it completely. For example:&lt;/p&gt;&#xA;&lt;figure class=&#34;center&#34;&gt;&lt;img src=&#34;https://iscinumpy.dev/images/post/2015/fd_color.png&#34;&#xA;    alt=&#34;Example diagram&#34; width=&#34;50%&#34;&gt;&#xA;&lt;/figure&gt;</description>
    </item>
    <item>
      <title>Including CRY cosmic ray generator in CMake</title>
      <link>https://iscinumpy.dev/post/cry-cosmic-ray-generator-in-cmake/</link>
      <pubDate>Mon, 19 Oct 2015 09:07:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/cry-cosmic-ray-generator-in-cmake/</guid>
      <description>&lt;p&gt;I realized that CRY did not have a CMake based install option, so including it&#xA;in a GEANT4 cmake project might not be obvious. This is how you would do it in&#xA;your CMakeLists.txt:&lt;/p&gt;</description>
    </item>
    <item>
      <title>GTest Submodule</title>
      <link>https://iscinumpy.dev/post/gtest-submodule/</link>
      <pubDate>Wed, 07 Oct 2015 06:43:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/gtest-submodule/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Note: There is a better way to do this described&#xA;&lt;a href=&#34;https://iscinumpy.dev/post/googletest-and-cmake&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever tried &lt;code&gt;apt-get&lt;/code&gt; or &lt;code&gt;brew&lt;/code&gt; to try to install gtest, you are&#xA;probably familiar with the fact that gtest is not &amp;ldquo;recommend&amp;rdquo; for global install&#xA;on your system. As an alternative, the recommendation is that you make it part&#xA;of your project. The process for making gtest part of your project, however, is&#xA;not well documented, at least for modern git projects. What follows is the&#xA;procedure I used to do so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slots in Python</title>
      <link>https://iscinumpy.dev/post/slots-in-python/</link>
      <pubDate>Thu, 06 Aug 2015 16:01:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/slots-in-python/</guid>
      <description>&lt;p&gt;Slots seem to be poorly documented. What they do is simple, but whether they are&#xA;used is tricky. This is a little mini-post on slots.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basics of metaclasses</title>
      <link>https://iscinumpy.dev/post/basics-of-metaclasses/</link>
      <pubDate>Thu, 06 Aug 2015 15:59:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/basics-of-metaclasses/</guid>
      <description>&lt;p&gt;This is a quick tutorial over the basics of what metaclasses do.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-metaclass&#34;&gt;The Metaclass&lt;/h1&gt;&#xA;&lt;p&gt;Metaclasses, while seemingly a complex topic, really just do something very&#xA;simple. They control what happens when you have code that turns into a class&#xA;object. The normal place they are executed is right after the class statement.&#xA;Let&amp;rsquo;s see that in action by using print as our metaclass.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Factory classmethods in Python</title>
      <link>https://iscinumpy.dev/post/factory-classmethods-in-python/</link>
      <pubDate>Wed, 29 Jul 2015 09:13:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/factory-classmethods-in-python/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t seen a great deal of practical documentation about using classmethods&#xA;as factories in Python (which is arguably the most important use of a&#xA;classmethod, IMO). This post hopes to fill in that gap.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making an autoload extension for IPython</title>
      <link>https://iscinumpy.dev/post/making-an-autoload-extension-for-ipython/</link>
      <pubDate>Fri, 24 Jul 2015 07:06:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/making-an-autoload-extension-for-ipython/</guid>
      <description>&lt;p&gt;I recently decided to try my hand at making an auto-load extension for Python&#xA;and Plumbum. I was planning to suggest it as a new feature, then I thought it&#xA;might be an experimental feature, and now it&amp;rsquo;s just a blog post. But it was an&#xA;interesting idea and didn&amp;rsquo;t seem to be well documented process on the web. So,&#xA;here it is.&lt;/p&gt;&#xA;&lt;p&gt;The plan was to make commands like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncertainty extension for IPython</title>
      <link>https://iscinumpy.dev/post/uncertainty-extension-for-ipython/</link>
      <pubDate>Fri, 24 Jul 2015 06:45:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/uncertainty-extension-for-ipython/</guid>
      <description>&lt;p&gt;Wouldn&amp;rsquo;t it be nice if we had uncertainty with a nice notation in IPython? The&#xA;current method would be to use raw Python,&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;uncertainties&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ufloat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ufloat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;12.34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre style=&#34;output&#34;&gt;&#xA;12.340+/-0.010&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s use the infix library to make the notation easier. We&amp;rsquo;ll define &lt;code&gt;|pm|&lt;/code&gt; to&#xA;mean &lt;code&gt;+/-&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plumbum color</title>
      <link>https://iscinumpy.dev/post/plumbum-color-post/</link>
      <pubDate>Wed, 22 Jul 2015 12:25:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/plumbum-color-post/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working on a color addition to Plumbum for a little while, and I&amp;rsquo;d&#xA;like to share the basics of using it with you now. This library was originally&#xA;built around a special &lt;code&gt;str&lt;/code&gt; subclass, but now is built on the new &lt;code&gt;Styles&lt;/code&gt;&#xA;representation and is far more powerful than the first implementation. It safely&#xA;does nothing if you do not have a color-compatible systems (posix + tty&#xA;currently), but can be forced if need be. It is included with Plumbum, so you&#xA;don&amp;rsquo;t have to add a requirement for your scripts that is non-essential (as color&#xA;often is). It is integrated with &lt;code&gt;plumbum.cli&lt;/code&gt;, too. Also, I&amp;rsquo;ve managed to&#xA;accelerate the color selection algorithms about 8x, allowing near game-like&#xA;speeds. (see the &lt;code&gt;fullcolor.py&lt;/code&gt; example).&lt;/p&gt;</description>
    </item>
    <item>
      <title>University of Texas Doctoral Thesis Template</title>
      <link>https://iscinumpy.dev/post/univerity-of-texas-thesis/</link>
      <pubDate>Sun, 12 Jul 2015 17:05:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/univerity-of-texas-thesis/</guid>
      <description>&lt;p&gt;I have created a thesis class file for a UT Thesis in LaTeX. It has already been&#xA;used for at least one passing thesis, so it does meet the current UT guidelines.&#xA;(Please let me know if there are any issues!)&lt;/p&gt;&#xA;&lt;p&gt;Since I use Bitbucket for all my private repositories (like my thesis itself),&#xA;the code is in a Bitbucket repository rather than GitHub. Here is the link if&#xA;you want to create a pull request or want to compile the class and documentation&#xA;from the source .dtx file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plumbum scripting</title>
      <link>https://iscinumpy.dev/post/plumbum-scripting/</link>
      <pubDate>Sun, 12 Jul 2015 14:07:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/plumbum-scripting/</guid>
      <description>&lt;p&gt;Scripting in Bash is a pain. Bash can do almost anything, and is unbeatable for&#xA;small scripts, but it struggles when scaling up to doing anything close to a&#xA;real world scripting problem. Python is a natural choice, especially for the&#xA;scientist who already is using it for analysis. But, it&amp;rsquo;s much harder to do&#xA;basic tasks in Python. So you are left with scripts starting out as Bash&#xA;scripts, and then becoming a mess, then being (usually poorly) ported to Python,&#xA;or even worse, being run by a Python script. I&amp;rsquo;ve seen countless Python scripts&#xA;that run Bash scripts that run real programs. I&amp;rsquo;ve even written one or two. It&amp;rsquo;s&#xA;not pretty.&lt;/p&gt;&#xA;&lt;p&gt;I recently came (back) across a really powerful library for doing efficient&#xA;command line scripts in Python. It contains a set of tools that makes the four&#xA;(five with color) main tasks of command line scripts simple and powerful. I will&#xA;also go over the one main drawback of the library (and the possible&#xA;enhancement!).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple Overloading in Python</title>
      <link>https://iscinumpy.dev/post/simple-operator-overloading-in-python/</link>
      <pubDate>Tue, 07 Jul 2015 09:45:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/post/simple-operator-overloading-in-python/</guid>
      <description>&lt;p&gt;This is intended as an example to demonstrate the use of overloading in object&#xA;oriented programming. This was written as a Jupyter notebook (aka IPython) in&#xA;Python 3. To run in Python 2, simply rename the variables that have unicode&#xA;names, and replace &lt;code&gt;truediv&lt;/code&gt; with &lt;code&gt;div&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While there are several nice Python libraries that support uncertainty (for&#xA;example, the powerful&#xA;&lt;a href=&#34;https://pypi.python.org/pypi/uncertainties/&#34;&gt;uncertainties&lt;/a&gt; package and the&#xA;related units and uncertainties package&#xA;&lt;a href=&#34;http://pint.readthedocs.org/en/0.6/&#34;&gt;pint&lt;/a&gt;), they usually use standard error&#xA;combination rules. For a beginning physics class, often &amp;lsquo;maximum error&amp;rsquo;&#xA;combination is used. Here, instead of using a standard deviation based error and&#xA;using combination rules based on uncorrelated statistical distributions, we&#xA;assume a simple maximum error and simply add errors.&lt;/p&gt;&#xA;&lt;p&gt;To implement this, let&amp;rsquo;s build a Python class and use overloading to implement&#xA;algebraic operations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Archives</title>
      <link>https://iscinumpy.dev/page/archive/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author>
      <guid>https://iscinumpy.dev/page/archive/</guid>
      <description></description>
    </item>
  </channel>
</rss>
