<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>bitprophet.org</title>
    <link>https://bitprophet.org/</link>
    <description>Recent content in bitprophet.org on bitprophet.org</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 09 May 2026 15:02:50 -0400</lastBuildDate>
    <atom:link href="https://bitprophet.org/" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Updates for 2026</title>
      <link>https://bitprophet.org/blog/2026/05/09/updates-for-2026/</link>
      <pubDate>Sat, 09 May 2026 15:02:50 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2026/05/09/updates-for-2026/</guid>
      <description>&lt;p&gt;New &amp;ldquo;time since last post&amp;rdquo; high score! At this rate I&amp;rsquo;ll end up blogging once a
decade 😰 Some quick updates today, including a moderately sized Paramiko
announcement.&lt;/p&gt;
&lt;h2 id=&#34;paramiko-5-now-with-fewer-features&#34;&gt;Paramiko 5, now with fewer features!&lt;/h2&gt;
&lt;p&gt;Getting this out of the way early: &lt;a href=&#34;https://www.paramiko.org/changelog.html#5.0.0&#34;&gt;Paramiko 5.0 is out
now!&lt;/a&gt; - but most of the updates
are actually removals instead of additions. Specifically, removing a lot of
old, insecure algorithms and related functionality, and areas of the codebase
that were significant support burdens with low upsides.&lt;/p&gt;
&lt;p&gt;No more SHA1 anywhere; no more use of MD5 anywhere; no more GSSAPI (until
somebody contributes a SHA256-compatible rework, anyways); no more &lt;code&gt;demos/&lt;/code&gt;;
and more besides.&lt;/p&gt;
&lt;p&gt;Naturally, there are still some non-removal improvements, including but not
limited to: ability to select OpenSSH vs PEM format when writing out new
private key files; the newish &lt;code&gt;PKey.from_type_string()&lt;/code&gt; meta-constructor now
forwards the &lt;code&gt;password&lt;/code&gt; kwarg for encrypted private keys; inconsistencies in
other key constructors&amp;rsquo; kwargs were fixed; an &lt;code&gt;Ed25519Key&lt;/code&gt; introspection bug
was fixed; etc!&lt;/p&gt;
&lt;h3 id=&#34;ok-but-why&#34;&gt;OK, but why?!&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m burying the lede a bit - we got audited! 🎉 No, not the tax kind, the
security kind. The fine folks at OSTIF brought me (and to a degree, my
compatriots over at Cryptography.io) and security firm Quarkslab together to
have the codebase (and CI, and tooling, and everything else) audited for
security issues.&lt;/p&gt;
&lt;p&gt;Their findings included some long-standing issues (we&amp;rsquo;ve always been quite slow
at dropping old algorithms&amp;hellip;), as well as quite a few unknown problems. In
addition to reporting the findings, they recommended fixes and helped workshop
my commits as I went.&lt;/p&gt;
&lt;p&gt;We remediated all the high priority findings and many of the lower priority
ones, resulting in Paramiko 5.0! Working with both groups was a pleasure and
I&amp;rsquo;m super grateful for their input and expertise (and their patience).&lt;/p&gt;
&lt;p&gt;You can find OSTIF&amp;rsquo;s blog post here: &lt;a href=&#34;https://ostif.org/paramiko-audit-complete/&#34;&gt;https://ostif.org/paramiko-audit-complete/&lt;/a&gt;
and Quarkslab&amp;rsquo;s here: &lt;a href=&#34;https://blog.quarkslab.com/paramiko-security-audit.html&#34;&gt;https://blog.quarkslab.com/paramiko-security-audit.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I&amp;rsquo;ll repeat our own changelog link, for good measure:
&lt;a href=&#34;https://www.paramiko.org/changelog.html#5.0.0&#34;&gt;https://www.paramiko.org/changelog.html#5.0.0&lt;/a&gt; - as always, I tried to include
rationales for removals, and clearly marked backwards incompatibilities. Those
of you who weren&amp;rsquo;t relying on these outdated algorithms will likely notice very
few required changes on your end.&lt;/p&gt;
&lt;h2 id=&#34;you-said-updates-plural---what-else&#34;&gt;You said &amp;ldquo;updates&amp;rdquo;, plural - what else?&lt;/h2&gt;
&lt;p&gt;Nothing quite as exciting, just some life updates:&lt;/p&gt;
&lt;h3 id=&#34;title-change&#34;&gt;Title change&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m now a &lt;a href=&#34;https://bitprophet.org/career/resume/#employment-history&#34;&gt;fulltime devops engineer again&lt;/a&gt;,
and without switching companies! I missed hacking on systems/tooling related
things all day instead of only once in a while. (I didn&amp;rsquo;t miss the increased
level of interrupts, but, that comes with the territory - and I now have two
other dedicated teammates to share the load.)&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re still hiring non-devops product engineers (as well as looking for a good
devops manager/leader): &lt;a href=&#34;https://www.reach.security/careers&#34;&gt;https://www.reach.security/careers&lt;/a&gt; - tell &amp;rsquo;em I sent
you. (Make sure to include my last name, so you don&amp;rsquo;t confuse our recruiter,
whose name is also Jeff!)&lt;/p&gt;
&lt;h3 id=&#34;pycon-us-2026&#34;&gt;PyCon US 2026&lt;/h3&gt;
&lt;p&gt;I will be attending PyCon US 2026 in Long Beach, CA from May 13-19. &lt;a href=&#34;https://bitprophet.org/bio/#where-else-to-find-me-online&#34;&gt;Drop me a
line&lt;/a&gt; if you want to say hi! This will be
my first time visiting SoCal (unless you count driving the long way around
during my move to the Bay Area in 2011&amp;hellip;) so it&amp;rsquo;ll be interesting.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also my first time flying since the COVID pandemic started 😬 hoping the
currently low transmission levels and my trusty N95s keep me safe! Also very
excited that SoCal being SoCal means lots of outdoor dining opportunities&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;why-do-i-always-feel-compelled-to-stick-an-outro-on-these-things&#34;&gt;Why do I always feel compelled to stick an outro on these things?&lt;/h2&gt;
&lt;p&gt;Great question! Please tell me if you figure it out. As always, thanks for
reading! Exclamation point!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Departures and arrivals</title>
      <link>https://bitprophet.org/blog/2024/05/14/departures-and-arrivals/</link>
      <pubDate>Tue, 14 May 2024 11:43:13 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2024/05/14/departures-and-arrivals/</guid>
      <description>&lt;p&gt;Hello! Apologies for the radio silence. It&amp;rsquo;s been a strange, uh (&lt;em&gt;sweats,
checks date of previous blog post&lt;/em&gt;) 14 months! I have updates regarding my
employment status and OSS releases. Plus! Extremely mediocre section-title
wordplay.&lt;/p&gt;
&lt;h2 id=&#34;people-in-rooms-together-in-this-pandemic&#34;&gt;People? In &lt;em&gt;rooms&lt;/em&gt; together?! In THIS pandemic?!?!&lt;/h2&gt;
&lt;p&gt;Quick note: I&amp;rsquo;ll be attending &lt;a href=&#34;https://us.pycon.org/2024/&#34;&gt;PyCon US&lt;/a&gt; in
Pittsburgh, my first time doing anything in large non-family-related groups
since 2019. Shoot me a Mastodon DM or an email if you&amp;rsquo;d like to say a masked
hello.&lt;/p&gt;
&lt;h2 id=&#34;jumping-off-point&#34;&gt;Jumping-off point&lt;/h2&gt;
&lt;p&gt;As seen on my &lt;a href=&#34;https://bitprophet.org/career/resume/&#34;&gt;resumé&lt;/a&gt; and in the
&lt;a href=&#34;https://bitprophet.org/blog/2018/12/18/new-year-new-job-old-haunts/&#34;&gt;last blog post I wrote on this topic&lt;/a&gt;, I spent the tail end of last
decade and first third of this one, working for an international fintech firm,
Jump Trading. In addition to being oncall and various devops wrangling, I was
generously given a day a week to support internal/external use of my &lt;a href=&#34;https://bitprophet.org/projects/&#34;&gt;OSS
projects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This led to a number of important upgrades and experimental APIs for my bigger
codebases, and helped keep the lights on despite &lt;a href=&#34;https://bitprophet.org/blog/2020/07/02/help-wanted/&#34;&gt;problems with burnout&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, as you already know, &lt;del&gt;computers&lt;/del&gt; the economic underpinnings of
the last decade shifted recently &amp;ndash; resulting in previously-generous financial
arrangements (and pandemic-era remote work affordances) evaporating due to
becoming &amp;ldquo;ZIRPs&amp;rdquo;&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;. My position at Jump turned out to be one of these, and I
became unemployed in September 2023.&lt;/p&gt;
&lt;p&gt;A generous severance meant I didn&amp;rsquo;t have to worry about job hunting
immediately, and the nature of the split did not improve my already-poor mental
health &amp;ndash; so I took the opportunity to disengage and refill the ol&amp;rsquo; HP meter a
little.&lt;/p&gt;
&lt;h2 id=&#34;can-you-be-an-absentee-landlord-if-almost-nobody-pays-rent&#34;&gt;Can you be an absentee landlord if almost nobody pays rent?&lt;/h2&gt;
&lt;p&gt;Said disengagement included my open source, for which, I apologize. A little,
anyways; many words have been spilled about how us maintainers don&amp;rsquo;t actually
owe the users anything, and there is truth to that. My activity also wasn&amp;rsquo;t
zero - eg I spent a while updating Paramiko to address a recent CVE you &lt;a href=&#34;https://terrapin-attack.com/&#34;&gt;may
have heard of&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But I ought to have made my status clearer than random self-pitying subtoots on
&lt;a href=&#34;https://social.coop/@bitprophet&#34;&gt;Mastodon&lt;/a&gt;. Hopefully there&amp;rsquo;s no repeat of
this particular situation, but if there &lt;em&gt;is&lt;/em&gt;, I&amp;rsquo;ll try to do better.&lt;/p&gt;
&lt;p&gt;I did, also, intend to re-engage with the OSS eventually, starting around now
and lasting through fall: the severance kept me in groceries and mortgage for a
~year, so my plan for the middle half of 2024 was a combo of job hunting and
OSS hacking.&lt;/p&gt;
&lt;p&gt;But then! Stuff happened!&lt;/p&gt;
&lt;h2 id=&#34;reach-for-the-stars-security&#34;&gt;Reach for the &lt;del&gt;stars&lt;/del&gt; security&lt;/h2&gt;
&lt;p&gt;Specifically, I was alerted a few months ago to an Employment
Opportunity™ from a Python community buddy who had joined a small
security startup &amp;ndash; they&amp;rsquo;d just raised a Series A and were looking to hire. The
company had need for a Pythonista who could improve their infrastructure and
development pipeline alongside regular feature work.&lt;/p&gt;
&lt;p&gt;Even better? They&amp;rsquo;re distributed (no RTO!) and I&amp;rsquo;d coincidentally spent the
previous few years virtually hanging with a bunch of wonderful
security-adjacent nerds on a private Slack &amp;ndash; giving me a(n even) greater
appreciation of the importance of cybersecurity work.&lt;/p&gt;
&lt;p&gt;This seemed too good to pass up, so when &lt;a href=&#34;https://reach.security&#34;&gt;Reach
Security&lt;/a&gt; made an offer, I accepted!&lt;/p&gt;
&lt;h2 id=&#34;never-heard-of-them-what-do-they-do&#34;&gt;Never heard of them, what do they do?&lt;/h2&gt;
&lt;p&gt;I get a little &amp;ldquo;sus&amp;rdquo; when folks get chatty about their employer, so I&amp;rsquo;ll limit
this to the basics: the elevator pitch for Reach is that instead of being Yet
Another Security Tool, their raison d&amp;rsquo;être is extracting the full value
of the security tools your company is &lt;em&gt;already paying for&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The average IT/infosec team is typically not positioned to make the most out of
their current firewall, spam filter, endpoint protection, identity/auth system,
and so forth. Growing such teams with the headcount and experience required to
configure those systems &lt;em&gt;well&lt;/em&gt;, is increasingly costly &amp;ndash; especially as
attackers aren&amp;rsquo;t standing still.&lt;/p&gt;
&lt;p&gt;Reach&amp;rsquo;s bet is that, for less than that hypothetical staffing increase, they
can apply (or suggest, in a read-only mode) a smart and constantly updating set
of configuration updates, tailored to their customers&amp;rsquo; environments.&lt;/p&gt;
&lt;p&gt;Makes sense to me; and it&amp;rsquo;s a nice perk to care about your employer&amp;rsquo;s product
for a change. (Also, we&amp;rsquo;re still hiring, so get in touch!)&lt;/p&gt;
&lt;h2 id=&#34;so-what-about-the-oss&#34;&gt;So what about the OSS?&lt;/h2&gt;
&lt;p&gt;This part is less rosy. &amp;ldquo;A day a week for your OSS&amp;rdquo; was, in hindsight, its own
ZIRP; I was incredibly lucky to have it at the last couple of jobs. There&amp;rsquo;s no
such agreement this time around.&lt;/p&gt;
&lt;p&gt;What &lt;em&gt;does&lt;/em&gt; exist is the possibility of applying my projects where relevant. At
the start, this is Invoke, bringing a consistent and centralized CLI experience
to a formerly seed-stage-startup level of repo organization. I&amp;rsquo;m already
bumping into multiple long-term bugs/missing features that will need work!&lt;/p&gt;
&lt;p&gt;Whether this later involves Fabric/Paramiko depends on how the company&amp;rsquo;s
infrastructure grows. As came up in early chats with another company/friend,
shoehorning tools where they don&amp;rsquo;t belong, purely because I have a need to keep
the projects relevant in my dayjob is&amp;hellip;&lt;em&gt;not&lt;/em&gt; a good thing. I don&amp;rsquo;t want to
become &amp;ldquo;that guy&amp;rdquo; any more than I already am.&lt;/p&gt;
&lt;p&gt;And these days, &amp;ldquo;SSH via Python&amp;rdquo; is not the correct default tool in many
situations &amp;ndash; it&amp;rsquo;s harder to justify in a world full of serverless
computing, containers, and IaC than it was in the late 2000s.&lt;/p&gt;
&lt;p&gt;That said: I still use all 3 projects for personal tech, and there is
&lt;em&gt;absolutely&lt;/em&gt; a &amp;ldquo;long tail&amp;rdquo; of groups for whom Pythonic SSHing &lt;em&gt;is&lt;/em&gt; a valid tool
in the box; long tails being something those of us near the bleeding edge love
to forget about.&lt;/p&gt;
&lt;p&gt;So Fabric/Paramiko have a future - the question is just how much time I can
make for them in the short/medium term, and whether I can successfully grow the
maintainership.&lt;/p&gt;
&lt;p&gt;Watch this space for more, and in the meantime, I&amp;rsquo;m hoping to generally
re-engage with my projects in whatever time I can make for them. The staycation
is over!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Zero-Interest-Rate Phenomenon&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Dice, dice, baby</title>
      <link>https://bitprophet.org/blog/2023/03/07/dice-dice-baby/</link>
      <pubDate>Tue, 07 Mar 2023 19:14:50 -0500</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2023/03/07/dice-dice-baby/</guid>
      <description>&lt;p&gt;Bought some fancy dice on a whim recently, and wanted to share the photos /
