<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Writing on xdg.me</title>
    <link>https://xdg.me/writing/</link>
    <description>Essays and tutorials, mostly about software, engineering, and leadership</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>xdg@xdg.me (David Golden)</managingEditor>
    <webMaster>xdg@xdg.me (David Golden)</webMaster>
    <copyright>Unless otherwise noted, text and media are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Code samples licensed under The MIT License.</copyright>
    <lastBuildDate>Mon, 09 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://xdg.me/writing/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hacking the job interview</title>
      <link>https://xdg.me/hacking-the-job-interview/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/hacking-the-job-interview/</guid>
      <description>&lt;p&gt;&lt;strong&gt;The best thing you can do in an interview is make the interviewer picture
you already doing the job.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once that image takes hold &amp;ndash; you on their team, solving their problems,
relieving their stress &amp;ndash; they start to feel relief, maybe only
subconsciously, at the idea of you being hired. And when it comes time to make
a decision, loss aversion kicks in. &lt;strong&gt;It&amp;rsquo;s psychologically harder to say &amp;ldquo;no&amp;rdquo;
to someone you&amp;rsquo;ve already imagined saying &amp;ldquo;yes&amp;rdquo; to.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>AI conversations</title>
      <link>https://xdg.me/ai-conversations/</link>
      <pubDate>Sun, 08 Dec 2024 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/ai-conversations/</guid>
      <description>&lt;div class=&#34;aside&#34;&gt;
&lt;p&gt;I wrote this in December 2024 but it sat as a draft until I rediscovered it in
early 2026. I&amp;rsquo;ve backdated it as a record of where my head was at the time.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I&amp;rsquo;ve always considered myself a great refiner of other people&amp;rsquo;s ideas.  Tell
me your idea and I can instantly tell you what works and what doesn&amp;rsquo;t and give
you lots of suggestions for refinement.&lt;/p&gt;
&lt;p&gt;But give me a blank sheet of paper and a general topic and I&amp;rsquo;ll struggle to
get traction.  Even when I do, I feel the burden.  It&amp;rsquo;s not fun.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unmarshal text with Go reflection</title>
      <link>https://xdg.me/unmarshal-reflection/</link>
      <pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/unmarshal-reflection/</guid>
      <description>&lt;p&gt;As much as I like Go, I sometimes really miss dynamically-typed languages.  I
find Go tedious when I have to parse some arbitrary text format or lines from
stdin, which would be trivial with Python, Ruby or Perl.&lt;/p&gt;
&lt;p&gt;Parsing JSON with Go is easy &amp;ndash; just unmarshal it right into a struct.  I
wanted to unmarshal a line of text the same way, so I wrote a library,
&lt;a href=&#34;https://pkg.go.dev/github.com/xdg-go/strum&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;strum&lt;/code&gt;&lt;/a&gt;, to do exactly that.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>How to mentor software engineers</title>
      <link>https://xdg.me/mentor-engineers/</link>
      <pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/mentor-engineers/</guid>
      <description>&lt;p&gt;A friend and fellow staff+ engineer posted a question to a peer group Slack:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Anyone have suggestions on how best to mentor software engineers?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the time, I said a few things about &lt;em&gt;radical candor&lt;/em&gt; and &lt;em&gt;actionable
feedback&lt;/em&gt;, but the question stuck with me. I mentor people, but I&amp;rsquo;ve never
thought formally about what it is or how I do it.  &lt;strong&gt;Like a lot of soft skills,
we&amp;rsquo;re rarely taught how to mentor&lt;/strong&gt; &amp;ndash; most of us are left to figure it out on
our own.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Use a career ladder for growth conversations</title>
      <link>https://xdg.me/growth-conversations/</link>
      <pubDate>Wed, 29 Sep 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/growth-conversations/</guid>
      <description>&lt;p&gt;A &amp;ldquo;growth conversation&amp;rdquo; is a talk with your manager about how to get promoted.
