<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Thoughts, stories and ideas</title>
    <link>https://blog.mbwarez.dk/</link>
    <description>Recent content on Thoughts, stories and ideas</description>
    <image>
      <title>Thoughts, stories and ideas</title>
      <url>https://blog.mbwarez.dk/assets/images/cover.jpg</url>
      <link>https://blog.mbwarez.dk/assets/images/cover.jpg</link>
    </image>
    <generator>Hugo -- 0.145.0</generator>
    <language>en</language>
    <copyright>Michael Bisbjerg</copyright>
    <lastBuildDate>Fri, 27 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.mbwarez.dk/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Plex on Docker with IPvlan</title>
      <link>https://blog.mbwarez.dk/posts/2026/03/use-docker-with-ipvlan/</link>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2026/03/use-docker-with-ipvlan/</guid>
      <description>Giving Plex one real LAN IP so discovery stops sending clients to dead addresses</description>
    </item>
    <item>
      <title>Home Assistant blueprint for Logic Group ZDB5100 (and ZBA7140)</title>
      <link>https://blog.mbwarez.dk/posts/2026/01/logic-group-zdb5100-blueprint/</link>
      <pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2026/01/logic-group-zdb5100-blueprint/</guid>
      <description>A Z-Wave JS blueprint that exposes all 20 scene combinations across the four keys, with placeholders for your automations.</description>
    </item>
    <item>
      <title>S3 GFS Retention</title>
      <link>https://blog.mbwarez.dk/posts/2026/01/s3-gfs-retention/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2026/01/s3-gfs-retention/</guid>
      <description>Keeping S3 backups under control with a GFS retention policy and a tiny Lambda.</description>
    </item>
    <item>
      <title>One Metric to Rule Them All: Making a Dumb Stove Fan Smart with Only Watts</title>
      <link>https://blog.mbwarez.dk/posts/2025/07/ha-stove-fan-power-automation/</link>
      <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2025/07/ha-stove-fan-power-automation/</guid>
      <description>Using just power usage readings, this Home Assistant automation figures out what your stove fan is doing-and shuts it down when you forget.</description>
    </item>
    <item>
      <title>Updating ESPHome Devices Sequentially with Home Assistant Scripts</title>
      <link>https://blog.mbwarez.dk/posts/2025/05/esphome-sequential-updates/</link>
      <pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2025/05/esphome-sequential-updates/</guid>
      <description>Avoid overloading your build host by flashing ESPHome devices one‑by‑one, using a pure Home Assistant script that shows progress and waits for running updates to finish.</description>
    </item>
    <item>
      <title>Smart Refresh Schedule for Sensors in Home Assistant</title>
      <link>https://blog.mbwarez.dk/posts/2025/05/ha-smart-poll/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2025/05/ha-smart-poll/</guid>
      <description>Reduce unnecessary sensor refreshes while keeping your local data fresh.</description>
    </item>
    <item>
      <title>Using dmsetup to Salvage Disks with Bad Blocks</title>
      <link>https://blog.mbwarez.dk/posts/2025/04/bad-disks-dmsetup/</link>
      <pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2025/04/bad-disks-dmsetup/</guid>
      <description>A guide to rescuing disks with bad blocks using dmsetup, avoiding the need for costly replacements.</description>
    </item>
    <item>
      <title>WLED Backup script</title>
      <link>https://blog.mbwarez.dk/posts/2025/03/wled-backup-script/</link>
      <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2025/03/wled-backup-script/</guid>
      <description>A backup script that discovers WLED instances and backs their configs up</description>
    </item>
    <item>
      <title>Entity Framework Core: Querying views, but manipulating tables</title>
      <link>https://blog.mbwarez.dk/posts/2023/06/entity-framework-core-querying-views-manipulating-tables/</link>
      <pubDate>Thu, 08 Jun 2023 16:43:12 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2023/06/entity-framework-core-querying-views-manipulating-tables/</guid>
      <description>Exploring techniques for querying from views while inserting/updating through tables in EF Core.</description>
    </item>
    <item>
      <title>EntityFramework Core – Composite key filtering</title>
      <link>https://blog.mbwarez.dk/posts/2021/06/entityframework-core-composite-key-filtering/</link>
      <pubDate>Thu, 03 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/06/entityframework-core-composite-key-filtering/</guid>
      <description>Using expression trees to dynamically filter on composite keys in EF Core.</description>
    </item>
    <item>
      <title>Introducing Elephant Projects - Cross-repository refactoring</title>
      <link>https://blog.mbwarez.dk/posts/2021/04/introducing-elephant-projects-cross-repository-refactoring/</link>
      <pubDate>Mon, 05 Apr 2021 19:53:27 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/04/introducing-elephant-projects-cross-repository-refactoring/</guid>
      <description>A local development tool for switching between NuGet and project references across multiple repositories.</description>
    </item>
    <item>
      <title>GH Mass-administration: Content</title>
      <link>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration-content/</link>
      <pubDate>Sun, 28 Mar 2021 17:28:34 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration-content/</guid>
      <description>Automating repository content and workflows using JSON metadata and a .NET tool.</description>
    </item>
    <item>
      <title>GH Mass-administration: Terraform</title>
      <link>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration-terraform/</link>
      <pubDate>Sun, 28 Mar 2021 17:28:06 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration-terraform/</guid>
      <description>Using Terraform to configure GitHub repository settings, secrets, and policies at scale.</description>
    </item>
    <item>
      <title>Consuming NuGet packages from my GitHub</title>
      <link>https://blog.mbwarez.dk/posts/2021/03/consuming-my-nuget-packages-from-github/</link>
      <pubDate>Sun, 28 Mar 2021 10:55:53 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/03/consuming-my-nuget-packages-from-github/</guid>
      <description>A short guide for consuming GitHub-hosted NuGet packages, using access tokens and CLI.</description>
    </item>
    <item>
      <title>Mass-administration of GitHub repositories</title>
      <link>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration/</link>
      <pubDate>Sat, 27 Mar 2021 23:10:59 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/03/gh-mass-administration/</guid>
      <description>Overview of templating and managing multiple GitHub repositories with shared configuration and content.</description>
    </item>
    <item>
      <title>Renaming an index in Elastic (slight hacks)</title>
      <link>https://blog.mbwarez.dk/posts/2021/03/renaming-an-index-in-elastic/</link>
      <pubDate>Fri, 05 Mar 2021 23:27:14 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/03/renaming-an-index-in-elastic/</guid>
      <description>How to rename an Elasticsearch index via manual state file edits (not recommended in production).</description>
    </item>
    <item>
      <title>Move WSL to different drive</title>
      <link>https://blog.mbwarez.dk/posts/2021/02/move-wsl-to-different-drive/</link>
      <pubDate>Wed, 17 Feb 2021 17:42:17 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2021/02/move-wsl-to-different-drive/</guid>
      <description>How to relocate a WSL container to another drive using the export and import commands.</description>
    </item>
    <item>
      <title>Space Engineers 01.172 - API Documentation</title>
      <link>https://blog.mbwarez.dk/posts/2017/08/space-engineers-01-172-api-documentation/</link>
      <pubDate>Sat, 05 Aug 2017 12:08:40 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2017/08/space-engineers-01-172-api-documentation/</guid>
      <description>API reference for SE 01.172 with focus on Sandbox.ModAPI scripting interfaces.</description>
    </item>
    <item>
      <title>Space Engineers, figuring out the API</title>
      <link>https://blog.mbwarez.dk/posts/2017/08/space-engineers-figuring-out-the-api/</link>
      <pubDate>Sat, 05 Aug 2017 12:06:11 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2017/08/space-engineers-figuring-out-the-api/</guid>
      <description>Tips for exploring and reverse-engineering the Space Engineers scripting API using tools like DotPeek.</description>
    </item>
    <item>
      <title>Deserializing different types based on properties, with Newtonsoft.Json</title>
      <link>https://blog.mbwarez.dk/posts/2016/08/deserializing-different-types-based-on-properties-with-newtonsoft-json/</link>
      <pubDate>Wed, 10 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2016/08/deserializing-different-types-based-on-properties-with-newtonsoft-json/</guid>
      <description>Handling polymorphic JSON deserialization with custom JsonConverter in Newtonsoft.Json.</description>
    </item>
    <item>
      <title>Detecting mismatched objects with Newtonsoft.Json</title>
      <link>https://blog.mbwarez.dk/posts/2016/08/detecting-mismatched-objects-with-newtonsoft-json/</link>
      <pubDate>Wed, 10 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2016/08/detecting-mismatched-objects-with-newtonsoft-json/</guid>
      <description>Catch missing or unexpected JSON fields during deserialization with a custom JsonSerializer setup.</description>
    </item>
    <item>
      <title>Lets Encrypt organized for reverse nginx proxy</title>
      <link>https://blog.mbwarez.dk/posts/2016/07/lets-encrypt-organized-for-reverse-nginx-proxy/</link>
      <pubDate>Thu, 07 Jul 2016 10:33:41 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2016/07/lets-encrypt-organized-for-reverse-nginx-proxy/</guid>
      <description>Automating TLS certificate setup and renewal for reverse NGINX proxies using Let&amp;#39;s Encrypt.</description>
    </item>
    <item>
      <title>Bencoding Library–Part two</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/bencoding-library-party-two/</link>
      <pubDate>Fri, 13 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/bencoding-library-party-two/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.mbwarez.dk/posts/2010/08/bencoding-library/&#34;&gt;Previously&lt;/a&gt;, I described a Bencoding Library I made to simplify working with the Bencoding structure in .NET. I also published it on &lt;a href=&#34;http://bencode.codeplex.com/&#34;&gt;Codeplex&lt;/a&gt;. However, I discovered a flaw—if a string contains a null-byte (as most &lt;code&gt;.torrent&lt;/code&gt; files do), it will fail. So I made a fix, which has been uploaded to Codeplex as &lt;a href=&#34;http://bencode.codeplex.com/SourceControl/changeset/changes/1102&#34;&gt;changeset 1102&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As can be seen in the changeset, a few files have been changed. Ignoring all the test files, the changes were made to:&lt;/p&gt;</description>
    </item>
    <item>
      <title>LINQ vs. Foreach</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/linq-vs-foreach/</link>
      <pubDate>Tue, 10 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/linq-vs-foreach/</guid>
      <description>&lt;p&gt;I asked around while trying to learn how to use LINQ. LINQ is essentially SQL for .NET—it allows you to query objects directly in memory. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;testnew&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;k&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;where&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Someone claimed LINQ was faster than using &lt;code&gt;foreach&lt;/code&gt; for selecting items. So, I tested it.&lt;/p&gt;
