<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Not Rocket Science</title>
    <link>https://stum.de/</link>
    <description>Recent content on Not Rocket Science</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://stum.de/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why does Altered Beast need the CD-ROM² System Card 1.0?</title>
      <link>https://stum.de/2026/altered-beast-system-card-10/</link>
      <pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate>
      <guid>https://stum.de/2026/altered-beast-system-card-10/</guid>
      <description>&lt;p&gt;When it comes to PC Engine CD-ROM² System Card compatibility, the answer is usually &amp;quot;The Super System Card 3.0 will play every game... except for one&amp;quot;. That exception is 1989&#39;s PC Engine CD-ROM² release of Altered Beast (Juuouki), which will hang once you transform into the beast and the game tries to load a new chunk of the level. The game is not frozen - music still plays and controls are still responsive, it just does not scroll any further on any System Card other than 1.0.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why do PC Engine CD-ROM² games have a second data track?</title>
      <link>https://stum.de/2026/pc-engine-second-data-track/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>https://stum.de/2026/pc-engine-second-data-track/</guid>
      <description>&lt;p&gt;If you look at the layout of a PC Engine CD-ROM² game, you will probably find a disc that has two data tracks:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2026/pc-engine-second-data-track/PCECDTracks.png&#34; alt=&#34;PC Engine CD Layout&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;I thought this was pretty unusual - as someone mostly familiar with home computers and later CD-based consoles, I usually expect a single data track as Track 1 and optional Audio tracks afterwards.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-does-the-cd-start-with-an-audio-track&#34;&gt;Why does the CD start with an audio track?&lt;/h2&gt;&#xA;&lt;p&gt;Seeing the data track be Track 2 does make sense to me given how early in the &amp;quot;CD as data storage&amp;quot; lifecycle it was: Track 1 is an audio track warning people to not play the Disc in a CD Player because playing a data track is very unpleasant and can (&lt;a href=&#34;https://retrocomputing.stackexchange.com/q/32603/3344&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;allegedly&lt;/a&gt;) damage equipment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PC Engine CD-ROM² BIOS Method offsets</title>
      <link>https://stum.de/2025/pcenginebiosoffsets/</link>
      <pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://stum.de/2025/pcenginebiosoffsets/</guid>
      <description>&lt;p&gt;The PC Engine CD-ROM² consists of a HuCard containing a BIOS, which interfaces with the actual CD-ROM drive and serves as a bare-bones operating system of sorts for CD-ROM games.&lt;/p&gt;&#xA;&lt;p&gt;Like all HuCards, the System Card is mapped to the &lt;code&gt;$E000-$FFFF&lt;/code&gt; memory range on startup (MPR#7 = $00), and developers should not change this when calling BIOS functions since the code assume that base address. The BIOS also assumes/requires that MPR#0 is $FF and MPR#1 is $F8 to map the I/O and Work RAM to the beginning of address space, which is standard anyway.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building an Arcade Fight Stick</title>
      <link>https://stum.de/2021/10/03/building-an-arcade-fight-stick/</link>
      <pubDate>Sun, 03 Oct 2021 17:17:16 +0000</pubDate>
      <guid>https://stum.de/2021/10/03/building-an-arcade-fight-stick/</guid>
      <description>&lt;p&gt;When it comes to playing fighting games or certain arcade/MAME games, an Arcade Stick can be nicer than a gamepad. You can really mash the buttons and yank the lever (that’s the technical name for the actual stick).&lt;/p&gt;&#xA;&lt;p&gt;There are many that you can just buy, and that’s probably the preferred choice. Hori has long been a trusted brand, I actually own a Victrix Pro FS, the Hitbox is getting a lot of buzz because it’s all buttons, no lever, and I’m currently waiting on a Snackbox Micro because of it’s size. Seriously, it’s tiny.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding multiple devices to one PCI Express Slot</title>
      <link>https://stum.de/2019/08/01/adding-multiple-devices-to-one-pci-express-slot/</link>
      <pubDate>Thu, 01 Aug 2019 17:10:10 +0000</pubDate>
      <guid>https://stum.de/2019/08/01/adding-multiple-devices-to-one-pci-express-slot/</guid>
      <description>&lt;p&gt;Most ATX Mainboards have somewhere between 3 and 5 PCI Express slots. Generally, an x16, x8 and some x1&#39;s, but if you have e.g., a Threadripper X399 board you might have several x8 and x16 slots.&lt;/p&gt;&#xA;&lt;p&gt;But what if you want more devices than you have slots? Let&#39;s say you want a whole bunch of M.2 NVMe drives, which are only x4 each. Ignoring any motherboard M.2 slots, you can use adapter cards that just adapt the different slots:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Missing XML comment for publicly visible type or member &#39;considered harmful&#39;</title>
      <link>https://stum.de/2018/09/03/missing-xml-comment-for-publicly-visible-type-or-member-considered-harmful/</link>
      <pubDate>Mon, 03 Sep 2018 02:16:57 +0000</pubDate>
      <guid>https://stum.de/2018/09/03/missing-xml-comment-for-publicly-visible-type-or-member-considered-harmful/</guid>
      <description>One of the nice things about .net is that you can automatically generate an .xml file for the xmldoc comments. But the default compiler warning can entice developers to put in superflous or otherwise unhelpful comments.</description>
    </item>
    <item>
      <title>PicSol - a .net Nonogram/Picross Solver Library</title>
      <link>https://stum.de/2017/11/11/picsol-a-net-nonogrampicross-solver-library/</link>
      <pubDate>Sat, 11 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://stum.de/2017/11/11/picsol-a-net-nonogrampicross-solver-library/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Nonogram&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Nonograms&lt;/a&gt; - also known as Griddlers, Picture Crosswords, or Picross - are pretty cool puzzles, kind of like a more visual Crossword puzzle or Sudoku. Of all the games on my New 2DS XL, &lt;a href=&#34;https://en.wikipedia.org/wiki/Mario%27s_Picross&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Mario&#39;s Picross&lt;/a&gt; and the &lt;a href=&#34;https://en.wikipedia.org/wiki/Picross_e&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Picross e&lt;/a&gt; series are near the top of my Activity Log (beaten only by Smash Bros).&lt;/p&gt;&#xA;&lt;p&gt;I got curious about algorithmic solutions to those Nonograms, which seems deceptively easy, but is actually &lt;a href=&#34;https://en.wikipedia.org/wiki/NP-completeness&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;NP-complete&lt;/a&gt;. When trying to solve a Nonogram, often I can to only fill in one or a few cells of a group, which then leads to another cell that can be filled in (or X-ed out), and step by step, cell by cell, I solve the Nonogram. Now, that assumes that the Nonogram is properly designed - if that&#39;s the case, then there is always at least one cell that either must definitely be filled or definitely be empty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplexcel 2.0.5</title>
      <link>https://stum.de/2017/09/24/simplexcel-2-0-5/</link>
      <pubDate>Sat, 23 Sep 2017 21:22:32 +0000</pubDate>
      <guid>https://stum.de/2017/09/24/simplexcel-2-0-5/</guid>
      <description>&lt;p&gt;It&#39;s been a few months since I &lt;a href=&#34;https://stum.de/2017/04/22/simplexcel-2-0-0/&#34;&gt;released Simplexcel 2.0.0&lt;/a&gt;, which was a major change in that it added .net Standard support, and can be used on .net Core, incl. ASP.net Core.&lt;/p&gt;&#xA;&lt;p&gt;Since then, there have been a few further feature updates:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add &lt;code&gt;Worksheet.Populate&amp;lt;T&amp;gt;&lt;/code&gt; method to fill a sheet with data. Caveats: Does not loot at inherited members, doesn&#39;t look at complex types.&lt;/li&gt;&#xA;&lt;li&gt;Also add static &lt;code&gt;Worksheet.FromData&amp;lt;T&amp;gt;&lt;/code&gt; method to create and populate the sheet in one.&lt;/li&gt;&#xA;&lt;li&gt;Support for freezing panes. Right now, this is being kept simple: call either &lt;code&gt;Worksheet.FreezeTopRow&lt;/code&gt; or &lt;code&gt;Worksheet.FreezeLeftColumn&lt;/code&gt; to freeze either the first row (1) or the leftmost column (A).&lt;/li&gt;&#xA;&lt;li&gt;If a Stream is not seekable (e.g., &lt;code&gt;HttpContext.Response.OutputStream&lt;/code&gt;), Simplexcel automatically creates a temporary MemoryStream as an intermediate.&lt;/li&gt;&#xA;&lt;li&gt;Add &lt;code&gt;Cell.FromObject&lt;/code&gt; to make Cell creation easier by guessing the correct type&lt;/li&gt;&#xA;&lt;li&gt;Support DateTime cells&lt;/li&gt;&#xA;&lt;li&gt;Add support for manual page breaks. Call &lt;code&gt;Worksheet.InsertManualPageBreakAfterRow&lt;/code&gt; or &lt;code&gt;Worksheet.InsertManualPageBreakAfterColumn&lt;/code&gt; with either the zero-based index of the row/column after which to create the break, or with a cell address (e.g., B5) to create the break below or to the left of that cell.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Simplexcel is &lt;a href=&#34;https://www.nuget.org/packages/simplexcel&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;available on Nuget&lt;/a&gt;, and &lt;a href=&#34;https://github.com/mstum/Simplexcel/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;the source is on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>To Verb or Not To Verb in Adventure Games</title>
      <link>https://stum.de/2017/06/28/to-verb-or-not-to-verb-in-adventure-games/</link>
      <pubDate>Wed, 28 Jun 2017 18:46:58 +0000</pubDate>
      <guid>https://stum.de/2017/06/28/to-verb-or-not-to-verb-in-adventure-games/</guid>
      <description>&lt;p&gt;A while ago I &lt;a href=&#34;https://stum.de/2013/01/30/a-look-at-adventure-game-guis/&#34;&gt;put up a post showcasing adventure game GUIs&lt;/a&gt;, without really going into much details about them. But if you want to make your own adventure game, one of the first questions is how you want to control it. And that means, deciding how many Verbs there should be. If you ask &amp;quot;old-school&amp;quot; gamers, you will hear a lot of complaints that modern games are &amp;quot;dumbed down&amp;quot;, while game designers talk about &amp;quot;streamlining the experience&amp;quot; - both positions have some truth to them, because it is important to differentiate between complexity and depth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A failed attempt of using a Tinkerboard or Raspberry Pi as a Backup Server</title>
      <link>https://stum.de/2017/06/12/a-failed-attempt-of-using-a-tinkerboard-or-raspberry-pi-as-a-backup-server/</link>
      <pubDate>Mon, 12 Jun 2017 12:07:10 +0000</pubDate>
      <guid>https://stum.de/2017/06/12/a-failed-attempt-of-using-a-tinkerboard-or-raspberry-pi-as-a-backup-server/</guid>
      <description>&lt;p&gt;A while ago, I wanted to set up a backup strategy. Now, my first attempt was to use a ASUS Tinkerboard or Raspberry Pi 3. This attempt failed, and I&#39;d like to go over why, so that future readers don&#39;t make the same mistake.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-theory-desired-setup&#34;&gt;The Theory: Desired Setup&lt;/h2&gt;&#xA;&lt;p&gt;Here&#39;s my desired backup strategy:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2017/06/12/a-failed-attempt-of-using-a-tinkerboard-or-raspberry-pi-as-a-backup-server/MultiStageBackup-1-2-1.svg&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;As you see, the Tinker Board was supposed to be the local backup server, that is, the server that holds backups of all the main data. From there, I want to upload to Backblaze&#39;s B2 service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TresorLib - a deterministic password generator library for .net</title>
      <link>https://stum.de/2017/06/10/tresorlib-a-deterministic-password-generator-library-for-net/</link>
      <pubDate>Sat, 10 Jun 2017 00:04:34 +0000</pubDate>
      <guid>https://stum.de/2017/06/10/tresorlib-a-deterministic-password-generator-library-for-net/</guid>
      <description>&lt;p&gt;Tresor is a .net library (.net 4/netstandard 1.3 or newer) to generate passwords in a deterministic way, that is, the same inputs will yield the same outputs, but from simple inputs (Like the service name twitter and the passphrase I&#39;m the best 17-year old ever.) you will get a strong password like c&amp;lt;q_!^~,&#39;.KTbPV=9^mU.&lt;/p&gt;&#xA;&lt;p&gt;This helps with the behavior of using the same passphrase for multiple sites, but is also not reliant on a password vault that you don&#39;t always tend to have with you (e.g., because it&#39;s a file on your computer and you&#39;re on the road) or requires you to trust a cloud-service to securely keep your data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplexcel 2.0.0</title>
      <link>https://stum.de/2017/04/22/simplexcel-2-0-0/</link>
      <pubDate>Sat, 22 Apr 2017 03:42:33 +0000</pubDate>
      <guid>https://stum.de/2017/04/22/simplexcel-2-0-0/</guid>
      <description>&lt;p&gt;A couple of years ago, I created a &lt;a href=&#34;https://stum.de/2013/01/10/simplexcel-simple-xlsx-library-for-net/&#34;&gt;simple .net Library to create Excel .xlsx sheets&lt;/a&gt; without the need to do any COM Interop or similar nonsense, so that it can be used on a web server.&lt;/p&gt;&#xA;&lt;p&gt;I just pushed a major new version, &lt;a href=&#34;https://www.nuget.org/packages/simplexcel/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Simplexcel 2.0.0&lt;/a&gt; to NuGet. This is now targeting both .net Framework 4.5+ and .NET Standard 1.3+, which means it can now also be used in Cross-Platform applications, or ASP.net Core.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RAM and CPU Cycles are there to be used.</title>
      <link>https://stum.de/2017/04/11/ram-and-cpu-cycles-are-there-to-be-used/</link>
      <pubDate>Tue, 11 Apr 2017 20:39:46 +0000</pubDate>
      <guid>https://stum.de/2017/04/11/ram-and-cpu-cycles-are-there-to-be-used/</guid>
      <description>&lt;p&gt;What is wrong with this picture?&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2017/04/11/ram-and-cpu-cycles-are-there-to-be-used/graph.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;Answer: The white area in the top of the CPU and Memory graphs. These indicate that I spent money on something that I&#39;m not using.&lt;/p&gt;&#xA;&lt;p&gt;One of the complaints that are often brought forward how certain applications (especially browsers) are &amp;quot;memory hogs&amp;quot;. As I&#39;m writing this, Chrome uses 238.1 MB of RAM, and a separate Opera uses 129.8 MB. Oh my, remember when 4 MB were enough to run &lt;a href=&#34;https://en.wikipedia.org/wiki/Windows_95&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;an entire operating system?&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>git rebase on pull, and squash on merge</title>
      <link>https://stum.de/2016/12/15/git-rebase-on-pull-and-squash-on-merge/</link>
      <pubDate>Thu, 15 Dec 2016 14:55:52 +0000</pubDate>
      <guid>https://stum.de/2016/12/15/git-rebase-on-pull-and-squash-on-merge/</guid>
      <description>&lt;p&gt;Here&#39;s a few git settings that I prefer to set, now that I actually work on projects with other people and care for a useful history.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git config --global branch.master.mergeoptions &amp;quot;--squash&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This always squashes merges into master. I think that work big enough to require multiple commits should be done in a branch, then squash-merged into master. That way, master becomes a great overview of individual features rather than the nitty-gritty of all the back and forth of a feature.&lt;/p&gt;</description>
    </item>
    <item>
      <title>IIS/ASP.net Troubleshooting Cheatsheet</title>
      <link>https://stum.de/2016/10/21/iisasp-net-troubleshooting-cheatsheet/</link>
      <pubDate>Fri, 21 Oct 2016 09:15:24 +0000</pubDate>
      <guid>https://stum.de/2016/10/21/iisasp-net-troubleshooting-cheatsheet/</guid>
      <description>&lt;p&gt;Setting up IIS usually results in some error (403, 500...) at first. Since I run into this a lot and always forget to write down the steps, here&#39;s my cheatsheet now, which I&#39;ll update if I run into additional issues.&lt;/p&gt;&#xA;&lt;h2 id=&#34;folder-permissions&#34;&gt;Folder Permissions&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Give &lt;code&gt;IIS_IUSRS&lt;/code&gt; Read permission to the folder containing your code.&lt;/li&gt;&#xA;&lt;li&gt;If StaticFile throws a 403 when accessing static files, also give &lt;code&gt;IUSR&lt;/code&gt; permission&lt;/li&gt;&#xA;&lt;li&gt;Make sure files aren&#39;t encrypted (Properties =&amp;gt; Advanced)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If your code modifies files in that folder (e.g., using the default identity database or logging, etc.), you might need write permissions as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Can we build a better console.log?</title>
      <link>https://stum.de/2016/09/02/can-we-build-a-better-console-log/</link>
      <pubDate>Fri, 02 Sep 2016 17:36:19 +0000</pubDate>
      <guid>https://stum.de/2016/09/02/can-we-build-a-better-console-log/</guid>
      <description>&lt;p&gt;For a lot of Front End JavaScript work, our browser has become the de-facto IDE thanks to powerful built-in tools in Firefox, Chrome or Edge. However, one area that has seen little improvement over the years is the console.log function.&lt;/p&gt;&#xA;&lt;p&gt;Nowadays, I might have 8 or 9 different modules in my webpage that all output debug logs when running non-minified versions to help debugging. Additionally, it is also my REPL for some ad-hoc coding. This results in an avalanche of messages that are hard to differentiate. There are a few ways to make things stand out. console.info, console.warn and console.error are highlighted in different ways:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thoughts on ORMs, 2016 Edition</title>
      <link>https://stum.de/2016/08/24/thoughts-on-orms-2016-edition/</link>
      <pubDate>Wed, 24 Aug 2016 12:21:36 +0000</pubDate>
      <guid>https://stum.de/2016/08/24/thoughts-on-orms-2016-edition/</guid>
      <description>&lt;p&gt;This is a bit of a follow up to my &lt;a href=&#34;%28/2011/09/28/thoughts-on-orm-2/%29&#34;&gt;old 2011 Thoughts on ORM post&lt;/a&gt;. I&#39;ve changed my position several times over the last three years as I learned about issues with different approaches. TL;DR is that for reads, I&#39;d prefer handwritten SQL and Dapper for .Net as a mapper to avoid having to deal with DataReaders. For Inserts and Updates, I&#39;m a bit torn.&lt;/p&gt;&#xA;&lt;p&gt;I still think that L2S is a vastly better ORM than Entity Framework if you&#39;re OK with solely targeting MS SQL Server, but once you go into even slightly more complex scenarios, you&#39;ll run into issues like the dreaded SELECT N+1 far too easily. This is especially true if you pass around entities through layers of code, because now virtually any part of your code (incl. your View Models or serialization infrastructure) might make a ton of additional SQL calls.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When nslookup works but you can&#39;t ping it, NetBIOS may be missing</title>
      <link>https://stum.de/2016/08/19/when-nslookup-works-but-you-cant-ping-it-netbios-may-be-missing/</link>
      <pubDate>Fri, 19 Aug 2016 03:03:54 +0000</pubDate>
      <guid>https://stum.de/2016/08/19/when-nslookup-works-but-you-cant-ping-it-netbios-may-be-missing/</guid>
      <description>&lt;p&gt;I have a custom DNS Server (running Linux) and I also have a server running Linux (&amp;quot;MyServer&amp;quot;). The DNS Server has an entry in &lt;code&gt;/etc/hosts&lt;/code&gt; for MyServer.&lt;/p&gt;&#xA;&lt;p&gt;On my Windows machines, I can &lt;code&gt;nslookup MyServer&lt;/code&gt; and get the IP back, but when I try to access the machine through ping or any of the services it offers, the name doesn&#39;t resolve. Access via the IP Address works fine though.&lt;/p&gt;&#xA;&lt;p&gt;What&#39;s interesting is that if I add a dot at the end (&lt;code&gt;ping MyServer.&lt;/code&gt;) then it suddenly works. What&#39;s happening?!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling IME events in JavaScript</title>
      <link>https://stum.de/2016/06/24/handling-ime-events-in-javascript/</link>
      <pubDate>Fri, 24 Jun 2016 14:46:26 +0000</pubDate>
      <guid>https://stum.de/2016/06/24/handling-ime-events-in-javascript/</guid>
      <description>&lt;p&gt;Stack Overflow has been expanding past the English-speaking community for a while, and with the launch of both a &lt;a href=&#34;http://ja.stackoverflow.com/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Japanese version of Stack Overflow&lt;/a&gt; and a &lt;a href=&#34;http://japanese.stackexchange.com/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Japanese Language Stack Exchange&lt;/a&gt; (for English speakers interested in learning Japanese) we now have people using IME input regularly.&lt;/p&gt;&#xA;&lt;p&gt;For those unfamiliar with IME (like I was a week ago), it&#39;s an input help where you compose words with the help of the operating system:&lt;/p&gt;</description>
    </item>
    <item>
      <title>.net Framework 4.6.2 adds support to sign XML Documents using RSA-SHA256</title>
      <link>https://stum.de/2016/05/19/net-framework-4-6-2-adds-support-to-sign-xml-documents-using-rsa-sha256/</link>
      <pubDate>Thu, 19 May 2016 22:53:54 +0000</pubDate>
      <guid>https://stum.de/2016/05/19/net-framework-4-6-2-adds-support-to-sign-xml-documents-using-rsa-sha256/</guid>
      <description>&lt;p&gt;One of the hidden useful gems in the .net Framework is the System.Security.Cryptography.Xml.SignedXml class, which allows to sign XML documents, and validate the signature of signed XML documents.&lt;/p&gt;&#xA;&lt;p&gt;In the process of implementing both a SAML 2.0 Service Provider library and an Identity Provider, I found that RSA-SHA256 signatures are common, but not straight forward. Validating them is relatively easy, add a reference to System.Deployment and run this on app startup:&lt;/p&gt;</description>
    </item>
    <item>
      <title>configSource only works on sections, not sectionGroups</title>
      <link>https://stum.de/2015/06/26/configsource-only-works-on-sections-not-sectiongroups/</link>
      <pubDate>Fri, 26 Jun 2015 12:00:30 +0000</pubDate>
      <guid>https://stum.de/2015/06/26/configsource-only-works-on-sections-not-sectiongroups/</guid>
      <description>&lt;p&gt;I have an app.config with some custom sectionGroups:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;configSections&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;sectionGroup&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MyApp&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;section&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                     &lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/sectionGroup&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/configSections&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;myApp&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;foo&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;add&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;key=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MySetting&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;14&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/foo&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/myApp&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I wanted to externalize that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;MyApp configSource=&amp;quot;myapp.config&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This yields an error:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;System.Configuration.ConfigurationErrorsException: The attribute &#39;configSource&#39; cannot be specified because its name starts with the reserved prefix &#39;config&#39; or &#39;lock&#39;.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Long story short: configSource only works on &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; elements, not on &lt;code&gt;&amp;lt;sectionGroup&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Joe&#39;s Own Editor for writing</title>
      <link>https://stum.de/2015/06/06/joes-own-editor/</link>
      <pubDate>Sat, 06 Jun 2015 15:34:00 +0000</pubDate>
      <guid>https://stum.de/2015/06/06/joes-own-editor/</guid>
      <description>&lt;p&gt;George R.R. Martin &lt;a href=&#34;https://web.archive.org/web/20161204102857/http://www.theverge.com/2014/5/14/5716232/george-r-r-martin-uses-dos-wordstar-to-write&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;went on record&lt;/a&gt; saying he still uses &lt;a href=&#34;https://en.wikipedia.org/wiki/WordStar&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Wordstar 4.0&lt;/a&gt; on an old DOS Machine to write his epic 1000 page A Song of Ice and Fire novels. This seems to baffle some people - after all, the only people that don&#39;t trust modern technology are people that don&#39;t understand it. But often, we overlook that keyboard-driven interfaces are extremely productive once you&#39;re over the initial learning curve. I&#39;m still convinced that data entry jobs were at peak productivity when they were terminals talking to mainframes, and that web- or mobile-based software will never, ever reach the productivity levels of those.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The new Macbook (2015)</title>
      <link>https://stum.de/2015/05/03/the-new-macbook-2015/</link>
      <pubDate>Sun, 03 May 2015 20:13:57 +0000</pubDate>
      <guid>https://stum.de/2015/05/03/the-new-macbook-2015/</guid>
      <description>&lt;p&gt;My local Apple store happened to have a Space Gray Macbook in stock, so I picked it up. I think that a lot has been said already about the new Macbook, but here are some thoughts of mine. I primarily wanted a laptop that is as small and lightweight as possible, and the Macbook fits that. People called it an &amp;quot;iPad running OS X&amp;quot; and mean that in a negative way, but this was essentially what I&#39;m looking for. And it fits that bill - it easily fits into the sleeve of my old Asus eeePC 1000HE and thus also in my little messenger bag. And yet, it runs OS X, which means that I can run iDraw, XCode, do .net Core 5 development (with Visual Studio Code) and a bunch of other development related things I simply cannot do with an iPad. It even runs Logic Pro X and Final Cut Pro X, although of course, performance is limited.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Dig</title>
      <link>https://stum.de/2015/03/21/the-dig/</link>
      <pubDate>Sat, 21 Mar 2015 22:05:21 +0000</pubDate>
      <guid>https://stum.de/2015/03/21/the-dig/</guid>
      <description>&lt;p&gt;One of the more strange LucasArts adventures, The Dig is essentially a science fiction movie with some interaction. Originally released in 1995 during the &amp;quot;CD-ROM Multimedia&amp;quot; craze, it features writing by Orson Scott Card and is based on an idea by Steven Spielberg. All ingredients for a great experience?&lt;/p&gt;&#xA;&lt;p&gt;The interface is a radical departure from LucasArts&#39; previous verb interface, a trend that started with Sam &amp;amp; Max in 1993. There are no verbs, just a single &amp;quot;interact&amp;quot; action when clicking on stuff with the mouse. The inventory has to be opened by clicking on the little [i] box, and it contains an &amp;quot;examine&amp;quot; action. In a way, this foreshadowed the trend in the 2000&#39;s of only having two actions, &amp;quot;Interact&amp;quot; and &amp;quot;Look&amp;quot;. I&#39;ll talk about verb design in a later post, but in general, this works well for The Dig because the cinematic experience is first. Michael Land&#39;s music helps with that as well - it&#39;s a true movie soundtrack, very atmospheric and while not driven as much by melody as e.g., his work on Monkey Island, it is an awesome support for the game.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Video Games and the Ability to say &#39;No&#39;</title>
      <link>https://stum.de/2014/06/22/video-games-and-the-ability-to-say-no/</link>
      <pubDate>Sun, 22 Jun 2014 04:00:04 +0000</pubDate>
      <guid>https://stum.de/2014/06/22/video-games-and-the-ability-to-say-no/</guid>
      <description>&lt;p&gt;Imagine Philip Marlowe turning down the job from General Sternwood at the beginning of The Big Sleep. Or Bilbo Baggins standing his ground and not join Thorin Oakenshield&#39;s company in The Hobbit. Or if Han Solo refused to take Luke and Obi-Wan in Star Wars.&lt;/p&gt;&#xA;&lt;p&gt;There wouldn&#39;t be a story. Books and Movies work because they have characters make choices that put them or others in situations which advance the plot. Books and Movies are also passive mediums where the audience can only follow along with the road that&#39;s already set out for them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some Ruby concepts explained for .net developers</title>
      <link>https://stum.de/2014/05/09/some-ruby-concepts-explained-for-net-developers/</link>
      <pubDate>Fri, 09 May 2014 04:00:00 +0000</pubDate>
      <guid>https://stum.de/2014/05/09/some-ruby-concepts-explained-for-net-developers/</guid>
      <description>&lt;p&gt;I&#39;m normally a .net developer, it&#39;s been my bread and butter for the past seven years and will be for several more. But it&#39;s also important for me to keep in touch with other languages out there, including Ruby. Here&#39;s my personal cheat sheet to remember naming conventions.&lt;/p&gt;&#xA;&lt;p&gt;Method Names are lower case and use underscores, as do Method Arguments. The result of the last expression is automatically returned - there is no direct equivalent of void, although nil can serve that purpose.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Relax NG Verification in .net (and a bit of Schematron)</title>
      <link>https://stum.de/2014/04/19/relax-ng-verification-in-net-and-a-bit-of-schematron/</link>
      <pubDate>Sat, 19 Apr 2014 04:00:47 +0000</pubDate>
      <guid>https://stum.de/2014/04/19/relax-ng-verification-in-net-and-a-bit-of-schematron/</guid>
      <description>&lt;p&gt;I&#39;ve been working with &lt;a href=&#34;http://docbook.org/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Docbook V5.0&lt;/a&gt; a bit and started working on some processing tools to support my workflow. One of the big things is that the official Docbook Schema is &lt;a href=&#34;http://relaxng.org/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Relax NG&lt;/a&gt; and &lt;a href=&#34;http://www.schematron.com/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Schematron&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;relax-ng&#34;&gt;Relax NG&lt;/h2&gt;&#xA;&lt;p&gt;In .net, you can create a validating XML Reader by passing in XmlReaderSettings into XmlReader.Create, but the built-in ValidationType is limited to W3C XML Schema (.xsd) or Document type definitions (.dtd). Docbook has Schema files for both, but neither are the official standard because of a slight lack of features in those schema languages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows XP and its successors</title>
      <link>https://stum.de/2014/03/06/windows-xp-and-its-successors/</link>
      <pubDate>Thu, 06 Mar 2014 04:00:23 +0000</pubDate>
      <guid>https://stum.de/2014/03/06/windows-xp-and-its-successors/</guid>
      <description>&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2014/03/06/windows-xp-and-its-successors/XPNetbook.jpg&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;You may think &amp;quot;Whoa, that&#39;s a whole bunch on obsolete technology!&amp;quot;, and you would be right. But as a hobbyist and hardware hacker, and this stuff is my hobby. Now, despite being NT-Based, Windows XP still allowed enough access to make this stuff work. Specifically, it allows installation of unsigned drivers out of the box.&lt;/p&gt;&#xA;&lt;p&gt;Driver signing may or may not have real security benefits - assuming that the signing certificate isn&#39;t compromised, which given the current flood of severe security bugs is hard to believe. But it&#39;s also an unnecessary stopgap against people who know about computers. Basically, the computer is mine, waiting for my command. I paid for it, and I expect the machine to do what I want. And if I&#39;m okay with a driver, I don&#39;t take &amp;quot;Sorry, can&#39;t do that because it isn&#39;t signed as an answer&amp;quot; - I demand the ability to say &amp;quot;Shut up and install the driver&amp;quot; and Windows XP still offers that, while newer versions of Windows don&#39;t.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s on the screen: Maniac Mansion</title>
      <link>https://stum.de/2014/02/10/whats-on-the-screen-maniac-mansion/</link>
      <pubDate>Mon, 10 Feb 2014 03:00:12 +0000</pubDate>
      <guid>https://stum.de/2014/02/10/whats-on-the-screen-maniac-mansion/</guid>
      <description>&lt;p&gt;I&#39;m currently looking into Commodore 64 game development again, and one of the interesting questions is &amp;quot;How to display the graphics?&amp;quot; The C64 has a plethora of display modes, and with the use of raster interrupts it is possible to mix the different modes to create crazy tricks. A while back, I asked a question titled &amp;quot;&lt;a href=&#34;https://gamedev.stackexchange.com/questions/22037/what-exactly-makes-up-a-screen-in-a-typical-c64-game&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;What exactly makes up a screen in a typical C64 game?&lt;/a&gt;&amp;quot; and got a good answer, but at the time I didn&#39;t really understand it. In order to really understand how a C64 screen is made up, I&#39;m looking at a few games and describe what exactly they do. The first game I&#39;m looking at is Maniac Mansion, undoubtedly one of the most important adventure games ever written (Random fact: I was lucky enough to finally find an original C64 version of it &amp;#x1f642;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>The importance of Afterglow for retro games</title>
      <link>https://stum.de/2014/01/27/the-importance-of-afterglow-for-retro-games/</link>
      <pubDate>Mon, 27 Jan 2014 03:00:10 +0000</pubDate>
      <guid>https://stum.de/2014/01/27/the-importance-of-afterglow-for-retro-games/</guid>
      <description>&lt;p&gt;This is Pac-Man on the Atari 2600, played on an Emulator. The game was generally seen as a horrible port of the arcade game, done under a lot of time pressure, and this video really makes it look bad. See the flickering ghosts? How could they ever release a game like that? And it&#39;s not the emulator either, hooking up a real Atari 2600 to a modern TV has the same flickering!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Math Cookbook: Radians and Degrees</title>
      <link>https://stum.de/2013/12/22/game-math-cookbook-radians-and-degrees/</link>
      <pubDate>Sun, 22 Dec 2013 03:00:54 +0000</pubDate>
      <guid>https://stum.de/2013/12/22/game-math-cookbook-radians-and-degrees/</guid>
      <description>&lt;p&gt;When working with angles, I&#39;m used to degrees. 90 degrees is a right angle, 360 degrees is a full circle. But in Game Math, Radians are commonly used. What are they, why do they exist and how would I use them?&lt;/p&gt;&#xA;&lt;p&gt;Well, radians are derived from π (pi). 180 degrees would be 3.14.... radians, or more exactly, 180 degrees is exactly π radians. Thus, 360 degrees is 2*π, 90 degrees is π/2, 45 degrees is π/4 etc. There is a beautiful explanation (with pictures) on &lt;a href=&#34;http://www.mathsisfun.com/geometry/radians.html&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;MathIsFun.com&lt;/a&gt; which should make it very clear what radians are.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Math Cookbook: Finding out where to move to through the Pythagorean theorem</title>
      <link>https://stum.de/2013/12/21/game-math-cookbook-finding-out-where-to-move-to-through-the-pythagorean-theorem/</link>
      <pubDate>Sat, 21 Dec 2013 03:00:21 +0000</pubDate>
      <guid>https://stum.de/2013/12/21/game-math-cookbook-finding-out-where-to-move-to-through-the-pythagorean-theorem/</guid>
      <description>&lt;p&gt;It&#39;s been fifteen years since I had math in school, and even then trigonometry was barely just touched on. Every time I try to do game development though, I&#39;m hitting a brick wall because people throw around concepts like tangents, radians and square roots of things like it&#39;s nothing and I completely forgot about all of that. Wikipedia isn&#39;t really that helpful because it explains the concepts from a math perspective which means it&#39;s dry, complicated, and doesn&#39;t answer the question &amp;quot;What would I use this mathematical concept for?&amp;quot;. So for my own sake, I&#39;m blogging about a game problem and how to solve it with math in a way that I can understand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplexcel 1.0.3</title>
      <link>https://stum.de/2013/08/21/simplexcel-1-0-3/</link>
      <pubDate>Tue, 20 Aug 2013 20:36:20 +0000</pubDate>
      <guid>https://stum.de/2013/08/21/simplexcel-1-0-3/</guid>
      <description>&lt;p&gt;A while ago I created &lt;a href=&#34;https://stum.de/2013/01/10/simplexcel-simple-xlsx-library-for-net/&#34;&gt;my own, simple Excel .xlsx creation library&lt;/a&gt; for .net 4.0+. The reason I did this was because I was unhappy with the ones on the market – many of them tried to replicate every feature Excel has to offer but don’t test actually against the actual Excel application and thus miss things like sheet lengths/invalid characters (which are NOT part of the OpenXML Spreadsheet standard) or allow to otherwise create invalid Excel files, prompting Excel to give you a super useless “Invalid data found, do you want to recover?”.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 Years of Stackoverflow.com</title>
      <link>https://stum.de/2013/06/21/5-years-of-stackoverflow-com/</link>
      <pubDate>Fri, 21 Jun 2013 00:12:57 +0000</pubDate>
      <guid>https://stum.de/2013/06/21/5-years-of-stackoverflow-com/</guid>
      <description>&lt;p&gt;On April 6, 2008, Jeff Atwood asked for help naming his little project. On April 16, he announced StackOverflow.com. On September 16, it launched. (What’s the obsession with the number 6, Jeff?). In between, beta access was granted to people. I was part of the second beta wave and got my access on August 1, 2008:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Welcome to the Stack Overflow private beta!&lt;br&gt;&#xA;Please read this first. Seriously:&lt;br&gt;&#xA;&lt;a href=&#34;http://blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;http://blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Are Data Annotations a sign of bad design?</title>
      <link>https://stum.de/2013/06/17/are-data-annotations-a-sign-of-bad-design/</link>
      <pubDate>Mon, 17 Jun 2013 12:21:58 +0000</pubDate>
      <guid>https://stum.de/2013/06/17/are-data-annotations-a-sign-of-bad-design/</guid>
      <description>&lt;p&gt;The .net Framework comes with a validation system, called &lt;a href=&#34;https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations?view=net-9.0&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Data Annotations&lt;/a&gt;. At first glance, these are pretty awesome and I have used them a lot. In a nutshell, it allows you to do stuff like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[Required]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[StringLength(64)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is also absolutely trivial to write your own validators and to validate objects using these. In fact, ASP.net MVC will automatically verify these as part of its model binding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In defense of OAuth 1.0a</title>
      <link>https://stum.de/2013/04/17/in-defense-of-oauth-1-0a/</link>
      <pubDate>Tue, 16 Apr 2013 23:58:04 +0000</pubDate>
      <guid>https://stum.de/2013/04/17/in-defense-of-oauth-1-0a/</guid>
      <description>&lt;p&gt;Yeah, I’m late to the party, sue me if you want &amp;#x1f642; Anyway, I’ve just finished implementing OAuth on both a server and client, using .net for an additional challenge,&lt;/p&gt;&#xA;&lt;p&gt;OAuth 1.0a is a decent protocol. One of the things it gets right is also the one biggest problem: The weird parameter reordering to create the HMAC-SHA1 signature. From what I’ve read, this was because the PHP installation on a certain webhost didn’t give access to the raw QueryString, hence this mechanism was created.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guacamelee!</title>
      <link>https://stum.de/2013/04/10/guacamelee/</link>
      <pubDate>Tue, 09 Apr 2013 21:16:06 +0000</pubDate>
      <guid>https://stum.de/2013/04/10/guacamelee/</guid>
      <description>&lt;p&gt;In 1997, there was a game that was not simply great but truly genre-shaping - &lt;a href=&#34;https://en.wikipedia.org/wiki/Castlevania:_Symphony_of_the_Night&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Castlevania: Symphony of the Night&lt;/a&gt;. It took Castlevania but turned it into a deep, open world action RPG not unlike Metroid but with it’s own unique RPG elements. Thus, a new genre was created: Metroidvania. Games in which you had a broad world to explore with many, many hidden rooms that require you to gain powers and then backtrack, all to be rewarded with secrets (in case of SOTN, they literally hid half of the game behind one such secret).&lt;/p&gt;</description>
    </item>
    <item>
      <title>A look at Adventure Game GUIs</title>
      <link>https://stum.de/2013/01/30/a-look-at-adventure-game-guis/</link>
      <pubDate>Wed, 30 Jan 2013 08:59:09 +0000</pubDate>
      <guid>https://stum.de/2013/01/30/a-look-at-adventure-game-guis/</guid>
      <description>&lt;p&gt;Adventure Games went a long way from the Text Adventures of the 80’s to be something like an anachronism in the 2010’s landscape that’s dominated by twitch-based action games. Here are some GUIs that Adventure Games used over the years. This is by no means exhaustive, but should cover the most common ones.&lt;/p&gt;&#xA;&lt;p&gt;Early Sierra Games were essentially still text adventures – you could move your character, but not interact with anything without typing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Flow, Part One (Dissecting Indiana Jones and the Fate of Atlantis Part 2)</title>
      <link>https://stum.de/2013/01/21/game-flow-part-one-dissecting-indiana-jones-and-the-fate-of-atlantis-part-2/</link>
      <pubDate>Sun, 20 Jan 2013 20:06:49 +0000</pubDate>
      <guid>https://stum.de/2013/01/21/game-flow-part-one-dissecting-indiana-jones-and-the-fate-of-atlantis-part-2/</guid>
      <description>&lt;p&gt;Typical Adventures increase the complexity and difficulty of the game gradually and like movie scripts, they often have several distinct parts. Atlantis is no difference, although the acts aren’t clearly marked in the game.&lt;/p&gt;&#xA;&lt;p&gt;From a high level perspective, the game has these parts:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2013/01/21/game-flow-part-one-dissecting-indiana-jones-and-the-fate-of-atlantis-part-2/Indy4-Overview.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;Atlantis is one of the most complex Adventure games because it has three different paths through the middle section. A lot of Adventure games have multiple solution to individual puzzles, but the paths make so much use of conditional logic and global state variables, the complexity is a lot higher than in other Adventures. According to Wikipedia, adding the paths added an additional 6 month and turned it into a 2 year project, so that cost was significant.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Authentic Gaming Experiences</title>
      <link>https://stum.de/2013/01/20/authentic-gaming-experiences/</link>
      <pubDate>Sun, 20 Jan 2013 13:25:26 +0000</pubDate>
      <guid>https://stum.de/2013/01/20/authentic-gaming-experiences/</guid>
      <description>&lt;p&gt;I’m just setting up my Commodore 64 again for some authentic gaming. The 5.25” floppy disks on the day use a notch in the side to detect if the disk was write protected or not, and commercially bought empty disks usually only had the notch on the right to make one side writable.&lt;/p&gt;&#xA;&lt;p&gt;However, people soon found out that the disks are usually safe to use on both sides, and that if you put a similar hole in the other side, you could write data onto the other side as well. There were even sophisticated hole punches for floppy disks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Intro Sequence (Dissecting Indiana Jones and the Fate of Atlantis Part 1)</title>
      <link>https://stum.de/2013/01/20/the-intro-sequence-dissecting-indiana-jones-and-the-fate-of-atlantis-part-1/</link>
      <pubDate>Sat, 19 Jan 2013 18:34:23 +0000</pubDate>
      <guid>https://stum.de/2013/01/20/the-intro-sequence-dissecting-indiana-jones-and-the-fate-of-atlantis-part-1/</guid>
      <description>&lt;p&gt;As you might have gathered from &lt;a href=&#34;https://stum.de/2012/12/13/what-i-like-and-dislike-in-adventure-games/&#34;&gt;my previous posting about Adventure Games&lt;/a&gt;, I’ve spent a lot of time recently playing these games and while there are many different details that I loved in different games, there was one game that stood out because every aspect of it was perfect: &lt;a href=&#34;https://en.wikipedia.org/wiki/Indiana_Jones_and_the_Fate_of_Atlantis&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Indiana Jones and the Fate of Atlantis&lt;/a&gt;. I believe that this game should be taught in game development classes, but as a substitute I’m creating a little series where I dissect the various parts of the game.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simplexcel - simple .xlsx library for .net</title>
      <link>https://stum.de/2013/01/10/simplexcel-simple-xlsx-library-for-net/</link>
      <pubDate>Thu, 10 Jan 2013 02:28:34 +0000</pubDate>
      <guid>https://stum.de/2013/01/10/simplexcel-simple-xlsx-library-for-net/</guid>
      <description>&lt;p&gt;As part of almost every application I work on, I need to create Excel sheets one way or the other, usually from an ASP.net MVC application. During the years, I’ve tried several approaches, and they all sucked one way or the other:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;COM Interop: By far the worst option. Requires an installed Excel. Slow. Error prone. Resource-intensive. &lt;a href=&#34;http://support.microsoft.com/KB/257757&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Not supported in a server environment.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;CSV or HTML Tables: Only supports a single worksheet, not much formatting, prone to break Excel’s heuristics (e.g., the string “00123” is interpreted as a number, stripping the leading zeroes. For big numbers, Excel loves to use scientific notation, which sucks for Barcodes which should just be interpreted as strings) and hard to create (CSV is a pain if you need to escape quotes or have newlines)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Microsoft_Office_2003_XML_formats&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Excel 2003 XML/SpreadsheetML&lt;/a&gt;: A crutch. Uncertain future, limited options, big files. But actually, not too bad.&lt;/li&gt;&#xA;&lt;li&gt;One of the many Excel 2007+ .xlsx libraries: I tried about 4 or 5, and they all sucked in a different way. No offense, but some library authors try to cover the entirety of Excel’s capabilities, leading to an awkward API. Many don’t catch specific Excel limitations that aren’t part of the standard (e.g., Sheet name length or invalid characters), which means I’m creating sheets that cause Excel to tell me there was invalid data, leaving me puzzled how to fix that.&lt;/li&gt;&#xA;&lt;li&gt;Going Low-Level with the &lt;a href=&#34;https://www.microsoft.com/en-us/Download/details.aspx?id=5124&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;OpenXML SDK 2.0&lt;/a&gt;. Believe me, you don’t want to go down that road. There is very little help creating the documents, and if you want certain features that seem obvious (e.g., setting the Author of a document, which requires adding the creator element to core.xml) you will find that there is actually no way to do it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So, all solutions I tried sucked. Which means that I set out to create another solution that sucks slightly less. Armed with some spare time, the &lt;a href=&#34;https://ecma-international.org/publications-and-standards/standards/ecma-376/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;ECMA-376 standard&lt;/a&gt; and Excel 2007 and 2010 to actually test against, I created a library that &lt;strong&gt;has a limited set of features, but implements them well&lt;/strong&gt;, handles errors properly and (hopefully) has a good API for you guys to work against.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t do Tutorial prompts</title>
      <link>https://stum.de/2012/12/16/dont-do-tutorial-prompts/</link>
      <pubDate>Sun, 16 Dec 2012 12:32:00 +0000</pubDate>
      <guid>https://stum.de/2012/12/16/dont-do-tutorial-prompts/</guid>
      <description>&lt;p&gt;What is wrong in this picture?&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2012/12/16/dont-do-tutorial-prompts/image.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;If you said “You’re using Internet Explorer” or “You’re using Google+” you might be right, but that’s not what I’m talking about.&lt;/p&gt;&#xA;&lt;p&gt;I’m talking about the fact that there is a big tutorial prompt between me and the application which prevents me from actually using the application.&lt;/p&gt;&#xA;&lt;p&gt;Google Apps does it. iTunes does it. The Kindle Paperwhite does it. Photoshop Touch does it. &lt;a href=&#34;https://stum.de/2008/04/27/interrupting-the-game-flow-annoying-as-hell/&#34;&gt;Video games do it&lt;/a&gt;. Everyone does it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What I like and dislike in Adventure games</title>
      <link>https://stum.de/2012/12/13/what-i-like-and-dislike-in-adventure-games/</link>
      <pubDate>Thu, 13 Dec 2012 04:14:46 +0000</pubDate>
      <guid>https://stum.de/2012/12/13/what-i-like-and-dislike-in-adventure-games/</guid>
      <description>&lt;p&gt;I’m currently playing and replaying a lot of adventure games, in order to dissect their individual parts and really understand what I like and dislike about them. I do like to play games for their story even more for their gameplay, but storytelling doesn’t just naturally happen. I’ve played dozens and dozens of adventures, but the ones I focused on most are &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Secret_of_Monkey_Island&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Monkey Island&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Monkey_Island_2:_LeChuck%27s_Revenge&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Le Chuck’s Revenge&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Tales_of_Monkey_Island&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Tales&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Zak_McKracken_and_the_Alien_Mindbenders&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Zak McKracken&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Maniac_Mansion&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Maniac Mansion&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Day_of_the_Tentacle&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Day of the Tentacle&lt;/a&gt;, Indiana Jones &lt;a href=&#34;https://en.wikipedia.org/wiki/Indiana_Jones_and_the_Last_Crusade:_The_Graphic_Adventure&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Last Crusade&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Indiana_Jones_and_the_Fate_of_Atlantis&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Fate of Atlantis&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Grim_Fandango&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Grim Fandango&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Secret_Files:_Tunguska&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Secret Files: Tunguska&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Lost_Horizon_%28video_game%29&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Lost Horizon&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Syberia&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Syberia&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Indigo_Prophecy&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Fahrenheit/Indigo Prophecy&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Gabriel_Knight:_Sins_of_the_Fathers&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Gabriel Knight: Sins of the Fathers&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Heavy_Rain&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Heavy Rain&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/To_The_Moon&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;To the Moon&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Walking_Dead_%282012_video_game%29&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;The Walking Dead&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Gemini_Rue&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Gemini Rue&lt;/a&gt;, with another dozen or so that I haven’t deep dived into yet and not to mention the old Infocom and Sierra text classics like &lt;a href=&#34;https://en.wikipedia.org/wiki/Zork&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Zork&lt;/a&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Police_Quest&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Police Quest&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Leisure_Suit_Larry&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Leisure Suit Larry&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The two most important lines of code I have written, ever</title>
      <link>https://stum.de/2012/05/19/the-two-most-important-lines-of-code-i-have-written-ever/</link>
      <pubDate>Sat, 19 May 2012 12:32:24 +0000</pubDate>
      <guid>https://stum.de/2012/05/19/the-two-most-important-lines-of-code-i-have-written-ever/</guid>
      <description>&lt;p&gt;There is a bit of a discussion going on in the Twitterverse about whether or not you should learn programming, &lt;a href=&#34;https://web.archive.org/web/20130331083514/http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;started by Jeff Atwood&lt;/a&gt; and picked up by others.&lt;/p&gt;&#xA;&lt;p&gt;Now, I have a great amount of respect for Jeff Atwood and there is the possibility that stuff was misunderstood. But I’m offended by the example be brought up about the code that may be written.&lt;/p&gt;&#xA;&lt;p&gt;I would like to present you with the two most important lines of code I have ever written in my entire life:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Be careful with choices that carry over multiple games</title>
      <link>https://stum.de/2012/03/07/be-careful-with-choices-that-carry-over-multiple-games/</link>
      <pubDate>Tue, 06 Mar 2012 21:25:35 +0000</pubDate>
      <guid>https://stum.de/2012/03/07/be-careful-with-choices-that-carry-over-multiple-games/</guid>
      <description>&lt;p&gt;As I &lt;a href=&#34;https://stum.de/2012/02/21/in-defense-of-story-driven-games/&#34;&gt;said before&lt;/a&gt;, I absolutely love story driven games. One thing that often turns a great game into a great series are expansions and sequels that actually continue the story and allow a flow between them. Might and Magic 1-5 had a pretty epic saga between Corak and Sheltem, Ultima was essentially 3 trilogies with Ultima 7 split into 4 parts as well, and Wizardry 6-8 formed the Cosmic Bane saga.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Always check all fields in the model</title>
      <link>https://stum.de/2012/03/04/always-check-all-fields-in-the-model/</link>
      <pubDate>Sun, 04 Mar 2012 14:44:02 +0000</pubDate>
      <guid>https://stum.de/2012/03/04/always-check-all-fields-in-the-model/</guid>
      <description>&lt;p&gt;Today, &lt;a href=&#34;https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Github was hit by a security vulnerability&lt;/a&gt; that was caused by not properly dealing with model class fields that were not passed in by the form. Basically, by forging a HTTP Request, it was possible to set values for any field in the model, even the ones the forms on the website normally don’t pass in.&lt;/p&gt;&#xA;&lt;p&gt;This type of issue is not limited to Ruby on Rails though, a similar issue can happen with any framework. Let me demonstrate how this could affect ASP.net MVC. Assume you have a Business Object:&lt;/p&gt;</description>
    </item>
    <item>
      <title>In defense of story-driven games</title>
      <link>https://stum.de/2012/02/21/in-defense-of-story-driven-games/</link>
      <pubDate>Tue, 21 Feb 2012 00:35:27 +0000</pubDate>
      <guid>https://stum.de/2012/02/21/in-defense-of-story-driven-games/</guid>
      <description>&lt;p&gt;I am a gamer. That word has many meanings, to me a gamer is someone who can immerse into games and really enjoy them, for whatever reason. For some people, that reason is Multiplayer and they tend to focus on games with strong multiplayer like FPS and sports and try to be on top of the leaderboards. For some other people, that reason is creativity and they tend to focus on sandbox games and build whole worlds in Minecraft. Other people are fascinated by playing god and shaping a world, which is served by games like The Sims.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Scrivener and GitHub</title>
      <link>https://stum.de/2011/11/08/using-scrivener-and-github/</link>
      <pubDate>Mon, 07 Nov 2011 19:48:20 +0000</pubDate>
      <guid>https://stum.de/2011/11/08/using-scrivener-and-github/</guid>
      <description>&lt;p&gt;I&#39;m participating in this years NaNoWriMo, something I missed last year. For those unfamiliar, the idea is to write a 50,000 word novel during November. With stuff like that, backup and syncing between computers becomes an issue.&lt;/p&gt;&#xA;&lt;p&gt;Now, I made a smart choice: Instead of using Microsoft Word or other, similar inadequate applications to write the manuscript, I use &lt;a href=&#34;http://www.literatureandlatte.com/scrivener.php&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Scrivener&lt;/a&gt;. It saves its data in what seems like a static file at first glance:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thoughts on OR/M</title>
      <link>https://stum.de/2011/09/28/thoughts-on-orm-2/</link>
      <pubDate>Tue, 27 Sep 2011 20:39:32 +0000</pubDate>
      <guid>https://stum.de/2011/09/28/thoughts-on-orm-2/</guid>
      <description>&lt;p&gt;&lt;strong&gt;There is an updated post, written in August 2016: &lt;a href=&#34;https://stum.de/2016/08/24/thoughts-on-orms-2016-edition/&#34;&gt;https://stum.de/2016/08/24/thoughts-on-orms-2016-edition/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It&#39;s hard to imagine a world without OR/Ms anymore. The old days of making a query, getting a reader, looping through it, getting every column into an object...&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m a Linq2Sql user. I like it&#39;s relatively easy setup and good flexibility, and it has a really good query generator. However, I&#39;m running into some issues with Unit Testing it, because you can&#39;t really emulate all the features that it has (EntityRefs with a composite Key or fields that are DbGenerated are a nightmare). Since it is a one-off technology for SQL Server, it doesn&#39;t work with any other database (not even SQL Compact 4, which sucks as it would be the perfect Unit Test drop in).&lt;/p&gt;</description>
    </item>
    <item>
      <title>I would like Tech Books to be like this</title>
      <link>https://stum.de/2011/08/31/i-would-like-tech-books-to-be-like-this/</link>
      <pubDate>Tue, 30 Aug 2011 20:49:08 +0000</pubDate>
      <guid>https://stum.de/2011/08/31/i-would-like-tech-books-to-be-like-this/</guid>
      <description>&lt;p&gt;I just received my copy of &lt;code&gt;Using the HTML5 Filesystem API&lt;/code&gt; by Eric Bidelman and wanted to use it as an example of how I would like Tech Books to be:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2011/08/31/i-would-like-tech-books-to-be-like-this/HTML5FS.jpg&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;This book is specialized and concise. As you might see from the image, it comes it an well under 100 Pages and covers exactly one topic.&lt;/p&gt;&#xA;&lt;p&gt;I have only very limited time compared to the amount of technology that’s out there. The Web is evolving so fast, it’s hard to keep up with new developments. Information is scattered in blog posts, and it’s often hard to just find a cohesive front-to-back tutorial. Also, even though I own both a Kindle and an iPad, I prefer my books to be on dead trees.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Duke Nukem Forever</title>
      <link>https://stum.de/2011/06/26/duke-nukem-forever/</link>
      <pubDate>Sat, 25 Jun 2011 23:57:06 +0000</pubDate>
      <guid>https://stum.de/2011/06/26/duke-nukem-forever/</guid>
      <description>&lt;p&gt;A couple of weeks ago, Duke Nukem Forever was finally released after perhaps the longest development period ever. But the reviews were brutal, ripping the game apart. In my opinion though, the reviews are too harsh. The game isn’t great, but not that horrible as some reviewers like to call it.&lt;/p&gt;&#xA;&lt;p&gt;Now, there are a couple of assumptions. First, a lot of people expect that a game that is in development for 14 years at least should cure cancer, bring world peace and send men to the mars just so that it is okay and meets the expectations. Then, they like to compare it to the predecessor and to other games in the genre, which is fair.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NDepend – &#34;SQL&#34; for your code</title>
      <link>https://stum.de/2011/03/21/ndepend-sql-for-your-code/</link>
      <pubDate>Sun, 20 Mar 2011 19:38:25 +0000</pubDate>
      <guid>https://stum.de/2011/03/21/ndepend-sql-for-your-code/</guid>
      <description>&lt;p&gt;Some time ago I received an offer for a &lt;a href=&#34;http://www.ndepend.com/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;NDepend&lt;/a&gt; Professional license. I was wary at first since credibility and Free Stuff is hard to mix together, but I accepted it because it was on my list of tools to play around with anyway. It took me several months to actually use it in a real application, but here are some thoughts about it. Again, I received the license for free but the posting here is unbiased.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finding duplicate File names in a directory tree</title>
      <link>https://stum.de/2011/01/26/finding-duplicate-file-names-in-a-directory-tree/</link>
      <pubDate>Wed, 26 Jan 2011 00:42:35 +0000</pubDate>
      <guid>https://stum.de/2011/01/26/finding-duplicate-file-names-in-a-directory-tree/</guid>
      <description>&lt;p&gt;Just a little one liner. Essentially I have a nested file system structure with a lot of subfolders and I wanted to know if there are duplicate file names.&lt;/p&gt;&#xA;&lt;p&gt;This does the trick for me:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -iname &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.txt&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; basename &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -d -i &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So what this does:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Call find to find all files that match *.txt (case insensitive) in the current folder and all subfolders&lt;/li&gt;&#xA;&lt;li&gt;Call basename to turn /path/to/file.txt into file.txt. We have to use xargs since basename does not seem to be able to read from stdin&lt;/li&gt;&#xA;&lt;li&gt;Call uniq to check the list for duplicates. -d means that we only show duplicates (default is to show unique values) and -i performs a case insensitive comparison&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Sidenote: As much as I love working with Windows, it just does not stand a chance against a long chain of simple, small, well-defined UNIX tools that are piped together. As much as PowerShell is a step in the right direction, it&#39;s not the same because the philosophy of having tons of very limited and specialized tools doesn&#39;t seem to exist in the Windows universe - most command line tools do too much. Also, UNIX has a 30 year head start against PowerShell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tron Legacy</title>
      <link>https://stum.de/2010/12/19/tron-legacy/</link>
      <pubDate>Sun, 19 Dec 2010 08:10:11 +0000</pubDate>
      <guid>https://stum.de/2010/12/19/tron-legacy/</guid>
      <description>&lt;p&gt;I saw Tron Legacy on Friday and thought I&#39;d write down a few thoughts. First, I only saw the first Tron in full length last year, but ever since I saw some bits of it in my childhood (and played the many light cycle games) it impacted me. It came out in 1982, at a time where Arcades were still popular but home computers were still mainly something for geeks. It was extremely visionary and revolutionary at the time, and it still holds up very well. Yes, the hand colored black and white scenes show their age, but the movie just has so much spirit to still be fantastic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 7: The ret instruction)</title>
      <link>https://stum.de/2010/09/12/writing-a-bf-compiler-for-net-part-7-the-ret-instruction/</link>
      <pubDate>Sun, 12 Sep 2010 14:52:47 +0000</pubDate>
      <guid>https://stum.de/2010/09/12/writing-a-bf-compiler-for-net-part-7-the-ret-instruction/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://stum.de/2010/09/12/writing-a-bf-compiler-for-net-part-6-the-actual-compiler/&#34;&gt;Yesterday I have concluded&lt;/a&gt; the .net BF series with the explanation and code of the .net BF Compiler. But there was one thing that is important and that was unclear in the post: The ret instruction.&lt;/p&gt;&#xA;&lt;p&gt;Remember how the compiler emits a ret instruction at the end of the constructor and Execute method? I said it&#39;s optional and only required for verifiable code. Well, &lt;a href=&#34;http://stackoverflow.com/questions/3692937/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;I&#39;ve asked on Stack Overflow&lt;/a&gt; in the meantime and got the answer I was looking for:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 6: The actual compiler)</title>
      <link>https://stum.de/2010/09/12/writing-a-bf-compiler-for-net-part-6-the-actual-compiler/</link>
      <pubDate>Sat, 11 Sep 2010 16:54:56 +0000</pubDate>
      <guid>https://stum.de/2010/09/12/writing-a-bf-compiler-for-net-part-6-the-actual-compiler/</guid>
      <description>&lt;p&gt;In the last 5 parts we looked at each of the 8 instructions, how it works in BF, how it would work in C# and how it looks in IL. Now, what is a compiler actually?&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-compiler-theory&#34;&gt;Quick Compiler Theory&lt;/h2&gt;&#xA;&lt;p&gt;Basically our end result has to be a series of bytes. For example, the IL Instruction ldc.i4.0 is compiled as 0x16. Some instructions take parameters. For example, the br instruction is compiled as 0x38 0x?? 0x?? 0x?? 0x??. That&#39;s 5 bytes: 0x38 for the actual br and then 4 bytes for the address to jump to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why doesn&#39;t Windows offer a working help system anymore?</title>
      <link>https://stum.de/2010/06/11/why-doesnt-windows-offer-a-working-help-system-anymore/</link>
      <pubDate>Thu, 10 Jun 2010 22:32:39 +0000</pubDate>
      <guid>https://stum.de/2010/06/11/why-doesnt-windows-offer-a-working-help-system-anymore/</guid>
      <description>&lt;p&gt;If you are developing Windows Desktop applications, you may want to offer context-sensitive help, triggered either by pressing F1 or by clicking on the question mark icon in the title bar and on an element. Back in the old days (starting in 1990 and de-facto ending in 2006), there was &lt;a href=&#34;https://en.wikipedia.org/wiki/WinHelp&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;WinHelp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2010/06/11/why-doesnt-windows-offer-a-working-help-system-anymore/winhelp2k.gif&#34; alt=&#34;WinHelp Screenshot&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;Now, WinHelp wasn&#39;t exactly beautiful and in recent years (after 1996 that is), the &amp;quot;Maximize Database Size&amp;quot; dialog &lt;a href=&#34;http://www.joelonsoftware.com/uibook/chapters/fog0000000059.html&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;was downright stupid&lt;/a&gt;, but WinHelp had all the features a Help system needs: Articles are organized in Chapters and can contain Images, Links and basic formatting. And it allowed your application to open a specific page, providing contextual help.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 5: [ and ] - while loops in IL)</title>
      <link>https://stum.de/2010/04/28/writing-a-bf-compiler-for-net-part-5-and-while-loops-in-il/</link>
      <pubDate>Tue, 27 Apr 2010 23:02:53 +0000</pubDate>
      <guid>https://stum.de/2010/04/28/writing-a-bf-compiler-for-net-part-5-and-while-loops-in-il/</guid>
      <description>&lt;p&gt;The final two commands we&#39;re looking at are [ and ]. Their description in the &lt;a href=&#34;https://stum.de/2010/04/09/writing-a-bf-compiler-for-net-part-1-explanation-of-the-language-and-interpreter-in-c/&#34;&gt;first article&lt;/a&gt; was a bit cryptic, [ was described as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Go to the next instruction if the byte at the memory pointer is not 0, otherwise move it past the matching ] instruction&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;while ] was described as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Go to the instruction after the matching [ if the byte at the memory pointer is not 0, else move it past the ]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 4: . and ,)</title>
      <link>https://stum.de/2010/04/27/writing-a-bf-compiler-for-net-part-4-and/</link>
      <pubDate>Mon, 26 Apr 2010 20:45:31 +0000</pubDate>
      <guid>https://stum.de/2010/04/27/writing-a-bf-compiler-for-net-part-4-and/</guid>
      <description>&lt;p&gt;In the last &lt;a href=&#34;https://stum.de/2010/04/12/writing-a-bf-compiler-for-net-part-2-writing-bf-in-c-and-looking-at-the-il/&#34;&gt;two&lt;/a&gt; &lt;a href=&#34;https://stum.de/2010/04/19/writing-a-bf-compiler-for-net-part-3-pointer-and-pointer/&#34;&gt;parts&lt;/a&gt; we tackled 4 of the 8 possible BF Commands: &amp;gt;, &amp;lt;, +, -. Now we look at . and , for input and output.&lt;/p&gt;&#xA;&lt;p&gt;When working with a Console Application, it only makes sense to use the built-in commands Console.Write and Console.Read.&lt;/p&gt;&#xA;&lt;p&gt;Let&#39;s look at output (the . command) first. The C# code we&#39;re converting is a one-liner:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Console.Write((char)memory[pointer]);&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;As &lt;code&gt;memory[pointer]&lt;/code&gt; is a byte, we have to cast it to char to write it to the console. In IL, the line looks like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Optional Parameters work, why they can be dangerous, and why they work in .net 2/3 as well</title>
      <link>https://stum.de/2010/04/19/how-optional-parameters-work-why-they-can-be-dangerous-and-why-they-work-in-net-23-as-well/</link>
      <pubDate>Mon, 19 Apr 2010 11:36:59 +0000</pubDate>
      <guid>https://stum.de/2010/04/19/how-optional-parameters-work-why-they-can-be-dangerous-and-why-they-work-in-net-23-as-well/</guid>
      <description>&lt;p&gt;One of the changes I really like in Visual Studio 2010 are optional parameters to method. Basically they allow you to specify a default value for each parameter and thus reduce the number of overloads to a method. Make sure to read to the end as there is a &lt;strong&gt;huge word of caution regarding optional parameters&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Instead of having this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SomeMethod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SomeMethod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Was Empty&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SomeMethod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{0}: {1}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can just have this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 3: pointer&#43;&#43; and pointer--)</title>
      <link>https://stum.de/2010/04/19/writing-a-bf-compiler-for-net-part-3-pointer-and-pointer/</link>
      <pubDate>Sun, 18 Apr 2010 16:09:45 +0000</pubDate>
      <guid>https://stum.de/2010/04/19/writing-a-bf-compiler-for-net-part-3-pointer-and-pointer/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://stum.de/2010/04/12/writing-a-bf-compiler-for-net-part-2-writing-bf-in-c-and-looking-at-the-il/&#34;&gt;last posting&lt;/a&gt; gave an introduction to the concepts and we started looking at the &lt;code&gt;memory[pointer]++/--&lt;/code&gt; functions. Today is a quicky post to look at two other instructions, &lt;code&gt;pointer++&lt;/code&gt; and &lt;code&gt;pointer--&lt;/code&gt; or &lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;&lt;/code&gt; in BF.&lt;/p&gt;&#xA;&lt;p&gt;Unsurprisingly, these are extremely simple operations, requiring only 5 IL Commands:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  IL_0000:  ldsfld     int16 BFHelloWorldCSharp.Program::pointer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  IL_0005:  ldc.i4.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  IL_0006:  add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  IL_0007:  conv.i2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  IL_0008:  stsfld     int16 BFHelloWorldCSharp.Program::pointer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ldsfld loads a static field onto the evaluation stack, ldc.i4.1 pushes the number 1 to the stack, add takes the two values from the stack and pushes the result back. conv.i2 converts the value on the stack (which is an Int32) to Int16 (2-Byte Int), pads it to be Int32 (as that is the smallest datatype possible on the stack) and pushes it back. stsfld then replaces the value in the static variable with the value from the stack.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 2: Writing BF in C# and looking at the IL)</title>
      <link>https://stum.de/2010/04/12/writing-a-bf-compiler-for-net-part-2-writing-bf-in-c-and-looking-at-the-il/</link>
      <pubDate>Sun, 11 Apr 2010 20:09:34 +0000</pubDate>
      <guid>https://stum.de/2010/04/12/writing-a-bf-compiler-for-net-part-2-writing-bf-in-c-and-looking-at-the-il/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://stum.de/2010/04/09/writing-a-bf-compiler-for-net-part-1-explanation-of-the-language-and-interpreter-in-c/&#34;&gt;last posting&lt;/a&gt;, we looked at BF as a language and how to write an interpreter in C#. The point of doing that was to understand what each function actually does. As I am no IL Expert, my second step was to write the Hello World BF Application as C#, that is one extremely long function with each BF command spelled out. This is an excerpt:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]++;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// snipped&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// snipped&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you see, we literally translated each instruction into a C# instruction. Compile this in Debug Mode, load it up in ildasm:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a BF Compiler for .net (Part 1: Explanation of the language and interpreter in C#)</title>
      <link>https://stum.de/2010/04/09/writing-a-bf-compiler-for-net-part-1-explanation-of-the-language-and-interpreter-in-c/</link>
      <pubDate>Thu, 08 Apr 2010 23:24:20 +0000</pubDate>
      <guid>https://stum.de/2010/04/09/writing-a-bf-compiler-for-net-part-1-explanation-of-the-language-and-interpreter-in-c/</guid>
      <description>&lt;p&gt;Today I&#39;m starting a small series about how to write a Compiler to .net IL. I wanted to understand IL better and wanted to learn how .net really works. Even though I&#39;m a Web Developer (which usually means working on a much higher level of abstraction), at some point there is this impossible issue that has no cause and no resolution and where Reflector and WinDbg have to come in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TimeSpan.js Version 1.2 released</title>
      <link>https://stum.de/2010/03/05/timespan-js-version-1-2-released/</link>
      <pubDate>Thu, 04 Mar 2010 23:42:48 +0000</pubDate>
      <guid>https://stum.de/2010/03/05/timespan-js-version-1-2-released/</guid>
      <description>&lt;p&gt;I&#39;ve just pushed a new Version of &lt;a href=&#34;http://github.com/mstum/TimeSpan.js&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;my TimeSpan Library to GitHub&lt;/a&gt;. Version 1.2 contains a new &amp;quot;static&amp;quot; constructor TimeSpan.FromDates which takes two dates and returns the difference between them as a TimeSpan. If the second date is earlier than the first date, the TimeSpan will be negative. Pass true as third parameter to force it to be positive.&lt;/p&gt;&#xA;&lt;p&gt;Usage example:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;date1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;date2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TimeSpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FromDates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;date2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;date1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ts2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TimeSpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FromDates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;date2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;date1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;alert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;totalSeconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// -5, because we put the later date first&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;alert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ts2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;totalSeconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 5, because we passed true as third parameter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>An Extension method to replace multiple Chars in a string</title>
      <link>https://stum.de/2010/02/16/an-extension-method-to-replace-multiple-chars-in-a-string/</link>
      <pubDate>Mon, 15 Feb 2010 18:14:44 +0000</pubDate>
      <guid>https://stum.de/2010/02/16/an-extension-method-to-replace-multiple-chars-in-a-string/</guid>
      <description>&lt;p&gt;I needed a Sanitizer function for a project, which will replace chars in a string with other chars. To my dismay, I found that there is only a function to replace a single char or string. Of course, I could chain multiple string.Replace calls, but that creates a new string every time which can add quite a bit of overhead. So I&#39;ve created a function that takes two Lists of chars and then replaces each occurrence of one char with another one. This also allowed me to implement a second function I was missing from string.Replace, the ability to remove chars (it&#39;s possible if you use the string overloads, but not the char ones). The second List is of nullable char type, so just pass in null to remove a char.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript TimeSpan library updated to 1.1</title>
      <link>https://stum.de/2010/02/13/javascript-timespan-library-updated-to-1-1/</link>
      <pubDate>Fri, 12 Feb 2010 20:08:39 +0000</pubDate>
      <guid>https://stum.de/2010/02/13/javascript-timespan-library-updated-to-1-1/</guid>
      <description>&lt;p&gt;I have polished the TimeSpan library a bit more. I ran it through JSLint to get the formatting right, and I changed it&#39;s function names to follow the common practice in the JavaScript world. Also, there is now a Documentation with some examples.&lt;/p&gt;&#xA;&lt;p&gt;Note that due to the naming changes, this is a breaking change.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://github.com/mstum/TimeSpan.js&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Download it from GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript TimeSpan Library</title>
      <link>https://stum.de/2010/02/11/javascript-timespan-library/</link>
      <pubDate>Thu, 11 Feb 2010 01:14:50 +0000</pubDate>
      <guid>https://stum.de/2010/02/11/javascript-timespan-library/</guid>
      <description>&lt;p&gt;Working with Time is always weird. Some functions want milliseconds, others want seconds. And if you want to express &amp;quot;3 hours&amp;quot; in milliseconds, usually the result looks like &lt;code&gt;var targetTime = 3 * 60 * 60 * 1000;&lt;/code&gt; which is a bit ugly in my opinion. Also, I always have to remember what to actually add together &amp;#x1f642;&lt;/p&gt;&#xA;&lt;p&gt;As a .net Developer, I&#39;m used to the useful &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/system.timespan.aspx&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;System.TimeSpan&lt;/a&gt; and &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/system.datetime.aspx&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;System.DateTime&lt;/a&gt; structs which have such useful features like AddHours or TotalMilliseconds to have a more natural way to work with Time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An ASP.net AJAX UpdateProgress that can render Inline</title>
      <link>https://stum.de/2010/01/28/an-asp-net-ajax-updateprogress-that-can-render-inline/</link>
      <pubDate>Wed, 27 Jan 2010 18:02:34 +0000</pubDate>
      <guid>https://stum.de/2010/01/28/an-asp-net-ajax-updateprogress-that-can-render-inline/</guid>
      <description>&lt;p&gt;I&#39;ve been starting to pick up ASP.net AJAX again, mainly because as a SharePoint developer I will be &amp;quot;stuck&amp;quot; with WebForms 3.5 for the next few years (SharePoint 2010 will not be a .net 4.0 application). As part of that, I remembered one issue I had: &lt;a href=&#34;http://stackoverflow.com/questions/42499/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;The UpdateProgress renders a div with display:block set&lt;/a&gt;, which means it is not possible to have the updateProgress right next to a button. Joe Audette &lt;a href=&#34;https://joeaudette.com/solving-the-asp-net-updateprogress-div-problem/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;had the right idea&lt;/a&gt;: Grab the UpdateProgress from the Mono Project and modify it. The nice thing about the Class Libraries of Mono is that they are licensed under the very liberal MIT X11 license, making them good candidates as a base for modifications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A simple Even/Odd Cycler for .net</title>
      <link>https://stum.de/2010/01/22/a-simple-evenodd-cycler-for-net/</link>
      <pubDate>Thu, 21 Jan 2010 17:38:37 +0000</pubDate>
      <guid>https://stum.de/2010/01/22/a-simple-evenodd-cycler-for-net/</guid>
      <description>&lt;p&gt;If you want a table with different CSS Styles for even/odd rows, that is reasonably easy, usually you have code like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;evenRow&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;someList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;evenRow&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;evenRow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;SomeTable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SomeFunctionThatReturnsATableRow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;evenRow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;evenRow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;oddRow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So we have a bool that we switch on every iteration and then we derive the CSS Class Name from that. If you do that in one place, it&#39;s okay, but if you have to do that in many places, it can become quite a bit tedious. Sure, if you happen to use a for-loop you can just use &lt;code&gt;index % 2 == 0&lt;/code&gt; to find out if you are on an even row, but I instead created a class:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disabling Hibernate on Windows 7</title>
      <link>https://stum.de/2010/01/17/disabling-hibernate-on-windows-7/</link>
      <pubDate>Sun, 17 Jan 2010 02:00:02 +0000</pubDate>
      <guid>https://stum.de/2010/01/17/disabling-hibernate-on-windows-7/</guid>
      <description>&lt;p&gt;Okay, so my system Hard Drive isn&#39;t too big, only 139 GB. But it&#39;s a 10k Raptor, so for the time being it will have to suffice until SSDs get good and affordable.&lt;/p&gt;&#xA;&lt;p&gt;To my shock, today it was full. While checking what took so much space, I found quite a few things, but one caught my attention, the Hibernate file - hiberfil.sys was nearly 7 GB in size.&lt;/p&gt;&#xA;&lt;p&gt;I have 8 Gigabytes of RAM in my machine, so I have to live with a large Page File (no, I&#39;m not disabling it. If even &lt;a href=&#34;https://web.archive.org/web/20111103013506/http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Mark Russinovich advises&lt;/a&gt; against disabling it, that counts more), but I certainly do not need the Hibernate file as this is a Desktop PC that&#39;s either running or off.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extension Method: Return another string if string is null or empty</title>
      <link>https://stum.de/2010/01/16/extension-method-return-another-string-if-string-is-null-or-empty/</link>
      <pubDate>Fri, 15 Jan 2010 15:10:46 +0000</pubDate>
      <guid>https://stum.de/2010/01/16/extension-method-return-another-string-if-string-is-null-or-empty/</guid>
      <description>&lt;p&gt;Just a tiny little extension method. You may know the ?? operator for null checks:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;var something = objectThatCouldBeNull ?? anotherObject;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Basically if objectThatCouldBeNull is null, then anotherObject is used instead. Unfortunately, this does not work with empty strings, so here is a quick extension method for that:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IfEmpty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;otherString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IsNullOrEmpty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;otherString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;call it like&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;var myString = someString.IfEmpty(&amp;quot;someOtherString&amp;quot;);&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The nice thing on extension methods is that you can call them on null instances of an object, so a call to&lt;/p&gt;</description>
    </item>
    <item>
      <title>Having a nested Configuration Section in web.config</title>
      <link>https://stum.de/2009/12/28/having-a-nested-configuration-section-in-web-config/</link>
      <pubDate>Mon, 28 Dec 2009 03:15:00 +0000</pubDate>
      <guid>https://stum.de/2009/12/28/having-a-nested-configuration-section-in-web-config/</guid>
      <description>&lt;p&gt;I&#39;m currently working on an ASP.net Application for myself, and I was thinking about Configuration. I wanted to use web.config as this is the proper way, but I was unsure what the best way is. I did not want to use appSettings as I feel my own &amp;quot;block&amp;quot; is just more tidy. Here is how I want the actual configuration to look like:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;myApp&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;injectModule=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MyApp.MyAppTestNinjectModule&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;localeSettings&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;longDateFormat=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MM/dd/yyyy HH:mm:ss&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/myApp&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So I have &amp;quot;myApp&amp;quot; as my main element, with an attribute &amp;quot;injectModule&amp;quot; and a child element &amp;quot;localeSettings&amp;quot;. Child Elements allow me to group my settings even more, as I could have in theory dozens of settings, and having them all as attributes to the main myApp-element is messy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Whatever happened to Advertising Games?</title>
      <link>https://stum.de/2009/08/15/whatever-happened-to-advertising-games/</link>
      <pubDate>Sat, 15 Aug 2009 15:46:21 +0000</pubDate>
      <guid>https://stum.de/2009/08/15/whatever-happened-to-advertising-games/</guid>
      <description>&lt;p&gt;No no, I do not mean Advertising IN Games aka. &lt;a href=&#34;http://kotaku.com/5329492/sony-scraps-wipeout-hd-loading-ad&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;&amp;quot;Why are the load times so long?&amp;quot;&lt;/a&gt; or &lt;a href=&#34;http://www.gamespot.com/news/6086076.html&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;&amp;quot;Daddy, why are the women on the advertised website nude?&amp;quot;&lt;/a&gt;. I mean Advertising Games, that is Games created by companies with the main purpose to promote their products (and no, I do NOT mean EA&#39;s yearly sports games either!).&lt;/p&gt;&#xA;&lt;p&gt;Back in the Amiga Games and in Germany, there were quite a few games that pretty much everybody who owned an Amiga had, games like &lt;a href=&#34;http://www.mobygames.com/game/das-erbe&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Das Erbe&lt;/a&gt; and &lt;a href=&#34;http://hol.abime.net/4700&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Das Schmutzige Erbe&lt;/a&gt; (created by the German Department of Nature), &lt;a href=&#34;http://hol.abime.net/5021&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Energie-Manager&lt;/a&gt; (by the Department of Economy) or &lt;a href=&#34;http://hol.abime.net/4697&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Das Telekommando&lt;/a&gt; (and &lt;a href=&#34;http://hol.abime.net/4698&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Das Telekommando kehrt zurück&lt;/a&gt;) from Deutsche Telekom and &lt;a href=&#34;http://hol.abime.net/4701&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;two&lt;/a&gt; &lt;a href=&#34;http://hol.abime.net/4702&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;games&lt;/a&gt; from BiFi... (A list of Amiga Promo games &lt;a href=&#34;http://hol.abime.net/hol_search.php?N_ref_license=3&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;is here&lt;/a&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>A simple .ini File parser for C#</title>
      <link>https://stum.de/2009/08/15/a-simple-ini-file-parser-for-c/</link>
      <pubDate>Fri, 14 Aug 2009 19:28:57 +0000</pubDate>
      <guid>https://stum.de/2009/08/15/a-simple-ini-file-parser-for-c/</guid>
      <description>&lt;p&gt;kay, so back in the old days, we had INI Files to store settings in. Those files are very simple:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Section]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;SomeOtherKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;SomeOtherValue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[AnotherSection]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Hello&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;World&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hardly exciting, but it gets the job done very well. Today I wanted to work with INI Files in my C# Application, both for reading and writing. But as I just found out, &lt;strong&gt;.net does not have built in functions for working with .ini files&lt;/strong&gt;. It looks like they want everyone to work with XML Files now. Well, apart from the fact that XML looks like my keyboard puked on my hard drive and that the format is unneccesarily complicated for this purpose, I also found that reading and writing them is rather complicated, especially since the XmlSerializer has some stupid restrictions (one being that the class needs to be public - have they never heard of reflection?).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thoughts about Final Fantasy IV: Echoes of Betrayal, Light of Redemption</title>
      <link>https://stum.de/2009/07/24/thoughts-about-final-fantasy-iv-echoes-of-betrayal-light-of-redemption/</link>
      <pubDate>Fri, 24 Jul 2009 09:04:30 +0000</pubDate>
      <guid>https://stum.de/2009/07/24/thoughts-about-final-fantasy-iv-echoes-of-betrayal-light-of-redemption/</guid>
      <description>&lt;p&gt;OverClocked ReMix recently released another Album, this time remixing the entire Final Fantasy 4 Soundtrack, called &lt;a href=&#34;http://ff4.ocremix.org/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Final Fantasy IV: Echoes of Betrayal, Light of Redemption&lt;/a&gt;. This is not their first Final Fantasy ReMix Album, as they already did one for Final Fantasy 7, called &lt;a href=&#34;http://ff7.ocremix.org/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Voices of the Lifestream&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The FF7 one had some great music, but they kept the original structure 1:1, which means it was at times somewhat incoherent and had a wild mix of styles. Off-Topic: Scenes from a memory is my favorite on that Album.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My spoiler-laden thoughts about Terminator Salvation and Terminator in genreral</title>
      <link>https://stum.de/2009/06/25/my-spoiler-laden-thoughts-about-terminator-salvation-and-terminator-in-genreral/</link>
      <pubDate>Wed, 24 Jun 2009 17:32:59 +0000</pubDate>
      <guid>https://stum.de/2009/06/25/my-spoiler-laden-thoughts-about-terminator-salvation-and-terminator-in-genreral/</guid>
      <description>&lt;p&gt;Okay, first a disclaimer: This post contains major spoilers about all 4 Terminator movies, so if you haven&#39;t seen them yet but still want to, you may want to leave now.&lt;/p&gt;&#xA;&lt;p&gt;Before talking about Terminator 4, I&#39;d like to spend some time talking about T3 and T2. When asked about Terminator 3, James Cameron said that he had finished his story with Terminator 2. This also seems to be the majority of fan opinions: T2 was a stellar sequel to a good movie, concluding the story. Two Terminator movies, Cyberdyne destroyed, Sarah and John Connor alive, all is good. But the Terminator universe had more potential. I remember playing Bethesda&#39;s First Person Shooter games - Terminator: Future Shock and Terminator: SkyNET - in the mid-90&#39;s, and I was fascinated by the dark atmosphere and the way the game builds suspense by the simple fact that not much happens at times, but you still have to expect a sudden robot attack at all time. While those games are non-canon, they prove that the man-machine war has a lot of potential for good storytelling. I always look at the Star Wars franchise, where the Expanded Universe - stories by authors other than Lucasfilm - has brought us some great characters and stories, sometimes on par with the original movies. So just like George Lucas&#39; Star Wars universe was brought in many new directions, so could the Terminator universe be. The potential is certainly there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Safe String.SubString Extension Method</title>
      <link>https://stum.de/2009/02/27/a-safe-stringsubstring-extension-method/</link>
      <pubDate>Fri, 27 Feb 2009 09:26:21 +0000</pubDate>
      <guid>https://stum.de/2009/02/27/a-safe-stringsubstring-extension-method/</guid>
      <description>&lt;p&gt;The String.Substring method in .net is useful, but has one slight quirk: If you try to read too much (i.e. &amp;quot;123&amp;quot;.Substring(1,5)), you get an ArgumentOutOfRangeException saying that &amp;quot;Index and length must refer to a location within the string.&amp;quot;. Here is an extension method that will not throw an exception, but instead return a truncated string, even it it is shorter than desired. That way, you can use it as a way to always Truncate longer strings while leaving shorter ones unchanged.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Const Strings - a very convenient way to shoot yourself in the foot</title>
      <link>https://stum.de/2009/01/14/const-strings-a-very-convenient-way-to-shoot-yourself-in-the-foot/</link>
      <pubDate>Wed, 14 Jan 2009 05:20:24 +0000</pubDate>
      <guid>https://stum.de/2009/01/14/const-strings-a-very-convenient-way-to-shoot-yourself-in-the-foot/</guid>
      <description>&lt;p&gt;If you want to have a static readonly string, you have two options:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyStringTestClass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;readonly&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticReadonly&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Static ReadOnly String&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ConstString&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Const String&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The difference is subtle at first: StaticReadonly is like a normal field that gets initialized through a static constructor, while ConstString is &amp;quot;hardcoded&amp;quot;. If you look the Assembly at it in Reflector, it looks like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyStringTestClass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Fields&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ConstString&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Const String&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;readonly&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticReadonly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Methods&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyStringTestClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;StaticReadonly&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Static ReadOnly String&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So the obvious difference is that a static readonly string is initialized in the constructor (which also means that you can set it dynamically a construction), while a const string is really carved in stone. But the real difference is more subtle. Let&#39;s create a second assembly, reference the first one and add a class:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Super Street Fighter II Turbo HD Remix</title>
      <link>https://stum.de/2008/11/27/super-street-fighter-ii-turbo-hd-remix/</link>
      <pubDate>Wed, 26 Nov 2008 15:49:39 +0000</pubDate>
      <guid>https://stum.de/2008/11/27/super-street-fighter-ii-turbo-hd-remix/</guid>
      <description>&lt;p&gt;So, today Capcom released the &lt;a href=&#34;http://en.wikipedia.org/wiki/Super_Street_Fighter_II_Turbo_HD_Remix&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;sixth Version of Street Fighter II&lt;/a&gt; for the XBox 360 and Playstation 3, available on Xbox Live Arcade for 1200 M$ or on PSN for 14.99$.&lt;/p&gt;&#xA;&lt;p&gt;Wait - ANOTHER Street Fighter? Yes. And not even an original one, but yet another Version of Street Fighter II. Now I must say one thing: I am not a Hardcore Street Fighter player, and normally I would have ignored that game. But there was one thing that caught my attention early on: They are really making a new game here, not just a port.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stack Overflow: The Close Wars</title>
      <link>https://stum.de/2008/11/25/stack-overflow-the-close-wars/</link>
      <pubDate>Tue, 25 Nov 2008 13:09:36 +0000</pubDate>
      <guid>https://stum.de/2008/11/25/stack-overflow-the-close-wars/</guid>
      <description>&lt;p&gt;So, &lt;a href=&#34;http://stackoverflow.com/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Stack Overflow&lt;/a&gt; is live since a few weeks, and it&#39;s gaining more and more momentum every day. I am &lt;a href=&#34;http://stackoverflow.com/users/91/michael-stum&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;a member&lt;/a&gt; since the very first day of private closed beta, and I have to say that Stack Overflow turned out to be a million times better than I expected.&lt;/p&gt;&#xA;&lt;p&gt;Normally, communities on the Internet tend to follow a rule that has been &lt;a href=&#34;http://www.penny-arcade.com/comic/2004/03/19/&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;described by Penny Arcade&lt;/a&gt; more than 4 years ago, and that still (and possibly even more) applies. Yet on Stack Overflow, it is a bit different. People generally... what was that word R-word again? ah yes, people generally seem to RESPECT each other, and that even outside of reputation. Truth be told: I think that the reputation system rewards people who spend a lot of time on the site, but people with the highest reputation are not necessarily the best developers on the site. I may have 12 times as much Reputation as John Resig or Scott Hanselman, but I am not a 12 times better developer than them. Actually, I think that I am more like 12 million times worse than any of them. But that also means that reputation is not used as an E-Peen. Because of the Question/Answer nature of the Site, people are getting respect for a single good answer. If I have a question and you answer it or at least point me in the right direction, I am grateful. Regardless if you invented the internet or if you are just some intern at some company, regardless if you have 1 or 10,000 reputation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RTFM: You must Enable Internet Information Services 7.0 with ASP.net (Windows Azure)</title>
      <link>https://stum.de/2008/11/10/rtfm-you-must-enable-internet-information-services-70-with-aspnet-windows-azure/</link>
      <pubDate>Mon, 10 Nov 2008 14:16:47 +0000</pubDate>
      <guid>https://stum.de/2008/11/10/rtfm-you-must-enable-internet-information-services-70-with-aspnet-windows-azure/</guid>
      <description>&lt;p&gt;I&#39;m trying out the Windows Azure SDK, and after downloading the WindowsAzureSDK-x64.msi file, I was greeted with an error message:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://stum.de/2008/11/10/rtfm-you-must-enable-internet-information-services-70-with-aspnet-windows-azure/azureerror.jpg&#34; alt=&#34;Enable Internet Information Services 7.0 with ASP.NET support&#34;&gt;&#xA;&#xA;&lt;/figure&gt;&lt;p&gt;Now, I was puzzled a little bit, because I had IIS 7.0 and .net 3.5 SP1 installed, but it turned out to be a RTFM Mistake. From the Release Notes:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Windows Vista&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From the Start menu, choose Control Panel | Programs | Programs and Features.&lt;/li&gt;&#xA;&lt;li&gt;Click Turn Windows Features On or Off.&lt;/li&gt;&#xA;&lt;li&gt;Under Microsoft .NET Framework 3.0, select Windows Communication Foundation HTTP Activation.&lt;/li&gt;&#xA;&lt;li&gt;Under Internet Information Services, expand World Wide Web Services.&lt;/li&gt;&#xA;&lt;li&gt;Under Application Development Features, select ASP.NET.&lt;/li&gt;&#xA;&lt;li&gt;Under Common HTTP Features, choose Static Content.&lt;/li&gt;&#xA;&lt;li&gt;Install the selected features.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Of course, I was missing both options. Installing both caused the Azure SDK to install perfectly fine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PermanentRedirectResult - a 301 HTTP Redirect for ASP.net MVC</title>
      <link>https://stum.de/2008/10/22/permanentredirectresult/</link>
      <pubDate>Wed, 22 Oct 2008 15:46:52 +0000</pubDate>
      <guid>https://stum.de/2008/10/22/permanentredirectresult/</guid>
      <description>&lt;p&gt;For a little project to learn ASP.net MVC, I needed my Controller to return a &lt;a href=&#34;http://en.wikipedia.org/wiki/HTTP_301&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;HTTP 301 Redirect&lt;/a&gt;. Unfortunately, just calling &lt;code&gt;return Redirect(url)&lt;/code&gt; returns a &lt;a href=&#34;http://en.wikipedia.org/wiki/HTTP_302&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;HTTP 302&lt;/a&gt; instead of a 301. After checking on the MVC Forums, there seems to be no &amp;quot;official&amp;quot; way to perform a 301 Redirect in a Controller. Of course, you can always modify the Response directly, but I decided that returning an ActionResult would be cleaner (and I think that makes it easier to unit test), even though it is essentially doing exactly that, setting a custom Status Code and Redirect Location.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Base36 Encoder/Decoder in C#</title>
      <link>https://stum.de/2008/10/20/base36-encoderdecoder-in-c/</link>
      <pubDate>Mon, 20 Oct 2008 06:38:28 +0000</pubDate>
      <guid>https://stum.de/2008/10/20/base36-encoderdecoder-in-c/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Edit: An updated Version (which also adds BigInteger compatibility) is part of my Utility Library on GitHub: &lt;a href=&#34;https://github.com/mstum/mstum.utils&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;https://github.com/mstum/mstum.utils&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For a project I am working on I needed a way to convert long numbers into &lt;a href=&#34;http://en.wikipedia.org/wiki/Base_36&#34; rel=&#34;noreferrer nofollow external&#34; target=&#34;_blank&#34;&gt;Base 36&lt;/a&gt; numbers. Base 36 uses number 0 to 9 and letters a to z, but is not case sensitive (there is no differentiation between uppercase and lowercase letters), which makes it perfect for being transferred over the telephone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Just making stuff work</title>
      <link>https://stum.de/2008/10/18/just-making-stuff-work/</link>
      <pubDate>Sat, 18 Oct 2008 10:55:59 +0000</pubDate>
      <guid>https://stum.de/2008/10/18/just-making-stuff-work/</guid>
      <description>&lt;p&gt;I consider myself still a rather mediocre developer. While I am developing since almost 20 years now (starting on the C-64 with Basic, moving to Pascal and Delphi during the 90&#39;s up to PHP and C# in the past years), I never had much formal education or worked in a big development team with many senior developers to really teach some lessons. This has both advantages and disadvantages.&lt;/p&gt;&#xA;&lt;p&gt;I switched over to C# a bit more than a year ago, and this was the first time I started working on really &amp;quot;big&amp;quot; projects, at least compared to what I&#39;ve done before. Also, I started reading more and more about software development practices, especially in the agile world. Of course, if you read a lot of blogs and forums, everyone seems always to be talking about best practices, how stuff SHOULD be done, how to make it shiny, how to make it dance and sing. This is certainly good stuff, because after all, we all want to learn how to improve our work, do we?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interrupting the Game Flow = Annoying as Hell</title>
      <link>https://stum.de/2008/04/27/interrupting-the-game-flow-annoying-as-hell/</link>
      <pubDate>Sun, 27 Apr 2008 12:52:22 +0000</pubDate>
      <guid>https://stum.de/2008/04/27/interrupting-the-game-flow-annoying-as-hell/</guid>
      <description>&lt;p&gt;just started playing Assassin&#39;s Creed, in which you play as Altair, an Assasin who is doing his Business around 1191 in Jerusalem and other middle eastern medieval cities. Unfortunately, Ubisoft almost ruined the game experience totally, as the first 20 Minutes are pure frustration. The game starts like many others: You got some sort of Intro, then a tutorial. All good until this point, but then the first mission starts and you are constantly interrupted. Walk three steps - bang, tutorial popup. Climb a ladder - bang, tutorial popup, explaining how to draw a weapon. Guys, making a stealth kill was covered in the tutorial 5 minutes ago! You then make 3 more steps and bang, cutscene. 2 more steps, cutscene. 4 steps, cutscene.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mass Effect - Hiding rough edges under a shell of awesomeness</title>
      <link>https://stum.de/2008/04/26/mass-effect-hiding-rough-edges-under-a-shell-of-awesomeness/</link>
      <pubDate>Sat, 26 Apr 2008 14:47:35 +0000</pubDate>
      <guid>https://stum.de/2008/04/26/mass-effect-hiding-rough-edges-under-a-shell-of-awesomeness/</guid>
      <description>&lt;p&gt;I&#39;ve bought Mass Effect for my Xbox 360 about 3 Weeks ago. For those who do not know, Mass Effect is the newest RPG from Bioware, creators of Baldur&#39;s Gate or the first Knights of the old Republic.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; This post may contain Minor Spoilers. I try to keep it clean, but details of some of the side quests may be given.&lt;/p&gt;&#xA;&lt;p&gt;And speaking of KotoR: From the very first moment I started playing Mass Effect, I felt like the first time I was playing KotoR - I just could not stop playing it. And after I finished it, i still could not stop playing it. I&#39;ve now done every side quest and finished it the second time, only to start a third walkthrough. Two effects are working together here: First, the story is absolutely compelling and awesone. And second, it has Achievements, those addicting little &amp;quot;Gotta catch em all!&amp;quot; things that Xbox 360 Games have.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Xbox 360 and Achievements (and Undertow)</title>
      <link>https://stum.de/2008/01/24/xbox-360-and-achievements-and-undertow/</link>
      <pubDate>Wed, 23 Jan 2008 16:36:55 +0000</pubDate>
      <guid>https://stum.de/2008/01/24/xbox-360-and-achievements-and-undertow/</guid>
      <description>&lt;p&gt;So, I got myself an Xbox 360 the other day. While one of the primary reasons to get one was Microsoft&#39;s XNA, I also learned to like Xbox Live and Xbox Live Arcade. The Xbox 360 is not marketed as a &amp;quot;Casual Gamer&amp;quot; system (the Wii tightly holds that spot, and I don&#39;t think that Microsofts attempt to market the Xbox 360 Arcade console in that segment are too successful), yet some of the best casual games are available on there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Packaging</title>
      <link>https://stum.de/2008/01/06/game-packaging/</link>
      <pubDate>Sun, 06 Jan 2008 14:04:43 +0000</pubDate>
      <guid>https://stum.de/2008/01/06/game-packaging/</guid>
      <description>&lt;p&gt;Until a few years ago, Packaging for PC Games was very wasteful: In a big cardboard box, you usually found the manual and the game CD itself, along with some advertising and filler material, but overall, the box was 80% empty. But it looked damn nice, with the big artwork that you could proudly display on your shelf, kind of like Vinyl looks better than CDs because the size of the cover.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
