<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#python posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/python/</link>
    <atom:link href="https://bencrowder.net/blog/tag/python/feed/" rel="self" />
    <description>Feed for blog posts tagged with #python.</description>
    <lastBuildDate>Thu, 16 Apr 2026 02:21:36 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Projects — Prints 2.1</title>
      <link>https://bencrowder.net/blog/2022/projects-prints-2.1/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2022/projects-prints-2.1/</guid>
      <pubDate>Sat, 21 May 2022 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<h3 id="religiousart">Religious art</h3>
<p><figure>
        <a href="https://bencrowder.net/art/before-the-world-was-vi/"><img src="https://cdn.bencrowder.net/images/art/web/before-the-world-was-vi<em>web.jpg" alt="Before the World Was VI" title="Before the World Was VI" /></a>
        <figcaption></em>Before the World Was VI_. Another take on the celestial yin &amp; yang version.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/follow-me/"><img src="https://cdn.bencrowder.net/images/art/web/follow-me<em>web.jpg" alt="Follow Me" title="Follow Me" /></a>
        <figcaption></em>Follow Me_. I really like the bolder colors here. One of my favorites.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/ive-a-mother-there-iii/"><img src="https://cdn.bencrowder.net/images/art/web/ive-a-mother-there-iii<em>web.jpg" alt="I’ve a Mother There III" title="I’ve a Mother There III" /></a>
        <figcaption></em>I’ve a Mother There III_. I wasn’t sure whether I wanted to do another negative space piece but decided to go for it.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/in-their-own-image/"><img src="https://cdn.bencrowder.net/images/art/web/in-their-own-image<em>web.jpg" alt="In Their Own Image" title="In Their Own Image" /></a>
        <figcaption></em>In Their Own Image_. Finally branched out to some other scriptures for my Heavenly Parents pieces. Initially this one looked too much like a restroom sign. Also, I don’t know that I’ve found the simplest way to represent this idea yet.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/a-beloved-daughter/"><img src="https://cdn.bencrowder.net/images/art/web/a-beloved-daughter<em>web.jpg" alt="A Beloved Daughter" title="A Beloved Daughter" /></a>
        <figcaption></em>A Beloved Daughter_. I was reading Elder Renlund’s conference talk and realized I hadn’t done this yet.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/prodigal-son-ii/"><img src="https://cdn.bencrowder.net/images/art/web/prodigal-son-ii<em>web.jpg" alt="Prodigal Son II" title="Prodigal Son II" /></a>
        <figcaption></em>Prodigal Son II_. Fairly close to the first iteration but without the unnecessary ground.</figcaption>
      </figure></p>
<h3 id="otherart">Other art</h3>
<p>Lately I’ve been playing around with making meaningless decorative pieces in Blender, using displacement maps with (for the most part) procedural heightfields. For these I’ve generally textured the heightfield in Affinity Photo and sometimes also textured a separate color map. Looking forward to doing more work in this vein.</p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern001/"><img src="https://cdn.bencrowder.net/images/art/web/pattern001<em>web.jpg" alt="Pattern 001" title="Pattern 001" /></a>
        <figcaption></em>Pattern 001_. This is the one that wasn’t procedural; I made the heightfield in Figma. While I like the way the sun lamp lights things evenly, it still feels maybe a little too harsh to me. I think of this piece as some kind of vintage fabric.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern002-a/"><img src="https://cdn.bencrowder.net/images/art/web/pattern002-a<em>web.jpg" alt="Pattern 002 A" title="Pattern 002 A" /></a>
        <figcaption></em>Pattern 002 A_. Kind of going for a Central American archaeological feel here. For this I wrote a Python script that generated rectangles on a grid in SVG for the heightfield. Switched to a spotlight lamp, and added some fog. I added the green in post.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern002-b/"><img src="https://cdn.bencrowder.net/images/art/web/pattern002-b<em>web.jpg" alt="Pattern 002 B" title="Pattern 002 B" /></a>
        <figcaption></em>Pattern 002 B_. Same script as 002 A, this time with different textures and lighting. Going for a Middle Eastern archaeological feel. I also added a slight bit of rippling and rotational blur on top to make it feel a little magical.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern003-a/"><img src="https://cdn.bencrowder.net/images/art/web/pattern003-a<em>web.jpg" alt="Pattern 003 A" title="Pattern 003 A" /></a>
        <figcaption></em>Pattern 003 A_. New script. Fairly pleased with how this turned out — all the different varieties that come out from random circles. (Since that’s all the heightfield is, really.) I added the lower-level squares on a last-minute impulse and I’m glad I did.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern003-b/"><img src="https://cdn.bencrowder.net/images/art/web/pattern003-b<em>web.jpg" alt="Pattern 003 B" title="Pattern 003 B" /></a>
        <figcaption></em>Pattern 003 B_. Same script as 003 A. I love love love the way the heightfield texture makes it look like things are growing, in a creepy way. Added depth of field to make things look more underwater. I’m happy with the old-photograph feel, too.</figcaption>
      </figure></p>
<p><figure>
        <a href="https://bencrowder.net/art/pattern004/"><img src="https://cdn.bencrowder.net/images/art/web/pattern004<em>web.jpg" alt="Pattern 004" title="Pattern 004" /></a>
        <figcaption></em>Pattern 004_. It still blows my mind that I can take a black-and-white heightfield and use it to generate art like this. Kind of cool how several of these look like they’re bowls even though the interiors aren’t actually rounded.</figcaption>
      </figure></p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Projects — Prints 2.1">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>New artwork: The Gathering of Israel. For a few months I’d been thinking about how to symbolically r...</title>
      <link>https://bencrowder.net/blog/2021/1228/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1228/</guid>
      <pubDate>Sun, 06 Jun 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>New artwork: <em><a href="https://bencrowder.net/art/the-gathering-of-israel/">The Gathering of Israel</a></em>. For a few months I’d been thinking about how to symbolically represent this idea and eventually settled on a vector field (with artistic license rashly taken) as the best fit, at least for this version. The textures all generated in SVG via a small Python script.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20New artwork: The Gathering of Israel. For a few months I’d been thinking about how to symbolically r...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #38</title>
      <link>https://bencrowder.net/blog/2021/links-38/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-38/</guid>
      <pubDate>Thu, 11 Mar 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://github.com/ratfactor/ziglings">Ziglings</a>. Learn Zig by fixing small bugs in small programs. (Inspired by <a href="https://github.com/rust-lang/rustlings">rustlings</a>, though those exercises seem to be broader than just fixing errors.) A good way to learn a programming language, I think.</p>
<p><a href="https://maggieappleton.com/bidirectionals">Maggie Appleton on bi-directional links</a>. Doing this locally is one of the (many) changes I want to make down the road when I rebuild this site’s backend.</p>
<p><a href="https://vasilis.nl/nerd/where-should-the-navigation-be/">Vasilis van Gemert on where web page navigation should be</a>. I’m convinced: nav at the bottom of the source file, and on mobile at the bottom visually as well. Planning to make the change here soon.</p>
<p><a href="https://www.blender.org/press/blender-2-92-release/">Blender 2.92 dropped recently</a>. Geometry nodes look promising, and it’s crazy to see how all the grease pencil work has turned Blender into a viable 2D animation studio as well.</p>
<p><a href="https://www.python.org/dev/peps/pep-0636/">PEP 636</a>. Pattern matching! In Python! Very much looking forward to this — I’ve loved using it in Rust.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #38">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #15</title>
      <link>https://bencrowder.net/blog/2020/links-15/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/links-15/</guid>
      <pubDate>Thu, 10 Sep 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<ul>
<li><a href="https://www.benkuhn.net/attention/">Ben Kuhn on your attention being your scarcest resource</a> — thinking a lot about this lately since I tend to have too many plates spinning at a time (his blog in general is quite good, by the way)</li>
<li><a href="https://interconnected.org/home/2020/09/09/organizine">Matt Webb on a countdown zine site</a> — this countdown clock idea is intriguing and now I’m thinking about using this idea on some things</li>
<li><a href="https://jakearchibald.com/2020/avif-has-landed/">Jake Archibald on AVIF</a> — a new image compression format I’d never heard of but which looks quite promising</li>
<li><a href="https://www.reddit.com/r/pics/comments/ioyntd/oregon_wildfires_making_it_look_straight/">Apocalyptic West Coast fires</a> — whoa (“hot coals the size of marbles falling from the sky”)</li>
<li><a href="https://www.smithsonianmag.com/smart-news/your-next-digital-tablet-could-be-made-paper-180975727/">Self-powered wireless keyboard made out of paper</a> — though with electronics printed on it (still cool)</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #15">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>A year and a half ago I started working on a REPL-based music composition environment called Trill....</title>
      <link>https://bencrowder.net/blog/2020/900/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/900/</guid>
      <pubDate>Fri, 21 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>A year and a half ago I started working on a REPL-based music composition environment called Trill. After a short amount of time I stashed the project for the time being, but since I can see myself working on it again someday, I figured it’s due a write-up.</p>