It might not be explained that way, but don&amp;rsquo;t be fooled.&lt;/p&gt;
&lt;div class=&#34;aside&#34;&gt;
&lt;p&gt;I&amp;rsquo;ve written this for non-managers. But if you&amp;rsquo;re a manager, use this
technique and your team will love you for it!&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I&amp;rsquo;ve found that a lot of these talks wind up muddy and subjective.  It&amp;rsquo;s easy
to come out of them without actionable steps or with generic advice.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Best career advice: ask for feedback</title>
      <link>https://xdg.me/ask-for-feedback/</link>
      <pubDate>Mon, 13 Sep 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/ask-for-feedback/</guid>
      <description>&lt;p&gt;The best career advice I ever heard was this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;No one cares more about your career than you!&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you wait for your manager or your company&amp;rsquo;s review process to give you
feedback, it&amp;rsquo;s almost certainly going to come later than you&amp;rsquo;d like.  There&amp;rsquo;s
a good chance that you&amp;rsquo;ll have missed out on opportunities to improve and the
review you eventually get will bake in the bad habits you could have fixed if
only you&amp;rsquo;d known.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>How to think about equity compensation</title>
      <link>https://xdg.me/equity-comp/</link>
      <pubDate>Thu, 29 Jul 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/equity-comp/</guid>
      <description>&lt;p&gt;Many tech jobs pay a portion of employee compensation in the form of equity.
This is a great deal for companies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They get to defer paying you&lt;/li&gt;
&lt;li&gt;They get to pay you without burning cash&lt;/li&gt;
&lt;li&gt;If you quit before you vest, they don&amp;rsquo;t have to pay you&lt;/li&gt;
&lt;li&gt;If you have a lot of unvested equity, you&amp;rsquo;re less likely to leave&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;how-good-a-deal-is-this-for-employees-really&#34;&gt;How good a deal is this for employees, really?&lt;/h3&gt;
&lt;p&gt;Imagine that your employer only paid cash and said they wanted to pay part of
your salary &amp;ndash; &lt;em&gt;still in cash!&lt;/em&gt; &amp;ndash; in pieces over the next several years.  You&amp;rsquo;d
only want that deal if they were going to pay you more in the future than they
would otherwise pay today to make up for the risk that you might never see the
money.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Why I write</title>
      <link>https://xdg.me/why-i-write/</link>
      <pubDate>Sat, 29 May 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/why-i-write/</guid>
      <description>&lt;p&gt;I was out for a walk.  And as I often do on walks, I used the time to think
about an article I was working on.  Suddenly, though, I was struck with a deeper
question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why do I write?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I realized there are two parts to the answer to this question.  And the more
I thought about it, the more I realized how important &lt;em&gt;both&lt;/em&gt; were to keeping
me motivated.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A better way to learn a new codebase</title>
      <link>https://xdg.me/learn-a-new-codebase/</link>
      <pubDate>Sat, 15 May 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/learn-a-new-codebase/</guid>
      <description>&lt;p&gt;Some people work on the same codebase for years, developing deep mastery. The
rest of us have to start from scratch as we switch projects or jobs. &lt;strong&gt;Being
able to learn a new codebase quickly and effectively is a programmer
superpower.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most guides I&amp;rsquo;ve seen on learning a codebase boil down to &amp;ldquo;read and ask
questions&amp;rdquo;.  For a small codebase, that can work.  But as the codebase grows,
that isn&amp;rsquo;t enough.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>80/20 is half-ass when value is logistic</title>
      <link>https://xdg.me/80-20/</link>
      <pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/80-20/</guid>
      <description>&lt;p&gt;&lt;em&gt;80/20 is a great heuristic for power laws and asymptotic progress, but
