{
    "version": "https://jsonfeed.org/version/1",
    "title": "Mads Opheim",
    "home_page_url": "https://madsopheim.com/",
    "feed_url": "https://madsopheim.com/feed.json",
    "description": "Doing my best for a better world. Through better tech and better policies.",
    "items": [
        {
            "id": "https://madsopheim.com/blog/2019-03-28-test-your-legacy-code",
            "content_html": "Do you want tests for your code, but find it hard to get started? Or maybe you got it going, but ran into code you were not able to test?",
            "url": "https://madsopheim.com/blog/2019-03-28-test-your-legacy-code",
            "title": "Test your legacy code",
            "date_modified": "2019-03-28T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2019-03-31-where-to-give-a-talk",
            "content_html": "Where do I head to find places to apply for speaking?",
            "url": "https://madsopheim.com/blog/2019-03-31-where-to-give-a-talk",
            "title": "Tips for finding your next conference",
            "date_modified": "2019-03-31T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2019-04-05-White-male-privilege",
            "content_html": "\"I'm a developer and tech lead, working in the tech industry.",
            "url": "https://madsopheim.com/blog/2019-04-05-White-male-privilege",
            "title": "White male privilege",
            "date_modified": "2019-04-05T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2019-08-18-microservices-with-microprofile",
            "content_html": "Welcome to the world of microservices! We now can provide you with the tools you miss from your time with Java EE, while still leaving you free to switch application server whenever you want, without having to change your Java code.",
            "url": "https://madsopheim.com/blog/2019-08-18-microservices-with-microprofile",
            "title": "Microservices with Microprofile",
            "date_modified": "2019-08-18T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2019-10-18-switching-appservers",
            "content_html": "With MicroProfile, you can switch application servers for your Java or Kotlin application without touching your code at all.",
            "url": "https://madsopheim.com/blog/2019-10-18-switching-appservers",
            "title": "Switching appservers",
            "date_modified": "2019-10-18T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2022-10-28-scraping",
            "content_html": "You've found a web page you want to keep track of how changes, but they don't keep a changelog? Make your own!",
            "url": "https://madsopheim.com/blog/2022-10-28-scraping",
            "title": "How to make your own scraper and then forget about it?",
            "date_modified": "2022-10-28T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2023-05-25-enterprise-kotlin",
            "content_html": "Kotlin is nice. Jakarta EE is nice. Let’s dive into how to make them play well together!",
            "url": "https://madsopheim.com/blog/2023-05-25-enterprise-kotlin",
            "title": "Enterprise Kotlin - Kotlin and Jakarta EE",
            "date_modified": "2023-05-25T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-05-30-cd-open-source",
            "content_html": "If you are building a software library, I suggest creating and pushing out new versions on every commit on _main_.",
            "url": "https://madsopheim.com/blog/2024-05-30-cd-open-source",
            "title": "Continuous delivery for your open-source library",
            "date_modified": "2024-05-30T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-07-06-1z0-1113-pre",
            "content_html": "Tempted to do the 1Z0-1113 certification on Helidon from Oracle? The toughest part might be to find information.",
            "url": "https://madsopheim.com/blog/2024-07-06-1z0-1113-pre",
            "title": "1Z0-1113 - The Oracle certification no one cares about?",
            "date_modified": "2024-07-06T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-10-14-openliberty-uberjar",
            "content_html": "With OpenLiberty, you can easily get your artifact as a WAR file. But what if you (for some reason) want a self-containing JAR instead?",
            "url": "https://madsopheim.com/blog/2024-10-14-openliberty-uberjar",
            "title": "Package an uber-JAR with OpenLiberty",
            "date_modified": "2024-10-14T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-10-31-1z0-1113-update",
            "content_html": "I wrote this summer about the 1Z0-1113 certification. What's my status?",
            "url": "https://madsopheim.com/blog/2024-10-31-1z0-1113-update",
            "title": "1Z0-1113 - Update on my progress",
            "date_modified": "2024-10-31T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-11-09-ringesentralen",
            "content_html": "This side project of mine, what is it about? It's time to dive into what it's actually doing - meet Ringesentralen",
            "url": "https://madsopheim.com/blog/2024-11-09-ringesentralen",
            "title": "Ringesentralen - say what?",
            "date_modified": "2024-11-09T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-11-11-1z0-1113-I-passed",
            "content_html": "1Z0-1113 certification: I passed",
            "url": "https://madsopheim.com/blog/2024-11-11-1z0-1113-I-passed",
            "title": "1Z0-1113 - I passed!",
            "date_modified": "2024-11-11T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2024-11-14-restclient-local",
            "content_html": "Test your HTTP calls on your own fake",
            "url": "https://madsopheim.com/blog/2024-11-14-restclient-local",
            "title": "Local development with MicroProfile RestClient",
            "date_modified": "2024-11-14T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2025-04-23-github-actions",
            "content_html": "Use the GH CLI directly instead of wrappers you don't need",
            "url": "https://madsopheim.com/blog/2025-04-23-github-actions",
            "title": "Replace simple sub-GitHub Actions with plain run",
            "date_modified": "2025-04-23T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2025-06-03-rewriting-the-blog",
            "content_html": "I recently realized that the engine that used to run this blog wasn't updated since 2020",
            "url": "https://madsopheim.com/blog/2025-06-03-rewriting-the-blog",
            "title": "Switching blog engine",
            "date_modified": "2025-06-03T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2026-06-17-1z0-811-I-passed",
            "content_html": "1Z0-811 certification: I passed",
            "url": "https://madsopheim.com/blog/2026-06-17-1z0-811-I-passed",
            "title": "1Z0-811 - Java Foundations - I passed!",
            "date_modified": "2026-06-17T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2026-07-20-add-value-by-doing-nothing",
            "content_html": "Sometimes, you can add value by doing... nothing",
            "url": "https://madsopheim.com/blog/2026-07-20-add-value-by-doing-nothing",
            "title": "Add value by doing nothing",
            "date_modified": "2026-07-20T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2026-07-21-merging-accounts",
            "content_html": "Merging accounts is surprisingly hard",
            "url": "https://madsopheim.com/blog/2026-07-21-merging-accounts",
            "title": "Merging accounts",
            "date_modified": "2026-07-21T00:00:00.000Z",
            "tags": []
        },
        {
            "id": "https://madsopheim.com/blog/2026-07-26-scraping-in-java",
            "content_html": "I transformed my scraper from Python to Java, from scrapy to jsoup. It was surprisingly easy.",
            "url": "https://madsopheim.com/blog/2026-07-26-scraping-in-java",
            "title": "Scraping in Java is easy",
            "date_modified": "2026-07-26T00:00:00.000Z",
            "tags": []
        }
    ]
}