&lt;h3 id=&#34;the-benchmark&#34;&gt;The Benchmark&lt;/h3&gt;
&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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;testlist&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;();&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&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;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;
&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;
&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;DateTime&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;regularTimes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;();&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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LINQTimes&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;();&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&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;for&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;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&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; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++)&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;n&#34;&gt;testlist&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;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&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&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;// Foreach loop test&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;k&#34;&gt;for&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;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&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; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++)&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;p&#34;&gt;{&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;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DateTime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&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;n&#34;&gt;TestRegular&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&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;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DateTime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&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;n&#34;&gt;regularTimes&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;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TotalMilliseconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&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;p&#34;&gt;}&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;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WriteLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Regular Avg.: {0}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;regularTimes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Average&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&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&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;// LINQ test&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;k&#34;&gt;for&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;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&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; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;++)&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;p&#34;&gt;{&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;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DateTime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&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;n&#34;&gt;TestLINQ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&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;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DateTime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&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;n&#34;&gt;LINQTimes&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;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TotalMilliseconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&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;p&#34;&gt;}&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;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WriteLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;LINQ    Avg.: {0}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LINQTimes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Average&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&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&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;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReadLine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&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;p&#34;&gt;}&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&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;k&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TestRegular&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&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;p&#34;&gt;{&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;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;newlist&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;();&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;k&#34;&gt;foreach&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;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;testlist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&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;m&#34;&gt;2000&lt;/span&gt; &lt;span class=&#34;p&#34;&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; &lt;span class=&#34;n&#34;&gt;newlist&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;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&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;p&#34;&gt;}&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&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;k&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TestLINQ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&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;p&#34;&gt;{&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;kt&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;newlist&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;k&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;testlist&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;where&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ToList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This runs each selection method 1000 times on a list of 1,000,000 items.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PDF Search Site</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/pdf-search-site/</link>
      <pubDate>Tue, 10 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/pdf-search-site/</guid>
      <description>&lt;h1 id=&#34;an-introduction&#34;&gt;An Introduction&lt;/h1&gt;