be careful when value accrues logistically.&lt;/em&gt;&lt;/p&gt;
&lt;img src=&#34;80-20-inline.png&#34; alt=&#34;80/20&#34; /&gt;
&lt;p&gt;My friend &lt;a href=&#34;https://x.com/swyx&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;swyx&lt;/a&gt; wrote an article, &lt;a href=&#34;https://www.swyx.io/8020/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&amp;ldquo;80/20 is the
new half-ass&amp;rdquo;&lt;/a&gt;, that pushed my buttons. But on a
second read, I realized that nothing he said is wrong.  It bothered me because
it dunked on one of my favorite tools without advice for using it well.&lt;/p&gt;
&lt;p&gt;To me, the 80/20 heuristic is a mental model about &lt;strong&gt;diminishing marginal
returns&lt;/strong&gt;.  80/20 thinking works best in two cases:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>How I broke the MongoDB Go driver ecosystem</title>
      <link>https://xdg.me/i-broke-the-mongodb-go-driver-ecosystem/</link>
      <pubDate>Tue, 30 Mar 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/i-broke-the-mongodb-go-driver-ecosystem/</guid>
      <description>&lt;p&gt;I unintentionally broke the MongoDB Go driver ecosystem one March weekend in
2021.  Dependency management systems are hard.&lt;/p&gt;
&lt;img src=&#34;thumbnail.jpg&#34; alt=&#34;trees on fire&#34; /&gt;
&lt;p&gt;In late 2018, I moved all my Go libraries from &lt;code&gt;github.com/xdg&lt;/code&gt; to
&lt;code&gt;github.com/xdg-go&lt;/code&gt; to keep my Go work separate from other projects/languages.&lt;/p&gt;
&lt;p&gt;This seemed painless, because GitHub automatically redirects repositories
after a rename.  For example, in a project that was importing
&lt;code&gt;github.com/xdg/stringprep&lt;/code&gt;, a dependency resolver would try to pull from that
repository, and GitHub would transparently redirect that to
&lt;code&gt;github.com/xdg-go/stringprep&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Interviewing engineers, part 2</title>
      <link>https://xdg.me/interviewing-engineers-2/</link>
      <pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/interviewing-engineers-2/</guid>
      <description>&lt;p&gt;Welcome back!  In &lt;a href=&#34;../interviewing-engineers&#34;&gt;part 1&lt;/a&gt; of this article, I said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think tech industry hiring is pretty broken.  If you feel the same and are
looking for inspiration, I&amp;rsquo;ll tell you what I did differently when I had the
chance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Part 1 covered my philosophy about interviewing and I described changes I made
to the hiring process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using promotion criteria to guide hiring criteria&lt;/li&gt;
&lt;li&gt;Having the hiring manager do the first interview&lt;/li&gt;
&lt;li&gt;Saving synchronous time for interaction, not coding&lt;/li&gt;
&lt;li&gt;Using take-home exercises as part of the initial screen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also gave examples for &lt;a href=&#34;../interviewing-engineers/#only-give-a-take-home-if-they-pass-a-non-technical-phone-screen&#34;&gt;effective non-technical
interviewing&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Interviewing engineers</title>
      <link>https://xdg.me/interviewing-engineers/</link>
      <pubDate>Thu, 18 Mar 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/interviewing-engineers/</guid>
      <description>&lt;p&gt;I think tech industry hiring is pretty broken.  If you feel the same and are
looking for inspiration, I&amp;rsquo;ll tell you what I did differently when I was a
hiring manager at MongoDB.&lt;/p&gt;
&lt;div class=&#34;aside&#34;&gt;
&lt;p&gt;Caveat: I don&amp;rsquo;t claim this only way to interview.  It&amp;rsquo;s just something I tried
that I think is better than the typical way it&amp;rsquo;s done.  Take my ideas if you&amp;rsquo;d
like, but do your own experiments and see what works for you.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Leading without managing</title>
      <link>https://xdg.me/leading-without-managing/</link>
      <pubDate>Fri, 12 Feb 2021 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/leading-without-managing/</guid>
      <description>&lt;p&gt;&lt;em&gt;What does it mean to lead when you don&amp;rsquo;t have coercive power to get your way?&lt;/em&gt;&lt;/p&gt;