descriptions. Figured this would work marginally better as a blog post instead
of &lt;a href=&#34;https://social.coop/@bitprophet&#34;&gt;Mastodon posts&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;dice-like-for-craps&#34;&gt;Dice? Like for craps?&lt;/h2&gt;
&lt;p&gt;No, like for nerdy tabletop roleplaying games. Your d20s and d12s and d4s and
so forth.&lt;/p&gt;
&lt;h2 id=&#34;so-you-play-ttrpgs&#34;&gt;So you play TTRPGs?&lt;/h2&gt;
&lt;p&gt;Well&amp;hellip;I &lt;em&gt;used&lt;/em&gt; to&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;, and never lost my love for the genre and its trappings. I&amp;rsquo;d
probably give it another try these days if not for the whole pandemic thing
(hint: it is still on, as much as you&amp;rsquo;d rather it weren&amp;rsquo;t.)&lt;/p&gt;
&lt;h2 id=&#34;then-whats-with-bought-some-dice&#34;&gt;Then what&amp;rsquo;s with &amp;ldquo;bought some dice&amp;rdquo;?&lt;/h2&gt;
&lt;p&gt;The catalyst for this episode: earlier this year, I nostalgia-raided my
late-childhood-through-college bedroom and carted home a pile of questionably
preserved rulebooks, collectible card games, assorted paraphernalia&amp;hellip;and my
old dice!&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t remember where I got them, they feel cheap as fuck, and they&amp;rsquo;re not
even in colors I like very much &amp;ndash; but they sure smell like nostalgia. Or is
that incense? Whatever.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/old-dice.png&#34;
    alt=&#34;A motley collection of cheap translucent acrylic(?) dice in pink, with some greens, and the odd blue or red.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;You can tell most of these kinda go together; when I care enough I&amp;rsquo;ll probably
skim the &lt;a href=&#34;https://dicemaniacsclub.wordpress.com/2019/08/29/dice-identification-101-mold-characteristics/&#34;&gt;Dice Maniac&amp;rsquo;s Club identification
guides&lt;/a&gt;
(link goes to part 1 of N) to see what they are but I assume they&amp;rsquo;re Chessex
since most of today&amp;rsquo;s dice makers weren&amp;rsquo;t operating back in the early 1990s.&lt;/p&gt;
&lt;p&gt;The small reddish d6 is probably from an unrelated board game or something?&lt;/p&gt;
&lt;p&gt;The big green fella &lt;em&gt;might&lt;/em&gt; be a little esoteric to some of you &amp;ndash; it&amp;rsquo;s a
30-sider! I have no clue what it was for exactly, it&amp;rsquo;s probably a donor like
the rest. The joys of getting most of your stuff as hand-me-downs from the
other local roleplayer who was years older&amp;hellip;&lt;/p&gt;
&lt;p&gt;Notably missing compared to contemporary sets is a &amp;ldquo;d%&amp;rdquo;, which is a d10 marked
with 00-90 instead of 1-(1)0, to be rolled alongside a regular d10 to fake
rolling a d100. I never really needed this (if they even had such incredible,
advanced technology back then) in part because aforementioned friend had a
real actual d100!&lt;/p&gt;
&lt;p&gt;Anyway. So that&amp;rsquo;s the spark. &amp;ldquo;Oh yea! Dice are fun to hold, and to look at, and
even &amp;ndash; &lt;em&gt;gasp!&lt;/em&gt; &amp;ndash; to &lt;em&gt;roll!&lt;/em&gt;&amp;rdquo; I knew that the last ~10-20 years&#39;
gaming/TTRPG/nostalgia renaissance had lead to lots of fancy dice being
made/sold, but I&amp;rsquo;d never really mucked with them. Figured hey! Retail therapy.
Why not.&lt;/p&gt;
&lt;h2 id=&#34;show-us-the-goods-already&#34;&gt;Show us the goods already!&lt;/h2&gt;
&lt;p&gt;Sure, sure. So, these all came from &lt;a href=&#34;https://mistymountaingaming.com/&#34;&gt;Misty Mountain
Gaming&lt;/a&gt; - I looked at a bunch of vendors (and
even then it was clearly only scratching the surface!) and they had the overall
most aesthetically pleasing selection for my needs, which was &amp;ldquo;kinda want one
of each major new classification, just to see what&amp;rsquo;s what.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll do an effortpost later perhaps, with all my research, but for now suffice
to say I got 3 sets of dice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kinda-sorta like my old pair, some plastic dice - but modern! Specifically,
resin, with attractive colors/objects inside, and sharp-edged instead of
tumbled.&lt;/li&gt;
&lt;li&gt;The new hotness: metal dice! I don&amp;rsquo;t love the looks of the simpler metal
dice, but some of them do a lot of neat stuff with multiple colors/textures
and/or fancier engraving. These sound like they&amp;rsquo;re everyone&amp;rsquo;s favorite for
actual use due to the heft.&lt;/li&gt;
&lt;li&gt;Extra fancy: (gem)stone dice - it sounds like these are almost more for
collecting/displaying, as they are liable to get damaged when used unless you
make sure to only ever roll them in a padded box AND only one at a time. But
goodness, are they gorgeous! Name a mineral or stone that holds up to mild
stress, and you can get dice made from it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here we go.&lt;/p&gt;
&lt;h3 id=&#34;resin-love&#34;&gt;Resin love&lt;/h3&gt;
&lt;p&gt;First, the resin set, specifically how it was packaged:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/dice-packaging.png&#34;
    alt=&#34;A plastic baggie filled with other, very small plastic baggies, one per die, containing a standard set of 7 roleplaying dice. There is also a small display/storage case with the store logo on top.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;Very nice, individually wrapped &amp;ldquo;candies&amp;rdquo;, and a free display/storage case.
Unwrapped:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/resin-above.png&#34;
    alt=&#34;A set of 7 sharp-edged resin dice seen from above, partly transparent, partly translucent-to-opaque with an ocean blue color, and partly filled with tiny white seashells. They are inked with bright, easily readable white font.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;These are just gorgeous. I especially love how the font &amp;lsquo;pops&amp;rsquo; despite how
complex the insides are. The color work is also fantastic - the blue and the
shells go together perfectly.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/resin-front.png&#34;
    alt=&#34;The same resin dice as before, from the front instead of above.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;In the hand, they are very light, and of course a
bit sharp. Especially the d4, which will absolutely work as a caltrop in a
pinch.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/resin-no-fit-in-foam.png&#34;
    alt=&#34;The resin dice arrayed in a storage case; they are far too big for the holes in the foam!&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;m not sure why MMG gave me a free case that clearly doesn&amp;rsquo;t fit the resin
