<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Adam Gordon Bell — Software Engineer, Podcaster, Speaker on Adam Gordon Bell</title><link>https://adamgordonbell.com/</link><description>Recent content in Adam Gordon Bell — Software Engineer, Podcaster, Speaker on Adam Gordon Bell</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 08 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://adamgordonbell.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>Why I Struggled to Finish a Beautifully Written Book</title><link>https://adamgordonbell.com/posts/2025-11-08-beautifully-written-book.html/</link><pubDate>Sat, 08 Nov 2025 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2025-11-08-beautifully-written-book.html/</guid><description>&lt;blockquote>
&lt;p>All life is suffering. Well, duh, Jolie would remember thinking, the one time Roshi Steve ever stooped to bullet-point the noble truths of Buddhism. Her phone, secure in its cubby, was more or less a snuff film of the world&amp;rsquo;s entangled miseries: bread lines, forever wars, the beehives gone silent, the coral reefs bleached white. Yet there at the zendo to which she&amp;rsquo;d been sneaking off each Thursday the spring of her seventh-grade year, wisdom wasn&amp;rsquo;t supposed to come in such pithy little nuggets. So it was only later, toward the end of April, that she would realize this First Noble Truth had been the through-line all along.&lt;/p></description></item><item><title>Software Misadventures Podcast</title><link>https://adamgordonbell.com/posts/2024-08-06-software-misadventures.html/</link><pubDate>Tue, 06 Aug 2024 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2024-08-06-software-misadventures.html/</guid><description>&lt;p>I was interviewed for the Software Misadventures Podcast.&lt;/p>
&lt;p>Below is a machine generated transcription.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/KummzuErxOE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Interview with Adam Gordon Bell: The Art of Technical Storytelling</title><link>https://adamgordonbell.com/posts/2024-05-10-earthly-writing.html/</link><pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2024-05-10-earthly-writing.html/</guid><description>&lt;p>I was interviewed by Sarah for a podcast.&lt;/p>
&lt;p>Below is a machine generated transcription.&lt;/p>
&lt;p>&lt;em>Sarah interviews Adam Gordon Bell about his successful content creation strategies during his time at Earthly Technologies.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Sarah:&lt;/strong> Adam, your articles consistently made it to the front page of Hacker News during your time at Earthly, with pieces like &amp;ldquo;We built the fastest CI and it failed&amp;rdquo; and &amp;ldquo;Don&amp;rsquo;t Feed the Thought Leaders&amp;rdquo; generating hundreds of points. What was your approach to selecting topics that would resonate with the developer community?&lt;/p></description></item><item><title>From GeoCities to Haskell: Chronicles of an Abandoned Blog</title><link>https://adamgordonbell.com/posts/2024-05-10-somewhat-more-like-completely.html/</link><pubDate>Fri, 10 May 2024 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2024-05-10-somewhat-more-like-completely.html/</guid><description>&lt;p>For years, this blog has said at the top, in the header, &amp;ldquo;This is my blog. It&amp;rsquo;s somewhat abandoned.&amp;rdquo; It&amp;rsquo;s more than just abandoned, though. Here is the story.&lt;/p></description></item><item><title>The Accidental Engineer Interview</title><link>https://adamgordonbell.com/posts/2019-06-09-accidental-engineer.html/</link><pubDate>Sun, 09 Jun 2019 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2019-06-09-accidental-engineer.html/</guid><description>&lt;p>I was interviewed on &lt;a href="https://theaccidentalengineer.com/docker-telecommute-podcasting-adam-gordon-bell-corecursive/">The Accidental Engineer&lt;/a> Podcast. Here is a machine generated transcript.&lt;/p></description></item><item><title>A Geek Leader Interview</title><link>https://adamgordonbell.com/posts/2019-04-28-a-geek-leader.html/</link><pubDate>Sun, 28 Apr 2019 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2019-04-28-a-geek-leader.html/</guid><description>&lt;p>I was interviewed on &lt;a href="https://www.ageekleader.com/agl-102-corecursive-with-adam-gordon-bell/">&amp;ldquo;A Geek Leader&amp;rdquo;&lt;/a> Podcast. Here is a machine generated transcript.&lt;/p></description></item><item><title>Lucid Programming Interview</title><link>https://adamgordonbell.com/posts/2019-04-28-lucid-programming.html/</link><pubDate>Sun, 28 Apr 2019 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2019-04-28-lucid-programming.html/</guid><description>&lt;p>I was interviewed for the Lucid Programming Podcast.&lt;/p>
&lt;p>Below is a machine generated transcription.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/C0PuCgQrxZU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Programming Throwdown</title><link>https://adamgordonbell.com/posts/2019-04-28-programming-throwdown.html/</link><pubDate>Sun, 28 Apr 2019 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2019-04-28-programming-throwdown.html/</guid><description>&lt;p>I was interviewed for the &lt;a href="https://www.programmingthrowdown.com/episodes/episode-91-functional-programming-with/">programming throwdown podcast&lt;/a>.&lt;/p>
&lt;p>Below is a machine generated transcription.&lt;/p></description></item><item><title>Signify Q&amp;A With Adam Gordon Bell</title><link>https://adamgordonbell.com/posts/2019-04-20-scala-in-the-city.html/</link><pubDate>Sat, 20 Apr 2019 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2019-04-20-scala-in-the-city.html/</guid><description>&lt;p>I was interviewed for by Signify Technolgies for Scala in the City.&lt;/p>
&lt;p>Below is a machine generated transcription.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/LexbSEexZh8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Modifier Keys in the Home Row</title><link>https://adamgordonbell.com/posts/2016-08-22-modifier-keys-in-the-home-row.html/</link><pubDate>Mon, 22 Aug 2016 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2016-08-22-modifier-keys-in-the-home-row.html/</guid><description>&lt;p>&lt;img src="https://adamgordonbell.com/images/keyboard-layout_ergodox.png" alt="ergodox">
With today&amp;rsquo;s opensource keyboard firmware, it is possible to use dual role keys to have all modifier keys in your home row.&lt;/p></description></item><item><title>A Better 3-way merge?</title><link>https://adamgordonbell.com/posts/2016-08-21-a-better-3-way-merge.html/</link><pubDate>Sun, 21 Aug 2016 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2016-08-21-a-better-3-way-merge.html/</guid><description>&lt;p>3-way merge works great for code merges in the majority of cases. Can we do better, however. Can we decrease the number of places where a manual conflict resolution is required. I would say, yes we can, if we know more about the syntax of the file in question.&lt;/p></description></item><item><title>Git Custom Merge Drivers</title><link>https://adamgordonbell.com/posts/2016-06-16-merging-and-conflict-resolution.html/</link><pubDate>Thu, 16 Jun 2016 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2016-06-16-merging-and-conflict-resolution.html/</guid><description>&lt;p>Git merge drivers.&lt;/p></description></item><item><title>Postgres Update With Join</title><link>https://adamgordonbell.com/posts/2016-04-20-postgres-update-with-join.html/</link><pubDate>Wed, 20 Apr 2016 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2016-04-20-postgres-update-with-join.html/</guid><description>&lt;p>How to perform and update with a join using CTE&amp;rsquo;s in postgres&lt;/p>
&lt;ul>
&lt;li>in a cte, write a select that returns the update to values, and the join on conditions&lt;/li>
&lt;li>join on that in the update&lt;/li>
&lt;li>Test: Optionally write a select that tests your results and wrap it all in a rolled back transaction to test run&lt;/li>
&lt;/ul></description></item><item><title>Using Custom Packages in NixOs Configuration File</title><link>https://adamgordonbell.com/posts/2016-03-26-using-custom-packages-in-nixos-configuration-file.html/</link><pubDate>Sat, 26 Mar 2016 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2016-03-26-using-custom-packages-in-nixos-configuration-file.html/</guid><description>&lt;p>Here is a problem we encountered with NixOS:&lt;/p>
&lt;p>The nix-channel we were on didn&amp;rsquo;t have the latest version of something we needed. This happened recently when my coworker upgraded to Postgres 9.5 from 9.4 but the PostGIS version in nixpkgs hadn’t been updated to a 9.5 compatible version.&lt;/p></description></item><item><title>Bitcoin Transactions</title><link>https://adamgordonbell.com/posts/2015-11-04-bitcoin-transactions-volume.html/</link><pubDate>Wed, 04 Nov 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-11-04-bitcoin-transactions-volume.html/</guid><description>&lt;p>What will be the average number of Bitcoin transactions per day in the first week of June 2016?&lt;/p></description></item><item><title>Fitness Books</title><link>https://adamgordonbell.com/posts/2015-10-21-fitness-books.html/</link><pubDate>Wed, 21 Oct 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-10-21-fitness-books.html/</guid><description>&lt;p>I&amp;rsquo;ve read a lot of fitness biographies over the last little while. Here is a quick list.&lt;/p></description></item><item><title>More Scala Groups And Tuples</title><link>https://adamgordonbell.com/posts/2015-08-19-more-scala-groups-and-tuples.html/</link><pubDate>Wed, 19 Aug 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-08-19-more-scala-groups-and-tuples.html/</guid><description>&lt;p>Continuing from &lt;a href="http://cascadeofinsights.com/posts/2015-08-04-scala-slick-group-joins.html">here&lt;/a>, I have lists of tuples and I want to group them. Here I have a list of 4-tuples and I want to group the second tuple by the first. &lt;em>The fact that I need to do this probably represents some greater problem, but that is a story for another time&lt;/em>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-scala" data-lang="scala">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">import&lt;/span> shapeless._
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">import&lt;/span> syntax.std.tuple._
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">import&lt;/span> poly._
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">object&lt;/span> &lt;span style="color:#a6e22e">GroupLists&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> group1TwoExtra&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">A&lt;/span>,&lt;span style="color:#66d9ef">B&lt;/span>,&lt;span style="color:#66d9ef">C&lt;/span>,&lt;span style="color:#66d9ef">D&lt;/span>&lt;span style="color:#f92672">](&lt;/span>t &lt;span style="color:#66d9ef">:&lt;/span> &lt;span style="color:#66d9ef">List&lt;/span>&lt;span style="color:#f92672">[(&lt;/span>&lt;span style="color:#66d9ef">A&lt;/span>,&lt;span style="color:#66d9ef">B&lt;/span>,&lt;span style="color:#66d9ef">C&lt;/span>,&lt;span style="color:#66d9ef">D&lt;/span>&lt;span style="color:#f92672">)])&lt;/span> &lt;span style="color:#66d9ef">:&lt;/span> &lt;span style="color:#66d9ef">List&lt;/span>&lt;span style="color:#f92672">[(&lt;/span>&lt;span style="color:#66d9ef">A&lt;/span>,&lt;span style="color:#66d9ef">List&lt;/span>&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">B&lt;/span>&lt;span style="color:#f92672">]&lt;/span>,&lt;span style="color:#66d9ef">C&lt;/span>,&lt;span style="color:#66d9ef">D&lt;/span>&lt;span style="color:#f92672">)]&lt;/span> &lt;span style="color:#66d9ef">=&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">val&lt;/span> map &lt;span style="color:#66d9ef">=&lt;/span> &lt;span style="color:#a6e22e">LinkedHashMap&lt;/span>&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">A&lt;/span>, &lt;span style="color:#66d9ef">LinkedHashSet&lt;/span>&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">B&lt;/span>&lt;span style="color:#f92672">]]()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">val&lt;/span> mapOther &lt;span style="color:#66d9ef">=&lt;/span> scala&lt;span style="color:#f92672">.&lt;/span>collection&lt;span style="color:#f92672">.&lt;/span>mutable&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#a6e22e">Map&lt;/span>&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">A&lt;/span>,&lt;span style="color:#f92672">(&lt;/span>&lt;span style="color:#66d9ef">C&lt;/span>,&lt;span style="color:#66d9ef">D&lt;/span>&lt;span style="color:#f92672">)]()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#f92672">(&lt;/span>i &lt;span style="color:#66d9ef">&amp;lt;-&lt;/span> t&lt;span style="color:#f92672">)&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">val&lt;/span> key &lt;span style="color:#66d9ef">=&lt;/span> i&lt;span style="color:#f92672">.&lt;/span>head
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map&lt;span style="color:#f92672">(&lt;/span>key&lt;span style="color:#f92672">)&lt;/span> &lt;span style="color:#66d9ef">=&lt;/span> map&lt;span style="color:#f92672">.&lt;/span>lift&lt;span style="color:#f92672">(&lt;/span>key&lt;span style="color:#f92672">).&lt;/span>getOrElse&lt;span style="color:#f92672">(&lt;/span>&lt;span style="color:#a6e22e">LinkedHashSet&lt;/span>&lt;span style="color:#f92672">[&lt;/span>&lt;span style="color:#66d9ef">B&lt;/span>&lt;span style="color:#f92672">]())&lt;/span> &lt;span style="color:#f92672">+&lt;/span> i&lt;span style="color:#f92672">.&lt;/span>drop&lt;span style="color:#f92672">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#f92672">).&lt;/span>head
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mapOther &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#f92672">(&lt;/span>key &lt;span style="color:#f92672">-&amp;gt;&lt;/span> i&lt;span style="color:#f92672">.&lt;/span>drop&lt;span style="color:#f92672">(&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#f92672">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map&lt;span style="color:#f92672">.&lt;/span>map&lt;span style="color:#f92672">(&lt;/span>b &lt;span style="color:#66d9ef">=&amp;gt;&lt;/span> &lt;span style="color:#f92672">(&lt;/span>b&lt;span style="color:#f92672">.&lt;/span>_1&lt;span style="color:#f92672">,&lt;/span> b&lt;span style="color:#f92672">.&lt;/span>_2&lt;span style="color:#f92672">.&lt;/span>toList&lt;span style="color:#f92672">)&lt;/span> &lt;span style="color:#f92672">++&lt;/span> mapOther&lt;span style="color:#f92672">(&lt;/span>b&lt;span style="color:#f92672">.&lt;/span>_1&lt;span style="color:#f92672">)).&lt;/span>toList
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Mixed Metaphors</title><link>https://adamgordonbell.com/posts/2015-08-11-mixed-metaphors.html/</link><pubDate>Tue, 11 Aug 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-08-11-mixed-metaphors.html/</guid><description>&lt;p>Here I&amp;rsquo;m collecting some mixed metaphors that I thought were funny. Hopefully for use in a presentation about comedy I am doing&lt;/p>
&lt;ul>
&lt;li>I wouldn&amp;rsquo;t eat that with a ten foot pole&lt;/li>
&lt;/ul></description></item><item><title>Scala Slick Group</title><link>https://adamgordonbell.com/posts/2015-08-04-scala-slick-group-joins.html/</link><pubDate>Tue, 04 Aug 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-08-04-scala-slick-group-joins.html/</guid><description>&lt;p>In slick, if each foo has many bars and I need to retrive several foos and associtated bars I will do something like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-scala" data-lang="scala">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">val&lt;/span> join &lt;span style="color:#66d9ef">=&lt;/span> &lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">(&lt;/span>f&lt;span style="color:#f92672">,&lt;/span>b&lt;span style="color:#f92672">)&lt;/span> &lt;span style="color:#66d9ef">&amp;lt;-&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> foo&lt;span style="color:#f92672">.&lt;/span>filter&lt;span style="color:#f92672">(...)&lt;/span> on innerJoin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> bar on &lt;span style="color:#f92672">(...)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span> &lt;span style="color:#66d9ef">yield&lt;/span> &lt;span style="color:#f92672">(&lt;/span>o&lt;span style="color:#f92672">,&lt;/span>i&lt;span style="color:#f92672">,&lt;/span>s&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Hakyll and CircleCi</title><link>https://adamgordonbell.com/posts/2015-07-31-hakyll-and-circleci.html/</link><pubDate>Fri, 31 Jul 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-07-31-hakyll-and-circleci.html/</guid><description>&lt;p>This blog was on tumblr, which was easy to setup and post and such. However, I spend like 8 hours a day with a text editor open and a git in terminal window.&lt;/p></description></item><item><title>Lazy Evaluation In Haskell</title><link>https://adamgordonbell.com/posts/2015-01-14-lazy-evaluation.html/</link><pubDate>Wed, 14 Jan 2015 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2015-01-14-lazy-evaluation.html/</guid><description>&lt;p>&lt;em>This post is a work in progress and represents my getting to understand how laziness works in haskell and how it affects performance.&lt;/em>&lt;/p></description></item><item><title>Incrementing</title><link>https://adamgordonbell.com/posts/2014-03-15-incrementing.html/</link><pubDate>Sat, 15 Mar 2014 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2014-03-15-incrementing.html/</guid><description>&lt;p>In &lt;a href="http://www.paulgraham.com/icad.html">an old essay&lt;/a>, Paul Graham, talks about how some languages are more succinct and therefore they are more powerful. In fact, some programming languages can say things that you can’t easily say in others. Maybe you can’t say them at all. Its a good essay overall, you should read it.&lt;/p></description></item><item><title>How to get bluetooth working in windows 8 / 8.1 on various thinkpads</title><link>https://adamgordonbell.com/posts/2014-02-20-bluetooth-thinkpad-w520.html/</link><pubDate>Thu, 20 Feb 2014 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2014-02-20-bluetooth-thinkpad-w520.html/</guid><description/></item><item><title>Truly Ergonomic Keyboard</title><link>https://adamgordonbell.com/posts/2013-11-28-truly-ergonomic-keyboard.html/</link><pubDate>Thu, 28 Nov 2013 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2013-11-28-truly-ergonomic-keyboard.html/</guid><description>&lt;p>&lt;img src="http://40.media.tumblr.com/33a4ee15af3bce76dafa18a526b9d383/tumblr_mwz6ecK0jE1qe4yfuo1_500.jpg" alt="keyboard">&lt;/p></description></item><item><title>Emacs Client on Windows 8</title><link>https://adamgordonbell.com/posts/2013-10-28-emacs-client-on-windows.html/</link><pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2013-10-28-emacs-client-on-windows.html/</guid><description>&lt;p>Problem:&lt;/p>
&lt;p>I want to use emacs like I use notepadd++ on windows.&lt;/p></description></item><item><title>Project Euler #19 in haskell and by hand</title><link>https://adamgordonbell.com/posts/2012-11-09-euler19.html/</link><pubDate>Fri, 09 Nov 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-11-09-euler19.html/</guid><description>&lt;blockquote>
&lt;p>&lt;span>How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?&lt;/span>&lt;/p>
&lt;p>&lt;a href="http://projecteuler.net/problem=19">http://projecteuler.net/problem=19&lt;/a>&lt;/p>&lt;/blockquote></description></item><item><title>Functor is to Lens as Applicative is to Biplate</title><link>https://adamgordonbell.com/posts/2012-10-15-functor-is-to-lens-as.html/</link><pubDate>Mon, 15 Oct 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-10-15-functor-is-to-lens-as.html/</guid><description>&lt;p>“Functor is to Lens as Applicative is to Biplate”&lt;/p>
&lt;ul>
&lt;li>&lt;em>&lt;a href="http://front.math.ucdavis.edu/1103.2841">http://front.math.ucdavis.edu/1103.2841&lt;/a>&lt;/em>&lt;/li>
&lt;/ul>
&lt;p>Haskell, the language with seemingly endless new concepts to learn about&lt;/p></description></item><item><title>Project Euler #11 in haskell</title><link>https://adamgordonbell.com/posts/2012-09-15-euler11.html/</link><pubDate>Sat, 15 Sep 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-09-15-euler11.html/</guid><description>&lt;blockquote>
&lt;p>&lt;span>What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 20&lt;/span>&lt;img src="http://projecteuler.net/images/symbol_times.gif" alt="×">&lt;span>20 grid?&lt;/span>&lt;/p>
&lt;p>&lt;a href="http://projecteuler.net/problem=11">http://projecteuler.net/problem=11&lt;/a>&lt;/p>&lt;/blockquote></description></item><item><title>Graham’s scan algorithm for the convex hull</title><link>https://adamgordonbell.com/posts/2012-08-30-grahams-scan.html/</link><pubDate>Thu, 30 Aug 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-08-30-grahams-scan.html/</guid><description>&lt;p>&lt;span>Using the code from the preceding three exercises, implement Graham’s scan algorithm for the convex hull of a set of 2D points. You can find good description of what a&lt;/span> &lt;a href="http://en.wikipedia.org/wiki/Convex_hull">convex hull&lt;/a>&lt;span>. is, and how the&lt;/span> &lt;a href="http://en.wikipedia.org/wiki/Graham_scan">Graham scan algorithm&lt;/a> &lt;span>should work, on&lt;/span> &lt;a href="http://en.wikipedia.org/">Wikipedia&lt;/a>&lt;/p></description></item><item><title>WordPress Force “View all posts in %s” for categories</title><link>https://adamgordonbell.com/posts/2012-07-15-wordpress.html/</link><pubDate>Sun, 15 Jul 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-07-15-wordpress.html/</guid><description>&lt;p>Force categories list not to use category descritption use this:&lt;/p></description></item><item><title>Problems Clojure thinks I have with C#</title><link>https://adamgordonbell.com/posts/2012-07-06-clojure-problems.html/</link><pubDate>Fri, 06 Jul 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-07-06-clojure-problems.html/</guid><description>&lt;p>I am reading “Joy Of Clojure”. It seems like a good book, but it keeps telling me about these problems I have which I don’t percieve as problems.&lt;/p></description></item><item><title>Creeping Determinism</title><link>https://adamgordonbell.com/posts/2012-06-15-creeping-determinism.html/</link><pubDate>Fri, 15 Jun 2012 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2012-06-15-creeping-determinism.html/</guid><description>&lt;p>Let’s say that you won the lottery. That would be great, wouldn’t it?&lt;/p></description></item><item><title>Code Generators, You Suck. Well, some of you do.</title><link>https://adamgordonbell.com/posts/2011-07-05-code-generators-suck.html/</link><pubDate>Tue, 05 Jul 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-07-05-code-generators-suck.html/</guid><description>&lt;p>The scaffolding style code generators that generate out a good starting point from which standard coding takes over, those are very useful.&lt;/p>
&lt;p>The Microsoft brand “design surface” based code generators (TableAdapters,&lt;a href="http://servicefactory.codeplex.com">WSSF&lt;/a>) where the uml diagram of a class needs to be edited, rather than the actual class, those are more harm than good. if fact they slow development way down.&lt;/p>
&lt;p>The design surface itself, is not necessarily a bad concept. it is just a GUI over top of a XML document. Just don’t use it to generate repetitive code. If code is repetitive, factor it out until its DRY. Don’t break out the code generators.&lt;/p></description></item><item><title>ReturnOnException Aspect (postsharp)</title><link>https://adamgordonbell.com/posts/2011-07-05-return-on-execption.html/</link><pubDate>Tue, 05 Jul 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-07-05-return-on-execption.html/</guid><description>&lt;p>This comes in handy sometimes.&lt;/p></description></item><item><title>Attribute Based Caching Project Covered in infoQs</title><link>https://adamgordonbell.com/posts/2011-04-12-infoq.html/</link><pubDate>Tue, 12 Apr 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-04-12-infoq.html/</guid><description>&lt;p>David Cookery did a short write up of my AOP caching framework on infoQ. As a result downloads and usage have spiked.&lt;/p></description></item><item><title>Question':' Caching and postsharp is not working in my project?</title><link>https://adamgordonbell.com/posts/2011-04-10-aop-faq.html/</link><pubDate>Sun, 10 Apr 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-04-10-aop-faq.html/</guid><description>&lt;p>You have made a project using attribute based caching, but the cache isn’t being hit?&lt;/p></description></item><item><title>Incrementing</title><link>https://adamgordonbell.com/posts/2011-03-27-tags-tag-groups-tag-hierachies.html/</link><pubDate>Sun, 27 Mar 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-03-27-tags-tag-groups-tag-hierachies.html/</guid><description>&lt;p>&lt;em>Generic Hierarchical Meta data is cool! There are many ways to implement it with a standard relational database. Most of them are considered anti-patterns, but sometimes we need to optimize for flexibility, not raw database performance. Here are some of my notes on the subject:&lt;/em>&lt;/p></description></item><item><title>Attribute Based Caching 1.2 Released</title><link>https://adamgordonbell.com/posts/2011-01-29-aop-12-release.html/</link><pubDate>Sat, 29 Jan 2011 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2011-01-29-aop-12-release.html/</guid><description>&lt;p>Attribute Based Caching 1.2 has been Released. It’s still the .net only caching library that has declarative cache invalidation.&lt;/p>
&lt;p>Attribute Based Caching 1.1 had almost 100 downloads! Release 1.2 contains some small improvements like disk based cache and a time-to-live setting.&lt;/p>
&lt;h2 id="cache-12">Cache 1.2&lt;/h2></description></item><item><title>Enterprise Software Authorization / Security</title><link>https://adamgordonbell.com/posts/2010-12-05-enterprise-software-authorization.html/</link><pubDate>Sun, 05 Dec 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-12-05-enterprise-software-authorization.html/</guid><description>&lt;p>&lt;img src="http://media.tumblr.com/tumblr_lcz5n7fN1g1qdwslz.png" alt="lock">&lt;strong>Security Thoughts:&lt;/strong>&lt;/p>
&lt;p>There are generally three types of authorization in enterprise applications:&lt;/p>
&lt;ol>
&lt;li>&lt;span>&lt;span>&lt;/span>&lt;/span>&lt;strong>Role based security&lt;/strong> &lt;strong>-&lt;/strong> Which actions can a user do - aka role-based access control&lt;span>&lt;span>&lt;/span>&lt;/span>&lt;/li>
&lt;li>&lt;span>&lt;span>&lt;/span>&lt;/span>&lt;strong>Entity level security&lt;/strong> - A user can only perform an Action on certain objects/data - aka row level security&lt;/li>
&lt;li>&lt;strong>Field level security&lt;/strong> - A user can see or edit only certain fields of an entity – &lt;em>(this is really fine grained and usually a bad idea)&lt;/em>&lt;/li>
&lt;/ol></description></item><item><title>Parser Combinators in C#</title><link>https://adamgordonbell.com/posts/2010-11-20-parser-combinators-csharp.html/</link><pubDate>Sat, 20 Nov 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-11-20-parser-combinators-csharp.html/</guid><description>&lt;p>Haskell has parsec, f# has fparsec. I went searching for a good option for creating parsers in c#.&lt;/p></description></item><item><title>Project Euler #24 in c#</title><link>https://adamgordonbell.com/posts/2010-11-11-project-euler-24-in-c.html/</link><pubDate>Thu, 11 Nov 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-11-11-project-euler-24-in-c.html/</guid><description>&lt;p>A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:&lt;/p>
&lt;p>012   021   102   120   201   210&lt;/p>
&lt;p>What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?&lt;/p></description></item><item><title>Project Euler 8 in C#</title><link>https://adamgordonbell.com/posts/2010-11-10-project-euler-8.html/</link><pubDate>Wed, 10 Nov 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-11-10-project-euler-8.html/</guid><description>&lt;p>Discover the largest product of five consecutive digits in the 1000-digit number.&lt;/p>
&lt;p>&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=8">http://projecteuler.net/index.php?section=problems&amp;amp;id=8&lt;/a>&lt;/p></description></item><item><title>Introducing Attribute Based Caching</title><link>https://adamgordonbell.com/posts/2010-10-26-introducing-attribute-based-caching.html/</link><pubDate>Tue, 26 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-26-introducing-attribute-based-caching.html/</guid><description>&lt;blockquote>
&lt;p>“There are only two hard problems in computer science: cache invalidation, naming things, and off-by-one errors.”&lt;/p>&lt;/blockquote>
&lt;p>I am a big fan of postsharp and its creator Gael.  There are a number of examples floating around of doing &lt;a href="http://johnnycoder.com/blog/2009/01/16/caching-with-c-aop-and-postsharp/" title="caching">caching&lt;/a> with postsharp.  However, none handled cache invalidation in a nice declarative way.  &lt;/p></description></item><item><title>Project Euler 3 in c#</title><link>https://adamgordonbell.com/posts/2010-10-12-project-euler-3.html/</link><pubDate>Tue, 12 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-12-project-euler-3.html/</guid><description>&lt;blockquote>
&lt;p>Problem 3: What is the largest prime factor of the number 600851475143 ?&lt;/p>
&lt;p>&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=3" title="http://projecteuler.net/index.php?section=problems&amp;amp;id=3">http://projecteuler.net/index.php?section=problems&amp;amp;id=3&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>With enough extension methods we can make 3 really simple:&lt;/p>
&lt;blockquote>
&lt;p>600851475143.LargestPrimeFactor()&lt;/p>&lt;/blockquote>
&lt;p>Where:&lt;/p></description></item><item><title>Naked Objects MVC - exposing a repository method as a get</title><link>https://adamgordonbell.com/posts/2010-10-09-naked-objects-mvc.html/</link><pubDate>Sat, 09 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-09-naked-objects-mvc.html/</guid><description>&lt;p>If you would like to expose the results of an entity framework call as the index page or any other get based url using naked object mvc, a custom controller is required.&lt;/p></description></item><item><title>Project Euler #9</title><link>https://adamgordonbell.com/posts/2010-10-07-project-euler-9.html/</link><pubDate>Thu, 07 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-07-project-euler-9.html/</guid><description>&lt;p>Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.&lt;/p></description></item><item><title>Project Euler #5</title><link>https://adamgordonbell.com/posts/2010-10-06-project-euler-5.html/</link><pubDate>Wed, 06 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-06-project-euler-5.html/</guid><description>&lt;p>Here is my solution to the following project Euler Problem:&lt;/p>
&lt;p>2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.&lt;/p>
&lt;p>What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?&lt;/p></description></item><item><title>Project Euler #6</title><link>https://adamgordonbell.com/posts/2010-10-06-project-euler-6.html/</link><pubDate>Wed, 06 Oct 2010 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/posts/2010-10-06-project-euler-6.html/</guid><description>&lt;p>Ok, this one is stupidly simple:&lt;/p>
&lt;pre tabindex="0">&lt;code>var squaredsum = Math.Pow(1.To(100).Sum(), 2);
var sumedsquare = 1.To(100).Select(x =&amp;gt; x * x).Sum();
Console.WriteLine(squaredsum - sumedsquare);
&lt;/code>&lt;/pre></description></item><item><title>About</title><link>https://adamgordonbell.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/about/</guid><description>&lt;p>Adam Gordon Bell is a software engineer and Community Engineer at &lt;a href="https://www.pulumi.com/community/community-engineering/adam-gordon-bell/">Pulumi&lt;/a>, where he focuses on developer communication — writing, recording, and live demos that explain how infrastructure tools actually work.&lt;/p>
&lt;p>He hosts the &lt;a href="https://corecursive.com/">CoRecursive Podcast&lt;/a> — long-form interviews with the people behind well-known systems.&lt;/p>
&lt;p>Based in Peterborough, Canada. Working remotely since 2011. Say hello on &lt;a href="https://bsky.app/profile/adamgordonbell.com">Bluesky&lt;/a>.&lt;/p>
&lt;h2 id="longer-bio">Longer Bio&lt;/h2>
&lt;p>Adam Gordon Bell is a software engineer and Community Engineer at &lt;a href="https://www.pulumi.com/community/community-engineering/adam-gordon-bell/">Pulumi&lt;/a> (since November 2024), where he focuses on developer communication — writing, recording, and live demos that explain how infrastructure as code tools actually work.&lt;/p></description></item><item><title>Podcasts</title><link>https://adamgordonbell.com/podcasts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/podcasts/</guid><description/></item><item><title>Speaking</title><link>https://adamgordonbell.com/speaking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/speaking/</guid><description/></item><item><title>Timeline</title><link>https://adamgordonbell.com/timeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/timeline/</guid><description/></item><item><title>Videos</title><link>https://adamgordonbell.com/videos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/videos/</guid><description/></item><item><title>Writing</title><link>https://adamgordonbell.com/writing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://adamgordonbell.com/writing/</guid><description/></item></channel></rss>