<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Programming on A. Jesse Jiryu Davis</title>
    <link>https://emptysqua.re/blog/category/programming/</link>
    <description>Recent content in Programming on A. Jesse Jiryu Davis</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>jesse@emptysquare.net (A. Jesse Jiryu Davis)</managingEditor>
    <webMaster>jesse@emptysquare.net (A. Jesse Jiryu Davis)</webMaster>
    <copyright>(c) A. Jesse Jiryu Davis, all rights reserved.</copyright>
    <lastBuildDate>Wed, 19 Nov 2025 02:53:40 +0000</lastBuildDate>
    <atom:link href="https://emptysqua.re/blog/category/programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>This Senior Staff Engineer Vibe-Coded for the First Time, What Happened Next Will Shock You</title>
      <link>https://emptysqua.re/blog/first-time-vibecoding/</link>
      <pubDate>Wed, 19 Nov 2025 02:53:40 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/first-time-vibecoding/</guid>
      <description>&lt;p&gt;Actually it won&amp;rsquo;t shock you. Spoiler alert: Coding with AI is a skill. It&amp;rsquo;s annoying but efficient. My prior experience handwriting code helped.&lt;/p&gt;&#xA;&#xA;&lt;img src=&#34;medieval.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;&lt;em&gt;By Gemini, obviously. This is the first and only post I&amp;rsquo;ll ensloppify with AI &amp;ldquo;art.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I started programming seriously when I was in college, in the late 90s. Basic autocomplete in Microsoft Visual C++ was the state of the art back then. I spent the next couple decades meticulously laying out my code like a 16th-Century typesetter, crafting each line with an artisan&amp;rsquo;s pride.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How My Blog Handles Math and Images in HTML, Atom, and Email in 2025</title>
      <link>https://emptysqua.re/blog/math-images-rss-hugo/</link>
      <pubDate>Sun, 31 Aug 2025 08:43:59 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/math-images-rss-hugo/</guid>
      <description>&lt;p&gt;I want to explain computer science on my blog, and show photos, and I want every article to look exquisite. My goal is to display math and images (especially SVGs) as beautifully as possible for people who read my articles on my site, and via an Atom feed and email. This is hard with today&amp;rsquo;s technology, plus I don&amp;rsquo;t have real frontend or design skills.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve recently started &lt;a href=&#34;https://emptysqua.re/blog/series/knowledge&#34;&gt;a series of articles about epistemology and distributed systems&lt;/a&gt;, which includes diagrams and equations that broke my existing publication system. I came up with a new stack of kludges that works for me. I&amp;rsquo;ll write them down here so I remember, and perhaps you&amp;rsquo;ll learn something you can use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimizing a Meditation Retreat with a SAT Solver</title>
      <link>https://emptysqua.re/blog/optimizing-a-meditation-retreat-with-a-sat-solver/</link>
      <pubDate>Tue, 29 Jul 2025 22:00:52 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/optimizing-a-meditation-retreat-with-a-sat-solver/</guid>
      <description>&lt;img src=&#34;ajdavis_20240104_000096740001.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;Well, a SAT solver can optimize the retreat &lt;em&gt;schedule&lt;/em&gt;. A meditation retreat as a whole is a living creature, beyond any individual&amp;rsquo;s control. But I can provide a schedule that functions smoothly and reduces distractions. I used Python and &lt;em&gt;integer programming&lt;/em&gt;, a technique for mathematical optimization.&lt;/p&gt;&#xA;&lt;h1&gt;The problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&#34;https://villagezendo.org&#34;&gt;Village Zendo&lt;/a&gt; holds two weeklong Zen meditation retreats every summer, and one every winter. An essential part of Zen retreats is &lt;em&gt;interviews&lt;/em&gt; (&amp;ldquo;dokusan&amp;rdquo; or &amp;ldquo;daisan&amp;rdquo;) between students and teachers, where students can ask questions or present their understanding of &lt;a href=&#34;https://en.wikipedia.org/wiki/Koan&#34;&gt;koans&lt;/a&gt;. At a Village Zendo retreat, we want each student to see one teacher per day. We assign students to groups, and call each group out of the meditation hall to see a teacher at the start of a meditation period. Certain students serve as &lt;em&gt;jishas&lt;/em&gt;; they&amp;rsquo;re in charge of calling a group of students and escorting them to the door of the interview room. The students in the group line up, and enter the room one at time for a short conversation with the teacher.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Python Programmer to Distributed Systems Researcher in 10 Years Without a PhD</title>
      <link>https://emptysqua.re/blog/from-python-programmer-to-distributed-systems-researcher-in-10-years/</link>
      <pubDate>Mon, 30 Jun 2025 22:29:35 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/from-python-programmer-to-distributed-systems-researcher-in-10-years/</guid>
      <description>&lt;p&gt;Phil Eaton wrote &amp;ldquo;&lt;a href=&#34;https://notes.eatonphil.com/2025-02-15-from-web-developer-to-database-developer-in-10-years.html&#34;&gt;From Web Developer To Database Developer In 10 Years&lt;/a&gt;&amp;rdquo; recently. I was inspired to write my own version.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;In high school, I wanted to be a modern dancer, with a company like &lt;a href=&#34;https://pilobolus.org/&#34;&gt;Pilobolus&lt;/a&gt; or &lt;a href=&#34;https://streb.org/company/&#34;&gt;Streb&lt;/a&gt;. But I also kind of wanted to be a programmer. Pixar&amp;rsquo;s Toy Story, the first 3D-animated feature film, was released when I was a high school sophomore. I was fascinated by this simulated world, revealed by simulated light to a simulated camera. How did they make it? I somehow learned (however I learned things before I had Internet access) that 3D graphics were rendered with linear algebra and C++. So I got books about both from my neighborhood library in Shaker Heights, Ohio. I don&amp;rsquo;t recall much about the linear algebra book, but the C++ book is a core memory: a giant glossy volume, with a copy of Borland Turbo C++ for DOS on a CD in a slip attached to the inside back cover. I installed it on the family computer, a Tandy with a 386 processor, which looked like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taming Google Scholar Alerts</title>
      <link>https://emptysqua.re/blog/taming-google-scholar-alerts/</link>
      <pubDate>Mon, 23 Jun 2025 17:09:48 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/taming-google-scholar-alerts/</guid>
      <description>&lt;img src=&#34;edward-bird.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;A grayscale ink drawing of a bearded old man writing with fountain pen and ink pot, wearing .&#34; title=&#34;&#34;&gt;&lt;p&gt;Since I joined &lt;a href=&#34;https://www.mongodb.com/company/research/distributed-systems-research-group&#34;&gt;MongoDB&amp;rsquo;s Distributed Systems Research Group&lt;/a&gt; a few years ago, I&amp;rsquo;ve relied on Google Scholar alerts to tell me when an author in my specialty publishes a new paper, or (much more often) when a new paper cites an author I&amp;rsquo;m interested in. Google Scholar can send me email alerts, but their frequency isn&amp;rsquo;t configurable: daily only. And if the same new paper is included in multiple alerts (e.g., it cites several authors I follow), Google Scholar won&amp;rsquo;t deduplicate it. It&amp;rsquo;s common for me to get a half-dozen emails in the morning about overlapping sets of papers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Conformance Checking at MongoDB: Testing That Our Code Matches Our TLA&#43; Specs</title>
      <link>https://emptysqua.re/blog/mongodb-conformance-checking/</link>
      <pubDate>Tue, 03 Jun 2025 09:03:01 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/mongodb-conformance-checking/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.mongodb.com/blog/post/engineering/conformance-checking-at-mongodb-testing-our-code-matches-our-tla-specs&#34;&gt;Cross-posted from the MongoDB engineering blog&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;At MongoDB, we design a lot of distributed algorithms—algorithms with lots of concurrency and complexity, and dire consequences for mistakes. We formally specify some of the scariest algorithms in TLA+, to check that they behave correctly in every scenario. But how do we know that our implementations conform to our specs? And how do we keep them in sync as the implementation evolves?&lt;/p&gt;&#xA;&lt;p&gt;This problem is called &lt;em&gt;conformance checking&lt;/em&gt;. In 2020, my colleagues and I experimented with two MongoDB products, to see if we could test their fidelity to our TLA+ specs. Here&amp;rsquo;s a video of my presentation on this topic at the VLDB conference. (It&amp;rsquo;ll be obvious to you that I recorded it from my New York apartment in deep Covid lockdown.) Below, I write about our experience with conformance checking from 2025&amp;rsquo;s perspective. I&amp;rsquo;ll tell you what worked for us in 2020 and what didn&amp;rsquo;t, and what developments there have been in the field in the five years since our paper.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Jesse&#39;s Notes from the Antithesis BugBash Conference</title>
      <link>https://emptysqua.re/blog/notes-from-antithesis-bugbash/</link>
      <pubDate>Tue, 20 May 2025 22:33:34 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/notes-from-antithesis-bugbash/</guid>
      <description>&lt;img src=&#34;image004.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;Antithesis has pioneered &amp;ldquo;autonomous testing&amp;rdquo;, a term they coined for their platform, which combines a &lt;a href=&#34;https://antithesis.com/blog/deterministic_hypervisor/&#34;&gt;deterministic hypervisor&lt;/a&gt; with coverage-guided fuzzing and fault injection. &lt;a href=&#34;https://antithesis.com/case_studies/mongodb_productivity/&#34;&gt;My company MongoDB was one of their first customers&lt;/a&gt;—I evaluated their platform for MongoDB in 2020. At the time we had several very rare replication bugs, including one that manifested once in many &lt;strong&gt;years&lt;/strong&gt; of stress testing (tens of thousands of hours of compute), and Antithesis found them reliably in about 24 hours.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Are We Serious About Using TLA&#43; For Statistical Properties?</title>
      <link>https://emptysqua.re/blog/are-we-serious-about-statistical-properties-tlaplus/</link>
      <pubDate>Sat, 10 May 2025 10:59:24 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/are-we-serious-about-statistical-properties-tlaplus/</guid>
      <description>&lt;p&gt;At this year&amp;rsquo;s &lt;a href=&#34;https://emptysqua.re/blog/2025-tlaplus-community-event/&#34;&gt;TLA&lt;sup&gt;+&lt;/sup&gt; community event&lt;/a&gt;, I tentatively proposed adding features to make the language useful for performance modeling. Here&amp;rsquo;s the video, and a written version is below.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/Wekywox2Ghk?si=p19oHE_uIDtcZwb5&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&#xA;&lt;h1&gt;Half Our Problems&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In 2022, I saw Marc Brooker give a talk called &amp;ldquo;Formal Methods Only Solve Half My Problems&amp;rdquo; at &lt;a href=&#34;https://emptysqua.re/blog/2022-hpts-notes/&#34;&gt;HPTS&lt;/a&gt;. &lt;a href=&#34;https://brooker.co.za/blog/2022/06/02/formal.html&#34;&gt;He published a blog post about this too&lt;/a&gt;. He said that TLA&lt;sup&gt;+&lt;/sup&gt; can check correctness (safety and liveness), but not performance characteristics. &amp;ldquo;What I want is tools that do both: tools that allow development of formal models &amp;hellip; and then allow us to ask those models questions about design performance.&amp;rdquo; He acknowledges that correctness is important. But it&amp;rsquo;s not enough to say nothing bad ever happens, and something good eventually happens—we want to know how &lt;em&gt;quickly&lt;/em&gt; something good happens!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Jesse&#39;s 2025 TLA&#43; Community Event Notes</title>
      <link>https://emptysqua.re/blog/2025-tlaplus-community-event/</link>
      <pubDate>Thu, 08 May 2025 21:47:33 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/2025-tlaplus-community-event/</guid>
      <description>&lt;img src=&#34;Futuristic-visions-cards-germany-1.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;Here are my notes from the 2025 TLA&lt;sup&gt;+&lt;/sup&gt; Community Event. See also &lt;a href=&#34;https://muratbuffalo.blogspot.com/2025/05/notes-from-tla-community-event.html&#34;&gt;my colleague Murat Demirbas&amp;rsquo;s notes&lt;/a&gt; (he was one of the event&amp;rsquo;s organizers). The talks were all recorded, and the videos, slides, and abstracts &lt;a href=&#34;https://conf.tlapl.us/2025-etaps/&#34;&gt;are posted&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Some years &lt;a href=&#34;https://conf.tlapl.us/home/&#34;&gt;there are TLA&lt;sup&gt;+&lt;/sup&gt; &amp;ldquo;conferences&amp;rdquo; co-located with &lt;em&gt;industry&lt;/em&gt; conferences&lt;/a&gt;, and some years there are &amp;ldquo;community events&amp;rdquo; co-located with &lt;em&gt;academic&lt;/em&gt; conferences. This year was a community event, the first TLA&lt;sup&gt;+&lt;/sup&gt; community event in North America. There were about 20 participants, evenly divided between academia and industry. I knew most of them already. If I recall correctly, the last TLA&lt;sup&gt;+&lt;/sup&gt; thing I attended was the 2021 &lt;em&gt;conference&lt;/em&gt;; it had more participants, perhaps because it was co-located with the huge StrangeLoop industry conference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Long Must I Test?</title>
      <link>https://emptysqua.re/blog/how-long-must-i-test/</link>
      <pubDate>Mon, 07 Apr 2025 22:36:05 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-long-must-i-test/</guid>
      <description>&lt;p&gt;When you&amp;rsquo;re hunting for bugs with a nondeterministic test, how many times should you run the test? The &lt;em&gt;program&lt;/em&gt; might be deterministic: the same input produces the same behavior. Presuming you&amp;rsquo;re confident this is the case, you could fuzz the input for a while, hoping to catch bugs. But if your program is nondeterministic, you must not only give it random inputs, you must re-test it on the same input many times, hoping to achieve high branch coverage and catch rare bugs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Join Me At NYC Systems October 17</title>
      <link>https://emptysqua.re/blog/nyc-systems-october-2024/</link>
      <pubDate>Thu, 10 Oct 2024 17:36:40 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/nyc-systems-october-2024/</guid>
      <description>&lt;p&gt;New York&amp;rsquo;s hottest club is NYC Systems. I&amp;rsquo;m speaking there October 17 with my colleague Matthieu Humeau. We&amp;rsquo;ll describe our experiment with predictive auto-scaling in &lt;a href=&#34;https://www.mongodb.com/products/platform/atlas-database&#34;&gt;MongoDB Atlas&lt;/a&gt;. The other presenter that night will be Andrew Werner, talking about instrumentation of compiled code. Unfortunately for you, registrations filled up a&#xA;half hour after they opened. &lt;a href=&#34;https://nycsystems.xyz/october-2024.html&#34;&gt;Join the waitlist&lt;/a&gt;! Or &lt;a href=&#34;https://www.youtube.com/watch?v=SqyLP1CZDFk&#34;&gt;watch our presentation&lt;/a&gt; on the same topic at the Data Council conference this spring.&lt;/p&gt;&#xA;&lt;p&gt;NYC Systems is a tech talk series recently begun by &lt;a href=&#34;https://eatonphil.com/&#34;&gt;Phil Eaton&lt;/a&gt;. Phil also created a &lt;a href=&#34;https://eatonphil.com/bookclub.html&#34;&gt;giant online book club&lt;/a&gt; that reads books about software internals. He&amp;rsquo;s talented at organizing communities, I&amp;rsquo;ve been observing from the sidelines and I&amp;rsquo;m impressed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s Next for Women in Tech?</title>
      <link>https://emptysqua.re/blog/whats-next-for-women-in-tech/</link>
      <pubDate>Sat, 24 Aug 2024 16:53:51 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/whats-next-for-women-in-tech/</guid>
      <description>&lt;p&gt;The Washington Post says &amp;ldquo;&lt;a href=&#34;https://www.washingtonpost.com/technology/2024/08/19/silicon-valley-dei-backlash/&#34;&gt;the movement to diversify Silicon Valley is crumbling&lt;/a&gt;&amp;rdquo;, and the story is particularly dire for gender-diversity nonprofits: Girls In Tech has dissolved, so has Women Who Code, and software companies have sharply cut their grants to others. But were they helping? The article links to this &lt;a href=&#34;https://www.dol.gov/agencies/wb/data/occupations-stem&#34;&gt;Department of Labor chart&lt;/a&gt; which shows women&amp;rsquo;s share of all STEM employment has grown from 25% in 2000 to only 26% in 2022. For some reason the Post didn&amp;rsquo;t cite a worse statistic on the same chart: women&amp;rsquo;s share of &amp;ldquo;computer occupations&amp;rdquo; has fallen from 30% to 24%.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Use MongoDB Causal Consistency</title>
      <link>https://emptysqua.re/blog/how-to-use-mongodb-causal-consistency/</link>
      <pubDate>Tue, 14 May 2024 15:53:22 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-to-use-mongodb-causal-consistency/</guid>
      <description>&lt;p&gt;MongoDB implemented a consistency level called &lt;a href=&#34;https://jepsen.io/consistency/models/causal&#34;&gt;causal consistency&lt;/a&gt; in 2017 (&lt;a href=&#34;https://emptysqua.re/blog/driver-features-for-mongodb-3-6/&#34;&gt;version 3.6&lt;/a&gt;). It&amp;rsquo;s quite a handy consistency level, strong enough for most applications and still performant. I helped design the API for causal consistency, but when we released it I dropped the ball and didn&amp;rsquo;t publicize or document it well. MongoDB&amp;rsquo;s causal consistency didn&amp;rsquo;t get the fame it deserved in 2017; I&amp;rsquo;ll try to rectify that now.&lt;/p&gt;&#xA;&#xA;&lt;img src=&#34;replica-set.excalidraw.svg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;MongoDB implements a Raft-like consensus protocol. Most people deploy MongoDB as a three-server replica set, with one primary and two secondaries. Only the primary executes writes, which are replicated by secondaries with a small delay. You can read from the primary or the secondaries. Your application talks to the servers via an instance of the &lt;a href=&#34;https://www.mongodb.com/docs/drivers/&#34;&gt;MongoClient&lt;/a&gt; class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pseudocode Is Not Durable</title>
      <link>https://emptysqua.re/blog/write-python-not-pseudocode/</link>
      <pubDate>Sat, 01 Apr 2023 17:06:47 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/write-python-not-pseudocode/</guid>
      <description>&lt;img src=&#34;92997562_l.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;My friend Andrew Helwer &lt;a href=&#34;https://ahelwer.ca/post/2023-03-30-pseudocode/&#34;&gt;argues&lt;/a&gt; that the best way to communicate an algorithm is with &lt;a href=&#34;https://en.wikipedia.org/wiki/PlusCal&#34;&gt;PlusCal&lt;/a&gt; or Python. He has &amp;ldquo;come to believe that both are superior to an ad-hoc unspecified pseudo-math language,&amp;rdquo; of the sort that researchers often invent for their papers. He recommends a subset of Python that avoids &amp;ldquo;fancy features&amp;rdquo; like list comprehensions, and avoids the standard library. He shows an apt example: a 43-year-old algorithm that was specified in pseudocode and has therefore been plagued with bugs and ambiguities ever since.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multi-Paxos in Python, tested with Jepsen</title>
      <link>https://emptysqua.re/blog/python-paxos-jepsen/</link>
      <pubDate>Fri, 10 Dec 2021 15:25:18 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/python-paxos-jepsen/</guid>
      <description>&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube-nocookie.com/embed/eUxHKIEDC_Q&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I want to understand Paxos better, especially Multi-Paxos, so I implemented it (badly) in Python. I&#xA;tested it with Jepsen—it was a chance to play with Jepsen, and a way to check if I&amp;rsquo;d&#xA;understood Paxos well enough to code it. I spent about two weeks on the project (one was MongoDB&amp;rsquo;s periodic &amp;ldquo;Skunkworks&amp;rdquo;&#xA;week). Here&amp;rsquo;s a rambling report on my experience.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Current and Future Tools for Interactive TLA&#43;</title>
      <link>https://emptysqua.re/blog/interactive-tla-plus/</link>
      <pubDate>Tue, 05 Oct 2021 17:38:04 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/interactive-tla-plus/</guid>
      <description>&lt;p&gt;This is a talk I gave at &lt;a href=&#34;http://conf.tlapl.us/2021/&#34;&gt;the 2021 TLA+ conference&lt;/a&gt; with my MongoDB colleague Samyukta Lanka. The video is below, and a written version below that.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/ZwuDcMT3nMg&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href=&#34;https://twitter.com/jessejiryudavis/status/1445510399697117195&#34;&gt;See this Twitter thread for important corrections&lt;/a&gt;. Many of the features we asked for are already possible, but obscure.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;h1&gt;Precise vs. holistic&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In our experience there are two ways to understand a system: precisely or holistically. (This isn&amp;rsquo;t a super well-developed philosophy, just our observation.) The precise way of understanding involves well-defined questions like, &amp;ldquo;Does the system obey a particular invariant or property?&amp;rdquo; There are lots of powerful tools for this; this is what &lt;a href=&#34;https://en.wikipedia.org/wiki/TLA%2B&#34;&gt;TLA+&lt;/a&gt; and &lt;a href=&#34;https://lamport.azurewebsites.net/tla/tools.html&#34;&gt;TLC&lt;/a&gt; are for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Paper Review: Programming as Theory Building</title>
      <link>https://emptysqua.re/blog/programming-as-theory-building/</link>
      <pubDate>Thu, 26 Aug 2021 16:01:58 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/programming-as-theory-building/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re my colleague and you want to trigger my most ferocious pet peeve, ask me to explain something that I&amp;rsquo;ve already written down. My first response will be a terse link to the docs. I won&amp;rsquo;t say &amp;ldquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/RTFM&#34;&gt;RTFM&lt;/a&gt;&amp;rdquo; out loud, but if you listen closely you can hear me think it. If you ask a followup that I&amp;rsquo;ve &lt;strong&gt;also&lt;/strong&gt; written the answer to, I get sarcastic and rude. Things generally devolve from there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing the Adventurous Route: The Career Path for Non-Managers</title>
      <link>https://emptysqua.re/blog/choosing-the-adventurous-route-video/</link>
      <pubDate>Tue, 26 Feb 2019 11:49:37 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/choosing-the-adventurous-route-video/</guid>
      <description>&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/Prdqc3J26dE&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;br&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re committed to a lifetime of coding, how do you make the most of it?&lt;/p&gt;&#xA;&lt;p&gt;Your training, experience, and passion are all in computer programming, but after a few years it can start to feel like you&amp;rsquo;re being railroaded into management, or out of the industry. Full-time programmers in their 40s or older are few, and the industry doesn&amp;rsquo;t reward long experience like it should. We can change this. We can find more creative ways to deepen our skills, get promoted, and expand our influence as coders for our entire careers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing the Adventurous Route: Resources</title>
      <link>https://emptysqua.re/blog/adventurous-route-resources/</link>
      <pubDate>Fri, 08 Feb 2019 23:22:04 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/adventurous-route-resources/</guid>
      <description>&lt;img src=&#34;modem.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;Links to articles and papers I mention in my &lt;a href=&#34;https://www.pytennessee.org/talks/choosing-the-adventure-route&#34;&gt;PyTennessee talk about the career path for older coders&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://emptysqua.re/blog/choosing-the-adventurous-route-video/&#34;&gt;Video and transcript of my PyTennessee talk&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://onezero.medium.com/ctrl-alt-delete-the-planned-obsolescence-of-old-coders-9c5f440ee68&#34;&gt;An article I wrote on this subject, aimed at a more general audience&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ckc6XSSh52w&#34;&gt;Old modem sounds&lt;/a&gt; and &lt;a href=&#34;http://www.windytan.com/2012/11/the-sound-of-dialup-pictured.html&#34;&gt;an explanation thereof&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.payscale.com/data-packages/top-tech-companies-compared/tech-salaries&#34;&gt;Median age at Google and Amazon is 30&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bls.gov/emp/tables/median-age-labor-force.htm&#34;&gt;Median age of American worker is 42&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://insights.stackoverflow.com/survey/2018#developer-profile-age&#34;&gt;Stack Overflow developer survey: three quarters of respondents were under 35&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Please Vote for My ConFoo Proposals</title>
      <link>https://emptysqua.re/blog/vote-for-my-confoo-2019-talks/</link>
      <pubDate>Mon, 24 Sep 2018 08:35:26 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/vote-for-my-confoo-2019-talks/</guid>
      <description>&lt;p&gt;I have some ideas I want to share at ConFoo 2019 in Montréal. If you think these talks sound interesting, take a minute and &lt;a href=&#34;https://confoo.ca/en/yul2019/call-for-papers/speaker/a-jesse-jiryu-davis&#34;&gt;vote for me&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;div style=&#34;text-align: center; margin: 2em&#34;&gt;&#xA;&lt;a href=&#34;https://confoo.ca/en/yul2019/call-for-papers/speaker/a-jesse-jiryu-davis&#34; lang=&#34;en&#34;&gt;&lt;img alt=&#34;ConFoo | March 13-15, 2019 | Montreal, Canada&#34; style=&#34;border:0&#34; width=&#34;180&#34; height=&#34;130&#34; src=&#34;https://confoo.ca/images/propaganda/yul2019/en/vote.png&#34; /&gt;&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Please accept, as a token of my gratitude, this picture of a damp cat in Montréal (&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/albums/72157606023582376&#34;&gt;part of a set I shot in 2008&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;img src=&#34;2645621684_79ca0b3924_o.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;</description>
    </item>
    <item>
      <title>Motor 2.0</title>
      <link>https://emptysqua.re/blog/motor-2-0/</link>
      <pubDate>Wed, 11 Jul 2018 04:11:37 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-2-0/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;motor-musho.png&#34; alt=&#34;Motor&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;To support multi-document transactions, I had to make breaking changes to Motor&amp;rsquo;s session API and release a major version bump, Motor 2.0. Since this is a major release I also deleted many helper methods and APIs that had been deprecated over time since Motor 1.0, most notably the old CRUD methods &lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;remove&lt;/code&gt;, and &lt;code&gt;save&lt;/code&gt;, and the original callback-based API. Read the &lt;a href=&#34;http://motor.readthedocs.io/en/stable/migrate-to-motor-2.html&#34;&gt;Motor 2.0 Migration Guide&lt;/a&gt; carefully to upgrade your existing Motor application. Motor 2.0 also includes a Python 3.7 compatibility fix in the &lt;a href=&#34;http://motor.readthedocs.io/en/stable/api-tornado/motor_change_stream.html&#34;&gt;MotorChangeStream&lt;/a&gt; class returned by &lt;a href=&#34;http://motor.readthedocs.io/en/stable/api-tornado/motor_collection.html#motor.motor_tornado.MotorCollection.watch&#34;&gt;MotorCollection.watch&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Further Reading About What To Expect When You&#39;re Expiring</title>
      <link>https://emptysqua.re/blog/further-reading-what-to-expect-when-youre-expiring/</link>
      <pubDate>Sat, 10 Feb 2018 13:45:10 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/further-reading-what-to-expect-when-youre-expiring/</guid>
      <description>&lt;img src=&#34;the-body-of-this-death.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;At PyTennessee 2018 I gave a talk about writing Python object destructors called What To Expect When You&amp;rsquo;re Expiring: Rules for &lt;code&gt;__del__&lt;/code&gt;. The rules for a destructor method are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t access modules or globals.&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t access threadlocals.&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t take any locks.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Links to further reading about the subject:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.python.org/dev/peps/pep-0442/&#34;&gt;PEP 442&lt;/a&gt; makes Rule 1 less necessary. For an entertaining story about this rule, read &lt;a href=&#34;https://emptysqua.re/blog/a-normal-accident-in-python-and-mod-wsgi&#34;&gt;A Normal Accident In Python and mod_wsgi&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/pythons-thread-locals-are-weird&#34;&gt;Python&amp;rsquo;s Thread Locals Are Weird&lt;/a&gt;. The horror story behind Rule 2: &amp;ldquo;Don&amp;rsquo;t touch threadlocals&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/pypy-garbage-collection-and-a-deadlock&#34;&gt;PyPy, Garbage Collection, And A Deadlock&lt;/a&gt;: More details about Rule 3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/ajdavis/what-to-expect-when-youre-expiring&#34;&gt;All the code examples used in my talk&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The images I used in my slides are from:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Video: Writing Winning Proposals for Tech Conferences</title>
      <link>https://emptysqua.re/blog/writing-winning-proposals-webinar/</link>
      <pubDate>Sat, 03 Feb 2018 21:51:21 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/writing-winning-proposals-webinar/</guid>
      <description>&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/KAzChb4MYCg?rel=0&amp;amp;start=246&#34; frameborder=&#34;0&#34; allow=&#34;autoplay; encrypted-media&#34; allowfullscreen style=&#34;margin-bottom: 25px&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;I was invited by PyLadies Online to give a February 3, 2018 webinar about proposing talks, for the annual Global Diversity CFP Day. Watch the recording for my tips about advancing your conference-speaking career.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.9.2</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-2/</link>
      <pubDate>Thu, 11 Jan 2018 22:48:08 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-2/</guid>
      <description>&lt;p&gt;I made a mistake in libbson 1.9.1, so I&amp;rsquo;ve just released 1.9.2 of libbson and libmongoc.&lt;/p&gt;&#xA;&lt;p&gt;libbson 1.9.2 completes reverting a&#xA;changed macro definition that broke API compatibility. The revert in 1.9.1 did&#xA;not completely fix the BC break. Thanks to Petr Písař for finding and fixing the&#xA;mistake. See &lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-2460&#34;&gt;CDRIVER-2460&lt;/a&gt; for details. It&amp;rsquo;s a comedy of errors.&lt;/p&gt;&#xA;&lt;p&gt;libmongoc 1.9.2 has no changes since 1.9.1, I released it to keep pace with libbson&amp;rsquo;s version number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.9.1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-1/</link>
      <pubDate>Tue, 09 Jan 2018 17:46:11 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-1/</guid>
      <description>&lt;img src=&#34;Sea-monster_Terme_di_Nettuno_Ostia_Antica_2006-09-08.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;Image description: black and white mosaic of a creature with the head and paws of a lion and the lower body and tail of a snake, with three-lobed fish tail. It appears to have cartoonish ripple lines drawn with mosaic tile around its paws showing it is paddling, and lines beneath it showing forward motion.&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.9.1 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.9.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-0/</link>
      <pubDate>Wed, 20 Dec 2017 21:29:51 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-9-0/</guid>
      <description>&lt;img src=&#34;frigate-uss-constitution-rawscan.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.9.0 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It is my pleasure to announce Libbson-1.9.0.&lt;/p&gt;&#xA;&lt;p&gt;New features and bugfixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fix Autotools syntax for OpenBSD and any platform lacking stdint.h.&lt;/li&gt;&#xA;&lt;li&gt;Fix Android NDK incompatibilities.&lt;/li&gt;&#xA;&lt;li&gt;Fix a one-byte write past the end of a buffer in bson_decimal128_to_string.&lt;/li&gt;&#xA;&lt;li&gt;Avoid reading past the end of a string that contains UTF-8 multibyte NIL.&lt;/li&gt;&#xA;&lt;li&gt;Fix some pedantic warnings in C99 mode.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It is my pleasure to announce mongo-c-driver 1.9.0. This version drops support&#xA;for MongoDB 2.4 and adds support for MongoDB 3.6 features:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Motor 1.2.0</title>
      <link>https://emptysqua.re/blog/motor-1-2-0/</link>
      <pubDate>Mon, 18 Dec 2017 15:47:17 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-1-2-0/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;motor-musho.png&#34; alt=&#34;Motor&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m excited to announce version 1.2.0 of Motor, my async Python driver for MongoDB. Motor works with Python 2.7 and 3.4+, and it supports async MongoDB applications using either Tornado or asyncio. Version 1.2.0 is not substantially changed from the release candidate I announced last week, please &lt;a href=&#34;https://emptysqua.re/blog/motor-1-2-release-candidate&#34;&gt;read that post for all the details about this version of Motor&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Install Motor with pip:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install -U motor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/MOTOR/&#34;&gt;If you find issues, file a bug and I&amp;rsquo;ll respond promptly.&lt;/a&gt; But if it works for you, don&amp;rsquo;t be silent!—&lt;a href=&#34;https://twitter.com/jessejiryudavis&#34;&gt;tweet at me&lt;/a&gt; and tell me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 1.2 Release Candidate, With MongoDB 3.6 Support</title>
      <link>https://emptysqua.re/blog/motor-1-2-release-candidate/</link>
      <pubDate>Wed, 13 Dec 2017 07:01:32 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-1-2-release-candidate/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;motor-musho.png&#34; alt=&#34;Motor&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://groups.google.com/d/msg/mongodb-announce/IDlWs6RTnm8/odRj2_ENAAAJ&#34;&gt;MongoDB 3.6 was released December 5&lt;/a&gt;. Today I&amp;rsquo;ve uploaded a release candidate for version 1.2 of Motor, the async Python driver for MongoDB. This will be a big release so I hope you try the release candidate and &lt;a href=&#34;https://twitter.com/jessejiryudavis&#34;&gt;tell me if it works for you or if you find bugs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Install the release candidate with pip:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install motor==1.2rc0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1&gt;Compatibility Changes&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MongoDB: drop 2.4, add 3.6&lt;/li&gt;&#xA;&lt;li&gt;Python: drop 2.6, continue to support 2.7 and 3.3+&lt;/li&gt;&#xA;&lt;li&gt;Tornado: drop 3, continue to support Tornado 4.5+&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://aiohttp.readthedocs.io/&#34;&gt;aiohttp&lt;/a&gt;: support 2.0 and later, drop older version&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See the &lt;a href=&#34;http://motor.readthedocs.io/en/latest/requirements.html&#34;&gt;Compatibility Matrix&lt;/a&gt; for the relationships&#xA;among Motor, Python, Tornado, and MongoDB versions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.8.2</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-2/</link>
      <pubDate>Sat, 18 Nov 2017 10:24:03 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/30459588196&#34;&gt;&#xA;&lt;img src=&#34;the-oaks-10.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;Image description: black and white photograph of clam shells densely piled on the shore&#34; title=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.8.2 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver. Sadly, this is the final version that I worked on with Hannes Magnusson. He&amp;rsquo;s moved on to fight new bugs on new battlefields.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;No change since 1.8.1; released to keep pace with libmongoc&amp;rsquo;s version.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This release fixes the&#xA;following bugs:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.8.1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-1/</link>
      <pubDate>Wed, 11 Oct 2017 22:34:57 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-1/</guid>
      <description>&lt;img src=&#34;Potsdam,_steamship_%281900%29_-_LoC_4a20322u.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.8.1 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This release removes a syntax&#xA;error in the configure script that affects some shells, and fixes the encoding&#xA;of the NEWS file.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This release fixes the following bugs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Remove a syntax error in the configure script that affects some shells.&lt;/li&gt;&#xA;&lt;li&gt;The configure script respects &amp;ndash;with-zlib=system and &amp;ndash;with-snappy=system.&lt;/li&gt;&#xA;&lt;li&gt;The internal &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_server_description_t.html&#34;&gt;mongoc_server_description_t&lt;/a&gt; struct is properly reinitialized&#xA;after a network error.&lt;/li&gt;&#xA;&lt;li&gt;Fix the encoding of the NEWS file.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.8.1/libbson-1.8.1.tar.gz&#34;&gt;libbson-1.8.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.8.1/mongo-c-driver-1.8.1.tar.gz&#34;&gt;libmongoc-1.8.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?jql=project%3D%22C%20Driver%22%20and%20fixVersion%3D%221.8.1%22&#34;&gt;All the issues resolved in 1.8.1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to Jeremy Mikola for his contributions to this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.8.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-0/</link>
      <pubDate>Wed, 13 Sep 2017 18:02:07 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-8-0/</guid>
      <description>&lt;img src=&#34;the-oaks-5.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;Image description: black and white photograph of a black rock surrounded by waves, seen from above, with surf spraying over one edge of the rock.&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.8.0 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;New features and bugfixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make symbols &lt;a href=&#34;http://mongoc.org/libbson/current/bson_get_major_version.html&#34;&gt;bson_get_major_version&lt;/a&gt;, &lt;a href=&#34;http://mongoc.org/libbson/current/bson_get_minor_version.html&#34;&gt;bson_get_minor_version&lt;/a&gt;,&#xA;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_get_micro_version.html&#34;&gt;bson_get_micro_version&lt;/a&gt;, &lt;a href=&#34;http://mongoc.org/libbson/current/bson_get_version.html&#34;&gt;bson_get_version&lt;/a&gt;, and &lt;a href=&#34;http://mongoc.org/libbson/current/bson_check_version.html&#34;&gt;bson_check_version&lt;/a&gt; available&#xA;to C++ programs.&lt;/li&gt;&#xA;&lt;li&gt;New CMake option ENABLE_MAINTAINER_FLAGS.&lt;/li&gt;&#xA;&lt;li&gt;Crash iterating over invalid code with scope.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The zLib and Snappy compression libraries are bundled if not available.&#xA;Wire protocol compression is enabled on Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_collection_find_and_modify_with_opts.html&#34;&gt;mongoc_collection_find_and_modify_with_opts&lt;/a&gt; now respects a &amp;ldquo;writeConcern&amp;rdquo;&#xA;field in the &amp;ldquo;extra&amp;rdquo; BSON document in its &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_find_and_modify_opts_t.html&#34;&gt;mongoc_find_and_modify_opts_t&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;These command functions now ignore &amp;ldquo;read_prefs&amp;rdquo;:&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_read_write_command_with_opts.html&#34;&gt;mongoc_client_read_write_command_with_opts&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_database_read_write_command_with_opts.html&#34;&gt;mongoc_database_read_write_command_with_opts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_collection_read_write_command_with_opts.html&#34;&gt;mongoc_collection_read_write_command_with_opts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;These functions are both deprecated, use &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_database_write_command_with_opts.html&#34;&gt;mongoc_database_write_command_with_opts&lt;/a&gt; instead. &lt;a href=&#34;http://mongoc.org/libmongoc/current/create-indexes.html&#34;&gt;A guide to creating an index using that function has been added&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_collection_create_index.html&#34;&gt;mongoc_collection_create_index&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_collection_create_index_with_opts.html&#34;&gt;mongoc_collection_create_index_with_opts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/&#34;&gt;Use select, not WSAPoll, on Windows&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Always mark a server &amp;ldquo;Unknown&amp;rdquo; after a network error (besides a timeout).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_pool_t.html&#34;&gt;mongoc_client_pool_t&lt;/a&gt; sends platform metadata to the server; before, only a&#xA;single &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_t.html&#34;&gt;mongoc_client_t&lt;/a&gt; did.&lt;/li&gt;&#xA;&lt;li&gt;New stream method &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_stream_timed_out.html&#34;&gt;mongoc_stream_timed_out&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Wire version checks introduced in 1.8.0 will prevent the driver from&#xA;connecting to a future MongoDB server version if its wire protocol is&#xA;incompatible.&lt;/li&gt;&#xA;&lt;li&gt;New CMake option ENABLE_MAINTAINER_FLAGS.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.8.0/libbson-1.8.0.tar.gz&#34;&gt;libbson-1.8.0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.8.0/mongo-c-driver-1.8.0.tar.gz&#34;&gt;libmongoc-1.8.0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?jql=project%3D%22C%20Driver%22%20and%20fixVersion%3D%221.8.0%22&#34;&gt;All bugs fixed in 1.8.0&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone who contributed to this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.7.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-7-0/</link>
      <pubDate>Wed, 09 Aug 2017 12:51:14 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-7-0/</guid>
      <description>&lt;img src=&#34;USM_steamship_Arctic_1850.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.7.0 of libbson and libmongoc,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;p&gt;The main new features are an updated JSON-BSON codec, more resilient network layer, and convenient linking.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;New features and bug fixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Changes to JSON encoding and decoding:&lt;/li&gt;&#xA;&lt;li&gt;New functions &lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_canonical_extended_json.html&#34;&gt;&lt;code&gt;bson_as_canonical_extended_json&lt;/code&gt;&lt;/a&gt; and&#xA;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_relaxed_extended_json.html&#34;&gt;&lt;code&gt;bson_as_relaxed_extended_json&lt;/code&gt;&lt;/a&gt; convert BSON to canonical and relaxed&#xA;extended JSON according to MongoDB Extended JSON Spec.&#xA;Output for the existing &lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_json.html&#34;&gt;&lt;code&gt;bson_as_json&lt;/code&gt;&lt;/a&gt; function has not been changed.&lt;/li&gt;&#xA;&lt;li&gt;When parsing JSON type wrappers like &amp;ldquo;$timestamp&amp;rdquo;, any missing or extra&#xA;keys are an error.&lt;/li&gt;&#xA;&lt;li&gt;The JSON format for BSON regular expressions is now &amp;ldquo;$regularExpression&amp;rdquo;:&#xA;{&amp;ldquo;pattern&amp;rdquo;: &amp;ldquo;&amp;hellip;&amp;rdquo;, &amp;ldquo;options&amp;rdquo;: &amp;ldquo;&amp;hellip;&amp;rdquo;}. The old format {&amp;quot;$regex&amp;quot;: &amp;ldquo;&amp;hellip;&amp;rdquo;,&#xA;&amp;ldquo;$options&amp;rdquo;: &amp;ldquo;&amp;hellip;&amp;rdquo;} is still parsed.&lt;/li&gt;&#xA;&lt;li&gt;The JSON format for BSON binary elements is now &amp;ldquo;$binary&amp;rdquo;: {&amp;ldquo;base64&amp;rdquo;:&#xA;&amp;ldquo;&amp;hellip;&amp;rdquo;, &amp;ldquo;subType&amp;rdquo;: &amp;ldquo;&amp;hellip;&amp;rdquo;}. The old format {&amp;quot;$binary&amp;quot;: &amp;ldquo;&amp;hellip;&amp;rdquo;, &amp;ldquo;$type&amp;rdquo;:&#xA;&amp;ldquo;&amp;hellip;&amp;rdquo;} is still parsed.&lt;/li&gt;&#xA;&lt;li&gt;BSON dates can be parsed from &amp;ldquo;$date&amp;rdquo; as an ISO8601 date or &amp;ldquo;$numberLong&amp;rdquo;&#xA;as milliseconds since the epoch: &amp;ldquo;t&amp;rdquo;: {&amp;quot;$date&amp;quot;: {&amp;quot;$numberLong&amp;quot;: &amp;ldquo;1234&amp;rdquo;}}.&#xA;Dates can no longer be formatted as raw integers. &lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_json.html&#34;&gt;&lt;code&gt;bson_as_json&lt;/code&gt;&lt;/a&gt; writes a&#xA;BSON date after 1970 as &amp;ldquo;$date&amp;rdquo; with an ISO8601 string, and dates before&#xA;1970 as negative milliseconds wrapped in &amp;ldquo;$numberLong&amp;rdquo;.&#xA;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_canonical_extended_json.html&#34;&gt;&lt;code&gt;bson_as_canonical_extended_json&lt;/code&gt;&lt;/a&gt; always writes dates with &amp;ldquo;$numberLong&amp;rdquo;.&#xA;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_as_relaxed_extended_json.html&#34;&gt;&lt;code&gt;bson_as_relaxed_extended_json&lt;/code&gt;&lt;/a&gt; always writes dates with &amp;ldquo;$date&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;The non-numbers NaN, Infinity, and -Infinity are now recognized (regardless&#xA;of case) when parsing JSON.&lt;/li&gt;&#xA;&lt;li&gt;CMake build now installs .pc files for programs that link to libbson using&#xA;pkg-config. Both the CMake and Autotools build systems now install .cmake&#xA;files for programs that link to libbson using CMake. Linking to libbson&#xA;statically or dynamically is now much more convenient.&lt;/li&gt;&#xA;&lt;li&gt;New CMake option, &amp;ldquo;ENABLE_STATIC&amp;rdquo;, defaults to ON.&lt;/li&gt;&#xA;&lt;li&gt;Minimum required CMake version has been increased to 3.1.&lt;/li&gt;&#xA;&lt;li&gt;CMake remains experimental on non-Windows platforms and issues a warning now&lt;/li&gt;&#xA;&lt;li&gt;New functions&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_strcasecmp.html&#34;&gt;&lt;code&gt;bson_strcasecmp&lt;/code&gt;&lt;/a&gt;, a portable equivalent of strcasecmp.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_iter_as_double.html&#34;&gt;&lt;code&gt;bson_iter_as_double&lt;/code&gt;&lt;/a&gt;, cast the current value to double.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_iter_init_from_data.html&#34;&gt;&lt;code&gt;bson_iter_init_from_data&lt;/code&gt;&lt;/a&gt;, creates an iterator from BSON string.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libbson/current/bson_validate_with_error.html&#34;&gt;&lt;code&gt;bson_validate_with_error&lt;/code&gt;&lt;/a&gt;, checks a document like &lt;a href=&#34;http://mongoc.org/libbson/current/bson_validate.html&#34;&gt;&lt;code&gt;bson_validate&lt;/code&gt;&lt;/a&gt; does but&#xA;also reports which key was invalid&lt;/li&gt;&#xA;&lt;li&gt;New convenience macros&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BSON_ITER_HOLDS_INT&lt;/code&gt;, checks if iterator holds int32 or int64&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BSON_ITER_HOLDS_NUMBER&lt;/code&gt;, checks if iterator holds int32, int64 or double&lt;/li&gt;&#xA;&lt;li&gt;Raised BSON recursion limit to 200&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;New features and bug fixes:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Noisiest Block in the Neighborhood: Analyzing NYC Data with Mongolite</title>
      <link>https://emptysqua.re/blog/analyze-noise-complaints-r-mongodb-mongolite/</link>
      <pubDate>Wed, 15 Mar 2017 07:11:15 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/analyze-noise-complaints-r-mongodb-mongolite/</guid>
      <description>&lt;img src=&#34;essex-street.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;Back in 2012, I ended my seven years of residence on the Lower East Side and moved into an apartment with my girlfriend in Stuyvesant Town a mile north. I&amp;rsquo;d loved the LES when I first came to New York, because it was where my Jewish ancestors had first lived when they came to America a century ago, and their history still showed on every corner. I lived on Orchard Street, across from a Jewish corset shop, around the corner from the salmon specialists at Russ &amp;amp; Daughters. Half a block in the other direction was the Roumanian-American Synagogue, huge and old, once so famous for its Hebrew singing it was called the &amp;ldquo;Cantor&amp;rsquo;s Carnegie Hall.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.6.1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-6-1-and-1-5-5/</link>
      <pubDate>Tue, 07 Mar 2017 10:10:22 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-6-1-and-1-5-5/</guid>
      <description>&lt;img src=&#34;4.Great-Norway-Sea-Serpent.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.6.1 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is a bugfix release that&#xA;resolves GCC 7 compiler warnings, improves HP-UX compatibility, and avoids&#xA;a test failure on 32-bit MIPS.&lt;/p&gt;&#xA;&lt;p&gt;Debugging the MIPS bug was a small saga. I don&amp;rsquo;t have a MIPS machine and I&amp;rsquo;ve only partly learned how to simulate one with QEMU; therefore it wasn&amp;rsquo;t until the Debian Autobuilder Network emailed me that I knew the libbson test suite had begun failing on 32-bit MIPS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring MongoDB Driver Events In Motor</title>
      <link>https://emptysqua.re/blog/motor-monitoring/</link>
      <pubDate>Sat, 04 Feb 2017 15:13:45 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-monitoring/</guid>
      <description>&lt;img src=&#34;monitor-lizard.png&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;Image description: line drawing of a monitor lizard&#34; title=&#34;&#34;&gt;&lt;p&gt;Do you want to know every MongoDB query or command your program sends, and the server&amp;rsquo;s reply to each? How about getting a notification whenever the driver detects a primary failover, or when a new secondary joins the replica set? Over the last year, MongoDB drivers have implemented these monitoring features in all our supported programming languages. Here&amp;rsquo;s how to use monitoring in Motor, my Python async driver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.6.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-6-0/</link>
      <pubDate>Wed, 01 Feb 2017 21:23:48 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-6-0/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://emptysqua.re/blog/libbson-and-libmongoc-1-6-0/norman-ship-rawscan.jpg&#34; style=&#34;display: block; max-width:100%&#34;&gt;&lt;/p&gt;&#xA;  &#xA;&#xA;  &#xA;  &#xA;&#xA;&#xA;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.6.0 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;New features and bug fixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use jsonsl instead of libyajl as our JSON parsing library, parse JSON more&#xA;strictly, fix minor parsing bugs.&lt;/li&gt;&#xA;&lt;li&gt;Extended JSON documents like &lt;code&gt;{&amp;quot;$code&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;$scope&amp;quot;: {}}&lt;/code&gt; are now parsed&#xA;into BSON &amp;ldquo;code&amp;rdquo; elements.&lt;/li&gt;&#xA;&lt;li&gt;ISO8601 dates now allow years from 0000 to 9999 inclusive. Before, years&#xA;before 1970 were prohibited.&lt;/li&gt;&#xA;&lt;li&gt;BSON floats and ints are now distinguished in JSON output.&lt;/li&gt;&#xA;&lt;li&gt;The library is now built and continuously tested with MinGW-W64 on Windows.&lt;/li&gt;&#xA;&lt;li&gt;The documentation is ported from Mallard XML to ReStructured Text, the&#xA;HTML documentation is restyled, and numerous man page syntax errors fixed.&lt;/li&gt;&#xA;&lt;li&gt;All public functions now have the &lt;code&gt;__cdecl&lt;/code&gt; calling convention on Windows.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;It is my please to announce mongo-c-driver 1.6.0.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.5.4</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-4/</link>
      <pubDate>Mon, 30 Jan 2017 10:19:34 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-4/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://emptysqua.re/blog/libbson-and-libmongoc-1-5-4/dive-life-rawscan.jpg&#34; style=&#34;display: block; max-width:100%&#34;&gt;&lt;/p&gt;&#xA;  &#xA;&#xA;  &#xA;  &#xA;&#xA;&#xA;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.5.4 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;p&gt;There is no change to libbson since 1.5.3; we released it to keep pace with libmongoc&amp;rsquo;s version.&lt;/p&gt;&#xA;&lt;p&gt;The libmongoc release fixes an &lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-2003&#34;&gt;error&#xA;in cursor iteration when a readConcern is set&lt;/a&gt;. Thanks to Jeremy Mikola and&#xA;Hannes Magnusson.&lt;/p&gt;&#xA;&lt;h1&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.5.4/libbson-1.5.4.tar.gz&#34;&gt;libbson-1.5.4.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.5.4/mongo-c-driver-1.5.4.tar.gz&#34;&gt;libmongoc-1.5.4.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER/fixforversion/17931/&#34;&gt;All bugs fixed in 1.5.4&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Peace,&lt;br/&gt;&#xA;  — A. Jesse Jiryu Davis&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.5.3</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-3/</link>
      <pubDate>Wed, 11 Jan 2017 18:21:41 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-3/</guid>
      <description>&lt;img src=&#34;monstrosity.png&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.5.3 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;libbson&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is a patch release that fixes &lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1982&#34;&gt;a build error with MinGW on Windows&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1&gt;libmongoc&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This release fixes the following bugs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1964&#34;&gt;CDRIVER-1964&lt;/a&gt;: Windows CA stores should be opened with read-only flag&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1970&#34;&gt;CDRIVER-1970&lt;/a&gt;: Conflicting symbols MAX and MIN on FreeBSD&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1971&#34;&gt;CDRIVER-1971&lt;/a&gt;: Missing exports of some GridFS functions&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1975&#34;&gt;CDRIVER-1975&lt;/a&gt;: Mixed $ and non-$ query operators should be allowed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There was a glitch on the road from 1.5.1 to this release, 1.5.3. We tried to update the driver to connect to IPv6-only MongoDB servers by hostname, (&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1972&#34;&gt;CDRIVER-1972&lt;/a&gt;). For example, if the server listening on example.com only accepts IPv6 connections, we should be able to connect to it with the URI &lt;code&gt;mongodb://example.com&lt;/code&gt;. Unfortunately we messed this up: if the server only accepts IPv4, we&amp;rsquo;d try IPv6 first, time out, and we did not then fall back to IPv4 (&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1988&#34;&gt;CDRIVER-1988&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two Dramatic Performances About getaddrinfo</title>
      <link>https://emptysqua.re/blog/dramatic-performances-about-getaddrinfo/</link>
      <pubDate>Wed, 04 Jan 2017 21:25:09 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/dramatic-performances-about-getaddrinfo/</guid>
      <description>&lt;img src=&#34;chest-scroll.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;I just discovered this: a couple weeks ago the BSD Now podcast featured &lt;a href=&#34;https://emptysqua.re/blog/getaddrinfo-cpython-mac-and-bsd/&#34;&gt;my article about making getaddrinfo concurrent in Python BSD&lt;/a&gt;. They were doing a roundup of stories about ancient BSD lore and included my tale about fixing an ancient bug. If you want to watch the two hosts cracking each other up with quotes from my silly story, &lt;a href=&#34;https://youtu.be/paGVrcHM-9s?t=13m41s&#34;&gt;watch the video starting at minute 13&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The BSD Now hosts issued a challenge to their listeners: someone should do a dramatic reading of my entire saga. &lt;a href=&#34;https://www.youtube.com/watch?v=hNAiRPo9VvM&#34;&gt;And the host of BSD Synergy, Mason Egger, has done it&lt;/a&gt;. Not only did he perform it with heroic tones fitting the subject matter, he even illustrated it with paintings from King Arthur and Tolkien. He intuited the exact atmosphere I aimed for when I wrote the story.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.5.1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-1/</link>
      <pubDate>Sat, 17 Dec 2016 14:25:39 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-1/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/30459585206/in/photolist-NpBmL9-NpBmnJ-NpBkSf-NpBkub-NpBk2h-NpBjAs-N1tond-N1tnhN-NpBiFG&#34;&gt;&#xA;&lt;img src=&#34;the-oaks-8.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.5.1 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;strong&gt;libbson&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;No change since 1.5.0; released to keep pace with libmongoc&amp;rsquo;s version.&lt;/p&gt;&#xA;&lt;h2&gt;&lt;strong&gt;libmongoc&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is a bugfix release:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fix SEGFAULT with performance counters on NUMA (thanks to Jonathan Wang).&lt;/li&gt;&#xA;&lt;li&gt;Prevent rare assertion error in mongoc_cluster_stream_for_server.&lt;/li&gt;&#xA;&lt;li&gt;Improve error messages from auth failure.&lt;/li&gt;&#xA;&lt;li&gt;Escape quotes when appending CFLAGS to handshake metadata.&lt;/li&gt;&#xA;&lt;li&gt;Fix OpenSSL header lookups in non-default paths.&lt;/li&gt;&#xA;&lt;li&gt;Fix build failure with LibreSSL.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.5.1/libbson-1.5.1.tar.gz&#34;&gt;libbson-1.5.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.5.1/mongo-c-driver-1.5.1.tar.gz&#34;&gt;libmongoc-1.5.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER/fixforversion/17727/&#34;&gt;All bugs fixed in 1.5.1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone who contributed to this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making getaddrinfo Concurrent in Python On Mac OS and BSD</title>
      <link>https://emptysqua.re/blog/getaddrinfo-cpython-mac-and-bsd/</link>
      <pubDate>Mon, 05 Dec 2016 11:50:25 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/getaddrinfo-cpython-mac-and-bsd/</guid>
      <description>&lt;img src=&#34;chest-scroll.jpg&#34; style=&#34;display: block; max-width:100%&#34; alt=&#34;&#34; title=&#34;&#34;&gt;&lt;p&gt;&lt;em&gt;Tell us about the time you made DNS resolution concurrent in Python on Mac and BSD.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;No, no, you do not want to hear that story, my friends. It is nothing but old lore and &lt;code&gt;#ifdefs&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;But you made Python more scalable. The saga of Steve Jobs was sung to you by a mysterious wizard with a fanciful nickname! Tell us!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Gather round, then. I will tell you how I unearthed a lost secret, unbound Python from old shackles, and banished an ancient and horrible Mutex Troll.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 1.1 For MongoDB 3.4</title>
      <link>https://emptysqua.re/blog/motor-1-1/</link>
      <pubDate>Tue, 29 Nov 2016 22:58:25 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-1-1/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;motor-musho.png&#34; alt=&#34;Motor&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;MongoDB 3.4 was released this morning; tonight I&amp;rsquo;ve released Motor 1.1 with support for the latest MongoDB features.&lt;/p&gt;&#xA;&lt;p&gt;Motor 1.1 now depends on PyMongo 3.4 or later. (It&amp;rsquo;s an annoying coincidence that the latest MongoDB and PyMongo versions are the same number.)&lt;/p&gt;&#xA;&lt;p&gt;With MongoDB 3.4 and the latest Motor, you can now configure unicode-aware string comparison using collations. See &lt;a href=&#34;https://pymongo.readthedocs.io/en/stable/3.4.0/examples/collations.html#collation-on-operation&#34;&gt;PyMongo&amp;rsquo;s examples for collation&lt;/a&gt;.&lt;/li&gt; Motor also supports the new &lt;a href=&#34;https://pymongo.readthedocs.io/en/stable/3.4.0/api/bson/decimal128.html#bson.decimal128.Decimal128&#34;&gt;&lt;code&gt;Decimal128&lt;/code&gt;&lt;/a&gt; BSON type. The new MongoDB version supports write concern with all commands that write, so &lt;code&gt;drop_database&lt;/code&gt;, &lt;code&gt;create_collection&lt;/code&gt;, &lt;code&gt;create_indexes&lt;/code&gt;, and all the other commands that modify your data accept a writeConcern parameter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.5.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-0/</link>
      <pubDate>Sun, 27 Nov 2016 22:13:46 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-5-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/30197750970/in/photolist-N1tond-NpBkub-NpBmnJ-NpBjAs-NpBmL9-NpBkSf-NpBiFG-N1tnhN-NpBk2h&#34;&gt;&lt;img src=&#34;the-oaks-3.jpg&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m pleased to announce version 1.5.0 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1&gt;libbson&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;We have a brand-new BSON Type, &lt;a href=&#34;http://mongoc.org/libbson/current/bson_decimal128_t.html&#34;&gt;Decimal128&lt;/a&gt;, which MongoDB 3.4 and all drivers now implement.&lt;/p&gt;&#xA;&lt;p&gt;The BSON &amp;ldquo;code&amp;rdquo; and &amp;ldquo;code with scope&amp;rdquo; types are better supported now: bson_append_code_with_scope now preserves the &amp;ldquo;code with scope&amp;rdquo; type if scope is an empty, non-NULL BSON document, and the &amp;ldquo;code&amp;rdquo; and &amp;ldquo;code with scope&amp;rdquo; types are properly translated to JSON like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Saga of Concurrent DNS: My Article in the MongoDB Engineering Journal</title>
      <link>https://emptysqua.re/blog/mongodb-engineering-journal-getaddrinfo-article/</link>
      <pubDate>Thu, 17 Nov 2016 12:15:26 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/mongodb-engineering-journal-getaddrinfo-article/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://emptysqua.re/blog/mongodb-engineering-journal-getaddrinfo-article/scroll.jpg&#34; style=&#34;display: block; max-width:100%&#34;&gt;&lt;/p&gt;&#xA;  &#xA;&#xA;  &#xA;  &#xA;&#xA;&#xA;&lt;p&gt;Earlier this year I updated CPython to allow concurrent DNS resolution on Mac and BSD. My patch was trivial, but it took me weeks of archeological research to prove it was correct. In this article for the MongoDB Engineering Journal, I sing the ballad of my quest:&lt;/p&gt;&#xA;&lt;div style=&#34;text-align:center; font-size: x-large; line-height: 1.1em; font-weight:bold&#34;&gt;&#xA;&lt;a href=&#34;https://engineering.mongodb.com/post/the-saga-of-concurrent-dns-in-python-and-the-defeat-of-the-wicked-mutex-troll/&#34;&gt;The Saga of Concurrent DNS in Python,&lt;br&gt;and the Defeat of the Wicked Mutex Troll&lt;/a&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;If silly fantasy stories are your thing, enjoy! If not, you can just read &lt;a href=&#34;http://bugs.python.org/issue25924&#34;&gt;the report on bugs.python.org&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 1.0</title>
      <link>https://emptysqua.re/blog/motor-1-0/</link>
      <pubDate>Wed, 02 Nov 2016 18:23:39 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-1-0/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;motor-musho.png&#34; alt=&#34;Motor logo by Musho Rodney Alan Greenblat&#34; title=&#34;motor-musho.png&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;More than four years ago, I was sitting through a particularly distracted period of meditation. It was a Saturday morning and I was sitting on a meditation cushion next to my girlfriend in her Brooklyn apartment, staring at the wall. I suddenly thought of a technique for turning PyMongo into an async driver without rewriting it from scratch, by using greenlets. That weekend I forked PyMongo &lt;a href=&#34;https://github.com/ajdavis/mongo-python-driver/commit/f4cf72300fd84b23a1adf43c4bf226ec987d17b5&#34;&gt;and demonstrated a proof of concept&lt;/a&gt; to my boss.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 0.7</title>
      <link>https://emptysqua.re/blog/motor-0-7/</link>
      <pubDate>Wed, 26 Oct 2016 07:16:27 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-0-7/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://emptysqua.re/blog/motor-0-7/motor-musho.png&#34; alt=&#34;Motor logo by Musho Rodney Alan Greenblat&#34; title=&#34;motor-musho.png&#34; border=&#34;0&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Three weeks after I released the beta, I&amp;rsquo;m proud to present Motor 0.7.&lt;/p&gt;&#xA;&lt;p&gt;For asynchronous I/O Motor now uses a thread pool, which is faster and simpler than the prior implementation with greenlets. It no longer requires the greenlet package, and now requires the futures backport package on Python 2. &lt;a href=&#34;https://emptysqua.re/blog/motor-0-7-beta/&#34;&gt;Read the beta announcement to learn more about the switch from greenlets to threads&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Motor 0.7 Beta With Pymongo 2.9 And A Threaded Core</title>
      <link>https://emptysqua.re/blog/motor-0-7-beta/</link>
      <pubDate>Mon, 03 Oct 2016 08:28:36 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-0-7-beta/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Motor logo by Musho Rodney Alan Greenblat&#34; border=&#34;0&#34; src=&#34;motor-musho.png&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;motor-musho.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please try the beta release of Motor 0.7 and let me know how it works for you:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install motor==0.7b0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Documentation:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://motor.readthedocs.io/en/latest/&#34;&gt;Motor beta documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://motor.readthedocs.io/en/latest/changelog.html&#34;&gt;Motor 0.7 changelog&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In two ways, Motor 0.7 paves the way for Motor 1.0: first, its PyMongo dependency is upgraded from PyMongo 2.8 to 2.9. Second, I have abandoned my greenlet-based core in favor of a faster, simpler core built on a thread pool. Let&#39;s talk about threads first.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.4.2</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-2/</link>
      <pubDate>Fri, 30 Sep 2016 17:26:03 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Princess_May_(steamship)&#34;&gt;&lt;img alt=&#34;Black and white photo. The steamship Princess May ran aground in 1910 on rocks near the north end of Sentinel Island. It was high tide and the momentum of the ship forced it well up onto the rocks, with the bow jutting upward at an angle of 23 degrees.&#34; src=&#34;ss-princess-may.jpg&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.4.2 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;,&#xA;the libraries constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libbson&#34;&gt;libbson&lt;/h2&gt;&#xA;&lt;p&gt;No change since 1.4.1; released to keep pace with libmongoc&#39;s version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.4.1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-1/</link>
      <pubDate>Tue, 20 Sep 2016 16:16:32 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-1/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Description: 19th-Century color print, hand drawing of two elegant white steam ships, with black smoke pouring from each ship&#39;s twin chimneys and large paddle wheels. The ship on the left is triple-decked flying an American flag and a flag with the ship&#39;s name, &amp;quot;St. John&amp;quot;. The other is double-decked, with an American flag and a flag with its name, &amp;quot;Drew&amp;quot;.&#34; src=&#34;steam-ships.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hannes Magnusson and I are pleased to announce version 1.4.1 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.4.0</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0/</link>
      <pubDate>Wed, 10 Aug 2016 18:46:01 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Image description: black and white etching of large steamship in harbor. A few sailors appear tiny in the foreground. Smoke billows from a single wide smokestack amidships.&#34; src=&#34;steamship.jpg&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.4.0 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver. This is a very big release a long time coming.&lt;/p&gt;&#xA;&lt;p&gt;The headline feature is support for the TLS libraries included in Mac and Windows, so you no longer need OpenSSL there. Hannes Magnusson built this feature off contributions by Samantha Ritter and Mark Benvenuto. He overcame months of frustrations and roadblocks to achieve a secure, production-quality implementation; it&#39;s an extraordinary achievement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.4.0-beta1</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0-beta1/</link>
      <pubDate>Wed, 27 Jul 2016 23:06:58 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0-beta1/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Image Description: grainy black-and-white image of calm ocean with misty sky fading to white at the top&#34; src=&#34;sea-black-and-white-water-ocean.jpg&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.4.0-beta1 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h1 id=&#34;libbson&#34;&gt;libbson&lt;/h1&gt;&#xA;&lt;p&gt;New features and bug fixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_reader_reset&lt;/code&gt; seeks to the beginning of a BSON buffer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_steal&lt;/code&gt; efficiently transfers contents from one &lt;code&gt;bson_t&lt;/code&gt; to another.&lt;/li&gt;&#xA;&lt;li&gt;Fix Windows compile error with &lt;code&gt;BSON_EXTRA_ALIGN&lt;/code&gt; disabled.&lt;/li&gt;&#xA;&lt;li&gt;Potential buffer overrun in &lt;code&gt;bson_strndup&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_oid_to_string&lt;/code&gt; optimization for MS Visual Studio&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_oid_is_valid&lt;/code&gt; accepts uppercase hex characters.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_json_reader_read&lt;/code&gt; aborted on some invalid Extended JSON documents.&lt;/li&gt;&#xA;&lt;li&gt;All man page names now begin with &#34;bson_&#34; to avoid install conflicts.&lt;/li&gt;&#xA;&lt;li&gt;Fix bug where error messages were sometimes truncated at 63 chars.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This release tentatively supports the new BSON decimal type. This feature may&#xA;change between now and version 1.5. To try it now, build the library like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talk Python to Me: &#34;Write an Excellent Programming Blog&#34;</title>
      <link>https://emptysqua.re/blog/talk-python-episode-on-writing/</link>
      <pubDate>Tue, 26 Jul 2016 20:50:50 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/talk-python-episode-on-writing/</guid>
      <description>&lt;p&gt;Michael Kennedy and I talked about writing about programming. What kind of writing is most valuable, how do you choose a topic, improve your writing, find an audience, and find the time to write? Listen to the podcast on &lt;a href=&#34;https://talkpython.fm/episodes/show/69/write-an-excellent-programming-blog&#34;&gt;the Talk Python To Me&lt;/a&gt; site.&lt;/p&gt;&#xA;&lt;p&gt;I&#39;ve talked with Michael before: &lt;a href=&#34;https://talkpython.fm/episodes/show/2/python-and-mongodb&#34;&gt;Episode 2 of &#34;Talk Python to Me&#34; was about MongoDB and Python&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;iframe width=&#34;100%&#34; height=&#34;166&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34;&#xA;     src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/275501774&amp;color=ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&#34;&gt;&#xA;&lt;/iframe&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;By the way: Michael&#39;s a Python expert and a master teacher. &lt;a href=&#34;https://www.kickstarter.com/projects/mikeckennedy/python-for-entrepreneurs-video-course&#34;&gt;Join his &#34;Python for Entrepreneurs&#34; course on Kickstarter&lt;/a&gt; now for early access to the course at a deeply discounted price.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Write Resilient MongoDB Applications</title>
      <link>https://emptysqua.re/blog/how-to-write-resilient-mongodb-applications/</link>
      <pubDate>Thu, 14 Jul 2016 23:28:07 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-to-write-resilient-mongodb-applications/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: This technique has been superseded by MongoDB&amp;rsquo;s built-in &lt;a href=&#34;https://emptysqua.re/blog/driver-features-for-mongodb-3-6/#retryable-writes&#34;&gt;retryable writes&lt;/a&gt;, introduced in 2017. Retryable writes are far simpler and superior to the techniques described here. For even stronger guarantees, use &lt;a href=&#34;https://docs.mongodb.com/manual/release-notes/4.0/#multi-document-transactions&#34;&gt;transactions&lt;/a&gt;, released in 2018.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Image description: 5 old-fashioned pixellated bomb icons from the original Macintosh UI, lined up horizontally&#34; src=&#34;bombs.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once, on a winter afternoon in early 2012, I met a MongoDB customer who was very angry.&lt;/p&gt;&#xA;&lt;p&gt;He&#39;d come to our regular &#34;MongoDB Office Hours&#34; at our office in Soho, and he had one question: &#34;How can I make my application resilient in the face of network errors, outages, and other exceptions? Can I just retry every operation until it succeeds?&#34; He demanded to know why we hadn&#39;t published a simple, smart strategy that would work for all applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#34;Smart Strategies for Resilient MongoDB Applications&#34;, The Screencast</title>
      <link>https://emptysqua.re/blog/smart-strategies-for-resilient-mongodb-applications-screencast/</link>
      <pubDate>Wed, 29 Jun 2016 13:56:40 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/smart-strategies-for-resilient-mongodb-applications-screencast/</guid>
      <description>&lt;p&gt;I recorded a screencast of my MongoDB World 2016 talk. It&#39;s about handling network exceptions and other errors in a correct and resilient fashion. If you want a simple, reliable method for programming a MongoDB application, watch this:&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;420&#34; src=&#34;https://www.youtube.com/embed/QKpwx6bQnIM?rel=0&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>72% Of The People I Follow On Twitter Are Men</title>
      <link>https://emptysqua.re/blog/gender-of-twitter-users-i-follow/</link>
      <pubDate>Thu, 23 Jun 2016 22:44:47 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/gender-of-twitter-users-i-follow/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Description: Black and white photo. A boy stands behind a very large abacus that fills the image. He looks up at the ball he is moving on one of the abacus&#39;s wires, above his eye-level. Behind him are two schoolchildren and a chalkboard with indistinct writing and diagrams.&#34; src=&#34;abacus.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;At least, that&#39;s my estimate. Twitter does not ask users their gender, so &lt;a href=&#34;https://www.proporti.onl/&#34;&gt;I have written a program that guesses&lt;/a&gt; based on their names. Among those who follow me, the distribution is even worse: 83% are men. None are gender-nonbinary as far as I can tell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Come to MongoDB World. We Need To Talk.</title>
      <link>https://emptysqua.re/blog/see-me-at-mongodb-world-2016/</link>
      <pubDate>Thu, 09 Jun 2016 14:39:58 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/see-me-at-mongodb-world-2016/</guid>
      <description>&lt;p&gt;Please come see me at MongoDB World. It&#39;s in New York on June 28 and 29. &lt;a href=&#34;http://www.eventbrite.com/e/mongodb-world-2016-registration-19019600136?discount=jessedavis&#34;&gt;I&#39;ll give you 25% off&lt;/a&gt;, I just need to talk to you.&lt;/p&gt;&#xA;&lt;p&gt;You see, for four years, I&#39;ve had this guilt hanging over me. It goes back to a winter afternoon in early 2012, when I met a MongoDB customer who was very angry. He&#39;d come to our regular &#34;MongoDB Office Hours&#34; at our old spot in Soho, and he had one question: &#34;When a MongoDB driver handles a network error, what should my code do?&#34;  He demanded to know why I didn&#39;t have a simple answer for him.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Two Talks at Open Source Bridge</title>
      <link>https://emptysqua.re/blog/see-me-at-open-source-bridge-2016/</link>
      <pubDate>Wed, 08 Jun 2016 09:54:04 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/see-me-at-open-source-bridge-2016/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Description: 1930s postcard, drawing of old-fashioned roadside cafe. The sign says &amp;quot;Trailway Coffee Shop: Fountain Lunches Dinners.&amp;quot; In the background is a forested hill with blue sky.&#34; src=&#34;trailway-coffee-shop.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;My two favorite talks at Open Source Bridge this year aren&#39;t mine: they&#39;re &lt;a href=&#34;https://emptysqua.re/blog/my-two-favorite-talks-at-open-source-bridge-2016&#34;&gt;my friends talks about accessibility, and about a parallel testing system written in Go&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, I&#39;m excited about the talks I&#39;m going to give. I hope to see you there: &lt;strong&gt;&lt;a href=&#34;https://www.eventbrite.com/e/open-source-bridge-2016-registration-22759978709&#34;&gt;Register for Open Source Bridge, June 21-24.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Two Favorite Talks at Open Source Bridge</title>
      <link>https://emptysqua.re/blog/my-two-favorite-talks-at-open-source-bridge-2016/</link>
      <pubDate>Tue, 07 Jun 2016 19:49:00 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/my-two-favorite-talks-at-open-source-bridge-2016/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Description: Brightly colored 1930s postcard, depicting the town of Portland in the foreground with green valleys and the white-capped Mount Hood in the background.&#34; src=&#34;mount-hood.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This year there are two talks I&#39;ve had a hand in. The first is by Rebecca Jennings, an ASL interpreter and accessibility expert. What she knows is so fascinating that I nagged her for two years to speak about it at Open Source Bridge. Finally she&#39;s coming to teach us about accessible information systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#34;Write An Excellent Programming Blog&#34; at PyCon 2016</title>
      <link>https://emptysqua.re/blog/write-an-excellent-blog-pycon-2016/</link>
      <pubDate>Thu, 02 Jun 2016 08:30:33 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/write-an-excellent-blog-pycon-2016/</guid>
      <description>&lt;p&gt;Video of my talk at PyCon 2016 in Portland. I talked about writing about programming.&lt;/p&gt;&#xA;&lt;iframe width=&#34;600&#34; height=&#34;350&#34; src=&#34;https://www.youtube.com/embed/eHXq-IzlGUE?rel=0&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Voluminous related information, including a written version of this material, a screencast that I captioned, and links to further reading:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://emptysqua.re/blog/the-write-an-excellent-programming-blog-page&#34;&gt;The &#34;Write an Excellent Programming Blog&#34; Page&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Say Useful Things To An Audience That&#39;s Listening: 6 Tips For Delivering A PyCon Talk</title>
      <link>https://emptysqua.re/blog/how-i-deliver-a-conference-talk/</link>
      <pubDate>Sun, 29 May 2016 08:34:31 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-i-deliver-a-conference-talk/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Black and white photo of Sylvia Pankhurst addressing crowd of men in Trafalger Square. She is wearing a large old-fashioned hat and her hand is raised in gesture.&#34; src=&#34;sylvia-pankhurst.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span style=&#34;color: gray&#34;&gt;&lt;em&gt;Sylvia Pankhurst didn&#39;t waste time on Q &amp;amp; A.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ten minutes before my first PyCon talk ever, I was standing at the podium. I had got up there as soon as the previous speaker stepped off&amp;mdash;I had to be sure I was ready in time for my 3:15pm slot! The nice session runner gave me a water bottle, the A/V guy wired me up, and then they left me to stand and sweat at the lectern. I stared at the audience as they filed in. The waiting was unbearable. At the moment my laptop&#39;s clock flipped from 3:14 to 3:15, I began.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Captioning Myself And 6 Other Ways I&#39;ll Prepare In The 24 Hours Before I Speak At Pycon</title>
      <link>https://emptysqua.re/blog/how-i-prepare-24-hours-before-a-talk/</link>
      <pubDate>Thu, 26 May 2016 13:34:15 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-i-prepare-24-hours-before-a-talk/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/File:Oregon_Convention_Center_Dusk_1_(edit).jpg&#34;&gt;&lt;img alt=&#34;&#34; src=&#34;oregon-con-center.jpg&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At 1:10pm Pacific Time this Wednesday, I&#39;ll be in Portland, sitting in a lecture room at PyCon, judging the right moment to walk on stage and start &lt;a href=&#34;https://us.pycon.org/2016/schedule/presentation/1668/&#34;&gt;my talk&lt;/a&gt;. I have a regimen for the 24 hours before that primes me to give you the best talk I can.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://emptysqua.re/blog/series/conference-tips/&#34;&gt;This whole series of articles about conference speaking&lt;/a&gt; is inspired by my friend Sasha Laundy&#39;s &lt;a href=&#34;http://blog.sashalaundy.com/blog/2015/02/23/how-i-prep-in-the-24-hours-before-a-conference-talk/&#34;&gt;24 hours checklist&lt;/a&gt;, which is the definitive guide for public speakers. I&#39;ll add a few more tips for you to choose among, particularly my method to ensure my talk is accessible to Deaf people.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Saw You Fall So I&#39;m Helping</title>
      <link>https://emptysqua.re/blog/i-saw-you-fall/</link>
      <pubDate>Wed, 25 May 2016 09:10:15 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/i-saw-you-fall/</guid>
      <description>&lt;p&gt;Women have been systematically excluded from computer programming for decades. But it wasn&#39;t this way in the past, and it doesn&#39;t need to be in the future. The software industry, it seems, is waking up overnight to how unfairly we&#39;ve treated women and minorities, and we&#39;re beginning to take action to fix it. A talk I gave at the Village Zendo on May 22, 2016.&lt;/p&gt;&#xA;&lt;iframe style=&#34;border: none; margin-bottom:30px&#34; src=&#34;//html5-player.libsyn.com/embed/episode/id/4390009/height/340/width/600/theme/legacy/autoplay/yes/autonext/no/thumbnail/yes/preload/no/no_addthis/no/direction/backward/no-cache/true/&#34; height=&#34;340&#34; width=&#34;600&#34; scrolling=&#34;no&#34;  allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A koan from &lt;em&gt;The Hidden Lamp&lt;/em&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Biggest Gift You Can Give Your Mentor</title>
      <link>https://emptysqua.re/blog/the-best-way-to-thank-your-mentor/</link>
      <pubDate>Sun, 15 May 2016 17:25:09 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/the-best-way-to-thank-your-mentor/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Description: Mentor and Telemachus. An ancient Greek painting of a tall young man instructed by an older man with a white beard, both in white robes.&#34; src=&#34;mentor-and-telemachus.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I did &lt;em&gt;not&lt;/em&gt; say, &#34;It&#39;s nice to see you out of jail.&#34; I was buying lunch at a grocery store in Austin, and I had recognized the cashier. He was my age&amp;mdash;I was 22&amp;mdash;scraggy and blond. A few weeks before, he was in the meditation class I taught at the county jail.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reminding Myself to Back Up My Drives, With Google Sheets</title>
      <link>https://emptysqua.re/blog/backup-reminders-google-sheets/</link>
      <pubDate>Mon, 09 May 2016 08:33:19 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/backup-reminders-google-sheets/</guid>
      <description>&lt;p&gt;My photo archive is the only data I have that&#39;s precious enough to back up, and too big to back up in the cloud. Nevertherless, I procrastinate about making backups. I especially procrastinate about swapping my home backups with the offsite ones at my office. Until now.&lt;/p&gt;&#xA;&lt;h1 id=&#34;my-rig&#34;&gt;My Rig&lt;/h1&gt;&#xA;&lt;p&gt;The photo archive lives on a Seagate 4 TB hard drive, and I back it up to two other 4 TB drives. Yet two more 4 TB drives are Time Machine backups for the system drive on my laptop. I swap these drives in and out of a Mediasonic HF2-SU3S2 enclosure with 4 bays. It&#39;s cheap, remarkably small, and does the job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 16.04 Includes The MongoDB C Driver</title>
      <link>https://emptysqua.re/blog/c-driver-ubuntu/</link>
      <pubDate>Mon, 02 May 2016 13:42:05 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/c-driver-ubuntu/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Debian and Ubuntu logos&#34; src=&#34;debian-ubuntu.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;ve been working with an expert Debian developer, Roberto Sanchez, to package &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt; for Debian. Our efforts paid off: the MongoDB C Driver is now included in Debian Unstable and in Ubuntu 16.04 Xenial Xerus. If you run Xenial, get the driver as easily as:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install libmongoc-1.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Roberto&#39;s patience and passion to teach me about Debian packaging has made it a joy for me.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;If you&#39;re on a RedHat-like system, you&#39;re in luck. Remi Collet maintains excellent RPMs for the C Driver. Commands to enable Remi&#39;s repository and install libmongoc depend on your exact system. For example, on CentOS 6:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Please! Vote For Me At Open Source Bridge</title>
      <link>https://emptysqua.re/blog/vote-for-me-at-open-source-bridge-2016/</link>
      <pubDate>Tue, 26 Apr 2016 22:07:56 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/vote-for-me-at-open-source-bridge-2016/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;open-source-bridge-1.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I love Open Source Bridge so much that I couldn&#39;t restrain myself: I submitted four talks. But I&#39;m not embarrassed. My love for this conference must proclaim itself abundantly. So help me get accepted! Please add stars and comments to the four talks I proposed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: &#34;Black Pipe Testing&#34; and &#34;March to Triumph as a Mentor&#34; have been accepted. My friend Rebecca Friedman&#39;s talk &#34;&lt;a href=&#34;http://opensourcebridge.org/proposals/1867&#34;&gt;The Ability to Disable: Who Did You Forget When You Designed Your UI?&lt;/a&gt;&#34; was also accepted, and &lt;a href=&#34;http://opensourcebridge.org/proposals/1816&#34;&gt;&#34;Massively Parallel Testing at MongoDB&#34;&lt;/a&gt; by my colleagues Shraya Ramani, Kyle Erf. See you in Portland!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code Podcast: Event Loop &amp; Coroutines</title>
      <link>https://emptysqua.re/blog/code-podcast/</link>
      <pubDate>Thu, 14 Apr 2016 21:59:02 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/code-podcast/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;radio.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;It was a treat to talk with Saúl Ibarra Corretgé and Andrey Salomatin for Episode Three of the Code Podcast. We discussed async event loops and coroutines in Python 3 and libuv.&lt;/p&gt;&#xA;&lt;p&gt;Andrey doesn&#39;t simply broadcast an interview: he carefully edits his episodes to tell a story about a specific subject, setting him apart from all the other podcasts about software. Less like Charlie Rose, more like Radiolab. I&#39;m eager to hear the next one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My First Two Articles For The PSF</title>
      <link>https://emptysqua.re/blog/two-articles-for-psf/</link>
      <pubDate>Tue, 05 Apr 2016 16:24:24 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/two-articles-for-psf/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Python Software Foundation logo: two intertwined snakes&#34; src=&#34;python-software-foundation.png&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m delighted to tell you, I&#39;ve started writing on the Python Software Foundation&#39;s blog. The PSF&#39;s communications head Diana Clarke asked me last month if I could blog for them, to share duties with their inveterate writer Mary Ann Sushinsky.&lt;/p&gt;&#xA;&lt;p&gt;So far, &lt;a href=&#34;http://pyfound.blogspot.com/2016/03/genuinely-nice-chap-damien-george.html&#34;&gt;I&#39;ve talked with Damien George and Nicholas Tollervey about the effort to port Python to the new micro:bit&lt;/a&gt;, a tiny computer the BBC is distributing to a million school children in the UK. And &lt;a href=&#34;http://pyfound.blogspot.com/2016/04/auctioneer-jackie-kazil.html&#34;&gt;I interviewed data scientist Jackie Kazil and PSF vice-chair Lynn Root about Jackie&#39;s career&lt;/a&gt; and her leadership of the PyLadies annual charity auction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.5</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-5/</link>
      <pubDate>Wed, 30 Mar 2016 17:14:02 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-5/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;ship-went-away-rawscan.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.3.5 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libbson&#34;&gt;libbson&lt;/h2&gt;&#xA;&lt;p&gt;No change since 1.3.4; released to keep pace with libmongoc&#39;s version.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libmongoc&#34;&gt;libmongoc&lt;/h2&gt;&#xA;&lt;p&gt;This release fixes a crash&#xA;in mongoc_cleanup when an allocator had been set with &lt;code&gt;bson_mem_set_vtable&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It also&#xA;introduces a configure option &lt;code&gt;MONGOC_NO_AUTOMATIC_GLOBALS&lt;/code&gt; which prevents code&#xA;built with GCC from automatically calling &lt;code&gt;mongoc_init&lt;/code&gt; and &lt;code&gt;mongoc_cleanup&lt;/code&gt; when&#xA;your code does not. This obscure, GCC-specific behavior was a bad idea and we&#39;ll remove it entirely in version 2.0. Meanwhile, we&#39;re letting you explicitly opt-out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.2.4 and 1.3.4</title>
      <link>https://emptysqua.re/blog/libbson-and-libmongoc-1-3-4/</link>
      <pubDate>Mon, 14 Mar 2016 23:21:32 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libbson-and-libmongoc-1-3-4/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;still-here-rawscan.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce versions 1.2.4 and 1.3.4 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libbson&#34;&gt;libbson&lt;/h2&gt;&#xA;&lt;p&gt;The new versions of libbson have no changes; they&#39;re released to keep pace with libmongoc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libmongoc&#34;&gt;libmongoc&lt;/h2&gt;&#xA;&lt;p&gt;The MongoDB C Driver releases fix a security vulnerability: when a &lt;code&gt;mongoc_client_t&lt;/code&gt; uses SSL and is disconnected, it failed to re-verify the server certificate after reconnecting. This flaw affects single clients, not pooled ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Play Foul With getaddrinfo()</title>
      <link>https://emptysqua.re/blog/asyncio-getaddrinfo-short-circuit/</link>
      <pubDate>Sun, 13 Mar 2016 22:28:40 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/asyncio-getaddrinfo-short-circuit/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;A team competing in the 1912 Monte Carlo Rally&#34; src=&#34;Russo-balt_s24-55_ralli_monte-karlo_1.jpg&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m the referee for a road rally. You have to drive from New York to San Francisco in 48 hours, but—here&#39;s the catch—I&#39;m going to start my stopwatch &lt;em&gt;before&lt;/em&gt; you can look at the map. Worse, there are hundreds of other drivers who need the map, and only one driver can use it at a time. If you&#39;re unlucky, you could spend the whole 48 hours waiting in line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 0.6</title>
      <link>https://emptysqua.re/blog/motor-0-6-released/</link>
      <pubDate>Sun, 06 Mar 2016 16:41:34 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-0-6-released/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Motor logo by Musho Rodney Alan Greenblat&#34; border=&#34;0&#34; src=&#34;motor-musho.png&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;motor-musho.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Motor is the asynchronous Python driver for MongoDB. It is compatible with Tornado and asyncio.&lt;/p&gt;&#xA;&lt;p&gt;This is just a patch release with &lt;a href=&#34;https://jira.mongodb.org/issues/?jql=fixVersion%20%3D%200.6%20AND%20project%20%3D%20MOTOR&#34;&gt;six bugfixes&lt;/a&gt;, but some fixes required tiny API changes that&#xA;might affect you, so I&#39;m bumping the version from 0.5 to 0.6, instead of to 0.5.1. Read below for the changes—if you make it to the bottom you&#39;ll learn about an abstruse asyncio optimization in Python 3.5.1!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cat-Herd&#39;s Crook published in the MongoDB Engineering Journal</title>
      <link>https://emptysqua.re/blog/cat-herds-crook/</link>
      <pubDate>Thu, 03 Mar 2016 11:27:59 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/cat-herds-crook/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Jesse and Samantha drawn as cats&#34; src=&#34;cats-samantha-jesse.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;At MongoDB we write database drivers in ten programming languages. We try to make them all behave the same, but inevitably they vary. How can we herd all these cats along the same path? For years we failed, and each false start left us more discouraged. But now we&#39;re on track to standardize all our drivers. Samantha Ritter and I gave a talk about this at &lt;a href=&#34;https://youtu.be/OBjU_xYtPmA&#34;&gt;Open Source Bridge last year&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Performance, Persuasion, Structure: What A Speaking Coach Did For My PyCon Talk</title>
      <link>https://emptysqua.re/blog/how-i-rehearse-a-conference-talk/</link>
      <pubDate>Sun, 28 Feb 2016 23:31:00 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-i-rehearse-a-conference-talk/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Emmeline Pankhurst&#34; src=&#34;Emmeline-Pankhurst-011.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the months leading to PyCon, I&#39;m refining my talk three ways: rehearsing it alone, rehearsing it for friends, and rehearsing it for a professional speaking coach. Guess which is the most productive?&lt;/p&gt;&#xA;&lt;p&gt;Yesterday I did a session with Melissa Collom, an opera singer, speaking coach, and friend. She advised me on my performance, persuasion, and structure. &lt;strong&gt;We made my talk twice as good&lt;/strong&gt;, &lt;a href=&#34;http://melissacollom.com/coaching/&#34;&gt;I bet she could help with your talk, too&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing WinKerberos</title>
      <link>https://emptysqua.re/blog/announcing-winkerberos/</link>
      <pubDate>Fri, 26 Feb 2016 04:46:29 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-winkerberos/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Kerberos&#34; src=&#34;kerberos.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;My colleague Bernie Hackett has published a new Python extension module called &lt;a href=&#34;https://github.com/mongodb-labs/winkerberos&#34;&gt;WinKerberos&lt;/a&gt;. It provides native Kerberos support to Python applications on Windows. It&#39;s a drop-in replacement for the popular &lt;a href=&#34;https://pypi.python.org/pypi/pykerberos&#34;&gt;PyKerberos&lt;/a&gt; package, but it uses Microsoft&#39;s own Kerberos implementation, the Security Support Provider Interface (SSPI), and supports some Windows specific options.&lt;/p&gt;&#xA;&lt;h1 id=&#34;motivation&#34;&gt;Motivation&lt;/h1&gt;&#xA;&lt;p&gt;A number of MongoDB customers have requested support for GSSAPI authentication with PyMongo on Windows, so they can use Kerberos with Python and MongoDB.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Do Your Slides At The Last Minute: 8 Steps To Writing Your PyCon Talk</title>
      <link>https://emptysqua.re/blog/how-i-write-a-conference-talk/</link>
      <pubDate>Wed, 10 Feb 2016 12:23:37 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/how-i-write-a-conference-talk/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Jennie Baines addressing a rally of Suffragettes at Trafalgar Square,&#xA;1908&#34; src=&#34;jennie-baines.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span style=&#34;color: gray&#34;&gt;&lt;em&gt;Jennie Baines didn&#39;t take questions at the&#xA;end.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;PyCon accepted my talk &#34;Write an Excellent Programming Blog&#34;. If you got&#xA;in, too, congratulations! Now we have to write our talks.&lt;/p&gt;&#xA;&lt;div class=&#34;toc&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#plan-your-time&#34;&gt;Plan your time.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#inspire&#34;&gt;Inspire.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#outline&#34;&gt;Outline.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#rehearse-immediately&#34;&gt;Rehearse immediately.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#make-room-for-new-insights&#34;&gt;Make room for new insights.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#put-off-making-slides&#34;&gt;Put off making slides.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#rehearse-with-friends&#34;&gt;Rehearse with friends.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#get-a-coach&#34;&gt;Get a coach.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#excel&#34;&gt;Excel.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;plan-your-time&#34;&gt;Plan your time.&lt;/h1&gt;&#xA;&lt;p&gt;Plan to begin your talk late, and not to take questions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.3</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-3/</link>
      <pubDate>Fri, 05 Feb 2016 09:11:06 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-3/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;sea-black-and-white-weather-ocean.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.3.3 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries&#xA;constituting the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libbson&#34;&gt;libbson&lt;/h2&gt;&#xA;&lt;p&gt;No change since 1.3.2; released to keep pace with libmongoc&#39;s version.&lt;/p&gt;&#xA;&lt;h2 id=&#34;libmongoc&#34;&gt;libmongoc&lt;/h2&gt;&#xA;&lt;p&gt;Fixes a bug where&#xA;a slightly-oversized bulk write operation was not split into batches; instead,&#xA;it was sent whole to the server, which rejected it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.3.3/libbson-1.3.3.tar.gz&#34;&gt;libbson-1.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.3.3/mongo-c-driver-1.3.3.tar.gz&#34;&gt;libbson-1.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER-1082&#34;&gt;CDRIVER-1082, &#34;Proper bulk operation splitting at the margin&#34;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Peace,&lt;br /&gt;&#xA;&amp;nbsp;&amp;nbsp;&amp;mdash; A. Jesse Jiryu Davis&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.2</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-2/</link>
      <pubDate>Mon, 01 Feb 2016 20:53:38 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-2/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Deep sea&#34; src=&#34;Deep_sea_2.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.3.2 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries constituting the MongoDB C Driver. We fixed a critical bug and a few minor ones.&lt;/p&gt;&#xA;&lt;h1 id=&#34;libbson&#34;&gt;libbson&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;man pages couldn&#39;t be built from a distribution tarball.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;libmongoc&#34;&gt;libmongoc&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A socket is properly discarded after a network error from a command.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_database_get_collection&lt;/code&gt; copies the database&#39;s read preferences,&#xA;read concern, and write concern, instead of copying the client&#39;s.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;mongoc_cursor_t&lt;/code&gt; private struct allows a negative limit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;links&#34;&gt;Links&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.3.2/libbson-1.3.2.tar.gz&#34;&gt;libbson-1.3.2.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.3.2/mongo-c-driver-1.3.2.tar.gz&#34;&gt;libmongoc-1.3.2.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?jql=project%20%3D%20CDRIVER%20AND%20fixVersion%20%3D%201.3.2%20ORDER%20BY%20due%20ASC%2C%20priority%20DESC%2C%20created%20ASC&#34;&gt;All bugs fixed in 1.3.2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;Documentation for libmongoc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone who contributed to this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>getaddrinfo on Mac OS X</title>
      <link>https://emptysqua.re/blog/getaddrinfo-on-macosx/</link>
      <pubDate>Mon, 01 Feb 2016 05:31:29 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/getaddrinfo-on-macosx/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;parasole.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;In 2015 and 2016 I plunged deep into an investigation of &lt;code&gt;getaddrinfo&lt;/code&gt; on Mac OS X.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/getaddrinfo-deadlock/&#34;&gt;How To Deadlock Your Python With &lt;code&gt;getaddrinfo&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/mac-python-getaddrinfo-queueing/&#34;&gt;How To Hobble Your Python Web-Scraper With &lt;code&gt;getaddrinfo&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/asyncio-getaddrinfo-short-circuit/&#34;&gt;How To Play Foul With &lt;code&gt;getaddrinfo&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emptysqua.re/blog/getaddrinfo-cpython-mac-and-bsd&#34;&gt;Good news! &lt;code&gt;getaddrinfo&lt;/code&gt; is thread-safe.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Image: Isabella Cantanea Parasole, Italian 1565&amp;ndash;1625, embroidery design. From &lt;em&gt;Fashion and Virtue: Textile Patterns and the Print Revolution 1520&amp;ndash;1620&lt;/em&gt;, by Femke Speelberg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Hobble Your Python Web-Scraper With getaddrinfo()</title>
      <link>https://emptysqua.re/blog/mac-python-getaddrinfo-queueing/</link>
      <pubDate>Sun, 31 Jan 2016 22:54:39 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/mac-python-getaddrinfo-queueing/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;medieval.jpg&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the second article in what seems destined to be &lt;a href=&#34;https://emptysqua.re/blog/getaddrinfo-on-macosx&#34;&gt;a four-part series about Python&#39;s &lt;code&gt;getaddrinfo&lt;/code&gt; on Mac&lt;/a&gt;. Here, I discover that contention for the &lt;code&gt;getaddrinfo&lt;/code&gt; lock makes connecting to localhost appear to time out.&lt;/p&gt;&#xA;&lt;h1 id=&#34;network-timeouts-from-asyncio&#34;&gt;Network Timeouts From asyncio&lt;/h1&gt;&#xA;&lt;p&gt;A Washington Post data scientist named &lt;a href=&#34;https://twitter.com/aljohri&#34;&gt;Al Johri&lt;/a&gt; posted to the MongoDB User Group list, asking for help with a Python script. His script downloaded feeds from 500 sites concurrently and stored the feeds&#39; links in MongoDB. Since this is the sort of problem async is good for, he used my async driver Motor. He&#39;d chosen to implement his feed-fetcher on &lt;code&gt;asyncio&lt;/code&gt;, with Motor&#39;s new &lt;code&gt;asyncio&lt;/code&gt; integration and &lt;a href=&#34;https://twitter.com/andrew_svetlov&#34;&gt;Andrew Svetlov&lt;/a&gt;&#39;s &lt;code&gt;aiohttp&lt;/code&gt; library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Video of My Coroutines Live-Coding Demonstration, at SCALE14x</title>
      <link>https://emptysqua.re/blog/scale14x-coroutines-talk/</link>
      <pubDate>Mon, 25 Jan 2016 15:41:14 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/scale14x-coroutines-talk/</guid>
      <description>&lt;p&gt;Here&#39;s video of the live-coding demo I did Sunday at SCALE14x: in under an hour I built a Python 3 async framework. I began by demonstrating non-blocking sockets, callbacks, and an event loop. This implementation is very efficient and rather ugly. In the second half, I build Python coroutines out of a Future class, generators, and a Task class. Coroutines are the best of both worlds: as scalable as callbacks and as straightforward as regular blocking code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.1</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-1/</link>
      <pubDate>Mon, 18 Jan 2016 15:09:01 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-1/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Deep sea&#34; src=&#34;Deep_sea.png&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m pleased to announce version 1.3.1 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries constituting the MongoDB C Driver. This is a run-of-the-mill bugfix release for you, unless you use GridFS with write concern, read concern, or read preference&amp;mdash;in that case read carefully before upgrading.&lt;/p&gt;&#xA;&lt;h1 id=&#34;libbson&#34;&gt;libbson&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;bson_strnlen&lt;/code&gt; is off by one on Windows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;BSON_HAVE_STRNLEN&lt;/code&gt; config check used incorrectly.&lt;/li&gt;&#xA;&lt;li&gt;Incompatibility with older CMake versions.&lt;/li&gt;&#xA;&lt;li&gt;Wrong-sized allocation in &lt;code&gt;bson_json_reader_new&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;libmongoc&#34;&gt;libmongoc&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_client_get_gridfs&lt;/code&gt; now copies the client&#39;s read preferences, read concern, and write concern to the newly created &lt;code&gt;mongoc_gridfs_t&lt;/code&gt;. Before this fix, GridFS operations were always executed with the default config: data was read from the primary, with the read concern level &#34;local&#34;, and written with write concern &#34;acknowledged&#34;. Now, if you have configured any of these options on the &lt;code&gt;mongoc_client_t&lt;/code&gt;, they are respected by the &lt;code&gt;mongoc_gridfs_t&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;CMakeLists.txt now includes and installs the pkg-config files.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;links&#34;&gt;Links&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.3.1/libbson-1.3.1.tar.gz&#34;&gt;libbson-1.3.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.3.1/mongo-c-driver-1.3.1.tar.gz&#34;&gt;libmongoc-1.3.1.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?jql=project%20%3D%20CDRIVER%20AND%20fixVersion%20%3D%201.3.1%20ORDER%20BY%20due%20ASC%2C%20priority%20DESC%2C%20created%20ASC&#34;&gt;All bugs fixed in 1.3.1&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;Documentation for libmongoc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone who contributed to this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experiences Migrating to Lektor</title>
      <link>https://emptysqua.re/blog/experience-migrating-to-lektor/</link>
      <pubDate>Sat, 16 Jan 2016 10:04:13 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/experience-migrating-to-lektor/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;Medieval_writing_desk.jpg&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Over the last few weeks I&#39;ve ported this blog, with over 400 articles, to Armin Ronacher&#39;s new static site generator &lt;a href=&#34;http://getlektor.com&#34;&gt;Lektor&lt;/a&gt;. Lektor will grow and mature for years to come, but it isn&#39;t too early to write up my experience rebuilding a substantial site with it.&lt;/p&gt;&#xA;&lt;p&gt;These observations fall into two categories. One is the comparison between Lektor and my homemade blog software, Motor-Blog. The other is the comparison between running a dynamic server versus deploying a static site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Site Is Built With Lektor</title>
      <link>https://emptysqua.re/blog/this-site-is-built-with-lektor/</link>
      <pubDate>Sun, 10 Jan 2016 13:48:20 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/this-site-is-built-with-lektor/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;magpie.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the last week I&#39;ve ported this blog and my /photography to Armin Ronacher&#39;s new static site generator, &lt;a href=&#34;http://getlektor.com&#34;&gt;Lektor&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the beginning, I blogged on WordPress. WordPress is a wonder of the world. It &lt;a href=&#34;http://venturebeat.com/2015/11/08/wordpress-now-powers-25-of-the-web/&#34;&gt;powers a quarter of the web&lt;/a&gt;. The &lt;a href=&#34;http://opensourcebridge.org/sessions/1419&#34;&gt;WordPress developers have figured out how to auto-update their millions of users&lt;/a&gt; (please follow that link, the story is fascinating), and this auto-updating makes it a remarkably secure and robust platform. But I&#39;m somehow not smart enough to make WordPress fast.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Deadlock Your Python With getaddrinfo()</title>
      <link>https://emptysqua.re/blog/getaddrinfo-deadlock/</link>
      <pubDate>Mon, 21 Dec 2015 09:23:30 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/getaddrinfo-deadlock/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Spectacled caiman and American pipesnake&#34; src=&#34;spectacled-caiman.jpg&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;Spectacled caiman and American pipesnake&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;What happens if you run this code?:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python3&#34; data-lang=&#34;python3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;socket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;threading&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;lookup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;socket&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;getaddrinfo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;python.org&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;threading&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Thread&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;target&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;lookup&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;t&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fork&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Parent waits for child.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;os&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;wait&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;else&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Child hangs here.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;socket&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;getaddrinfo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;mongodb.org&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;80&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;On Linux, it completes in milliseconds. On Mac, it usually hangs. Why?&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h1 id=&#34;journey-to-the-center-of-the-interpreter&#34;&gt;Journey To The Center Of The Interpreter&lt;/h1&gt;&#xA;&lt;p&gt;Anna Herlihy and I tackled this question a few months ago. It didn&#39;t look like the code example above—not at first. We&#39;d come across an article by Anthony Fejes reporting that the new PyMongo 3.0 didn&#39;t work with his software, which combined multithreading with multiprocessing. Often, he&#39;d create a MongoClient, then fork, and in the child process the MongoClient couldn&#39;t connect to any servers:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing PyMongo 3.2</title>
      <link>https://emptysqua.re/blog/announcing-pymongo-3-2/</link>
      <pubDate>Mon, 07 Dec 2015 21:24:46 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-pymongo-3-2/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;tree-boa.jpg&#34; alt=&#34;Emerald Tree Boa&#34; title=&#34;Emerald Tree Boa&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our Python team released PyMongo 3.2 today. This time I wasn&#39;t involved at all; Bernie Hackett, Anna Herlihy, and Luke Lovett developed this version, with a contribution from Felix Yan.&lt;/p&gt;&#xA;&lt;p&gt;Version 3.2 implements the new server features introduced in MongoDB 3.2. (It&#39;s a coincidence that the version numbers are the same.)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Support for ReadConcern.&lt;/li&gt;&#xA;&lt;li&gt;WriteConcern is now applied to &lt;code&gt;find_one_and_replace()&lt;/code&gt;, &lt;code&gt;find_one_and_update()&lt;/code&gt;, and &lt;code&gt;find_one_and_delete()&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Support for the new bypassDocumentValidation option in write helpers.&lt;/li&gt;&#xA;&lt;li&gt;Reading and write raw BSON with &lt;code&gt;RawBSONDocument&lt;/code&gt;&amp;mdash;this feature is very exciting, show us what you can do with it!&lt;/li&gt;&#xA;&lt;li&gt;We now prefer the package &#34;Monotime&#34; to the outdated &#34;monotonic&#34; to provide a safe clock.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Some MongoClient properties, like &lt;code&gt;client.is_mongos&lt;/code&gt;, will now block until a connection is established or raise ServerSelectionTimeoutError if no server is available.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.0</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0/</link>
      <pubDate>Mon, 07 Dec 2015 21:09:33 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;catania.jpg&#34; alt=&#34;San Giovanni li Cuti - Catania&#34; title=&#34;San Giovanni li Cuti - Catania&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I just released version 1.3.0 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the C libraries that compose the MongoDB C Driver. The changelist is massive; the highlights are support for new MongoDB 3.2 features, and a widespread cleanup of GridFS.&lt;/p&gt;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.3.0/libbson-1.3.0.tar.gz&#34;&gt;libbson-1.3.0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.3.0/mongo-c-driver-1.3.0.tar.gz&#34;&gt;libmongoc-1.3.0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?filter=18525&#34;&gt;All features and bugfixes in 1.3.0&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;Documentation for libmongoc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;libbson&#34;&gt;libbson&lt;/h1&gt;&#xA;&lt;p&gt;Since the release candidate &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; 1.3.0-rc0, the only changes have been fixes for compiler warnings and errors on various platforms.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.0-rc0</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-rc0/</link>
      <pubDate>Wed, 02 Dec 2015 15:13:43 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-rc0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/1951336700/&#34;&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;1951336700_4295b5ebb7_o.jpg&#34; title=&#34;Sea, from Staten Island Ferry&#34; /&gt;&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-beta0/&#34;&gt;The MongoDB C Driver beta I announced two weeks ago&lt;/a&gt; has ripened into a release candidate. Here is what&#39;s changed between 1.3.0-beta0 and today&#39;s release, 1.3.0-rc0.&lt;/p&gt;&#xA;&lt;h1 id=&#34;libbson&#34;&gt;libbson&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Parse DBRefs correctly from JSON.&lt;/li&gt;&#xA;&lt;li&gt;CMake option to disable building tests: you can turn off ENABLE_TESTS.&lt;/li&gt;&#xA;&lt;li&gt;Fix build warnings on some platforms.&lt;/li&gt;&#xA;&lt;li&gt;The build system is refactored to declare the current version and latest&#xA;   release in one place.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;libmongoc&#34;&gt;&lt;a href=&#34;http://mongoc.org&gt;libmongoc&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Features:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Black Pipe Testing: In Summary</title>
      <link>https://emptysqua.re/blog/black-pipe-testing-in-summary/</link>
      <pubDate>Tue, 01 Dec 2015 08:44:56 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/black-pipe-testing-in-summary/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/2644619595/&#34;&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;rainy-montreal_2644619595_o.jpg&#34; alt=&#34;Pipe in Montreal&#34; title=&#34;Pipe in Montreal&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Every conversation I hear about testing seems to go thus:&lt;/p&gt;&#xA;&lt;p&gt;&#34;Here&#39;s a useful way to test!&#34;&lt;/p&gt;&#xA;&lt;p&gt;&#34;But if you only test that way, you won&#39;t catch all the bugs.&#34;&lt;/p&gt;&#xA;&lt;p&gt;I would like us, the open source community, to move on from this conversation. Each testing method is useful for some kinds of software, and each accomplishes some goals. But none is plenipotent. There is no silver bullet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.2.2</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-2/</link>
      <pubDate>Mon, 30 Nov 2015 21:46:56 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-2/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;Great_Sea-Dragons.jpg&#34; alt=&#34;Great Sea Dragons&#34; title=&#34;Great Sea Dragons&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This morning I released version 1.2.2 of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the libraries that compose the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;p&gt;This release fixes an edge case where the driver can query hidden secondaries unintentionally. The bug manifests rarely: the hidden node must be in the seed list, and your application must be reading with a non-primary read preference while no primary is available.&lt;/p&gt;&#xA;&lt;p&gt;(If the hidden node is not in the seed list it is never discovered. If it is in the seed list but a primary is available, the driver trusts the primary&#39;s host list, which omits the hidden member.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing Motor 0.5 with asyncio, Python 3.5, and &#34;async&#34; / &#34;await&#34;</title>
      <link>https://emptysqua.re/blog/motor-0-5-asyncio-async-await-keywords/</link>
      <pubDate>Mon, 30 Nov 2015 09:31:39 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-0-5-asyncio-async-await-keywords/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Motor&#34; border=&#34;0&#34; src=&#34;motor-musho.png&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;motor-musho.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Welcome back, I hope you enjoyed Thanksgiving. I certainly did; among everything for which I give thanks this year, I am grateful for the contributions Rémi Jolin, Andrew Svetlov, and Nikolay Novik made to Motor&#39;s asyncio integration. Their help is the greatest gift any project of mine has received.&lt;/p&gt;&#xA;&lt;p&gt;And now, it&#39;s official! Motor 0.5 is released. Install it with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install motor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;This version of Motor is compatible with Python 2.6 through 3.5, and it can use either Tornado or asyncio. This means pip no longer automatically installs Tornado.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.3.0-beta0</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-beta0/</link>
      <pubDate>Wed, 18 Nov 2015 17:42:50 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-beta0/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;morecambe-bay.jpg&#34; alt=&#34;Morecambe Bay&#34; title=&#34;Morecambe Bay&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&#39;ve just released a beta of &lt;a href=&#34;http://mongoc.org&#34;&gt;the MongoDB C driver&lt;/a&gt; 1.3.0, with support for new features in&#xA;the upcoming MongoDB 3.2. The driver is compatible with MongoDB 2.4 and later. Please try it out and &lt;a href=&#34;https://jira.mongodb.org/browse/CDRIVER&#34;&gt;file a ticket in Jira if you see any issues&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/libbson/releases/download/1.3.0-beta0/libbson-1.3.0-beta0.tar.gz&#34;&gt;libbson-1.3.0-beta0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mongodb/mongo-c-driver/releases/download/1.3.0-beta0/mongo-c-driver-1.3.0-beta0.tar.gz&#34;&gt;mongo-c-driver-1.3.0-beta0.tar.gz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jira.mongodb.org/issues/?jql=fixVersion%20%3D%201.3.0-beta0%20AND%20project%20%3D%20CDRIVER&#34;&gt;Issues resolved in 1.3.0-beta0&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;MongoDB C Driver Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;New features and changes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_collection_find_and_modify&lt;/code&gt; will now apply the &lt;code&gt;mongoc_collection_t&lt;/code&gt;&#39;s&#xA;   &lt;code&gt;write_concern_t&lt;/code&gt; when talking to MongoDB 3.2.&lt;/li&gt;&#xA;&lt;li&gt;Support for MongoDB 3.2&#39;s &#34;readConcern&#34; feature for queries, counts, and&#xA;   aggregations. The option &#34;readConcernLevel&#34; is now accepted in the MongoDB&#xA;   URI. New struct &lt;code&gt;mongoc_read_concern_t&lt;/code&gt;, and functions operating on it:&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_client_get_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_client_set_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_database_get_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_database_set_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_collection_get_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_collection_set_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_read_concern_copy&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_read_concern_destroy&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_read_concern_get_level&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_read_concern_new&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_read_concern_set_level&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_uri_get_read_concern&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Support for MongoDB 3.2&#39;s &#34;bypassDocumentValidation&#34; option for writes.&lt;/li&gt;&#xA;&lt;li&gt;New struct &lt;code&gt;mongoc_bulk_write_flags_t&lt;/code&gt; and related functions:&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_bulk_operation_set_bypass_document_validation&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_bulk_operation_set_flags&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;New struct &lt;code&gt;mongoc_find_and_modify_opts_t&lt;/code&gt; and related functions:&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_new&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_destroy&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_set_sort&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_set_update&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_set_fields&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_set_flags&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_find_and_modify_opts_set_bypass_document_validation&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_collection_find_and_modify_with_opts&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Configurable wait time on tailable cursors with MongoDB 3.2:&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_cursor_get_max_await_time_ms&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mongoc_cursor_set_max_await_time_ms&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Support for MongoDB 3.2 wire protocol: use commands in place of OP_QUERY,&#xA;   OP_GETMORE, and OP_KILLCURSORS messages.&lt;/li&gt;&#xA;&lt;li&gt;To explain a query plan with MongoDB 3.2, you must now call the &#34;explain&#34;&#xA;   command, instead of including the &#34;$explain&#34; key in a mongoc_collection_find&#xA;   query. &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_collection_find.html#explain-command&#34;&gt;See the &lt;code&gt;mongoc_collection_find&lt;/code&gt; documentation page for details.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Use constant-time comparison when verifying credentials&lt;/li&gt;&#xA;&lt;li&gt;Combine environment&#39;s CFLAGS with configure options when building.&lt;/li&gt;&#xA;&lt;li&gt;Improved man page output and &#34;whatis&#34; entries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Extensive bugfixes and improvements in GridFS, including:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tech Talks Are Campfires: Jesse&#39;s Three Reasons You Should Speak At PyCon</title>
      <link>https://emptysqua.re/blog/tech-talks-are-campfires-jesses-three-reasons-you-should-speak-at-pycon/</link>
      <pubDate>Sun, 15 Nov 2015 22:16:45 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/tech-talks-are-campfires-jesses-three-reasons-you-should-speak-at-pycon/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;rose-lamartine-yates-addressing-a-crowd-on-wimbledon-common-before-the-war.jpg&#34; alt=&#34;Rose Lamartine Yates&#34; title=&#34;Rose Lamartine Yates&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://us.pycon.org/2016/speaking/&#34;&gt;PyCon call for proposals&lt;/a&gt; has been open a few weeks now&amp;mdash;why should you submit a talk? Why should you speak at software events in general?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;div class=&#34;toc&#34;&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#build-the-campfire&#34;&gt;Build the campfire&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#refine-your-thinking&#34;&gt;Refine your thinking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#meet-specialists&#34;&gt;Meet specialists&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;build-the-campfire&#34;&gt;Build the campfire&lt;/h1&gt;&#xA;&lt;p&gt;Programmers like to meet. It&#39;s surprising, with our reputation for introversion&amp;mdash;or perhaps it is to overcome our introversion that we have so many events. In any case, our demand for software conferences and Meetups is voracious. PyCon, for example, has grown from 400 attendees in 2006 to 3000 people last year. Past PyCon chair Diana Clarke tells me they could have easily sold a thousand more tickets in recent years if they&#39;d raised the cap.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Motor 0.5 Beta: asyncio, async and await, simple aggregation</title>
      <link>https://emptysqua.re/blog/motor-0-5-beta-asyncio-async-await/</link>
      <pubDate>Tue, 10 Nov 2015 23:52:06 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/motor-0-5-beta-asyncio-async-await/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Motor&#34; border=&#34;0&#34; src=&#34;motor-musho.png&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;motor-musho.png&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today is a good day: I&#39;ve published a beta of &lt;a href=&#34;http://motor.readthedocs.org/en/stable/&#34;&gt;Motor&lt;/a&gt;, my async Python driver for MongoDB. This version is the biggest upgrade yet. Help me beta-test it! Install with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install --pre motor==0.5b0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Motor 0.5 still depends on PyMongo 2.8.0 exactly. That PyMongo version is outdated, I know, but I&#39;ve decided not to tackle that issue right now.&lt;/p&gt;&#xA;&lt;p&gt;You&#39;ll forgive me, because this Motor release is huge:&lt;/p&gt;</description>
    </item>
    <item>
      <title>This Blog Runs MongoDB 3.2 rc2</title>
      <link>https://emptysqua.re/blog/this-blog-runs-mongodb-3-2-rc2/</link>
      <pubDate>Sun, 08 Nov 2015 22:11:02 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/this-blog-runs-mongodb-3-2-rc2/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;amx.jpg&#34; alt=&#34;1968 AMC AMX GT Concept Car&#34; title=&#34;1968 AMC AMX GT Concept Car&#34; /&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This blog is my equivalent of the hotrod an auto-mechanic has sitting in the garage: very custom, chopped down, and jagged at the edges. &lt;a href=&#34;https://github.com/ajdavis/motor-blog&#34;&gt;I&#39;ve built it in Python&lt;/a&gt;, of course, with Tornado and &lt;a href=&#34;http://motor.readthedocs.org/&#34;&gt;Motor&lt;/a&gt;, my async driver for MongoDB. The original intent of the blog was to &lt;a href=&#34;https://emptysqua.re/blog/eating-your-own-hamster-food/&#34;&gt;eat my own hamster food&lt;/a&gt; by building substantial software on top of Motor. Nowadays it&#39;s just the roadster I tinker with on the weekend.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test MongoDB Failure Scenarios With MockupDB</title>
      <link>https://emptysqua.re/blog/test-mongodb-failures-mockupdb/</link>
      <pubDate>Wed, 04 Nov 2015 09:46:01 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/test-mongodb-failures-mockupdb/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/1528243252&#34;&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;york-street-pipes.jpg&#34; alt=&#34;York Street pipes&#34; title=&#34;York Street pipes&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the fifth article in &lt;a href=&#34;https://emptysqua.re/blog/black-pipe-testing-series/&#34;&gt;my series on &#34;black pipe&#34; testing&lt;/a&gt;. Traditional black box tests work well if your application takes inputs and returns output through one interface: the API. But connected applications have two interfaces: both the API and the messages they send and receive on the network. I call the validation of both ends a black pipe test.&lt;/p&gt;&#xA;&lt;p&gt;In my previous article &lt;a href=&#34;https://emptysqua.re/blog/libmongoc-black-pipe-testing-mock-server/&#34;&gt;I described black pipe testing in pure C&lt;/a&gt;; now we return to Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyMongo 3.1 Works Around A Funny Performance Flaw In Python 2</title>
      <link>https://emptysqua.re/blog/announcing-pymongo-3-1-python-condition-variable/</link>
      <pubDate>Mon, 02 Nov 2015 18:14:46 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-pymongo-3-1-python-condition-variable/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;leaf.jpg&#34; alt=&#34;Leaf&#34; title=&#34;Leaf&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bernie Hackett, Anna Herlihy, Luke Lovett, and I are pleased to announce the release of PyMongo 3.1. It adds features that conform to two new cross-language driver specs: it implements the &lt;a href=&#34;https://github.com/mongodb/specifications/blob/master/source/command-monitoring/command-monitoring.rst&#34;&gt;Command Monitoring Spec&lt;/a&gt; to help you measure performance, and it adds a &lt;a href=&#34;https://pymongo.readthedocs.io/en/stable/3.1/api/gridfs/index.html#gridfs.GridFSBucket&#34;&gt;GridFSBucket class&lt;/a&gt; to match our new &lt;a href=&#34;https://github.com/mongodb/specifications/blob/master/source/gridfs/gridfs-spec.rst&#34;&gt;GridFS Spec&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A few of our users reported that PyMongo 3 used five or ten percent of their CPU while idle, and recorded a couple hundred context switches per second. I investigated and found a slapstick performance flaw in Python 2&#39;s condition variable that was interacting badly with my concurrency design in PyMongo 3.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing libbson and libmongoc 1.2.1</title>
      <link>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-1/</link>
      <pubDate>Thu, 29 Oct 2015 21:25:58 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-1/</guid>
      <description>&lt;p&gt;&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;miami-haze.jpg&#34; alt=&#34;Miami Haze, by Dan DeChiaro&#34; title=&#34;Miami Haze, by Dan DeChiaro&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is my pleasure to announce the 1.2.1 release of &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;, the C libraries that compose the MongoDB C Driver.&lt;/p&gt;&#xA;&lt;p&gt;This release includes critical bugfixes for SSL connections with&#xA;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_pool_t.html&#34;&gt;&lt;code&gt;mongoc_client_pool_t&lt;/code&gt;&lt;/a&gt;, and for Unix domain socket connections.&lt;/p&gt;&#xA;&lt;p&gt;The documentation is updated for a change introduced in version 1.2.0:&#xA;&lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_set_ssl_opts.html&#34;&gt;&lt;code&gt;mongoc_client_set_ssl_opts&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/mongoc_client_pool_set_ssl_opts.html&#34;&gt;&lt;code&gt;mongoc_client_pool_set_ssl_opts&lt;/code&gt;&lt;/a&gt; now configure&#xA;the driver to require an SSL connection to the server, even if &#34;ssl=true&#34; is&#xA;omitted from the MongoDB URI. Before, SSL options were ignored unless&#xA;&#34;ssl=true&#34; was included in the URI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Black Pipe Testing A Connected Application In C</title>
      <link>https://emptysqua.re/blog/libmongoc-black-pipe-testing-mock-server/</link>
      <pubDate>Mon, 26 Oct 2015 23:20:08 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/libmongoc-black-pipe-testing-mock-server/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/emptysquare/404160108&#34;&gt;&lt;img alt=&#34;The F Train&#34; src=&#34;f-train.jpg&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;The F Train&#34;/&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the fourth article in &lt;a href=&#34;https://emptysqua.re/blog/black-pipe-testing-series/&#34;&gt;my series on &#34;black pipe&#34; testing&lt;/a&gt;. Here I describe testing libmongoc (the MongoDB C Driver) as a black pipe.&lt;/p&gt;&#xA;&lt;p&gt;Like any network client library, libmongoc cannot be fully tested as a black box. Traditional black box tests enter some input and check the output—this only validates one side of the system at a time. But libmongoc has two sides, working in concert. One side is its public API, its structs and functions and so on. The other is its communication over the network with the MongoDB server. Only by treating it as a black pipe can we fully test its two sides.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross-linking Mallard HTML Pages With yelp-build</title>
      <link>https://emptysqua.re/blog/link-mallard-html-with-yelp-build/</link>
      <pubDate>Fri, 23 Oct 2015 11:37:08 +0000</pubDate><author>jesse@emptysquare.net (A. Jesse Jiryu Davis)</author>
      <guid>https://emptysqua.re/blog/link-mallard-html-with-yelp-build/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Mallard Ducks - John James Audubon&#34; src=&#34;Mallard_Ducks_Drawing.jpg&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;Mallard Ducks - John James Audubon&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;From its start, the MongoDB C Driver has been split into two projects: &lt;a href=&#34;http://mongoc.org/libbson/current/&#34;&gt;libbson&lt;/a&gt; and &lt;a href=&#34;http://mongoc.org/libmongoc/current/&#34;&gt;libmongoc&lt;/a&gt;. Each has its own reference manual, each comprising hundreds of pages, written in the &lt;a href=&#34;http://projectmallard.org/&#34;&gt;Mallard XML format&lt;/a&gt;. We use &lt;a href=&#34;https://github.com/GNOME/yelp-tools&#34;&gt;yelp-build&lt;/a&gt; to convert the Mallard to HTML and put it online. For example, here&#39;s the reference page for libmongoc&#39;s &lt;code&gt;mongoc_collection_find&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;div style=&#34;font-family: monospace !important; text-align: left !important&#34;&gt;&#xA;&lt;h2&gt;mongoc_collection_find&lt;/h2&gt;&#xA;&lt;div&gt;&lt;pre&gt;mongoc_cursor_t *&#xA;mongoc_collection_find (mongoc_collection_t       *collection,&#xA;                        mongoc_query_flags_t       flags,&#xA;                        uint32_t                   skip,&#xA;                        uint32_t                   limit,&#xA;                        uint32_t                   batch_size,&#xA;                        const bson_t              *query,&#xA;                        const bson_t              *fields,&#xA;                        const mongoc_read_prefs_t *read_prefs);&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h2&gt;Parameters&lt;/h2&gt;&#xA;&lt;style&gt;&#xA;#parameters-table td p { margin-right: 10px; }&#xA;&lt;/style&gt;&#xA;&lt;table id=&#34;parameters-table&#34;&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;p&gt;collection&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
