<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ballingt</title>
    <link>http://ballingt.com/</link>
    <description>Recent content on ballingt</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 13 Jul 2024 23:00:00 +0000</lastBuildDate>
    <atom:link href="http://ballingt.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>JavaScript Packaging</title>
      <link>http://ballingt.com/js-packaging/</link>
      <pubDate>Sat, 13 Jul 2024 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/js-packaging/</guid>
      <description>&lt;p&gt;Publishing a JavaScript library requires creating an artifact (a .tar.gz file, aka tarball) that will be downloaded when your users install the package, say with &lt;code&gt;npm install your-package&lt;/code&gt;. Call the directory in a git repo the &amp;ldquo;source package&amp;rdquo; and the tarball artifact the &amp;ldquo;distribution package.&amp;rdquo; After creating this artifact you upload it to a package registry, typically npm. This artifact has requirements like there being a file called package.json at the root with metadata including the name of the package and its version number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I finally got excited about LLMs</title>
      <link>http://ballingt.com/llm-matter-now/</link>
      <pubDate>Sun, 19 Mar 2023 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/llm-matter-now/</guid>
      <description>&lt;style&gt;&#xA;img {&#xA;  width: 100%;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been reading &lt;a href=&#34;https://til.simonwillison.net/llms/python-react-pattern&#34;&gt;Simon Willison&lt;/a&gt;, &lt;a href=&#34;https://interconnected.org/home/2023/03/16/singularity&#34;&gt;Matt Webb&lt;/a&gt;, and &lt;a href=&#34;https://www.geoffreylitt.com/2023/01/29/fun-with-compositional-llms-querying-basketball-stats-with-gpt-3-statmuse-langchain.html&#34;&gt;Geoffrey Litt&lt;/a&gt; this week on using LLMs to accomplish things I didn&amp;rsquo;t realize computers could do.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s Large Language Models, often we&amp;rsquo;re talking about GPT-3 from OpenAI but the technology is more than a specific product. &lt;a href=&#34;https://til.simonwillison.net/llms/llama-7b-m2&#34;&gt;Open versions of this&lt;/a&gt; aren&amp;rsquo;t far behind. Google might have had better versions of all this stuff while improving its reliability and accuracy, but too to late now: these are too clearly useful for the market to allow for-profit companies to continue to be cautious.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Observable Hugo Shortcode</title>
      <link>http://ballingt.com/observable-hugo-shortcode/</link>
      <pubDate>Wed, 01 Dec 2021 12:00:00 +0000</pubDate>
      <guid>http://ballingt.com/observable-hugo-shortcode/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a shortcode for embedding Observable notebooks in Hugo.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{{&amp;lt; obs&#xA;    specifier=&amp;#34;@ballingt/embedding-example&amp;#34;&#xA;    cells=&amp;#34;vegaPetalsWidget,viewof minSepalLength,viewof minSepalWidth&amp;#34;&#xA;&amp;gt;}}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When the shortcode is installed in layouts/shortcodes/obs.html in your Hugo site, the input above produces the output below.&lt;/p&gt;&#xA;&lt;iframe&#xA;  width=&#34;100%&#34;&#xA;  frameborder=&#34;0&#34;&#xA;  src=&#34;https://observablehq.com/embed/@ballingt/embedding-example?cells=vegaPetalsWidget%2cviewof%20minSepalLength%2cviewof%20minSepalWidth&#34;&gt;&lt;/iframe&gt;&#xA;&lt;script&gt;&#xA;(function() {&#xA; let s = document.querySelectorAll(&#39;script&#39;);&#xA; let script = s[s.length - 1];&#xA; let iframe = script.previousElementSibling;&#xA; window.addEventListener(&#34;message&#34;, (e) =&gt; {&#xA;  if (e.origin === &#39;https://observablehq.com&#39;&#xA;      &amp;&amp; e.source === iframe.contentWindow) {&#xA;   const msg = JSON.parse(e.data)&#xA;   if (msg.context === &#39;iframe.resize&#39;) {&#xA;    iframe.height = msg.height;&#xA;   }&#xA;  }&#xA; });&#xA;})();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;p&gt;Here&amp;rsquo;s the code to stick in the file layouts/shortcodes/obs.html.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Porting Endless Sky</title>
      <link>http://ballingt.com/porting-endless-sky/</link>
      <pubDate>Sun, 27 Dec 2020 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/porting-endless-sky/</guid>
      <description>&lt;style&gt;&#xA;img {&#xA;  width: 100%;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;I spent a couple weekends in &lt;a href=&#34;https://twitter.com/ballingt/status/1021620043170246656&#34;&gt;2018&lt;/a&gt; and 2019 trying and giving up at porting &lt;a href=&#34;http://endless-sky.github.io/&#34;&gt;Endless Sky&lt;/a&gt;, an open source 2D space exploration game in the vein of Escape Velocity, to the web. I&amp;rsquo;d start with writing Hello World in C using &lt;a href=&#34;https://emscripten.org/&#34;&gt;Emscripten&lt;/a&gt; to compile to WebAssembly and then try to draw the rest of the owl: porting a whole application.&lt;/p&gt;&#xA;&lt;p&gt;This year I decided to ask for help. I was fortunate to make contact with &lt;a href=&#34;https://github.com/janisozaur&#34;&gt;janisozaur&lt;/a&gt;, who already had experience porting &lt;a href=&#34;https://openrct2.org/&#34;&gt;OpenRCT2&lt;/a&gt; to the web. janisozaur did basically the entire port and I added some JavaScript integration for things like saving games.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019</title>
      <link>http://ballingt.com/2019/</link>
      <pubDate>Thu, 26 Dec 2019 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/2019/</guid>
      <description>&lt;style&gt;&#xA;img {&#xA;  width: 100%;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;h1 id=&#34;this-year&#34;&gt;This Year&lt;/h1&gt;&#xA;&lt;p&gt;New biking destinations!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;China Camp, great for first time biking campers, bike path almost the whole way, &amp;lt;30mi&lt;/li&gt;&#xA;&lt;li&gt;Pinehurst Road around Redwood Regional Park from Berkeley, great forest!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://ballingt.com/assets/bikeroute.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://ballingt.com/books/&#34;&gt;Reading&lt;/a&gt;: lots of scifi! I had a great reading summer.&lt;/p&gt;&#xA;&lt;p&gt;Traveled to Serbia and Argentina!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://ballingt.com/assets/argentina.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Work: I joined a data engineering team at Dropbox for a while, which was a good fit for expanding the scope of some work I was had already been doing, instrumenting desktop client and web interfaces to gather signals for ML models.&#xA;Then in October I jumped to a new thing, &lt;a href=&#34;https://observablehq.com/&#34;&gt;Observable&lt;/a&gt;!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Waiting for the next Python implementation</title>
      <link>http://ballingt.com/next-python/</link>
      <pubDate>Tue, 17 Sep 2019 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/next-python/</guid>
      <description>&lt;p&gt;The time may be ripe for a new Python implementation.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://www.youtube.com/watch?v=ITksU31c1WY&#34;&gt;lot&lt;/a&gt; &lt;a href=&#34;https://www.youtube.com/watch?v=KDXhu4rxTNY&#34;&gt;of&lt;/a&gt; &lt;a href=&#34;https://www.youtube.com/watch?v=ftP5BQh1-YM&#34;&gt;keynotes&lt;/a&gt; lately have called for one anyway. They are joined &amp;mdash; informally, not speaking in an official capacity &amp;mdash; by Python core developers in issuing a wakeup call: where is Python in the browser? Where is Python on mobile devices? How could Python be 2x faster?&lt;/p&gt;&#xA;&lt;p&gt;Barry Warsaw at the &lt;a href=&#34;https://youtu.be/8dDp-UHBJ_A?t=2288&#34;&gt;PyCon 2019 Python Steering Council Panel Keynote&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The language is pretty awesome.&#xA;[&amp;hellip;]&#xA;The interpreter, in a sense, is 28 years old.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experiences that have Tetris-Effect&#39;d me</title>
      <link>http://ballingt.com/tetris-effect/</link>
      <pubDate>Sun, 28 Oct 2018 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/tetris-effect/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Tetris_effect&#34;&gt;Tetris Effect&lt;/a&gt;: doing certain kinds of really absorbing things will make the activity pevasive in your thoughts when you close your eyes. This isn&amp;rsquo;t conversing with characters from a book I&amp;rsquo;m reading in a dream, this is starting to fall asleep and suddenly seeing falling blocks. I&amp;rsquo;d consider this different from &amp;ldquo;thinking with portals&amp;rdquo; where I start to be reminded of a game during waking hours. As I fall asleep, I think of the days activities in terms of this activity. My schoolwork is a form of fitting falling pieces together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Thue-Morse Sequence</title>
      <link>http://ballingt.com/thue-morse/</link>
      <pubDate>Sun, 28 Oct 2018 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/thue-morse/</guid>
      <description>&lt;style&gt;&#xA;blockquote p:not(:first-child) {&#xA;  display: block;&#xA;}&#xA;&lt;/style&gt;&#xA;&#xA;&#xA;&lt;h1 id=&#34;making-things-even&#34;&gt;Making things even&lt;/h1&gt;&#xA;&lt;p&gt;When I was little I liked (had a compulsion&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) to make certain things symmetrically even: if I accidentally brushed my face with my left hand, I might purposefully brush it with my right.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes left then right wasn&amp;rsquo;t enough: the right touch had been more recent! As the mental weight of each touch decayed with time, the right touch remained always a little stronger. The fix to this inequity was to tap, brush, or nibble again; this time first right, then left.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python is not Java or C&#43;&#43;: Python as a second language empathy</title>
      <link>http://ballingt.com/python-second-language-empathy/</link>
      <pubDate>Fri, 06 Apr 2018 19:00:00 +0000</pubDate>
      <guid>http://ballingt.com/python-second-language-empathy/</guid>
      <description>&lt;style&gt;&#xA;img {&#xA;  width: 100%;&#xA;}&#xA;ul {&#xA;  margin: 1em 0;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.2018.pycascades.com/talks/python-is-not-java-or-c/&#34;&gt;abstract&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/kWNBK2cnaYE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;python-is-not-java-nor-is-it-c&#34;&gt;Python is not Java, nor is it C++&lt;/h1&gt;&#xA;&lt;p&gt;It&amp;rsquo;s different! Let&amp;rsquo;s talk about how.&lt;/p&gt;&#xA;&lt;h1 id=&#34;why&#34;&gt;Why?&lt;/h1&gt;&#xA;&lt;p&gt;Because as Python experts (you did choose to come to a Python conference so likely you&amp;rsquo;re either an expert already or in time you&amp;rsquo;re going to become one if you keep going to Python conferences) we have a responsibility to help our colleagues and collaborators who don&amp;rsquo;t know Python as well we do. The part of that responsibility I want to focus on today is when other people have experience with other programming languages but are new to Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyCon Trivia 2017</title>
      <link>http://ballingt.com/pycon-trivia/</link>
      <pubDate>Thu, 01 Jun 2017 10:00:00 +0000</pubDate>
      <guid>http://ballingt.com/pycon-trivia/</guid>
      <description>&lt;p&gt;Brandon Rhodes, in addition to chairing the PyCon and giving a talk this year,&#xA;MC’d the Python trivia night as he has done for the past three years.&#xA;(&lt;a href=&#34;http://rhodesmill.org/brandon/2014/pycon-trivia-night/&#34;&gt;2014&lt;/a&gt;,&#xA;&lt;a href=&#34;http://rhodesmill.org/brandon/2015/pycon-trivia-night/&#34;&gt;2015&lt;/a&gt;,&#xA;&lt;a href=&#34;http://rhodesmill.org/brandon/2016/pycon-trivia-night/&#34;&gt;2016&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;This year for some reason (maybe because I see him &lt;a href=&#34;https://blogs.dropbox.com/tech/&#34;&gt;at&#xA;work&lt;/a&gt;) Brandon asked me to help out with the&#xA;trivia night. Along with Larry Hastings, each of the three of us wrote eight&#xA;trivia questions.  I wrote questions for the second section of trivia of night.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Methods in Python</title>
      <link>http://ballingt.com/python-methods/</link>
      <pubDate>Sat, 06 May 2017 19:00:00 +0000</pubDate>
      <guid>http://ballingt.com/python-methods/</guid>
      <description>&lt;h1 id=&#34;meet-self&#34;&gt;Meet self&lt;/h1&gt;&#xA;&lt;p&gt;In Python we have functions and methods.&lt;/p&gt;&#xA;&lt;p&gt;Function definitions in Python look like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sloganify&lt;/span&gt;(x):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; or bust!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;format(x)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;And method definitions look like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&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:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sloganize&lt;/span&gt;(self, x):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; or bust!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;format(x)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h1 id=&#34;classes-are-buckets-of-functions&#34;&gt;Classes are buckets of functions&lt;/h1&gt;&#xA;&lt;p&gt;When we write Python code, we don&amp;rsquo;t really write methods; we write class&#xA;statements which contain function definitions.&lt;/p&gt;&#xA;&lt;p&gt;Class statements look like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       greeting &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;which is syntactic sugar for something like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why teach JavaScript first</title>
      <link>http://ballingt.com/why-javascript-first/</link>
      <pubDate>Sat, 22 Apr 2017 23:00:00 +0000</pubDate>
      <guid>http://ballingt.com/why-javascript-first/</guid>
      <description>&lt;p&gt;A couple of tweet threads from Sarah Drasner caught my eye today:&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;The decision by Stanford to use JavaScript to teach instead of Java has me wondering, why not Python?&lt;/p&gt;&amp;mdash; Sarah Drasner (@sarah_edo) &lt;a href=&#34;https://twitter.com/sarah_edo/status/855810196219846656&#34;&gt;April 22, 2017&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;After a few hours of this tweet going and some interesting discussion in the thread, I think my opinion on this has swayed &lt;a href=&#34;https://t.co/1z1z5EJyNf&#34;&gt;https://t.co/1z1z5EJyNf&lt;/a&gt;&lt;/p&gt;&amp;mdash; Sarah Drasner (@sarah_edo) &lt;a href=&#34;https://twitter.com/sarah_edo/status/855934231582789632&#34;&gt;April 22, 2017&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;I agree: teach intro programming in JavaScript.&#xA;Although I value folks doing and collecting Real Research like &lt;a href=&#34;https://computinged.wordpress.com/&#34;&gt;Mark&#xA;Guzdial&lt;/a&gt;,&#xA;&lt;a href=&#34;http://blog.melchua.com/&#34;&gt;Mel Chua&lt;/a&gt;, and &lt;a href=&#34;https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext&#34;&gt;Phillip&#xA;Guo&lt;/a&gt;&#xA;on this and other computing education issues,&#xA;my opinion on this comes mostly from my own experiences teaching and learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debouncing terminology</title>
      <link>http://ballingt.com/debouncing/</link>
      <pubDate>Tue, 04 Apr 2017 18:30:00 +0000</pubDate>
      <guid>http://ballingt.com/debouncing/</guid>
      <description>&lt;div class=&#34;asking-questions-intro&#34;&gt;&lt;/div&gt;&#xA;&lt;p&gt;When I get stuck on a computer thing, I tend to ask a question&#xA;in an irc channel or Slack or Zulip.&lt;/p&gt;&#xA;&lt;style&gt;&#xA;  .post div {&#xA;    margin: 0 auto;&#xA;  }&#xA;  .asking-questions-intro {&#xA;    width: 510px;&#xA;    height: 400px;&#xA;    background: url(&#34;/assets/drawings/7c4f1317-631d-40b4-8ccd-249653574024.png&#34;) no-repeat;&#xA;    background-position: left -170px top -130px;&#xA;  }&#xA;  .asking-questions-simple {&#xA;    width: 250px;&#xA;    height: 120px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -50px top -30px;&#xA;  }&#xA;  .asking-questions-multiple {&#xA;    width: 300px;&#xA;    height: 240px;&#xA;    background: url(&#34;/assets/drawings/80addbcf-f5d9-4e5b-ba3d-f9bca5ec43f0.png&#34;) no-repeat;&#xA;    background-position: left 0px top -30px;&#xA;  }&#xA;  .asking-questions-cancel-nevermind {&#xA;    width: 300px;&#xA;    height: 100px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -30px top -210px;&#xA;  }&#xA;  .asking-questions-cancel-ignore {&#xA;    width: 300px;&#xA;    height: 150px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -30px top -320px;&#xA;  }&#xA;  .asking-questions-cancel-still-use {&#xA;    width: 300px;&#xA;    height: 170px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -30px top -490px;&#xA;  }&#xA;  .asking-questions-queued-up {&#xA;    width: 400px;&#xA;    height: 350px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -500px top -80px;&#xA;  }&#xA;  .asking-questions-queued-up-cancel {&#xA;    width: 400px;&#xA;    height: 240px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -350px top -860px;&#xA;  }&#xA;  .asking-questions-concurrent {&#xA;    width: 320px;&#xA;    height: 250px;&#xA;    background: url(&#34;/assets/drawings/98dea813-3f23-4b06-88b7-241cde1b9926.png&#34;) no-repeat;&#xA;    background-position: left -480px top -480px;&#xA;  }&#xA;  .asking-questions-throttling {&#xA;    width: 380px;&#xA;    height: 270px;&#xA;    background: url(&#34;/assets/drawings/80addbcf-f5d9-4e5b-ba3d-f9bca5ec43f0.png&#34;) no-repeat;&#xA;    background-position: left -580px top -10px;&#xA;  }&#xA;  .asking-questions-debouncing {&#xA;    width: 200px;&#xA;    height: 290px;&#xA;    background: url(&#34;/assets/drawings/80addbcf-f5d9-4e5b-ba3d-f9bca5ec43f0.png&#34;) no-repeat;&#xA;    background-position: left -10px top -520px;&#xA;  }&#xA;  .asking-questions-debouncing-after-first {&#xA;    width: 350px;&#xA;    height: 500px;&#xA;    background: url(&#34;/assets/drawings/80addbcf-f5d9-4e5b-ba3d-f9bca5ec43f0.png&#34;) no-repeat;&#xA;    background-position: left -340px top -500px;&#xA;  }&#xA;  .asking-questions-queue {&#xA;    width: 250px;&#xA;    height: 470px;&#xA;    background: url(&#34;/assets/drawings/80addbcf-f5d9-4e5b-ba3d-f9bca5ec43f0.png&#34;) no-repeat;&#xA;    background-position: left -320px top -10px;&#xA;  }&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;asking-questions-simple&#34;&gt;&lt;/div&gt;&#xA;&lt;p&gt;Sometimes it takes a while for my question to be answered. This is OK!&#xA;Sometimes the act of asking the question helps me get unstuck.&#xA;Often I end up making some progress after asking the question.&#xA;At this point I can say &amp;ldquo;nevermind, I don&amp;rsquo;t need this question answered&#xA;anymore,&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Who am I to give this talk?</title>
      <link>http://ballingt.com/wanna-do-a-talk/</link>
      <pubDate>Mon, 09 Jan 2017 20:00:00 +0000</pubDate>
      <guid>http://ballingt.com/wanna-do-a-talk/</guid>
      <description>&lt;p&gt;Mariatta Wijaya tweeted&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;💭Thought process:&lt;br&gt;- I wanna do a talk about lib X 💡&lt;br&gt;- nah I&amp;#39;m not qualified 😩&lt;br&gt;- lib author should give the talk&lt;br&gt;&lt;br&gt;How can I overcome this?&lt;br&gt;😓😕&lt;/p&gt;&amp;mdash; Mariatta 🤦 (@mariatta) &lt;a href=&#34;https://twitter.com/mariatta/status/818577500800307200&#34;&gt;January 9, 2017&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;tonight, asking how to get over the feeling that&#xA;you are not qualified to give a talk you have an idea for.&#xA;You can read other answers by following the tweet thread.&#xA;Here are some of my thoughts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From the Recurse Center to Dropbox</title>
      <link>http://ballingt.com/2016/</link>
      <pubDate>Mon, 09 Jan 2017 08:00:00 +0000</pubDate>
      <guid>http://ballingt.com/2016/</guid>
      <description>&lt;style&gt;&#xA;li img {&#xA;  width: 100%;&#xA;}&#xA;img {&#xA;  width: 100%;&#xA;}&#xA;video {&#xA;  width: 100%;&#xA;}&#xA;ul {&#xA;  list-style: none;&#xA;  margin-left: 0 !important;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;Last September I moved on from &lt;a href=&#34;https://www.recurse.com/&#34;&gt;the Recurse Center&lt;/a&gt;, f.k.a. Hacker School.&#xA;Three and a half wonderful years there shaped me as a programmer, an educator,&#xA;a contributing community member and above all as a learner.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s so much to say about the Recurse Center that I have trouble saying anything at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive Interpreter Undo</title>
      <link>http://ballingt.com/interactive-interpreter-undo/</link>
      <pubDate>Tue, 13 Sep 2016 11:00:00 +0000</pubDate>
      <guid>http://ballingt.com/interactive-interpreter-undo/</guid>
      <description>&lt;p&gt;Undo is my favorite feature of &lt;a href=&#34;https://github.com/bpython/bpython&#34;&gt;the fancy python shell I help&#xA;maintain&lt;/a&gt;, and I wish more interactive&#xA;interpreters had it. I’ve &lt;a href=&#34;http://ballingt.com/rich-terminal-applications-2&#34;&gt;previously&#xA;written&lt;/a&gt; about the mechanics&#xA;of implementing a command line interface that can rewrite its history, but not&#xA;about how to teach a system to undo. I’d like to tell you why I like undo, and&#xA;I hope afterward you&amp;rsquo;ll consider adding undo to your favorite interactive interpreter.&#xA;I’m not going to cover how to write a program or language implementation from&#xA;scratch with efficient undo as a design goal, although this is also topic I’m&#xA;learning about. (If you have reading suggestions on this topic, please &lt;a href=&#34;https://twitter.com/ballingt&#34;&gt;let me&#xA;know!&lt;/a&gt;)&#xA;Instead I’ll go over ways to add undo to existing programs and suggest&#xA;some hacks you can use to try out undo with many command line interfaces&#xA;today.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Richer command line interfaces</title>
      <link>http://ballingt.com/rich-terminal-applications-2/</link>
      <pubDate>Thu, 14 Jul 2016 09:30:00 +0000</pubDate>
      <guid>http://ballingt.com/rich-terminal-applications-2/</guid>
      <description>&lt;p&gt;This post is preceded by a description of &lt;a href=&#34;http://ballingt.com/rich-terminal-applications&#34;&gt;two types of command line&#xA;interfaces&lt;/a&gt;. The more command line-like of these&#xA;two types integrates into a normal shell session (&lt;code&gt;python&lt;/code&gt;, &lt;code&gt;telnet&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt;)&#xA;instead of using the alternate screen to present a fullscreen text user interface&#xA;(&lt;code&gt;top&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;emacs&lt;/code&gt;).&#xA;Sometimes programs blur this boundary with fancy formatting in a line-oriented&#xA;command line interface, carefully avoiding overwriting&#xA;previous user inputs and command outputs.&#xA;On-keystroke autocompletion, multiline editing, inline documentation and&#xA;syntax highlighting can be implemented with these techniques, making command line&#xA;interfaces more useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two types of command line interfaces</title>
      <link>http://ballingt.com/rich-terminal-applications/</link>
      <pubDate>Sat, 09 Jul 2016 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/rich-terminal-applications/</guid>
      <description>&lt;h2 id=&#34;command-line-creature-comforts&#34;&gt;Command Line Creature Comforts&lt;/h2&gt;&#xA;&lt;p&gt;When a command line utility writes to stdout, sometimes that output is going&#xA;to be piped to another utility or redirected to a file. And sometimes the&#xA;input it reads from stdin will be coming from a file or another utility.&#xA;But other times that output is just going to be displayed by a terminal emulator,&#xA;and that input is going to be provided by a human typing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic banner grabbing with Python</title>
      <link>http://ballingt.com/banner-grabbing-with-python/</link>
      <pubDate>Tue, 28 Jun 2016 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/banner-grabbing-with-python/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m attempting to write a bot and I was trying to find some information&#xA;about ports on other computers. If anyone could help me out, I would appreciate it.&lt;/p&gt;&#xA;&lt;p&gt;When you create a socket in Python, what does it represent?&lt;/p&gt;&#xA;&lt;p&gt;What would be the underlying procedure for creating a connection with a host?&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s say I try to connect to a host using socket.connect, does it raise an exception if it times out?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finding closure with closures</title>
      <link>http://ballingt.com/python-closures/</link>
      <pubDate>Wed, 01 Jun 2016 16:00:00 +0000</pubDate>
      <guid>http://ballingt.com/python-closures/</guid>
      <description>&lt;p&gt;This is a presentation I gave at PyCon 2016.&#xA;You can &lt;a href=&#34;https://www.youtube.com/watch?v=E9wS6LdXM8Y&#34;&gt;watch the video on YouTube&lt;/a&gt;&#xA;and &lt;a href=&#34;https://cdn.rawgit.com/thomasballinger/python-closures-slides/master/closures.html#1&#34;&gt;view the slides&lt;/a&gt;&#xA;served from the&#xA;&lt;a href=&#34;https://github.com/thomasballinger/python-closures-slides&#34;&gt;repo on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;A friend of mine was asked what a closure was at a programming interview a few&#xA;years ago. Despite being a competent Python and JavaScript programmer who took&#xA;advantage of closures in code he wrote, he froze up at the question.&#xA;It&amp;rsquo;d be nice to have something to say in response to this question,&#xA;if not a solid definition.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rebinding closures in Python</title>
      <link>http://ballingt.com/rebinding-closures-in-python/</link>
      <pubDate>Tue, 05 Jan 2016 12:00:00 +0000</pubDate>
      <guid>http://ballingt.com/rebinding-closures-in-python/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.python.org/3/whatsnew/2.2.html#pep-227-nested-scopes&#34;&gt;Since the release of Python 2.2&lt;/a&gt;&#xA;in 2001, all Python functions have closed over bindings in outer scopes.&#xA;Before this release variables referenced from outer scopes had to be passed in&#xA;as arguments. A common workaround to this limiting behavior&#xA;was to set these at function definition time&#xA;with keyword arguments:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env python2.0&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:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;(self, name):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; filter(&lt;span style=&#34;color:#66d9ef&#34;&gt;lambda&lt;/span&gt; x, name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;name: x &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; name, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;list_attribute)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;Since 2001 this workaround is no longer necessary and the references&#xA;to &lt;code&gt;name&lt;/code&gt; in the body of the lambda function are resolved using the&#xA;current value in the outer &lt;code&gt;find&lt;/code&gt; function:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remember to use invalidate_caches() in Python 3</title>
      <link>http://ballingt.com/import-invalidate-caches/</link>
      <pubDate>Mon, 21 Dec 2015 14:00:00 +0000</pubDate>
      <guid>http://ballingt.com/import-invalidate-caches/</guid>
      <description>&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;This code fails 42% of the time. &lt;a href=&#34;https://t.co/kTWKHrff3Q&#34;&gt;https://t.co/kTWKHrff3Q&lt;/a&gt; &lt;a href=&#34;https://t.co/pxLTYjkPYU&#34;&gt;pic.twitter.com/pxLTYjkPYU&lt;/a&gt;&lt;/p&gt;&amp;mdash; Thomas Ballinger (@ballingt) &lt;a href=&#34;https://x.com/ballingt/status/679016654651703296?ref_src=twsrc%5Etfw&#34;&gt;December 21, 2015&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.x.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;I was getting intermittent failures of a&#xA;test that checked that a feature of&#xA;&lt;a href=&#34;http://bpython-interpreter.org/&#34;&gt;bpython&lt;/a&gt; was working.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;The test was failing on my computer&#xA;despite &lt;a href=&#34;https://travis-ci.org/bpython/bpython/jobs/94126769#L536&#34;&gt;passing on Travis CI&lt;/a&gt;,&#xA;a service that automatically runs the tests of&#xA;the project each time I send changes to GitHub.&#xA;The test only failed if another test had been run&#xA;right before it, so running this other test was somehow&#xA;changing the environment in which the failing test ran.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terminal talk in one week</title>
      <link>http://ballingt.com/terminal-talk-in-one-week/</link>
      <pubDate>Fri, 03 Apr 2015 09:00:00 +0000</pubDate>
      <guid>http://ballingt.com/terminal-talk-in-one-week/</guid>
      <description>&lt;p&gt;Last night &lt;a href=&#34;http://mathamy.com/&#34;&gt;Amy Hanlon&lt;/a&gt;, &lt;a href=&#34;http://emptysqua.re/&#34;&gt;A. Jesse Jiryu Davis&lt;/a&gt;&#xA;and I gave previews of our upcoming PyCon talks at an &lt;a href=&#34;http://www.meetup.com/nycpython/&#34;&gt;NYC Python Meetup Group&lt;/a&gt;&#xA;event hosted at Venmo.&lt;/p&gt;&#xA;&lt;p&gt;I had a great talk with &lt;a href=&#34;http://seriously.dontusethiscode.com/&#34;&gt;James Powell&lt;/a&gt; about&#xA;&lt;a href=&#34;https://github.com/thomasballinger/rlundo&#34;&gt;rlundo&lt;/a&gt; and his many adventures&#xA;with loading shared libraries, and got valuable feedback about the talk from a&#xA;few folks, particularly Jesse.&#xA;I won&amp;rsquo;t be able to post the slides until next week, but by then I hope to have&#xA;a nice post about the content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing key detection code in Blessed and Curtsies</title>
      <link>http://ballingt.com/key-detection-code/</link>
      <pubDate>Sat, 29 Nov 2014 16:05:00 +0000</pubDate>
      <guid>http://ballingt.com/key-detection-code/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://lmontopo.github.io/&#34;&gt;lmontopo&lt;/a&gt; and I recently contributed&#xA;to jquast&amp;rsquo;s &lt;a href=&#34;https://github.com/jquast/wcwidth&#34;&gt;wcwidth&lt;/a&gt;, a pure Python&#xA;implementation of the system call of the same name. Contributing was really&#xA;easy, and jquast was very supportive and helpful. Working on wcwidth led me to&#xA;(re)discover Blessed, a terminal wrapper used in wcwidth&#xA;to assist with manually inspecting whether character sequences were the right&#xA;length in wcwidth.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/erikrose/blessings&#34;&gt;Blessings&lt;/a&gt; is &amp;ldquo;a thin, practical&#xA;wrapper around terminal capabilities in Python.&amp;rdquo; &lt;a href=&#34;https://github.com/jquast/blessed&#34;&gt;Blessed&lt;/a&gt;&#xA;is jquast&amp;rsquo;s fork that slightly thickens this wrapping of terminal capabilities&#xA;with useful features like keypress detection.&#xA;&lt;a href=&#34;curtsies.readthedocs.org&#34;&gt;Curtsies&lt;/a&gt; is a library I wrote for&#xA;&lt;a href=&#34;http://ballingt.com/2013/12/21/bpython-curtsies.html&#34;&gt;bpython-curtsies&lt;/a&gt;&#xA;that probably crosses the line from wrapper to whatever something that isn&amp;rsquo;t&#xA;a wrapper anymore is.&#xA;Originally I wrote my own terminal interaction code, but in&#xA;June I slotted in Blessings and it improved the code a bunch. Upon looking&#xA;into Blessed I&amp;rsquo;ve found I&amp;rsquo;m again duplicating functionality, and I&amp;rsquo;m excited to&#xA;make some net negative lines of code commits soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Curtsies Docs</title>
      <link>http://ballingt.com/writing-curtsies-docs/</link>
      <pubDate>Sat, 22 Nov 2014 15:30:00 +0000</pubDate>
      <guid>http://ballingt.com/writing-curtsies-docs/</guid>
      <description>&lt;p&gt;I finally bit the bullet and wrote &lt;a href=&#34;http://curtsies.readthedocs.org/en/latest/&#34;&gt;documentation for&#xA;Curtsies&lt;/a&gt; this last weekend.&#xA;This required getting familiar with a few new tools like reStructuredText&#xA;and Sphinx&amp;rsquo;s additions to it, including learning enough about those projects&#39;&#xA;internals to write a hacky&#xA;&lt;a href=&#34;https://github.com/thomasballinger/curtsies/blob/master/docs/terminal_output.py&#34;&gt;custom directive and parser&lt;/a&gt;&#xA;for displaying ANSI escape code-containing terminal output. But the most&#xA;interesting part was the thinking about my library&amp;rsquo;s public API this forced me to do.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The large examples are mostly about using all the components of my library&#xA;together. Is this bad? Will it be clear that they can be used&#xA;separately? Does this indicate these components are more coupled that I&#xA;thought?&lt;/p&gt;</description>
    </item>
    <item>
      <title>In celebration of yield from</title>
      <link>http://ballingt.com/yield-from/</link>
      <pubDate>Tue, 14 Oct 2014 11:00:00 +0000</pubDate>
      <guid>http://ballingt.com/yield-from/</guid>
      <description>&lt;p&gt;A conversation with current Hacker Schooler &lt;a href=&#34;https://github.com/crockeo&#34;&gt;Cerek&lt;/a&gt;&#xA;about writing a&#xA;boggle solver in Haskell motivated me to squeeze in writing up a&#xA;solution in Python yesterday morning between appointments with&#xA;Hacker Schoolers.&lt;/p&gt;&#xA;&lt;p&gt;The strategy I followed was to generate all candidate&#xA;words and check them for validity with a dictionary, with the optimization&#xA;of not actually traversing the entire tree of possible words.&#xA;I wanted to separate building the candidate words and&#xA;checking them for validity, but allow the two processes to communicate to&#xA;eliminate branches that weren&amp;rsquo;t&#xA;promising: if no English words begin with &lt;code&gt;abcd&lt;/code&gt; don&amp;rsquo;t bother investigating&#xA;the branch of the tree of candidate words that begin with these letters, like&#xA;&lt;code&gt;abcdh&lt;/code&gt;. Coroutines seemed like a good fit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading Error Detecting and Error Correcting Codes</title>
      <link>http://ballingt.com/error-detection/</link>
      <pubDate>Mon, 06 Oct 2014 12:00:00 +0000</pubDate>
      <guid>http://ballingt.com/error-detection/</guid>
      <description>&lt;p&gt;Last week&amp;rsquo;s &lt;a href=&#34;https://www.hackerschool.com&#34;&gt;Hacker School&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.hackerschool.com/blog/44-paper-of-the-week-error-detecting-and-error-correcting-codes&#34;&gt;Paper of the Week&lt;/a&gt;&#xA;was Richard Hamming&amp;rsquo;s &lt;a href=&#34;http://www.lee.eng.uerj.br/~gil/redesII/hamming.pdf&#34;&gt;&amp;ldquo;Error Detecting and Error Correcting&#xA;Codes.&amp;rdquo;&lt;/a&gt;&#xA;I worked through the paper (not something I do a lot)&#xA;and wanted to show an example of my process reading it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://blog.melchua.com/2014/08/12/learning-styles-for-programmers-activereflective/&#34;&gt;I&amp;rsquo;m probably an &amp;ldquo;active&#xA;learner,&amp;rdquo;&lt;/a&gt; insofar as that&amp;rsquo;s a useful label in describing learning styles, &lt;a href=&#34;http://blog.melchua.com/2013/06/19/hacker-school-session-engineering-learning-styles/&#34;&gt;whatever those are&lt;/a&gt;.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;The way I worked through the paper was by reading a bit for a problem description,&#xA;trying to solve the problem myself, then learning why my solution was suboptimal&#xA;or reading the solution to a problem I couldn&amp;rsquo;t solve.&#xA;This is like attempting the exercises in a math text before reading the chapter;&#xA;it helps me care about solutions to problems because I want to compare my solution,&#xA;or I&amp;rsquo;ve proved I can&amp;rsquo;t solve them myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Prompt Toolkit impressions</title>
      <link>http://ballingt.com/prompt-toolkit/</link>
      <pubDate>Tue, 30 Sep 2014 22:00:00 +0000</pubDate>
      <guid>http://ballingt.com/prompt-toolkit/</guid>
      <description>&lt;p&gt;Last night I discovered Jonathan Slenders&amp;rsquo; &lt;a href=&#34;https://github.com/jonathanslenders/python-prompt-toolkit&#34;&gt;Python Terminal Toolkit&lt;/a&gt;: a fancy interface to&#xA;the Python interpreter very much like&#xA;&lt;a href=&#34;http://ballingt.com/2013/12/21/bpython-curtsies.html&#34;&gt;bpython-curtsies&lt;/a&gt;, the project I&amp;rsquo;ve&#xA;been working on on and off for a year. I was simultaneously very excited to&#xA;see this work and a little depressed - on first glance many aspects&#xA;of the project seem better than bpython, and appears to include a terminal&#xA;wrapper at least as nice as my &lt;a href=&#34;https://github.com/thomasballinger/curtsies&#34;&gt;curtsies&lt;/a&gt;&#xA;library. I think there&amp;rsquo;s potential for code&#xA;reuse though, and it would be really fun to talk to Jonathan about the project.&#xA;If the toolkit turns out to be flexible enough and we can add the necessary&#xA;features, it might make for a great frontend for bpython.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Garbage collection</title>
      <link>http://ballingt.com/garbage-collection/</link>
      <pubDate>Thu, 04 Sep 2014 23:15:00 +0000</pubDate>
      <guid>http://ballingt.com/garbage-collection/</guid>
      <description>&lt;p&gt;Guy Steele is a smart man who gave a talk sixteen&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; years ago about the&#xA;design&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; of the Java&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; programming&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; language.&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;&#xA;In Guy Steele&amp;rsquo;s &lt;a href=&#34;https://www.youtube.com/watch?v=_ahvzDzKdB0&#34;&gt;talk&lt;/a&gt; &amp;ldquo;&lt;a href=&#34;http://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf&#34;&gt;Growing a&#xA;Language&lt;/a&gt;&amp;rdquo; he&#xA;does not tell what &lt;em&gt;garbage collection&lt;/em&gt; means, and says that is a task&#xA;for you to try in&#xA;your spare time. I have some spare time this day, and so will try to tell&#xA;what &lt;em&gt;garbage collection&lt;/em&gt; is.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;em&gt;person&lt;/em&gt; is the thing that more than one of in a group can be called folks,&#xA;but only one of cannot be called folks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>August bpython sprint</title>
      <link>http://ballingt.com/august-bpython-sprint/</link>
      <pubDate>Sun, 31 Aug 2014 18:35:00 +0000</pubDate>
      <guid>http://ballingt.com/august-bpython-sprint/</guid>
      <description>&lt;p&gt;I just took a vacation for a week! I spend time with my family in Washington&#xA;State mostly doing fun outdoorsy things.&#xA;I didn&amp;rsquo;t answer email for the week but I did try to get some&#xA;work in on bpython: only as much as was fun to do at the time. I made a &lt;a href=&#34;https://github.com/bpython/bpython/issues?q=milestone%3ATom-august-sprint&#34;&gt;list of&#xA;issues&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;to try to tackle and chose the deadline of the first day of the next batch of&#xA;Hacker School to finish them. I only have half of&#xA;the original tasks checked off so far and still have today and tomorrow to improve that ratio,&#xA;but I wanted to do a retrospective while I had time and they were fresh on my mind.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyGotham bpython lightning talk</title>
      <link>http://ballingt.com/lightning-talk/</link>
      <pubDate>Sat, 16 Aug 2014 18:35:00 +0000</pubDate>
      <guid>http://ballingt.com/lightning-talk/</guid>
      <description>&lt;p&gt;The Python REPL is great! You can try out code before putting it in your&#xA;program and get information about types and objects:&lt;/p&gt;&#xA;&lt;script type=&#34;text/javascript&#34; src=&#34;https://asciinema.org/a/11518.js&#34; id=&#34;asciicast-11518&#34; async data-size=&#34;small&#34; data-speed=&#34;1.7&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;A while ago some people created an even better REPL - you probably haven&amp;rsquo;t&#xA;heard of it:&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;script type=&#34;text/javascript&#34; src=&#34;https://asciinema.org/a/11519.js&#34; id=&#34;asciicast-11519&#34; async data-size=&#34;small&#34; data-speed=&#34;1.5&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;Then a fellow named Bob created bpython. It does some cool things. I wrote&#xA;bpython-curtsies, an alternative frontend to bpython, that&amp;rsquo;s going to be what&#xA;you get when you type bpython in the next release (0.14, coming in the next&#xA;few weeks hopefully). You can install stable bpython now with&lt;/p&gt;</description>
    </item>
    <item>
      <title>bpython curtsies is live</title>
      <link>http://ballingt.com/bpython-curtsies-release/</link>
      <pubDate>Tue, 13 May 2014 09:20:17 +0000</pubDate>
      <guid>http://ballingt.com/bpython-curtsies-release/</guid>
      <description>&lt;p&gt;bpython 0.13 has &lt;a href=&#34;https://groups.google.com/forum/#!topic/bpython/jtvr4l1Snkc&#34;&gt;just been released&lt;/a&gt;&#xA;and it includes bpython-curtsies, the bpython&#xA;frontend I&amp;rsquo;ve been working on on and off for 9 months. If you&amp;rsquo;re&#xA;not reading on your phone or in bed with an ipad, take a moment to try it out:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ pip install bpython[curtsies]&#xA;...&#xA;$ bpython-curtsies&#xA;&amp;gt;&amp;gt;&amp;gt; s = &#39;abc&#39;&#xA;&amp;gt;&amp;gt;&amp;gt; s.   &amp;lt;look at that great autocompletion and call a method&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt; &amp;lt;ctrl-R to undo that last command&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt; &amp;lt;ctrl-D to exit bpython&amp;gt;&#xA;$ echo &amp;quot;you&#39;re back in the shell!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://ballingt.com/assets/bpython-curtsies-scroll-demo-large.gif&#34; alt=&#34;bpython-curtsies scroll demo&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Essential Reference Tutorial Quiz</title>
      <link>http://ballingt.com/pyquiz-intro-quiz/</link>
      <pubDate>Fri, 02 May 2014 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/pyquiz-intro-quiz/</guid>
      <description>&lt;p&gt;Sometimes Python serves as a convenient lingua franca:&#xA;it stands in for psuedocode as a language for expressing&#xA;general programming ideas. For example,&#xA;this &lt;a href=&#34;http://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming&#34;&gt;excellent introduction to functional programming&lt;/a&gt;&#xA;uses &lt;code&gt;map(function, iterable)&lt;/code&gt;&#xA;to to express the same idea&#xA;that list comprehensions express.&#xA;This isn&amp;rsquo;t as Pythonic, but it&amp;rsquo;s more universal.&#xA;The article clearly and beautifully describes functional&#xA;programming using runnable code examples in Python that are&#xA;understandable to a wide audience.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python and JavaScript</title>
      <link>http://ballingt.com/python-javascript/</link>
      <pubDate>Thu, 17 Apr 2014 10:00:00 +0000</pubDate>
      <guid>http://ballingt.com/python-javascript/</guid>
      <description>&lt;p&gt;One late night at Hacker School a few months ago, I had the chance to&#xA;discuss programming languages with the inimitable Will Byrd.&#xA;At one point I mentioned that JavaScript and Python felt terrifically similar to me.&#xA;Will thought that seemed odd, which made me want to examine it further.&lt;/p&gt;&#xA;&lt;p&gt;Let me tell you about my favorite dynamically typed language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;javascriptpython&#34;&gt;JavaScript∪Python&lt;/h2&gt;&#xA;&lt;p&gt;In this language, everything is an object.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Objects are buckets of properties;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; they&amp;rsquo;re mappings of names to&#xA;other objects.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&#xA;These properties can be accessed with dot notation - that is,&#xA;the name &lt;code&gt;bar&lt;/code&gt; can be accessed on the object &lt;code&gt;foo&lt;/code&gt; with &lt;code&gt;foo.bar&lt;/code&gt;.&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Surprising Python</title>
      <link>http://ballingt.com/surprising-python/</link>
      <pubDate>Sun, 23 Mar 2014 21:39:00 +0000</pubDate>
      <guid>http://ballingt.com/surprising-python/</guid>
      <description>&lt;p&gt;Here are some things that surprise folks about Python.&#xA;I&amp;rsquo;ll present one with some background, then list a few others.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Ever since &lt;a href=&#34;http://www.kristenwidman.com/blog/how-to-write-a-bittorrent-client-part-1/&#34;&gt;Kristen Widman built&lt;/a&gt; a &lt;a href=&#34;http://www.bittorrent.org/beps/bep_0003.html&#34;&gt;bittorrent&lt;/a&gt; &lt;a href=&#34;https://wiki.theory.org/BitTorrentSpecification&#34;&gt;client&lt;/a&gt;&#xA;at Hacker School last year, building one from scratch has been a popular project here.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;A few months ago my friend Joe Wilner was having fun with the parser section of the&#xA;project, decoding a &lt;code&gt;.torrent&lt;/code&gt; file. Torrent files are&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Bencode&#34;&gt;bencoded&lt;/a&gt;, so the goal was to&#xA;do something like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Math Museum Review</title>
      <link>http://ballingt.com/math-museum/</link>
      <pubDate>Sun, 09 Mar 2014 12:18:00 +0000</pubDate>
      <guid>http://ballingt.com/math-museum/</guid>
      <description>&lt;p&gt;Last Saturday I went to the &lt;a href=&#34;http://momath.org/&#34;&gt;Museum of Mathematics&lt;/a&gt;, across from Madison Square Park&#xA;with Casey. The museum of math appears to be primarily a playground where parents&#xA;bring their children to osmose math from pretty geometric shapes.&#xA;It was a bit expensive, small, and broken. But it was also pretty fun.&lt;/p&gt;&#xA;&lt;p&gt;Exhibits were generally interactive activities you could enjoy without thinking&#xA;about much of anything besides &amp;ldquo;this is neat,&amp;rdquo; with explanations and history&#xA;available at touchscreen kiosks. This idea is great – the museumgoer can&#xA;be entertained for an hour while the seeds of neat ideas are planted, or can&#xA;actively seek out an explanation if they&amp;rsquo;re curious.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trees in Python</title>
      <link>http://ballingt.com/trees-in-python/</link>
      <pubDate>Sun, 09 Mar 2014 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/trees-in-python/</guid>
      <description>&lt;p&gt;This week I wrote a lot of trees:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/thomasballinger/regexfun/blob/master/shorter.py&#34;&gt;Regular expression&#xA;parser&lt;/a&gt; - builds regular expressions with a recursive&#xA;descent parser&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/thomasballinger/regressiontrees&#34;&gt;Regression trees&lt;/a&gt; - building a decision tree for classification&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Program Synthesis - I talked to a lot of other people about program&#xA;synthesis and built things with some of them.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gist.github.com/thomasballinger/9453188&#34;&gt;Simple Tree in Java&lt;/a&gt; - helping some Java folks write code for some graph traversal&#xA;exercises&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The regression tree work resulted in a nice visualization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nonblocking stdin read works differently in Python 3</title>
      <link>http://ballingt.com/nonblocking-stdin-in-python-3/</link>
      <pubDate>Sat, 01 Mar 2014 23:10:00 +0000</pubDate>
      <guid>http://ballingt.com/nonblocking-stdin-in-python-3/</guid>
      <description>&lt;p&gt;I added better paste support to&#xA;&lt;a href=&#34;http://ballingt.com/2013/12/21/bpython-curtsies.html&#34;&gt;bpython-curtsies&lt;/a&gt; this week, and when I&#xA;finally got around to testing the feature in Python 3 I found things weren&amp;rsquo;t&#xA;working as expected. The bug was to do with doing nonblocking&#xA;reads of stdin working differently in Python 2 vs 3.&lt;/p&gt;&#xA;&lt;p&gt;Once I traced the problem (pressing keys didn&amp;rsquo;t do anything) to recent changes&#xA;I&amp;rsquo;d made to the &lt;a href=&#34;https://github.com/thomasballinger/curtsies&#34;&gt;terminal wrapper library&lt;/a&gt;,&#xA;used by the project, I ran its tests. I wasn&amp;rsquo;t particularly hopeful this&#xA;would solve the problem, and I wasn&amp;rsquo;t surprised when they all passed.&#xA;The fiddly string manipulation bits of curtsies are&#xA;well tested, but terminal interaction and stream reading aren&amp;rsquo;t at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prepping for a Python talk with code snippets</title>
      <link>http://ballingt.com/code-talk-prep/</link>
      <pubDate>Sun, 16 Feb 2014 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/code-talk-prep/</guid>
      <description>&lt;p&gt;After not making much progress on bpython for a while, someone in #bpython&#xA;asked for better paste support, and I found I needed the same feature.&#xA;Building something someone else needs and building something I want are two&#xA;of my favorite things!&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;d like to give a presentation this week at Hacker School about features of&#xA;Python folks might not have seen, in the form of short, standalone code&#xA;snippets we could try to predict the output of together. (part &lt;a href=&#34;https://www.destroyallsoftware.com/talks/wat&#34;&gt;Gary Bernhardt&amp;rsquo;s&#xA;Wat&lt;/a&gt;, part &lt;a href=&#34;http://codingbat.com/&#34;&gt;Coding&#xA;Bat&lt;/a&gt;, part&#xA;&lt;a href=&#34;http://rubykoans.com/&#34;&gt;http://rubykoans.com/&lt;/a&gt;) I&amp;rsquo;d like to be quickly jumping back and forth between a&#xA;REPL and my examples. I considered both IPython notebook and what I think of as an emacs-style&#xA;REPL (an editor in one vertical split and REPL in the other), but settled on&#xA;good old bpython, which still just feels right to me for interactive exploration&#xA;of Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Native scrolling in bpython: bpython-curtsies</title>
      <link>http://ballingt.com/bpython-curtsies/</link>
      <pubDate>Mon, 23 Dec 2013 11:12:17 +0000</pubDate>
      <guid>http://ballingt.com/bpython-curtsies/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve mostly finished up work on an alternative frontend for bpython.&lt;/p&gt;&#xA;&lt;p&gt;Updated: this is now the default bpython frontend,&#xA;installed with &lt;code&gt;pip install bpython&lt;/code&gt;&#xA;and then run with &lt;code&gt;bpython&lt;/code&gt;. To use the old frontend, use &lt;code&gt;bpython-curses&lt;/code&gt;.&#xA;The rest of this post refers to this new frontend as &lt;code&gt;bpython-curtsies&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;bpython-curtsies&lt;/code&gt; is bpython with native terminal scrolling:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://ballingt.com/assets/bpython-curtsies-scroll-demo-large.gif&#34; alt=&#34;bpython-curtsies scroll demo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;It also has send-to-editor (F7 by default) and an improved version of&#xA;good old bpython rewind: &lt;code&gt;raw_input&lt;/code&gt; prompts are saved so they don&amp;rsquo;t need&#xA;to be entered again, and a new environment is used instead of the old one,&#xA;so variable bindings are actually undone.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>http://ballingt.com/snow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/snow/</guid>
      <description>&lt;html&gt;&#xA;&lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0&#34;/&gt; &lt;!--320--&gt;&#xA;&lt;body&gt;&#xA;&lt;style&gt;&#xA;* {&#xA;    margin: 0;&#xA;    padding: 0;&#xA;}&#xA;html, body {&#xA;    width: 100%;&#xA;    height: 100%;&#xA;    background-color: black;&#xA;}&#xA;canvas, #show-source {&#xA;    position: absolute;&#xA;    left: 0;&#xA;    top: 0;&#xA;    width: 100%;&#xA;    height: 100%;&#xA;}&#xA;canvas {&#xA;    color: gray;&#xA;    font-size: 10px;&#xA;}&#xA;#show-source {&#xA;    color: white;&#xA;    font-size: 10px;&#xA;    overflow: none;&#xA;    text-overflow: ellipsis;&#xA;    overflow: hidden;&#xA;}&#xA;#message {&#xA;    display: none;&#xA;    font-size: 16px;&#xA;    background-color: lightgreen;&#xA;    color: red;&#xA;    position: absolute;&#xA;    left: 20%;&#xA;    right: 20%;&#xA;    top: 10%;&#xA;    text-align: center;&#xA;}&#xA;&#xA;&lt;/style&gt;&#xA;&lt;div&gt;&#xA;    &lt;div id=&#34;show-source&#34;&gt;&#xA;        &lt;code&gt;&lt;pre id=&#34;source-here&#34;&gt;&#xA;        hello&#xA;        &lt;/pre&gt;&lt;/code&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;canvas width=200 height=200 id=&#34;canvas&#34;&gt;&lt;/canvas&gt;&#xA;    &lt;div id=&#34;message&#34;&gt;&#xA;        Merry Christmas!&#xA;        &lt;br&gt;&#xA;        Let&#39;s go to Hamilton on Feb 27!&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;script id=&#34;source&#34;&gt;var ctx = canvas.getContext(&#39;2d&#39;);&#xA;var particles = [];&#xA;&#xA;function addParticle(x, y){&#xA;    particles.push({&#xA;        x: x,&#xA;        y: y,&#xA;        dx: wind + (Math.random() - 0.5) * 5,&#xA;        dy: (Math.random() - 0.5) * 5,&#xA;    });&#xA;}&#xA;&#xA;var wind = 0;&#xA;var mouseDown = false;&#xA;var mouseX = 0;&#xA;var mouseY = 0;&#xA;&#xA;var width = canvas.width = window.innerWidth;&#xA;var height = canvas.height = window.innerHeight;&#xA;&#xA;function frame(){&#xA;    if (particles.length &lt; 1000 &amp;&amp; Math.random() &lt; 0.2){&#xA;        addParticle(Math.random() * width, 0);&#xA;    }&#xA;    if (mouseDown){&#xA;        for (let n = 10; n &gt; 0; n--) {&#xA;            addParticle(mouseX + (Math.random() - 0.5) * 20, mouseY + (Math.random() - 0.5) * 20);&#xA;        }&#xA;    }&#xA;&#xA;    wind = Math.max(-1, Math.min(1, (Math.random() - 0.5) * 0.1 + wind));&#xA;&#xA;    for (let p of particles){&#xA;        p.y += p.dy;&#xA;        p.x += p.dx&#xA;        if (p.y &gt; height) {&#xA;            p.y = -10;&#xA;        }&#xA;        if (p.x &lt; 0) { p.x = width; }&#xA;        if (p.x &gt; width) { p.x = 0; }&#xA;&#xA;        const c = Math.random() * 0.05;&#xA;        p.dx = (p.dx + wind * c) / (1 + c) + (Math.random() - 0.5) * 0.1;&#xA;        p.dy = (p.dy + (Math.random() * 2) * c) / (1 + c);&#xA;    }&#xA;&#xA;    ctx.clearRect(0, 0, 5000, 5000);&#xA;    ctx.fillStyle = &#39;#ffffff&#39;;&#xA;    for (let p of particles) {&#xA;        ctx.fillRect(p.x, p.y, 2, 2);&#xA;    }&#xA;    if (particles.length &gt; 10000) {&#xA;        document.getElementById(&#34;message&#34;).style.display = &#39;block&#39;;&#xA;    }&#xA;    window.requestAnimationFrame(frame)&#xA;}&#xA;&#xA;frame();&#xA;&#xA;[&#39;mousedown&#39;, &#39;touchstart&#39;].forEach(function(eventName){&#xA;    window.addEventListener(eventName, function(e){&#xA;        mouseX = e.x || e.touches[0].clientX;&#xA;        mouseY = e.y || e.touches[0].clientY;&#xA;        mouseDown = true;&#xA;    }, false);&#xA;});&#xA;[&#39;mouseup&#39;, &#39;touchend&#39;].forEach(function(eventName){&#xA;    window.addEventListener(eventName, function(e){&#xA;        mouseDown = false;&#xA;    }, false);&#xA;});&#xA;[&#39;mousemove&#39;, &#39;touchmove&#39;].forEach(function(eventName){&#xA;    window.addEventListener(eventName, function(e){&#xA;        mouseX = e.x || e.touches[0].clientX;&#xA;        mouseY = e.y || e.touches[0].clientY;&#xA;    }, false);&#xA;});&#xA;&#xA;function resizeCanvas(){&#xA;    width = canvas.width = window.innerWidth;&#xA;    height = canvas.height = window.innerHeight;&#xA;}&#xA;&#xA;window.addEventListener(&#39;resize&#39;, resizeCanvas, false);&#xA;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;document.getElementById(&#34;source-here&#34;).innerHTML = document.getElementById(&#34;source&#34;).innerHTML&#xA;&lt;/script&gt;&#xA;&#xA;&lt;/body&gt;&#xA;&lt;/html&gt;</description>
    </item>
    <item>
      <title>Books I&#39;ve read since 2018</title>
      <link>http://ballingt.com/books/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/books/</guid>
      <description>&lt;style&gt;&#xA;body {&#xA;  background-color: white;&#xA;}&#xA;&#xA;img {&#xA;  width: 200px;&#xA;  padding-top: 2em;&#xA;}&#xA;h3 {&#xA;  margin-bottom: 0px;&#xA;  padding-bottom: 0px !important;&#xA;}&#xA;p {&#xA;  margin-top: 2px;&#xA;  margin-left: 1em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;grid&#34;&gt;&#xA;  &lt;div class=&#34;unit one-third heading&#34;&gt;&#xA;    &lt;h1&gt;Books I&#39;ve read&lt;/h1&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;unit two-thirds&#34;&gt;&#xA;    &lt;h2&gt;2024&lt;/h3&gt;&#xA;    &lt;!-- &lt;h2&gt;In progress&lt;/h&gt; --&gt;&#xA;    &lt;!-- &lt;h2&gt;&lt;/h&gt; --&gt;&#xA;    &lt;h3&gt;A Deepness in the Sky - Vernor Vinge&lt;/h3&gt;&#xA;    &lt;h3&gt;The Wee Free Men - Terry Pratchett&lt;/h3&gt;&#xA;    &lt;p&gt;It&#39;s been a rough year for reading! I&#39;ve been pretty into work.&lt;/p&gt;&#xA;    &lt;h2&gt;2023&lt;/h3&gt;&#xA;    &lt;h3&gt;Ace - Angela Chen&lt;/h3&gt;&#xA;    &lt;h3&gt;The Warmth of Other Suns - Isabel Wilderson&lt;/h3&gt;&#xA;    &lt;h3&gt;Happy Go Lucky - David Sedaris&lt;/h3&gt;&#xA;    &lt;h3&gt;Soul Music - Terry Pratchett&lt;/h3&gt;&#xA;    &lt;h3&gt;Guards, Guards! - Terry Pratchett&lt;/h3&gt;&#xA;    &lt;h3&gt;Thud! - Terry Pratchett&lt;/h3&gt;&#xA;    &lt;p&gt;Some good !!con energy going on with these titles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Games I&#39;ve played since I 2017</title>
      <link>http://ballingt.com/games/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/games/</guid>
      <description>&lt;style&gt;&#xA;body {&#xA;    background-color: white;&#xA;}&#xA;&#xA;img {&#xA;  width: 200px;&#xA;  padding-top: 2em;&#xA;}&#xA;h3 {&#xA;  margin-bottom: 0px;&#xA;  padding-bottom: 0px !important;&#xA;}&#xA;p {&#xA;  margin-top: 2px;&#xA;  margin-left: 1em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;grid&#34;&gt;&#xA;  &lt;div class=&#34;unit one-third heading&#34;&gt;&#xA;    &lt;h1&gt;Games I&#39;ve played&lt;/h1&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;unit two-thirds&#34;&gt;&#xA;    &lt;h2&gt;2026&lt;/h2&gt;&#xA;    &lt;h2&gt;2025&lt;/h2&gt;&#xA;    &lt;h3&gt;Peglin&lt;/h3&gt;&#xA;    &lt;h3&gt;Balatro&lt;/h3&gt;&#xA;    &lt;h3&gt;Thronefall&lt;/h3&gt;&#xA;    &lt;h2&gt;2024&lt;/h2&gt;&#xA;    &lt;h2&gt;2023&lt;/h2&gt;&#xA;    &lt;h3&gt;Final Fantasy XVI&lt;/h3&gt;&#xA;    &lt;h2&gt;2022&lt;/h2&gt;&#xA;    &lt;h3&gt;Horizon Zero Dawn: Forbidden West&lt;/h3&gt;&#xA;    &lt;h3&gt;Cult of the Lamb&lt;/h3&gt;&#xA;    &lt;h3&gt;Vampire Survivors&lt;/h3&gt;&#xA;    &lt;h3&gt;Slay the Spire&lt;/h3&gt;&#xA;    &lt;h3&gt;Hades&lt;/h3&gt;&#xA;    &lt;h2&gt;2021&lt;/h2&gt;&#xA;    &lt;h3&gt;Horizon Zero Dawn&lt;/h3&gt;&#xA;    &lt;h3&gt;Stardew Valley&lt;/h3&gt;&#xA;    &lt;h3&gt;Frog Fractions 3&lt;/h3&gt;&#xA;    &lt;h3&gt;Final Fantasy XV&lt;/h3&gt;&#xA;    &lt;h3&gt;Spelunky 2&lt;/h3&gt;&#xA;    &lt;h2&gt;2019&lt;/h2&gt;&#xA;    &lt;h3&gt;Link&#39;s Awakening remake for Switch&lt;/h3&gt;&#xA;    &lt;p&gt;This is pretty, but was interesting to me mostly for nostalgia reasons. This is the game world I might have the most brain space tied up in representing - though gradeschool it took years to beat it, I know every corner of it, and the language filled out my vocabulary. I mispronounced some of these words for years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Marie&#39;s Crisis</title>
      <link>http://ballingt.com/mc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/mc/</guid>
      <description>&lt;style&gt;&#xA;body {&#xA;    background-color: white;&#xA;}&#xA;&#xA;img {&#xA;  width: 200px;&#xA;  padding-top: 2em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;grid&#34;&gt;&#xA;  &lt;div class=&#34;unit one-third heading&#34;&gt;&#xA;    &lt;h1&gt;Marie&#39;s Crisis&lt;/h1&gt;&#xA;    &lt;p&gt;How fun is Marie&#39;s Crisis? More fun if you like singing, more fun if you know the music, more fun if you know the words.&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;unit two-thirds&#34;&gt;&#xA;    &lt;h2&gt;Pianists&lt;/h2&gt;&#xA;    &lt;p&gt;&lt;a href=&#34;https://twitter.com/mjamesroy&#34;&gt;Michael James Roy&lt;/a&gt; - most Saturdays?&lt;/p&gt;&#xA;    Saturdays are great.&#xA;    &lt;p&gt;&lt;a href=&#34;https://twitter.com/brandonjamesg&#34;&gt;Brandon James Gwinn&lt;/a&gt; - Thursdays maybe?&lt;/p&gt;&#xA;    Thursdays sometimes maybe?&#xA;    &lt;h2&gt;Playlists&lt;/h2&gt;&#xA;    &lt;p&gt;&lt;a href=&#34;https://open.spotify.com/user/bexstarzia/playlist/4TQfNW0cs5eqGKpVNY3TCb&#34;&gt;Most Popular Spotify list&lt;/a&gt;&#xA;    &lt;h2&gt;Really popular stuff&lt;/h2&gt;&#xA;    &lt;a href=&#34;mailto:mc+thomasballinger@gmail.com&#34;&gt;Tell me something to add!&lt;/a&gt;&#xA;    &lt;ul&gt;&#xA;        &lt;li&gt;Little Shop of Horrors&lt;/li&gt;&#xA;        &lt;li&gt;Le Miz&lt;/li&gt;&#xA;        &lt;li&gt;RENT&lt;/li&gt;&#xA;        &lt;li&gt;Oklahoma&lt;/li&gt;&#xA;        &lt;li&gt;Sound of Music: Do a Deer, My Favorite Things&lt;/li&gt;&#xA;        &lt;li&gt;Anything Goes: Anything Goes, I Get a Kick Out of You&lt;/li&gt;&#xA;        &lt;li&gt;Chicago: All That Jazz, We Both Reached For The Gun, Mr. Cellophane&lt;/li&gt;&#xA;        &lt;li&gt;Pippin&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;h2&gt;Pretty popular stuff&lt;/h2&gt;&#xA;    &lt;ul&gt;&#xA;        &lt;li&gt;Grease&lt;/li&gt;&#xA;        &lt;li&gt;Dear Evan Hansen: Waving Through a Window, &lt;/li&gt;&#xA;        &lt;li&gt;Wicked: Popular, For Good, Defying Gravity&lt;/li&gt;&#xA;        &lt;li&gt;Oklahoma&lt;/li&gt;&#xA;        &lt;li&gt;Sound of Music&lt;/li&gt;&#xA;        &lt;li&gt;Beauty and the Beast&lt;/li&gt;&#xA;        &lt;li&gt;Spring Awakening&lt;/li&gt;&#xA;        &lt;li&gt;Hamilton&lt;/li&gt;&#xA;        &lt;li&gt;My Fair Lady: All I Want, On the Street Where You Live, I Could Have Danced All Night&lt;/li&gt;&#xA;        &lt;li&gt;Godspell: Day by Day&lt;/li&gt;&#xA;        &lt;li&gt;Hair: Aquarius, Hair&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;h2&gt;Sorta popular stuff&lt;/h2&gt;&#xA;    &lt;ul&gt;&#xA;        &lt;li&gt;Chess&lt;/li&gt;&#xA;        &lt;li&gt;Company: Another Hundred People&lt;/li&gt;&#xA;        &lt;li&gt;Hedwig and the Angry Itch: Sugar Daddy&lt;/li&gt;&#xA;        &lt;li&gt;Funny Girl&lt;/li&gt;Don&#39;t Rain on my Parade&#xA;        &lt;li&gt;Avenue Q&lt;/li&gt;&#xA;        &lt;li&gt;Into The Woods&lt;/li&gt;&#xA;        &lt;li&gt;Guys and Dolls&lt;/li&gt;&#xA;        &lt;li&gt;Waitress&lt;/li&gt;&#xA;        &lt;li&gt;Cabaret: Maybe this Time, Money&lt;/li&gt;&#xA;        &lt;li&gt;West Side Story&lt;/li&gt;&#xA;        &lt;li&gt;Phantom of the Opera: &lt;/li&gt;&#xA;        &lt;li&gt;Once: Falling Slowly&lt;/li&gt;&#xA;        &lt;li&gt;South Pacific: I&#39;m gonna wash that man&lt;/li&gt;&#xA;        &lt;li&gt;Fiddler on the Roof&lt;/li&gt;&#xA;        &lt;li&gt;Mary Poppins: Spoonful of Sugar&lt;/li&gt;&#xA;        &lt;li&gt;Carousel: What I did for Love&lt;/li&gt;&#xA;        &lt;li&gt;Hello Dolly&lt;/li&gt;&#xA;        &lt;li&gt;Cats: Memory&lt;/li&gt;&#xA;        &lt;li&gt;Cats: Memory&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;h2&gt;Stuff I&#39;ve heard&lt;/h2&gt;&#xA;    &lt;ul&gt;&#xA;        &lt;li&gt;Aladdin&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;h2&gt;Reportedly popular&lt;/h2&gt;&#xA;    &lt;p&gt;This is stuff I&#39;ve never heard at Marie&#39;s Crisis but I see on playlists&lt;/p&gt;</description>
    </item>
    <item>
      <title>Programming ideas I&#39;m tracking</title>
      <link>http://ballingt.com/programming/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/programming/</guid>
      <description>&lt;style&gt;&#xA;body {&#xA;    background-color: white;&#xA;}&#xA;&#xA;img {&#xA;  width: 200px;&#xA;  padding-top: 2em;&#xA;}&#xA;h3 {&#xA;  margin-bottom: 0px;&#xA;  padding-bottom: 0px !important;&#xA;}&#xA;p {&#xA;  margin-top: 2px;&#xA;  margin-left: 1em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;grid&#34;&gt;&#xA;  &lt;div class=&#34;unit one-third heading&#34;&gt;&#xA;    &lt;h1&gt;Things in Programming&lt;/h1&gt;&#xA;    &lt;p&gt;that I&#39;m paying attention to&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;unit two-thirds&#34;&gt;&#xA;    &lt;h3&gt;Philip Guo&lt;/h3&gt;&#xA;    &lt;p&gt;&lt;a href=&#34;http://www.pgbovine.net/publications.htm&#34;&gt;Publications&lt;/a&gt;&lt;/p&gt;&#xA;    &lt;h3&gt;repl.it&lt;/h3&gt;&#xA;    &lt;h3&gt;lighttable+eve&lt;/h3&gt;&#xA;    &lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=WT2CMS0MxJ0&amp;start=84&#34;&gt;The tragedy of a wonderful run&lt;/a&gt;&lt;/p&gt;&#xA;    &lt;h3&gt;Runkit&lt;/h3&gt;&#xA;    &lt;p&gt;I wonder what&#39;s going on with this&lt;/p&gt;&#xA;    &lt;h3&gt;Observable.hq&lt;/h3&gt;&#xA;    &lt;p&gt;I want to understand how this can work product-wise&lt;/p&gt;&#xA;    &lt;h3&gt;Glitch&lt;/h3&gt;&#xA;    &lt;h3&gt;fast.ai&lt;/h3&gt;&#xA;    &lt;h3&gt;Airtable&lt;/h3&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Thomas Ballinger bio</title>
      <link>http://ballingt.com/bio/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://ballingt.com/bio/</guid>
      <description>&lt;style&gt;&#xA;input {&#xA;  margin-right: .3em;&#xA;}&#xA;img {&#xA;  width: 200px;&#xA;  padding-top: 2em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;grid&#34;&gt;&#xA;  &lt;div class=&#34;unit one-third heading&#34;&gt;&#xA;    &lt;h1&gt;Thomas Ballinger&lt;/h1&gt;&#xA;    &lt;h2&gt;Variable length bio&lt;/h2&gt;&#xA;    Move the slider to get a bio of the length you need.&#xA;    Prompted by &lt;a href=https://twitter.com/pgbovine/status/755169117808631808&gt;@pgbovine&lt;/a&gt;.&#xA;    &lt;br/&gt;&#xA;    &lt;input id=&#34;slider&#34; type=&#34;range&#34; value=&#34;42&#34; min=&#34;1&#34; max=&#34;1000&#34;&gt;&lt;/input&gt;&lt;span id=&#34;char-count&#34;&gt;42 chars&lt;/span&gt;&#xA;    &lt;br&gt;&#xA;    &lt;input type=&#34;checkbox&#34; onclick=&#34;variablebio.toggleXform(&#39;fullname&#39;)&#34;&gt;full name in body&#xA;    &lt;img src=&#34;../assets/ballinger.png&#34;&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;unit two-thirds&#34;&gt;&#xA;    &lt;p id=&#34;variable-bio&#34;&gt;Tom is pretty awesome. You&#39;ll need to enable JavaScript for this. If you&#39;d prefer a handcrafted bio for your purposes, &lt;a href=&#34;mailto:me@ballingt.com&#34;&gt;send me an email&lt;/a&gt;.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;!--&#xA;Other axes to vary resume along:&#xA;&#xA;* purpose&#xA;&#xA;* work history&#xA;* academic&#xA;* conference speaker&#xA;* education&#xA;* what I&#39;m doing now&#xA;* hometown&#xA;* family&#xA;&#xA;But what do you actually need bios for?&#xA;* conference speaker bios&#xA;* guest speaker bio&#xA;* &#xA;&#xA;Plan: start with real bios and add only enough control to differentiate between them.&#xA;&#xA;--&gt;&#xA;&lt;script src=&#34;http://ballingt.com/js/bio.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;bios = [&#xA;  &#34;nice&#34;,&#xA;  &#34;curious and trying to be kind&#34;,&#xA;  &#34;Tom is learning to learn about learning to program.&#34;,&#xA;&#xA;`Tom wrote medical imaging software until attending the Recurse Center in 2012 where he worked as a facilitator until 2015. There he helped students explore areas of programing they were interested in, often including network and web programming.`,&#xA;&#xA;`Tom left medical imaging software development to work as a facilitator at the Recurse Center, a programming workshop for experienced programmers. For four years he helped participants learn new programming languages, build fancy terminal UIs and discover concurrent network programming, which resulted in a lot of BitTorrent clients being built. Lately he&#39;s been prototyping live coding environments in the browser and thinking about programming pedagogy.&#xA;`,&#xA;&#xA;`Tom wants to better understand how people learn to program. After finding the collaborative problem solving the most useful part of his undergraduate degree in Physics at Carleton College, he worked with scientists at the Psychiatry Neuroimaging Lab at Brigham and Women&#39;s hospital. The job entailed magnetic resonance physics, neuroanatomy, neuropsych theory, and design and maintenence of image processing pipelines for 4 and 5 dimensional MRI data particulary diffusion tensor and functional imaging. Finding software engineering consistently the limiting factor in this research, he attended an intensive 12 week programming camp in NYC called the Recurse Center.&#xA;&#xA;Once his session ended Tom left neuroimaging research to help other participants at the camp, becoming the first full-time employee of the company. It became clear to his colleagues at RC and him that issues of motivation, mental health, and comfort with learning environment were as important to learning outcomes as choices of programming language, project, and topic of study. Over 500 Recursers through the program during his time at RC, writing thousands of what was hopefully just the right programming project for the author at that time, including dozens of bittorrent clients, his favorite suggestion of learning project.&#xA;&#xA;Tom left the Recurse Center in 2015 to prototype livecoding environments.&#xA;He lives in Boston, hanging out in MIT buildings a lot, and writes most of his programs in Python and JavaScript. He is active in the Python language community and frequently speaks at Python conferences.&#xA;He volunteers with Software Carpentry to help scientists develop their programming skills&#xA;and mentors programmers though the Recurse Center&#39;s remote program.&#xA;`,&#xA;];&#xA;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;var variablebio = new VariableBio(&#39;#slider&#39;, &#34;#char-count&#34;, &#39;#variable-bio&#39;, bios);&#xA;&lt;/script&gt;</description>
    </item>
  </channel>
</rss>