&lt;img src=&#34;leader-manager-midsize.jpg&#34; alt=&#34;leader vs manager&#34; /&gt;
&lt;p&gt;Good managers are often good leaders.  But managers don&amp;rsquo;t have to be good
leaders to get their way because they have authority to make decisions
unilaterally.&lt;/p&gt;
&lt;p&gt;What if you don&amp;rsquo;t have that authority?&lt;/p&gt;
&lt;p&gt;Perhaps you&amp;rsquo;re an individual contributor.  Perhaps you &lt;em&gt;are&lt;/em&gt; a manager, but
want to show leadership when you&amp;rsquo;re the junior person in the room.  In both
cases, you lack the authority that comes from coercive power.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A survey of git best practices</title>
      <link>https://xdg.me/a-survey-of-git-best-practices/</link>
      <pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/a-survey-of-git-best-practices/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;How do you know if something you recommend is a best practice?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At work, new college grads are starting and I volunteered to give a talk on
git best practices.  I have strong views, but I looked for articles I could
use to give a more complete picture.&lt;/p&gt;
&lt;p&gt;It was weirdly addicting.  After looking at three or four, I kept going
through page after page of Google search results.&lt;/p&gt;
&lt;p&gt;I looked for two things.  How often was a topic mentioned?  And did people
agree or disagree?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>What xkcd tells us about dependencies and NIH syndrome</title>
      <link>https://xdg.me/what-xkcd-tells-us-about-dependencies-and-nih-syndrome/</link>
      <pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/what-xkcd-tells-us-about-dependencies-and-nih-syndrome/</guid>
      <description>&lt;p&gt;NIH. Not invented here. In software development, this means a preference for
