<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Adam's blog</title>
    <description>formerly game development, now just casual madness</description>
    <link>https://blog.ilexp.net/</link>
    <atom:link href="https://blog.ilexp.net/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 30 Jan 2022 19:46:12 +0000</pubDate>
    <lastBuildDate>Sun, 30 Jan 2022 19:46:12 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>The Scroll of Declining Mental Health</title>
        <description>&lt;p&gt;I recently stumbled over the term “doomscrolling”, and in case you’re as clueless as I am, &lt;a href=&quot;https://www.urbandictionary.com/define.php?term=doomscrolling&quot;&gt;it means&lt;/a&gt; “obsessively reading social media posts about how utterly fucked we are”. And with the climate crisis, an ongoing pandemic and general politics, I can totally see where that’s coming from - but the first association I had was actually something quite different.&lt;/p&gt;

</description>
        <pubDate>Sun, 16 Aug 2020 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2020-08-16-doom-scroll.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2020-08-16-doom-scroll.html</guid>
        
        <category>Concept</category>
        
        <category>Social Media</category>
        
        <category>Internet</category>
        
        <category>Thoughts</category>
        
        
        <category>General</category>
        
      </item>
    
      <item>
        <title>The Heat Death of a Software System</title>
        <description>&lt;p&gt;One of the main things a software developer does is finding ways to create order. The natural enemies of this endeavour are entropy and (often enough, if we’re being honest) reality.&lt;/p&gt;

&lt;p&gt;Now, we may not be able to do anything about reality breaking our stuff - but entropy is a different story.&lt;/p&gt;

</description>
        <pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2020-07-16-regressions-and-entropy.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2020-07-16-regressions-and-entropy.html</guid>
        
        <category>Concept</category>
        
        <category>Thoughts</category>
        
        <category>Software</category>
        
        
        <category>General</category>
        
      </item>
    
      <item>
        <title>Moving Forward</title>
        <description>&lt;p&gt;If you’re following the progress of Duality, then you are already aware that I have cut back my role in the development of the project for personal reasons, and am now advising a group of core maintainers from the community who continue where I left off.&lt;/p&gt;

&lt;p&gt;After almost ten years as the main developer of the project, this was a big leap of faith for me - but in retrospect, I probably should have taken it years ago. Let me explain.&lt;/p&gt;

</description>
        <pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2020-06-30-moving-forward.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2020-06-30-moving-forward.html</guid>
        
        <category>Duality</category>
        
        <category>Open Source</category>
        
        
        <category>Duality</category>
        
      </item>
    
      <item>
        <title>Welcome Back</title>
        <description>&lt;p&gt;There are two things I’m refering to with the headline here.&lt;/p&gt;

</description>
        <pubDate>Mon, 22 Jun 2020 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2020-06-22-welcome-back.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2020-06-22-welcome-back.html</guid>
        
        <category>Gaming</category>
        
        <category>Blog</category>
        
        
        <category>General</category>
        
      </item>
    
      <item>
        <title>Duality v3 Release</title>
        <description>&lt;p&gt;After a long public beta in source code form, Duality v3 is now officially released.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AdamsLair/duality/releases/download/v3.0/Duality.zip&quot;&gt;Download&lt;/a&gt; the binaries for a fresh install.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adamslair.github.io/duality-docs/pages/v3/Changelog.html&quot;&gt;Changelog&lt;/a&gt; highlights and full list.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://adamslair.github.io/duality-docs/pages/v3/Changelog.html#upgrade-guide&quot;&gt;Upgrade Guide&lt;/a&gt; for existing projects.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AdamsLair/duality/issues?q=is%3Aissue+milestone%3Av3.0+is%3Aclosed+sort%3Acomments-desc&quot;&gt;In-depth Development Info&lt;/a&gt; on all the big changes to v3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have fun, and build something nice.&lt;/p&gt;
</description>
        <pubDate>Fri, 07 Dec 2018 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2018-12-07-duality-v3-release.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2018-12-07-duality-v3-release.html</guid>
        
        <category>Duality</category>
        
        
        <category>Archive</category>
        
      </item>
    
      <item>
        <title>Duality Dev Update, December 2017</title>
        <description>&lt;p&gt;So, this is the first blog entry that I’m writing after switching from Wordpress to &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; - less clunky, easier to maintain, static. Besides this little blog update, let’s take a look at what’s been cooking in the Duality game engine over the past months.&lt;/p&gt;

</description>
        <pubDate>Sat, 30 Dec 2017 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2017-12-30-duality-dev-update.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2017-12-30-duality-dev-update.html</guid>
        
        <category>Duality</category>
        
        <category>GitHub</category>
        
        <category>Rendering</category>
        
        
        <category>Archive</category>
        
      </item>
    
      <item>
        <title>Makeshift Changelogs From GitHub Issues</title>
        <description>&lt;p&gt;This is something from the “it kind of make sense that it exists, but it never crossed my mind to actually Google it” category.&lt;/p&gt;

&lt;p&gt;Say you’ve been away from a GitHub project for a while and just returned to see what happened in the meantime. You’re a bit out of the loop and don’t feel like reading all 500+ semi-descriptive commit headings to get a rough idea, and there is no official changelog in sight.&lt;/p&gt;