&lt;p&gt;So, I’m moving into an apartment in the near future. Following that, I will have to learn how to manage my documents and ensure I can find them back in time. I’ve thought of a few solutions, one of them being what I do now – where I simply have a folder with PDFs of my documents (I digitalize everything). This works fine now&amp;hellip; (I have like … 20 documents)&amp;hellip; But it may not work in 2 years when I have a hundred documents spread over many different corporations and years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bencoding – A C# Library</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/bencoding-library/</link>
      <pubDate>Mon, 09 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/bencoding-library/</guid>
      <description>&lt;p&gt;I’ve long wanted to write a &lt;a href=&#34;http://en.wikipedia.org/wiki/Bencode&#34;&gt;Bencoding&lt;/a&gt; library. Bencoding is an encoding format for encoding objects like text, lists, dictionaries, etc., into a single piece of text. It’s often used for transporting configuration files.&lt;/p&gt;
&lt;p&gt;Bencoding is most famous for its use in the Bittorrent protocol—it forms the basis for &lt;code&gt;.torrent&lt;/code&gt; files. I wanted to create a C# library to support all known Bencoding object types. You can read &lt;a href=&#34;http://wiki.theory.org/BitTorrentSpecification#bencoding&#34;&gt;more about the encoding here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wardriving – The triangulation algorithm</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/wardriving-triangulation/</link>
      <pubDate>Sat, 07 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/wardriving-triangulation/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For my &lt;a href=&#34;https://blog.mbwarez.dk/posts/2010/08/wifi-scanner/&#34;&gt;previous post&lt;/a&gt;, where I find the signal strength of WiFi spots, I also needed an algorithm to actually locate the spot. I decided to use triangulation, which is commonly used in wireless communications to locate devices based on signal strength from known positions.&lt;/p&gt;