<p>The core idea here is a text-based REPL for composing music (and by music I mean more things like hymns and movie scores and folk songs, not as much pop or rock or electronic), with a focus on making the composition experience more aural and less visual.</p>
<p>An example session will hopefully help anchor the ideas:</p>
<pre>
> score mysong
> staff piano             # add a piano staff
> keysig c
> timesig 4/4
> keytime c 4/4           # alternate
> play v. v. v. iii....   # plays the note sequence (. = quarter note, .. = half note, .... = whole note)
> play v. v. v. iii-....  # - = flat (and v, iii are based on the key signature)
> play v/ v// v///        # eighth, sixteenth, thirty-second notes
> add .                   # adds what was last played to the active staff
> play V IV^ IV_          # play a V chord and then a IV chord one octave up and again one octave down
> pm vi.                  # plays the last measure plus whatever notes are specified
> add vi.
> staff violin            # adds a violin staff
> play @arpeggiate piano  # plays two measures of violin arpeggiation based on the piano staff (where @arpeggiate is a generative method)
> save
</pre>
<p>And some miscellaneous, unordered notes:</p>
<ul>
<li>Rather than seeing the notes listed out (either in standard music notation or in text format), you basically only <em>hear</em> them (via <code>play</code>). This is the aural-over-visual part.</li>
<li>Duration is represented by the number of periods (cf. the <code>play</code> examples), as an experiment with making the length feel more visceral — a longer string of periods makes for a longer sound.</li>
<li>I’m also experimenting with using the relative scale notes (the Roman numeral notation) rather than absolute note names (C, D, E, etc.), to make transposing easier.</li>
<li>Not sure yet how dotted notes fit in here.</li>
<li>I threw in the idea of having some kind of generative functionality (<code>@arpeggiate</code>), but that’s pretty raw and not thought through at all yet.</li>
<li>The session transcript would also possibly function as the source for a song, and reloading it later would just skip the actual playing and instead just build the staff. Kind of nice to have the full history recorded, I think.</li>
<li>Influences that I’m aware of: <a href="https://en.wikipedia.org/wiki/ABC_notation">ABC notation</a>, <a href="https://lilypond.org">Lilypond</a>, and <a href="https://alda.io/">Alda</a>.</li>
</ul>
<p>To be clear, I have no idea if any of these ideas are actually good. They’re just half-baked thoughts at this point. I did implement a very small proof-of-concept using FluidSynth and Prompt Toolkit, with the <code>play</code> functionality working, but that’s where I left off. (Writing about it now, though, has me excited again. Maybe this will be my homework-avoidance project for the semester.)</p>
<p>The main things I need to sort out when next I work on Trill are how to navigate a score and how to manipulate notes using textual commands and this aural-first system. Basically, some way to say “go to this part and play this much” and “bump this note up this much” or “make this note a chord.” Seems doable; I just haven’t gotten that far yet.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20A year and a half ago I started working on a REPL-based music composition environment called Trill&amp;#8230;.">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>New artwork: Before the World Was II. It’s (in my opinion) a much better execution of Before the Wor...</title>
      <link>https://bencrowder.net/blog/2020/947/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/947/</guid>
      <pubDate>Sat, 15 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>New artwork: <em><a href="https://bencrowder.net/art/before-the-world-was-ii/">Before the World Was II</a></em>.</p>
<p>It’s (in my opinion) a much better execution of <em><a href="https://bencrowder.net/art/before-the-world-was/">Before the World Was</a></em>, which used a quick DrawBot script that didn’t pay much attention to placement.</p>
<p>This time, working off the Generative Artistry <a href="https://generativeartistry.com/tutorials/circle-packing/">circle packing tutorial</a>, I wrote a <a href="https://cdn.bencrowder.net/downloads/code/before-the-world-was-ii.py">Python script</a> that places all the circles so there’s no overlap, then outputs an SVG with the turbulence/displacement filters I <a href="https://bencrowder.net/blog/2020/896/">wrote about</a> not too long ago.</p>
<p>For comparison (original on the left):</p>
<p><figure>
        <a href="https://cdn.bencrowder.net/blog/2020/08/before-and-after-the-world-was.jpg"><img src="https://cdn.bencrowder.net/blog/2020/08/before-and-after-the-world-was.jpg" alt="before-and-after-the-world-was.jpg" title="before-and-after-the-world-was.jpg" /></a>
        
      </figure></p>
