56,966 blogs · [ { "id": "01a0d81e-5453-71f7-8203-b80300588d97", "title": "Fluent logs", "url": "https://einarwh.no/blog/2026/09/23/fluent-logs/", "published_at": "2026-09-23T20:00:00+00:00" }, { "id": "01a08771-fd85-7180-b04b-83a367fb0496", "title": "Art from AI", "url": "https://einarwh.no/blog/2026/05/26/art-from-ai/", "published_at": "2026-05-26T19:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f7ddcd425", "title": "Are we focused yet?", "url": "https://einarwh.no/blog/2026/04/30/are-we-focused-yet/", "published_at": "2026-04-30T15:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f7e8cdccd", "title": "What to say", "url": "https://einarwh.no/blog/2026/04/29/what-to-say/", "published_at": "2026-04-29T16:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f7f133f30", "title": "I refuse to play the imitation game", "url": "https://einarwh.no/blog/2026/04/15/i-refuse-to-play-the-imitation-game/", "published_at": "2026-04-15T12:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f7faca7e6", "title": "The asymmetry of politeness", "url": "https://einarwh.no/blog/2026/03/22/the-asymmetry-of-politeness/", "published_at": "2026-03-22T00:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f80398504", "title": "Toe tags for JSON blobs", "url": "https://einarwh.no/blog/2026/03/20/toe-tags-for-json-blobs/", "published_at": "2026-03-20T15:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8076d816", "title": "How you will leave", "url": "https://einarwh.no/blog/2026/03/14/how-you-will-leave/", "published_at": "2026-03-14T17:45:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f80b00717", "title": "Ask yourself if they could already know", "url": "https://einarwh.no/blog/2026/02/ask-yourself/", "published_at": "2026-02-02T12:45:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f815b17cb", "title": "The problem of the pages", "url": "https://einarwh.no/blog/2025/10/13/the-problem-of-the-pages/", "published_at": "2025-10-13T17:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f817a93f0", "title": "Nullable vs nullable in C#", "url": "https://einarwh.no/blog/2025/08/25/nullable-vs-nullable/", "published_at": "2025-08-25T17:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f81d7d3fc", "title": "Disentangling intertwingled magicks in ASP.NET Core Web APIs", "url": "https://einarwh.no/blog/2025/08/15/disentangling-magicks/", "published_at": "2025-08-15T19:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f824fef38", "title": "Book heuristics", "url": "https://einarwh.no/blog/2025/06/20/book-heuristics/", "published_at": "2025-06-20T19:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8299c7cd", "title": "Socio-technical is a big word", "url": "https://einarwh.no/blog/2025/06/16/sociotechnical-is-a-big-word/", "published_at": "2025-06-16T19:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f82a080f7", "title": "What's a tomato?", "url": "https://einarwh.no/blog/2025/05/11/whats-a-tomato/", "published_at": "2025-05-11T19:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f82e84fef", "title": "Socio-technical API patterns", "url": "https://einarwh.no/blog/2025/04/28/sociotechnical-api-patterns/", "published_at": "2025-04-28T14:17:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f83a98e72", "title": "The banana test for AI-generated artifacts", "url": "https://einarwh.no/blog/2024/10/03/the-banana-test-for-ai-generated-artifacts/", "published_at": "2024-10-03T10:33:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f83a9c61e", "title": "The AI puppet dance", "url": "https://einarwh.no/blog/2024/01/12/the-ai-puppet-dance/", "published_at": "2024-01-12T16:08:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f83cf63e8", "title": "Inspirational math", "url": "https://einarwh.no/blog/2023/05/20/inspirational-math/", "published_at": "2023-05-20T09:09:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f83ef306c", "title": "Drift into debt", "url": "https://einarwh.no/blog/2023/04/25/drift-into-debt/", "published_at": "2023-04-25T15:01:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f84654245", "title": "Don't settle for a playground", "url": "https://einarwh.no/blog/2023/03/29/dont-settle-for-a-playground/", "published_at": "2023-03-29T16:39:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8556ce55", "title": "Dragging a dead priest: programs and programmers in time", "url": "https://einarwh.no/blog/2023/02/05/dragging-a-dead-priest-programs-and-programmers-in-time/", "published_at": "2023-02-05T09:39:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f85c06692", "title": "NO! Programming as other", "url": "https://einarwh.no/blog/2021/04/18/no-programming-as-other/", "published_at": "2021-04-18T17:45:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f862bf898", "title": "Programmer vs developer", "url": "https://einarwh.no/blog/2021/02/11/programmer-vs-developer/", "published_at": "2021-02-11T14:31:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f864db4b2", "title": "Multiselfing", "url": "https://einarwh.no/blog/2020/11/25/multiselfing/", "published_at": "2020-11-25T11:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f868e610c", "title": "Conway's mob", "url": "https://einarwh.no/blog/2020/09/15/conways-mob/", "published_at": "2020-09-05T14:57:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f870db2ee", "title": "Into the tar pit", "url": "https://einarwh.no/blog/2020/05/19/into-the-tar-pit/", "published_at": "2020-05-19T20:30:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8781acf1", "title": "Proper JSON and property bags", "url": "https://einarwh.no/blog/2020/05/13/proper-json-and-property-bags/", "published_at": "2020-05-13T15:50:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f87fd05af", "title": "On the complexity of JSON serialization", "url": "https://einarwh.no/blog/2020/05/08/on-the-complexity-of-json-serialization/", "published_at": "2020-05-08T14:04:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f88892f0f", "title": "Death of a craftsman", "url": "https://einarwh.no/blog/2020/04/05/death-of-a-craftsman/", "published_at": "2020-04-05T09:24:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f89884366", "title": "Function application in la-la land", "url": "https://einarwh.no/blog/2017/10/11/function-application-in-la-la-land/", "published_at": "2017-10-11T19:06:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8a560447", "title": "How to reduce bunches of things", "url": "https://einarwh.no/blog/2017/10/05/how-to-reduce-bunches-of-things/", "published_at": "2017-10-05T21:01:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8b2e9e17", "title": "LINQ to Nullable", "url": "https://einarwh.no/blog/2017/09/27/linq-to-nullable/", "published_at": "2017-09-27T20:38:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8b61a7b4", "title": "Picture combinators and recursive fish", "url": "https://einarwh.no/blog/2017/07/22/picture-combinators-and-recursive-fish/", "published_at": "2017-07-22T05:24:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8b99ce79", "title": "Donkey code", "url": "https://einarwh.no/blog/2017/01/21/donkey-code/", "published_at": "2017-01-21T10:12:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8c54eea7", "title": "Something for nothing", "url": "https://einarwh.no/blog/2017/01/17/something-for-nothing/", "published_at": "2017-01-17T20:35:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8d035eec", "title": "Pragmatism is poison", "url": "https://einarwh.no/blog/2016/03/10/pragmatism-is-poison/", "published_at": "2016-03-16T06:14:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8d39e0db", "title": "Strings with assumptions", "url": "https://einarwh.no/blog/2016/01/29/strings-with-assumptions/", "published_at": "2016-01-29T22:23:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8dca97ad", "title": "Technical debt isn't technical", "url": "https://einarwh.no/blog/2015/12/05/technical-debt-isnt-technical/", "published_at": "2015-12-05T21:29:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8df0da14", "title": "Thinging names", "url": "https://einarwh.no/blog/2015/05/10/thinging-names/", "published_at": "2015-05-10T19:09:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8ee0aaad", "title": "Diamond mirrors", "url": "https://einarwh.no/blog/2015/02/10/diamond-mirrors/", "published_at": "2015-02-10T21:13:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f8f7c6dfd", "title": "Aspects without aspects", "url": "https://einarwh.no/blog/2014/07/05/aspects-without-aspects/", "published_at": "2014-07-05T07:51:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9036e87b", "title": "Rethrow recoil", "url": "https://einarwh.no/blog/2014/06/30/rethrow-recoil/", "published_at": "2014-06-30T13:48:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f90fd5917", "title": "LINQ to Exceptions", "url": "https://einarwh.no/blog/2014/06/28/linq-to-exceptions/", "published_at": "2014-06-28T18:04:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f91349408", "title": "Another wild tail chase", "url": "https://einarwh.no/blog/2013/12/19/another-wild-tail-chase/", "published_at": "2013-12-19T07:42:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f91ef26bb", "title": "Chasing your tail with bytecode manipulation", "url": "https://einarwh.no/blog/2013/11/05/chasing-your-tail-with-bytecode-manipulation/", "published_at": "2013-11-05T16:12:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f928adbf6", "title": "Shrink-wrapped Mkay", "url": "https://einarwh.no/blog/2013/03/05/shrink-wrapped-mkay/", "published_at": "2013-03-05T19:45:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9343b39e", "title": "Self-referential validation in Mkay", "url": "https://einarwh.no/blog/2013/02/22/self-referential-validation-in-mkay/", "published_at": "2013-02-22T20:16:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f941b19c6", "title": "Mkay: One validation attribute to rule them all", "url": "https://einarwh.no/blog/2013/02/15/mkay-one-validation-attribute-to-rule-them-all/", "published_at": "2013-02-15T11:07:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f94b59f1c", "title": "Yes, it's an animated Hama bead Larry", "url": "https://einarwh.no/blog/2012/11/01/yes-its-an-animated-hama-bead-larry/", "published_at": "2012-11-01T11:35:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9553f27d", "title": "The hawk and the tower", "url": "https://einarwh.no/blog/2012/08/24/the-hawk-and-the-tower/", "published_at": "2012-08-24T14:44:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f959f81a3", "title": "To Knuth or not to Knuth", "url": "https://einarwh.no/blog/2012/07/08/to-knuth-or-not-to-knuth/", "published_at": "2012-07-08T20:44:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f95a6e122", "title": "Strings dressed in nested tags", "url": "https://einarwh.no/blog/2012/06/20/strings-dressed-in-nested-tags/", "published_at": "2012-06-20T18:53:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f95da7021", "title": "Strings dressed in tags", "url": "https://einarwh.no/blog/2012/06/20/strings-dressed-in-tags/", "published_at": "2012-06-20T13:43:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f96161516", "title": "Introducing μnit", "url": "https://einarwh.no/blog/2012/06/15/introducing-mjunit/", "published_at": "2012-06-15T06:14:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f967993e4", "title": "A property with a view", "url": "https://einarwh.no/blog/2012/05/01/a-property-with-a-view/", "published_at": "2012-05-01T19:29:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f967adc3e", "title": "Recursion for kids", "url": "https://einarwh.no/blog/2012/01/19/recursion-for-kids/", "published_at": "2012-01-19T13:15:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f968c1bb4", "title": "Pix-it curling", "url": "https://einarwh.no/blog/2011/11/07/pix-it-curling/", "published_at": "2011-11-07T20:36:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f97074510", "title": "Bix-it: pix-it in the browser", "url": "https://einarwh.no/blog/2011/11/06/bix-it-pix-it-in-the-browser/", "published_at": "2011-11-06T19:12:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f97c1545a", "title": "Pix-it war!", "url": "https://einarwh.no/blog/2011/11/04/pix-it-war/", "published_at": "2011-11-04T20:27:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9878045a", "title": "Optimus Prime", "url": "https://einarwh.no/blog/2011/10/05/optimus-prime/", "published_at": "2011-10-05T21:00:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f98caa827", "title": "Launch as admin", "url": "https://einarwh.no/blog/2011/09/27/launch-as-admin/", "published_at": "2011-09-27T15:17:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f98e6e252", "title": "Telepathic computer control with Launchy", "url": "https://einarwh.no/blog/2011/09/25/telepathic-computer-control-with-launchy/", "published_at": "2011-09-25T20:32:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f99abed4a", "title": "Dry data", "url": "https://einarwh.no/blog/2011/06/20/dry-data/", "published_at": "2011-06-20T17:17:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9a00bae0", "title": "UTC now!", "url": "https://einarwh.no/blog/2011/05/26/utc-now/", "published_at": "2011-05-26T17:22:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9a794037", "title": "The indispensable IDisposable", "url": "https://einarwh.no/blog/2011/05/12/the-indispensible-idisposable/", "published_at": "2011-05-12T19:46:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9a88e7e2", "title": "Enumerating enumerables", "url": "https://einarwh.no/blog/2011/05/07/enumerating-enumerables/", "published_at": "2011-05-07T15:09:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9ac87739", "title": "Patching polymorphic pain at runtime", "url": "https://einarwh.no/blog/2011/04/28/patching-polymorphic-pain-at-runtime/", "published_at": "2011-04-28T15:40:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9bb2b47f", "title": "Polymorphic pain in ASP.NET data binding", "url": "https://einarwh.no/blog/2011/04/17/polymorphic-pain-in-aspnet-data-binding/", "published_at": "2011-04-17T15:48:00+00:00" }, { "id": "01a08771-fd86-72e1-a75d-401f9bf73349", "title": "A simple LRU cache", "url": "https://einarwh.no/blog/2011/04/13/a-simple-lru-cache/", "published_at": "2011-04-13T19:08:00+00:00" } ] posts Claim your blog
Back to einarwh.no
Blog · corpus.blog/blogs/einarwh.no/posts

einarwh.no

einarwh.no

2026

2025

2024

2023

2021

2020

2017

2016

2015

2014

2013

2012

2011