&lt;p&gt;One thing you can do to still get a picture is browse through closed issues on GitHub and as it turns out, you can easily filter them by the date range they have been updated last. When you then sort them by the number of comments as an indicator of scope and importance, you end up with &lt;a href=&quot;https://github.com/AdamsLair/duality/issues?q=is%3Aissue+is%3Aclosed+updated%3A%3E%3D2016-05-01+sort%3Acomments-desc&quot;&gt;a query like this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There you go. Makeshift changelog for a time range of your choice.&lt;/p&gt;
</description>
        <pubDate>Wed, 24 May 2017 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2017-05-24-makeshift-changelogs-from-github-issues.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2017-05-24-makeshift-changelogs-from-github-issues.html</guid>
        
        <category>GitHub</category>
        
        
        <category>Archive</category>
        
      </item>
    
      <item>
        <title>KCDC 2017</title>
        <description>&lt;p&gt;Just a quick shout-out that Duality is going to be in a talk by &lt;a href=&quot;http://www.kcdc.info/speakers/ondrej-balas&quot;&gt;Ondrej Balas&lt;/a&gt; at the &lt;a href=&quot;http://www.kcdc.info/&quot;&gt;Kansas City Developer Conference&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.kcdc.info/sessions&quot;&gt;&lt;img src=&quot;/assets/posts/2017-05-06-KCDC-2017/KCDC2017b.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Won’t be able to attend the conference myself, but I’m super honored to see Duality on the list.&lt;/p&gt;
</description>
        <pubDate>Sat, 06 May 2017 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2017-05-06-kcdc-2017.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2017-05-06-kcdc-2017.html</guid>
        
        <category>Conference</category>
        
        <category>Duality</category>
        
        
        <category>Archive</category>
        
      </item>
    
      <item>
        <title>Duality Dev Update, March 2017</title>
        <description>&lt;p&gt;&lt;em&gt;It’s about time to put another Duality development writeup out there, and with this one I want to try a slightly different form. Getting away from “the giant forum thread”, we’re back to the blog.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With the recently started &lt;a href=&quot;https://github.com/AdamsLair/duality/tree/develop-3.0&quot;&gt;Duality v3.0 dev branch&lt;/a&gt; and continuous updates to the stable v2.x versions, there’s a lot of progress both visible and invisible to people following the binary release chain. The purpose of this split in two different versions is to reconcile the two conflicting goals of backwards compatibility and forward progress: Updating the Duality version behind a game or plugin project shouldn’t break it, so while fixing and adding features is fine, removing or changing them is not. However, as the project evolves, the requirement to maintain the same facade and feature set adds up to a constant maintenance cost that makes some things harder and pushes others beyond the threshold of viability. Old code just needs to be cleaned up once in a while, polished and streamlined – and that is exactly what v3.0 is for.&lt;/p&gt;

&lt;p&gt;Don’t expect tons of big new features, but an improved API and the groundwork for future improvements on a more fundamental scale. That said, I’m (on a nerdy programmer-think basis) pretty excited about the things to come. You can find the &lt;a href=&quot;https://github.com/AdamsLair/duality/issues?utf8=%E2%9C%93&amp;amp;q=%20is%3Aissue%20milestone%3Av3.0%20&quot;&gt;full list of v3.0 issues here&lt;/a&gt;, and an overview on what has already been done below.&lt;/p&gt;

</description>
        <pubDate>Tue, 28 Mar 2017 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2017-03-28-duality-dev-update.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2017-03-28-duality-dev-update.html</guid>
        
        <category>Duality</category>
        
        <category>GitHub</category>
        
        <category>Rendering</category>
        
        
        <category>Archive</category>
        
      </item>
    
      <item>
        <title>C# Collection Initializers via Extension Methods</title>
        <description>&lt;p&gt;An interesting C# feature that I just stumbled across by accident: You can provide a custom collection initializer for any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;span class=&quot;n&quot;&gt;IEnumerable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt; using an extension method. It allows you to turn something like this:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myList&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;6.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;into this:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myList&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3.0f&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;4.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;5.0f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;6.0f&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;by simply providing the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;span class=&quot;n&quot;&gt;Add&lt;/span&gt;&lt;/code&gt; method that is required for collection initializers as an extension method:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Vector3Extensions&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Definitely not something for everyday use, but I can imagine it could clean up some data-heavy bits of code a lot. It &lt;a href=&quot;http://www.informit.com/articles/article.aspx?p=2424333&quot;&gt;appears that this was introduced in C# 6.0&lt;/a&gt;, along with indexer initializers.&lt;/p&gt;
</description>
        <pubDate>Mon, 14 Nov 2016 00:00:00 +0000</pubDate>
        <link>https://blog.ilexp.net/posts/2016-11-14-snippet-c-collection-initializers-via-extension-method.html</link>
        <guid isPermaLink="true">https://blog.ilexp.net/posts/2016-11-14-snippet-c-collection-initializers-via-extension-method.html</guid>
        
        <category>C#</category>
        
        
        <category>Archive</category>
        
      </item>
    
  </channel>
</rss>
