<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><id>urn:einarwh-no:feed</id><updated>2026-02-02T13:45:00+01:00</updated><title type="text">einarwh</title><link rel="self" href="https://einarwh.no/feed/atom.xml"></link><entry><title>Ask yourself if they could already know</title><updated>2026-02-02T13:45:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2026/02/ask-yourself/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2026%2F02%2Fask-yourself%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;I propose a radical new heuristic to be applied before replying to things online: ask yourself if the original poster could already know.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2026/02/ask-yourself/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>The problem of the pages</title><updated>2025-10-13T19:30:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/10/13/the-problem-of-the-pages/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F10%2F13%2Fthe-problem-of-the-pages%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Book clubs are great in theory, but they&amp;rsquo;re hard to do in practice. The reason is simple: they don&amp;rsquo;t make the problem of having to read the book go away.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/10/13/the-problem-of-the-pages/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Nullable vs nullable in C#</title><updated>2025-08-25T19:30:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/08/25/nullable-vs-nullable/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F08%2F25%2Fnullable-vs-nullable%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;In C#, nullable means something very different for reference types and value types, but the syntax is the same for both. That&amp;rsquo;s bound to lead to problems.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/08/25/nullable-vs-nullable/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Disentangling intertwingled magicks in ASP.NET Core Web APIs</title><updated>2025-08-15T21:00:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/08/15/disentangling-magicks/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F08%2F15%2Fdisentangling-magicks%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;The typical ASP.NET Core Web API relies heavily on at least two kinds of &amp;ldquo;magick&amp;rdquo;: model binding and generation of OpenAPI documents. They are joined at the hip through C# type declarations, which are the sources of OpenAPI schemas and the targets of model binding. In this blog post, I take a look at the gotchas and caveats and shortcomings of this arrangement.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/08/15/disentangling-magicks/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Book heuristics</title><updated>2025-06-20T21:00:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/06/20/book-heuristics/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F06%2F20%2Fbook-heuristics%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;You can&amp;rsquo;t read every book. Which ones can you safely ignore? This blog post contains a handful of heuristics for dodging boring books and finding something interesting to read.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/06/20/book-heuristics/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Socio-technical is a big word</title><updated>2025-06-16T21:00:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/06/16/sociotechnical-is-a-big-word/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F06%2F16%2Fsociotechnical-is-a-big-word%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;When someone uses a big word like socio-technical, you would think it would be a starting point for discussing interconnectedness, adaptivity, non-linearity and emergence in those systems. Alas,&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/06/16/sociotechnical-is-a-big-word/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>What's a tomato?</title><updated>2025-05-11T21:00:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/05/11/whats-a-tomato/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F05%2F11%2Fwhats-a-tomato%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Sometimes a tomato is just a tomato. Most times even. When is a tomato not just a tomato? Almost never.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/05/11/whats-a-tomato/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Socio-technical API patterns</title><updated>2025-04-28T16:17:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2025/04/28/sociotechnical-api-patterns/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2025%2F04%2F28%2Fsociotechnical-api-patterns%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;When we connect software systems through APIs, we also connect the people who work on those systems. Socio-technical forces tend to favor certain patterns of relationships between provider and consumer. This blog post describes four patterns that I have observed many times in my career: The Millstone, The Mountain (or the Volcano), The Rapids (with or without Beaver Dams) and The Sock Puppet.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2025/04/28/sociotechnical-api-patterns/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>The banana test for AI-generated artifacts</title><updated>2024-10-03T12:33:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2024/10/03/the-banana-test-for-ai-generated-artifacts/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2024%2F10%2F03%2Fthe-banana-test-for-ai-generated-artifacts%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;The banana test is a simple heuristic to distinguish gimmicks from lasting value.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2024/10/03/the-banana-test-for-ai-generated-artifacts/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>The AI puppet dance</title><updated>2024-01-12T17:08:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2024/01/12/the-ai-puppet-dance/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2024%2F01%2F12%2Fthe-ai-puppet-dance%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;What&amp;rsquo;s the opportunity cost of being swept up in hype?&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2024/01/12/the-ai-puppet-dance/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Inspirational math</title><updated>2023-05-20T11:09:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2023/05/20/inspirational-math/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2023%2F05%2F20%2Finspirational-math%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A few words about self-help math.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2023/05/20/inspirational-math/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Drift into debt</title><updated>2023-04-25T17:01:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2023/04/25/drift-into-debt/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2023%2F04%2F25%2Fdrift-into-debt%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;The passing of time is the greatest unsolved problem in software. Technical debt is not an option, it is the inevitable by-product of change and inertia. Over time, we will drift into debt.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2023/04/25/drift-into-debt/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Don't settle for a playground</title><updated>2023-03-29T18:39:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2023/03/29/dont-settle-for-a-playground/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2023%2F03%2F29%2Fdont-settle-for-a-playground%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;What is autonomy for a software team? What do we want it for? Do we really want it?&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2023/03/29/dont-settle-for-a-playground/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Dragging a dead priest: programs and programmers in time</title><updated>2023-02-05T10:39:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2023/02/05/dragging-a-dead-priest-programs-and-programmers-in-time/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2023%2F02%2F05%2Fdragging-a-dead-priest-programs-and-programmers-in-time%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Code, alas, is dead. It falls upon the poor programmers to make it appear to be alive.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2023/02/05/dragging-a-dead-priest-programs-and-programmers-in-time/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>NO! Programming as other</title><updated>2021-04-18T19:45:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2021/04/18/no-programming-as-other/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2021%2F04%2F18%2Fno-programming-as-other%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Let&amp;rsquo;s never discuss if programming is art or science again.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2021/04/18/no-programming-as-other/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Programmer vs developer</title><updated>2021-02-11T15:31:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2021/02/11/programmer-vs-developer/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2021%2F02%2F11%2Fprogrammer-vs-developer%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;I am coming to terms with being a programmer.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2021/02/11/programmer-vs-developer/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Multiselfing</title><updated>2020-11-25T12:00:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/11/25/multiselfing/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F11%2F25%2Fmultiselfing%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;On identity and context-switching during the pandemic.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/11/25/multiselfing/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Conway's mob</title><updated>2020-09-05T16:57:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/09/15/conways-mob/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F09%2F15%2Fconways-mob%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;How and why intra-team mobs can help fight the rigidity of many software organizations and their code.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/09/15/conways-mob/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Into the tar pit</title><updated>2020-05-19T22:30:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/05/19/into-the-tar-pit/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F05%2F19%2Finto-the-tar-pit%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A critique of &amp;ldquo;Out of the Tar Pit&amp;rdquo;.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/05/19/into-the-tar-pit/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Proper JSON and property bags</title><updated>2020-05-13T17:50:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/05/13/proper-json-and-property-bags/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F05%2F13%2Fproper-json-and-property-bags%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;JSON data can be represented in many different ways in a .NET application (e.g. explicit JSON model, JSON-friendly DTOs and plain old dictionaries). Each representation has their own characteristics in terms of flexibility, readability and verbosity. In this blog post I look at the trade-offs involved and make some recommendations.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/05/13/proper-json-and-property-bags/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>On the complexity of JSON serialization</title><updated>2020-05-08T16:04:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/05/08/on-the-complexity-of-json-serialization/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F05%2F08%2Fon-the-complexity-of-json-serialization%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;We&amp;rsquo;ve messed up JSON serialization in .NET. In an effort to make it easy and magical, we have turned something simple into something complicated and error-prone. To fix it, we must get rid of accidental complexity and let the serialization process be as simple and stupid as possible.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/05/08/on-the-complexity-of-json-serialization/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Death of a craftsman</title><updated>2020-04-05T11:24:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2020/04/05/death-of-a-craftsman/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2020%2F04%2F05%2Fdeath-of-a-craftsman%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A description of my identity crisis as a programmer, why I&amp;rsquo;ve rejected craftsmanship and crafting, and what I think we should do instead.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2020/04/05/death-of-a-craftsman/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Function application in la-la land</title><updated>2017-10-11T21:06:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/10/11/function-application-in-la-la-land/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F10%2F11%2Ffunction-application-in-la-la-land%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;The world of programming contains realms of strange values for things that may happen or may have happened, collections of things, things that may or may not be things, and so forth. How do you work with such values in a uniform way?&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/10/11/function-application-in-la-la-land/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>How to reduce bunches of things</title><updated>2017-10-05T23:01:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/10/05/how-to-reduce-bunches-of-things/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F10%2F05%2Fhow-to-reduce-bunches-of-things%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;What does adding or multiplying integers, concatenating strings, appending lists and composing functions have in common?&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/10/05/how-to-reduce-bunches-of-things/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>LINQ to Nullable</title><updated>2017-09-27T22:38:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/09/27/linq-to-nullable/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F09%2F27%2Flinq-to-nullable%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;What does it take to enable LINQ syntax for Nullable? I consult the C# specification and write some unusual code.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/09/27/linq-to-nullable/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Picture combinators and recursive fish</title><updated>2017-07-22T07:24:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/07/22/picture-combinators-and-recursive-fish/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F07%2F22%2Fpicture-combinators-and-recursive-fish%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;An implementation of Peter Henderson&amp;rsquo;s Functional Geometry in F#, with a step-by-step guide to make an SVG reproduction of Escher&amp;rsquo;s Square Limit.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/07/22/picture-combinators-and-recursive-fish/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Donkey code</title><updated>2017-01-21T11:12:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/01/21/donkey-code/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F01%2F21%2Fdonkey-code%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A fable about how code quickly can deteriorate under new requirements if we don&amp;rsquo;t have a conceptual model with the right abstractions to express both new and old requirements.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/01/21/donkey-code/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Something for nothing</title><updated>2017-01-17T21:35:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2017/01/17/something-for-nothing/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2017%2F01%2F17%2Fsomething-for-nothing%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;The problem with null.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2017/01/17/something-for-nothing/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Pragmatism is poison</title><updated>2016-03-16T07:14:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2016/03/10/pragmatism-is-poison/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2016%2F03%2F10%2Fpragmatism-is-poison%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Appeal to pragmatism is a logical fallacy. We should make better arguments.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2016/03/10/pragmatism-is-poison/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Strings with assumptions</title><updated>2016-01-29T23:23:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2016/01/29/strings-with-assumptions/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2016%2F01%2F29%2Fstrings-with-assumptions%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A string in a program is never just a string. There are always assumptions about what kind of string it&amp;rsquo;s going to be.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2016/01/29/strings-with-assumptions/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Technical debt isn't technical</title><updated>2015-12-05T22:29:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2015/12/05/technical-debt-isnt-technical/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2015%2F12%2F05%2Ftechnical-debt-isnt-technical%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Technical debt is a symptom.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2015/12/05/technical-debt-isnt-technical/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Thinging names</title><updated>2015-05-10T21:09:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2015/05/10/thinging-names/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2015%2F05%2F10%2Fthinging-names%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;We&amp;rsquo;ve got it backwards when we say that &amp;ldquo;naming things is hard&amp;rdquo;. The problem isn&amp;rsquo;t naming, the problem is in coming up with the right things to name.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2015/05/10/thinging-names/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Diamond mirrors</title><updated>2015-02-10T22:13:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2015/02/10/diamond-mirrors/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2015%2F02%2F10%2Fdiamond-mirrors%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;An implementation of the Diamond code kata in F#.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2015/02/10/diamond-mirrors/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Aspects without aspects</title><updated>2014-07-05T09:51:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2014/07/05/aspects-without-aspects/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2014%2F07%2F05%2Faspects-without-aspects%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Using extension methods in C# to implement a poor man&amp;rsquo;s version of aspect-oriented programming.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2014/07/05/aspects-without-aspects/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Rethrow recoil</title><updated>2014-06-30T15:48:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2014/06/30/rethrow-recoil/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2014%2F06%2F30%2Frethrow-recoil%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;Fixing an issue with rethrows in the approach described in the previous blog post.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2014/06/30/rethrow-recoil/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>LINQ to Exceptions</title><updated>2014-06-28T20:04:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2014/06/28/linq-to-exceptions/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2014%2F06%2F28%2Flinq-to-exceptions%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;p&gt;A way to attach and compose exception handling blocks to Funcs using extension methods.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2014/06/28/linq-to-exceptions/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Another wild tail chase</title><updated>2013-12-19T08:42:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2013/12/19/another-wild-tail-chase/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2013%2F12%2F19%2Fanother-wild-tail-chase%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2013/12/19/another-wild-tail-chase/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Chasing your tail with bytecode manipulation</title><updated>2013-11-05T17:12:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2013/11/05/chasing-your-tail-with-bytecode-manipulation/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2013%2F11%2F05%2Fchasing-your-tail-with-bytecode-manipulation%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2013/11/05/chasing-your-tail-with-bytecode-manipulation/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Shrink-wrapped Mkay</title><updated>2013-03-05T20:45:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2013/03/05/shrink-wrapped-mkay/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2013%2F03%2F05%2Fshrink-wrapped-mkay%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2013/03/05/shrink-wrapped-mkay/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Self-referential validation in Mkay</title><updated>2013-02-22T21:16:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2013/02/22/self-referential-validation-in-mkay/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2013%2F02%2F22%2Fself-referential-validation-in-mkay%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2013/02/22/self-referential-validation-in-mkay/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Mkay: One validation attribute to rule them all</title><updated>2013-02-15T12:07:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2013/02/15/mkay-one-validation-attribute-to-rule-them-all/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2013%2F02%2F15%2Fmkay-one-validation-attribute-to-rule-them-all%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2013/02/15/mkay-one-validation-attribute-to-rule-them-all/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Yes, it's an animated Hama bead Larry</title><updated>2012-11-01T12:35:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/11/01/yes-its-an-animated-hama-bead-larry/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F11%2F01%2Fyes-its-an-animated-hama-bead-larry%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/11/01/yes-its-an-animated-hama-bead-larry/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>The hawk and the tower</title><updated>2012-08-24T16:44:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/08/24/the-hawk-and-the-tower/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F08%2F24%2Fthe-hawk-and-the-tower%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/08/24/the-hawk-and-the-tower/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>To Knuth or not to Knuth</title><updated>2012-07-08T22:44:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/07/08/to-knuth-or-not-to-knuth/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F07%2F08%2Fto-knuth-or-not-to-knuth%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/07/08/to-knuth-or-not-to-knuth/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Strings dressed in nested tags</title><updated>2012-06-20T20:53:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/06/20/strings-dressed-in-nested-tags/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F06%2F20%2Fstrings-dressed-in-nested-tags%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/06/20/strings-dressed-in-nested-tags/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Strings dressed in tags</title><updated>2012-06-20T15:43:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/06/20/strings-dressed-in-tags/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F06%2F20%2Fstrings-dressed-in-tags%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/06/20/strings-dressed-in-tags/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Introducing μnit</title><updated>2012-06-15T08:14:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/06/15/introducing-mjunit/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F06%2F15%2Fintroducing-mjunit%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/06/15/introducing-mjunit/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>A property with a view</title><updated>2012-05-01T21:29:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/05/01/a-property-with-a-view/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F05%2F01%2Fa-property-with-a-view%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/05/01/a-property-with-a-view/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Recursion for kids</title><updated>2012-01-19T14:15:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2012/01/19/recursion-for-kids/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2012%2F01%2F19%2Frecursion-for-kids%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2012/01/19/recursion-for-kids/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Pix-it curling</title><updated>2011-11-07T21:36:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/11/07/pix-it-curling/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F11%2F07%2Fpix-it-curling%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/11/07/pix-it-curling/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Bix-it: pix-it in the browser</title><updated>2011-11-06T20:12:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/11/06/bix-it-pix-it-in-the-browser/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F11%2F06%2Fbix-it-pix-it-in-the-browser%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/11/06/bix-it-pix-it-in-the-browser/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Pix-it war!</title><updated>2011-11-04T21:27:00+01:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/11/04/pix-it-war/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F11%2F04%2Fpix-it-war%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/11/04/pix-it-war/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Optimus Prime</title><updated>2011-10-05T23:00:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/10/05/optimus-prime/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F10%2F05%2Foptimus-prime%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/10/05/optimus-prime/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Launch as admin</title><updated>2011-09-27T17:17:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/09/27/launch-as-admin/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F09%2F27%2Flaunch-as-admin%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/09/27/launch-as-admin/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Telepathic computer control with Launchy</title><updated>2011-09-25T22:32:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/09/25/telepathic-computer-control-with-launchy/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F09%2F25%2Ftelepathic-computer-control-with-launchy%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/09/25/telepathic-computer-control-with-launchy/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Dry data</title><updated>2011-06-20T19:17:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/06/20/dry-data/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F06%2F20%2Fdry-data%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/06/20/dry-data/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>UTC now!</title><updated>2011-05-26T19:22:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/05/26/utc-now/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F05%2F26%2Futc-now%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/05/26/utc-now/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>The indispensable IDisposable</title><updated>2011-05-12T21:46:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/05/12/the-indispensible-idisposable/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F05%2F12%2Fthe-indispensible-idisposable%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/05/12/the-indispensible-idisposable/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Enumerating enumerables</title><updated>2011-05-07T17:09:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/05/07/enumerating-enumerables/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F05%2F07%2Fenumerating-enumerables%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/05/07/enumerating-enumerables/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Patching polymorphic pain at runtime</title><updated>2011-04-28T17:40:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/04/28/patching-polymorphic-pain-at-runtime/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F04%2F28%2Fpatching-polymorphic-pain-at-runtime%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/04/28/patching-polymorphic-pain-at-runtime/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>Polymorphic pain in ASP.NET data binding</title><updated>2011-04-17T17:48:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/04/17/polymorphic-pain-in-aspnet-data-binding/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F04%2F17%2Fpolymorphic-pain-in-aspnet-data-binding%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/04/17/polymorphic-pain-in-aspnet-data-binding/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry><entry><title>A simple LRU cache</title><updated>2011-04-13T21:08:00+02:00</updated><author><name>Einar W. Høst</name></author><link href="https://einarwh.no/blog/2011/04/13/a-simple-lru-cache/"></link><id>urn:einarwh-no:feed:post:%2Fblog%2F2011%2F04%2F13%2Fa-simple-lru-cache%2F</id><content type="html">&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="/blog/2011/04/13/a-simple-lru-cache/"&gt;Read blog post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content></entry></feed>