dice. Maybe I&amp;rsquo;m supposed to manually cut out bigger holes in the foam? I&amp;rsquo;m not
very smart.&lt;/p&gt;
&lt;h3 id=&#34;heavy-metal&#34;&gt;Heavy metal&lt;/h3&gt;
&lt;p&gt;The metal dice, a two-tone set:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/metal-above.png&#34;
    alt=&#34;A set of 7 copper-and-blue metal dice seen from above. They have a Nordic/runic-inspired font face.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;As expected, these have &lt;em&gt;great&lt;/em&gt; heft to them, and are very pleasing to roll.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/metal-front.png&#34;
    alt=&#34;The same metal dice as before, from the front.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;On the downside, they are way smaller than I expected. Reckon it makes sense
due to being solid metal, but I&amp;rsquo;ll def be looking to see if this is normal or
if these are unusually small.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/metal-in-foam.png&#34;
    alt=&#34;The metal dice, arrayed in an opened storage case, showing how they fit relatively neatly into purpose-cut holes in a foam pad.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;These fit perfectly in the accompanying storage box, making me wonder if I was
accidentally given two &amp;ldquo;metal sized&amp;rdquo; boxes or if this is just their standard.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/metal-in-foam-closed.png&#34;
    alt=&#34;The metal dice, arrayed in a closed storage case, visible through the transparent lid.&#34;&gt;
&lt;/figure&gt;

&lt;h3 id=&#34;stone-cold&#34;&gt;Stone cold&lt;/h3&gt;
&lt;p&gt;Finally, the Labradorite/moonstone dice. Very very pretty. They came in their
own display/storage box:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/moonstone-closed.png&#34;
    alt=&#34;A closed dice box with the company logo on top.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;Which of course has appropriately-sized foam holes:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/moonstone-open.png&#34;
    alt=&#34;A set of 7 whitish-gray moonstone dice with gold-engraved Nordic-style font, from above.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;Good heft, much more than resin or acrylic, but not as much as the metal.
Pretty obvious when you think about it.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/moonstone-above.png&#34;
    alt=&#34;A set of 7 whitish-gray moonstone dice with gold-engraved Nordic-style font, from above.&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;Guess I&amp;rsquo;ll have to be careful about using these. I&amp;rsquo;ll definitely think about
getting one of those padded rolling trays, these want to roll a bit farther
than the resin (which aren&amp;rsquo;t tumbled) and the metal (which are just that heavy)
though they&amp;rsquo;re obviously not as fleet of foot as the old tumbled-acrylic dice.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/moonstone-front.png&#34;
    alt=&#34;The same moonstone dice as before, from the front.&#34;&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;hope-you-had-a-dice-time&#34;&gt;Hope you had a dice time!&lt;/h2&gt;
&lt;p&gt;A parting size comparison shot for you, and a thanks for reading!&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/dice/size-comparison.png&#34;
    alt=&#34;4d6 lined up in size order from above: the metal, the acrylic, the stone, and the resin.&#34;&gt;
&lt;/figure&gt;

&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;AD&amp;amp;D 2nd edition, &amp;ldquo;regular&amp;rdquo; D&amp;amp;D, RIFTS, Shadowrun, Werewolf, a tiny bit
of Vampire and other White Wolf properties too, and probably a few I&amp;rsquo;ve
forgotten.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Saying goodbye is difficult</title>
      <link>https://bitprophet.org/blog/2023/01/27/saying-goodbye-is-difficult/</link>
      <pubDate>Fri, 27 Jan 2023 19:34:28 -0500</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2023/01/27/saying-goodbye-is-difficult/</guid>
      <description>&lt;p&gt;Don&amp;rsquo;t let the title scare you; I&amp;rsquo;m not going anywhere in particular. But the
last ~year has seen a couple of big changes that I wanted to briefly share.&lt;/p&gt;
&lt;h2 id=&#34;a-personal-note&#34;&gt;A personal note&lt;/h2&gt;
&lt;p&gt;My mother, with whom I was very close, passed away somewhat suddenly last July
(also my birthday month, now ruined forever). She&amp;rsquo;d been diagnosed with
surprise lung cancer the preceding December &amp;ndash; despite a lifetime of exactly
zero risk factors for lung cancer &amp;ndash; and had been managing it during the spring
with some new anti-cancer meds.&lt;/p&gt;
&lt;p&gt;Unfortunately, since the cancer had already metastasized by the time it was
detected, she was on both borrowed time and blood thinners; the blood thinners
had to be switched around a few times to support a relapse-related biopsy; and
something about that switching (or perhaps simple bad luck) triggered a
significant stroke which put her in the hospital. She was gone a few days
later.&lt;/p&gt;
&lt;p&gt;As you may imagine, this experience has added to an already near-terminal pile
of stress and sadness from the ongoing Situations™ that we all live under
lately, and has rather lessened my desire to have Internet randos pissing &amp;amp;
moaning on my open-source issue trackers.&lt;/p&gt;
&lt;p&gt;So if I&amp;rsquo;m shorter than usual (notice to some of you: that&amp;rsquo;s your one freebie
for the day) or you find a pointless complaint Github comment unceremoniously
deleted&amp;hellip;this is one reason why.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve got a mom and are on good terms with her: please give her a call/hug.
You never know when she&amp;rsquo;ll be taken away from you.&lt;/p&gt;
&lt;h2 id=&#34;a-python-note&#34;&gt;A Python note&lt;/h2&gt;
&lt;p&gt;Nearly two years ago, I announced &lt;a href=&#34;https://bitprophet.org/blog/2021/02/25/byethon2/&#34;&gt;my intention to drop Python 2 support across
all my projects&lt;/a&gt;. As of a week ago, this effort
is &lt;strong&gt;complete&lt;/strong&gt;!&lt;/p&gt;
&lt;h3 id=&#34;really&#34;&gt;Really?!&lt;/h3&gt;
&lt;p&gt;Yes! The last to get updated were my &amp;ldquo;big three&amp;rdquo; &amp;ndash; Invoke, Paramiko, and
Fabric &amp;ndash; which got major revision bumps to denote their removal of Python 2
and Python &amp;lt;3.6 support (along with other changes) over the last couple weeks.&lt;/p&gt;
&lt;p&gt;Considering my employer&amp;rsquo;s Python environments are also generally Python 3-only
(minus a few holdouts which I am not personally responsible for) this means I
am now privileged to assume support for things like f-strings. It feels good!&lt;/p&gt;
&lt;p&gt;If I&amp;rsquo;d held out another 10-11 months, I could have claimed to be writing Python
2 for a full 20 years &amp;ndash; thankfully, I resisted the urge. But yes: goodbye,
Python 2; so long, and thanks for all the fish!&lt;/p&gt;
&lt;h3 id=&#34;python-36-is-eol-jeff&#34;&gt;Python 3.6 is &lt;a href=&#34;https://endoflife.date/python&#34;&gt;EOL&lt;/a&gt;, Jeff!&lt;/h3&gt;
&lt;p&gt;I appreciate you looking out for my well-being, but I am in fact capable of
reading!&lt;/p&gt;
&lt;p&gt;Less snarkily / more usefully: 3.6 was a useful cutoff today for a number of
factors, but I&amp;rsquo;m not planning to repeat my mistakes to a high degree. I&amp;rsquo;d guess
that I will end up trailing the official Python EOL dates by a couple of years
or so, at most.&lt;/p&gt;
&lt;p&gt;Factors pressuring me to drop Python versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requiring custom code to handle old versions. Now that everything &amp;lt;3.6 is out
the window, this is nonexistent or very minimal.&lt;/li&gt;
&lt;li&gt;Dependencies which I or my users really want newer versions of for
feature/security reasons, whose newer versions break on older Pythons. So
far, there aren&amp;rsquo;t any of these on my radar besides a few which emit
deprecation warnings on 3.6. Easily muted by those who care to.&lt;/li&gt;
&lt;li&gt;Irritatingly large CI test matrixes. Already, 3.6-3.11 is 6 cells minimum,
though thankfully CircleCI makes it pretty easy to avoid running a full
dot-product in situations where I have additional matrix dimensions. (E.g. if
I care to do things like test the oldest and newest versions of a crucial
dependency, I might only do that on the oldest and newest Python versions
too.)&lt;/li&gt;
&lt;li&gt;Ridicule from other OSS maintainers. Thankfully, most such offenders are
unreasonably tall and thus their ridicule just flies right over my head!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Factors pressuring me to keep Python versions around: eh, there&amp;rsquo;s clearly still
&lt;a href=&#34;https://pypistats.org/packages/fabric&#34;&gt;a LOT&lt;/a&gt; of folks on operating systems
whose &lt;code&gt;python3 -V&lt;/code&gt; spits out &lt;code&gt;3.6.*&lt;/code&gt;. No, they can&amp;rsquo;t all build their own
Python, use pyenv, use containers, or etc.&lt;/p&gt;
&lt;h3 id=&#34;anyway---where-from-here&#34;&gt;Anyway - where from here?&lt;/h3&gt;
&lt;p&gt;See &lt;a href=&#34;https://bitprophet.org/projects/#roadmap&#34;&gt;my roadmap&lt;/a&gt; as usual, but tl;dr &amp;ndash; features! at long
last! I&amp;rsquo;m unreasonably excited to write a much less naive/creaky authentication
flow for Paramiko, for example, and to add wholly new functionality to
Fabric/Invoke.&lt;/p&gt;
&lt;p&gt;Also: presumably shorter time periods between major revisions. Not &lt;em&gt;short&lt;/em&gt;
periods, and I plan to experiment more with &amp;ldquo;maybe serve a new API or
implementation &lt;em&gt;alongside the old one&lt;/em&gt; for a while???&amp;rdquo;. But also not being too
afraid of it when it makes sense. Smaller backwards incompatible versions are
much easier for users to swallow than the really big ones.&lt;/p&gt;
&lt;p&gt;Overall, my earnest hope is that dropping the Python 2 albatross from my neck
will invigorate me a bit more going forwards &amp;ndash; at least when the
still-frequent thoughts of my mom, and the preexisting condition of &lt;a href=&#34;https://bitprophet.org/blog/2020/07/02/help-wanted/&#34;&gt;my
burnout&lt;/a&gt;, aren&amp;rsquo;t getting in the way.&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Polestar 2: Test drive to order in one day</title>
      <link>https://bitprophet.org/blog/2022/02/14/polestar-2-test-drive-to-order-in-one-day/</link>
      <pubDate>Mon, 14 Feb 2022 22:31:00 -0500</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2022/02/14/polestar-2-test-drive-to-order-in-one-day/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been looking to upgrade my old, boring internal-combustion car to a