&lt;p&gt;As my system uses GPS, I had to consider the Earth&amp;rsquo;s curvature. Calculating the geographic midpoint on a sphere isn&amp;rsquo;t trivial, but &lt;a href=&#34;http://www.geomidpoint.com/calculation.html&#34;&gt;GeoMidpoint&lt;/a&gt; provides a great explanation (Method A).&lt;/p&gt;</description>
    </item>
    <item>
      <title>C# Wifi Scanner</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/wifi-scanner/</link>
      <pubDate>Thu, 05 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/wifi-scanner/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I’ve long wanted to build a WiFi-based application—ideally one that also records GPS location data for wardriving. I searched for manageable C# solutions integrated with .NET.&lt;/p&gt;
&lt;h3 id=&#34;first-attempts&#34;&gt;First Attempts&lt;/h3&gt;
&lt;p&gt;I explored many &lt;a href=&#34;http://en.wikipedia.org/wiki/Windows_Management_Instrumentation#Wireless_networking_example&#34;&gt;WMI tutorials&lt;/a&gt;, but on Windows 7, I lacked the needed namespaces like &lt;code&gt;MSNdis_80211_ServiceSetIdentifier&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Eventually, I discovered the WLan API (available since Windows XP SP3), usable via P/Invoke. Fortunately, someone made a &lt;a href=&#34;http://managedwifi.codeplex.com/&#34;&gt;ManagedWifi&lt;/a&gt; wrapper for it—perfect!&lt;/p&gt;
&lt;h2 id=&#34;the-scanner&#34;&gt;The Scanner&lt;/h2&gt;
&lt;p&gt;I wrote a small utility that scans for SSIDs across all interfaces and retrieves their MAC addresses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Danish CPR Numbers</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/cpr-numbers/</link>
      <pubDate>Tue, 03 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/cpr-numbers/</guid>
      <description>&lt;p&gt;I was reading several articles about the new NemID system in Denmark, and concerns around how organized groups might &lt;a href=&#34;http://www.version2.dk/artikel/15708-danid-ja-det-er-muligt-at-spaerre-andres-nemid&#34;&gt;generate valid CPR numbers&lt;/a&gt; and brute-force passwords. This could lead to account lockouts—potentially paralyzing major parts of the country’s digital infrastructure.&lt;/p&gt;
