While working on a changelog-generation script for my vsvg project, I wanted to display the list of contributors as circular avatars, just like GitHub does in multiple places. After a few Google searches and some failed attempts, I identified a couple of key tricks. The first is about obtaining the avatar image for a given GitHub account. Although the URL is hard to predict, adding .png to the…
doit (a.k.a. PyDoIt) is a fantastic Python-based tool to automate repetitive workflows. It works particularly well alongside vpype to address mundane plotting-related tasks. This article explains in details how to automate an SVG optimisation and conversion workflow.
My successful (yet probably vain) attempt at running Textual (a modern TUI framework) on a Raspberry Pi without X11 by using fbpad (a framebuffer terminal emulator for Linux).
vpype 1.12 is out! 🎉 No ground-breaking features, but an improved “quality-of-life”, especially for Apple-silicon Mac owners, and few other goodies. Let’s dive in.
Although Google Analytics is very easy to setup on a Read the Docs-based documentation website, it requires a cookie banner to be GDPR-compliant and is otherwise questionable from a privacy-preservation point-of-view. As a result, I much prefer to use and support the excellent EU-based Plausible.io for traffic metrics instead. This article explains how to setup a Read the Docs-based documentation…
Often, technical documentations include lists or other snippets of text that are strongly related to some of the project’s code. vpype’s documentation is no exception to this. For instance, the Built-in symbols section lists the units available to expressions: These units are related to the following piece of code: # vpype/utils.py UNITS = { 'px': 1.0, 'in': 96.0, 'inch': 96.0, 'ft':…
This release further solidifies the block commands which were overhauled in vpype 1.9. It also introduces several changes revolving around the “plotting with paint” use-case, which typically requires the brush to be regularly dipped in a paint well. This can be achieved by inserting “dipping” patterns at regular intervals determined by the cumulative drawing distance. vpype…
Following a recent discussion on Twitter, I decided to take yet another deep dive in my Python projects' documentation and fix once and for all the issues I had with it. I first focused on the automatically-generated API reference section and this article details the results of my finding. Specifically, I’m using vsketch’s API reference, which I recently updated, as an example…
Hatch fills or pixel art plotting requires a rather precise estimate of your particular pen/paper combo’s stroke width. For example, this test pixel art plot would benefit from a slightly thinner pitch to avoid the visible overlap between neighbouring lines: There is no way around experience to find the optimal pitch. I’ve created the fill_test sketch to create custom charts with test…
The problem Several generative art algorithms, such as Truchet tiles, use a regular grid of square cells. For example, check this interactive demo from the Generative Design book or these few pieces of mine. Now, let’s say you want to generate an iteration of your algorithm for printing or plotting such that all margins around the grid are the same for the given paper size. You can of course…
I originally intended vpype 1.10 to be a ‘quick-and-dirty’, bug-fix-only release but it ended up being quite substantial, so let’s dive in. New features and improvements Improved support for layer pen width and opacity in the viewer (#448) The “Pen Width” and “Pen Opacity” menus are now named “Default Pen Width” and “Default Pen…
When I started using my new M1 Max MacBook Pro in December, a bunch of vpype’s tests started to fail. The failing tests were all image-based: an image is rendered and then compared to a previously-generated, reference image. This process is made easy thanks to this Pytest fixture. In this case, the reference images were generated long ago on my previous, Intel/AMD-based MacBook Pro. This GIF…
My name is Antoine Beyeler. I am a multidisciplinary engineer and entrepreneur with a PhD in flying robotics and interests in software, aviation, photography, generative art, plotters, and home automation. I live in Lausanne, Switzerland 🇨🇭. I recently joined Rerun.io as software engineer to learn Rust 🦀 while developing visualisation frameworks and products for computer vision and robotics…