in-house code.  People have strong feelings about this, but let&amp;rsquo;s try to
ground ourselves in some actual analysis. When does it make sense?&lt;/p&gt;
&lt;p&gt;A third-party dependency is code you don&amp;rsquo;t have to write, but it
introduces risk.  Some people say &amp;ldquo;if you can replace a dependency with an
afternoon of coding, do it!&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Is that right?  &lt;strong&gt;Let&amp;rsquo;s ask xkcd.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Book review: The Coding Career Handbook</title>
      <link>https://xdg.me/book-review-the-coding-career-handbook/</link>
      <pubDate>Tue, 11 Aug 2020 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/book-review-the-coding-career-handbook/</guid>
      <description>&lt;figure&gt;&lt;a href=&#34;https://www.learninpublic.org/&#34;&gt;&lt;img src=&#34;https://xdg.me/book-review-the-coding-career-handbook/coding-career-handbook.png&#34;
			alt=&#34;The Coding Career Handbook by Shawn Wang (@swyx)&#34;&gt;&lt;/a&gt;&lt;figcaption&gt;
			&lt;p&gt;The Coding Career Handbook by Shawn Wang (&lt;a href=&#34;https://x.com/swyx&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;@swyx&lt;/a&gt;)&lt;/p&gt;
		&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.learninpublic.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Coding Career Handbook&lt;/a&gt; is chock full of
nuggets for aspiring senior engineers and beyond.  It lightly covers a vast
number of essential, mostly non-technical topics that senior+ engineers should
know, and gives extensive hyperlinks for each.&lt;/p&gt;
&lt;p&gt;Many of the career tactics offered are variations of Shawn&amp;rsquo;s &lt;a href=&#34;https://www.swyx.io/writing/learn-in-public/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;learn in
public&lt;/a&gt; theme for building a
professional network via writing and social media.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Rewriting Go with AST transformation</title>
      <link>https://xdg.me/rewriting-go-with-ast-transformation/</link>
      <pubDate>Sat, 23 Nov 2019 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/rewriting-go-with-ast-transformation/</guid>
      <description>&lt;p&gt;At work, my team decided to switch our codebase from
&lt;a href=&#34;https://github.com/pkg/errors&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;pkg/errors&lt;/code&gt;&lt;/a&gt; to Go 1.13&amp;rsquo;s native error
wrapping.  We used to wrap our errors like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;var errBadStuff := errors.New(&amp;#34;something happened&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;err := errors.Wrapf(errBadStuff, &amp;#34;some context &amp;#39;%s&amp;#39;&amp;#34;, label)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Starting in 1.13, we can wrap errors directly using
&lt;a href=&#34;https://golang.org/pkg/fmt/#Errorf&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;fmt.Errorf&lt;/code&gt;&lt;/a&gt; and the &lt;code&gt;%w&lt;/code&gt; code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;err := fmt.Errorf(&amp;#34;some context &amp;#39;%s&amp;#39;: %w&amp;#34;, label, errBadStuff)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rather than change hundreds of wrappings across tens of thousands of lines by
hand or with kludgy string replacement, I wrote a program to rewrite our
source files using Go&amp;rsquo;s AST instead.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go as glue: JSON &#43; XML &#43; PNG = PDF</title>
      <link>https://xdg.me/go-as-glue-json-xml-png-pdf/</link>
      <pubDate>Wed, 13 Nov 2019 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/go-as-glue-json-xml-png-pdf/</guid>
      <description>&lt;p&gt;&lt;em&gt;tl;dr: How I used Go to mash up card game data from the Internet into a
printable PDF of card proxies.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Earlier this year, a friend introduced me to the &lt;a href=&#34;https://boardgamegeek.com/boardgame/77423/lord-rings-card-game&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Lord of the Rings card
game&lt;/a&gt;.  Like
Magic the Gathering, you construct your own deck from a pool of cards.  Unlike
Magic, it&amp;rsquo;s cooperative (or solo): you compete against a thematic
scenario rather than against other players.&lt;/p&gt;
&lt;p&gt;Ideally, you need access to a big pool of cards to customize your hero deck to
the specific challenges of each scenario.  Unfortunately, many of the early
expansion sets are out of print and ridiculously expensive on Ebay.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Schrödinger&#39;s Monad: A Maybe type experiment for Go</title>
      <link>https://xdg.me/schr%C3%B6dingers-monad-a-maybe-type-experiment-for-go/</link>
      <pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/schr%C3%B6dingers-monad-a-maybe-type-experiment-for-go/</guid>
      <description>&lt;p&gt;In the mid 1930&amp;rsquo;s, physicist Erwin Schrödinger published a thought
experiment to critique the seeming-paradoxes in the new science of
quantum mechanics.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Schrödinger&amp;rsquo;s Cat&amp;rdquo; problem imagines a cat locked in a box with a
device that might or might not release a poison gas depending on a quantum
effect, such as radioactive decay of an atom.  According to quantum theory,
the atom exists in a &amp;ldquo;superposition&amp;rdquo; of decayed and non-decayed states
simultaneously until &amp;ldquo;observed&amp;rdquo;.  Therefore, the cat must be both alive and
dead until the box is opened, thus &amp;ldquo;collapsing&amp;rdquo; the superposition of
possibilities to a single outcome.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Flaming people versus flaming code</title>
      <link>https://xdg.me/flaming-people-versus-flaming-code/</link>
      <pubDate>Wed, 14 Mar 2018 00:00:00 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/flaming-people-versus-flaming-code/</guid>
      <description>&lt;p&gt;I think many open-source communities suffer from two related flaws:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;We think flaming someone&amp;rsquo;s code is an acceptable or useful form of technical critique&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We react to flames against our code as personal attacks&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When both occur, we have problems.&lt;/p&gt;
&lt;p&gt;Statements like &amp;ldquo;this code is stupid&amp;rdquo; or &amp;ldquo;this code is insane&amp;rdquo; aren&amp;rsquo;t constructive because they don&amp;rsquo;t contain any useful information about what was seen as a problem and because most people reasonably take pride in their work and don&amp;rsquo;t like hearing it disparaged.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>No more dirty reads with MongoDB</title>
      <link>https://xdg.me/no-more-dirty-reads-with-mongodb/</link>
      <pubDate>Mon, 07 Mar 2016 10:00:03 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/no-more-dirty-reads-with-mongodb/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re reading this blog, it&amp;rsquo;s a good bet that sometime in your life you&amp;rsquo;ve had a computer freeze or crash on you. You know that crashes happen.&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s your laptop, you restart and hope for the best. When it&amp;rsquo;s your database, things are a bit more complicated.&lt;/p&gt;
&lt;p&gt;Historically, a database lived on a single machine. Writes are considered &amp;ldquo;committed&amp;rdquo; when they are written to a journal file and flushed to disk. Until then, they are &amp;ldquo;dirty&amp;rdquo;. If the database crashes, only the committed changes are recovered from disk.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Perl 5 and Perl 6 are mortal enemies</title>
      <link>https://xdg.me/perl-5-and-perl-6-are-mortal-enemies/</link>
      <pubDate>Thu, 07 Jan 2016 11:31:18 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/perl-5-and-perl-6-are-mortal-enemies/</guid>
      <description>&lt;p class=&#34;aside&#34;&gt;[Note: in 2019, Perl 6 &lt;a
href=&#34;https://github.com/Raku/problem-solving/issues/81&#34; target=&#34;_blank&#34;&gt;renamed&lt;/a&gt; itself &lt;a
href=&#34;https://raku.org/&#34; target=&#34;_blank&#34;&gt;Raku&lt;/a&gt;.]&lt;/p&gt;
&lt;p&gt;Did you grow up with one or more siblings? Are you a parent with two or more kids? Then you know that siblings often fight. A lot.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perl 6 is described as Perl 5&amp;rsquo;s little sister&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That metaphor fits. They share parentage. The languages are similar in philosophy. One is more mature, the other less so. Their communities overlap.&lt;/p&gt;
&lt;p&gt;But like siblings, they are rivals. Like an only child confronted with a new baby in the house, they now compete for attention from their shared community. They compete for scarce resources to grow – in the form of volunteers who will contribute time and treasure.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Book Review: The Go Programming Language</title>
      <link>https://xdg.me/book-review-the-go-programming-language/</link>
      <pubDate>Mon, 04 Jan 2016 21:50:07 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/book-review-the-go-programming-language/</guid>
      <description>&lt;img src=&#34;https://www.gopl.io/cover.png&#34; alt=&#34;null&#34; width=&#34;25%&#34; /&gt;
&lt;p&gt;&lt;em&gt;[Disclaimer: I was provided with a free review copy by the publisher.]&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re looking to buy a comprehensive text on Go, &lt;a href=&#34;http://www.gopl.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&amp;ldquo;The Go Programming Language&amp;rdquo;&lt;/a&gt; is an excellent choice. But with so many free e-book introductions to Go, do you really need it? Maybe, but maybe not.&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The authors &amp;ldquo;assume that you have programmed in one or more other languages&amp;rdquo; and thus &amp;ldquo;won&amp;rsquo;t spell out everything as if for a total beginner&amp;rdquo;. Yet the book weighs in at a hefty 380 pages (over 100 pages more than my venerable 1988 K&amp;amp;R 2nd edition).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Tip jars and open source</title>
      <link>https://xdg.me/why-i-finally-joined-gittip-and-why-you-should-too/</link>
      <pubDate>Mon, 03 Mar 2014 22:09:45 +0000</pubDate>
      <author>xdg@xdg.me (David Golden)</author>
      <guid>https://xdg.me/why-i-finally-joined-gittip-and-why-you-should-too/</guid>
      <description>&lt;p class=&#34;aside&#34;&gt;[This essay was originally titled &#34;Why I finally joined
Gittip and why you should, too&#34;, but with the &lt;a
href=&#34;https://gratipay.news/the-end-cbfba8f50981&#34;&gt;demise of Gittip&lt;/a&gt; (later
Gratipay), I&#39;ve retitled and amended it to make a more general point.]&lt;/p&gt;
&lt;p&gt;I was a &lt;a href=&#34;https://gratipay.com/&#34; title=&#34;Gittip&#34; target=&#34;_blank&#34;&gt;Gittip&lt;/a&gt; skeptic.&lt;/p&gt;
&lt;p&gt;Heck, I still am. But I signed up anyway and I&amp;rsquo;ll tell you why.&lt;/p&gt;
&lt;p&gt;But first, I want to talk about money and altruism. Most people contribute to
open source for free. They don&amp;rsquo;t do it for money. They do it for fun or
self-satisfaction.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
