41554 blogs · [ { "id": "01a0877b-370a-73f1-ad43-d2424dbb7f70", "title": "Contract-First Modular Frontend: Enforcing Boundaries in React", "url": "https://gaevoy.com/2026/07/23/contract-first-modular-frontend-react.html", "published_at": "2026-07-23T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d2424ea607f2", "title": "Evolving a Frontend Schema with Upcasting", "url": "https://gaevoy.com/2026/07/14/upcasting-frontend-schema-evolution.html", "published_at": "2026-07-14T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d2424f3d0013", "title": "Modular Monolith in .NET: Enforcing Boundaries with Dependency Inversion", "url": "https://gaevoy.com/2026/06/30/modular-monolith-dotnet-enforcing-boundaries-dependency-inversion.html", "published_at": "2026-06-30T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d2424ffd3976", "title": "Using C# 12 Features in .NET Framework", "url": "https://gaevoy.com/2024/10/22/using-csharp-12-in-dotnet-framework-guide.html", "published_at": "2024-10-22T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24250e2a151", "title": "Exception Rethrow traps in .NET Framework", "url": "https://gaevoy.com/2024/01/29/exception-rethrow-dotnet-framework-traps.html", "published_at": "2024-01-29T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24251ba14d5", "title": "Learn C# Enum Flags by Doing", "url": "https://gaevoy.com/2023/11/14/learn-enum-flags-csharp.html", "published_at": "2023-11-14T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24251ba219a", "title": "Handling of unknown enums in .NET serialization for API integration", "url": "https://gaevoy.com/2023/09/26/dotnet-serialization-unknown-enums-handling-api.html", "published_at": "2023-09-26T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24251fdf4bd", "title": "Speed up NUnit tests in one-line", "url": "https://gaevoy.com/2023/07/19/speed-up-nunit-tests.html", "published_at": "2023-07-19T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24252427e22", "title": "Compute SHA hash for streams", "url": "https://gaevoy.com/2023/07/11/compute-sha-for-streams.html", "published_at": "2023-07-11T00:00:00+00:00" }, { "id": "01a0877b-370a-73f1-ad43-d24252c8cec2", "title": "Beware of decimals in Microsoft SQL Server", "url": "https://gaevoy.com/2023/02/17/beware-of-decimals-in-t-sql.html", "published_at": "2023-02-17T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee65a62bd5", "title": "Review .NET dependencies on every commit", "url": "https://gaevoy.com/2022/05/19/review-dependencies-on-every-commit.html", "published_at": "2022-05-19T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee64f1ab3a", "title": ".NET type for personally identifiable information (PII)", "url": "https://gaevoy.com/2022/03/18/personally-identifiable-information-data-types.html", "published_at": "2022-03-18T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee64754f5c", "title": "Duty bot via Google Sheets", "url": "https://gaevoy.com/2021/12/14/duty-bot-via-google-sheets.html", "published_at": "2021-12-14T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee64136f66", "title": "Pitfalls of parsing .NET enumeration. Is Enum.Parse broken?", "url": "https://gaevoy.com/2021/12/01/parsing-enum-pitfalls.html", "published_at": "2021-12-01T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee632359c2", "title": "Audit log via transactional outbox", "url": "https://gaevoy.com/2021/03/18/audit-log-via-transactional-outbox.html", "published_at": "2021-03-18T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee62646d72", "title": "Secure appsettings.json with ease", "url": "https://gaevoy.com/2021/01/08/secure-your-appsettings-json.html", "published_at": "2021-01-08T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee61f6fe42", "title": "Using Blazor WebAssembly in the old ASP.NET", "url": "https://gaevoy.com/2019/11/19/blazor-in-old-aspnet.html", "published_at": "2019-11-19T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee6167c662", "title": "Job scheduler via Azure Service Bus", "url": "https://gaevoy.com/2019/10/25/job-scheduler-via-azure-service-bus.html", "published_at": "2019-10-25T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee60d925b7", "title": "The smallest file server on C# to save data from a dying Linux", "url": "https://gaevoy.com/2019/10/16/micro-file-server.html", "published_at": "2019-10-16T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee60a3d23a", "title": "Story on how MiniProfiler 3 breaks TransactionScope flow", "url": "https://gaevoy.com/2019/09/09/miniprofiler-bug.html", "published_at": "2019-09-09T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee6051cddd", "title": "Mocking via interface vs delegate vs virtual method in C#", "url": "https://gaevoy.com/2019/08/29/mocking-via-interface-delegate-virtual-method.html", "published_at": "2019-08-29T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5fd605ad", "title": "Respect the order of .NET Enum values or how to rename them correctly", "url": "https://gaevoy.com/2019/08/11/order-of-enum-values-matters.html", "published_at": "2019-08-11T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5f5a7137", "title": "ASP.NET MVC app warm-up", "url": "https://gaevoy.com/2019/07/24/asp-net-mvc-app-warm-up.html", "published_at": "2019-07-24T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5eebe6fd", "title": "How to test serialization and deserialization", "url": "https://gaevoy.com/2019/06/27/how-to-test-serialization.html", "published_at": "2019-06-27T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5e77b11f", "title": "Sign-in via Keybase PGP key", "url": "https://gaevoy.com/2019/06/23/sign-in-via-keybase.html", "published_at": "2019-06-23T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5d97174b", "title": "@Html.Raw(json) cross-site scripting trap", "url": "https://gaevoy.com/2019/06/05/script-in-string.html", "published_at": "2019-06-05T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5cba64b1", "title": "What is inside PGP signature?", "url": "https://gaevoy.com/2019/05/10/pgp-signature.html", "published_at": "2019-05-10T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5bdcf323", "title": "End-to-end encrypted chat on JavaScript", "url": "https://gaevoy.com/2019/04/13/e2e-encrypted-chat.html", "published_at": "2019-04-13T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5b88353a", "title": "Chat on bare .NET Core and JS via server-sent events", "url": "https://gaevoy.com/2019/04/07/minimalist-chat.html", "published_at": "2019-04-07T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5ab94088", "title": "Searching for heavy T-SQL queries", "url": "https://gaevoy.com/2019/03/27/searching-heavy-sql-queries.html", "published_at": "2019-03-27T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5a64f8bb", "title": "Lightning-fast deployment of .NET Core app over SSH", "url": "https://gaevoy.com/2019/03/21/deploy-dotnetcore-to-ubuntu.html", "published_at": "2019-03-21T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee597ef0df", "title": "Partially committed transaction trap via .NET and MS SQL", "url": "https://gaevoy.com/2019/03/10/partially-commited-transaction.html", "published_at": "2019-03-10T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee58de87d4", "title": "Partial password usability sucks", "url": "https://gaevoy.com/2019/03/06/partial-password-sucks.html", "published_at": "2019-03-06T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee58a60e0c", "title": "Readable NUnit test cases", "url": "https://gaevoy.com/2019/02/28/readable-test-cases.html", "published_at": "2019-02-28T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5886c0ff", "title": "100 LoC console app vs Google Alerts", "url": "https://gaevoy.com/2019/02/20/your-own-google-alerts.html", "published_at": "2019-02-20T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5815ffdd", "title": "Self-documented state machine via PlantUML", "url": "https://gaevoy.com/2019/02/14/self-documented-state-machine.html", "published_at": "2019-02-14T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5812347c", "title": "The state pattern using Entity Framework", "url": "https://gaevoy.com/2019/02/12/state-pattern-using-entity-framework.html", "published_at": "2019-02-12T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5763f0e0", "title": "Akka-like state machine", "url": "https://gaevoy.com/2019/02/08/state-machine.html", "published_at": "2019-02-08T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee56f069c1", "title": "Adding custom data to an exception for logger", "url": "https://gaevoy.com/2019/02/06/exception-custom-data.html", "published_at": "2019-02-06T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee565f11df", "title": "Self-documented system via PlantUML", "url": "https://gaevoy.com/2019/02/04/self-documented-app.html", "published_at": "2019-02-04T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee55e4fa81", "title": "Text to UML diagram via PlantUML", "url": "https://gaevoy.com/2019/02/01/plant-uml.html", "published_at": "2019-02-01T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5542e64a", "title": "Process manager as async function in C#", "url": "https://gaevoy.com/2019/01/30/process-manager-as-async-function.html", "published_at": "2019-01-30T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee545dbd10", "title": "How to alert on long-running SQL queries in .NET", "url": "https://gaevoy.com/2019/01/29/alert-long-running-sql.html", "published_at": "2019-01-29T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee5382b036", "title": "How to test Webhooks", "url": "https://gaevoy.com/2019/01/28/how-to-test-webhooks.html", "published_at": "2019-01-28T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee52bc4dc7", "title": "Throttling asynchronous tasks AKA rate limiting", "url": "https://gaevoy.com/2019/01/27/throttling-async-task.html", "published_at": "2019-01-27T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee51bd7abc", "title": "My GPG / PGP key", "url": "https://gaevoy.com/2018/11/19/my-gpg-key.html", "published_at": "2018-11-19T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee51749434", "title": "Hello world!", "url": "https://gaevoy.com/2016/01/28/hello-world.html", "published_at": "2016-01-28T00:00:00+00:00" }, { "id": "01a0d0db-08ab-7029-a69a-28ee6a8dd961", "title": "Say Hello", "url": "https://gaevoy.com/contact/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6b557a61", "title": null, "url": "https://gaevoy.com/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6b8ccb68", "title": null, "url": "https://gaevoy.com/daddy-birthday-2019/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6c85c0b5", "title": "Expert Web Development and Consulting Services", "url": "https://gaevoy.com/tags/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6d71546b", "title": "About Me | Expert Web Development and Consulting Services", "url": "https://gaevoy.com/about-me/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6d9757b5", "title": null, "url": "https://gaevoy.com/page2/", "published_at": null }, { "id": "01a0d0db-08ab-7029-a69a-28ee6dcdb993", "title": null, "url": "https://gaevoy.com/page3/", "published_at": null } ] posts Claim your blog
Back to gaevoy.com
Blog · corpus.blog/blogs/gaevoy.com/posts

gaevoy.com

gaevoy.com

2026

2024

2023

2022

2021

2019

2018

2016

Undated