<p>I also went with a slightly less saturated background in this new version, and I put a little bit of texture on the circles themselves to make it feel slightly more painterly.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20New artwork: Before the World Was II. It’s (in my opinion) a much better execution of Before the Wor...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Some WIP experimentation with art. Brief backstory: when I’m doing my minimalist religious art, I us...</title>
      <link>https://bencrowder.net/blog/2020/896/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/896/</guid>
      <pubDate>Wed, 05 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Some WIP experimentation with art.</p>
<p>Brief backstory: when I’m doing my minimalist religious art, I usually sketch an idea out first by hand or in Paper on my phone, then mock them up in Illustrator to iterate on the concept. Once it’s satisfactory, I move to execution, either painting the piece in Procreate or using some of the brushes in Illustrator to get a more organic look. And finally I texture the image in Photoshop.</p>
<p>A couple months ago I got interested in exploring alternatives to Illustrator and Photoshop for both execution and texturing processes. And me being me, I wanted to try doing it in code, just to see what it was like. (Some things are easier in code, though I don’t know how often that would actually be the case with these.)</p>
<p>Note: this is still very much a WIP, and who knows if I’ll end up using any of it or not. But here’s the current state of things.</p>
<h2 id="svg">SVG</h2>
<p>After reading somewhere that SVG has turbulence and displacement filters, I realized I could potentially use those for the execution part of the process, to distress the edges enough to make things more interesting. (And hopefully to be less repetitious than the Illustrator brushes I use.)</p>
<p>I put together an initial test using a few different settings, and it turned out a bit better than I expected. A sample of the code:</p>
<pre><code>&amp;lt;filter id="person1Filter"&amp;gt;
    &amp;lt;feTurbulence type="turbulence" baseFrequency="0.5" numOctaves="2" result="turb1" /&amp;gt;
    &amp;lt;feDisplacementMap in2="turb1" in="SourceGraphic" scale="3" xChannelSelector="R" yChannelSelector="G" result="result1" /&amp;gt;
    &amp;lt;feTurbulence type="turbulence" baseFrequency="0.05" numOctaves="2" result="turb2" /&amp;gt;
    &amp;lt;feDisplacementMap in2="turb2" in="result1" scale="3" xChannelSelector="R" yChannelSelector="G" /&amp;gt;
&amp;lt;/filter&amp;gt;

