Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://drpratten.newsblur.com/social/rss/126346/drpratten

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom"><title>Web Posts Recommended by David Pratten</title><link href="https://drpratten.newsblur.com/" rel="alternate"></link><link href="http://www.newsblur.com/social/rss/126346/drpratten" rel="self"></link><id>https://drpratten.newsblur.com/</id><updated>2023-10-31T11:03:11.729000Z</updated><author><name>drpratten</name></author><entry><title>Join me in celebrating 100 years of Vegemite!</title><link href="https://boingboing.net/2023/10/26/join-me-in-celebrating-100-years-of-vegemite.html" rel="alternate"></link><published>2023-10-31T11:03:11.729000Z</published><author><name>Jennifer Sandlin</name></author><id>https://boingboing.net/2023/10/26/join-me-in-celebrating-100-years-of-vegemite.html</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  3.    &lt;tr&gt;
  4.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  5.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  6.            &lt;b&gt;
  7.                drpratten
  8.                &lt;a href="https://drpratten.newsblur.com/story/join-me-in-celebrati/33590:c4419a"&gt;shared this story&lt;/a&gt;
  9.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/33590.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Boing Boing.&lt;/b&gt;
  10.        &lt;/td&gt;
  11.    &lt;/tr&gt;
  12.    
  13. &lt;/table&gt;
  14.  
  15. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  16.  
  17. &lt;a href="https://boingboing.net/2023/10/26/join-me-in-celebrating-100-years-of-vegemite.html" rel="nofollow" title="Join me in celebrating 100 years of Vegemite!"&gt;&lt;img alt="" class="webfeedsFeaturedVisual wp-post-image" height="1314" src="https://i0.wp.com/boingboing.net/wp-content/uploads/2023/05/Screen-Shot-2023-05-18-at-11.07.20-AM.png?fit=1450%2C1314&amp;amp;ssl=1" style="display: block; margin: auto; margin-bottom: 5px;" width="1450" /&gt;&lt;/a&gt;&lt;p&gt;Happy Birthday to Vegemite, a polarizing spread that just turned 100 years old. While many find the taste unsettling, the company sells over 20 million jars in Australia every year, so it's clearly got more fans than haters.&lt;/p&gt;
  18.  
  19.  
  20.  
  21. &lt;p&gt;The Guardian&amp;#160;&lt;a href="https://www.theguardian.com/australia-news/2023/oct/25/vegemite-100-years-anniversary-australia-national-treasure"&gt;explains&lt;/a&gt;:&lt;/p&gt;
  22.  
  23.  
  24.  
  25. &lt;blockquote class="wp-block-quote"&gt;
  26. &lt;p&gt;Jamie Callister, the grandson of Vegemite creator Cyril Callister, is one of the millions of Australians who starts the day with a slice of buttery toast licked with a thin swipe of our beloved national spread.&lt;/p&gt;&lt;/blockquote&gt; &amp;#8212; &lt;a class="read-more" href="https://boingboing.net/2023/10/26/join-me-in-celebrating-100-years-of-vegemite.html"&gt;Read the rest &lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;img src="https://boingboing.net/wp-content/uploads/2023/05/Screen-Shot-2023-05-18-at-11.07.20-AM.png" /&gt;</summary><category term="post"></category><category term="100 years old"></category><category term="australia"></category><category term="food"></category><category term="happy birthday"></category><category term="vegemite"></category></entry><entry><title>Big Data is Dead</title><link href="http://simonwillison.net/2023/Feb/7/big-data-is-dead/#atom-everything" rel="alternate"></link><published>2023-02-09T19:43:55.743000Z</published><author><name></name></author><id>http://simonwillison.net/2023/Feb/7/big-data-is-dead/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  27.    &lt;tr&gt;
  28.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  29.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  30.            &lt;b&gt;
  31.                drpratten
  32.                &lt;a href="https://drpratten.newsblur.com/story/big-data-is-dead/790:0d2b3e"&gt;shared this story&lt;/a&gt;
  33.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  34.        &lt;/td&gt;
  35.    &lt;/tr&gt;
  36.    
  37. &lt;/table&gt;
  38.  
  39. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  40.  
  41. &lt;p&gt;&lt;a href="https://motherduck.com/blog/big-data-is-dead/"&gt;Big Data is Dead&lt;/a&gt;&lt;/p&gt;
  42. &lt;p&gt;Don&amp;#x27;t be distracted by the headline, this is very worth your time. Jordan Tigani spent ten years working on Google BigQuery, during which time he was surprised to learn that the median data storage size for regular customers was much less than 100GB. In this piece he argues that genuine Big Data solutions are relevant to a tiny fraction of companies, and there&amp;#x27;s way more value in solving problems for everyone else. I&amp;#x27;ve been talking about Datasette as a tool for solving &amp;quot;small data&amp;quot; problems for a while, and this article has given me a whole bunch of new arguments I can use to support that concept.&lt;/p&gt;
  43.  
  44.    &lt;p&gt;Via &lt;a href="https://news.ycombinator.com/item?id=34694926"&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</summary><category term="bigdata"></category><category term="smalldata"></category></entry><entry><title>Making SQLite extensions pip install-able</title><link href="http://simonwillison.net/2023/Feb/6/making-sqlite-extensions-pip-install-able/#atom-everything" rel="alternate"></link><published>2023-02-06T20:04:04.636000Z</published><author><name></name></author><id>http://simonwillison.net/2023/Feb/6/making-sqlite-extensions-pip-install-able/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  45.    &lt;tr&gt;
  46.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  47.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  48.            &lt;b&gt;
  49.                drpratten
  50.                &lt;a href="https://drpratten.newsblur.com/story/making-sqlite-extens/790:1fbd1b"&gt;shared this story&lt;/a&gt;
  51.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  52.        &lt;/td&gt;
  53.    &lt;/tr&gt;
  54.    
  55. &lt;/table&gt;
  56.  
  57. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  58.  
  59. &lt;p&gt;&lt;a href="https://observablehq.com/@asg017/making-sqlite-extensions-pip-install-able"&gt;Making SQLite extensions pip install-able&lt;/a&gt;&lt;/p&gt;
  60. &lt;p&gt;Alex Garcia figured out how to bundle a compiled SQLite extension in a Python wheel (building different wheels for different platforms) and publish them to PyPI. This is a huge leap forward in terms of the usability of SQLite extensions, which have previously been pretty difficult to actually install and run. Alex also created Datasette plugins that depend on his packages, so you can now &amp;quot;datasette install datasette-sqlite-regex&amp;quot; (or datasette-sqlite-ulid, datasette-sqlite-fastrand, datasette-sqlite-jsonschema) to gain access to his custom SQLite extensions in your Datasette instance. It even works with &amp;quot;datasette publish --install&amp;quot; to deploy to Vercel, Fly.io and Cloud Run.&lt;/p&gt;
  61.  
  62.    &lt;p&gt;Via &lt;a href="https://discordapp.com/channels/823971286308356157/823971286941302908/1072220706366029864"&gt;Datasette Discord&lt;/a&gt;&lt;/p&gt;</summary><category term="sqlite"></category><category term="plugins"></category><category term="datasette"></category><category term="python"></category><category term="pip"></category><category term="alexgarcia"></category></entry><entry><title>Quoting Justin Etheredge</title><link href="http://simonwillison.net/2023/Jan/19/justin-etheredge/#atom-everything" rel="alternate"></link><published>2023-01-19T19:42:26.150000Z</published><author><name></name></author><id>http://simonwillison.net/2023/Jan/19/justin-etheredge/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  63.    &lt;tr&gt;
  64.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  65.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  66.            &lt;b&gt;
  67.                drpratten
  68.                &lt;a href="https://drpratten.newsblur.com/story/quoting-justin-ether/790:74b775"&gt;shared this story&lt;/a&gt;
  69.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  70.        &lt;/td&gt;
  71.    &lt;/tr&gt;
  72.    
  73. &lt;/table&gt;
  74.  
  75. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  76.  
  77. &lt;blockquote cite="https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/"&gt;&lt;p&gt;Old technologies that have stuck around are sharks, not dinosaurs. They solve problems so well that they have survived the rapid changes that occur constantly in the technology world. Don’t bet against these technologies, and replace them only if you have a very good reason. These tools won’t be flashy, and they won’t be exciting, but they will get the job done without a lot of sleepless nights.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/"&gt;Justin Etheredge&lt;/a&gt;</summary><category term="softwareengineering"></category></entry><entry><title>Scrolly video JavaScript library</title><link href="https://flowingdata.com/2023/01/18/scrolly-video-javascript-library/" rel="alternate"></link><published>2023-01-19T01:19:19.066000Z</published><author><name>Nathan Yau</name></author><id>https://flowingdata.com/2023/01/18/scrolly-video-javascript-library/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  78.    &lt;tr&gt;
  79.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  80.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  81.            &lt;b&gt;
  82.                drpratten
  83.                &lt;a href="https://drpratten.newsblur.com/story/scrolly-video-javasc/146:da748b"&gt;shared this story&lt;/a&gt;
  84.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/146.png" style="vertical-align: middle;width:16px;height:16px;"&gt; FlowingData.&lt;/b&gt;
  85.        &lt;/td&gt;
  86.    &lt;/tr&gt;
  87.    
  88. &lt;/table&gt;
  89.  
  90. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  91.  
  92. &lt;p&gt;&lt;a href="https://flowingdata.com/2023/01/18/scrolly-video-javascript-library/"&gt;&lt;img alt="" class="attachment-medium size-medium wp-post-image" height="490" src="https://flowingdata.com/wp-content/uploads/2023/01/scrollyvideo-750x490.png" width="750" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://scrollyvideo.js.org"&gt;ScrollyVideo.js is a JavaScript library&lt;/a&gt; that makes it easier to incorporate videos in a scrollytelling layout. The examples look really straightforward, which means I&amp;#8217;m saving this for later.&lt;/p&gt;
  93. &lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="https://flowingdata.com/tag/javascript/" rel="tag"&gt;JavaScript&lt;/a&gt;, &lt;a href="https://flowingdata.com/tag/scrollytelling/" rel="tag"&gt;scrollytelling&lt;/a&gt;, &lt;a href="https://flowingdata.com/tag/video/" rel="tag"&gt;video&lt;/a&gt;&lt;/p&gt;</summary><category term="coding"></category><category term="javascript"></category><category term="scrollytelling"></category><category term="video"></category></entry><entry><title>Version 2.0.0 release candidate</title><link href="https://nim-lang.org//blog/2022/12/21/version-20-rc.html" rel="alternate"></link><published>2023-01-04T10:24:13.662000Z</published><author><name></name></author><id>https://nim-lang.org//blog/2022/12/21/version-20-rc.html</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  94.    &lt;tr&gt;
  95.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  96.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  97.            &lt;b&gt;
  98.                drpratten
  99.                &lt;a href="https://drpratten.newsblur.com/story/version-200-release-/5416386:1cf087"&gt;shared this story&lt;/a&gt;
  100.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/5416386.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Nim Programming Language.&lt;/b&gt;
  101.        &lt;/td&gt;
  102.    &lt;/tr&gt;
  103.    
  104. &lt;/table&gt;
  105.  
  106. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  107.  
  108. &lt;p&gt;The first release candidate for Nim version 2.0 is ready for testing.&lt;/p&gt;
  109.  
  110. &lt;p&gt;Three years after Nim version 1.0, and one year since the latest minor release (Nim 1.6), we are proud to announce Nim v2.0 RC1.&lt;/p&gt;
  111.  
  112. &lt;p&gt;With more than 200 fixed bugs and 1000 commits, version 2.0 brings lots of improvements over Nim 1.6.&lt;/p&gt;
  113.  
  114. &lt;p&gt;Don’t panic! One of our design goals was to make it easy to write code that works with Nim version 1 and 2. Many
  115. important packages already work with version 2 and as usual many innovations are behind switches that can be enabled
  116. or disabled on a per module level thanks to the &lt;code class="highlighter-rouge"&gt;.experimental&lt;/code&gt; pragma.&lt;/p&gt;
  117.  
  118. &lt;p&gt;Version 2 is based on the same codebase as version 1, it’s an evolution, not a revolution.&lt;/p&gt;
  119.  
  120. &lt;h2 id="why-use-nim"&gt;Why use Nim?&lt;/h2&gt;
  121.  
  122. &lt;p&gt;If you are regular Nim user, you already know Nim’s features.
  123. On the other hand, if you waited until version 2.0 to explore Nim, here are some of its key strengths:&lt;/p&gt;
  124.  
  125. &lt;ul&gt;
  126.  &lt;li&gt;One language to rule them all: from &lt;a href="https://nim-lang.org/docs/nims.html"&gt;shell scripting&lt;/a&gt; to
  127. &lt;a href="https://github.com/nim-lang/nimforum"&gt;web frontend and backend&lt;/a&gt;,
  128. &lt;a href="https://github.com/SciNim"&gt;scientific computing&lt;/a&gt;,
  129. &lt;a href="https://github.com/mratsim/Arraymancer"&gt;deep learning&lt;/a&gt;,
  130. &lt;a href="https://github.com/status-im"&gt;blockchain client&lt;/a&gt;,
  131. &lt;a href="https://github.com/ftsf/nico"&gt;gamedev&lt;/a&gt;,
  132. &lt;a href="https://github.com/EmbeddedNim"&gt;embedded&lt;/a&gt;, see also some
  133. &lt;a href="https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim"&gt;companies using Nim&lt;/a&gt;.&lt;/li&gt;
  134.  &lt;li&gt;Concise, readable and convenient: &lt;code class="highlighter-rouge"&gt;echo "hello world"&lt;/code&gt; is a 1-liner.&lt;/li&gt;
  135.  &lt;li&gt;Small binaries: &lt;code class="highlighter-rouge"&gt;echo "hello world"&lt;/code&gt; generates a 73K binary (or 5K with further options),
  136. optimized for embedded devices (Go: 2MB, Rust: 377K, C++: 56K) [1].&lt;/li&gt;
  137.  &lt;li&gt;Fast compile times: a full compiler rebuild takes ~12s (Rust: 15min, gcc: 30min+, clang: 1hr+, Go: 90s) [2].&lt;/li&gt;
  138.  &lt;li&gt;Native performance: see &lt;a href="https://web-frameworks-benchmark.netlify.app/result"&gt;Web Frameworks Benchmark&lt;/a&gt;,
  139. &lt;a href="https://nim-lang.org/blog/2020/06/30/ray-tracing-in-nim.html"&gt;ray tracing&lt;/a&gt;,
  140. &lt;a href="https://github.com/PlummersSoftwareLLC/Primes"&gt;primes&lt;/a&gt;.&lt;/li&gt;
  141.  &lt;li&gt;No need for makefiles, cmake, configure or other build scripts, thanks to compile-time
  142. function evaluation (CTFE) and dependency tracking [3].&lt;/li&gt;
  143.  &lt;li&gt;Target any platform with a C compiler:
  144. &lt;a href="https://github.com/pragmagic/godot-nim#made-with-godot-nim"&gt;Android and iOS&lt;/a&gt;,
  145. &lt;a href="https://github.com/elcritch/nesper"&gt;embedded systems&lt;/a&gt;,
  146. &lt;a href="https://forum.nim-lang.org/t/7731"&gt;micro-controllers&lt;/a&gt;,
  147. &lt;a href="https://forum.nim-lang.org/t/4779"&gt;WASM&lt;/a&gt;, Nintendo Switch,
  148. &lt;a href="https://forum.nim-lang.org/t/8375"&gt;Game Boy Advance&lt;/a&gt;.&lt;/li&gt;
  149.  &lt;li&gt;Zero-overhead interop lets you reuse code in C, C++ (including templates,
  150. &lt;a href="https://clonkk.github.io/nim-cppstl/cppstl.html"&gt;C++ STL&lt;/a&gt;), JS, Objective-C,
  151. Python (via &lt;a href="https://github.com/yglukhov/nimpy"&gt;nimpy&lt;/a&gt;).&lt;/li&gt;
  152.  &lt;li&gt;Built-in &lt;a href="https://nim-lang.github.io/Nim/system.html"&gt;documentation generator&lt;/a&gt;
  153. that understands Nim code and runnable examples that stay in sync.&lt;/li&gt;
  154. &lt;/ul&gt;
  155.  
  156. &lt;p&gt;Last but not least, macros let you manipulate/generate code at compile time instead
  157. of relying on code generators, enabling writing DSLs and language extensions in user code.
  158. Typical examples include implementing Python-like
  159. &lt;a href="https://nim-lang.github.io/Nim/strformat.html"&gt;f-strings&lt;/a&gt;,
  160. &lt;a href="https://nim-lang.github.io/Nim/wrapnils.html"&gt;optional chaining&lt;/a&gt;,
  161. &lt;a href="https://github.com/c-blake/cligen"&gt;command line generators&lt;/a&gt;,
  162. React-like &lt;a href="https://github.com/karaxnim/karax"&gt;Single Page Apps&lt;/a&gt;,
  163. &lt;a href="https://github.com/PMunch/protobuf-nim"&gt;protobuf serialization and binding generators&lt;/a&gt;.&lt;/p&gt;
  164.  
  165. &lt;h1 id="installing-nim-20"&gt;Installing Nim 2.0&lt;/h1&gt;
  166.  
  167. &lt;h2 id="building-from-source"&gt;Building from source&lt;/h2&gt;
  168.  
  169. &lt;div class="language-bash highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;git clone https://github.com/nim-lang/Nim
  170. &lt;span class="nb"&gt;cd &lt;/span&gt;Nim
  171. git checkout version-2-0
  172. sh build_all.sh
  173. &lt;/code&gt;&lt;/pre&gt;
  174. &lt;/div&gt;
  175. &lt;p&gt;The last command can be re-run after pulling new commits.&lt;/p&gt;
  176.  
  177. &lt;h2 id="using-nightlies-build"&gt;Using nightlies build&lt;/h2&gt;
  178.  
  179. &lt;p&gt;Download a &lt;a href="https://github.com/nim-lang/nightlies/releases/tag/2022-12-22-version-2-0-81d8ea95af0cfaaedca2fd1881199e113e6f5b41"&gt;nightly build&lt;/a&gt;.&lt;/p&gt;
  180.  
  181. &lt;h1 id="contributors-to-nim-20"&gt;Contributors to Nim 2.0&lt;/h1&gt;
  182.  
  183. &lt;p&gt;Many thanks to our recurring and new
  184. &lt;a href="https://github.com/nim-lang/Nim/graphs/contributors?from=2021-09-25&amp;amp;to=2022-12-19&amp;amp;type=c"&gt;contributors&lt;/a&gt;.
  185. Nim is a community driven collaborative effort that welcomes all contributions, big or small.&lt;/p&gt;
  186.  
  187. &lt;h1 id="backward-compatibility"&gt;Backward compatibility&lt;/h1&gt;
  188.  
  189. &lt;ul&gt;
  190.  &lt;li&gt;
  191.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;httpclient.contentLength&lt;/code&gt; default to &lt;code class="highlighter-rouge"&gt;-1&lt;/code&gt; if the Content-Length header is not set in the response. It follows Apache HttpClient(Java), http(go) and .Net HttpWebResponse(C#) behavior. Previously it raised &lt;code class="highlighter-rouge"&gt;ValueError&lt;/code&gt;.&lt;/p&gt;
  192.  &lt;/li&gt;
  193.  &lt;li&gt;
  194.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;addr&lt;/code&gt; is now available for all addressable locations,
  195. &lt;code class="highlighter-rouge"&gt;unsafeAddr&lt;/code&gt; is now deprecated and an alias for &lt;code class="highlighter-rouge"&gt;addr&lt;/code&gt;.&lt;/p&gt;
  196.  &lt;/li&gt;
  197.  &lt;li&gt;
  198.    &lt;p&gt;Certain definitions from the default &lt;code class="highlighter-rouge"&gt;system&lt;/code&gt; module have been moved to
  199. the following new modules:&lt;/p&gt;
  200.  
  201.    &lt;ul&gt;
  202.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/syncio&lt;/code&gt;&lt;/li&gt;
  203.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/assertions&lt;/code&gt;&lt;/li&gt;
  204.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/formatfloat&lt;/code&gt;&lt;/li&gt;
  205.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/objectdollar&lt;/code&gt;&lt;/li&gt;
  206.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/widestrs&lt;/code&gt;&lt;/li&gt;
  207.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/typedthreads&lt;/code&gt;&lt;/li&gt;
  208.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/sysatomics&lt;/code&gt;&lt;/li&gt;
  209.    &lt;/ul&gt;
  210.  
  211.    &lt;p&gt;In the future, these definitions will be removed from the &lt;code class="highlighter-rouge"&gt;system&lt;/code&gt; module,
  212. and their respective modules will have to be imported to use them.
  213. Currently, to make these imports required, the &lt;code class="highlighter-rouge"&gt;-d:nimPreviewSlimSystem&lt;/code&gt; option
  214. may be used.&lt;/p&gt;
  215.  &lt;/li&gt;
  216.  &lt;li&gt;Enabling &lt;code class="highlighter-rouge"&gt;-d:nimPreviewSlimSystem&lt;/code&gt; also removes the following deprecated
  217. symbols in the &lt;code class="highlighter-rouge"&gt;system&lt;/code&gt; module:
  218.    &lt;ul&gt;
  219.      &lt;li&gt;Aliases with &lt;code class="highlighter-rouge"&gt;Error&lt;/code&gt; suffix to exception types that have a &lt;code class="highlighter-rouge"&gt;Defect&lt;/code&gt; suffix
  220. (see &lt;a href="https://nim-lang.org/docs/exceptions.html"&gt;exceptions&lt;/a&gt;):
  221. &lt;code class="highlighter-rouge"&gt;ArithmeticError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;DivByZeroError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;OverflowError&lt;/code&gt;,
  222. &lt;code class="highlighter-rouge"&gt;AccessViolationError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;AssertionError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;OutOfMemError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;IndexError&lt;/code&gt;,
  223. &lt;code class="highlighter-rouge"&gt;FieldError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;RangeError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;StackOverflowError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ReraiseError&lt;/code&gt;,
  224. &lt;code class="highlighter-rouge"&gt;ObjectAssignmentError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ObjectConversionError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;FloatingPointError&lt;/code&gt;,
  225. &lt;code class="highlighter-rouge"&gt;FloatOverflowError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;FloatUnderflowError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;FloatInexactError&lt;/code&gt;,
  226. &lt;code class="highlighter-rouge"&gt;DeadThreadError&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;NilAccessError&lt;/code&gt;&lt;/li&gt;
  227.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;addQuitProc&lt;/code&gt;, replaced by &lt;code class="highlighter-rouge"&gt;exitprocs.addExitProc&lt;/code&gt;&lt;/li&gt;
  228.      &lt;li&gt;Legacy unsigned conversion operations: &lt;code class="highlighter-rouge"&gt;ze&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ze64&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;toU8&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;toU16&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;toU32&lt;/code&gt;&lt;/li&gt;
  229.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;TaintedString&lt;/code&gt;, formerly a distinct alias to &lt;code class="highlighter-rouge"&gt;string&lt;/code&gt;&lt;/li&gt;
  230.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;PInt32&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;PInt64&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;PFloat32&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;PFloat64&lt;/code&gt;, aliases to
  231. &lt;code class="highlighter-rouge"&gt;ptr int32&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ptr int64&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ptr float32&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ptr float64&lt;/code&gt;&lt;/li&gt;
  232.    &lt;/ul&gt;
  233.  &lt;/li&gt;
  234.  &lt;li&gt;
  235.    &lt;p&gt;Enabling &lt;code class="highlighter-rouge"&gt;-d:nimPreviewSlimSystem&lt;/code&gt; removes the import of &lt;code class="highlighter-rouge"&gt;channels_builtin&lt;/code&gt; in
  236. in the &lt;code class="highlighter-rouge"&gt;system&lt;/code&gt; module.&lt;/p&gt;
  237.  &lt;/li&gt;
  238.  &lt;li&gt;
  239.    &lt;p&gt;Enabling &lt;code class="highlighter-rouge"&gt;-d:nimPreviewCstringConversion&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ptr char&lt;/code&gt;, &lt;code class="highlighter-rouge"&gt;ptr array[N, char]&lt;/code&gt; and &lt;code class="highlighter-rouge"&gt;ptr UncheckedArray[N, char]&lt;/code&gt; don’t support conversion to cstring anymore.&lt;/p&gt;
  240.  &lt;/li&gt;
  241.  &lt;li&gt;
  242.    &lt;p&gt;The &lt;code class="highlighter-rouge"&gt;gc:v2&lt;/code&gt; option is removed.&lt;/p&gt;
  243.  &lt;/li&gt;
  244.  &lt;li&gt;
  245.    &lt;p&gt;The &lt;code class="highlighter-rouge"&gt;mainmodule&lt;/code&gt; and &lt;code class="highlighter-rouge"&gt;m&lt;/code&gt; options are removed.&lt;/p&gt;
  246.  &lt;/li&gt;
  247.  &lt;li&gt;
  248.    &lt;p&gt;The &lt;code class="highlighter-rouge"&gt;threads:on&lt;/code&gt; option is now the default.&lt;/p&gt;
  249.  &lt;/li&gt;
  250.  &lt;li&gt;
  251.    &lt;p&gt;Optional parameters in combination with &lt;code class="highlighter-rouge"&gt;: body&lt;/code&gt; syntax (RFC #405) are now opt-in via
  252. &lt;code class="highlighter-rouge"&gt;experimental:flexibleOptionalParams&lt;/code&gt;.&lt;/p&gt;
  253.  &lt;/li&gt;
  254.  &lt;li&gt;
  255.    &lt;p&gt;Automatic dereferencing (experimental feature) is removed.&lt;/p&gt;
  256.  &lt;/li&gt;
  257.  &lt;li&gt;
  258.    &lt;p&gt;The &lt;code class="highlighter-rouge"&gt;Math.trunc&lt;/code&gt; polyfill for targeting Internet Explorer was
  259. previously included in most JavaScript output files.
  260. Now, it is only included with &lt;code class="highlighter-rouge"&gt;-d:nimJsMathTruncPolyfill&lt;/code&gt;.
  261. If you are targeting Internet Explorer, you may choose to enable this option
  262. or define your own &lt;code class="highlighter-rouge"&gt;Math.trunc&lt;/code&gt; polyfill using the &lt;a href="https://nim-lang.org/docs/manual.html#implementation-specific-pragmas-emit-pragma"&gt;&lt;code class="highlighter-rouge"&gt;emit&lt;/code&gt; pragma&lt;/a&gt;.
  263. Nim uses &lt;code class="highlighter-rouge"&gt;Math.trunc&lt;/code&gt; for the division and modulo operators for integers.&lt;/p&gt;
  264.  &lt;/li&gt;
  265.  &lt;li&gt;
  266.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;shallowCopy&lt;/code&gt; and &lt;code class="highlighter-rouge"&gt;shallow&lt;/code&gt; are removed for ARC/ORC. Use &lt;code class="highlighter-rouge"&gt;move&lt;/code&gt; when possible or combine assignment and
  267. &lt;code class="highlighter-rouge"&gt;sink&lt;/code&gt; for optimization purposes.&lt;/p&gt;
  268.  &lt;/li&gt;
  269.  &lt;li&gt;
  270.    &lt;p&gt;The experimental &lt;code class="highlighter-rouge"&gt;nimPreviewDotLikeOps&lt;/code&gt; switch is going to be removed or deprecated because it didn’t fullfill its promises.&lt;/p&gt;
  271.  &lt;/li&gt;
  272.  &lt;li&gt;The &lt;code class="highlighter-rouge"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;.this.&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt; pragma, deprecated since 0.19, has been removed.&lt;/li&gt;
  273.  &lt;li&gt;&lt;code class="highlighter-rouge"&gt;nil&lt;/code&gt; literals can no longer be directly assigned to variables or fields of &lt;code class="highlighter-rouge"&gt;distinct&lt;/code&gt; pointer types. They must be converted instead.
  274.    &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;distinct&lt;/span&gt; &lt;span class="k"&gt;ptr&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;
  275.  
  276. &lt;span class="c"&gt;# Before:&lt;/span&gt;
  277. &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nil&lt;/span&gt;
  278. &lt;span class="c"&gt;# After:&lt;/span&gt;
  279. &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  280. &lt;/code&gt;&lt;/pre&gt;
  281.    &lt;/div&gt;
  282.  &lt;/li&gt;
  283.  &lt;li&gt;
  284.    &lt;p&gt;Removed two type pragma syntaxes deprecated since 0.20, namely
  285. &lt;code class="highlighter-rouge"&gt;type Foo = object {.final.}&lt;/code&gt;, and &lt;code class="highlighter-rouge"&gt;type Foo {.final.} [T] = object&lt;/code&gt;.&lt;/p&gt;
  286.  &lt;/li&gt;
  287.  &lt;li&gt;
  288.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;foo a = b&lt;/code&gt; now means &lt;code class="highlighter-rouge"&gt;foo(a = b)&lt;/code&gt; rather than &lt;code class="highlighter-rouge"&gt;foo(a) = b&lt;/code&gt;. This is consistent
  289. with the existing behavior of &lt;code class="highlighter-rouge"&gt;foo a, b = c&lt;/code&gt; meaning &lt;code class="highlighter-rouge"&gt;foo(a, b = c)&lt;/code&gt;.
  290. This decision was made with the assumption that the old syntax was used rarely;
  291. if your code used the old syntax, please be aware of this change.&lt;/p&gt;
  292.  &lt;/li&gt;
  293.  &lt;li&gt;
  294.    &lt;p&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#overloadable-enum-value-names"&gt;Overloadable enums&lt;/a&gt; and Unicode Operators
  295. are no longer experimental.&lt;/p&gt;
  296.  &lt;/li&gt;
  297.  &lt;li&gt;
  298.    &lt;p&gt;Removed the &lt;code class="highlighter-rouge"&gt;nimIncrSeqV3&lt;/code&gt; define.&lt;/p&gt;
  299.  &lt;/li&gt;
  300.  &lt;li&gt;
  301.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;macros.getImpl&lt;/code&gt; for &lt;code class="highlighter-rouge"&gt;const&lt;/code&gt; symbols now returns the full definition node
  302. (as &lt;code class="highlighter-rouge"&gt;nnkConstDef&lt;/code&gt;) rather than the AST of the constant value.&lt;/p&gt;
  303.  &lt;/li&gt;
  304.  &lt;li&gt;
  305.    &lt;p&gt;Lock levels are deprecated, now a noop.&lt;/p&gt;
  306.  &lt;/li&gt;
  307.  &lt;li&gt;
  308.    &lt;p&gt;ORC is now the default memory management strategy. Use
  309. &lt;code class="highlighter-rouge"&gt;--mm:refc&lt;/code&gt; for a transition period.&lt;/p&gt;
  310.  &lt;/li&gt;
  311.  &lt;li&gt;
  312.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;strictEffects&lt;/code&gt; are no longer experimental.
  313. Use &lt;code class="highlighter-rouge"&gt;legacy:laxEffects&lt;/code&gt; to keep backward compatibility.&lt;/p&gt;
  314.  &lt;/li&gt;
  315.  &lt;li&gt;
  316.    &lt;p&gt;The &lt;code class="highlighter-rouge"&gt;gorge&lt;/code&gt;/&lt;code class="highlighter-rouge"&gt;staticExec&lt;/code&gt; calls will now return a descriptive message in the output
  317. if the execution fails for whatever reason. To get back legacy behaviour use &lt;code class="highlighter-rouge"&gt;-d:nimLegacyGorgeErrors&lt;/code&gt;.&lt;/p&gt;
  318.  &lt;/li&gt;
  319.  &lt;li&gt;
  320.    &lt;p&gt;Pointer to &lt;code class="highlighter-rouge"&gt;cstring&lt;/code&gt; conversion now triggers a &lt;code class="highlighter-rouge"&gt;[PtrToCstringConv]&lt;/code&gt; warning.
  321. This warning will become an error in future versions! Use a &lt;code class="highlighter-rouge"&gt;cast&lt;/code&gt; operation
  322. like &lt;code class="highlighter-rouge"&gt;cast[cstring](x)&lt;/code&gt; instead.&lt;/p&gt;
  323.  &lt;/li&gt;
  324.  &lt;li&gt;
  325.    &lt;p&gt;&lt;code class="highlighter-rouge"&gt;logging&lt;/code&gt; will default to flushing all log level messages. To get the legacy behaviour of only flushing Error and Fatal messages, use &lt;code class="highlighter-rouge"&gt;-d:nimV1LogFlushBehavior&lt;/code&gt;.&lt;/p&gt;
  326.  &lt;/li&gt;
  327.  &lt;li&gt;
  328.    &lt;p&gt;Redefining templates with the same signature was previously
  329. allowed to support certain macro code. To do this explicitly, the
  330. &lt;code class="highlighter-rouge"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;.redefine.&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt; pragma has been added. Note that this is only for templates.
  331. Implicit redefinition of templates is now deprecated and will give an error in the future.&lt;/p&gt;
  332.  &lt;/li&gt;
  333.  &lt;li&gt;
  334.    &lt;p&gt;Using an unnamed break in a block is deprecated. This warning will become an error in future versions! Use a named block with a named break instead.&lt;/p&gt;
  335.  &lt;/li&gt;
  336.  &lt;li&gt;Several Standard libraries are moved to nimble packages, use &lt;code class="highlighter-rouge"&gt;nimble&lt;/code&gt; to install them:
  337.    &lt;ul&gt;
  338.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/punycode&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;punycode&lt;/code&gt;&lt;/li&gt;
  339.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/asyncftpclient&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;asyncftpclient&lt;/code&gt;&lt;/li&gt;
  340.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/smtp&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;smtp&lt;/code&gt;&lt;/li&gt;
  341.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/db_common&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;db_connector/db_common&lt;/code&gt;&lt;/li&gt;
  342.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/db_sqlite&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;db_connector/db_sqlite&lt;/code&gt;&lt;/li&gt;
  343.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/db_mysql&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;db_connector/db_mysql&lt;/code&gt;&lt;/li&gt;
  344.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/db_postgres&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;db_connector/db_postgres&lt;/code&gt;&lt;/li&gt;
  345.      &lt;li&gt;&lt;code class="highlighter-rouge"&gt;std/db_odbc&lt;/code&gt; =&amp;gt; &lt;code class="highlighter-rouge"&gt;db_connector/db_odbc&lt;/code&gt;&lt;/li&gt;
  346.    &lt;/ul&gt;
  347.  &lt;/li&gt;
  348.  &lt;li&gt;Previously, calls like &lt;code class="highlighter-rouge"&gt;foo(a, b): ...&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;foo(a, b) do: ...&lt;/code&gt; where the final argument of
  349. &lt;code class="highlighter-rouge"&gt;foo&lt;/code&gt; had type &lt;code class="highlighter-rouge"&gt;proc ()&lt;/code&gt; were assumed by the compiler to mean &lt;code class="highlighter-rouge"&gt;foo(a, b, proc () = ...)&lt;/code&gt;.
  350. This behavior is now deprecated. Use &lt;code class="highlighter-rouge"&gt;foo(a, b) do (): ...&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;foo(a, b, proc () = ...)&lt;/code&gt; instead.&lt;/li&gt;
  351. &lt;/ul&gt;
  352.  
  353. &lt;h1 id="major-new-features"&gt;Major new features&lt;/h1&gt;
  354.  
  355. &lt;p&gt;Version 2.0 is a major new release with many additions and changes. We focus here on the most important
  356. aspects:&lt;/p&gt;
  357.  
  358. &lt;h2 id="orc-is-the-new-default"&gt;ORC is the new default&lt;/h2&gt;
  359.  
  360. &lt;p&gt;&lt;code class="highlighter-rouge"&gt;--mm:orc&lt;/code&gt; is now the default memory management strategy. It has been described multiple times now see, for example &lt;a href="https://nim-lang.org/blog/2022/11/11/a-cost-model-for-nim.html"&gt;here&lt;/a&gt;
  361. or &lt;a href="https://nim-lang.org/blog/2020/10/15/introduction-to-arc-orc-in-nim.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
  362.  
  363. &lt;h2 id="overloadable-enums"&gt;Overloadable enums&lt;/h2&gt;
  364.  
  365. &lt;p&gt;&lt;a href="https://nim-lang.github.io/Nim/manual.html#overloadable-enum-value-names"&gt;Overloadable enums&lt;/a&gt; are no longer experimental.&lt;/p&gt;
  366.  
  367. &lt;p&gt;For example:&lt;/p&gt;
  368.  
  369. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  370.  &lt;span class="k"&gt;type&lt;/span&gt;
  371.    &lt;span class="n"&gt;E1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt;
  372.      &lt;span class="n"&gt;value1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value2&lt;/span&gt;
  373.    &lt;span class="n"&gt;E2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt;
  374.      &lt;span class="n"&gt;value1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
  375.  
  376.  &lt;span class="k"&gt;const&lt;/span&gt;
  377.    &lt;span class="n"&gt;Lookuptable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
  378.      &lt;span class="n"&gt;E1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  379.      &lt;span class="n"&gt;value2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"2"&lt;/span&gt;
  380.    &lt;span class="o"&gt;]&lt;/span&gt;
  381.  
  382. &lt;/code&gt;&lt;/pre&gt;
  383. &lt;/div&gt;
  384.  
  385. &lt;p&gt;The types &lt;code class="highlighter-rouge"&gt;E1&lt;/code&gt; and &lt;code class="highlighter-rouge"&gt;E2&lt;/code&gt; share the names &lt;code class="highlighter-rouge"&gt;value1&lt;/code&gt; and &lt;code class="highlighter-rouge"&gt;value2&lt;/code&gt;. These are overloaded and the usual overload disambiguation
  386. is used so that the &lt;code class="highlighter-rouge"&gt;E1&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;E2&lt;/code&gt; prefixes can be left out in many cases. These features are most beneficial for independently developed libraries.&lt;/p&gt;
  387.  
  388. &lt;h2 id="strict-funcs"&gt;Strict funcs&lt;/h2&gt;
  389.  
  390. &lt;p&gt;The definition of “strict funcs” changed and is now considered to be stable enough to become the default in
  391. later versions.&lt;/p&gt;
  392.  
  393. &lt;h2 id="default-values-for-objects"&gt;Default values for objects&lt;/h2&gt;
  394.  
  395. &lt;p&gt;Inside an object declaration, fields can now have default values:&lt;/p&gt;
  396.  
  397. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  398.  &lt;span class="k"&gt;type&lt;/span&gt;
  399.    &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
  400.      &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  401.      &lt;span class="n"&gt;den&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  402.  
  403.  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  404.  &lt;span class="n"&gt;assert&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"(num: 0, den: 1)"&lt;/span&gt;
  405.  
  406. &lt;/code&gt;&lt;/pre&gt;
  407. &lt;/div&gt;
  408.  
  409. &lt;p&gt;These default values are used when the field is not initialized explicitly. See also &lt;a href="https://nim-lang.github.io/Nim/manual.html#types-default-values-for-object-fields"&gt;default values for object fields&lt;/a&gt; for details.&lt;/p&gt;
  410.  
  411. &lt;h2 id="definite-assignment-analysis"&gt;Definite assignment analysis&lt;/h2&gt;
  412.  
  413. &lt;p&gt;We found Nim’s default initialization rule to be one major source of bugs. There is a new
  414. experimental switch called &lt;code class="highlighter-rouge"&gt;strictDefs&lt;/code&gt; that protects against these bugs. When enabled,
  415. it is enforced that a variable has been given a value explicitly before the variable can
  416. be used:&lt;/p&gt;
  417.  
  418. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  419.  &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;experimental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"strictDefs"&lt;/span&gt;&lt;span class="p"&gt;.}&lt;/span&gt;
  420.  
  421.  &lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  422.    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;
  423.    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="c"&gt;# Warning: use explicit initialization of 'r' for clarity [Uninit]&lt;/span&gt;
  424.  
  425.  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  426.  
  427. &lt;/code&gt;&lt;/pre&gt;
  428. &lt;/div&gt;
  429.  
  430. &lt;p&gt;To turn the warning into an error, use &lt;code class="highlighter-rouge"&gt;--warningAsError:Uninit:on&lt;/code&gt; on the command line.&lt;/p&gt;
  431.  
  432. &lt;p&gt;The analysis understands basic control flow so the following works because every
  433. possible code path assigns a value to &lt;code class="highlighter-rouge"&gt;r&lt;/code&gt; before it is used:&lt;/p&gt;
  434.  
  435. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  436.  
  437.  &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;experimental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"strictDefs"&lt;/span&gt;&lt;span class="p"&gt;.}&lt;/span&gt;
  438.  
  439.  &lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  440.    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;
  441.    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  442.      &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;den&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  443.    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  444.      &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  445.    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;
  446.  
  447.  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  448.  
  449. &lt;/code&gt;&lt;/pre&gt;
  450. &lt;/div&gt;
  451.  
  452. &lt;p&gt;Even better, this feature works with &lt;code class="highlighter-rouge"&gt;let&lt;/code&gt; variables too:&lt;/p&gt;
  453.  
  454. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  455.  &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;experimental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"strictDefs"&lt;/span&gt;&lt;span class="p"&gt;.}&lt;/span&gt;
  456.  
  457.  &lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  458.    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;
  459.    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  460.      &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;den&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  461.    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  462.      &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rational&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  463.    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;
  464.  
  465.  &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  466.  
  467. &lt;/code&gt;&lt;/pre&gt;
  468. &lt;/div&gt;
  469.  
  470. &lt;p&gt;It is checked that every &lt;code class="highlighter-rouge"&gt;let&lt;/code&gt; variable is assigned a value exactly once.&lt;/p&gt;
  471.  
  472. &lt;h2 id="out-parameters"&gt;Out parameters&lt;/h2&gt;
  473.  
  474. &lt;p&gt;In order to make &lt;code class="highlighter-rouge"&gt;experimental:strictDefs&lt;/code&gt; more effective &lt;code class="highlighter-rouge"&gt;out&lt;/code&gt; parameters have been
  475. added to Nim. For more information consult the manual about &lt;a href="https://nim-lang.github.io/Nim/manual_experimental.html#strict-definitions-and-nimout-parameters-nimout-parameters"&gt;experimental features&lt;/a&gt;.&lt;/p&gt;
  476.  
  477. &lt;h2 id="strict-effects"&gt;Strict effects&lt;/h2&gt;
  478.  
  479. &lt;p&gt;&lt;code class="highlighter-rouge"&gt;--experimental:strictEffects&lt;/code&gt; are now always enabled. Strict effects require callback
  480. parameters to be annotated with &lt;code class="highlighter-rouge"&gt;effectsOf&lt;/code&gt;:&lt;/p&gt;
  481.  
  482. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  483.  &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;openArray&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  484.                &lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;proc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;closure&lt;/span&gt;&lt;span class="p"&gt;.},&lt;/span&gt;
  485.                &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SortOrder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ascending&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;effectsOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="p"&gt;.}&lt;/span&gt;
  486.  
  487. &lt;/code&gt;&lt;/pre&gt;
  488. &lt;/div&gt;
  489.  
  490. &lt;p&gt;The meaning here is that &lt;code class="highlighter-rouge"&gt;sort&lt;/code&gt; has the effects of &lt;code class="highlighter-rouge"&gt;cmp&lt;/code&gt;: &lt;code class="highlighter-rouge"&gt;sort&lt;/code&gt; can raise the exceptions of &lt;code class="highlighter-rouge"&gt;cmp&lt;/code&gt;.&lt;/p&gt;
  491.  
  492. &lt;h2 id="forbid-certain-effects"&gt;Forbid certain effects&lt;/h2&gt;
  493.  
  494. &lt;p&gt;Nim’s effect tracking can now forbid certain effects while being oblivious to others:&lt;/p&gt;
  495.  
  496. &lt;div class="language-nim highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
  497.  &lt;span class="k"&gt;type&lt;/span&gt;
  498.    &lt;span class="n"&gt;Effect1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;
  499.  
  500.  &lt;span class="k"&gt;proc &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{.&lt;/span&gt;&lt;span class="n"&gt;forbids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Effect1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.})&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  501.    &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  502.  
  503. &lt;/code&gt;&lt;/pre&gt;
  504. &lt;/div&gt;
  505.  
  506. &lt;p&gt;In this example &lt;code class="highlighter-rouge"&gt;test&lt;/code&gt; takes a callback that can have any effect except &lt;code class="highlighter-rouge"&gt;Effect1&lt;/code&gt;. This mechanism can be used to enforce that a subsystem cannot accidentically call into a different subsystem. For example, in a game engine it could be used to ensure that the renderer logic does not call into a scripting layer.&lt;/p&gt;
  507.  
  508. &lt;h2 id="unicode-operators"&gt;Unicode operators&lt;/h2&gt;
  509.  
  510. &lt;p&gt;&lt;code class="highlighter-rouge"&gt;--experimental:unicodeOperators&lt;/code&gt; are now always enabled: Unicode operators like
  511. &lt;code class="highlighter-rouge"&gt;⊗&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;∘&lt;/code&gt; can be used by math libraries. Note that the standard library does not
  512. use Unicode operators and will not for the foreseeable future.&lt;/p&gt;
  513.  
  514. &lt;h1 id="bugfixes"&gt;Bugfixes&lt;/h1&gt;
  515.  
  516. &lt;p&gt;These reported issues were fixed:&lt;/p&gt;
  517.  
  518. &lt;ul&gt;
  519.  &lt;li&gt;Fixed “SYS_getrandom undeclared compiling nim 1.6.0 stdlib on linux kernel &amp;lt; 3.17 (including RHEL7)”
  520. (&lt;a href="https://github.com/nim-lang/Nim/issues/19052"&gt;#19052&lt;/a&gt;)&lt;/li&gt;
  521.  &lt;li&gt;Fixed “nimIdentNormalize(“”) returns “\0””
  522. (&lt;a href="https://github.com/nim-lang/Nim/issues/19067"&gt;#19067&lt;/a&gt;)&lt;/li&gt;
  523.  &lt;li&gt;Fixed “Compiler terminated with IndexDefect if &lt;code class="highlighter-rouge"&gt;--gc:arc&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;--gc:orc&lt;/code&gt; given, when proc return a global variable with &lt;code class="highlighter-rouge"&gt;lent&lt;/code&gt; or &lt;code class="highlighter-rouge"&gt;var&lt;/code&gt; type”
  524. (&lt;a href="https://github.com/nim-lang/Nim/issues/18971"&gt;#18971&lt;/a&gt;)&lt;/li&gt;
  525.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;create&lt;/code&gt; does not work for UncheckedArray, as sizeof(UncheckedArray[T])==0”
  526. (&lt;a href="https://github.com/nim-lang/Nim/issues/19000"&gt;#19000&lt;/a&gt;)&lt;/li&gt;
  527.  &lt;li&gt;Fixed “Errors initializing an object of RootObj with the C++ backend”
  528. (&lt;a href="https://github.com/nim-lang/Nim/issues/18410"&gt;#18410&lt;/a&gt;)&lt;/li&gt;
  529.  &lt;li&gt;Fixed “Stack traces broken with arc/orc”
  530. (&lt;a href="https://github.com/nim-lang/Nim/issues/19078"&gt;#19078&lt;/a&gt;)&lt;/li&gt;
  531.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;getCustomPragmaVal&lt;/code&gt; Error: typedesc not allowed as tuple field.”
  532. (&lt;a href="https://github.com/nim-lang/Nim/issues/19020"&gt;#19020&lt;/a&gt;)&lt;/li&gt;
  533.  &lt;li&gt;Fixed “isolate happily compiles despite not being able to prove the absence of captured refs”
  534. (&lt;a href="https://github.com/nim-lang/Nim/issues/19013"&gt;#19013&lt;/a&gt;)&lt;/li&gt;
  535.  &lt;li&gt;Fixed “PragmaExpr erroneously added to enum type”
  536. (&lt;a href="https://github.com/nim-lang/Nim/issues/19011"&gt;#19011&lt;/a&gt;)&lt;/li&gt;
  537.  &lt;li&gt;Fixed “RVO not applied to object with large array”
  538. (&lt;a href="https://github.com/nim-lang/Nim/issues/14470"&gt;#14470&lt;/a&gt;)&lt;/li&gt;
  539.  &lt;li&gt;Fixed “Compile error from backend gcc when generic int type is defined”
  540. (&lt;a href="https://github.com/nim-lang/Nim/issues/19051"&gt;#19051&lt;/a&gt;)&lt;/li&gt;
  541.  &lt;li&gt;Fixed “Block expression doesn’t work in some cases”
  542. (&lt;a href="https://github.com/nim-lang/Nim/issues/12274"&gt;#12274&lt;/a&gt;)&lt;/li&gt;
  543.  &lt;li&gt;Fixed “Make &lt;code class="highlighter-rouge"&gt;Math.trunc&lt;/code&gt; polyfill optional?”
  544. (&lt;a href="https://github.com/nim-lang/Nim/issues/16144"&gt;#16144&lt;/a&gt;)&lt;/li&gt;
  545.  &lt;li&gt;Fixed “Allow adding file/line information to parseStmt/parseExpr”
  546. (&lt;a href="https://github.com/nim-lang/Nim/issues/13540"&gt;#13540&lt;/a&gt;)&lt;/li&gt;
  547.  &lt;li&gt;Fixed “Varargs broken in 1.6.0 when len is 0 and preceding block arguments.”
  548. (&lt;a href="https://github.com/nim-lang/Nim/issues/19015"&gt;#19015&lt;/a&gt;)&lt;/li&gt;
  549.  &lt;li&gt;Fixed “VM replaces declared type with alias”
  550. (&lt;a href="https://github.com/nim-lang/Nim/issues/19198"&gt;#19198&lt;/a&gt;)&lt;/li&gt;
  551.  &lt;li&gt;Fixed “regression: effectless inner template declared as side effect”
  552. (&lt;a href="https://github.com/nim-lang/Nim/issues/19159"&gt;#19159&lt;/a&gt;)&lt;/li&gt;
  553.  &lt;li&gt;Fixed “variables in closure iterators loop are not correctly unassigned”
  554. (&lt;a href="https://github.com/nim-lang/Nim/issues/19193"&gt;#19193&lt;/a&gt;)&lt;/li&gt;
  555.  &lt;li&gt;Fixed “std.streams fails to compile with TCC compiler on Windows and –cpu:amd64”
  556. (&lt;a href="https://github.com/nim-lang/Nim/issues/16326"&gt;#16326&lt;/a&gt;)&lt;/li&gt;
  557.  &lt;li&gt;Fixed “Unexported converters propagate through imports and affect code”
  558. (&lt;a href="https://github.com/nim-lang/Nim/issues/19213"&gt;#19213&lt;/a&gt;)&lt;/li&gt;
  559.  &lt;li&gt;Fixed “[arc] of operation segfaults for a ptr object containing traced reference”
  560. (&lt;a href="https://github.com/nim-lang/Nim/issues/19205"&gt;#19205&lt;/a&gt;)&lt;/li&gt;
  561.  &lt;li&gt;Fixed “Static linking with a .lib file not working”
  562. (&lt;a href="https://github.com/nim-lang/Nim/issues/15955"&gt;#15955&lt;/a&gt;)&lt;/li&gt;
  563.  &lt;li&gt;Fixed “re.split unexpected results with zero-width characters”
  564. (&lt;a href="https://github.com/nim-lang/Nim/issues/14468"&gt;#14468&lt;/a&gt;)&lt;/li&gt;
  565.  &lt;li&gt;Fixed “Async httpclient bodyStream reads fails when response is Http204”
  566. (&lt;a href="https://github.com/nim-lang/Nim/issues/19253"&gt;#19253&lt;/a&gt;)&lt;/li&gt;
  567.  &lt;li&gt;Fixed “Object constructor fails on Windows”
  568. (&lt;a href="https://github.com/nim-lang/Nim/issues/19244"&gt;#19244&lt;/a&gt;)&lt;/li&gt;
  569.  &lt;li&gt;Fixed “Out-of-bounds in strformat”
  570. (&lt;a href="https://github.com/nim-lang/Nim/issues/19107"&gt;#19107&lt;/a&gt;)&lt;/li&gt;
  571.  &lt;li&gt;Fixed “Adding an empty list to a non-empty list breaks the latter list”
  572. (&lt;a href="https://github.com/nim-lang/Nim/issues/19297"&gt;#19297&lt;/a&gt;)&lt;/li&gt;
  573.  &lt;li&gt;Fixed “Wrong result when using varargs with var arguments.”
  574. (&lt;a href="https://github.com/nim-lang/Nim/issues/16617"&gt;#16617&lt;/a&gt;)&lt;/li&gt;
  575.  &lt;li&gt;Fixed “Adding an empty &lt;code class="highlighter-rouge"&gt;DoublyLinkedList&lt;/code&gt; to a non-empty &lt;code class="highlighter-rouge"&gt;DoublyLinkedList&lt;/code&gt; breaks the latter list”
  576. (&lt;a href="https://github.com/nim-lang/Nim/issues/19314"&gt;#19314&lt;/a&gt;)&lt;/li&gt;
  577.  &lt;li&gt;Fixed “Compiler version 1.6.0 does not work on Windows XP”
  578. (&lt;a href="https://github.com/nim-lang/Nim/issues/19038"&gt;#19038&lt;/a&gt;)&lt;/li&gt;
  579.  &lt;li&gt;Fixed “hasCustomPragma fails on nnkVarTy/nnkBracketExpr nodes”
  580. (&lt;a href="https://github.com/nim-lang/Nim/issues/11923"&gt;#11923&lt;/a&gt;)&lt;/li&gt;
  581.  &lt;li&gt;Fixed “RST minor bugs”
  582. (&lt;a href="https://github.com/nim-lang/Nim/issues/17340"&gt;#17340&lt;/a&gt;)&lt;/li&gt;
  583.  &lt;li&gt;Fixed “useNimRtl does not work for –gc:orc/arc (in windows)”
  584. (&lt;a href="https://github.com/nim-lang/Nim/issues/16458"&gt;#16458&lt;/a&gt;)&lt;/li&gt;
  585.  &lt;li&gt;Fixed “Orc booting compiler doesn’t work with &lt;code class="highlighter-rouge"&gt;newSeq&lt;/code&gt; operations”
  586. (&lt;a href="https://github.com/nim-lang/Nim/issues/19404"&gt;#19404&lt;/a&gt;)&lt;/li&gt;
  587.  &lt;li&gt;Fixed “Manual example: &lt;code class="highlighter-rouge"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;.cast(uncheckedAssign).&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt; assignment to discriminator produces &lt;code class="highlighter-rouge"&gt;[FieldDefect]&lt;/code&gt;”
  588. (&lt;a href="https://github.com/nim-lang/Nim/issues/19266"&gt;#19266&lt;/a&gt;)&lt;/li&gt;
  589.  &lt;li&gt;Fixed “nim js ignores file write error”
  590. (&lt;a href="https://github.com/nim-lang/Nim/issues/18662"&gt;#18662&lt;/a&gt;)&lt;/li&gt;
  591.  &lt;li&gt;Fixed “Nim-1.6 segfault”
  592. (&lt;a href="https://github.com/nim-lang/Nim/issues/19569"&gt;#19569&lt;/a&gt;)&lt;/li&gt;
  593.  &lt;li&gt;Fixed “Nim compiler crashing when using control flow statements inside try-catch block on a closure iterator”
  594. (&lt;a href="https://github.com/nim-lang/Nim/issues/19575"&gt;#19575&lt;/a&gt;)&lt;/li&gt;
  595.  &lt;li&gt;Fixed “Remove deprecated typo poDemon”
  596. (&lt;a href="https://github.com/nim-lang/Nim/issues/19631"&gt;#19631&lt;/a&gt;)&lt;/li&gt;
  597.  &lt;li&gt;Fixed “useless &lt;code class="highlighter-rouge"&gt;overflowChecks&lt;/code&gt; runtime check generated even when one of &lt;code class="highlighter-rouge"&gt;a div b&lt;/code&gt; constant”
  598. (&lt;a href="https://github.com/nim-lang/Nim/issues/19615"&gt;#19615&lt;/a&gt;)&lt;/li&gt;
  599.  &lt;li&gt;Fixed “[ARC] tuple unpacking leads to unnecessary copies &amp;amp; memory leak”
  600. (&lt;a href="https://github.com/nim-lang/Nim/issues/19364"&gt;#19364&lt;/a&gt;)&lt;/li&gt;
  601.  &lt;li&gt;Fixed “pragma in unreferenced function affects subsequent code”
  602. (&lt;a href="https://github.com/nim-lang/Nim/issues/19603"&gt;#19603&lt;/a&gt;)&lt;/li&gt;
  603.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;nim dump&lt;/code&gt; and other information obtaining commands execute top-level &lt;code class="highlighter-rouge"&gt;exec&lt;/code&gt; statements in nims files”
  604. (&lt;a href="https://github.com/nim-lang/Nim/issues/8219"&gt;#8219&lt;/a&gt;)&lt;/li&gt;
  605.  &lt;li&gt;Fixed “Raises pragma and generic error/exception types compiler crash”
  606. (&lt;a href="https://github.com/nim-lang/Nim/issues/14318"&gt;#14318&lt;/a&gt;)&lt;/li&gt;
  607.  &lt;li&gt;Fixed “Bug using nested loops in closure iterators”
  608. (&lt;a href="https://github.com/nim-lang/Nim/issues/18474"&gt;#18474&lt;/a&gt;)&lt;/li&gt;
  609.  &lt;li&gt;Fixed “Import/except doesn’t work on devel”
  610. (&lt;a href="https://github.com/nim-lang/Nim/issues/18986"&gt;#18986&lt;/a&gt;)&lt;/li&gt;
  611.  &lt;li&gt;Fixed “nim check -b:js does not undefine OS symbols”
  612. (&lt;a href="https://github.com/nim-lang/Nim/issues/17286"&gt;#17286&lt;/a&gt;)&lt;/li&gt;
  613.  &lt;li&gt;Fixed “Can’t check if stderr is static”
  614. (&lt;a href="https://github.com/nim-lang/Nim/issues/19680"&gt;#19680&lt;/a&gt;)&lt;/li&gt;
  615.  &lt;li&gt;Fixed “View of seq[T] when T has &lt;code class="highlighter-rouge"&gt;seq&lt;/code&gt; attribute won’t iter with ARC/ORC, but &lt;code class="highlighter-rouge"&gt;len&lt;/code&gt; returns correct number of elements”
  616. (&lt;a href="https://github.com/nim-lang/Nim/issues/19435"&gt;#19435&lt;/a&gt;)&lt;/li&gt;
  617.  &lt;li&gt;Fixed “Indent level ignored for first line”
  618. (&lt;a href="https://github.com/nim-lang/Nim/issues/19662"&gt;#19662&lt;/a&gt;)&lt;/li&gt;
  619.  &lt;li&gt;Fixed “Method dispatch is slow”
  620. (&lt;a href="https://github.com/nim-lang/Nim/issues/18612"&gt;#18612&lt;/a&gt;)&lt;/li&gt;
  621.  &lt;li&gt;Fixed “Error with anonymous tuples passed to concept function arguments.”
  622. (&lt;a href="https://github.com/nim-lang/Nim/issues/19730"&gt;#19730&lt;/a&gt;)&lt;/li&gt;
  623.  &lt;li&gt;Fixed “Add link to std/tempfiles in the docs”
  624. (&lt;a href="https://github.com/nim-lang/Nim/issues/19155"&gt;#19155&lt;/a&gt;)&lt;/li&gt;
  625.  &lt;li&gt;Fixed “Add –gc:arc (or –mm:arc) induce different behavior when using converter”
  626. (&lt;a href="https://github.com/nim-lang/Nim/issues/19862"&gt;#19862&lt;/a&gt;)&lt;/li&gt;
  627.  &lt;li&gt;Fixed “Converting unsigned integer to float fails in VM”
  628. (&lt;a href="https://github.com/nim-lang/Nim/issues/19199"&gt;#19199&lt;/a&gt;)&lt;/li&gt;
  629.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;--genscript&lt;/code&gt; for vcc produces a script that does not compile”
  630. (&lt;a href="https://github.com/nim-lang/Nim/issues/19883"&gt;#19883&lt;/a&gt;)&lt;/li&gt;
  631.  &lt;li&gt;Fixed “Search results are in sidebar”
  632. (&lt;a href="https://github.com/nim-lang/Nim/issues/19900"&gt;#19900&lt;/a&gt;)&lt;/li&gt;
  633.  &lt;li&gt;Fixed “regression(0.20.0 =&amp;gt; devel): var params assignment gives silently wrong results in VM”
  634. (&lt;a href="https://github.com/nim-lang/Nim/issues/15974"&gt;#15974&lt;/a&gt;)&lt;/li&gt;
  635.  &lt;li&gt;Fixed “Closure iterator finishing prematurely”
  636. (&lt;a href="https://github.com/nim-lang/Nim/issues/11042"&gt;#11042&lt;/a&gt;)&lt;/li&gt;
  637.  &lt;li&gt;Fixed “Crash dereferencing object via a view object”
  638. (&lt;a href="https://github.com/nim-lang/Nim/issues/15897"&gt;#15897&lt;/a&gt;)&lt;/li&gt;
  639.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;genDepend&lt;/code&gt; broken for duplicate module names in separate folders”
  640. (&lt;a href="https://github.com/nim-lang/Nim/issues/18735"&gt;#18735&lt;/a&gt;)&lt;/li&gt;
  641.  &lt;li&gt;Fixed “asm and std=c99 incompatibility”
  642. (&lt;a href="https://github.com/nim-lang/Nim/issues/20012"&gt;#20012&lt;/a&gt;)&lt;/li&gt;
  643.  &lt;li&gt;Fixed “shallowcopy string doesn’t work with arc/orc”
  644. (&lt;a href="https://github.com/nim-lang/Nim/issues/20015"&gt;#20015&lt;/a&gt;)&lt;/li&gt;
  645.  &lt;li&gt;Fixed “Templates: Crash with gensym’ed proc &amp;amp; method call”
  646. (&lt;a href="https://github.com/nim-lang/Nim/issues/20002"&gt;#20002&lt;/a&gt;)&lt;/li&gt;
  647.  &lt;li&gt;Fixed “AsyncSocket.getPeerAddr appears to not work.”
  648. (&lt;a href="https://github.com/nim-lang/Nim/issues/15022"&gt;#15022&lt;/a&gt;)&lt;/li&gt;
  649.  &lt;li&gt;Fixed “hasCustomPragma and getCustomPragmaVal don’t work on fields with backticks”
  650. (&lt;a href="https://github.com/nim-lang/Nim/issues/20067"&gt;#20067&lt;/a&gt;)&lt;/li&gt;
  651.  &lt;li&gt;Fixed “unmarshalling nil strings/seqs doesn’t work with ORC”
  652. (&lt;a href="https://github.com/nim-lang/Nim/issues/20089"&gt;#20089&lt;/a&gt;)&lt;/li&gt;
  653.  &lt;li&gt;Fixed “Cant use &lt;code class="highlighter-rouge"&gt;uint64&lt;/code&gt; in case”
  654. (&lt;a href="https://github.com/nim-lang/Nim/issues/20031"&gt;#20031&lt;/a&gt;)&lt;/li&gt;
  655.  &lt;li&gt;Fixed “CI: Migration from builds.sr.ht”
  656. (&lt;a href="https://github.com/nim-lang/Nim/issues/20123"&gt;#20123&lt;/a&gt;)&lt;/li&gt;
  657.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;nim jsondoc&lt;/code&gt; output is broken”
  658. (&lt;a href="https://github.com/nim-lang/Nim/issues/20132"&gt;#20132&lt;/a&gt;)&lt;/li&gt;
  659.  &lt;li&gt;Fixed “Underscores are unnecessarily escaped in db_mysql”
  660. (&lt;a href="https://github.com/nim-lang/Nim/issues/20153"&gt;#20153&lt;/a&gt;)&lt;/li&gt;
  661.  &lt;li&gt;Fixed “Bug with effect system and forward declarations”
  662. (&lt;a href="https://github.com/nim-lang/Nim/issues/6559"&gt;#6559&lt;/a&gt;)&lt;/li&gt;
  663.  &lt;li&gt;Fixed “Instant OOM in Nimsuggest”
  664. (&lt;a href="https://github.com/nim-lang/Nim/issues/15316"&gt;#15316&lt;/a&gt;)&lt;/li&gt;
  665.  &lt;li&gt;Fixed “Lint/style error reported for explicit module name when there’s a type collision”
  666. (&lt;a href="https://github.com/nim-lang/Nim/issues/12955"&gt;#12955&lt;/a&gt;)&lt;/li&gt;
  667.  &lt;li&gt;Fixed “Invalid codegen when &lt;code class="highlighter-rouge"&gt;block&lt;/code&gt; ends with &lt;code class="highlighter-rouge"&gt;lent&lt;/code&gt;”
  668. (&lt;a href="https://github.com/nim-lang/Nim/issues/20107"&gt;#20107&lt;/a&gt;)&lt;/li&gt;
  669.  &lt;li&gt;Fixed “compiler flag &lt;code class="highlighter-rouge"&gt;--hintAsError[XDeclaredButNotUsed]:on&lt;/code&gt; causes unavoidable error in &lt;code class="highlighter-rouge"&gt;fatal.nim&lt;/code&gt; that &lt;code class="highlighter-rouge"&gt;goToBasedException&lt;/code&gt; is never used”
  670. (&lt;a href="https://github.com/nim-lang/Nim/issues/20149"&gt;#20149&lt;/a&gt;)&lt;/li&gt;
  671.  &lt;li&gt;Fixed “jsondoc creates no files unless html-based version exist prior”
  672. (&lt;a href="https://github.com/nim-lang/Nim/issues/11953"&gt;#11953&lt;/a&gt;)&lt;/li&gt;
  673.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;locals&lt;/code&gt; doesn’t work with ORC”
  674. (&lt;a href="https://github.com/nim-lang/Nim/issues/20162"&gt;#20162&lt;/a&gt;)&lt;/li&gt;
  675.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;reset&lt;/code&gt; does not work on &lt;code class="highlighter-rouge"&gt;set&lt;/code&gt;”
  676. (&lt;a href="https://github.com/nim-lang/Nim/issues/19967"&gt;#19967&lt;/a&gt;)&lt;/li&gt;
  677.  &lt;li&gt;Fixed “selectRead and selectWrite are dangerous to use sockets with FD numbers bigger than FD_SETSIZE (1024) on *nixes”
  678. (&lt;a href="https://github.com/nim-lang/Nim/issues/19973"&gt;#19973&lt;/a&gt;)&lt;/li&gt;
  679.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;type A* = A&lt;/code&gt; with &lt;code class="highlighter-rouge"&gt;B = (A,)&lt;/code&gt; causes compiler to run infinitely”
  680. (&lt;a href="https://github.com/nim-lang/Nim/issues/18983"&gt;#18983&lt;/a&gt;)&lt;/li&gt;
  681.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;x &amp;lt; 1 (and|or) b&lt;/code&gt; generates temp variables in js output”
  682. (&lt;a href="https://github.com/nim-lang/Nim/issues/20219"&gt;#20219&lt;/a&gt;)&lt;/li&gt;
  683.  &lt;li&gt;Fixed “object fields of distinct types doesn’t work with JS”
  684. (&lt;a href="https://github.com/nim-lang/Nim/issues/20227"&gt;#20227&lt;/a&gt;)&lt;/li&gt;
  685.  &lt;li&gt;Fixed “SSL certificate loading breaks after first found certificate”
  686. (&lt;a href="https://github.com/nim-lang/Nim/issues/17658"&gt;#17658&lt;/a&gt;)&lt;/li&gt;
  687.  &lt;li&gt;Fixed “compiler flag –clib prefixes unnecessary path component to library name”
  688. (&lt;a href="https://github.com/nim-lang/Nim/issues/16937"&gt;#16937&lt;/a&gt;)&lt;/li&gt;
  689.  &lt;li&gt;Fixed “use-after-free bugs in object variants”
  690. (&lt;a href="https://github.com/nim-lang/Nim/issues/20305"&gt;#20305&lt;/a&gt;)&lt;/li&gt;
  691.  &lt;li&gt;Fixed “Nim should be able to generate a theindex.json”
  692. (&lt;a href="https://github.com/nim-lang/Nim/issues/9462"&gt;#9462&lt;/a&gt;)&lt;/li&gt;
  693.  &lt;li&gt;Fixed “[ARC] C compiler error when using the result of a template in the subscript operator”
  694. (&lt;a href="https://github.com/nim-lang/Nim/issues/20303"&gt;#20303&lt;/a&gt;)&lt;/li&gt;
  695.  &lt;li&gt;Fixed “Calling nullary templates without () doesn’t work inside calls inside other templates”
  696. (&lt;a href="https://github.com/nim-lang/Nim/issues/13515"&gt;#13515&lt;/a&gt;)&lt;/li&gt;
  697.  &lt;li&gt;Fixed “[ARC] Sink inference prevents the usage of stdlib procedures for functional style”
  698. (&lt;a href="https://github.com/nim-lang/Nim/issues/19724"&gt;#19724&lt;/a&gt;)&lt;/li&gt;
  699.  &lt;li&gt;Fixed “use-after-free bugs in object variants”
  700. (&lt;a href="https://github.com/nim-lang/Nim/issues/20305"&gt;#20305&lt;/a&gt;)&lt;/li&gt;
  701.  &lt;li&gt;Fixed “Float ranges in case statement in JS crash compiler”
  702. (&lt;a href="https://github.com/nim-lang/Nim/issues/20233"&gt;#20233&lt;/a&gt;)&lt;/li&gt;
  703.  &lt;li&gt;Fixed “[Regression] Incorrect captures of pegs \ident macro in nim 1.6”
  704. (&lt;a href="https://github.com/nim-lang/Nim/issues/19104"&gt;#19104&lt;/a&gt;)&lt;/li&gt;
  705.  &lt;li&gt;Fixed “Windows gcc shipped with choosenim 1.6.4 with TLS emulation turned off : The application was unable to start correctly (0xc000007b). Click OK to close the application”
  706. (&lt;a href="https://github.com/nim-lang/Nim/issues/19713"&gt;#19713&lt;/a&gt;)&lt;/li&gt;
  707.  &lt;li&gt;Fixed “Improve error message when instantiating generics that lack a type”
  708. (&lt;a href="https://github.com/nim-lang/Nim/issues/19882"&gt;#19882&lt;/a&gt;)&lt;/li&gt;
  709.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;of&lt;/code&gt; operator doesn’t consider generics under orc/arc”
  710. (&lt;a href="https://github.com/nim-lang/Nim/issues/20391"&gt;#20391&lt;/a&gt;)&lt;/li&gt;
  711.  &lt;li&gt;Fixed “Tests fail in 2038”
  712. (&lt;a href="https://github.com/nim-lang/Nim/issues/20285"&gt;#20285&lt;/a&gt;)&lt;/li&gt;
  713.  &lt;li&gt;Fixed “At a certain level nested generics cause causes the typechecker to get stuck”
  714. (&lt;a href="https://github.com/nim-lang/Nim/issues/20348"&gt;#20348&lt;/a&gt;)&lt;/li&gt;
  715.  &lt;li&gt;Fixed “C++ backend fails when put inherited object in another object type”
  716. (&lt;a href="https://github.com/nim-lang/Nim/issues/17351"&gt;#17351&lt;/a&gt;)&lt;/li&gt;
  717.  &lt;li&gt;Fixed “Static linking with a .lib file not working”
  718. (&lt;a href="https://github.com/nim-lang/Nim/issues/15955"&gt;#15955&lt;/a&gt;)&lt;/li&gt;
  719.  &lt;li&gt;Fixed “sigmatch error confusing when (inferred) pragmas mismatch (eg;  {.locks.}; or {.closure.} calling convention)”
  720. (&lt;a href="https://github.com/nim-lang/Nim/issues/2614"&gt;#2614&lt;/a&gt;)&lt;/li&gt;
  721.  &lt;li&gt;Fixed “find and rfind differ on empty needle”
  722. (&lt;a href="https://github.com/nim-lang/Nim/issues/18128"&gt;#18128&lt;/a&gt;)&lt;/li&gt;
  723.  &lt;li&gt;Fixed “-mm flag is ignored on latest Nim 1.7.1 be4bd8”
  724. (&lt;a href="https://github.com/nim-lang/Nim/issues/20426"&gt;#20426&lt;/a&gt;)&lt;/li&gt;
  725.  &lt;li&gt;Fixed “Internal error on ARC/ORC when using forward declaration of finalizer proc”
  726. (&lt;a href="https://github.com/nim-lang/Nim/issues/19401"&gt;#19401&lt;/a&gt;)&lt;/li&gt;
  727.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;seq&lt;/code&gt;s are not properly updated in loop with ARC/ORC”
  728. (&lt;a href="https://github.com/nim-lang/Nim/issues/19457"&gt;#19457&lt;/a&gt;)&lt;/li&gt;
  729.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;dereferencing pointer to incomplete type&lt;/code&gt; error with gcc 9.4 with statics/&lt;code class="highlighter-rouge"&gt;cast&lt;/code&gt;”
  730. (&lt;a href="https://github.com/nim-lang/Nim/issues/20141"&gt;#20141&lt;/a&gt;)&lt;/li&gt;
  731.  &lt;li&gt;Fixed “mutable view from immutable location”
  732. (&lt;a href="https://github.com/nim-lang/Nim/issues/19986"&gt;#19986&lt;/a&gt;)&lt;/li&gt;
  733.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;strutils.find&lt;/code&gt; uses cstring optimization that stops after \0”
  734. (&lt;a href="https://github.com/nim-lang/Nim/issues/19500"&gt;#19500&lt;/a&gt;)&lt;/li&gt;
  735.  &lt;li&gt;Fixed “Broken behavior with string ranges in case labels”
  736. (&lt;a href="https://github.com/nim-lang/Nim/issues/19678"&gt;#19678&lt;/a&gt;)&lt;/li&gt;
  737.  &lt;li&gt;Fixed “Internal error on trying to iterate on an empty array/seq”
  738. (&lt;a href="https://github.com/nim-lang/Nim/issues/19224"&gt;#19224&lt;/a&gt;)&lt;/li&gt;
  739.  &lt;li&gt;Fixed “Custom pragma ignored on field of variant obj if in multiple branches”
  740. (&lt;a href="https://github.com/nim-lang/Nim/issues/11415"&gt;#11415&lt;/a&gt;)&lt;/li&gt;
  741.  &lt;li&gt;Fixed “C Compiler error when initializing &lt;code class="highlighter-rouge"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;.global.&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt; with a &lt;code class="highlighter-rouge"&gt;block:&lt;/code&gt;”
  742. (&lt;a href="https://github.com/nim-lang/Nim/issues/18645"&gt;#18645&lt;/a&gt;)&lt;/li&gt;
  743.  &lt;li&gt;Fixed “internal error: expr: var not init - in custom finalizer”
  744. (&lt;a href="https://github.com/nim-lang/Nim/issues/19231"&gt;#19231&lt;/a&gt;)&lt;/li&gt;
  745.  &lt;li&gt;Fixed “Empty seq with indirection in arc”
  746. (&lt;a href="https://github.com/nim-lang/Nim/issues/11267"&gt;#11267&lt;/a&gt;)&lt;/li&gt;
  747.  &lt;li&gt;Fixed “(Unintended) Destruction of Thread object causes hard to debug crash”
  748. (&lt;a href="https://github.com/nim-lang/Nim/issues/7172"&gt;#7172&lt;/a&gt;)&lt;/li&gt;
  749.  &lt;li&gt;Fixed “Destructors: distinct types don’t get destructors automatically from the base type”
  750. (&lt;a href="https://github.com/nim-lang/Nim/issues/9401"&gt;#9401&lt;/a&gt;)&lt;/li&gt;
  751.  &lt;li&gt;Fixed “regression(1.04): reset broken in VM; incorrect VM handling of var params”
  752. (&lt;a href="https://github.com/nim-lang/Nim/issues/12994"&gt;#12994&lt;/a&gt;)&lt;/li&gt;
  753.  &lt;li&gt;Fixed “system.create doesn’t work with bitfield objects”
  754. (&lt;a href="https://github.com/nim-lang/Nim/issues/20516"&gt;#20516&lt;/a&gt;)&lt;/li&gt;
  755.  &lt;li&gt;Fixed “Extra &lt;code class="highlighter-rouge"&gt;forbids: []&lt;/code&gt; shown in docs and not hidden”
  756. (&lt;a href="https://github.com/nim-lang/Nim/issues/20524"&gt;#20524&lt;/a&gt;)&lt;/li&gt;
  757.  &lt;li&gt;Fixed “Nimc crash on ambiguous proc cast”
  758. (&lt;a href="https://github.com/nim-lang/Nim/issues/18886"&gt;#18886&lt;/a&gt;)&lt;/li&gt;
  759.  &lt;li&gt;Fixed “Generics: type mismatch “SomeunsignedInt or Natural””
  760. (&lt;a href="https://github.com/nim-lang/Nim/issues/7446"&gt;#7446&lt;/a&gt;)&lt;/li&gt;
  761.  &lt;li&gt;Fixed “Regression in proc symbol resolution; Error: attempting to call routine “
  762. (&lt;a href="https://github.com/nim-lang/Nim/issues/18990"&gt;#18990&lt;/a&gt;)&lt;/li&gt;
  763.  &lt;li&gt;Fixed “tests/proc/t17157.nim now gives SIGSEGV instead of error”
  764. (&lt;a href="https://github.com/nim-lang/Nim/issues/18136"&gt;#18136&lt;/a&gt;)&lt;/li&gt;
  765.  &lt;li&gt;Fixed “Nimpretty mangles numeric literal procs”
  766. (&lt;a href="https://github.com/nim-lang/Nim/issues/20553"&gt;#20553&lt;/a&gt;)&lt;/li&gt;
  767.  &lt;li&gt;Fixed “Confusing error message (methods can’t have same names as fields if UFCS is used)”
  768. (&lt;a href="https://github.com/nim-lang/Nim/issues/3748"&gt;#3748&lt;/a&gt;)&lt;/li&gt;
  769.  &lt;li&gt;Fixed “JS codegen can produce extreme switch statements with &lt;code class="highlighter-rouge"&gt;case a of range&lt;/code&gt;”
  770. (&lt;a href="https://github.com/nim-lang/Nim/issues/8821"&gt;#8821&lt;/a&gt;)&lt;/li&gt;
  771.  &lt;li&gt;Fixed “Crash when passing a template to a generic function expecting a procedure”
  772. (&lt;a href="https://github.com/nim-lang/Nim/issues/19700"&gt;#19700&lt;/a&gt;)&lt;/li&gt;
  773.  &lt;li&gt;Fixed “Experimental features in normal manual instead of experimental manual/undocumented”
  774. (&lt;a href="https://github.com/nim-lang/Nim/issues/19162"&gt;#19162&lt;/a&gt;)&lt;/li&gt;
  775.  &lt;li&gt;Fixed “methods inferred gcsafe is not verified”
  776. (&lt;a href="https://github.com/nim-lang/Nim/issues/20515"&gt;#20515&lt;/a&gt;)&lt;/li&gt;
  777.  &lt;li&gt;Fixed “ Error: illegal context for ‘nimvm’ magic if ‘nimvm’ is used with single branch ‘when’”
  778. (&lt;a href="https://github.com/nim-lang/Nim/issues/12517"&gt;#12517&lt;/a&gt;)&lt;/li&gt;
  779.  &lt;li&gt;Fixed “Compiler replaces =sink for =copy”
  780. (&lt;a href="https://github.com/nim-lang/Nim/issues/20572"&gt;#20572&lt;/a&gt;)&lt;/li&gt;
  781.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;cannot generate code for: mSlice&lt;/code&gt; with &lt;code class="highlighter-rouge"&gt;toOpenArray&lt;/code&gt;”
  782. (&lt;a href="https://github.com/nim-lang/Nim/issues/19969"&gt;#19969&lt;/a&gt;)&lt;/li&gt;
  783.  &lt;li&gt;Fixed “Regression: compile error using &lt;code class="highlighter-rouge"&gt;when/elif/else&lt;/code&gt;  and &lt;code class="highlighter-rouge"&gt;typedesc&lt;/code&gt; in template”
  784. (&lt;a href="https://github.com/nim-lang/Nim/issues/19426"&gt;#19426&lt;/a&gt;)&lt;/li&gt;
  785.  &lt;li&gt;Fixed ““incompatible type” when mixing float32 and cfloat in generics”
  786. (&lt;a href="https://github.com/nim-lang/Nim/issues/19349"&gt;#19349&lt;/a&gt;)&lt;/li&gt;
  787.  &lt;li&gt;Fixed “Illegal capture of closure iterator, when should be legal”
  788. (&lt;a href="https://github.com/nim-lang/Nim/issues/20152"&gt;#20152&lt;/a&gt;)&lt;/li&gt;
  789.  &lt;li&gt;Fixed “Generic proc instantiation and tuple types”
  790. (&lt;a href="https://github.com/nim-lang/Nim/issues/4466"&gt;#4466&lt;/a&gt;)&lt;/li&gt;
  791.  &lt;li&gt;Fixed “Generic proc involving generic .importcpp type with type specifier is not code-generated properly”
  792. (&lt;a href="https://github.com/nim-lang/Nim/issues/4678"&gt;#4678&lt;/a&gt;)&lt;/li&gt;
  793.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;privateAccess&lt;/code&gt; doesn’t work with generic &lt;code class="highlighter-rouge"&gt;ref object&lt;/code&gt; types.”
  794. (&lt;a href="https://github.com/nim-lang/Nim/issues/19278"&gt;#19278&lt;/a&gt;)&lt;/li&gt;
  795.  &lt;li&gt;Fixed “Regression when accessing a variable generic type”
  796. (&lt;a href="https://github.com/nim-lang/Nim/issues/20645"&gt;#20645&lt;/a&gt;)&lt;/li&gt;
  797.  &lt;li&gt;Fixed “Templates allowed to use ambiguous identifier”
  798. (&lt;a href="https://github.com/nim-lang/Nim/issues/1027"&gt;#1027&lt;/a&gt;)&lt;/li&gt;
  799.  &lt;li&gt;Fixed “Use of _ (as var placeholder) inside a template causes XDeclaredButNotUsed hints”
  800. (&lt;a href="https://github.com/nim-lang/Nim/issues/12094"&gt;#12094&lt;/a&gt;)&lt;/li&gt;
  801.  &lt;li&gt;Fixed “Can’t use empty sets as tuple field values (unless the set is a var/let value)”
  802. (&lt;a href="https://github.com/nim-lang/Nim/issues/6213"&gt;#6213&lt;/a&gt;)&lt;/li&gt;
  803.  &lt;li&gt;Fixed “FAMs should not be used in the C++ backend”
  804. (&lt;a href="https://github.com/nim-lang/Nim/issues/20654"&gt;#20654&lt;/a&gt;)&lt;/li&gt;
  805.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;sink&lt;/code&gt; causes crash in VM”
  806. (&lt;a href="https://github.com/nim-lang/Nim/issues/19201"&gt;#19201&lt;/a&gt;)&lt;/li&gt;
  807.  &lt;li&gt;Fixed “Can’t instantiate a static value of generic type”
  808. (&lt;a href="https://github.com/nim-lang/Nim/issues/6637"&gt;#6637&lt;/a&gt;)&lt;/li&gt;
  809.  &lt;li&gt;Fixed “Implement Unix file regularity check (#20448)”
  810. (&lt;a href="https://github.com/nim-lang/Nim/issues/20628"&gt;#20628&lt;/a&gt;)&lt;/li&gt;
  811.  &lt;li&gt;Fixed “Can not use nim 2’s new default instantiation with any object type with a &lt;code class="highlighter-rouge"&gt;DateTime&lt;/code&gt; field”
  812. (&lt;a href="https://github.com/nim-lang/Nim/issues/20681"&gt;#20681&lt;/a&gt;)&lt;/li&gt;
  813.  &lt;li&gt;Fixed “regression(0.18.0 =&amp;gt; devel): &lt;code class="highlighter-rouge"&gt;import times; echo low(Time)&lt;/code&gt; gives OverflowDefect”
  814. (&lt;a href="https://github.com/nim-lang/Nim/issues/16264"&gt;#16264&lt;/a&gt;)&lt;/li&gt;
  815.  &lt;li&gt;Fixed “implicit compile time conversion int to ranged float causes compiler &lt;code class="highlighter-rouge"&gt;fatal&lt;/code&gt; error”
  816. (&lt;a href="https://github.com/nim-lang/Nim/issues/20148"&gt;#20148&lt;/a&gt;)&lt;/li&gt;
  817.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;range[a..b]&lt;/code&gt; inside object variant fails”
  818. (&lt;a href="https://github.com/nim-lang/Nim/issues/20715"&gt;#20715&lt;/a&gt;)&lt;/li&gt;
  819.  &lt;li&gt;Fixed “range of uint64 shows signed upper bound”
  820. (&lt;a href="https://github.com/nim-lang/Nim/issues/20272"&gt;#20272&lt;/a&gt;)&lt;/li&gt;
  821.  &lt;li&gt;Fixed “attempting to call undeclared routine: ‘case’”
  822. (&lt;a href="https://github.com/nim-lang/Nim/issues/20283"&gt;#20283&lt;/a&gt;)&lt;/li&gt;
  823.  &lt;li&gt;Fixed “Threads and channels modules’ docs leak into system module docs”
  824. (&lt;a href="https://github.com/nim-lang/Nim/issues/20526"&gt;#20526&lt;/a&gt;)&lt;/li&gt;
  825.  &lt;li&gt;Fixed “Wrong assignment for tuples in some contexts.”
  826. (&lt;a href="https://github.com/nim-lang/Nim/issues/16331"&gt;#16331&lt;/a&gt;)&lt;/li&gt;
  827.  &lt;li&gt;Fixed “Returning procedures with different noSideEffect pragmas”
  828. (&lt;a href="https://github.com/nim-lang/Nim/issues/14216"&gt;#14216&lt;/a&gt;)&lt;/li&gt;
  829.  &lt;li&gt;Fixed “Range types don’t work with &lt;code class="highlighter-rouge"&gt;BackwardsIndex&lt;/code&gt; (and possibly others)”
  830. (&lt;a href="https://github.com/nim-lang/Nim/issues/13618"&gt;#13618&lt;/a&gt;)&lt;/li&gt;
  831.  &lt;li&gt;Fixed “pre-existing field visibility of VM object passed to runtime”
  832. (&lt;a href="https://github.com/nim-lang/Nim/issues/20740"&gt;#20740&lt;/a&gt;)&lt;/li&gt;
  833.  &lt;li&gt;Fixed “Nim compiler crashes when trailing whitespace are too many (&amp;gt;=128)”
  834. (&lt;a href="https://github.com/nim-lang/Nim/issues/15688"&gt;#15688&lt;/a&gt;)&lt;/li&gt;
  835.  &lt;li&gt;Fixed “Illegal storage access compiling call with nested ref/deref’d types”
  836. (&lt;a href="https://github.com/nim-lang/Nim/issues/18079"&gt;#18079&lt;/a&gt;)&lt;/li&gt;
  837.  &lt;li&gt;Fixed “function return enum type cause wrong.”
  838. (&lt;a href="https://github.com/nim-lang/Nim/issues/12589"&gt;#12589&lt;/a&gt;)&lt;/li&gt;
  839.  &lt;li&gt;Fixed “Invalid codegen when returning &lt;code class="highlighter-rouge"&gt;var tuple&lt;/code&gt; from a template”
  840. (&lt;a href="https://github.com/nim-lang/Nim/issues/19149"&gt;#19149&lt;/a&gt;)&lt;/li&gt;
  841.  &lt;li&gt;Fixed “regression (0.19=&amp;gt; 0.20 onwards): adding doc comment in importc proc makes it silently noop at CT”
  842. (&lt;a href="https://github.com/nim-lang/Nim/issues/17121"&gt;#17121&lt;/a&gt;)&lt;/li&gt;
  843.  &lt;li&gt;Fixed “Invalid type in `importc: “exit”’”
  844. (&lt;a href="https://github.com/nim-lang/Nim/issues/20694"&gt;#20694&lt;/a&gt;)&lt;/li&gt;
  845.  &lt;li&gt;Fixed “multiReplace / replace taking a long time to execute in VM since commit: ae050b05e9ce6f4e356c46de8722724a2f706e18 “
  846. (&lt;a href="https://github.com/nim-lang/Nim/issues/20746"&gt;#20746&lt;/a&gt;)&lt;/li&gt;
  847.  &lt;li&gt;Fixed “Default value of object parameterized with a RootRef generates incorrect C”
  848. (&lt;a href="https://github.com/nim-lang/Nim/issues/20699"&gt;#20699&lt;/a&gt;)&lt;/li&gt;
  849.  &lt;li&gt;Fixed “gc:arc cannot fully support threadpool with FlowVar”
  850. (&lt;a href="https://github.com/nim-lang/Nim/issues/13781"&gt;#13781&lt;/a&gt;)&lt;/li&gt;
  851.  &lt;li&gt;Fixed “Add stew to important_packages”
  852. (&lt;a href="https://github.com/nim-lang/Nim/issues/20798"&gt;#20798&lt;/a&gt;)&lt;/li&gt;
  853.  &lt;li&gt;Fixed “Regression of type inference when using templates and a proc with the same name as one of them”
  854. (&lt;a href="https://github.com/nim-lang/Nim/issues/20807"&gt;#20807&lt;/a&gt;)&lt;/li&gt;
  855.  &lt;li&gt;Fixed “Nim doesn’t catch wrong var {.global.} initialization”
  856. (&lt;a href="https://github.com/nim-lang/Nim/issues/3505"&gt;#3505&lt;/a&gt;)&lt;/li&gt;
  857.  &lt;li&gt;Fixed “Object variants + &lt;code class="highlighter-rouge"&gt;UncheckedArray[T]&lt;/code&gt; causes &lt;code class="highlighter-rouge"&gt;unsafeNew()&lt;/code&gt; act like &lt;code class="highlighter-rouge"&gt;new()&lt;/code&gt; and ignore the &lt;code class="highlighter-rouge"&gt;size&lt;/code&gt; parameter”
  858. (&lt;a href="https://github.com/nim-lang/Nim/issues/20836"&gt;#20836&lt;/a&gt;)&lt;/li&gt;
  859.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;getImpl&lt;/code&gt; can no longer be used with &lt;code class="highlighter-rouge"&gt;nkObjConstr&lt;/code&gt;’s bound type”
  860. (&lt;a href="https://github.com/nim-lang/Nim/issues/20856"&gt;#20856&lt;/a&gt;)&lt;/li&gt;
  861.  &lt;li&gt;Fixed “utf-8 (windows 7)”
  862. (&lt;a href="https://github.com/nim-lang/Nim/issues/20835"&gt;#20835&lt;/a&gt;)&lt;/li&gt;
  863.  &lt;li&gt;Fixed “dochack.nim uses wrong path to find theindex.html =&amp;gt; search doesn’t work unless file is in same dir as theindex.html”
  864. (&lt;a href="https://github.com/nim-lang/Nim/issues/14476"&gt;#14476&lt;/a&gt;)&lt;/li&gt;
  865.  &lt;li&gt;Fixed “[ORC] Bad codegen for global pointer to iterator”
  866. (&lt;a href="https://github.com/nim-lang/Nim/issues/20866"&gt;#20866&lt;/a&gt;)&lt;/li&gt;
  867.  &lt;li&gt;Fixed “doAssertRaises cannot handle IndexDefect with goto exceptions”
  868. (&lt;a href="https://github.com/nim-lang/Nim/issues/20026"&gt;#20026&lt;/a&gt;)&lt;/li&gt;
  869.  &lt;li&gt;Fixed “Small string case with else statement first in AST evaluates wrongly”
  870. (&lt;a href="https://github.com/nim-lang/Nim/issues/18964"&gt;#18964&lt;/a&gt;)&lt;/li&gt;
  871.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;ptr char&lt;/code&gt; implicitly converts to cstring, resulting in undefined behavior”
  872. (&lt;a href="https://github.com/nim-lang/Nim/issues/13790"&gt;#13790&lt;/a&gt;)&lt;/li&gt;
  873.  &lt;li&gt;Fixed “arc/orc is broken for vcc (devel)”
  874. (&lt;a href="https://github.com/nim-lang/Nim/issues/20873"&gt;#20873&lt;/a&gt;)&lt;/li&gt;
  875.  &lt;li&gt;Fixed “sizeof object containing a &lt;code class="highlighter-rouge"&gt;set&lt;/code&gt; is wrong”
  876. (&lt;a href="https://github.com/nim-lang/Nim/issues/20914"&gt;#20914&lt;/a&gt;)&lt;/li&gt;
  877.  &lt;li&gt;Fixed “Error: internal error: yield in expr not lowered”
  878. (&lt;a href="https://github.com/nim-lang/Nim/issues/13583"&gt;#13583&lt;/a&gt;)&lt;/li&gt;
  879.  &lt;li&gt;Fixed “Invalid type in slice generated by parallel transform”
  880. (&lt;a href="https://github.com/nim-lang/Nim/issues/20958"&gt;#20958&lt;/a&gt;)&lt;/li&gt;
  881.  &lt;li&gt;Fixed “arc/orc is broken for cpp backend using vcc (devel)”
  882. (&lt;a href="https://github.com/nim-lang/Nim/issues/20969"&gt;#20969&lt;/a&gt;)&lt;/li&gt;
  883.  &lt;li&gt;Fixed “Unspecified generic on default value segfaults the compiler”
  884. (&lt;a href="https://github.com/nim-lang/Nim/issues/20883"&gt;#20883&lt;/a&gt;)&lt;/li&gt;
  885.  &lt;li&gt;Fixed “[ICE] Combination of concept, &lt;code class="highlighter-rouge"&gt;dotOperators&lt;/code&gt; &amp;amp; static leads to internal error”
  886. (&lt;a href="https://github.com/nim-lang/Nim/issues/20996"&gt;#20996&lt;/a&gt;)&lt;/li&gt;
  887.  &lt;li&gt;Fixed “warn on overloaded &lt;code class="highlighter-rouge"&gt;=&lt;/code&gt; with &lt;code class="highlighter-rouge"&gt;refc&lt;/code&gt;”
  888. (&lt;a href="https://github.com/nim-lang/Nim/issues/20846"&gt;#20846&lt;/a&gt;)&lt;/li&gt;
  889.  &lt;li&gt;Fixed “Missing bounds check for &lt;code class="highlighter-rouge"&gt;len(toOpenArray..)&lt;/code&gt;”
  890. (&lt;a href="https://github.com/nim-lang/Nim/issues/20954"&gt;#20954&lt;/a&gt;)&lt;/li&gt;
  891.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;getImpl&lt;/code&gt; on types return incorrect tree in &lt;code class="highlighter-rouge"&gt;when&lt;/code&gt; branches”
  892. (&lt;a href="https://github.com/nim-lang/Nim/issues/16639"&gt;#16639&lt;/a&gt;)&lt;/li&gt;
  893.  &lt;li&gt;Fixed “tyInt tyUint fit target int bit width”
  894. (&lt;a href="https://github.com/nim-lang/Nim/issues/20829"&gt;#20829&lt;/a&gt;)&lt;/li&gt;
  895.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;SIGSEGV&lt;/code&gt; when &lt;code class="highlighter-rouge"&gt;cast&lt;/code&gt; is Improperly Formatted”
  896. (&lt;a href="https://github.com/nim-lang/Nim/issues/21027"&gt;#21027&lt;/a&gt;)&lt;/li&gt;
  897.  &lt;li&gt;Fixed “Modules not linked in the main stdlib documentation”
  898. (&lt;a href="https://github.com/nim-lang/Nim/issues/16656"&gt;#16656&lt;/a&gt;)&lt;/li&gt;
  899.  &lt;li&gt;Fixed “noReturn pragma doesn’t work when we add a doc comment”
  900. (&lt;a href="https://github.com/nim-lang/Nim/issues/9839"&gt;#9839&lt;/a&gt;)&lt;/li&gt;
  901.  &lt;li&gt;Fixed “Extremely confusing error message with invalid syntax &lt;code class="highlighter-rouge"&gt;of: '+':&lt;/code&gt;”
  902. (&lt;a href="https://github.com/nim-lang/Nim/issues/20922"&gt;#20922&lt;/a&gt;)&lt;/li&gt;
  903.  &lt;li&gt;Fixed “Dangerous implicit type conversion from auto + generics”
  904. (&lt;a href="https://github.com/nim-lang/Nim/issues/15836"&gt;#15836&lt;/a&gt;)&lt;/li&gt;
  905.  &lt;li&gt;Fixed “SIGSEGV in alloc.nim addToSharedFreeList() in heavily threaded code”
  906. (&lt;a href="https://github.com/nim-lang/Nim/issues/21062"&gt;#21062&lt;/a&gt;)&lt;/li&gt;
  907.  &lt;li&gt;Fixed “getTime with vmopsDanger is broken”
  908. (&lt;a href="https://github.com/nim-lang/Nim/issues/21045"&gt;#21045&lt;/a&gt;)&lt;/li&gt;
  909.  &lt;li&gt;Fixed “Nim crashes in fixAbstractType”
  910. (&lt;a href="https://github.com/nim-lang/Nim/issues/16758"&gt;#16758&lt;/a&gt;)&lt;/li&gt;
  911.  &lt;li&gt;Fixed “Dangerous implicit type conversion from auto + generics”
  912. (&lt;a href="https://github.com/nim-lang/Nim/issues/15836"&gt;#15836&lt;/a&gt;)&lt;/li&gt;
  913.  &lt;li&gt;Fixed “Strict func does not catch mutation”
  914. (&lt;a href="https://github.com/nim-lang/Nim/issues/20808"&gt;#20808&lt;/a&gt;)&lt;/li&gt;
  915.  &lt;li&gt;Fixed “Named except clauses and experimental strictDefs don’t work together.”
  916. (&lt;a href="https://github.com/nim-lang/Nim/issues/21043"&gt;#21043&lt;/a&gt;)&lt;/li&gt;
  917.  &lt;li&gt;Fixed “Compiler quits SILENTLY when compiling code with generic types.”
  918. (&lt;a href="https://github.com/nim-lang/Nim/issues/20416"&gt;#20416&lt;/a&gt;)&lt;/li&gt;
  919.  &lt;li&gt;Fixed “Add warning for bare &lt;code class="highlighter-rouge"&gt;except:&lt;/code&gt; clause”
  920. (&lt;a href="https://github.com/nim-lang/Nim/issues/19580"&gt;#19580&lt;/a&gt;)&lt;/li&gt;
  921.  &lt;li&gt;Fixed “Error: internal error: getTypeDescAux(tyFromExpr) when using auto + arc, works with refc”
  922. (&lt;a href="https://github.com/nim-lang/Nim/issues/20588"&gt;#20588&lt;/a&gt;)&lt;/li&gt;
  923.  &lt;li&gt;Fixed “&lt;code class="highlighter-rouge"&gt;ByteAddress&lt;/code&gt; broken for its intended purpose”
  924. (&lt;a href="https://github.com/nim-lang/Nim/issues/12122"&gt;#12122&lt;/a&gt;)&lt;/li&gt;
  925.  &lt;li&gt;Fixed “os.walkDir breaks if called in a function with a parameter named ‘glob’”
  926. (&lt;a href="https://github.com/nim-lang/Nim/issues/21116"&gt;#21116&lt;/a&gt;)&lt;/li&gt;
  927.  &lt;li&gt;Fixed “static arg for &lt;code class="highlighter-rouge"&gt;[]&lt;/code&gt; causes deref to fail in typeof within template”
  928. (&lt;a href="https://github.com/nim-lang/Nimhttps://github.com/nim-lang/Nim/graphs/contributors?from=2020-10-16&amp;amp;to=2021-09-25&amp;amp;type=c/issues/11705"&gt;#11705&lt;/a&gt;)&lt;/li&gt;
  929. &lt;/ul&gt;
  930.  
  931. &lt;h1 id="footnotes"&gt;Footnotes&lt;/h1&gt;
  932.  
  933. &lt;p&gt;Tested on a 2.3 GHz 8-Core Intel Core i9, 2019 macOS 11.5 with 64GB RAM.&lt;/p&gt;
  934. &lt;ul&gt;
  935.  &lt;li&gt;[1] command used: &lt;code class="highlighter-rouge"&gt;nim c -d:danger&lt;/code&gt;.
  936. The binary size can be further reduced to 49K with stripping (&lt;code class="highlighter-rouge"&gt;--passL:-s&lt;/code&gt;)
  937. and link-time optimization (&lt;code class="highlighter-rouge"&gt;--passC:-flto&lt;/code&gt;).
  938. Statically linking against &lt;code class="highlighter-rouge"&gt;musl&lt;/code&gt; brings it under 5K - see
  939. &lt;a href="https://github.com/ee7/binary-size"&gt;here&lt;/a&gt; for more details.&lt;/li&gt;
  940.  &lt;li&gt;[2] commands used:
  941.    &lt;ul&gt;
  942.      &lt;li&gt;for Nim: &lt;code class="highlighter-rouge"&gt;nim c --forceBuild compiler/nim&lt;/code&gt;&lt;/li&gt;
  943.      &lt;li&gt;for Rust: &lt;code class="highlighter-rouge"&gt;./x.py build&lt;/code&gt;, &lt;a href="https://www.reddit.com/r/rust/comments/76jq7h/long_time_to_compile_rustc/"&gt;details&lt;/a&gt;&lt;/li&gt;
  944.      &lt;li&gt;for GCC: see &lt;a href="https://unix.stackexchange.com/questions/421822/how-long-does-it-take-to-compile-gcc-7-3-0"&gt;1&lt;/a&gt;
  945. &lt;a href="https://solarianprogrammer.com/2016/10/07/building-gcc-ubuntu-linux/"&gt;2&lt;/a&gt;&lt;/li&gt;
  946.      &lt;li&gt;for Clang: &lt;a href="https://quuxplusone.github.io/blog/2018/04/16/building-llvm-from-source/"&gt;details&lt;/a&gt;&lt;/li&gt;
  947.      &lt;li&gt;for Go: &lt;code class="highlighter-rouge"&gt;./make.bash&lt;/code&gt;&lt;/li&gt;
  948.    &lt;/ul&gt;
  949.  &lt;/li&gt;
  950.  &lt;li&gt;[3] a separate nimscript file can be used if needed to execute code at compile time
  951. before compiling the main program but it’s in the same language&lt;/li&gt;
  952. &lt;/ul&gt;</summary></entry><entry><title>It looks like I'm moving to Mastodon</title><link href="http://simonwillison.net/2022/Nov/5/mastodon/#atom-everything" rel="alternate"></link><published>2022-11-05T10:34:24.813000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Nov/5/mastodon/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  953.    &lt;tr&gt;
  954.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  955.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  956.            &lt;b&gt;
  957.                drpratten
  958.                &lt;a href="https://drpratten.newsblur.com/story/it-looks-like-im-mov/790:71c255"&gt;shared this story&lt;/a&gt;
  959.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  960.        &lt;/td&gt;
  961.    &lt;/tr&gt;
  962.    
  963. &lt;/table&gt;
  964.  
  965. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  966.  
  967. &lt;p&gt;Elon Musk laid off about half of Twitter this morning. There are many terrible stories emerging about how this went down, but one that particularly struck me was that he laid off &lt;a href="https://twitter.com/gerardkcohen/status/1588584461398347777"&gt;the entire accessibility team&lt;/a&gt;. For me this feels like a microcosm of the whole situation. Twitter's priorities are no longer even remotely aligned with my own.&lt;/p&gt;
  968. &lt;p&gt;I've been using Twitter since November 2006 - wow, that's 16 years! I've accumulated &lt;a href="https://twitter.com/simonw"&gt;42,804 followers there&lt;/a&gt;. It's been really good to me, and I've invested a lot of work generating content there to feed the machine.&lt;/p&gt;
  969. &lt;p&gt;I can't see myself putting the same work in to help the world's (current) richest man pay the billion dollar annual interest on the loans he took out to buy the place on a weird narcissistic whim.&lt;/p&gt;
  970. &lt;p&gt;So I've started to explore &lt;a href="https://joinmastodon.org/"&gt;Mastodon&lt;/a&gt; - and so far it's exceeding all of my expectations.&lt;/p&gt;
  971. &lt;p&gt;My new profile is at &lt;a href="https://fedi.simonwillison.net/@simon"&gt;https://fedi.simonwillison.net/@simon&lt;/a&gt; - you can follow &lt;code&gt;@simon@simonwillison.net&lt;/code&gt; in your Mastodon client of choice.&lt;/p&gt;
  972. &lt;h4&gt;Why Mastodon?&lt;/h4&gt;
  973. &lt;p&gt;The lesson I have learned from Twitter is that, even if a service you trust makes it past an IPO and becomes a public company, there's always a risk that it can be bought by someone who very much doesn't share your values.&lt;/p&gt;
  974. &lt;p&gt;Mastodon has been designed to avoid this from the start. It operates as a federated network of independent servers, each of which is run by a different person or organization with the ability to set their own rules and standards.&lt;/p&gt;
  975. &lt;p&gt;You can also host your own instance on your own domain.&lt;/p&gt;
  976. &lt;p&gt;My initial nudge to try this out was from Jacob and Andrew, who figured out how to do exactly that:&lt;/p&gt;
  977. &lt;ul&gt;
  978. &lt;li&gt;
  979. &lt;a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/"&gt;The Fediverse, And Custom Domains&lt;/a&gt; - Andrew Godwin&lt;/li&gt;
  980. &lt;li&gt;
  981. &lt;a href="https://jacobian.org/til/my-mastodon-instance/"&gt;Setting up a personal Fediverse ID / Mastodon instance&lt;/a&gt; - Jacob Kaplan-Moss&lt;/li&gt;
  982. &lt;/ul&gt;
  983. &lt;p&gt;Andrew and Jacob both opted to pay &lt;a href="https://masto.host/"&gt;masto.host&lt;/a&gt; to run their instance for them. I've decided to do the same. It's on my domain, which means if I ever want to run it myself I can do so without any visible disruption.&lt;/p&gt;
  984. &lt;p&gt;I'm paying $9/month. I find it darkly amusing that this is a dollar more than Elon has been planning to charge for users to keep their verified status on Twitter!&lt;/p&gt;
  985. &lt;p&gt;If you don't want to use your own domain there are plenty of &lt;a href="https://joinmastodon.org/servers"&gt;good free options&lt;/a&gt;, though I recommend reading Ash Furrow's &lt;a href="https://ashfurrow.com/blog/mastodon-technology-shutdown/"&gt;post about his shutdown of mastodon.technology&lt;/a&gt; to help understand how much of a commitment it is for the admins who run a free instance.&lt;/p&gt;
  986. &lt;p&gt;&lt;a href="https://mastodon.ie/@klillington/109287983727726762"&gt;This post&lt;/a&gt; by &lt;code&gt;@klillington@mastodon.ie&lt;/code&gt; has some good links for getting started understanding the system. I particularly enjoyed &lt;a href="https://docs.google.com/document/d/1D9gfeKg_-hlsU66R-dLEvUeyMsqEfyIx2pnfUeX0t_E/edit"&gt;Nikodemus’ Guide to Mastodon&lt;/a&gt; as it matched most closely the questions I had at first.&lt;/p&gt;
  987. &lt;h4&gt;Initial impressions&lt;/h4&gt;
  988. &lt;p&gt;Despite taking the second hardest route to joining Mastodon (the hardest route is &lt;a href="https://docs.joinmastodon.org/user/run-your-own/"&gt;spinning up a new server from scratch&lt;/a&gt;) it took me just less than an hour to get started. I wrote up &lt;a href="https://til.simonwillison.net/mastodon/custom-domain-mastodon"&gt;a TIL describing what I did&lt;/a&gt; - more or less directly following the steps described by Andrew and Jacob.&lt;/p&gt;
  989. &lt;p&gt;I signed into my new account and started following people, by pasting in their full Mastodon names (mine is &lt;code&gt;@simon@simonwillison.net&lt;/code&gt;). I was initially surprised that this did nothing: your timeline won't be populated until the people you follow have said something.&lt;/p&gt;
  990. &lt;p&gt;And then people started to toot, and my timeline slowly kicked into life.&lt;/p&gt;
  991. &lt;p&gt;And it was really, really pleasant.&lt;/p&gt;
  992. &lt;p&gt;My fear was that everyone on Mastodon would spend all of their time talking about Mastodon - especially given the current news. And sure, there's some of that. (I'm obviously guilty here.)&lt;/p&gt;
  993. &lt;p&gt;But there's lots of stuff that isn't that. The 500 character limit gives people a bit more space, and replies work much like they do on Twitter. I followed a bunch of people, replied to a few things, posted some pelican photos and it all worked pretty much exactly as I hoped it would.&lt;/p&gt;
  994. &lt;p&gt;It's also attracting very much the kind of people I want to hang out with. Mastodon is, unsurprisingly, entirely populated by nerds. But the variety of nerds is highly pleasing to me.&lt;/p&gt;
  995. &lt;p&gt;I've been checking in on the &lt;code&gt;#introduction&lt;/code&gt; hashtag (hashtag search is much more useful than regular search on Mastodon because it spans servers in a way I've not quite understood yet) and I'm seeing artists, academics, writers, historians. It's not just programmers. The variety of interest areas on Twitter is the thing I'll miss most about it, so seeing that start to become true on Mastodon too is a huge relief.&lt;/p&gt;
  996. &lt;p&gt;Considering how complicated a federated network is, the fact that it's this smooth to use is really impressive. It helps that they've had six years to iron out the wrinkles - the network seems to be coping with the massive influx of new users over the past few days really well.&lt;/p&gt;
  997. &lt;p&gt;I'm also appreciating how much thought has been put into the design of the system. Quote tweeting isn't supported, for reasons explained by Eugen Rochko &lt;a href="https://blog.joinmastodon.org/2018/07/cage-the-mastodon/"&gt;in this 2018 post&lt;/a&gt;:&lt;/p&gt;
  998. &lt;blockquote&gt;
  999. &lt;p&gt;Another feature that has been requested almost since the start, and which I keep rejecting is &lt;strong&gt;quoting messages&lt;/strong&gt;. Coming back to my disclaimer, of course it’s impossible to prevent people from sharing screenshots or linking to public resources, but quoting messages is immediately actionable. It makes it a lot easier for people to immediately engage with the quoted content… and it usually doesn’t lead to anything good. When people use quotes to reply to other people, conversations become performative power plays. “Heed, my followers, how I dunk on this fool!” When you use the reply function, your message is broadcast only to people who happen to follow you both. It means one person’s follower count doesn’t play a massive role in the conversation. A quote, on the other hand, very often invites the followers to join in on the conversation, and whoever has got more of them ends up having the upper hand and massively stressing out the other person.&lt;/p&gt;
  1000. &lt;/blockquote&gt;
  1001. &lt;p&gt;Mastodon so far feels much more chilled out than Twitter. I get the impression this is by design. When there's no profit motive to "maximize engagement" you can design features to optimize for a different set of goals.&lt;/p&gt;
  1002. &lt;h4&gt;And there's an API&lt;/h4&gt;
  1003. &lt;p&gt;Unsurprisingly, Mastodon has a powerful API. It's necessary for the system itself to work - those toots aren't going to federate themselves!&lt;/p&gt;
  1004. &lt;p&gt;Poking around with it is &lt;em&gt;really fun&lt;/em&gt;.&lt;/p&gt;
  1005. &lt;p&gt;First, a friendly note. &lt;a href="https://bsd.network/@pamela/109287805657081451"&gt;@pamela@bsd.network wrote the following&lt;/a&gt;:&lt;/p&gt;
  1006. &lt;blockquote&gt;
  1007. &lt;p&gt;Hacky folks, please resist finding ways to scrape the fediverse, build archives, automate tools and connect to people via bot without their consent.&lt;/p&gt;
  1008. &lt;p&gt;[...]&lt;/p&gt;
  1009. &lt;p&gt;Whatever your thing is, make it 100% opt-in. Make it appropriate for a significantly more at-risk user than you are. Make sure it forgets things, purges info about servers it can't contact, can't operate in any sort of logged-in mode where consent is an issue.&lt;/p&gt;
  1010. &lt;p&gt;We will straight up help advertise your cool thing if it respects users properly and takes the time to consider the safety and preferences of every person involved. There are a lot of fun, thoughtfully-designed toys! And there are a lot of people really tired of having to come and tell you off when you wanted to help, honestly. Help yourself and ask around before you flip on your cool new thing, let folks point out what you're missing.&lt;/p&gt;
  1011. &lt;/blockquote&gt;
  1012. &lt;p&gt;(Read &lt;a href="https://bsd.network/@pamela/109287805657081451"&gt;the whole thing&lt;/a&gt;, it's great.)&lt;/p&gt;
  1013. &lt;p&gt;So far I've done a couple of things.&lt;/p&gt;
  1014. &lt;p&gt;I built &lt;a href="https://github.com/simonw/scrape-fediverse"&gt;a Git scraper&lt;/a&gt; to track the list of peer instances that various servers have picked up. This feels like a reasonable piece of public information to track, and it's a fun way to get a feel for how the network is growing.&lt;/p&gt;
  1015. &lt;p&gt;I also figured out how to &lt;a href="https://til.simonwillison.net/mastodon/export-timeline-to-sqlite"&gt;Export a Mastodon timeline to SQLite&lt;/a&gt; using the &lt;a href="https://docs.joinmastodon.org/methods/timelines/"&gt;timelines API&lt;/a&gt; and my &lt;a href="https://github.com/simonw/paginate-json"&gt;paginate-json&lt;/a&gt; and &lt;a href="https://sqlite-utils.datasette.io/"&gt;sqlite-utils&lt;/a&gt; CLI tools, so I could explore it in Datasette.&lt;/p&gt;
  1016. &lt;p&gt;Running my own instance means I have no ethical qualms at all about hammering away at my own API endpoint as fast as I like!&lt;/p&gt;
  1017. &lt;p&gt;I like to follow a lot of different people, and I don't like to feel committed to reading everything that crosses my timeline - so I expect that the feature I'll miss most from Twitter will be the algorithmic timeline! This is very much not in the spirit of Mastodon, which is firmly committed to a reverse chronological sort order.&lt;/p&gt;
  1018. &lt;p&gt;But with access to the raw data I can start experimenting with alternative timeline solutions myself.&lt;/p&gt;
  1019. &lt;p&gt;I'm somewhat intrigued by the idea of iterating on my own algorithmic timeline, to try and keep the variety of content high while hopefully ensuring I'm most likely to catch the highlights (whatever that means.)&lt;/p&gt;
  1020. &lt;p&gt;Past experience building recommendation systems has taught me that one of the smartest seeming things you can do is pick the top 100 most interesting looking things based on very loose criteria and then apply &lt;code&gt;random.shuffle()&lt;/code&gt; to produce a final feed!&lt;/p&gt;
  1021. &lt;p&gt;I have a hunch that this is going to be a lot of fun.&lt;/p&gt;</summary><category term="twitter"></category><category term="mastodon"></category></entry><entry><title>Digitizing 55,000 pages of civic meetings</title><link href="http://simonwillison.net/2022/Aug/22/digitizing-55000-pages-of-civic-meetings/#atom-everything" rel="alternate"></link><published>2022-08-22T21:17:34.366000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Aug/22/digitizing-55000-pages-of-civic-meetings/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1022.    &lt;tr&gt;
  1023.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1024.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1025.            &lt;b&gt;
  1026.                drpratten
  1027.                &lt;a href="https://drpratten.newsblur.com/story/digitizing-55000-pag/790:21ccf3"&gt;shared this story&lt;/a&gt;
  1028.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1029.        &lt;/td&gt;
  1030.    &lt;/tr&gt;
  1031.    
  1032. &lt;/table&gt;
  1033.  
  1034. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1035.  
  1036. &lt;p&gt;&lt;a href="https://phildini.dev/digitizing-55-000-pages-of-civic-meetings"&gt;Digitizing 55,000 pages of civic meetings&lt;/a&gt;&lt;/p&gt;
  1037. &lt;p&gt;Philip James has been building public, searchable archives of city council meetings for various cities - Oakland and Alamedia so far - using my s3-ocr script to run Textract OCR against the PDFs of the minutes, and deploying them to Fly using Datasette. This is a really cool project, and very much the kind of thing I&amp;#x27;ve been hoping to support with the tools I&amp;#x27;ve been building.&lt;/p&gt;
  1038.  
  1039.    &lt;p&gt;Via &lt;a href="https://twitter.com/phildini/status/1561745329971613696"&gt;@phildini&lt;/a&gt;&lt;/p&gt;</summary><category term="archiving"></category><category term="ocr"></category><category term="fly"></category><category term="datasette"></category><category term="politicalhacking"></category></entry><entry><title>Turning SQLite into a distributed database</title><link href="http://simonwillison.net/2022/Aug/21/mvsqlite/#atom-everything" rel="alternate"></link><published>2022-08-21T21:02:43.712000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Aug/21/mvsqlite/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1040.    &lt;tr&gt;
  1041.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1042.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1043.            &lt;b&gt;
  1044.                drpratten
  1045.                &lt;a href="https://drpratten.newsblur.com/story/turning-sqlite-into-/790:25e2d9"&gt;shared this story&lt;/a&gt;
  1046.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1047.        &lt;/td&gt;
  1048.    &lt;/tr&gt;
  1049.    
  1050. &lt;/table&gt;
  1051.  
  1052. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1053.  
  1054. &lt;p&gt;&lt;a href="https://univalence.me/posts/mvsqlite"&gt;Turning SQLite into a distributed database&lt;/a&gt;&lt;/p&gt;
  1055. &lt;p&gt;Heyang Zhou introduces mvSQLite, his brand new open source &amp;quot;SQLite-compatible distributed database&amp;quot; built in Rust on top of Apple&amp;#x27;s FoundationDB. This is a very promising looking new entry into the distributed/replicated SQLite space: FoundationDB was designed to provide low-level primitives that tools like this could build on top of.&lt;/p&gt;
  1056.  
  1057.    &lt;p&gt;Via &lt;a href="https://news.ycombinator.com/item?id=32539360"&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</summary><category term="sqlite"></category><category term="rust"></category><category term="databases"></category></entry><entry><title>Shoelace</title><link href="http://simonwillison.net/2022/Aug/20/shoelace/#atom-everything" rel="alternate"></link><published>2022-08-20T23:34:26.186000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Aug/20/shoelace/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1058.    &lt;tr&gt;
  1059.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1060.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1061.            &lt;b&gt;
  1062.                drpratten
  1063.                &lt;a href="https://drpratten.newsblur.com/story/shoelace/790:371fc3"&gt;shared this story&lt;/a&gt;
  1064.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1065.        &lt;/td&gt;
  1066.    &lt;/tr&gt;
  1067.    
  1068. &lt;/table&gt;
  1069.  
  1070. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1071.  
  1072. &lt;p&gt;&lt;a href="https://shoelace.style/"&gt;Shoelace&lt;/a&gt;&lt;/p&gt;
  1073. &lt;p&gt;Saw this for the first time today: it&amp;#x27;s a relatively new library of framework-agnostic Web Components, built on lit-html and covering a huge array of common functionality: buttons and sliders and dialogs and drawer interfaces and dropdown menus and so on. The design is very clean, the documentation is superb - and it looks like you can cherry pick just the components you are using for a pretty lean addition to your page weight. So refreshing to see libraries like this that really take advantage of modern web standards.&lt;/p&gt;
  1074.  
  1075.    &lt;p&gt;Via &lt;a href="https://twitter.com/AdamRackis/status/1561075648143278080"&gt;Adam Rackis&lt;/a&gt;&lt;/p&gt;</summary><category term="webcomponents"></category><category term="css"></category><category term="webstandards"></category><category term="javascript"></category></entry><entry><title>Accelerating Value Flow with SAFe</title><link href="https://www.scaledagileframework.com/blog/accelerating-value-flow-with-safe/" rel="alternate"></link><published>2022-08-19T07:23:56.267000Z</published><author><name>Dean Leffingwell</name></author><id>https://www.scaledagileframework.com/blog/accelerating-value-flow-with-safe/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1076.    &lt;tr&gt;
  1077.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1078.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1079.            &lt;b&gt;
  1080.                drpratten
  1081.                &lt;a href="https://drpratten.newsblur.com/story/accelerating-value-f/2104884:130fdd"&gt;shared this story&lt;/a&gt;
  1082.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/2104884.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Scaled Agile Framework.&lt;/b&gt;
  1083.        &lt;/td&gt;
  1084.    &lt;/tr&gt;
  1085.    
  1086. &lt;/table&gt;
  1087.  
  1088. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1089.  
  1090. &lt;p&gt;With its roots in Agile, Lean, and DevOps, SAFe has always been a flow-based system. Empowered, cross-functional Agile teams pull work from an economically prioritized backlog to deliver the most value in the shortest time. The Continuous Delivery Pipeline helps teams deliver quickly and directly to the customer.&lt;/p&gt;
  1091. &lt;p&gt;But the goal of the enterprise isn’t to be Agile, Lean, or SAFe; the goal is to &lt;em&gt;provide a continuous flow of value to the customer.&lt;/em&gt; That is the only way to thrive in this age of constant disruption and increasingly complex technologies.&lt;/p&gt;
  1092. &lt;p&gt;This begs the question of what really constitutes flow and how best to achieve it. To that end, we’ve been focused on improving our guidance to better describe how flow systems work and what impediments teams are likely to encounter. Of course, the usual suspects of excess WIP and large batch sizes are ever-present and must be continuously addressed, but that doesn’t begin to address all the potential issues that impede flow. The figure below illustrates eight properties that are common to every flow system and provides clues as to where interruptions to flow are likely to occur.&lt;/p&gt;
  1093. &lt;figure class="wp-caption aligncenter" id="attachment_52369" style="width: 700px;"&gt;&lt;img alt="Figure 1. All flow systems have eight common properties" class="wp-image-57839" height="700" src="https://www.scaledagileframework.com/wp-content/uploads/2022/08/Flow-keystone.svg" width="700" /&gt;&lt;figcaption class="wp-caption-text" id="caption-attachment-52369"&gt;Figure 1. All flow systems have eight common properties&lt;/figcaption&gt;&lt;/figure&gt;
  1094. &lt;p&gt;With this understanding we are excited to announce a three-article series to help teams better accelerate flow through their value streams:&lt;/p&gt;
  1095. &lt;ul&gt;
  1096. &lt;li&gt;The&lt;strong&gt; &lt;a href="https://www.scaledagileframework.com/value-stream-management-in-safe/" rel="noopener" target="_blank"&gt;Value Stream Management&lt;/a&gt;&lt;/strong&gt; article has been updated to more clearly articulate how Lean thinking incorporates flow to guide continuous value stream improvement.&lt;/li&gt;
  1097. &lt;li&gt;&lt;a href="https://www.scaledagileframework.com/accelerating-flow-with-safe/" rel="noopener" target="_blank"&gt;&lt;strong&gt;Accelerating Flow with SAFe&lt;/strong&gt;&lt;/a&gt; is a new article that provides the context for thinking about flow through the full Business Agility Value Stream (BAVS). The BAVS provides guidance for delivering value, from identifying a new business opportunity to delivering solutions that address that opportunity.&lt;/li&gt;
  1098. &lt;li&gt;&lt;a href="https://www.scaledagileframework.com/make-value-flow-without-interruptions/" rel="noopener" target="_blank"&gt;&lt;strong&gt;Make Value Flow without Interruptions&lt;/strong&gt;&lt;/a&gt; is a new article that describes how flow systems work and, more importantly, how to improve flow by identifying and addressing interruptions to flow that teams are likely to encounter. This article describes a set of &amp;#8216;eight flow accelerators&amp;#8217; that can be used to debug and improve flow at the Team, ART, Large Solution, and Portfolio level.&lt;/li&gt;
  1099. &lt;/ul&gt;
  1100. &lt;p&gt;In addition, we recently introduced two new articles on Kanban to provide better guidance on achieving flow using Team Kanban in SAFe. And of course, Scrum also contributes to flow, so we are releasing updates to the &lt;a href="https://www.scaledagileframework.com/scrumxp/" rel="noopener" target="_blank"&gt;ScrumXP&lt;/a&gt; and &lt;a href="https://www.scaledagileframework.com/scrum-master/" rel="noopener" target="_blank"&gt;Scrum Master&lt;/a&gt; articles that emphasize how to better enable flow with Scrum.&lt;/p&gt;
  1101. &lt;p&gt;With these new articles and updates, our goal is to help teams and the enterprise make significant improvements in the velocity of their value delivery and in their ability to adapt quickly in these turbulent times.&lt;/p&gt;
  1102. &lt;p&gt;These articles—like all of SAFe—are part of a continuous learning journey that is focused on delivering innovative solutions to the market faster and better. Advancing our thinking about flow is an important part of the journey.&lt;/p&gt;
  1103. &lt;p&gt;—Dean and the Framework team&lt;/p&gt;
  1104. &lt;p&gt;The post &lt;a href="https://www.scaledagileframework.com/blog/accelerating-value-flow-with-safe/" rel="nofollow"&gt;Accelerating Value Flow with SAFe&lt;/a&gt; appeared first on &lt;a href="https://www.scaledagileframework.com" rel="nofollow"&gt;Scaled Agile Framework&lt;/a&gt;.&lt;/p&gt;</summary><category term="extended safe guidance"></category><category term="news"></category><category term="safe framework updates"></category></entry><entry><title>Review The Professional Agile Leader</title><link href="https://hennyportman.wordpress.com/2022/08/10/review-the-professional-agile-leader/" rel="alternate"></link><published>2022-08-11T01:58:32.888000Z</published><author><name>hennyportman</name></author><id>https://hennyportman.wordpress.com/2022/08/10/review-the-professional-agile-leader/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1105.    &lt;tr&gt;
  1106.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1107.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1108.            &lt;b&gt;
  1109.                drpratten
  1110.                &lt;a href="https://drpratten.newsblur.com/story/review-the-professio/5128643:117961"&gt;shared this story&lt;/a&gt;
  1111.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/5128643.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Henny Portman&amp;#x27;s Blog.&lt;/b&gt;
  1112.        &lt;/td&gt;
  1113.    &lt;/tr&gt;
  1114.    
  1115. &lt;/table&gt;
  1116.  
  1117. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1118.  
  1119. &lt;div class="wp-block-media-text alignwide is-stacked-on-mobile"&gt;&lt;figure class="wp-block-media-text__media"&gt;&lt;img alt="" class="wp-image-7620 size-full" src="https://hennyportman.files.wordpress.com/2022/08/550x718.jpg?w=550" /&gt;&lt;/figure&gt;&lt;div class="wp-block-media-text__content"&gt;
  1120. &lt;p&gt;&lt;em&gt;The professional agile leader – The leader’s journey toward growing mature agile teams and organizations&lt;/em&gt; by Ron Eringa, Kurt Bittner and Laurens Bonnema provides a detailed understanding of the leader&amp;#8217;s role in an agile transformation.&lt;/p&gt;
  1121. &lt;/div&gt;&lt;/div&gt;
  1122.  
  1123.  
  1124.  
  1125. &lt;p&gt;&lt;/p&gt;
  1126.  
  1127.  
  1128.  
  1129. &lt;p&gt;When talking about reasons why so many agile transformations fail, I often show a picture of two rhinos colliding, and saying that this is the reason why. Next, I add two text boxes over the rhinos with company culture and agile culture. I can now refer to this book if you want an in-depth explanation of this clash.&lt;/p&gt;
  1130.  
  1131.  
  1132.  
  1133. &lt;p&gt;The book is divided in eight chapters. the first chapter zooms in on the situation where you see yourself as an organization being overtaken by competitors. You may be very efficient but too unwieldy to respond quickly to the many changes that come your way. One solution is to take over another company that is already much more agile. This is also the case in the book where Reliable Energy takes over Energy Bridge and we follow the CEO who wants to make her organization more agile.&lt;/p&gt;
  1134.  
  1135.  
  1136.  
  1137. &lt;p&gt;The second chapter shows what it means to form empowering cross-functional teams who discovered their purpose and the role of the leader. Key is that the teams must form themselves and that this takes time.&lt;/p&gt;
  1138.  
  1139.  
  1140.  
  1141. &lt;p&gt;In the third chapter the emphasis is on the impact. Forget output but focus on the impact by framing goals in terms of customer outcomes instead of things that are produces. From plan-driven goals to goal-driven planning (tactical – intermediate – strategic goals).&lt;/p&gt;
  1142.  
  1143.  
  1144.  
  1145. &lt;p&gt;Chapter four shows how teams and their leaders are changing by becoming more feedback driven. This is all about decision latency, levels of delegation, decentralized decision-making, and intrinsic motivation.&lt;/p&gt;
  1146.  
  1147.  
  1148.  
  1149. &lt;p&gt;In chapter five we see the issues leaders are facing when they are halfway their agile transformation. This refers back to the clash between the rhinos at the start of this review. The original way of working with checks and balances versus the agile mind mindset and what that means to the people involved. Self-managing teams require leaders with a catalytic leadership style (collective focus: sharing, enabling, diversity, acceptance and supportive).&lt;/p&gt;
  1150.  
  1151.  
  1152.  
  1153. &lt;p&gt;Chapter six shows that in an agile organization less and less hierarchical leaders are needed but all the more agile leaders. Where leadership should be seen as an activity and not a role. How to grow new leaders, how to grow mature teams and to escape the silos by breaking them down.&lt;/p&gt;
  1154.  
  1155.  
  1156.  
  1157. &lt;p&gt;In chapter seven the authors explain that Kotter’s dual operating system cannot be used for ever. At a certain point you must decide to fully go for the agile way otherwise you will fall back to the old ways of working.&amp;nbsp;&lt;em&gt;I am not sure if this is what Kotter has in mind with his dual operating system.&lt;/em&gt;&lt;/p&gt;
  1158.  
  1159.  
  1160.  
  1161. &lt;p&gt;The final chapter puts the agile culture in the spotlights. The social behavior and norms that people in the organization exhibit, including their beliefs and habits. Without this agile culture your agile transformation will fail and be aware this transformation will never end.&lt;/p&gt;
  1162.  
  1163.  
  1164.  
  1165. &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
  1166.  
  1167.  
  1168.  
  1169. &lt;p&gt;&lt;em&gt;a compact and easy to read book that explains the role of a leader in an agile transformation in a clear, straightforward, and practical way. the case used of a merger of two companies as a common thread makes very clear the issues and friction a leader faces in an agile transformation.&lt;/em&gt;&lt;/p&gt;
  1170.  
  1171.  
  1172.  
  1173. &lt;p&gt;&lt;em&gt;I missed the agile leader’s role in sharing knowledge and lessons learnt by setting up communities of practice (CoPs), chapters, guilds et cetera. The issues and what to do about them when multiple teams are necessary to work on a single product are presented very simplistically but this is probably beyond the scope of this book.&lt;/em&gt;&lt;/p&gt;
  1174.  
  1175.  
  1176.  
  1177. &lt;p&gt;&lt;em&gt;In my opinion an absolute must read if you are in the middle of or want to start an agile transformation.&lt;/em&gt;&lt;/p&gt;
  1178.  
  1179.  
  1180.  
  1181. &lt;p&gt;To order: The Professional Agile Leader: &lt;a href="https://www.managementboek.nl/boek/9780137591510/the-professional-agile-leader-ron-eringa?affiliate=4230" rel="noreferrer noopener" target="_blank"&gt;managementboek.nl&lt;/a&gt;, &lt;a href="https://partner.bol.com/click/click?p=2&amp;amp;t=url&amp;amp;s=1011574&amp;amp;f=TXL&amp;amp;url=https%3A%2F%2Fwww.bol.com%2Fnl%2Fnl%2Ff%2Fthe-professional-agile-leader%2F9300000048387062%2F&amp;amp;name=Professional%20Agile%20Leader%2C%20The" rel="noreferrer noopener" target="_blank"&gt;bol.com&lt;/a&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;img src="https://1.gravatar.com/avatar/a641ee0e164f9d3823f29b79b1b94419?s=96&amp;d=identicon&amp;r=G" /&gt;</summary><category term="agile"></category><category term="english post"></category><category term="review"></category></entry><entry><title>Introducing sqlite-html: query, parse, and generate HTML in SQLite</title><link href="http://simonwillison.net/2022/Aug/3/sqlite-html/#atom-everything" rel="alternate"></link><published>2022-08-04T09:38:56.546000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Aug/3/sqlite-html/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1182.    &lt;tr&gt;
  1183.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1184.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1185.            &lt;b&gt;
  1186.                drpratten
  1187.                &lt;a href="https://drpratten.newsblur.com/story/introducing-sqlite-h/790:d8863c"&gt;shared this story&lt;/a&gt;
  1188.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1189.        &lt;/td&gt;
  1190.    &lt;/tr&gt;
  1191.    
  1192. &lt;/table&gt;
  1193.  
  1194. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1195.  
  1196. &lt;p&gt;&lt;a href="https://observablehq.com/@asg017/introducing-sqlite-html"&gt;Introducing sqlite-html: query, parse, and generate HTML in SQLite&lt;/a&gt;&lt;/p&gt;
  1197. &lt;p&gt;Another brilliant SQLite extension module from Alex Garcia, this time written in Go. sqlite-html adds a whole family of functions to SQLite for parsing and constructing HTML strings, built on the Go goquery and cascadia libraries. Once again, Alex uses an Observable notebook to describe the new features, with embedded interactive examples that are backed by a Datasette instance running in Fly.&lt;/p&gt;
  1198.  
  1199.    &lt;p&gt;Via &lt;a href="https://til.simonwillison.net/sqlite/trying-macos-extensions"&gt;My TIL on Trying out SQLite extensions on macOS&lt;/a&gt;&lt;/p&gt;</summary><category term="sqlite"></category><category term="datasette"></category><category term="go"></category><category term="html"></category><category term="alexgarcia"></category></entry><entry><title>100 Million Monte Carlo Trials in 88 Bytes!</title><link href="https://www.probabilitymanagement.org/blog/2022/8/1/100-million-monte-carlo-trials-in-88-bytes" rel="alternate"></link><published>2022-08-02T20:23:30.271000Z</published><author><name>Probability Management</name></author><id>https://www.probabilitymanagement.org/blog/2022/8/1/100-million-monte-carlo-trials-in-88-bytes</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1200.    &lt;tr&gt;
  1201.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1202.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1203.            &lt;b&gt;
  1204.                drpratten
  1205.                &lt;a href="https://drpratten.newsblur.com/story/100-million-monte-ca/6964098:fcf04e"&gt;shared this story&lt;/a&gt;
  1206.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/6964098.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Limbic Analytics from ProbabilityManagement.org - Probability Management.&lt;/b&gt;
  1207.        &lt;/td&gt;
  1208.    &lt;/tr&gt;
  1209.    
  1210. &lt;/table&gt;
  1211.  
  1212. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1213.  
  1214. &lt;h2&gt;&lt;strong&gt;ProbabilityManagement.org Announces the Metalog Interface&lt;/strong&gt;&lt;/h2&gt;&lt;p class=""&gt;by Sam L. Savage&lt;/p&gt;
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.    
  1236.  
  1237.    
  1238.  
  1239.      
  1240.  
  1241.      
  1242.        &lt;figure class="
  1243.              sqs-block-image-figure
  1244.              intrinsic
  1245.            "&gt;
  1246.          
  1247.        
  1248.        
  1249.  
  1250.        
  1251.          
  1252.            
  1253.          
  1254.            
  1255.              &lt;img alt="" class="thumb-image" src="https://images.squarespace-cdn.com/content/v1/5a4f82d7a8b2b04080732f87/93d41e2d-34ee-4d4c-bea8-5416e965f454/MetalogInterface.png?format=1000w" /&gt;
  1256.            
  1257.          
  1258.        
  1259.          
  1260.        
  1261.  
  1262.        
  1263.      
  1264.        &lt;/figure&gt;
  1265.      
  1266.  
  1267.    
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274. &lt;h3&gt;&lt;strong&gt;Wait a Minute!&lt;/strong&gt;&lt;/h3&gt;&lt;p class=""&gt;Claude Shannon’s &lt;a href="https://en.wikipedia.org/wiki/Information_theory"&gt;&lt;strong&gt;information theory&lt;/strong&gt;&lt;/a&gt; says you can’t store 100 million numbers in 88 bytes. &lt;/p&gt;&lt;p class=""&gt;True, but Tom Keelin’s &lt;a href="https://www.probabilitymanagement.org/metalog" target="_blank"&gt;&lt;strong&gt;Metalog distribution&lt;/strong&gt;&lt;/a&gt;, driven by Doug Hubbard’s &lt;a href="https://www.probabilitymanagement.org/hdr" target="_blank"&gt;&lt;strong&gt;HDR pseudo-random number generator&lt;/strong&gt;&lt;/a&gt;, can &lt;strong&gt;&lt;em&gt;create&lt;/em&gt;&lt;/strong&gt; identical streams of up to 100 million random variates on any platform. Now &lt;strong&gt;Chance&lt;/strong&gt;Calc 1.3, currently in beta, includes an interface to Tom Keelin’s elegant Excel Metalog templates. Using these templates, you can create 3.0 JSON libraries or paste Metalog simulation formulas directly into Excel for use with &lt;a href="https://www.probabilitymanagement.org/chancecalc" target="_blank"&gt;&lt;strong&gt;ChanceCalc&lt;/strong&gt;&lt;/a&gt;, the &lt;a href="https://www.probabilitymanagement.org/sipmath-modeler-tools" target="_blank"&gt;&lt;strong&gt;SIPmath Modeler Tools&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.palisade.com/risk/" target="_blank"&gt;&lt;strong&gt;@RISK&lt;/strong&gt;&lt;/a&gt;, or &lt;a href="https://www.oracle.com/applications/crystalball/" target="_blank"&gt;&lt;strong&gt;Crystal Ball&lt;/strong&gt;&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;How Does This Work?&lt;/strong&gt;&lt;/h3&gt;&lt;p class=""&gt;Like Taylor series, Metalogs can take any number of terms (see &lt;a href="https://en.wikipedia.org/wiki/Metalog_distribution" target="_blank"&gt;&lt;strong&gt;Wikipedia&lt;/strong&gt;&lt;/a&gt;). But for practical purposes, 18 parameters will model virtually any continuous distribution you will face. In its standard configuration, the HDR generator takes up to four initialization seeds, which provides great flexibility when sharing &lt;a href="https://www.probabilitymanagement.org/30-standard" target="_blank"&gt;&lt;strong&gt;SIPMath™ 3.0&lt;/strong&gt;&lt;/a&gt; Libraries with others. The version of the HDR built into our tools, which has been limited in numerical accuracy to support Excel, can generate 100 million random numbers before the rubber band breaks (or rather, before the results on the &lt;a href="https://webhome.phy.duke.edu/~rgb/General/dieharder.php"&gt;&lt;strong&gt;dieharder&lt;/strong&gt;&lt;/a&gt; test deteriorate). So that’s a total of 22 input parameters (88 bytes) to generate nearly any distribution. The open &lt;a href="https://www.probabilitymanagement.org/30-standard" target="_blank"&gt;&lt;strong&gt;SIPmath 3.0 Standard&lt;/strong&gt;&lt;/a&gt; wraps these 22 parameters in JSON objects containing metadata that can be used in Excel, Python, R, or virtually any other computer platform.&lt;/p&gt;&lt;p class=""&gt;The first commercial package to read and write the SIPmath 3.0 Standard was Frontline Systems’ &lt;a href="https://www.solver.com/blog/analytic-solver-v20215-simulation-machine-learning-decision-power" target="_blank"&gt;&lt;strong&gt;Analytic Solver&lt;/strong&gt;&lt;/a&gt;. This powerful Excel add-in performs both simulation and optimization, including stochastic optimization. Our new interface lets you use Tom’s templates directly.  &lt;/p&gt;&lt;h3&gt;&lt;strong&gt;Want to Learn More?&lt;/strong&gt;&lt;/h3&gt;
  1275.  
  1276.  
  1277. &lt;p class=""&gt;We are looking for beta testers for this new software. All those interested in becoming beta testers will need to attend a free information session where I will demonstrate the software. &lt;/p&gt;
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  &lt;a class="sqs-block-button-element--small sqs-button-element--tertiary sqs-block-button-element" href="http://events.constantcontact.com/register/event?llr=lr9yi7pab&amp;amp;oeidk=a07ejbfvp99be2c2a67" target="_blank"&gt;
  1284.    Learn more and Register
  1285.  &lt;/a&gt;
  1286.  
  1287. &lt;p class=""&gt;Watch Sam Savage and Alex Sidorenko discuss the new Metalog interface&lt;/p&gt;&lt;p class=""&gt;© Copyright 2022, Sam L. Savage&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;img src="https://images.squarespace-cdn.com/content/v1/5a4f82d7a8b2b04080732f87/1659393720374-NOIN3MNX1NII00QB8SI0/MetalogInterface.png?format=1500w" /&gt;</summary></entry><entry><title>Reduce Friction</title><link href="http://simonwillison.net/2022/Jul/25/reduce-friction/#atom-everything" rel="alternate"></link><published>2022-07-26T02:35:20.407000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Jul/25/reduce-friction/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1288.    &lt;tr&gt;
  1289.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1290.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1291.            &lt;b&gt;
  1292.                drpratten
  1293.                &lt;a href="https://drpratten.newsblur.com/story/reduce-friction/790:3cf953"&gt;shared this story&lt;/a&gt;
  1294.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1295.        &lt;/td&gt;
  1296.    &lt;/tr&gt;
  1297.    
  1298. &lt;/table&gt;
  1299.  
  1300. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1301.  
  1302. &lt;p&gt;&lt;a href="https://blog.ceejbot.com/posts/reduce-friction/"&gt;Reduce Friction&lt;/a&gt;&lt;/p&gt;
  1303. &lt;p&gt;Outstanding essay on software engineering friction and development team productivity by C J Silverio: it explains the concept of &amp;quot;friction&amp;quot; (and gives great definitions of &amp;quot;process&amp;quot;, &amp;quot;ceremony&amp;quot; and &amp;quot;formality&amp;quot; in the process) as it applies to software engineering, lays out the challenges involved in getting organizations to commit to reducing it and then provides actionable advice on how to get consensus and where to invest your efforts in order to make things better.&lt;/p&gt;</summary><category term="softwareengineering"></category><category term="management"></category></entry><entry><title>On Coordination Costs: Moving A Couch, And Painting A Room</title><link href="https://itrevolution.com/on-coordination-costs-moving-a-couch-and-painting-a-room/" rel="alternate"></link><published>2022-07-15T20:49:21.754000Z</published><author><name>Gene Kim</name></author><id>https://itrevolution.com/on-coordination-costs-moving-a-couch-and-painting-a-room/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1304.    &lt;tr&gt;
  1305.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1306.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1307.            &lt;b&gt;
  1308.                drpratten
  1309.                &lt;a href="https://drpratten.newsblur.com/story/on-coordination-cost/1503073:605720"&gt;shared this story&lt;/a&gt;
  1310.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/1503073.png" style="vertical-align: middle;width:16px;height:16px;"&gt; IT Revolution RSS Feed.&lt;/b&gt;
  1311.        &lt;/td&gt;
  1312.    &lt;/tr&gt;
  1313.    
  1314. &lt;/table&gt;
  1315.  
  1316. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1317.  
  1318. &lt;p&gt;I recently posted an essay &lt;a href="https://www.linkedin.com/pulse/coordination-costs-organizational-architecture-book-thesis-gene-kim/"&gt;&amp;#8220;On Coordination Costs and Organizational Architecture: Book Thesis&amp;#8221;&lt;/a&gt;, which describes the thesis of the &lt;a href="https://itrevolution.com/kim-spear-book/"&gt;book I&amp;#8217;m working on with Dr. Steve Spear&lt;/a&gt;.  We spent the week together in Boston two weeks ago, and I was so energized by the following essay that describes the problem of coordination costs for a very simple problem.&lt;/p&gt;
  1319. &lt;p&gt;Does this resonate with you?  Please leave a comment with any thoughts!&lt;/p&gt;
  1320. &lt;h2&gt;Even Moving A Couch Requires Brain Work&lt;/h2&gt;
  1321. &lt;p class="p1"&gt;What we have observed is that across every activity across every industry vertical, high performers have figured out how to vastly reduce the cost of coordination. &lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/p&gt;
  1322. &lt;p class="p1"&gt;To better understand coordination costs, consider doing something as basic as moving a couch with a friend — let’s say their names are Steve and Gene.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;When they start, they are immediately in conversation, actively communicating and coordinating: where do you put your hands, how do you keep the couch balanced, do you move the couch sideways or lengthwise?&lt;/p&gt;
  1323. &lt;p class="p1"&gt;To fit the couch through that narrow doorway, do we need to lift one end of the couch vertically, and if so, whom?&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;To get down the stairs, who goes first, and do they go down the stairs facing backwards or forwards? &lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/p&gt;
  1324. &lt;p class="p1"&gt;Through actions, trial and error (i.e., feedback), conversation, and correction, we can be confident that Steve and Gene will eventually figure out how to successfully move the couch.&lt;/p&gt;
  1325. &lt;p class="p1"&gt;Now suppose that the homeowner shows up and keeps butting in, imposing their strong opinions on where they should hold the couch, who should go through the door first, and so forth.&lt;/p&gt;
  1326. &lt;p class="p1"&gt;Worse, maybe this person starts interrupting Steve and Gene from communicating directly, or even insists that all messages be relayed through them.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;Suddenly, urgent messages such as “the couch is slipping, can we slow down?” or “the couch is pinching my finger in the doorway” are no longer making it through to the other person.&lt;/p&gt;
  1327. &lt;p class="p1"&gt;The outcome is almost assuredly that the time and effort required to move the couch goes up — and the work becomes far more dangerous, as well.&lt;/p&gt;
  1328. &lt;p class="p1"&gt;This is because we are forcing information to go through an intermediary, dramatically increasing the cost of coordination, and making it far more difficult for Steve and Gene to get their job done — we lose information, we introduce delays and potential misunderstandings, and in short, get in the way of the people solving problems and doing their work.&lt;/p&gt;
  1329. &lt;p class="p1"&gt;The effects of coordination costs is evident in even moving a couch, because it requires coordination between people — it can’t be done by automatons, requiring human creativity and problem solving.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;It is not just “brawn problem,” but a considerable “brain problem” as well, and requires considerable information exchange for the work to happen well.&lt;/p&gt;
  1330. &lt;p class="p1"&gt;And if coordination costs can dramatically affect the outcomes of moving a couch, consider how corrosive it can be to building a plane, train, automobile, or sending someone to the Moon and safely returning them to the Earth, or building and operating the software systems that enable all of those activities.&lt;/p&gt;
  1331. &lt;h2&gt;Extending the Couch Moving Scenario&lt;/h2&gt;
  1332. &lt;p class="p1"&gt;Let us revisit the scenario of Steve and Gene moving the couch — they need to move the couch because their wives, Miriam and Margueritte, are painting the walls and ceiling of that room, and want to make sure that paint doesn’t get on the couch.&lt;/p&gt;
  1333. &lt;p class="p1"&gt;Now in the room are the two people moving the couch, as well as two painters.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;Also strewn across the room are open paint cans and four ladders.&lt;/p&gt;
  1334. &lt;p class="p1"&gt;We have now increased substantially the amount of required coordination — Steve and Gene need to be careful not to kick over the paint cans, or bump into the ladders or their wives. And Miriam and Margueritte have to be aware of the locations of Steve, Gene and the couch, so as not to drip paint on them.&lt;/p&gt;
  1335. &lt;p class="p1"&gt;As a result, everyone has to communicate what they want to do, where they want to go, perhaps ask that things be moved, and jostle and rearrange work to accommodate the other people’s needs.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;We may even have a problem with dependencies: Steve can’t move his end of the couch until Margueritte moves her ladder, but she can’t move her ladder until Miriam is finished painting her section of the wall.&lt;/p&gt;
  1336. &lt;p class="p1"&gt;And despite all the efforts to coordinate, mistakes can still happen — paint cans can be spilled onto the floor, ladders can be tipped over (potentially with the painters on it), paint can drip from the ceilings onto the couch, and so forth.&lt;/p&gt;
  1337. &lt;p class="p1"&gt;And even if none of these things happen, we are now spending more time and effort coordinating: painters can’t focus on painting, because they’re focused on the couch.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;And&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;couch movers can’t focus on moving the couch, because they’re worried about the paint.&lt;/p&gt;
  1338. &lt;p class="p1"&gt;The result is that we have a lousy painting job, and maybe divots in the wall caused by accidents moving the couch. &lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/p&gt;
  1339. &lt;p&gt; &lt;/p&gt;
  1340. &lt;h2&gt;Two Ways To Partition To Create Modularity&lt;/h2&gt;
  1341. &lt;p class="p1"&gt;We propose that there are two ways to reduce coordination cost —&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/p&gt;
  1342. &lt;p class="p1"&gt;The first method is to partition the activities by time: for example, Steve and Gene move the couch at 10am, and Miriam and Margueritte paint at 11am, when the couch has been safely moved out of the room. And when they are done painting at the end of the day, Steve and Gene bring the couch back into the room. &lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/p&gt;
  1343. &lt;p class="p1"&gt;By doing this, the couch movers and painters are not in the room at the same time, so their actions no longer affect each other.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;By merely by agreeing on the separate times and places where their work will be done, the teams can work independently of each other. And astonishingly, they are now working in a more coordinated fashion.&lt;/p&gt;
  1344. &lt;p class="p2"&gt;&lt;span class="s1"&gt;Coordination requires communication, which is the exchange of information — and by partitioning the two activities in time, we have radically reduced the amount of communication needed and information that has to exchanged.&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
  1345. &lt;p class="p2"&gt;&lt;span class="s1"&gt;By doing this, we dramatically reduce the amount of energy spent on coordination, which can instead be used to solve the real problems in front of us. Furthermore, we reduce distractions and interruptions, which increases our ability to focus. Studies have shown how critical focus is for cognitive tasks — for instance, when we are driving at night in a snowstorm, we will slow down, turn off the podcast, and ask the kids to be quiet, so we can concentrate.&lt;/span&gt;&lt;/p&gt;
  1346. &lt;p class="p2"&gt;&lt;span class="s1"&gt;The result is that we get a better paint job, and the couch is moved without damaging anything, and it was all faster, easier, and less dangerous to do.&lt;span class="Apple-converted-space"&gt;  &lt;/span&gt;And by removing distractions from painting, even the most intricate and difficult parts, such as painting the corners of the ceiling, can be done with focus and precision.&lt;/span&gt;&lt;/p&gt;
  1347. &lt;p class="p2"&gt;&lt;span class="s1"&gt;We have figured out how to harmoniously integrate the work of moving the couch and painting the room.&lt;/span&gt;&lt;/p&gt;
  1348. &lt;p class="p3"&gt;On the surface, solving the problem of moving a couch to paint a room to reduce coordination cost may seem laughably simple — however, this is a microcosm of what all high performers are doing across nearly every industry vertical, but at a much larger scale.&lt;/p&gt;
  1349. &lt;p&gt; &lt;/p&gt;
  1350. &lt;h2&gt;Other Method: Partition By Time&lt;/h2&gt;
  1351. &lt;p&gt;Incidentally, when we cannot partition the activities by time, we can partition the activities by space — in this scenario, the couch movers and painters will work opposite sides of the room at the same time. For instance, Steve and Gene will move the couch on the left side of the room, while Miriam and Margueritte paint the right side of the room.&lt;/p&gt;
  1352. &lt;p&gt;&lt;br /&gt;When the right side of the room has been painted, the painting and couch will switch sides.&lt;br /&gt;As in the previous example, by partitioning the activities, coordination between teams is needed only during the transition times — the couch movers no longer have to worry that moving the couch will affect the painting, and vice versa.&lt;/p&gt;
  1353. &lt;p&gt;&lt;br /&gt;The outcome is the same: a far better painting job, with less time and energy required to coordinate.&lt;/p&gt;
  1354. &lt;p&gt; &lt;/p&gt;
  1355. &lt;h2&gt;Upcoming Book&lt;/h2&gt;
  1356. &lt;p&gt;(These are topics which will be part of for our upcoming book — if you are interested in staying up to date on the book&amp;#8217;s progress, which currently does not even have a working title, but will be released in 2023, please sign up here: &lt;a href="https://itrevolution.com/kim-spear-book"&gt;https://itrevolution.com/kim-spear-book&lt;/a&gt;)&lt;/p&gt;
  1357. &lt;p&gt; &lt;/p&gt;
  1358. &lt;p&gt;The post &lt;a href="https://itrevolution.com/on-coordination-costs-moving-a-couch-and-painting-a-room/" rel="nofollow"&gt;On Coordination Costs: Moving A Couch, And Painting A Room&lt;/a&gt; appeared first on &lt;a href="https://itrevolution.com" rel="nofollow"&gt;IT Revolution&lt;/a&gt;.&lt;/p&gt;</summary><category term="uncategorized"></category></entry><entry><title>Ongoing phishing campaign can hack you even when you’re protected with MFA</title><link href="https://arstechnica.com/?p=1866290" rel="alternate"></link><published>2022-07-13T10:18:39.185000Z</published><author><name>Dan Goodin</name></author><id>https://arstechnica.com/?p=1866290</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1359.    &lt;tr&gt;
  1360.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1361.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1362.            &lt;b&gt;
  1363.                drpratten
  1364.                &lt;a href="https://drpratten.newsblur.com/story/ongoing-phishing-cam/7854329:d48bdc"&gt;shared this story&lt;/a&gt;
  1365.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/7854329.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Ars Technica - All content.&lt;/b&gt;
  1366.        &lt;/td&gt;
  1367.    &lt;/tr&gt;
  1368.    
  1369. &lt;/table&gt;
  1370.  
  1371. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1372.  
  1373. &lt;div id="rss-wrap"&gt;
  1374. &lt;figure class="intro-image intro-left"&gt;
  1375.  &lt;img alt="Ongoing phishing campaign can hack you even when you’re protected with MFA" src="https://cdn.arstechnica.net/wp-content/uploads/2022/07/multi-factor-authentication-mfa-800x546.jpeg" /&gt;
  1376.      &lt;p class="caption" style="font-size: 0.8em;"&gt;&lt;a class="enlarge-link" href="https://cdn.arstechnica.net/wp-content/uploads/2022/07/multi-factor-authentication-mfa.jpeg"&gt;Enlarge&lt;/a&gt; (credit: Getty Images)&lt;/p&gt;  &lt;/figure&gt;
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383. &lt;div&gt;&lt;a name="page-1"&gt;&lt;/a&gt;&lt;/div&gt;
  1384. &lt;p&gt;On Tuesday, Microsoft detailed an ongoing large-scale phishing campaign that can hijack user accounts when they're protected with multi-factor authentication measures designed to prevent such takeovers. The threat actors behind the operation, who have targeted 10,000 organizations since September, have used their covert access to victim email accounts to trick employees into sending the hackers money.&lt;/p&gt;
  1385. &lt;p&gt;Multi-factor authentication—also known as two-factor authentication, MFA, or 2FA—is the gold standard for account security. It requires the account user to prove their identity in the form of something they own or control (a physical security key, a fingerprint, or face or retina scan) in addition to something they know (their password). As the growing use of MFA has stymied account-takeover campaigns, attackers have found ways to strike back.&lt;/p&gt;
  1386. &lt;h2&gt;The adversary in the middle&lt;/h2&gt;
  1387. &lt;p&gt;Microsoft observed a campaign that inserted an attacker-controlled proxy site between the account users and the work server they attempted to log into. When the user entered a password into the proxy site, the proxy site sent it to the real server and then relayed the real server's response back to the user. Once the authentication was completed, the threat actor stole the session cookie the legitimate site sent, so the user doesn't need to be reauthenticated at every new page visited. The campaign began with a phishing email with an HTML attachment leading to the proxy server.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://arstechnica.com/?p=1866290#p3"&gt;Read 7 remaining paragraphs&lt;/a&gt; | &lt;a href="https://arstechnica.com/?p=1866290&amp;amp;comments=1"&gt;Comments&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
  1388. &lt;a href="http://feeds.feedburner.com/~ff/arstechnica/index?a=gNZm6hunJCY:hq0wnfhkGv0:V_sGLiPBpWU"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/arstechnica/index?i=gNZm6hunJCY:hq0wnfhkGv0:V_sGLiPBpWU" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/arstechnica/index?a=gNZm6hunJCY:hq0wnfhkGv0:F7zBnMyn0Lo"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/arstechnica/index?i=gNZm6hunJCY:hq0wnfhkGv0:F7zBnMyn0Lo" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/arstechnica/index?a=gNZm6hunJCY:hq0wnfhkGv0:qj6IDK7rITs"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/arstechnica/index?d=qj6IDK7rITs" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/arstechnica/index?a=gNZm6hunJCY:hq0wnfhkGv0:yIl2AUoC8zA"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/arstechnica/index?d=yIl2AUoC8zA" /&gt;&lt;/a&gt;
  1389. &lt;/div&gt;</summary><category term="biz &amp; it"></category><category term="2-factor authentication"></category><category term="2fa"></category><category term="two-factor authentication"></category></entry><entry><title>From Milestones to a Continuous Quality Assurance Flow</title><link href="https://itrevolution.com/from-milestones-to-a-continuous-quality-assurance-flow/" rel="alternate"></link><published>2022-07-05T08:47:49.638000Z</published><author><name>IT Revolution</name></author><id>https://itrevolution.com/from-milestones-to-a-continuous-quality-assurance-flow/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1390.    &lt;tr&gt;
  1391.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1392.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1393.            &lt;b&gt;
  1394.                drpratten
  1395.                &lt;a href="https://drpratten.newsblur.com/story/from-milestones-to-a/1503073:25e2e1"&gt;shared this story&lt;/a&gt;
  1396.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/1503073.png" style="vertical-align: middle;width:16px;height:16px;"&gt; IT Revolution RSS Feed.&lt;/b&gt;
  1397.        &lt;/td&gt;
  1398.    &lt;/tr&gt;
  1399.    
  1400. &lt;/table&gt;
  1401.  
  1402. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1403.  
  1404. &lt;p&gt;By &lt;b&gt;Dr. Peter Fassbinder, &lt;/b&gt;Principal expert PLM Process Innovation, Siemens AG&lt;/p&gt;
  1405. &lt;p class="p1"&gt;One of the biggest hurdles to implementing continuous delivery and DevOps in an industrial environment—dealing with milestones/macroscopic quality gates—can be overcome with a continuous quality assurance approach that applies “green to green” and “shift left” paradigms to software and non-software artifacts.&lt;/p&gt;
  1406. &lt;p class="p3"&gt;In an industrial environment, software delivery requires much more than just working software. To formally release a change and deploy it into production requires many further non-software artifacts that cannot be covered by the continuous integration tool chain, no matter how sophisticated it is. However, using the classical milestone/macroscopic quality gate process is no longer an option, as this limits the deployment frequency to values that are outside the range of the desired target. Therefore, a rethinking of the release process is required.&lt;/p&gt;
  1407. &lt;p class="p3"&gt;&lt;span class="s1"&gt;This paper provides a new perspective on analyzing and tracking non-software quality criteria by introducing a continuous conformance concept. This concept applies the “green to green” and “shift left” paradigms—well established in the software space—to the non-software artifacts required to release and deploy a software change. Combined with a continuous delivery pipeline, this results in a continuous quality assurance approach that also enables industrial enterprises to take advantage of the many opportunities and benefits that arise from continuous enhancements of their products and services while maintaining their high quality standards.&lt;/span&gt;&lt;/p&gt;
  1408. &lt;h1 class="p4"&gt;The Vision—Continuous Flow of Value to Customers&lt;/h1&gt;
  1409. &lt;p class="p2"&gt;With the boost of digital capabilities, industrial products are changing radically. Therefore, increasing efficiency is only one aspect of digitalization. The other, much more impactful aspect is the revolution of the customer experience. Transferring more and more functionality into software, combined with an ever-increasing connectivity to products at customer sites or in the cloud, opens up tremendous new possibilities for industrial enterprises and their customers. Continuous enhancements of products or cloud solutions during their lifetime, supported by data analysis from live systems, will become a key success factor.&lt;/p&gt;
  1410. &lt;p class="p3"&gt;This makes state-of-the-art approaches by IT companies, such as continuous delivery and DevOps, increasingly relevant for industrial enterprises as well. These approaches drive the vision of Agile all the way to the customer, resulting in:&lt;/p&gt;
  1411. &lt;ul&gt;
  1412. &lt;li class="p5"&gt;faster value utilization and integration of customer feedback through short-cycled deployment of product enhancements&lt;/li&gt;
  1413. &lt;li class="p6"&gt;continuous, data-driven value increase due to product improvements based on operational data&lt;/li&gt;
  1414. &lt;li class="p7"&gt;reduced deployment and operational risks through highly automated delivery of small product changes&lt;/li&gt;
  1415. &lt;/ul&gt;
  1416. &lt;p class="p3"&gt;However, the required paradigm shift has a tremendous impact on the entire organization, especially in an industrial environment. Meeting the high industrial quality expectations in a world of continuous delivery is one of the key challenges that must be mastered in this context. This aspect is evaluated in detail in this paper.&lt;/p&gt;
  1417. &lt;h1 class="p4"&gt;Quality in the Continuous Delivery Pipeline&lt;/h1&gt;
  1418. &lt;p class="p2"&gt;A core element and prerequisite for continuous delivery to customers (i.e., frequent deployment of software enhancements into the productive system) is the implementation of a continuous delivery pipeline. This integrated tool chain must be highly automated and should include automated tests on multiple integration levels, addressing functional and nonfunctional requirements. Once established, such a continuous delivery pipeline already provides huge benefits with respect to built-in quality mechanisms and real-time quality status information of the software. Typical quality information provided by a continuous delivery pipeline includes:&lt;/p&gt;
  1419. &lt;ul&gt;
  1420. &lt;li class="p5"&gt;quality status of the build&lt;/li&gt;
  1421. &lt;li class="p6"&gt;test results on various levels, covering different test aspects&lt;/li&gt;
  1422. &lt;li class="p6"&gt;automated security checks&lt;/li&gt;
  1423. &lt;li class="p6"&gt;traceability from requirements over test cases to code and test results&lt;/li&gt;
  1424. &lt;li class="p6"&gt;continuous, automated, real-time visibility of all related status information&lt;/li&gt;
  1425. &lt;li class="p7"&gt;automated decisions about whether a build is a potential release candidate&lt;/li&gt;
  1426. &lt;/ul&gt;
  1427. &lt;p class="p3"&gt;In addition, this tool chain can be used to provide auditable evidence and track the status of risks and risk mitigations linked to the software artifacts. All of this is ideally made transparent in real time through a suitable dashboard providing a 360-degree status view on the quality of the software to be deployed into the productive system.&lt;/p&gt;
  1428. &lt;p class="p3"&gt;Therefore, an efficient and robust continuous delivery pipeline is a must to speed up deployment frequencies significantly—but it is not sufficient. Although such an automated tool chain already provides significant quality status information regarding the software itself, it lacks several aspects required for a formal release for deployment into the productive system in an industrial environment:&lt;/p&gt;
  1429. &lt;ul&gt;
  1430. &lt;li class="p5"&gt;addressing strategic and system-level aspects, such as technical risk assessments, service level agreements, intellectual property rights, etc.&lt;/li&gt;
  1431. &lt;li class="p6"&gt;formal approval and release documentation, such as hazard summary reports, risk management reports, safety certification, etc.&lt;/li&gt;
  1432. &lt;li class="p7"&gt;further up-to-date, non-software artifacts required by different stakeholders, such as user documentation, operations guidelines, training, and many more&lt;/li&gt;
  1433. &lt;/ul&gt;
  1434. &lt;p&gt;Before formally releasing and deploying a software change into the productive system, it must be ensured that those additional (non-software) artifacts are in a valid status and cover the change intended to be delivered to the customer adequately. These artifacts, however, cannot be covered by the continuous delivery pipeline, no matter how sophisticated it is. The continuous delivery pipeline is restricted to the software itself and software-close artifacts (e.g., requirements or test cases), but cannot cover the huge realm of additional artifacts required for a release, the non-software artifacts.&lt;/p&gt;
  1435. &lt;p class="p3"&gt;On the other hand, applying the classical milestone/macroscopic quality gate approach to ensure the quality of those non-software artifacts is also not an option anymore, as this would limit the deployment frequency to values that are outside the range of the desired target. Therefore, a rethinking of the overall release process is required.&lt;/p&gt;
  1436. &lt;h1 class="p8"&gt;“Green to Green” and “Shift Left” Are Not Only for Software&lt;/h1&gt;
  1437. &lt;p class="p2"&gt;The most promising approach for a redesign of the classical release process into the “world of continuous” transfers a key idea of the continuous delivery pipeline to the non-software artifacts.&lt;/p&gt;
  1438. &lt;p class="p3"&gt;Within a fully automated continuous delivery pipeline, every code change is instantly verified against the existing system that was released in the previous iteration and is—at this particular time—running in the productive system. The primary focus of the continuous delivery pipeline is to verify that the code change does not break the running software, a paradigm referred to as “green to green.” With this approach, the quality of the software can be ensured for every code change at any point in time at the tip of a finger. Ensuring a system that is always running (i.e., a system that is “green”) has the utmost priority.&lt;/p&gt;
  1439. &lt;p class="p3"&gt;This “green to green” paradigm can be transferred to non-software artifacts. Assuming a minimal marketable product was already released to the customer at an earlier point in time, two things should be present:&lt;/p&gt;
  1440. &lt;ul&gt;
  1441. &lt;li class="p5"&gt;a running software system in production&lt;/li&gt;
  1442. &lt;li class="p7"&gt;a valid baseline of all required, non-software artifacts matching the productive software version&lt;/li&gt;
  1443. &lt;/ul&gt;
  1444. &lt;p class="p3"&gt;&lt;span class="s2"&gt;Therefore, in addition to a green software status, there is also a green status for all required non-software artifacts at this particular time. Transferring the “green to green” paradigm from software to non-software artifacts implies that a suitable mechanism is now defined and established for the non-software artifacts, i.e., an analogy to a continuous delivery pipeline for the software. This mechanism, which can be labeled continuous conformance, is described in the next section.&lt;/span&gt;&lt;/p&gt;
  1445. &lt;p class="p3"&gt;However, to bring an adequate continuous conformance approach to life, another paradigm from the software world must be transferred to non-software artifacts: the “shift left” paradigm. This is required, in addition to the “green to green” paradigm, to ensure that relevant aspects of the non-software artifacts required for a release into production are addressed in a timely manner. The ambition is to achieve an operational capability where software can be seamlessly and continuously developed, integrated, tested, and deployed based on a highly automated continuous delivery pipeline without the need for lengthy and time-consuming work on non-software artifacts once the software is ready for deployment.&lt;/p&gt;
  1446. &lt;p class="p3"&gt;The “shift left” paradigm for software development ensures timely definition and early execution of tests across all development and integration stages to shorten feedback loops and speed up the capability for software delivery. By analogy, transferring the “shift left” paradigm to non-software artifacts has the intent of providing updated non-software artifacts matching the software version that will be altered through the intended software change exactly when needed. This means that non-software artifacts are analyzed and continuously updated at the right time to avoid lengthy and time-consuming work on non-software artifacts after the work on the software has been completed. How this can be put into practice as part of the continuous conformance concept is described in the next section.&lt;/p&gt;
  1447. &lt;p&gt;The post &lt;a href="https://itrevolution.com/from-milestones-to-a-continuous-quality-assurance-flow/" rel="nofollow"&gt;From Milestones to a Continuous Quality Assurance Flow&lt;/a&gt; appeared first on &lt;a href="https://itrevolution.com" rel="nofollow"&gt;IT Revolution&lt;/a&gt;.&lt;/p&gt;</summary><category term="devops community"></category><category term="devops enterprise journal"></category><category term="organizational change"></category><category term="continuous delivery"></category><category term="peter fassbinder"></category></entry><entry><title>A Solver of the Hardest Easy Problems About Prime Numbers</title><link href="https://www.quantamagazine.org/number-theorist-james-maynard-wins-the-fields-medal-20220705/" rel="alternate"></link><published>2022-07-05T08:45:43.568000Z</published><author><name>Erica Klarreich</name></author><id>https://www.quantamagazine.org/number-theorist-james-maynard-wins-the-fields-medal-20220705/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1448.    &lt;tr&gt;
  1449.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1450.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1451.            &lt;b&gt;
  1452.                drpratten
  1453.                &lt;a href="https://drpratten.newsblur.com/story/a-solver-of-the-hard/8676600:9fbccf"&gt;shared this story&lt;/a&gt;
  1454.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/8676600.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Quanta Magazine.&lt;/b&gt;
  1455.        &lt;/td&gt;
  1456.    &lt;/tr&gt;
  1457.    
  1458. &lt;/table&gt;
  1459.  
  1460. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1461.  
  1462. &lt;p&gt;In 2013, one of the best — but also one of the worst — things that can happen to a mathematician happened to James Maynard. Fresh out of graduate school, he solved one of the discipline’s oldest and most central problems, about the spacing of prime numbers. It was an achievement that ordinarily would have garnered him fame even beyond the cloistered world of pure math research. There was just one...&lt;/p&gt;
  1463. &lt;p&gt;&lt;a href="https://www.quantamagazine.org/number-theorist-james-maynard-wins-the-fields-medal-20220705/" rel="nofollow"&gt;Source&lt;/a&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;img src="https://d2r55xnwy6nx47.cloudfront.net/uploads/2018/07/James-Maynard_520x292.jpg" /&gt;</summary><category term="mathematics"></category></entry><entry><title>DevOps vs. SRE vs. Platform Engineering? The gaps might be smaller than you think</title><link href="https://www.cncf.io/blog/2022/07/01/devops-vs-sre-vs-platform-engineering-the-gaps-might-be-smaller-than-you-think/" rel="alternate"></link><published>2022-07-02T09:09:08.800000Z</published><author><name>Jessie</name></author><id>https://www.cncf.io/blog/2022/07/01/devops-vs-sre-vs-platform-engineering-the-gaps-might-be-smaller-than-you-think/</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1464.    &lt;tr&gt;
  1465.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1466.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1467.            &lt;b&gt;
  1468.                drpratten
  1469.                &lt;a href="https://drpratten.newsblur.com/story/devops-vs-sre-vs-pla/6171987:39f445"&gt;shared this story&lt;/a&gt;
  1470.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/6171987.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Cloud Native Computing Foundation.&lt;/b&gt;
  1471.        &lt;/td&gt;
  1472.    &lt;/tr&gt;
  1473.    
  1474. &lt;/table&gt;
  1475.  
  1476. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1477.  
  1478. &lt;p&gt;Guest post originally published on the Humanitec blog by Luca Galante Platform engineering is the new cool kid on the block that everyone wants to be friends with. However, many are still confused where this new discipline comes from and how it differentiates from more established practices like DevOps and SRE. In this article, we provide some historical context and explain how they all relate to...&lt;/p&gt;
  1479. &lt;p&gt;&lt;a href="https://www.cncf.io/blog/2022/07/01/devops-vs-sre-vs-platform-engineering-the-gaps-might-be-smaller-than-you-think/" rel="nofollow"&gt;Source&lt;/a&gt;&lt;/p&gt;</summary><category term="blog"></category></entry><entry><title>[Sponsor] Tailscale</title><link href="https://www.tailscale.com/daringfireball?utm_source=df&amp;utm_medium=RSS&amp;utm_content=tweet" rel="alternate"></link><published>2022-06-21T03:24:51.449000Z</published><author><name>Daring Fireball Department of Commerce</name></author><id>https://www.tailscale.com/daringfireball?utm_source=df&amp;utm_medium=RSS&amp;utm_content=tweet</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1480.    &lt;tr&gt;
  1481.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1482.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1483.            &lt;b&gt;
  1484.                drpratten
  1485.                &lt;a href="https://drpratten.newsblur.com/story/sponsor-tailscale/6685290:0accb5"&gt;shared this story&lt;/a&gt;
  1486.            .&lt;/b&gt;
  1487.        &lt;/td&gt;
  1488.    &lt;/tr&gt;
  1489.    
  1490. &lt;/table&gt;
  1491.  
  1492. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1493.  
  1494. &lt;p&gt;No additional hardware to manage. No complicated firewall rules. Free for personal use, but don’t take our word for it: &lt;/p&gt;
  1495.  
  1496. &lt;p&gt;“Tailscale is the most insane piece of software I have ever used. It’s literally so good” —Twitter user @ennochian_&lt;/p&gt;
  1497.  
  1498. &lt;p class="x-netnewswire-hide" style="padding-top: 1.5em;"&gt;&lt;em&gt;Link: &lt;strong&gt;&lt;a href="https://www.tailscale.com/daringfireball?utm_source=df&amp;amp;utm_medium=RSS&amp;amp;utm_content=tweet"&gt;tailscale.com/daringfireball?utm_source=df&amp;amp;utm_medium=RSS…&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>OpenAI!</title><link href="https://scottaaronson.blog/?p=6484" rel="alternate"></link><published>2022-06-19T01:49:50.988000Z</published><author><name>Scott</name></author><id>https://scottaaronson.blog/?p=6484</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1499.    &lt;tr&gt;
  1500.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1501.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1502.            &lt;b&gt;
  1503.                drpratten
  1504.                &lt;a href="https://drpratten.newsblur.com/story/openai/2382:8e8b5d"&gt;shared this story&lt;/a&gt;
  1505.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/2382.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Shtetl-Optimized.&lt;/b&gt;
  1506.        &lt;/td&gt;
  1507.    &lt;/tr&gt;
  1508.    
  1509. &lt;/table&gt;
  1510.  
  1511. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1512.  
  1513. &lt;p&gt;I have some exciting news (for me, anyway).  Starting next week, I&amp;#8217;ll be going on leave from UT Austin for one year, to work at &lt;a href="https://openai.com/"&gt;OpenAI&lt;/a&gt;.  They&amp;#8217;re the creators of the astonishing &lt;a href="https://en.wikipedia.org/wiki/GPT-3"&gt;GPT-3&lt;/a&gt; and &lt;a href="https://openai.com/dall-e-2/"&gt;DALL-E2&lt;/a&gt;, which have not only endlessly entertained me and my kids, but recalibrated my understanding of what, for better and worse, the world is going to look like for the rest of our lives.  Working with an amazing team at OpenAI, including &lt;a href="https://jan.leike.name/"&gt;Jan Leike&lt;/a&gt;, &lt;a href="http://joschu.net/"&gt;John Schulman&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Ilya_Sutskever"&gt;Ilya Sutskever&lt;/a&gt;, my job will be think about the theoretical foundations of AI safety and alignment.  What, if anything, can computational complexity contribute to a principled understanding of how to get an AI to do what we want and not do what we don&amp;#8217;t want?&lt;/p&gt;
  1514.  
  1515.  
  1516.  
  1517. &lt;p&gt;Yeah, I don&amp;#8217;t know the answer either.  That&amp;#8217;s why I&amp;#8217;ve got a whole year to try to figure it out!  One thing I know for sure, though, is that I&amp;#8217;m interested &lt;em&gt;both&lt;/em&gt; in the short-term, where new ideas are now quickly testable, and where the misuse of AI for spambots, surveillance, propaganda, and other nefarious purposes is already a major societal concern, &lt;em&gt;and&lt;/em&gt; the long-term, where one might worry about what happens once AIs surpass human abilities across nearly every domain.  (And all the points in between: we might be in for a long, wild ride.)  When you start reading about AI safety, it&amp;#8217;s striking how there are two separate communities&amp;#8212;the one mostly worried about machine learning perpetuating racial and gender biases, and the one mostly worried about superhuman AI turning the planet into goo&amp;#8212;who not only don&amp;#8217;t work together, but are &lt;em&gt;at each other&amp;#8217;s throats&lt;/em&gt;, with each accusing the other of totally missing the point.  I persist, however, in the possibly-naïve belief that these are merely two extremes along a single continuum of AI worries.  By figuring out how to align AI with human values today&amp;#8212;constantly confronting our theoretical ideas with reality&amp;#8212;we can develop knowledge that will give us a better shot at aligning it with human values tomorrow.&lt;/p&gt;
  1518.  
  1519.  
  1520.  
  1521. &lt;p&gt;For family reasons, I&amp;#8217;ll be doing this work mostly from home, in Texas, though traveling from time to time to OpenAI&amp;#8217;s office in San Francisco.  I&amp;#8217;ll &lt;em&gt;also&lt;/em&gt; spend 30% of my time continuing to run the Quantum Information Center at UT Austin and working with my students and postdocs.  At the end of the year, I plan to go back to full-time teaching, writing, and thinking about quantum stuff, which remains my main intellectual love in life, even as AI&amp;#8212;the field where I started, as a PhD student, before I switched to quantum computing&amp;#8212;has been taking over the world in ways that none of us can ignore.&lt;/p&gt;
  1522.  
  1523.  
  1524.  
  1525. &lt;p&gt;Maybe fittingly, this new direction in my career had its origins here on &lt;em&gt;Shtetl-Optimized&lt;/em&gt;.  Several commenters, including &lt;a href="https://scottaaronson.blog/?p=6288#comment-1928020"&gt;Max Ra&lt;/a&gt; and &lt;a href="https://scottaaronson.blog/?p=6288#comment-1928039"&gt;Matt Putz&lt;/a&gt;, asked me point-blank what it would take to induce me to work on AI alignment.  Treating it as an amusing hypothetical, I replied that it wasn&amp;#8217;t mostly about money for me, and that:&lt;/p&gt;
  1526.  
  1527.  
  1528.  
  1529. &lt;blockquote class="wp-block-quote"&gt;&lt;p&gt;The central thing would be finding an actual&amp;nbsp;&lt;em&gt;potentially-answerable technical question&lt;/em&gt;&amp;nbsp;around AI alignment, even just a small one, that piqued my interest and that I felt like I had an unusual angle on. In general, I have an absolutely terrible track record at working on topics because I abstractly feel like I “should” work on them. My entire scientific career has basically just been letting myself get nerd-sniped by one puzzle after the next.&lt;/p&gt;&lt;/blockquote&gt;
  1530.  
  1531.  
  1532.  
  1533. &lt;p&gt;Anyway, Jan Leike at OpenAI saw this exchange and wrote to ask whether I was serious in my interest.  Oh shoot!  Was I?  After intensive conversations with Jan, others at OpenAI, and others in the broader AI safety world, I finally concluded that I was.&lt;/p&gt;
  1534.  
  1535.  
  1536.  
  1537. &lt;p&gt;I&amp;#8217;ve obviously got my work cut out for me, just to catch up to what&amp;#8217;s already been done in the field.  I&amp;#8217;ve actually been in the Bay Area all week, meeting with numerous AI safety people (&lt;em&gt;and&lt;/em&gt;, of course, complexity and quantum people), carrying a stack of technical papers on AI safety everywhere I go.  I&amp;#8217;ve been struck by how, when I talk to AI safety experts, they&amp;#8217;re not only &lt;em&gt;not dismissive&lt;/em&gt; about the potential relevance of complexity theory, they&amp;#8217;re more gung-ho about it than I am!  They want to talk about whether, say, &lt;a href="https://en.wikipedia.org/wiki/IP_(complexity)"&gt;IP=PSPACE&lt;/a&gt;, or &lt;a href="https://people.cs.uchicago.edu/~fortnow/papers/mip2.pdf"&gt;MIP=NEXP&lt;/a&gt;, or the &lt;a href="https://en.wikipedia.org/wiki/PCP_theorem"&gt;PCP theorem&lt;/a&gt; could provide key insights about how we could verify the behavior of a powerful AI.  (Short answer: maybe, on some level!  But, err, more work would need to be done.)&lt;/p&gt;
  1538.  
  1539.  
  1540.  
  1541. &lt;p&gt;How did this complexitophilic state of affairs come about?  That brings me to another wrinkle in the story.  Traditionally, students follow in the footsteps of their professors.  But in trying to bring complexity theory into AI safety, I&amp;#8217;m actually following in the footsteps of my student: &lt;a href="https://paulfchristiano.com/"&gt;Paul Christiano&lt;/a&gt;, one of the greatest undergrads I worked with in my nine years at MIT, the student whose course project turned into the &lt;a href="https://arxiv.org/abs/1203.4740"&gt;Aaronson-Christiano quantum money paper&lt;/a&gt;.  After MIT, Paul did a PhD in quantum computing at Berkeley, with my own former adviser Umesh Vazirani, while &lt;em&gt;also&lt;/em&gt; working part-time on AI safety.  Paul then left quantum computing to work on AI safety full-time&amp;#8212;indeed, along with others such as Dario Amodei, he helped start the safety group at OpenAI.  Paul has since left to found his own AI safety organization, the &lt;a href="https://alignment.org/"&gt;Alignment Research Center (ARC)&lt;/a&gt;, although he remains on good terms with the OpenAI folks.  Paul is largely responsible for bringing complexity theory intuitions and analogies into AI safety&amp;#8212;for example, through the &lt;a href="https://arxiv.org/abs/1805.00899"&gt;&amp;#8220;AI safety via debate&amp;#8221; paper&lt;/a&gt; and the &lt;a href="https://arxiv.org/abs/1810.08575"&gt;Iterated Amplification paper&lt;/a&gt;.  I&amp;#8217;m grateful for Paul&amp;#8217;s guidance and encouragement&amp;#8212;as well as that of the others now working in this intersection, like Geoffrey Irving and Elizabeth Barnes&amp;#8212;as I start this new chapter.&lt;/p&gt;
  1542.  
  1543.  
  1544.  
  1545. &lt;p&gt;So, what projects will I actually work on at OpenAI?  Yeah, I&amp;#8217;ve been spending the past week trying to figure that out.  I still don&amp;#8217;t know, but a few possibilities have emerged.  First, I might work out a general theory of sample complexity and so forth for learning in dangerous environments&amp;#8212;i.e., learning where making the wrong query might kill you.  Second, I might work on explainability and interpretability for machine learning: given a deep network that produced a particular output, what do we even mean by an &amp;#8220;explanation&amp;#8221; for &amp;#8220;why&amp;#8221; it produced that output?  What can we say about the computational complexity of finding that explanation?  Third, I might work on the ability of weaker agents to verify the behavior of stronger ones.  Of course, if P≠NP, then the gap between the difficulty of solving a problem and the difficulty of recognizing a solution can sometimes be enormous.  And indeed, even in empirical machine learing, there&amp;#8217;s typically a gap between the difficulty of &lt;em&gt;generating&lt;/em&gt; objects (say, cat pictures) and the difficulty of &lt;em&gt;discriminating&lt;/em&gt; between them and other objects, the latter being easier.  But this gap typically isn&amp;#8217;t exponential, as is conjectured for NP-complete problems: it&amp;#8217;s much smaller than that.  And counterintuitively, we can then turn around and use the generators to improve the discriminators.  How can we understand this abstractly?  Are there model scenarios in complexity theory where we can prove that something similar happens?  How far can we amplify the generator/discriminator gap&amp;#8212;for example, by using interactive protocols, or debates between competing AIs?&lt;/p&gt;
  1546.  
  1547.  
  1548.  
  1549. &lt;p&gt;OpenAI, of course, has the word &amp;#8220;open&amp;#8221; right in its name, and a founding mission &amp;#8220;to ensure that artificial general intelligence benefits all of humanity.&amp;#8221;  But it’s also a for-profit enterprise, with investors and paying customers and serious competitors.  So throughout the year, don&amp;#8217;t expect me to share any proprietary information&amp;#8212;that&amp;#8217;s not my interest anyway, even if I &lt;em&gt;hadn&amp;#8217;t&lt;/em&gt; signed an NDA.  But &lt;em&gt;do&lt;/em&gt; expect me to blog my general thoughts about AI safety as they develop, and to solicit feedback from readers.&lt;/p&gt;
  1550.  
  1551.  
  1552.  
  1553. &lt;p&gt;In the past, I&amp;#8217;ve often been skeptical about the prospects for superintelligent AI becoming self-aware and destroying the world anytime soon (see, for example, my 2008 post &lt;a href="https://scottaaronson.blog/?p=346"&gt;The Singularity Is Far&lt;/a&gt;).  While I was aware since 2005 or so of the AI-risk community; and of its leader and prophet, &lt;a href="https://en.wikipedia.org/wiki/Eliezer_Yudkowsky"&gt;Eliezer Yudkowsky&lt;/a&gt;; and of Eliezer&amp;#8217;s exhortations for people to drop everything else they&amp;#8217;re doing and work on AI risk, as the biggest issue facing humanity, I &amp;#8230; kept the whole thing at arms&amp;#8217; length.  Even &lt;em&gt;supposing&lt;/em&gt; I agreed that this was a huge thing to worry about, I asked, what on earth do you want me to do about it today?  We know so little about a future superintelligent AI and how it would behave that any actions we took today would likely be useless or counterproductive.&lt;/p&gt;
  1554.  
  1555.  
  1556.  
  1557. &lt;p&gt;Over the past 15 years, though, my and Eliezer&amp;#8217;s views underwent a dramatic and ironic reversal.  If you read Eliezer&amp;#8217;s &lt;a href="https://www.lesswrong.com/posts/uMQ3cqWDPHhjtiesc/agi-ruin-a-list-of-lethalities"&gt;&amp;#8220;litany of doom&amp;#8221;&lt;/a&gt; from two weeks ago, you&amp;#8217;ll see that he&amp;#8217;s now resigned and fatalistic: because his early warnings weren&amp;#8217;t heeded, he argues, humanity is almost certainly doomed and an unaligned AI will soon destroy the world.  He says that there are basically &lt;em&gt;no&lt;/em&gt; promising directions in AI safety research: for any alignment strategy anyone points out, Eliezer can trivially refute it by explaining how (e.g.) the AI would be wise to the plan, and would pretend to go along with whatever we wanted from it while secretly plotting against us.&lt;/p&gt;
  1558.  
  1559.  
  1560.  
  1561. &lt;p&gt;The weird part is, just as Eliezer became more and more pessimistic about the prospects for getting anywhere on AI alignment, I&amp;#8217;ve become more and more &lt;em&gt;optimistic&lt;/em&gt;.  Part of my optimism is because people like Paul Christiano have laid foundations for a meaty mathematical theory: much like the Web (or quantum computing theory) in 1992, it&amp;#8217;s still in a ridiculously primitive stage, but even &lt;em&gt;my&lt;/em&gt; limited imagination now suffices to see how much more could be built there.  An even greater part of my optimism is because we now live in a world with GPT-3, DALL-E2, and other systems that, while they clearly aren&amp;#8217;t AGIs, are powerful enough that worrying about AGIs has come to seem more like prudence than like science fiction. And we can finally test our intuitions against the realities of these systems, which (outside of mathematics) is pretty much the only way human beings have ever succeeded at anything.&lt;/p&gt;
  1562.  
  1563.  
  1564.  
  1565. &lt;p&gt;I didn&amp;#8217;t predict that machine learning models this impressive would exist by 2022.  Most of you probably didn&amp;#8217;t predict it.  For godsakes, &lt;em&gt;Eliezer Yudkowsky&lt;/em&gt; didn&amp;#8217;t predict it.  But it&amp;#8217;s happened.  And to my mind, one of the defining virtues of science is that, when empirical reality gives you a clear shock, you update and adapt, rather than expending your intelligence to come up with clever reasons why it doesn&amp;#8217;t matter or doesn&amp;#8217;t count.&lt;/p&gt;
  1566.  
  1567.  
  1568.  
  1569. &lt;p&gt;Anyway, so that&amp;#8217;s the plan!  If I can figure out a way to save the galaxy, I will, but I&amp;#8217;ve set my goals slightly lower, at learning some new things and doing some interesting research and writing some papers about it and enjoying a break from teaching.  Wish me a non-negligible success probability!&lt;/p&gt;
  1570.  
  1571.  
  1572.  
  1573. &lt;p&gt;—————————&lt;/p&gt;
  1574.  
  1575.  
  1576.  
  1577. &lt;p&gt;&lt;strong&gt;Update (June 18):&lt;/strong&gt; To respond to a couple criticisms that I’ve seen elsewhere on social media…&lt;/p&gt;
  1578.  
  1579.  
  1580.  
  1581. &lt;p&gt;&lt;strong&gt;Can the rationalists sneer at me for waiting to get involved with this subject until it had become sufficiently ”respectable“ and ”mainstream” and ”high-status”? &lt;/strong&gt; I suppose they can, if that’s their inclination.  I suppose I should be grateful that so many of them chose to respond instead with messages of congratulations and encouragement.   Yes, I plead guilty to keeping this subject at arms-length until I could point to GPT-3 and DALL-E2 and all the rest to justify the reality of the topic to anyone who might criticize me.  It feels like I had principled reasons for this: I can think of almost no examples of research programs that succeeded over decades even in the teeth of opposition from the scientific mainstream.  If so, then arguably the right time to get involved with a “fringe” scientific topic, is when and only when you can foresee the path to it &lt;em&gt;becoming&lt;/em&gt; the scientific mainstream.  At any rate, that’s what I did with quantum computing, as a teenager in the mid-1990s.  It’s what many past scientists did with (e.g.) the prospect of nuclear weapons.  And if you’d optimized for getting the right answer earlier, you might’ve had to weaken your filters and let in a bunch of dubious worries that you shouldn’t have.  But I admit the possibility of self-serving bias here.&lt;/p&gt;
  1582.  
  1583.  
  1584.  
  1585. &lt;p&gt;&lt;strong&gt;Should you worry that OpenAI is just hiring me to be able to say “look, we have Scott Aaronson working on the problem,” rather than actually caring about what its safety researchers come up with? &lt;/strong&gt; I mean, I can’t prove that you &lt;em&gt;shouldn’t&lt;/em&gt; worry about that.  In the end, whatever work I do on the topic will have to speak for itself.  For whatever it’s worth, though, I was impressed by the OpenAI folks’ detailed, open-ended engagement with these questions when I met them—sort of like how it might look if they actually believed what they said about wanting to get this right for the world.  I wouldn’t have gotten involved otherwise.&lt;/p&gt;</summary><category term="announcements"></category><category term="self-referential"></category><category term="the fate of humanity"></category></entry><entry><title>How to play with the GPT-3 language model</title><link href="http://simonwillison.net/2022/Jun/5/play-with-gpt3/#atom-everything" rel="alternate"></link><published>2022-06-15T12:12:43.897000Z</published><author><name></name></author><id>http://simonwillison.net/2022/Jun/5/play-with-gpt3/#atom-everything</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1586.    &lt;tr&gt;
  1587.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1588.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1589.            &lt;b&gt;
  1590.                drpratten
  1591.                &lt;a href="https://drpratten.newsblur.com/story/how-to-play-with-the/790:a970c9"&gt;shared this story&lt;/a&gt;
  1592.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/790.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Simon Willison&amp;#x27;s Weblog.&lt;/b&gt;
  1593.        &lt;/td&gt;
  1594.    &lt;/tr&gt;
  1595.    
  1596. &lt;/table&gt;
  1597.  
  1598. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1599.  
  1600. &lt;p&gt;I ran &lt;a href="https://twitter.com/simonw/status/1532791179170881536"&gt;a Twitter poll&lt;/a&gt; the other day asking if people had tried &lt;a href="https://en.wikipedia.org/wiki/GPT-3"&gt;GPT-3&lt;/a&gt; and why or why not. The winning option, by quite a long way, was "No, I don't know how to". So here's how to try it out, for free, without needing to write any code.&lt;/p&gt;
  1601. &lt;h4&gt;You don't need to use the API to try out GPT-3&lt;/h4&gt;
  1602. &lt;p&gt;I think a big reason people have been put off trying out GPT-3 is that OpenAI market it as &lt;a href="https://openai.com/blog/openai-api/"&gt;the OpenAI API&lt;/a&gt;. This sounds like something that's going to require quite a bit of work to get started with.&lt;/p&gt;
  1603. &lt;p&gt;But access to the API includes access to the GPT-3 playground, which is an interface that is incredibly easy to use. You get a text box, you type things in it, you press the "Execute" button. That's all you need to know.&lt;/p&gt;
  1604. &lt;h4&gt;How to sign up&lt;/h4&gt;
  1605. &lt;p&gt;To try out GPT-3 for free you need three things: an email address, a phone number that can receive SMS messages and to be located in one of this list of &lt;a href="https://beta.openai.com/docs/supported-countries"&gt;supported countries and regions&lt;/a&gt;.&lt;/p&gt;
  1606. &lt;ol&gt;
  1607. &lt;li&gt;Create an account at &lt;a href="https://openai.com/join/"&gt;https://openai.com/join/&lt;/a&gt; - you can create an email/password address or you can sign up using your Google or Microsoft account&lt;/li&gt;
  1608. &lt;li&gt;Verify your email address (click the link in the email they send you)&lt;/li&gt;
  1609. &lt;li&gt;Enter your phone number and wait for their text&lt;/li&gt;
  1610. &lt;li&gt;Enter the code that they texted to you&lt;/li&gt;
  1611. &lt;/ol&gt;
  1612. &lt;p&gt;New accounts get $18 of credit for the API, which expire after three months. Each query should cost single digit cents to execute, so you can do a lot of experimentation without needing to spend any money.&lt;/p&gt;
  1613. &lt;h4&gt;How to use the playground&lt;/h4&gt;
  1614. &lt;p&gt;Once you've activated your account, head straight to the Playground:&lt;/p&gt;
  1615. &lt;p&gt;&lt;a href="https://beta.openai.com/playground"&gt;https://beta.openai.com/playground&lt;/a&gt;&lt;/p&gt;
  1616. &lt;p&gt;The interface looks like this (it works great on mobile too):&lt;/p&gt;
  1617. &lt;p&gt;&lt;img alt="A heading says Playground. There is a text area with &amp;quot;Write a tagline for an ice cream shop&amp;quot; in grey, and a green Submit button. A right hand panel includes some sliders and other options." src="https://static.simonwillison.net/static/2022/gpt-3-playground.png" /&gt;&lt;/p&gt;
  1618. &lt;p&gt;The only part of this interface that matters is the text box and the Submit button. The right hand panels can be used to control some settings but the default settings work extremely well - I've been playing with GPT-3 for months and 99% of my queries used those defaults.&lt;/p&gt;
  1619. &lt;p&gt;Now you can just type stuff into the box and hit that "Submit" button.&lt;/p&gt;
  1620. &lt;p&gt;Try this one to get you started:&lt;/p&gt;
  1621. &lt;blockquote&gt;
  1622. &lt;p&gt;Three reasons to start a succulent garden&lt;/p&gt;
  1623. &lt;/blockquote&gt;
  1624. &lt;p&gt;&lt;img alt="The same interface. I have entered the prompt &amp;quot;Three reasons to start a succulunt garden&amp;quot;. GPT-3 has replied, its output in the same text area but highlighted with a green background: &amp;quot;1. Succulents are low-maintenance: They don't require much watering or fertilizing, and they can tolerate a wide range of light conditions. 2. Succulents are drought-tolerant: They're perfect for areas that receive little rainfall or irrigation. 3. Succulents add interest and variety to the landscape: With their wide range of shapes, sizes, and colors, they can provide a unique and eye-catching addition to any garden.&amp;quot;" src="https://static.simonwillison.net/static/2022/gpt-3-with-prompt-and-answer.png" /&gt;&lt;/p&gt;
  1625. &lt;h4&gt;Prompt engineering&lt;/h4&gt;
  1626. &lt;p&gt;The text that you entered there is called a "prompt". Everything about working with GPT-3 is prompt engineering - trying different prompts, and iterating on specific prompts to see what kind of results you can get.&lt;/p&gt;
  1627. &lt;p&gt;It's a programming activity that actually feels a lot more like spellcasting. It's almost impossible to reason about: I imagine even the creators of GPT-3 could not explain to you why certain prompts produce great results while others do not.&lt;/p&gt;
  1628. &lt;p&gt;It's also &lt;em&gt;absurdly&lt;/em&gt; good fun.&lt;/p&gt;
  1629. &lt;h4&gt;Adding more to the generated text&lt;/h4&gt;
  1630. &lt;p&gt;GPT-3 will often let you hit the Submit button more than once - especially if the output to your question has the scope to keep growing in length - "Tell me an ongoing saga about a pelican fighting a cheesecake" for example.&lt;/p&gt;
  1631. &lt;p&gt;Each additional click of "Submit" costs more credit.&lt;/p&gt;
  1632. &lt;p&gt;You can also add your own text anywhere in the GPT-3 output, or at the end. You can use this to prompt for more output, or ask for clarification. I like saying "Now add a twist" to story prompts to see what it comes up with.&lt;/p&gt;
  1633. &lt;h4&gt;Further reading&lt;/h4&gt;
  1634. &lt;ul&gt;
  1635. &lt;li&gt;
  1636. &lt;a href="https://simonwillison.net/2022/May/31/a-datasette-tutorial-written-by-gpt-3/"&gt;A Datasette tutorial written by GPT-3
  1637. &lt;/a&gt; describes my experiments getting GPT-3 to write a tutorial for my &lt;a href="https://datasette.io/"&gt;Datasette&lt;/a&gt; project&lt;/li&gt;
  1638. &lt;li&gt;
  1639. &lt;a href="https://jalammar.github.io/how-gpt3-works-visualizations-animations/"&gt;How GPT3 Works - Visualizations and Animations&lt;/a&gt; is a great explanation of how GPT-3 works, illustrated with animations&lt;/li&gt;
  1640. &lt;li&gt;
  1641. &lt;a href="https://www.springboard.com/blog/data-science/machine-learning-gpt-3-open-ai/"&gt;OpenAI GPT-3: Everything You Need to Know&lt;/a&gt; offers a good overview of GPT-3&lt;/li&gt;
  1642. &lt;li&gt;&lt;a href="https://wingedsheep.com/songwriting-with-gpt-3/"&gt;GPT-3 as a muse: generating lyrics&lt;/a&gt; by Vincent Bons walks through some advanced GPT-3 fine tuning techniques to get it to output usable song lyrics inspired by the styles of various existing artists&lt;/li&gt;
  1643.  
  1644. &lt;/ul&gt;</summary><category term="machinelearning"></category><category term="ai"></category><category term="gpt3"></category></entry><entry><title>The sexual abuse scandal rocking the Southern Baptist Convention, explained</title><link href="https://www.vox.com/culture/23131530/southern-baptist-convention-sexual-abuse-scandal-guidepost" rel="alternate"></link><published>2022-06-15T12:00:20.046000Z</published><author><name>Emily St. James</name></author><id>https://www.vox.com/culture/23131530/southern-baptist-convention-sexual-abuse-scandal-guidepost</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1645.    &lt;tr&gt;
  1646.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1647.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1648.            &lt;b&gt;
  1649.                drpratten
  1650.                &lt;a href="https://drpratten.newsblur.com/story/the-sexual-abuse-sca/1110893:3ddfd9"&gt;shared this story&lt;/a&gt;
  1651.            from &lt;img src="https://s3.amazonaws.com/icons.newsblur.com/1110893.png" style="vertical-align: middle;width:16px;height:16px;"&gt; Vox -  All.&lt;/b&gt;
  1652.        &lt;/td&gt;
  1653.    &lt;/tr&gt;
  1654.    
  1655. &lt;/table&gt;
  1656.  
  1657. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1658.  
  1659. &lt;figure&gt;
  1660.      &lt;img alt="Train tracks beside a lit sign for the Community of Faith church." src="https://cdn.vox-cdn.com/thumbor/I_e9buAE6GwMJ_FHSNs8syAK9bg=/414x0:4858x3333/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70951462/1124557649.0.jpg" /&gt;
  1661.        &lt;figcaption&gt;The Southern Baptist Convention faces a massive sexual abuse scandal, initially broken by the San Antonio Express-News and Houston Chronicle. Community of Faith Church is based in Houston. | Loren Elliott/AFP via Getty Images&lt;/figcaption&gt;
  1662.    &lt;/figure&gt;
  1663.  
  1664.  
  1665.  &lt;p&gt;America’s largest Protestant denomination covered up a sexual abuse problem for decades.&lt;/p&gt; &lt;p id="rknheO"&gt;A &lt;a href="https://static1.squarespace.com/static/6108172d83d55d3c9db4dd67/t/6298d31ff654dd1a9dae86bf/1654182692359/Guidepost+Solutions+Independent+Investigation+Report___.pdf"&gt;new report&lt;/a&gt; summarizing an independent investigation into the history of sexual abuse in the Southern Baptist Convention (SBC) details decades of gaslighting and cover-ups. &lt;/p&gt;
  1666. &lt;p id="ZAWMHM"&gt;The SBC is a collection of loosely affiliated member churches, boasting just under 15 million members. It has no firm, established hierarchy; it doesn’t even have a central headquarters. In theory, individual churches can preach or believe whatever they want, but the larger “convention” can remove member churches that don’t toe certain lines. Representatives of these churches meet each year at an annual event — also called a convention. At the 2021 convention, member churches voted to conduct an internal investigation of sexual abuse within the church.&lt;/p&gt;
  1667. &lt;p id="DmMmg1"&gt;Complaints about sexual abuse and sexual assault on the part of pastors were sent to higher-ups who then kept those accusations quiet. Though the report, by Guidepost Solutions, was only commissioned to study the cover-up from the years 2000 on, it found incidents of sexual abuse and warnings of the same going back to the 1960s. In all, Guidepost found accusations leveled against people at all levels: church volunteers, staff, and leadership, including &lt;a href="https://baptistandreflector.org/named-in-guidepost-report-key-leaders-respond/"&gt;those at the top of the church’s ladder&lt;/a&gt;. Those accusations were made by people of different ages and genders, and they include allegations of child sexual abuse, the grooming of adolescents, and the sexual assault of adults.&lt;/p&gt;
  1668. &lt;p id="YSACUU"&gt;These findings were not unprecedented. A major &lt;a href="https://www.houstonchronicle.com/news/investigations/abuse-of-faith/"&gt;investigation&lt;/a&gt; by the Houston Chronicle and San Antonio Express-News, published in 2019, first brought many of the accusations against church leadership to light. The publication of that report galvanized a grassroots drive by individual Southern Baptist churches to hire a firm to conduct an investigation.&lt;/p&gt;
  1669. &lt;p id="UJiNNK"&gt;What the Guidepost report has shown is the sheer enormity of the problem, beyond the already staggering scope the Houston and San Antonio newspapers had revealed. Russell D. Moore, formerly the head of the SBC’s Ethics and Religious Liberty Commission until he resigned both from that post and the SBC entirely in 2021, called the report the “Southern Baptist apocalypse” in a &lt;a href="https://www.christianitytoday.com/ct/2022/may-web-only/southern-baptist-abuse-apocalypse-russell-moore.html"&gt;column for Christianity Today&lt;/a&gt;.&lt;/p&gt;
  1670. &lt;p id="R0bEIS"&gt;“It is horrifying. I expected to be the last person surprised by anything,” Moore said of the report, “and there were sections that were stunning even to me. It’s a horror, a sense of grief. It makes me contemplate the fact that I don’t even know a thimbleful of what must be being experienced by people who have survived these horrific acts of abuse in church settings. That weighs heavily.”&lt;/p&gt;
  1671. &lt;p id="mtwxCu"&gt;“Whatever vindication there is here for us, it very much goes hand in hand with grief,” said Christa Brown, the author of &lt;em&gt;This Little Light: Beyond a Baptist Preacher Predator and his Gang&lt;/em&gt;. “I know the stories that are behind the names of these pastors [named in the report]. I know the people. I know the decimation in their lives. I know the human cost of what it has taken to get this truth out into the open.”&lt;/p&gt;
  1672. &lt;p id="seaoEJ"&gt;There’s a natural comparison point for these incidents: the scandal that ensued when the &lt;a href="https://en.wikipedia.org/wiki/Catholic_Church_sex_abuse_cases_in_the_United_States"&gt;Catholic Church’s cover-up of its knowledge of priests&lt;/a&gt; who were child sexual abusers came to light, most prominently in a 2002 report by the Spotlight team at the Boston Globe. In this situation, too, the work of dogged newspaper journalists uncovered a scandal that the SBC was finally forced to step up and acknowledge.&lt;/p&gt;
  1673. &lt;p id="DhbVPD"&gt;The path forward to actually effecting change within the SBC is fraught with its own difficulties, however. Chief among them is the SBC’s structure — or lack thereof. Where the Catholic Church boasted a rigid hierarchy for parishioners and journalists to inveigh against in the name of justice, the SBC is loose and almost structureless. That will make reforming it very difficult indeed.&lt;/p&gt;
  1674. &lt;p id="SzYMGs"&gt;What’s more, the SBC’s theological underpinnings will make elevating the voices of those accusing pastors of abuse difficult because it privileges the voices of those pastors over those of their parishioners, especially women parishioners. In short, once a charismatic man becomes the leader of an SBC church, it can be very hard to punish him in a meaningful way.&lt;/p&gt;
  1675. &lt;p id="lwlGM7"&gt;Yet the SBC isn’t the only institution with a charismatic man problem. Those institutions litter the entirety of American evangelicalism and America itself. &lt;/p&gt;
  1676. &lt;h3 id="29nl1R"&gt;Why the structure of the SBC poses unique challenges to reforming it&lt;/h3&gt;
  1677. &lt;p id="jWRWpa"&gt;Let’s start with one thing that may not be immediately obvious: The SBC publicly releasing both the Guidepost report and &lt;a href="https://www.houstonchronicle.com/news/investigations/article/Southern-Baptist-sex-abuse-secret-list-17200327.php"&gt;a list of accused abusers&lt;/a&gt; that it kept secret for years is an unprecedented move for the denomination. Moore sees some hope in the fact that the report exists at all.&lt;/p&gt;
  1678. &lt;p id="5NLNLA"&gt;“Before the [Texas newspapers’] report, I would have to spend a lot of time convincing congregations that this was a problem that could happen to them,” he said. “There was often this sense of screening out predators by vibe. People would often think, ‘Well, we know people [in our congregation], so we know we don’t have any problems like that.’ I noticed a big shift in that after the Houston Chronicle report. This investigation happened because grassroots Southern Baptists came to the convention last year and demanded that it happen over and against much of their leadership.”&lt;/p&gt;
  1679. &lt;p id="SgRkSE"&gt;The most obvious parallel to this scandal is the Catholic Church’s sexual abuse scandal. However, where these two scandals differ lies in how differently the Catholic Church and the SBC are structured.&lt;/p&gt;
  1680. &lt;p id="UBfFoK"&gt;The effectiveness of the Catholic Church’s response to its scandal is highly debatable, but the church’s hierarchical structure (priests report to bishops report to cardinals report to the pope) meant that parishioners and the media had several pressure points they could push against in the process of trying to understand what had happened. Abuse survivors could also sue individual dioceses to receive financial restitution.&lt;/p&gt;
  1681. &lt;p id="cygOFd"&gt;The SBC lacks a similar hierarchy. It doesn’t see itself as a formal denomination but, rather, a loose association of churches that believe similarly. This structure gives individual churches under its banner lots of leeway to handle matters on their own. If your church’s pastor is misbehaving, it’s not always clear whom to report him to, especially if you don’t believe anyone in the church’s membership will do anything. But it’s not as though the SBC was unaware of the abuse problems within its ranks, despite its lack of traditional hierarchy.&lt;/p&gt;
  1682. &lt;p id="tamRVl"&gt;“When it comes to addressing sexual abuse, up until now, they have claimed that because of their church policy, they don’t have the authority to track abusers and hold local churches accountable,” said Kristin Kobes Du Mez, a professor of history at Calvin University and the author of &lt;em&gt;Jesus and John Wayne: How White Evangelicals Corrupted a Faith and Fractured a Nation&lt;/em&gt;. “But in the report we found that they had, in fact, been tracking abusers in their churches and had been maintaining a private database for their own protection. They had not in any way reached out and tried to prosecute those abusers to keep people safe.”&lt;/p&gt;
  1683. &lt;p id="aNJpZg"&gt;In addition, while lawsuits can be brought against individual churches or clergy members, the lack of anything like a diocese within the SBC means that any lawsuits will necessarily target either the smallest units of the organization or the organization as a whole. There isn’t really a good middle ground. The convention does have an executive committee, which possesses a fair amount of power to set the stage for what is considered acceptable within the SBC, but very little fills the gap between that executive committee and individual churches. &lt;/p&gt;
  1684. &lt;p id="ZuMUgg"&gt;The difficulty of seeking legal restitution and the lack of a strong hierarchy combine to explain why finding justice for survivors of sexual abuse in many Protestant denominations could prove very tricky.&lt;/p&gt;
  1685. &lt;p id="DVsh89"&gt;“It’s not just an SBC thing,” Joshua Pease, a pastor who has also worked as a journalist covering sexual abuse in the evangelical church, said. “There are multiple different denominations that have very loose affiliations or very loose organizational structures. And then there are nondenominational churches that genuinely have zero denominational structure to them, where it literally is just one church, all on its own.”&lt;/p&gt;
  1686. &lt;p id="rq60zT"&gt;The SBC report is a decided anomaly, simply because the SBC does have a hierarchical structure, no matter how loose or decentralized. If the pastor of a nondenominational church is sexually abusing congregants, the only authority a victim might be able to turn to is law enforcement.&lt;/p&gt;
  1687. &lt;h3 id="rYRprj"&gt;SBC’s history highlights a schism that may have led to this moment&lt;/h3&gt;
  1688. &lt;p id="3Ku7At"&gt;A term that comes up a lot in writing and discussions about problems with sexual abuse within the SBC or the evangelical church more broadly is “complementarianism.” In brief, complementarianism is a kind of theology that holds that men and women are created by God with inherent strengths and weaknesses, and that those differences should be not only embraced but baked into society. It’s at the root of many of the evangelical church’s struggles to recognize women in positions of authority, for obvious reasons, but it’s also at the root of many of the church’s problems with queer people. &lt;/p&gt;
  1689. &lt;p id="8dqJcS"&gt;Complementarianism holds that “there is a hierarchical order. Man is the head of the woman, and so women should not aspire to do what men are able to do. Women should be primarily focused on home and children,” said Molly T. Marshall, president of United Theological Seminary of the Twin Cities. “The complementarian notion is separate roles. I would say it’s not equal roles.”&lt;/p&gt;
  1690. &lt;p id="C0a18x"&gt;As a theology, it does not explicitly say, “Don’t believe women and children who accuse men of terrible things,” but it creates a power structure where a man who is accused of terrible things by those this theology views as beneath him is given often endless benefit of the doubt. &lt;/p&gt;
  1691. &lt;p id="RIBg6l"&gt;The SBC does possess some institutional weight that it can use to punish offending churches. The few times it has, however, it has used that weight to prop up complementarianism, rather than punish churches harboring abusers.&lt;/p&gt;
  1692. &lt;p id="OVoNYM"&gt;Via a process called “defellowship,” the SBC member churches can remove other churches from the convention entirely. That allows the SBC to maintain some degree of theological consistency across a vast, mostly decentralized organization, which in some cases is important to the church’s mission, according to Moore. As he explains, an SBC church that suddenly started preaching polytheism would no longer be practicing Christianity as any denomination understands it. But defellowship is also used to legislate issues of who gets power and recognition within the church, and who does not.&lt;/p&gt;
  1693. &lt;p id="zBceFA"&gt;“If you tried to ordain a woman or someone who’s gay, your church would be kicked out of the convention instantly,” said Pease. Yet this process was not used to remove churches where pastors were accused of abuse.&lt;/p&gt;
  1694.  &lt;figure class="e-image"&gt;
  1695.        &lt;img alt="Southern Baptist Convention 2018" src="https://cdn.vox-cdn.com/thumbor/_v0aWsNake8ZZrdyF8MXzXkkaXw=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23606044/972458462.jpg" /&gt;
  1696.      &lt;cite&gt;Rodger Mallison/Fort Worth Star-Telegram/Tribune News Service via Getty Images&lt;/cite&gt;
  1697.      &lt;figcaption&gt;Various people protest sexual abuse within the Southern Baptist Convention in 2018.&lt;/figcaption&gt;
  1698.  &lt;/figure&gt;
  1699. &lt;p id="aYCuYa"&gt;Complementarianism was also at the core of one of the most significant events in SBC history: the Kansas City convention of 1984. At that convention, a religious conservative drift within the SBC was solidified as the closest thing the SBC has to a doctrine, and that meant no women pastors. More progressive Southern Baptist churches either changed their views to more closely conform to that doctrine or more often left the SBC entirely, starting new fellowships of Baptist churches. &lt;/p&gt;
  1700. &lt;p id="EvMYoH"&gt;“I wouldn’t say that the Southern Baptist Convention was affirming of women in ministry so much [before 1984] as there were people and pockets within the Southern Baptist Convention that allowed more freedom for congregations to make those choices,” said Meredith Stone, the executive director of Baptist Women in Ministry. Stone’s organization was formed in 1983, and she has long wondered if its very existence played some role in the Kansas City convention of 1984. &lt;/p&gt;
  1701. &lt;p id="EBx7MO"&gt;Marshall also found herself at the center of those events. She was the first woman to attend the School of Theology at the Southern Baptist Theological Seminary in Louisville, Kentucky, and she was working there at the time of the resurgent conservative movement within the SBC. She was later pushed out of her job as a professor at Southern, despite tenure, because her views were no longer in line with those of the SBC.&lt;/p&gt;
  1702. &lt;p id="dNQsCz"&gt;“In my time as a professor at Southern Seminary, there were horrible pressures to fit into this complementarian modality, which always subjugates women. I would not put up with that, which is why I was run out of town,” Marshall said. “I was undaunted in my claim that women had equal authority in the church and were called to pastoral work, as would be any man that felt that calling.”&lt;/p&gt;
  1703. &lt;p id="3pCfhE"&gt;The events of 1984 are central to the modern SBC’s understanding of itself, but as Moore points out in his &lt;a href="https://www.christianitytoday.com/ct/2022/may-web-only/southern-baptist-abuse-apocalypse-russell-moore.html"&gt;Christianity Today column&lt;/a&gt;, the two architects of that moment have been exposed as hypocrites by the revelations about sexual abuse problems within the church. Moore writes:&lt;/p&gt;
  1704. &lt;blockquote&gt;&lt;p id="nIyayN"&gt;Those two mythical leaders are now disgraced. &lt;a href="https://www.christianitytoday.com/news/2019/august/southwestern-swbts-reckoning-over-paige-patterson-abuse-law.html"&gt;[Paige Patterson]&lt;/a&gt; was fired after alleged [sic] mishandling a rape victim’s report in an institution he led after he was documented making public comments about the physical appearance of teenage girls and his counsel to women physically abused by their husbands. &lt;a href="https://www.houstonchronicle.com/news/houston-texas/houston/article/Appeals-court-decision-allows-sex-abuse-lawsuit-15984089.php"&gt;[Paul Pressler]&lt;/a&gt; is now in civil proceedings about allegations of the rape of young men.&lt;/p&gt;&lt;/blockquote&gt;
  1705. &lt;p id="ne7Jpt"&gt;Complementarianism’s centrality within the SBC led to a heavily patriarchal institution, which Stone said created an environment in which sexual abuse could happen and be covered up as extensively as the Guidepost report said it was. And as such, she said, simple systemic fixes ultimately won’t be enough to reform the SBC. Instead, theological changes will have to be made, and they will be ones the SBC won’t want to make.&lt;/p&gt;
  1706. &lt;p id="b4IbGA"&gt;“The underlying systemic issues within the Southern Baptist Convention have to do with a theology that said some people are favored by God, some people have more power, and God supports them having that power and exerting it over others,” Stone said. “That in no way diminishes the culpability of individuals and the decisions that they make to act in an abusive way against another person. But I think when they are in an environment that says God supports power over saying God is about love and inclusion, it makes those actions more palatable.”&lt;/p&gt;
  1707. &lt;p id="zU2zWL"&gt;Yet the problems within the SBC aren’t just the problems of the SBC. They’re problems within evangelical churches more broadly — and within America.&lt;/p&gt;
  1708. &lt;h3 id="GyB0b3"&gt;The evangelical church is obsessed with charismatic guys who are leaders. But that’s not just true of the evangelical church.&lt;/h3&gt;
  1709. &lt;p id="D83811"&gt;Culturally, the structure of most evangelical churches makes it very hard to imagine reprisal for a powerful, popular leader. Complementarianism doesn’t just place men at the center of the church but also of the family unit; it also defines “man” in a very specific way.&lt;/p&gt;
  1710. &lt;p id="o9awzc"&gt;Andrew Whitehead, an associate professor of sociology at Indiana University–Purdue University Indianapolis and co-author of the book &lt;em&gt;Taking America Back for God: Christian Nationalism in the United States&lt;/em&gt;, has found in his research that the evangelical conception of God is aggressively gendered. Yes, evangelicals are &lt;a href="https://www.researchgate.net/publication/271874960_Gender_Ideology_and_Religion_Does_a_Masculine_Image_of_God_Matter"&gt;more likely&lt;/a&gt; than any other religious group to say that God is definitely a man, but they’ve also turned him into an incredibly masculine man, one who fulfills traditional gender roles, which are then meant to be reflected in the church.&lt;/p&gt;
  1711. &lt;p id="p2OHhv"&gt;“When you have men at the top with very little accountability and essentially blinders on, they can’t see all the different aspects of a situation,” Whitehead said. “So when things like this pop up, [evangelical men] tend to be absolutely ignorant of it or tend to protect their own, and not listen to those voices that might threaten what they see as their God-given right to be in control.”&lt;/p&gt;
  1712.  &lt;figure class="e-image"&gt;
  1713.        &lt;img alt=" " src="https://cdn.vox-cdn.com/thumbor/lwiTo3z7DulY1ZI-h7hccSYs9hQ=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23606051/1124557655.jpg" /&gt;
  1714.      &lt;cite&gt;Loren Elliott/AFP via Getty Images&lt;/cite&gt;
  1715.      &lt;figcaption&gt;The Houston Chronicle’s 2019 report was one major reason the SBC launched an internal investigation.&lt;/figcaption&gt;
  1716.  &lt;/figure&gt;
  1717. &lt;p id="ymRXFp"&gt;Du Mez said this contributes to a culture that can, readily and easily, excuse sexual abuse. In &lt;a href="https://ericcmiller.com/2020/07/07/jesus-wayne-a-conversation-with-kristin-kobes-du-mez/"&gt;her research&lt;/a&gt;, she has found that evangelical churches very often suggest a kind of gender essentialism in how men and women approach sex, with men seen as naturally lustful and testosterone-driven and women seen as naturally pure and non-lustful. The woman’s job is to protect purity; the man is often not at fault for giving in to his urges. Couple that outlook with a culture that generally practices deference to leaders, and you have an environment rife with the opportunity for abuse.&lt;/p&gt;
  1718. &lt;p id="NTLokg"&gt;“When a case of sexual misconduct surfaces, it is more common than not that women are going to be blamed. ‘What did you do to seduce him?’” Du Mez said. This belief system suggests, she said, that “men just have such a hard time controlling these needs that if they aren’t being met, they’re going to find an outlet. So it’s the woman’s fault, or it’s his wife’s fault, because clearly, if he was looking outside of his marriage relationship to fulfill his sexual needs, she was not meeting them.”&lt;/p&gt;
  1719. &lt;p id="IYE2Bn"&gt;Changing that culture will be difficult for many reasons. Moore suggests that the most lasting changes may have to be grassroots ones. He points to a shift within individual churches in the last few decades that has now spread across almost the entirety of the SBC. In the past, there was little oversight of the process by which parents left their children at church nurseries during services. Over time, individual churches put in place safeguards that led to making sure children were never left alone with a single nursery worker and the introduction of a system in which only people who are authorized can see the child or leave the nursery with them. That reform was introduced at a handful of churches; that it has now spread so widely through the SBC suggests one possible way for micro changes to become macro ones.&lt;/p&gt;
  1720. &lt;p id="3M14SZ"&gt;What’s more, the church can certainly make broader, more systemic changes and could adopt the recommendations within &lt;a href="https://static1.squarespace.com/static/6108172d83d55d3c9db4dd67/t/6298d31ff654dd1a9dae86bf/1654182692359/Guidepost+Solutions+Independent+Investigation+Report___.pdf"&gt;the Guidepost report&lt;/a&gt;. Those would all be major, concrete steps taken to reform the SBC and its culture, and they would lead to an environment where abuse would be less likely. &lt;/p&gt;
  1721. &lt;p id="BCKBDk"&gt;Brown, the author of &lt;em&gt;This Little Light&lt;/em&gt;, remains skeptical. Yes, the SBC could set up bodies to which those being abused could appeal, it could provide protection for other whistleblowers in the organization, and it could set up a restitution fund. Those steps, however, would have to be through groups that were independent from SBC leadership and had authority that existed outside the organization, steps she said the SBC would be unlikely to take. Instead, she fears these problems will be handled within their local churches, the very place many of these survivors suffered abuse.&lt;/p&gt;
  1722. &lt;p id="rhxeuK"&gt;“They must get past this notion of telling survivors to go to the local church,” Brown said. “All that does is send bloody sheep back to the den of the wolves who savaged them, and people are horribly wounded in that process.”&lt;/p&gt;
  1723. &lt;p id="A3FZa8"&gt;While it’s tempting to look at the problems facing the SBC as directly tied to complementarianism, requiring an overhaul to a more progressive form of theology, Pease is careful to remind me that churches are uniquely susceptible to the problem of being led by a charismatic man who is allowed to get away with things because he’s seen as guiding the church successfully. That problem applies equally to all denominations, regardless of their larger politics. &lt;/p&gt;
  1724. &lt;p id="AEneT7"&gt;But that’s not exclusively a problem of religious organizations, either. It’s a problem with every aspect of American life — from the tech industry to academia to Hollywood to your local church.&lt;/p&gt;
  1725. &lt;p id="dhQr92"&gt;“Any institution is going to become a little bit insular, and probably the strongest leader is going to rise to the surface. There’s always going to be a tendency then for abuse,” Pease said. “How do we intentionally build cultures that counteract that? That’s something as a society we’re still figuring out, because we bought into the myth of the charismatic leader so deeply, and we’re paying such a heavy price.”&lt;/p&gt;</summary></entry><entry><title>[Sponsor] Rows</title><link href="https://rows.com/?utm_source=RSS&amp;utm_medium=link&amp;utm_campaign=daringfireball-jun2022" rel="alternate"></link><published>2022-06-14T08:44:41.039000Z</published><author><name>Daring Fireball Department of Commerce</name></author><id>https://rows.com/?utm_source=RSS&amp;utm_medium=link&amp;utm_campaign=daringfireball-jun2022</id><summary type="html">&lt;table style="border: 1px solid #E0E0E0; margin: 0; padding: 0; background-color: #F0F0F0" valign="top" align="left" cellpadding="0" width="100%"&gt;
  1726.    &lt;tr&gt;
  1727.        &lt;td rowspan="2" style="padding: 6px;width: 36px;white-space:nowrap" width="36" valign="top"&gt;&lt;img src="https://s3.amazonaws.com/avatars.newsblur.com/avatars/126346/thumbnail_profile_1428122897.jpg" style="width: 36px; height: 36px; border-radius: 4px;"&gt;&lt;/td&gt;
  1728.        &lt;td width="100%" style="padding-top: 6px;"&gt;
  1729.            &lt;b&gt;
  1730.                drpratten
  1731.                &lt;a href="https://drpratten.newsblur.com/story/sponsor-rows/6685290:41cb61"&gt;shared this story&lt;/a&gt;
  1732.            .&lt;/b&gt;
  1733.        &lt;/td&gt;
  1734.    &lt;/tr&gt;
  1735.    
  1736. &lt;/table&gt;
  1737.  
  1738. &lt;hr style="clear: both; margin: 0 0 24px;"&gt;
  1739.  
  1740. &lt;p&gt;Let’s face it, spreadsheets suck. The world runs on them, but the last time they got a major update was in 2006. That’s a year before the first iPhone was released.&lt;/p&gt;
  1741.  
  1742. &lt;p&gt;That’s why &lt;a href="https://rows.com/?utm_source=RSS&amp;amp;utm_medium=link&amp;amp;utm_campaign=daringfireball-jun2022"&gt;Rows&lt;/a&gt; has reinvented spreadsheets. It is just like Google Sheets or Excel but built for the way we work today.&lt;/p&gt;
  1743.  
  1744. &lt;p&gt;It has 40+ integrations with platforms like Google Analytics, Twitter, Stripe, Salesforce, and public databases like LinkedIn. Forget about adding and updating your data manually. You can even connect your custom API and build your own tools. All without code.&lt;/p&gt;
  1745.  
  1746. &lt;p&gt;Rows has also revolutionized how we share and collaborate in spreadsheets. You can turn them into interactive dashboards, automated reports, or financial models that work and look great on any device.&lt;/p&gt;
  1747.  
  1748. &lt;p&gt;Thousands of people have already upgraded their spreadsheets to Rows. &lt;a href="https://rows.com/?utm_source=RSS&amp;amp;utm_medium=link&amp;amp;utm_campaign=daringfireball-jun2022"&gt;Get started for free today&lt;/a&gt;.&lt;/p&gt;
  1749.  
  1750. &lt;p class="x-netnewswire-hide" style="padding-top: 1.5em;"&gt;&lt;em&gt;Link: &lt;strong&gt;&lt;a href="https://rows.com/?utm_source=RSS&amp;amp;utm_medium=link&amp;amp;utm_campaign=daringfireball-jun2022"&gt;rows.com/?utm_source=RSS&amp;amp;utm_medium=link&amp;amp;utm_campaign…&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</summary></entry></feed>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda