PyDev of the Week: Wolf Vollprecht

This week we welcome Wolf Vollprecht (@wuoulf) as our PyDev of the Week! Wolf is a core maintainer of mamba, a Fast Cross-Platform Package Manager as well as xtensor, a C++ library meant for numerical analysis with multi-dimensional array expressions.

You can see some of what Wolf has been working on over on GitHub. Let's take a few moments to get to know Wolf better!

Can you tell us a little about yourself (hobbies, education, etc):

I am Wolf, and currently the CTO of QuantStack. I started programming on a TI 83-Plus, using Basic, and then continued to learn PHP to work in a web agency. When I started university, I participated in the Ubuntu App Challenge (that was back in 2012). For that I worked on a little GTK based Markdown editor (called Uberwriter, now Apostrophe), and that was the first time I started to use Python seriously. Later I worked on a little robot called Beachbot that draws pictures in the sand, then I did a master in Robotics. I had a vision of working for an open source company and also contributed to xtensor, a C++ library with Python bindings, and one of the first QuantStack projects. That led to me joining QuantStack 5 years ago.

Why did you start using Python?

I started using Python to work on Uberwriter! I very much like the language and the powerful expressiveness. After Uberwriter, I dabbled in some other personal projects, for example “SilverFlask”, a CMS based on Flask and SQLAlchemy, which was heavily inspired by PHPs SilverStripe. SilverFlask never went anywhere, but I learned a lot about abstract base classes and meta classes in Python which still helps me to this day. Later I was working on a Python to C++ compiler called PyJet, based on expression graphs, which also taught me a lot about Python and how hard it is to capture the dynamic nature of the language.

What other programming languages do you know and which is your favorite?

I work a lot with C++, but I do not like it too much. It’s quite verbose, and a pretty old school language (although one can do very fast and complicated things with it). Especially error messages are not great when templates are involved!
I also know Javascript quite well, and also do not like it much. It’s not a very “well thought out” language, and it doesn’t support operator overloading. What I like about Javascript is that it has very powerful Just-In-Time compilation engines.
There are some up-and-coming programming languages that look like an interesting cross-over of “compiled” language & Python — for example Nim and Zig. My dream language would be compileable, but also interpretable (so that one can run macros at compile time _in the language itself_). I think Zig is getting close to that. There is also a new ahead-of-time Python compiler called LPython that seems promising (but still quite early!).

What projects are you working on now?

I am currently working on the definitive package management solution across all platforms. This project is called “mamba” and is a package manager that uses “conda” packages. Mamba works on all platforms (Windows, macOS and Linux). I am also part of the largest community that provides these packages, the conda-forge community. We’re proud to have more than 4000 individual contributors that are providing packages for 6 different platforms: Windows, 3 Linux versions (Intel, Arm and PowerPC), as well as macOS (intel and Apple Silicon).
Most conda-forge packages are Python and data science related. However, we also have a large collection of packages for the R programming language, as well as many packages in C and C++, Go and Rust. We’re really trying to bring everyone together in a single package management system!

I am also working on two packages in the “mamba-ecosystem”: one is boa, a package builder and the other one is quetz, a package server. Both are pure Python packages. Quetz is using FastAPI and that has worked pretty nicely for us.

Which Python libraries are your favorite (core or 3rd party)?

Very good question. I could use the occasion to advertise some of the Python libraries we work on at QuantStack: ipywidgets, ipycanvas, ipyleaflet, bqplot — all these help to make powerful user interfaces in Jupyter notebooks. JupyterLab and Voila are also great, of course!

In general, I really like our usage of “rich" and “prompt_toolkit" in boa, it helps a lot with nice terminal user interfaces. There are many well thought out Python libraries!

How did you end up working on mamba?

Back in the days, conda was really slow (that was before they added some optimisations that helped). Conda-forge was growing faster and faster. And I had this crazy idea to build out all the robotics packages of the ROS ecosystem (this is still ongoing in the robostack project). There are many ROS packages in any given environment and it seemed infeasible to make it work with the limitations of conda.

Thus I started to toy around with libsolv to see if it would be faster (as an alternative SAT solver implementation, as that was the really slow part. Michael Schröder from openSUSE implemented most necessary pieces in libsolv itself, and the rest is history!

What do you think Python does best in the data science field?

I think the what makes Python strong, in general but also in data science, is that it is a great glue language between high level dynamic code (Python) and low-level FORTRAn, C or C++ code. It is really straightforward to write your own high-speed Python extensions in C++ using pybind11, or in Rust using pyo3. This has enabled many of the popular data science libraries such as NumPy, Pandas, the scikit-learn and scikit-image libraries, Tensorflow, PyTorch, …

Is there anything else you’d like to say?

We’ve recently started to think seriously about Webassembly! We’ve worked on JupyterLite (a really great tool to run Python in the browser, e.g. for interactive documentation!). also we are trying to prepare conda-forge for Webassembly packages. That is really exciting work and is happening in the “emscripten-forge” organization on Github.

Thanks for doing the interview, Wolf!

Copyright © 2022 Mouse Vs Python | Powered by Pythonlibrary