&amp;lt;style type="text/css"&amp;gt;
    .person1 {
        fill: #a34130;
        filter: url(#person1Filter);
    }
&amp;lt;/style&amp;gt;

&amp;lt;g id="person-1"&amp;gt;
    &amp;lt;circle class="person1" cx="200" cy="250" r="30" /&amp;gt;
    &amp;lt;polygon class="person1" points="225,270 205,500 350,500" /&amp;gt;
&amp;lt;/g&amp;gt;
</code></pre>
<p>And this is what it looks like:</p>
<p><figure class="border">
        <a href="https://cdn.bencrowder.net/blog/2020/08/svg-test.svg"><img src="https://cdn.bencrowder.net/blog/2020/08/svg-test.png" alt="svg-test.png" title="svg-test.png" /></a>
        
      </figure></p>
<p>The background rectangle, the red figure, and the white figure all have different turbulence and displacement values. The red figure uses two sets of turbulence and displacement filters, which worked out fairly well, I think.</p>
<p>I used Inkscape render it out to a high-res PNG, since Illustrator wasn’t able to handle the filters. Eventually, if I keep going down this path, I’d hopefully be able to find a command-line tool that can do the rendering. (Maybe Inkscape has a headless option.)</p>
<p>Overall, this path seems promising. I don’t know that I’d use it all the time, but for certain things it may be handy. I still need to look into sane ways to round corners, and it seems that the other filters (dilation/erosion, convolution, etc.) may be helpful, too.</p>
<h2 id="grain">Grain</h2>
<p>I’ve begun writing a Python script called Grain for texturing the final art image. The goal here is to see if I can streamline the process at all, and to see if this idea even works. Grain takes as input a text-based input file that looks like this:</p>
<pre><code>:image test1-texture.jpg
:blend screen
:opacity 0.05
:x -100

:image textures#random
:blend soft-light
:opacity 0.1

:pattern roughdots
:blend soft-light
:opacity 0.2

:image textures#2019-05-21 17.28.14.jpg
:blend soft-light
:opacity 0.01

:image test1-base.png
</code></pre>
<p>Each block is a layer. Grain starts with the bottom layer (the executed base image) and goes up from there, adding each layer on top with the specified blending mode and opacity.</p>
<p>The <code>:pattern roughdots</code> command would generate procedural dots (not implemented yet), and the <code>textures#</code> bit in the <code>:image</code> command calls is a shortcut to my folder with texture photos.</p>
<p>So far, the results are disappointing. While the layering does currently work, it isn’t yet producing anything remotely publishable. I think there might be some discrepancies between blending modes in pyvips and in Photoshop. Hard to tell.</p>
<p>And, less importantly, it’s a little slow — partially from using high-res images, partially from Python. If the idea ends up working, I’ll most likely port this to Rust or Go, and probably also have scale things down for the exploration phase of texturing (with a final high-res export at the end).</p>
<p>I’ll keep tinkering with it from time to time and we’ll see how it goes.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Some WIP experimentation with art. Brief backstory: when I’m doing my minimalist religious art, I us...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Atmosphere</title>
      <link>https://bencrowder.net/blog/2020/atmosphere/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/atmosphere/</guid>
      <pubDate>Thu, 16 Jul 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I usually listen to music to provide some background noise (helpful with kids in the house), but sometimes music is still a bit too much of a distraction. White noise helps there, so I did some poking around and found <a href="https://www.noisli.com">Noisli</a>, which is great. Then I realized (naturally) that I could fairly easily make my own local version, no network access required.</p>
<p>It’s called <a href="https://bencrowder.net/atmosphere/">Atmosphere</a>, a Python script that takes a config file like this:</p>
<pre>
# Sound path
/path/to/that/directory/with/sound/files

# Volumes (>1 = louder, <1 = quieter)
# Don't include extension
brook 0.3
crickets 0.9
fireplace 1.2
forest_rain 1.1
thunder1 1.3
thunder2 1.3
waves 0.05
wind 1.2
</pre>
<p>And then mixes the looped audio together via Sox. The current version isn’t perfect at all — it can use more CPU than I’d like, and I think it might work better as a menu bar application than as a command-line script — but it works. I’ve been using it for several months now.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Atmosphere">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Last year I posted a note about Curves, a Python type design library I was working on. At the time I...</title>
      <link>https://bencrowder.net/blog/2019/725/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2019/725/</guid>
      <pubDate>Thu, 03 Oct 2019 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Last year I <a href="https://bencrowder.net/blog/2018/633/">posted a note about Curves</a>, a Python type design library I was working on. At the time I’d given up on it, but I recently had some new ideas on how to make it more ergonomic. It now stands resurrected:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2019/10/curves-wip.png" alt="curves-wip.png" title="curves-wip.png" />
        
      </figure></p>
<p>Since I don’t think I mentioned it in my earlier post: the idea is that programming language constructs (functions, variables, source control, etc.) may make it easier to design a typeface, given the parametric and repetitive nature of that work.</p>
<p>It’s still a work in progress and very much an experiment — placing points in code rather than in a GUI will always have some friction to it — but it seems promising enough now that it’s worth finishing it and trying to use it for some actual type design.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Last year I posted a note about Curves, a Python type design library I was working on. At the time I...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Scanbook 0.1.0</title>
      <link>https://bencrowder.net/blog/2019/scanbook-010/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2019/scanbook-010/</guid>
      <pubDate>Sat, 31 Aug 2019 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://bencrowder.net/coding/scanbook/">Scanbook</a> is a Python script I wrote to take page image scans and turn them into a nice black-and-white PDF for reading on my phone. I used to use Scanner Pro for this, but I’d rather do the processing on my laptop, and Scanbook happens to produce smaller PDFs. I’ve used it to scan a dozen or so of my journals; it works well enough for me.</p>
<p>This is, by the way, my first time publishing anything on PyPI. (Which means people can install Scanbook with a simple <code>pip install scanbook</code>.)</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Scanbook 0.1.0">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