fancy, shiny battery-electric vehicle for about a year. The other day, I
finally got to test drive one - a Polestar 2. It was great! And I ended up
putting a deposit down the very next day.&lt;/p&gt;
&lt;h2 id=&#34;cars-are-evil&#34;&gt;Cars are evil!&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;re not wrong; car culture is responsible for the modern world&amp;rsquo;s awful
urban planning. I bought a house walkable to necessities so I
wouldn&amp;rsquo;t &lt;em&gt;need&lt;/em&gt; a car &amp;ndash; but they&amp;rsquo;re still convenient &amp;ndash; especially these days,
when stranger air is danger air.&lt;/p&gt;
&lt;p&gt;Driving to my parents&amp;rsquo;, running &amp;ldquo;big&amp;rdquo; errands, getting places not served by
train, and (maybe again someday?) road trips &amp;ndash; it&amp;rsquo;s all good.&lt;/p&gt;
&lt;h2 id=&#34;so-you-already-have-one&#34;&gt;So you already have one?&lt;/h2&gt;
&lt;p&gt;Yes! I own the cutest car ever: a happy green Mazda 2:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/mazda-2.png&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;We got it in California; it&amp;rsquo;s served us well for 11 years &amp;amp; a cross-country
drive. It transports 2 size &amp;lsquo;small&amp;rsquo; adults (and occasionally cats).&lt;/p&gt;
&lt;p&gt;No kids, no dogs, no lumber, no garbage cans, &lt;del&gt;no corpses&lt;/del&gt; &lt;del&gt;nobody can prove
anything&lt;/del&gt; &lt;del&gt;stop reading this paragraph please&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Tiny hatchbacks fit us great, but this one is a manual transmission, which is
relevant because&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;why-are-you-replacing-such-a-cute-car-whats-wrong-with-you&#34;&gt;Why are you replacing such a cute car, what&amp;rsquo;s wrong with you?!&lt;/h2&gt;
&lt;p&gt;&amp;hellip;I messed up my left ankle a few years ago. Not bad enough to qualify for a
blue placard, but it still hurts if I use it too much, such as constantly
riding the clutch &lt;del&gt;when some asshat in a BMW causes a pileup on the Merritt&lt;/del&gt;
in Northeastern US interstate traffic.&lt;/p&gt;
&lt;h2 id=&#34;no-seriously-what-is-wrong-with-you&#34;&gt;No, seriously, what is wrong with you?&lt;/h2&gt;
&lt;p&gt;God, where to start?&lt;/p&gt;
&lt;p&gt;You know what, never mind. Let&amp;rsquo;s stick to cars.&lt;/p&gt;
&lt;h2 id=&#34;why-electric&#34;&gt;Why electric?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s better for the climate, provided the car and batteries are used long
enough. Yes, even if the electricity is fossil-fuel based. I&amp;rsquo;m not gonna
regurgitate the literature here.&lt;/li&gt;
&lt;li&gt;Less smelly, can run it in an enclosed garage without dying (always a plus),
doing 99% of your refueling at home, etc.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m blessed with a 2-car garage, so I can keep my Mazda around as insurance.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Have you driven an electric car?&lt;/em&gt; They fly!&lt;/li&gt;
&lt;li&gt;As of 2021, the non-Tesla market and charging network has finally reached an
early critical threshold of &amp;ldquo;good enough&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;did-you-say-non-tesla-rargh&#34;&gt;DID YOU SAY NON-TESLA?! RARGH!&lt;/h2&gt;
&lt;p&gt;This used to have a Twitter embed, but Twitter is functionally dead now, and
hilariously, it&amp;rsquo;s for the exact reason my tweet had been about: Elon is an
absolute shithead. (Also, his cars aren&amp;rsquo;t very good, as it turns out. Even the
range turned out to be inflated!)&lt;/p&gt;
&lt;h2 id=&#34;so-what-did-you-consider&#34;&gt;So what &lt;em&gt;did&lt;/em&gt; you consider?&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re interested in a messy database, I used Airtable during my search,
embedded below. You may want to click &amp;lsquo;View larger version&amp;rsquo; in the bottom right
to dig in:&lt;/p&gt;
&lt;iframe class=&#34;airtable-embed&#34;
src=&#34;https://airtable.com/embed/shrB3LoEt1NCKl3xk?backgroundColor=yellowLight&amp;viewControls=on&#34;
frameborder=&#34;0&#34; onmousewheel=&#34;&#34; width=&#34;100%&#34; height=&#34;533&#34; style=&#34;background:
transparent; border: 1px solid #ccc;&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;For the last few months, it&amp;rsquo;s been down to 4 of those cars:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chevy Bolt&lt;/li&gt;
&lt;li&gt;Hyundai Ioniq 5&lt;/li&gt;
&lt;li&gt;Kia EV6&lt;/li&gt;
&lt;li&gt;Polestar 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They share a good to great battery capacity &amp;amp; charging rate, don&amp;rsquo;t look like a
standard SUV/crossover, seem reasonably well liked, and are (or are shortly
being) sold in the US.&lt;/p&gt;
&lt;p&gt;Sadly, none of the true hatchbacks I could get here meet the &amp;ldquo;good to great
battery/charging&amp;rdquo; criteria. More modern units exist overseas, but that doesn&amp;rsquo;t
help me. So I knew we&amp;rsquo;d end up with a sedan or crossover.&lt;/p&gt;
&lt;h2 id=&#34;howd-you-end-up-on-polestar&#34;&gt;How&amp;rsquo;d you end up on Polestar?&lt;/h2&gt;
&lt;h3 id=&#34;the-competition&#34;&gt;The competition&lt;/h3&gt;
&lt;p&gt;The Mach-E is hard to get due to supply chain issues, I&amp;rsquo;m not entirely sold on
its look &amp;amp; feel, Ford corporate did shady crap around the launch of the vehicle
(embargo&amp;rsquo;ing a known underwhelming trim until post-delivery) and on top of all
that, I&amp;rsquo;d have to deal with Ford software and dealers.&lt;/p&gt;
&lt;p&gt;The Ioniq 5 is neat looking, but WAY bigger than it looks in photographs. It&amp;rsquo;s
seriously huge. I also wasn&amp;rsquo;t a fan of its cockpit when I got to sit inside,
but mostly - it&amp;rsquo;s just too big!&lt;/p&gt;
&lt;p&gt;Kia&amp;rsquo;s EV6 is shorter vertically than the Ioniq, and curves where the Ioniq uses
straight lines; but it shares the same platform - so it&amp;rsquo;s still too big around.
Plus most of the Kia dealers I spoke with did nothing to dispel their awful
reputation.&lt;/p&gt;
&lt;h3 id=&#34;polestar-itself&#34;&gt;Polestar itself&lt;/h3&gt;
&lt;p&gt;Polestar 2s look like this:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/p2-snow.png&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;In terms of its comparison to the others:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sedan shape and size is more our style than the crossovers.&lt;/li&gt;
&lt;li&gt;Had the most consistently positive reviews (and most &amp;ldquo;cons&amp;rdquo; were things that
didn&amp;rsquo;t bother me or which I knew could be patched in software).&lt;/li&gt;
&lt;li&gt;Can test drive, purchase, deliver, and service almost entirely online,
including free pickup/dropoff/loaner.
&lt;ul&gt;
&lt;li&gt;My interactions with Short Hills Polestar (both sales &amp;amp; test drive folks)
have been nothing short of great. Intelligent, responsive, accommodating, and
well informed - the polar opposite of my interactions w/ (most) local
mainstream dealers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;They partner with Volvo dealerships for service, and the one in my area is
super duper well liked.&lt;/li&gt;
&lt;li&gt;Priced competitively, and NO dealer markup BS, which is currently rampant
with the other models, especially the Hyundai/Kia (which are going for $10+K
over MSRP right now!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the time I&amp;rsquo;d emerged from my research, the Polestar was clearly calling my
name&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;the-test-drive&#34;&gt;The test drive&lt;/h2&gt;
&lt;p&gt;Note: I&amp;rsquo;m skipping some points that are repeated frequently in the reviews you
can easily find on auto blogs and YouTube; if you are considering this car at
all, absolutely look that stuff up. Ars Technica has a good article or two,
Throttle House has a couple videos, there&amp;rsquo;s a ton out there.&lt;/p&gt;
&lt;p&gt;The car I test drove was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a dual-motor / AWD model&lt;/li&gt;
&lt;li&gt;with the Plus pack (sunroof, leather seat option [installed], heated steering
wheel, better speakers, etc)&lt;/li&gt;
&lt;li&gt;but &lt;em&gt;not&lt;/em&gt; Pilot (adaptive cruise, extra cameras/sensors/safety features, 360
park cam) or Performance (I don&amp;rsquo;t drive &lt;em&gt;that&lt;/em&gt; fast)&lt;/li&gt;
&lt;li&gt;in the Moon paint.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here it is being fit tested in my garage:&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/p2-moon-garage.png&#34;&gt;
&lt;/figure&gt;

&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; those headlights.&lt;/p&gt;
&lt;h3 id=&#34;the-good&#34;&gt;The good&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;An online refrain is that &lt;strong&gt;these cars look better in person than in photos&lt;/strong&gt;
&amp;ndash; it&amp;rsquo;s true! Something about its physical presence really sells the design.
I really like it.&lt;/li&gt;
&lt;li&gt;It has &lt;strong&gt;real door handles&lt;/strong&gt;, not style-over-substance flush nonsense.&lt;/li&gt;
&lt;li&gt;The Plus pack has a &lt;strong&gt;pleasing interior design&lt;/strong&gt; with wood accents and other
attractive materials. Both the WeaveTech and (recycled) leather seating
options were comfy.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;build quality is extremely good&lt;/strong&gt;, as I&amp;rsquo;d expect from a Volvo spinoff.
Pleasingly solid door feel, minimal road noise on the highway, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Touch screen was responsive&lt;/strong&gt; and easy to use, even on the go (altering
drive settings and climate).
&lt;ul&gt;
&lt;li&gt;Do I love Android styling? No, but it&amp;rsquo;s inoffensive, and Android Automotive
was &lt;strong&gt;clearly designed for its environment&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The Google Assistant-based voice control also worked pretty well,
comparable to my (limited) experience with Siri.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gauge cluster extremely crisp and well presented&lt;/strong&gt;; plus having a map there
is great. No glancing over at phone or tablet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I &lt;em&gt;absolutely loved&lt;/em&gt; how it drove&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;The accelerator felt well tuned at all speeds.&lt;/li&gt;
&lt;li&gt;Tons of power, both when rabbiting across a busy intersection &amp;amp; passing at
speed.&lt;/li&gt;
&lt;li&gt;Cornering and changing lanes was super smooth (really, the whole ride was.)&lt;/li&gt;
&lt;li&gt;One-pedal driving is fantastic &amp;amp; if anything made me feel even more &amp;ldquo;in
tune&amp;rdquo; with the car&amp;rsquo;s movement than in a manual.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Plenty of room in the trunk, so at least we&amp;rsquo;re benefiting from the larger
vehicle size.
&lt;ul&gt;
&lt;li&gt;The Plus pack adds conveniences here such as a flip-up divider and a bunch
of hooks/nets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-less-good&#34;&gt;The less good&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The cabin&amp;rsquo;s a bit cramped coming from my Mazda, at least vertically. Many
medium/large-sized reviewers point this out and I can see why - when &lt;strong&gt;I&lt;/strong&gt;
notice my on-top-of-head sunglasses smacking the roof, that&amp;rsquo;s not a great
sign for the rest of y&amp;rsquo;all.
&lt;ul&gt;
&lt;li&gt;The center console apparently gets in the way of people who have actual
legs. Thankfully, for me it&amp;rsquo;s no worse than the similarly placed console
hosting my Mazda&amp;rsquo;s shifter, and has more storage compartments too.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The acceleration/torque from the electric motors was literally
intimidating/scary in spots. It would be &lt;em&gt;very&lt;/em&gt; easy to get into a bad
situation with this power, &lt;em&gt;very&lt;/em&gt; quickly. I&amp;rsquo;m terrified to think what the
roads will be like when &lt;strong&gt;everybody&lt;/strong&gt; has an EV!&lt;/li&gt;
&lt;li&gt;The keyfob. It&amp;rsquo;s huge (a common complaint) and the car &amp;ldquo;turns on&amp;rdquo; simply by
having it in range and a butt in the driver&amp;rsquo;s seat. My inner Pythonista would
prefer something more explicit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-bad-but-overlook-able&#34;&gt;The bad (but overlook-able)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Visibility towards the rear is dire, with thick (Volvo safety!) B pillars and
wide C pillars / tiny rear window.
&lt;ul&gt;
&lt;li&gt;A big change from my Mazda 2; I&amp;rsquo;ll have to train myself to rely more on the
mirrors &amp;amp; safety cameras.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I said I wouldn&amp;rsquo;t revisit constant refrains, but&amp;hellip;the cupholder situation is
&lt;em&gt;also&lt;/em&gt; dire - actually worse for me than larger folks (you slide the armrest
back to access the first cupholder, and open it for the second).
&lt;ul&gt;
&lt;li&gt;When in use, though, the first cupholder isn&amp;rsquo;t in my way&amp;hellip;and the Mazda
had no armrest anyways!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;result-dear-reader-i-paid-a-deposit&#34;&gt;Result: dear reader, I paid a deposit&lt;/h2&gt;
&lt;p&gt;After a final visit to Polestar&amp;rsquo;s &amp;ldquo;Space&amp;rdquo; at my local mall to check exterior &amp;amp;
interior colors/fabrics, and a night of thinking, I reserved a dual motor
&amp;ldquo;Snow&amp;rdquo; (white w/ black trim) 2022 model with the Plus and Pilot packs &amp;amp;
WeaveTech seats (we don&amp;rsquo;t like light-colored leather).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m reserving the option to switch that reservation to a single-motor once
they&amp;rsquo;re available for test driving - if it&amp;rsquo;s still enough power for me, I&amp;rsquo;ll
gain some range in exchange. Either way, I&amp;rsquo;m excited!&lt;/p&gt;
&lt;p&gt;I leave you with a photo of my automobile past and future (with a &amp;ldquo;Midnight&amp;rdquo; P2
in between) and a thanks for reading! Reach out via email or Twitter if you
have burning questions about my experience not listed here.&lt;/p&gt;
&lt;figure class=&#34;right&#34;&gt;&lt;img src=&#34;https://bitprophet.org/images/m2-p2.png&#34;&gt;
&lt;/figure&gt;</description>
    </item>
    
    <item>
      <title>Security update</title>
      <link>https://bitprophet.org/blog/2021/09/28/security-update/</link>
      <pubDate>Tue, 28 Sep 2021 14:44:31 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/09/28/security-update/</guid>
      <description>&lt;p&gt;After many years of procrastination, I finally got off my duff and set up Let&amp;rsquo;s
Encrypt for my domain &amp;ndash; with my OSS domains soon to follow (though those
already had SSL for all but the apex domain bounces, courtesy of Read the
Docs).&lt;/p&gt;
&lt;p&gt;You should now be seeing https URLs for all pages on this site, and be
redirected to https if you access the http versions.&lt;/p&gt;
&lt;h2 id=&#34;from-cloud-to-ocean&#34;&gt;From cloud to ocean&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve also migrated hosts from Rackspace Cloud to Digital Ocean, which so far
has been exceedingly pleasant. RSC wasn&amp;rsquo;t &amp;ldquo;bad&amp;rdquo; per se but
Rackspace-the-company has diverged quite a ways from its early/mid 2010s
OSS-supporting days, and I&amp;rsquo;ve continued to hear nothing but good things about
DO. The latter supports just about everything I needed at the former &amp;amp; more
besides, with a much more pleasant control panel experience to boot.&lt;/p&gt;
&lt;p&gt;For now, I simply recreated a manual VPS to largely match the old one (albeit
much newer versions of OS and packages) but I&amp;rsquo;ll probably try out their app
platform or managed k8s someday.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Github Sponsors</title>
      <link>https://bitprophet.org/blog/2021/09/26/github-sponsors/</link>
      <pubDate>Sun, 26 Sep 2021 11:10:14 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/09/26/github-sponsors/</guid>
      <description>&lt;p&gt;I finally got my bank, Stripe, and Github to play nice together, so I&amp;rsquo;m now on
&lt;a href=&#34;https://github.com/sponsors/bitprophet&#34;&gt;Github Sponsors&lt;/a&gt;. Added it to the
relevant &lt;a href=&#34;https://bitprophet.org/projects/#giving-back&#34;&gt;section of my projects page&lt;/a&gt;
too.&lt;/p&gt;
&lt;p&gt;No tiers or goals or anything like that - I&amp;rsquo;m sure the more entrepreneurial
users appreciate those features but I&amp;rsquo;m &lt;code&gt;#blessed&lt;/code&gt; with a well-paying job that
gives me some OSS time, so sponsorship/etc is largely about beer money or
one-time &amp;ldquo;you fix my bug, I give you cold hard cash&amp;rdquo; agreements.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Disabling comments</title>
      <link>https://bitprophet.org/blog/2021/09/25/disabling-comments/</link>
      <pubDate>Sat, 25 Sep 2021 11:30:14 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/09/25/disabling-comments/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve turned off Disqus comments on this site. There&amp;rsquo;s not usually enough
feedback to be worth the extra page/cognitive load. My inbox is always open!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>New: OSS project roadmap</title>
      <link>https://bitprophet.org/blog/2021/09/24/oss-project-roadmap/</link>
      <pubDate>Fri, 24 Sep 2021 15:54:21 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/09/24/oss-project-roadmap/</guid>
      <description>&lt;p&gt;Just a quick note that there is now a &lt;a href=&#34;https://bitprophet.org/projects/#roadmap&#34;&gt;roadmap&lt;/a&gt; section on my projects page. I&amp;rsquo;ll be linking to
this from the project websites ASAP.&lt;/p&gt;
&lt;p&gt;My hope is that this goes a small way towards addressing the thing where my
&lt;a href=&#34;https://bitprophet.org/blog/2020/07/02/help-wanted/&#34;&gt;reduced cadence&lt;/a&gt; makes it look like
projects are &amp;ldquo;dead&amp;rdquo; when they&amp;rsquo;re actually just sleeping (cue Monty Python
parrot reference here).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>/quit freenode</title>
      <link>https://bitprophet.org/blog/2021/05/27/goodbye-freenode/</link>
      <pubDate>Thu, 27 May 2021 11:38:08 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/05/27/goodbye-freenode/</guid>
      <description>&lt;p&gt;If you haven&amp;rsquo;t heard by now, the Freenode IRC network is under new, bad,
management. I&amp;rsquo;m locking my channels there and will be registering my project
names over on Libera.Chat.&lt;/p&gt;
&lt;h2 id=&#34;the-drama&#34;&gt;The drama&lt;/h2&gt;
&lt;p&gt;Ars Technica offers &lt;a href=&#34;https://arstechnica.com/gadgets/2021/05/freenode-irc-has-been-taken-over-by-the-crown-prince-of-korea/&#34;&gt;somewhat neutral
coverage&lt;/a&gt;
of the ongoings; there&amp;rsquo;s &lt;a href=&#34;https://gist.github.com/joepie91/df80d8d36cd9d1bde46ba018af497409&#34;&gt;a
gist&lt;/a&gt; which
is somewhat biased on the side of the now-former Freenode staff; and it&amp;rsquo;s all
over Pythonista tech Twitter, which unsurprisingly supports the latter.&lt;/p&gt;
&lt;p&gt;The most recent article I&amp;rsquo;ve seen is a &lt;a href=&#34;https://lwn.net/SubscriberLink/857140/27945432d9410262/&#34;&gt;post on Linux Weekly
News&lt;/a&gt;; it&amp;rsquo;s a free
link to what is normally a subscriber-only post, though if you&amp;rsquo;re even remotely
Linux-sysadmin-adjacent, I &lt;strong&gt;strongly&lt;/strong&gt; recommend you consider subscribing -
their content is typically top notch.&lt;/p&gt;
&lt;p&gt;On top of what&amp;rsquo;s in those links, more keeps coming out: the new staff sound
like your classic socially regressive &amp;ldquo;bad tech nerd&amp;rdquo; types, who just don&amp;rsquo;t
understand all this &amp;ldquo;horrible SJW nonsense&amp;rdquo; like banning hate speech in the
network use policy. But even if you&amp;rsquo;re a free speech zealot, the new staff has
a treat for you too: they&amp;rsquo;re taking over and deleting/editing any channel
mentioning Libera.Chat in its &lt;code&gt;/topic&lt;/code&gt;. I believe there&amp;rsquo;s a Star Wars quote
about this somewhere&amp;hellip;systems&amp;hellip;fingers?&lt;/p&gt;
&lt;h2 id=&#34;immediate-action&#34;&gt;Immediate action&lt;/h2&gt;
&lt;p&gt;Rather than support a now-toxic community, I&amp;rsquo;ll be setting &lt;code&gt;+m&lt;/code&gt; (you can join
but not post anything) on my Freenode channels, and replacing their topics with
a link to this post (to avoid the auto-topic-edit mentioned above).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll also register the relevant namespaces on &lt;a href=&#34;https://libera.chat&#34;&gt;https://libera.chat&lt;/a&gt; - &lt;strong&gt;but&lt;/strong&gt; I
may not open them for business immediately, instead removing the mention of IRC
from my contact pages. Read on for why.&lt;/p&gt;
&lt;h2 id=&#34;good-memories&#34;&gt;Good memories&lt;/h2&gt;
&lt;p&gt;I feel like I was using Freenode before the below date and didn&amp;rsquo;t bother
registering my nick until then, but the stats for &lt;code&gt;bitprophet&lt;/code&gt; (or
&lt;code&gt;bitprophet_&lt;/code&gt; because shenanigans) just now when I signed in for the last time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-NickServ- Registered : Sep 15 15:07:53 2006 (14y 36w 5d ago)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;My earliest recollection of consistent/regular IRC use (vs telnet-based stuff
like MUDs and talkers, which I used as far back as the early 1990s) are
chatting in &lt;code&gt;#django&lt;/code&gt; on Freenode in 2005-2006 when both the framework and my
career were largely brand new. The contacts and friendships I made during that
time (up until the late 00s or early 10s, when I stopped using Django as much)
have informed much of my career and tech-social life.&lt;/p&gt;
&lt;h2 id=&#34;goodbye-irc&#34;&gt;Goodbye, IRC?&lt;/h2&gt;
&lt;p&gt;So it&amp;rsquo;s with no small amount of sadness that I contemplate hanging up my IRC
hat for good. Why? I&amp;rsquo;ve already mostly cut it out of my life for various
reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I used it very frequently the later half of the 2000s (including opening
channels for my OSS projects), and if you&amp;rsquo;ve ever chatted with me in realtime
anywhere, you know I am VERY CHATTY.&lt;/li&gt;
&lt;li&gt;The first half of the 2010s I was very on-again-off-again, because&amp;hellip;I
realized that propensity to chat nonstop was having impacts on my ability to
focus. So I treated it more mindfully and only connected when I had a
specific reason to chat, or was on an OSS-focus day.&lt;/li&gt;
&lt;li&gt;By the mid 2010s, I was really starting to feel burnt out, and the thought of
my users inadvertently nerd-sniping me with realtime support requests (which
I&amp;rsquo;m terrible about dropping everything for) meant I&amp;hellip;just stayed logged off
most of the time.&lt;/li&gt;
&lt;li&gt;It also feels like the Internet has changed; fewer and fewer newbies seem to
stumble across IRC and instead prefer to contact folks via email, Twitter or
just the issue tracker. (Newer projects set up things like Discord, etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, I&amp;rsquo;m still in that &amp;ldquo;almost always logged off&amp;rdquo; mode &amp;ndash; my poor bouncer
loyally slurping up everything folks say, for me to wearily ignore the
invariably-incredibly-stale mentions of my nick (OSS, social or otherwise) if I
do log in.&lt;/p&gt;
&lt;h2 id=&#34;almost-but-not-quite&#34;&gt;Almost but not quite&lt;/h2&gt;
&lt;p&gt;Given the above, the Freenode news feels like a great opportunity to tie things
off. I&amp;rsquo;m going to shut down my personal bouncer for sure, and as noted, I&amp;rsquo;m
putting my Freenode channels on ice.&lt;/p&gt;
&lt;p&gt;However, I hope eventually things will change, and even if they don&amp;rsquo;t, I don&amp;rsquo;t
want to close off communications avenues for anyone who might pick up my
projects if I put them down.&lt;/p&gt;
&lt;p&gt;Thus the registrations on Libera.Chat. Same channels as on Freenode (&lt;code&gt;#fabric&lt;/code&gt;,
&lt;code&gt;#paramiko&lt;/code&gt;, &lt;code&gt;#invoke&lt;/code&gt;). But they&amp;rsquo;ll be locked (&lt;code&gt;/mode +si&lt;/code&gt; - invite-only and
not listed) for now, to avoid user questions being asked with no reasonable
chance of an answer. (This isn&amp;rsquo;t to say that sometimes answers can&amp;rsquo;t be
supplied by other users - but most of the time the questions are requests for
authority, which, hi, is usually not present.)&lt;/p&gt;
&lt;p&gt;For my friends in the couple social channels I was on, I may return someday,
probably in a more &amp;ldquo;realistic&amp;rdquo; fashion (no bouncer - just a local client).
Clearly me pretending to be &amp;ldquo;always-on&amp;rdquo; does nobody any serious favors.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Farewell, Python 2</title>
      <link>https://bitprophet.org/blog/2021/02/25/byethon2/</link>
      <pubDate>Thu, 25 Feb 2021 12:01:31 -0500</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2021/02/25/byethon2/</guid>
      <description>&lt;p&gt;Long story short: I&amp;rsquo;m finally starting to drop Python 2 (and a few slightly
older Python 3s) from my projects, in a phased manner. Background and details
follow.&lt;/p&gt;
&lt;h2 id=&#34;a-brief-timeline&#34;&gt;A brief timeline&lt;/h2&gt;
&lt;p&gt;Writing this out made me feel &lt;code&gt;#old&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2004:&lt;/strong&gt; I&amp;rsquo;m introduced to Python (2.2/2.3) at the end of my time serving a
CS degree.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2008:&lt;/strong&gt; My OSS career kicks into gear as I take over Fabric. Python 2.4 and
2.5 were stable, 2.6 comes out in the fall, and 3.0 in winter.
&lt;ul&gt;
&lt;li&gt;3.x has been around the &lt;em&gt;entire time&lt;/em&gt; I&amp;rsquo;ve maintained Fabric!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2010:&lt;/strong&gt; Python 2.7 is released. That&amp;rsquo;s 11 years ago!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2012:&lt;/strong&gt; Python 3.3, considered the first &amp;ldquo;really usable&amp;rdquo; version
(especially for 2+3 codebases), comes out.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2013-2014:&lt;/strong&gt; Invoke and Fabric 2 start development, with Python 3 support
right out the gate; Paramiko gains Python 3 support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2016:&lt;/strong&gt; Python 3.6 is is born, with f-strings and ordered dicts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2018-2019:&lt;/strong&gt; Every widespread Linux distribution switches to Python 3, if
they hadn&amp;rsquo;t already.
&lt;ul&gt;
&lt;li&gt;The exception is RHEL/CentOS, which switches in 2020.&lt;/li&gt;
&lt;li&gt;Python 3.4 reaches EOL (End of Life) in mid 2019.&lt;/li&gt;
&lt;li&gt;Around this time (if not sooner) many Python 3-only packages declare Python
3.6 as their baseline supported version.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2020:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Python 2, in its entirety, is EOL&amp;rsquo;d in January. &lt;em&gt;This is an ex-interpreter!&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Python 3.5 reaches EOL.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bitprophet.org/blog/2020/07/02/help-wanted/&#34;&gt;I admit burnout&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Early 2021:&lt;/strong&gt; Pip drops support for Python 2, as does Cryptography (a
Paramiko dependency which is unsafe to pin for long).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here we are.&lt;/p&gt;
&lt;h2 id=&#34;but-why&#34;&gt;But why???&lt;/h2&gt;
&lt;p&gt;The timeline is a bit implicit; let&amp;rsquo;s be explicit. Why am I doing this now?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It&amp;rsquo;s past time&lt;/strong&gt;. I&amp;rsquo;m quite conservative on the maintainer spectrum, but by
now &amp;ndash; with the interpreter, package installer, many/most packages, and
most/all Linux distributions &lt;em&gt;all&lt;/em&gt; leaving Python 2 behind &amp;ndash; I&amp;rsquo;m in good
company.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It&amp;rsquo;s decreasingly likely that my software is the first thing pushing you to
upgrade.&lt;/strong&gt; If you&amp;rsquo;re still on Python 2 in 2021, you&amp;rsquo;re already committed to a
lack of updates from all of the above sources. I&amp;rsquo;m just one more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The iron triangle has shifted.&lt;/strong&gt; &lt;a href=&#34;https://bitprophet.org/blog/2013/08/22/software-releases/&#34;&gt;An old post&lt;/a&gt; is still relevant; ease of maintenance (because
burnout) and speed (the current release cadence is unacceptable) are tipping
the scales against stability (in the &amp;ldquo;things don&amp;rsquo;t change&amp;rdquo; sense).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most downloads have been Python 3 for years.&lt;/strong&gt; Going by
&lt;a href=&#34;https://pypistats.org&#34;&gt;PyPIStats&lt;/a&gt;, even the most conservative userbase I
answer to (surprisingly Fabric, not Paramiko) is only 33% Python 2.
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t have a useful breakdown, but I&amp;rsquo;d also guess that 33% is heavily
slated towards Fabric 1 users, who are already largely unsupported.&lt;/li&gt;
&lt;li&gt;Paramiko is down to &amp;lt;=20% Python 2.&lt;/li&gt;
&lt;li&gt;Invoke (and by extension, most users of Fabric 2) has always been &amp;lt;=10%&lt;/li&gt;
&lt;li&gt;Alabaster is at 10%; etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Combining the above two: &lt;strong&gt;I&amp;rsquo;d prefer to think of this as improving
quality and release cadence for a majority of users&lt;/strong&gt;, instead of worrying
about its impacts on a recalcitrant minority.&lt;/li&gt;
&lt;li&gt;Finally: &lt;strong&gt;nothing&amp;rsquo;s getting deleted.&lt;/strong&gt; Same as any backwards incompatible
release: existing Python 2-supporting releases remain on PyPI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-exactly&#34;&gt;How, exactly?&lt;/h2&gt;
&lt;p&gt;I am planning a &lt;strong&gt;phased removal&lt;/strong&gt; of support for Pythons &lt;strong&gt;2.7&lt;/strong&gt;, &lt;strong&gt;3.4&lt;/strong&gt; and
&lt;strong&gt;3.5,&lt;/strong&gt; as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first step will be to &lt;strong&gt;remove CI support&lt;/strong&gt; for old Pythons.
&lt;ul&gt;
&lt;li&gt;This will happen as I migrate to CircleCI from the now-defunct Travis-CI
over the next few weeks/months.&lt;/li&gt;
&lt;li&gt;Doing it this way saves me from reproducing a lot of frustrating busywork
in my scripting, and also slims the test matrix &amp;ndash; which is important now
that CI providers track how much CPU time we burn!&lt;/li&gt;
&lt;li&gt;But it means that there&amp;rsquo;s still a short grace period for users (see below),
as my local env will still be doing basic Python 2 test runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The next step, which may happen at the same time, is to &lt;strong&gt;update development
dependencies to assume Python 3.6+&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;There will likely be &lt;strong&gt;1-2 more release cycles which include Python 2
artifacts&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;This works because I still generate those artifacts locally and not from
CI (yet).&lt;/li&gt;
&lt;li&gt;Included in this is Fabric 1&amp;rsquo;s still-planned Python 3 support merge, for a
final release of that line. This provides users an upgrade path: Python 3,
then later Fabric 2+.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, the last trio of changes will happen around the same time:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project tooling will drop old Python support&lt;/strong&gt;, including build/publish
tasks and packaging metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python 2-related syntax will be removed from the code itself&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versions of most packages will bump their major qualifier&lt;/strong&gt; to signify the
change (though it&amp;rsquo;s unlikely any other backwards incompatible changes will
occur):
&lt;ul&gt;
&lt;li&gt;Invoke will go to 2.0&lt;/li&gt;
&lt;li&gt;Paramiko will go to 3.0&lt;/li&gt;
&lt;li&gt;Fabric will remain on 2.x because it&amp;rsquo;s got a more complicated history here
&lt;ul&gt;
&lt;li&gt;thus, this will probably be Fabric 2.8 or 2.9, with 2.7 or 2.8 being the
last Python 2-supporting release.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Project Updates, 2020.09</title>
      <link>https://bitprophet.org/blog/2020/09/18/project-updates-2020-09/</link>
      <pubDate>Fri, 18 Sep 2020 16:26:37 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2020/09/18/project-updates-2020-09/</guid>
      <description>&lt;p&gt;A quick followup to my &lt;a href=&#34;https://bitprophet.org/blog/2020/07/02/help-wanted/&#34;&gt;previous missive&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;triage&#34;&gt;Triage&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve lined up a handful of other Github users for each of my major repos,