&lt;p&gt;To test this, I created code to generate valid CPR numbers based on known rules.&lt;/p&gt;
&lt;h2 id=&#34;the-rules&#34;&gt;The Rules&lt;/h2&gt;
&lt;p&gt;The original rules were based on a textbook I no longer have, but I found newer ones via this &lt;a href=&#34;http://blog.splitpoint.dk/?p=129&#34;&gt;blog post&lt;/a&gt;, &lt;a href=&#34;http://www.cpr.dk/cpr/site.aspx?p=108&amp;amp;t=visartikel&amp;amp;Articleid=4347&#34;&gt;official article&lt;/a&gt;, and &lt;a href=&#34;http://www.cpr.dk/cpr_artikler/Files/Fil1/4229.pdf&#34;&gt;PDF document&lt;/a&gt; from the CPR register.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mobifinance – Loaning organized</title>
      <link>https://blog.mbwarez.dk/posts/2010/08/mobifinance-loaning-organized/</link>
      <pubDate>Sun, 01 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/08/mobifinance-loaning-organized/</guid>
      <description>&lt;h2 id=&#34;idea&#34;&gt;Idea&lt;/h2&gt;
&lt;p&gt;While on a trip to Jutland, I had a splendid idea: a system to track loans—who I loaned money to and whether I ever got it back. It had to work on mobile devices and as a web app, so I built it as a small webpage.&lt;/p&gt;
&lt;p&gt;I used an MSSQL database (hosted by &lt;a href=&#34;http://addnet.dk&#34;&gt;addnet.dk&lt;/a&gt;) and wrote the app in C#.&lt;/p&gt;
&lt;h2 id=&#34;database&#34;&gt;Database&lt;/h2&gt;
&lt;p&gt;I built a single main table, &lt;code&gt;Finances&lt;/code&gt;, for all loans and edits. Each finance can have a parent—&lt;code&gt;NULL&lt;/code&gt; indicates a root loan. This allows loan tracking and later edits. A root loan of +10 DKK, followed by a -10 DKK update, resolves to 0 (paid).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux incremental hardlink backup system</title>
      <link>https://blog.mbwarez.dk/posts/2010/07/incremental-file-backup/</link>
      <pubDate>Thu, 29 Jul 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/07/incremental-file-backup/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;While reviewing my old college&amp;rsquo;s IT class backup system (due to running low on disk space), I discovered a major flaw: a weekly 1:1 backup of every user&amp;rsquo;s files—about 40 GB per week. Many of these files never change. Ever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Incremental backups.&lt;/p&gt;
&lt;p&gt;I challenged myself to code an incremental backup system using only Python and the Linux extfs filesystem.&lt;/p&gt;
&lt;h2 id=&#34;the-scenario&#34;&gt;The Scenario&lt;/h2&gt;
&lt;p&gt;At my former college, students ran the IT department. They set up a system with a 2 TB drive (two 1 TB disks) that made weekly full backups of every user, including alumni.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SMS System</title>
      <link>https://blog.mbwarez.dk/posts/2010/07/sms-system/</link>
      <pubDate>Thu, 29 Jul 2010 00:00:00 +0000</pubDate>
      <guid>https://blog.mbwarez.dk/posts/2010/07/sms-system/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As part of the OEP platform at my previous college, we designed an SMS subsystem for messaging Danish mobile phones. It was intended for alerts like account lockouts or password resets. I coded it in Python.&lt;/p&gt;
&lt;h2 id=&#34;the-scenario&#34;&gt;The Scenario&lt;/h2&gt;
&lt;p&gt;We used LDAP as a central user database. The script needed to accept either a phone number or username, then look up the mobile number via LDAP (&lt;code&gt;mobile&lt;/code&gt; attribute). I used &lt;a href=&#34;http://www.python-ldap.org/&#34;&gt;python-ldap&lt;/a&gt; for this, available via Ubuntu&amp;rsquo;s package system.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