granted them the triage bit in most cases, and am easing into a weekly review cadence.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In one case, I gave a couple folks more privileges as I&amp;rsquo;ve already
collaborated with them for a while - though until more of the below is
taken care of, it&amp;rsquo;s largely symbolic.&lt;/li&gt;
&lt;li&gt;Since the folks involved all have their own lives to live, the speed at
which things are moving differs between projects - but the approach is
already paying off in at least one area so it&amp;rsquo;s a good sign.&lt;/li&gt;
&lt;li&gt;Trying to figure out (ideally limited) behind the scenes discussion is a
challenge - I&amp;rsquo;m using Github&amp;rsquo;s newish org/team-level discussions feature
for now, but it&amp;rsquo;s basically just a repositioned version of their Issues
framework, which isn&amp;rsquo;t superb.
&lt;ul&gt;
&lt;li&gt;Naturally, other tools have their own issues - either they&amp;rsquo;re
proprietary (Slack), require manual hosting labor (most OSS solutions),
or are too easy to lose track of / very difficult to backfill (email).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;feature-release-planning&#34;&gt;Feature release planning&lt;/h2&gt;
&lt;p&gt;As part of the above, I&amp;rsquo;ve got a small list of low-difficulty high-impact
Paramiko PRs lined up to review for its next feature release.&lt;/p&gt;
&lt;p&gt;However! I want to give Fabric and Invoke some more love first, as they haven&amp;rsquo;t
had any releases yet this year. Fabric 2 especially needs some features added
so it&amp;rsquo;s not quite so sad looking - heck, in replying to a mailing list email
earlier today, I was reminded of multiple missing features (large AND small)
that are just crying out to be hacked on.&lt;/p&gt;
&lt;p&gt;(A whole &amp;rsquo;nother blog post: the uncomfortable tension between &amp;ldquo;I should hack on
$thing&amp;rdquo; and &amp;ldquo;but what if somebody has already filed a PR for $thing and it&amp;rsquo;s
not quite what I had in mind?&amp;rdquo;. It makes &amp;ldquo;just getting stuff done&amp;rdquo; on OSS that
much more painful for us maintainer types&amp;hellip;)&lt;/p&gt;
&lt;h2 id=&#34;admin-changes&#34;&gt;Admin changes&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m in the middle of trying out a pile of administrative changes on a smaller
project (&lt;a href=&#34;https://github.com/bitprophet/lexicon&#34;&gt;Lexicon&lt;/a&gt;) which should give me
a useful checklist to roll through for the bigger ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As noted in the last post, I am trying out Circle-CI, both because Travis
fired all their senior staff a few years ago, and because Circle has some legit
neat tech that Travis doesn&amp;rsquo;t (or didn&amp;rsquo;t last I looked - they do seem to have
changed their .yml some lately).
&lt;ul&gt;
&lt;li&gt;E.g. using orbs to refactor my various CI YAML files seems like it could
be a decent win, as is the option to use custom Docker containers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m likely moving from &lt;code&gt;setup.py&lt;/code&gt; to Poetry-driven &lt;code&gt;pyproject.toml&lt;/code&gt; after
some success using it at the dayjob.
&lt;ul&gt;
&lt;li&gt;It has a lot of rough edges still (yes, like I should talk) but so far
none that can&amp;rsquo;t be worked around, and the core benefits of smarter
dependency management and streamlined environment use are something I
immediately missed when coming back to OSS from work projects.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a chance some of my more complex &lt;code&gt;setup.py&lt;/code&gt; files will not be
amenable to this change, but I&amp;rsquo;ll find out. The overall packaging world is
moving away from executable packaging code either way, so&amp;hellip;&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m anticipating this throwing a wrench in the works of some/all OS
package maintainers.
&lt;ul&gt;
&lt;li&gt;My relationship to such folks has not been as concrete as I&amp;rsquo;d prefer
anyhow; if this describes you, please email me to say hi! I need to
build a contact list.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Also as noted prior, renaming &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;eyes-on-the-collaboration-prize&#34;&gt;Eyes on the collaboration prize&lt;/h3&gt;
&lt;p&gt;Building on the above, I want to make it clear that the NEXT batch of admin
changes will be aimed at streamlining collaboration with both privileged and
unprivileged contributors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;More rigorous CI: automate as much as possible so there&amp;rsquo;s less &amp;ldquo;please add
docs here&amp;rdquo; type busywork for triagers, myself or others, and less frustrating
ticket tennis for PR submitters (or at least, they get to play tennis with an
immediately responsive CI result or bot instead of every-few-days maintainer
chat).&lt;/li&gt;
&lt;li&gt;Ticket bots. If only so the numbers of open things don&amp;rsquo;t look so heinous. I
don&amp;rsquo;t love the sweep-it-under-the-carpet feelings here, but it helps nobody
to have tickets moulder forever in an open state if they&amp;rsquo;ll never rise to the
top of the priority stack.&lt;/li&gt;
&lt;li&gt;Automated releasing: I&amp;rsquo;ve already got Invoke task collections for this that
make releasing mostly turnkey. However I need to remove that &amp;ldquo;mostly&amp;rdquo;
qualifier, so that releasing is even easier for me and eventually others. I
also need to tie releases into other APIs such as Tidelift.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>HELP WANTED</title>
      <link>https://bitprophet.org/blog/2020/07/02/help-wanted/</link>
      <pubDate>Thu, 02 Jul 2020 13:30:00 -0400</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2020/07/02/help-wanted/</guid>
      <description>&lt;h2 id=&#34;the-first-step&#34;&gt;The first step&lt;/h2&gt;
&lt;p&gt;is admitting you have a problem; so with that in mind:&lt;/p&gt;
&lt;p&gt;Hi. My name&amp;rsquo;s Jeff, I maintain &lt;a href=&#34;https://bitprophet.org/projects/&#34;&gt;several OSS projects you may be familiar
with&lt;/a&gt;&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;, and &lt;strong&gt;I&amp;rsquo;m burned out&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I lie awake at night, unable to sleep, crippled by guilt. During the day, it&amp;rsquo;s
anxiety and fear that cripple instead, making the thought of facing the issue
tracker unbearable.&lt;/p&gt;
&lt;p&gt;Development on my projects has slowed far more than I ever intended, and while
I have excuses&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;, push has clearly come to shove. Something must change.&lt;/p&gt;
&lt;p&gt;Until now, I&amp;rsquo;ve been a solo maintainer for various reasons, primarily a
combination of &lt;strong&gt;extreme pickiness&lt;/strong&gt; (re: code quality, formatting, defensive
coding, etc) and &lt;strong&gt;trust issues&lt;/strong&gt; (I have difficulty trusting others to exhibit
that same pickiness).&lt;/p&gt;
&lt;p&gt;With the burnout I&amp;rsquo;m feeling, it&amp;rsquo;s sometimes tempting to give up and walk away.
But even that would require trusting others with the future of my projects!
Surely I can act less drastically first &amp;ndash; extending trust in ways that will
get me back to productivity.&lt;/p&gt;
&lt;h2 id=&#34;walking-before-running&#34;&gt;Walking before running&lt;/h2&gt;
&lt;p&gt;My biggest issue? Issues! There&amp;rsquo;s too much feedback to handle alone &lt;em&gt;and&lt;/em&gt; get
meaningful work done. The &lt;strong&gt;most valuable help&lt;/strong&gt; I can get is &lt;strong&gt;ticket triage&lt;/strong&gt;
(and to a lesser degree, &lt;strong&gt;PR code review&lt;/strong&gt;) so that I can focus on development
and direction.&lt;/p&gt;
&lt;p&gt;At a minimum, I need scouts, people who can alert me to significant events:
serious new bug reports, flurries of interest in an open ticket, or well
crafted PRs that are ready to merge. I&amp;rsquo;ll continue to keep my eyes off the
notification queue and trust that these new collaborators will keep me
informed.&lt;/p&gt;
&lt;p&gt;Beyond that, I&amp;rsquo;d love to utilize Github&amp;rsquo;s triage role: having others labeling
issues, closing duplicate or noise tickets, and asking submitters for details
or PR alterations. I may continue doing this sort of thing myself, but
typically only on tickets that otherwise cross my desk.&lt;/p&gt;
&lt;h3 id=&#34;you&#34;&gt;You&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s easiest to start with those I recognize from existing engagement, and I&amp;rsquo;ll
be reaching out today to folks who expressed prior interest. If you think
you&amp;rsquo;re in that group and didn&amp;rsquo;t hear from me, please let me know (and accept my
apologies for the oversight)!&lt;/p&gt;
&lt;p&gt;For everyone else: if you can show you know your way around Python, the problem
domains involved, and the projects themselves &amp;ndash; feel free to introduce
yourself, briefly explain how you believe you can help (or just point to
existing contributions!), and let me know which project(s) you&amp;rsquo;re interested in
supporting.&lt;/p&gt;
&lt;h3 id=&#34;me&#34;&gt;Me&lt;/h3&gt;
&lt;p&gt;The best way to get ahold of me is email to &lt;code&gt;jeff (at) bitprophet [dot] org&lt;/code&gt;;
please put something like &amp;ldquo;Re: triage blog post&amp;rdquo; in the subject. Or use &lt;a href=&#34;mailto:jeff@bitprophet.org?subject=Re:%20triage%20blog%20post&#34;&gt;this
handy mailto:
link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I usually respond within a few days (more quickly on Fridays, which are my OSS
time).&lt;/p&gt;
&lt;h3 id=&#34;us&#34;&gt;Us&lt;/h3&gt;
&lt;p&gt;I don&amp;rsquo;t have a clear picture yet of exactly how collaboration will occur
(outside of Github-level features such as assignment and milestones). At the
start I&amp;rsquo;m likely to try leveraging per-project email groups, or chat like IRC
or Slack.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m open to other suggestions too, though unless something has changed
recently, this (semiprivate group discussions) is still a poorly solved area
for OSS projects.&lt;/p&gt;
&lt;h2 id=&#34;where-to-go-next&#34;&gt;Where to go next&lt;/h2&gt;
&lt;p&gt;Ideally, once I&amp;rsquo;ve learned to trust others with triage and review, I can take
further steps until ending up with full-on co-maintainers. Time will tell.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll leave off with some quick roadmaps.&lt;/p&gt;
&lt;h3 id=&#34;short-term&#34;&gt;Short term&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Get folks set up with the triage role&amp;hellip;&lt;/li&gt;
&lt;li&gt;With their help, identify and tackle any new-to-me serious issues that have
appeared in the last 6-9mo, whether that&amp;rsquo;s bugs, broken dependencies, Python
3.8 compat, or whatever.&lt;/li&gt;
&lt;li&gt;Explore migrating to Circle-CI from Travis-CI, for various reasons
(such as lack of confidence in the latter&amp;rsquo;s future after firing most of their
senior talent post-acquisition).
&lt;ul&gt;
&lt;li&gt;Possibly Github Actions, but I&amp;rsquo;d rather not make myself even more
dependent on that platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Rename &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; &amp;ndash; something I&amp;rsquo;d intended to do sooner, but there
is absolutely no time like the present!&lt;/li&gt;
&lt;li&gt;Oversee merging of &amp;lsquo;Fabric3&amp;rsquo; into Fabric&amp;rsquo;s v1 line; this is my olive branch
to folks struggling with Python 3 but who are frustrated with the pace of
Fabric 2 dev the last couple years.
&lt;ul&gt;
&lt;li&gt;This &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; mean that Fabric 1 is going to see more feature work; it&amp;rsquo;s
just housekeeping.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;medium-term&#34;&gt;Medium term&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Get back to Fabric 2 feature work; I still want users to migrate off of v1
eventually!&lt;/li&gt;
&lt;li&gt;Execute long-planned architectural improvements for Paramiko, eg improved
authentication flow.&lt;/li&gt;
&lt;li&gt;Ditto Invoke, again features that have been in the wings for years, such as
task dependencies and intertask communication.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;The &amp;lsquo;big three&amp;rsquo; being &lt;a href=&#34;https://www.fabfile.org&#34;&gt;Fabric&lt;/a&gt;,
&lt;a href=&#34;https://www.paramiko.org&#34;&gt;Paramiko&lt;/a&gt;, and &lt;a href=&#34;https://www.pyinvoke.org&#34;&gt;Invoke&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Even before the current double troubles of COVID-19 and &amp;ldquo;ah yes, my
country really IS descending further into a police state&amp;rdquo;, I was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;still reeling from last year&amp;rsquo;s disruptive cross country move&lt;/li&gt;
&lt;li&gt;trying to get used to a new job in a new sector&lt;/li&gt;
&lt;li&gt;attempting to buy, fix up and furnish my first ever house&lt;/li&gt;
&lt;li&gt;grappling with moderate depression&lt;/li&gt;
&lt;/ul&gt;
&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Longest. Onboarding. Ever!</title>
      <link>https://bitprophet.org/blog/2019/02/03/longest-onboarding-ever/</link>
      <pubDate>Sun, 03 Feb 2019 12:05:42 -0800</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2019/02/03/longest-onboarding-ever/</guid>
      <description>&lt;p&gt;Some quick updates on my personal status and whereabouts for Q1 2019!&lt;/p&gt;
&lt;p&gt;Today marks my return to air travel after landing &lt;a href=&#34;https://bitprophet.org/blog/2018/12/18/new-year-new-job-old-haunts/&#34;&gt;a new job&lt;/a&gt; &amp;ndash; I&amp;rsquo;m heading eastwards
(blessedly, after the recent polar vortex has subsided&amp;hellip;) and will be spending
a lot of time away from home and family. The later half of my itinerary isn&amp;rsquo;t
yet set in stone, but it looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flying to Chicago today (Sunday, February 3rd) to spend a work-week
onboarding at my new job, whose headquarters is in the River North district
of downtown.
&lt;ul&gt;
&lt;li&gt;This is only my second ever visit to Chicago, and I&amp;rsquo;m hoping to see
slightly more of it than my last overnight visit &amp;ndash; though I&amp;rsquo;m sure most of
my energy will be consumed by the stresses of starting the new gig, being
jet lagged, and being cold.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I then fly to NYC on Saturday (the 9th) to spend another week getting
to know my soon-to-be-local satellite office, based at the top end of Madison
Square Park (that&amp;rsquo;s the Park, not the Garden).
&lt;ul&gt;
&lt;li&gt;My housing is in a corporate apartment in Jersey City&amp;rsquo;s Newport
neighborhood. It&amp;rsquo;s an area I&amp;rsquo;m relatively familiar with, and makes a good
apartment hunting base &amp;ndash; see below.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The following weekend and partial work week, I&amp;rsquo;ll get to see my wife again,
as she&amp;rsquo;s flying out to join me in seeking an apartment. (We&amp;rsquo;ll be looking in
New Jersey, because that&amp;rsquo;s how we roll.)&lt;/li&gt;
&lt;li&gt;After she returns to California, I spend another week and a half ramping up
at work, still living in Jersey City and posted at the NYC office.&lt;/li&gt;
&lt;li&gt;Most likely, I&amp;rsquo;ll then fly &lt;em&gt;back&lt;/em&gt; to Chicago for the first two weeks of March
to catch my company&amp;rsquo;s periodic &amp;ldquo;here&amp;rsquo;s how this place works&amp;rdquo; firm-wide series
of meetings.
&lt;ul&gt;
&lt;li&gt;A side option is to stay in NY, start setting up my anticipated new
apartment, and videoconference to the Chicago folks &amp;ndash; but I&amp;rsquo;m not the
handiest person when it comes to installing furniture, and it&amp;rsquo;d be nice to
get more face-time with the bulk of my new team.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, I expect to return to California for the last half of March, working
remotely and finalizing our move &amp;ndash; capping it off with a week+ drive east to
get my car, cats and valuables to New Jersey.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re an old friend who lives in Chicago or New York, or live there and
want to become a new friend, hit me up &amp;ndash; just in case I have some energy left
over for you. (No promises!)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>New Year, New Job, Old Haunts</title>
      <link>https://bitprophet.org/blog/2018/12/18/new-year-new-job-old-haunts/</link>
      <pubDate>Tue, 18 Dec 2018 17:10:12 -0800</pubDate>
      <author>Jeff Forcier</author>
      <guid>https://bitprophet.org/blog/2018/12/18/new-year-new-job-old-haunts/</guid>
      <description>&lt;h2 id=&#34;leaving-one-opportunity&#34;&gt;Leaving one opportunity&amp;hellip;&lt;/h2&gt;
&lt;p&gt;The last couple months, I&amp;rsquo;ve been &lt;a href=&#34;https://twitter.com/bitprophet/status/1062828811761287168&#34;&gt;on the job
market&lt;/a&gt;; my previous
employer, mLab, was acquired by MongoDB and there wasn&amp;rsquo;t a good role for a
full-time Pythonista with my particular open source baggage on the other side
of that transition.&lt;/p&gt;
&lt;p&gt;mLab was a great place to work and (per my &lt;a href=&#34;https://bitprophet.org/blog/2016/07/05/rejoining-the-workforce/&#34;&gt;2016 post&lt;/a&gt;) a staunch supporter of my OSS, both
re: time on the clock and real-world use cases. Fabric 2 might not have seen
the light of day otherwise!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been absolutely &lt;code&gt;#blessed&lt;/code&gt; with a deluge of job leads big and small, far
and wide; the process has been exhausting, but also invaluable both for
connections and gauging the state of the industry. (Actually industries, plural
&amp;ndash; not just tech, but finance, healthcare, rocketry and more!)&lt;/p&gt;
&lt;h2 id=&#34;and-joining-another&#34;&gt;&amp;hellip;and joining another&lt;/h2&gt;
&lt;p&gt;As of today, I&amp;rsquo;ve accepted an offer to join a high-frequency trading company
called &lt;a href=&#34;https://www.jumptrading.com/&#34;&gt;Jump Trading&lt;/a&gt;, out of their New York City
office. I&amp;rsquo;ll start in early February.&lt;/p&gt;
&lt;p&gt;This has a lot of ramifications!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I&amp;rsquo;m moving back to the NYC metro area.&lt;/strong&gt; Going to miss the heck out of
Northern California, though I think that&amp;rsquo;s a topic for its own post. But
it&amp;rsquo;ll be nice to be closer to family, and I won&amp;rsquo;t miss the background
fretting about the West Coast&amp;rsquo;s particular flavors of natural disasters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chicago and London friends may see more of me.&lt;/strong&gt; The company has offices in
these cities as well as New York (plus others even farther afield), and I
expect to travel to them occasionally. Excited to learn new places!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My open source will continue receiving support.&lt;/strong&gt; One of the biggest
reasons I took this job is that I&amp;rsquo;m being given explicit time to work on my
Python tooling, and there are internal users to provide insight and feedback
as well.
&lt;ul&gt;
&lt;li&gt;This should help Fabric 2 get to feature parity with v1; allow some big
Paramiko feature additions; and perhaps more!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&amp;rsquo;ll be broadening my horizons.&lt;/strong&gt; One thing that attracted me to Jump is
the opportunity to work not just on typical tech company systems/operations
toolsets (CI/CD pipelines, deployment tools, Kubernetes and Golang, etc) but
to also learn about areas of computing I don&amp;rsquo;t normally travel in (nontrivial
networking, high performance/supercomputing, kernel development, to list only
a few).
&lt;ul&gt;
&lt;li&gt;Even if I don&amp;rsquo;t end up working in those subfields directly, learning from
folks who do should help me get better at my overall job.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Level up my understanding of the world.&lt;/strong&gt; If you know me, this is not an
area I&amp;rsquo;ve expressed interest in before. I&amp;rsquo;m not expecting this role to change
my anti-corporate/capitalist leanings much &amp;ndash; and I wouldn&amp;rsquo;t have taken this
job if I thought they were close to any of the outright predatory aspects of
the field &amp;ndash; but I&amp;rsquo;m looking forward to learning more about the sector. It
&lt;em&gt;is&lt;/em&gt; fascinating stuff from a purely mathematical and sociological
perspective.
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m also looking forward to breaking out of my tech bubble a little bit.
It&amp;rsquo;s not really a coincidence that one of my other strong offers was from
another not-directly-tech field &amp;ndash; healthcare.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2019 will, at long last, be the Year of the Linux Desktop&lt;/strong&gt;. Jump&amp;rsquo;s IT
department doesn&amp;rsquo;t currently support macOS, so I&amp;rsquo;ll be at least partially
returning to the land of window managers, unpolished UX, ugly fonts, and
non-homogenous keyboard shortcuts.
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m going to miss unlocking my workstation with my new Apple Watch, and
apologies in advance for all the &lt;code&gt;#waahmbulance&lt;/code&gt; tweets.&lt;/li&gt;
&lt;li&gt;On the other hand, I&amp;rsquo;d be lying if I said I hadn&amp;rsquo;t been gently
considering such a return for years now, so it&amp;rsquo;ll be an interesting trial
run if nothing else. My personal system will of course remain a MacBook Air
for the time being.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;onwards-to-a-new-year&#34;&gt;Onwards to a new year&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re still working out all the details, but I expect to be moving my family to
the NYC area (by which I mean New Jersey) sometime in February and/or March.
For my Bay Area friends, please reach out and let&amp;rsquo;s find some time to say
goodbye. For my New York friends, past and present, hi! Let&amp;rsquo;s get reacquainted
after I move.&lt;/p&gt;
&lt;p&gt;To the users of my projects, apologies for the slower release cadence the last
few months &amp;ndash; as you can see, it&amp;rsquo;s been for a good cause! I&amp;rsquo;ll probably do some
releasing in January, and things should get back to some value of normal once
I&amp;rsquo;m settled in at the new gig.&lt;/p&gt;
&lt;p&gt;May you all have a good winter holiday and a great 2019!&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
