<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://madsopheim.com/</id>
    <title>Mads Opheim</title>
    <updated>2026-07-26T20:41:25.782Z</updated>
    <generator>Feed for Node.js</generator>
    <link rel="alternate" href="https://madsopheim.com/"/>
    <link rel="self" href="https://madsopheim.com/atom.xml"/>
    <subtitle>Doing my best for a better world. Through better tech and better policies.</subtitle>
    <rights>All rights reserved 2026, Mads Opheim</rights>
    <entry>
        <title type="html"><![CDATA[Test your legacy code]]></title>
        <id>https://madsopheim.com/blog/2019-03-28-test-your-legacy-code</id>
        <link href="https://madsopheim.com/blog/2019-03-28-test-your-legacy-code"/>
        <updated>2019-03-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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?]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tips for finding your next conference]]></title>
        <id>https://madsopheim.com/blog/2019-03-31-where-to-give-a-talk</id>
        <link href="https://madsopheim.com/blog/2019-03-31-where-to-give-a-talk"/>
        <updated>2019-03-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Where do I head to find places to apply for speaking?]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[White male privilege]]></title>
        <id>https://madsopheim.com/blog/2019-04-05-White-male-privilege</id>
        <link href="https://madsopheim.com/blog/2019-04-05-White-male-privilege"/>
        <updated>2019-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA["I'm a developer and tech lead, working in the tech industry.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Microservices with Microprofile]]></title>
        <id>https://madsopheim.com/blog/2019-08-18-microservices-with-microprofile</id>
        <link href="https://madsopheim.com/blog/2019-08-18-microservices-with-microprofile"/>
        <updated>2019-08-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Switching appservers]]></title>
        <id>https://madsopheim.com/blog/2019-10-18-switching-appservers</id>
        <link href="https://madsopheim.com/blog/2019-10-18-switching-appservers"/>
        <updated>2019-10-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[With MicroProfile, you can switch application servers for your Java or Kotlin application without touching your code at all.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to make your own scraper and then forget about it?]]></title>
        <id>https://madsopheim.com/blog/2022-10-28-scraping</id>
        <link href="https://madsopheim.com/blog/2022-10-28-scraping"/>
        <updated>2022-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You've found a web page you want to keep track of how changes, but they don't keep a changelog? Make your own!]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Enterprise Kotlin - Kotlin and Jakarta EE]]></title>
        <id>https://madsopheim.com/blog/2023-05-25-enterprise-kotlin</id>
        <link href="https://madsopheim.com/blog/2023-05-25-enterprise-kotlin"/>
        <updated>2023-05-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Kotlin is nice. Jakarta EE is nice. Let’s dive into how to make them play well together!]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Continuous delivery for your open-source library]]></title>
        <id>https://madsopheim.com/blog/2024-05-30-cd-open-source</id>
        <link href="https://madsopheim.com/blog/2024-05-30-cd-open-source"/>
        <updated>2024-05-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you are building a software library, I suggest creating and pushing out new versions on every commit on _main_.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[1Z0-1113 - The Oracle certification no one cares about?]]></title>
        <id>https://madsopheim.com/blog/2024-07-06-1z0-1113-pre</id>
        <link href="https://madsopheim.com/blog/2024-07-06-1z0-1113-pre"/>
        <updated>2024-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tempted to do the 1Z0-1113 certification on Helidon from Oracle? The toughest part might be to find information.]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Package an uber-JAR with OpenLiberty]]></title>
        <id>https://madsopheim.com/blog/2024-10-14-openliberty-uberjar</id>
        <link href="https://madsopheim.com/blog/2024-10-14-openliberty-uberjar"/>
        <updated>2024-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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?]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[1Z0-1113 - Update on my progress]]></title>
        <id>https://madsopheim.com/blog/2024-10-31-1z0-1113-update</id>
        <link href="https://madsopheim.com/blog/2024-10-31-1z0-1113-update"/>
        <updated>2024-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I wrote this summer about the 1Z0-1113 certification. What's my status?]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Ringesentralen - say what?]]></title>
        <id>https://madsopheim.com/blog/2024-11-09-ringesentralen</id>
        <link href="https://madsopheim.com/blog/2024-11-09-ringesentralen"/>
        <updated>2024-11-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This side project of mine, what is it about? It's time to dive into what it's actually doing - meet Ringesentralen]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[1Z0-1113 - I passed!]]></title>
        <id>https://madsopheim.com/blog/2024-11-11-1z0-1113-I-passed</id>
        <link href="https://madsopheim.com/blog/2024-11-11-1z0-1113-I-passed"/>
        <updated>2024-11-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[1Z0-1113 certification: I passed]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Local development with MicroProfile RestClient]]></title>
        <id>https://madsopheim.com/blog/2024-11-14-restclient-local</id>
        <link href="https://madsopheim.com/blog/2024-11-14-restclient-local"/>
        <updated>2024-11-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Test your HTTP calls on your own fake]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Replace simple sub-GitHub Actions with plain run]]></title>
        <id>https://madsopheim.com/blog/2025-04-23-github-actions</id>
        <link href="https://madsopheim.com/blog/2025-04-23-github-actions"/>
        <updated>2025-04-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use the GH CLI directly instead of wrappers you don't need]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Switching blog engine]]></title>
        <id>https://madsopheim.com/blog/2025-06-03-rewriting-the-blog</id>
        <link href="https://madsopheim.com/blog/2025-06-03-rewriting-the-blog"/>
        <updated>2025-06-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I recently realized that the engine that used to run this blog wasn't updated since 2020]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[1Z0-811 - Java Foundations - I passed!]]></title>
        <id>https://madsopheim.com/blog/2026-06-17-1z0-811-I-passed</id>
        <link href="https://madsopheim.com/blog/2026-06-17-1z0-811-I-passed"/>
        <updated>2026-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[1Z0-811 certification: I passed]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Add value by doing nothing]]></title>
        <id>https://madsopheim.com/blog/2026-07-20-add-value-by-doing-nothing</id>
        <link href="https://madsopheim.com/blog/2026-07-20-add-value-by-doing-nothing"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Sometimes, you can add value by doing... nothing]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Merging accounts]]></title>
        <id>https://madsopheim.com/blog/2026-07-21-merging-accounts</id>
        <link href="https://madsopheim.com/blog/2026-07-21-merging-accounts"/>
        <updated>2026-07-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Merging accounts is surprisingly hard]]></summary>
    </entry>
    <entry>
        <title type="html"><![CDATA[Scraping in Java is easy]]></title>
        <id>https://madsopheim.com/blog/2026-07-26-scraping-in-java</id>
        <link href="https://madsopheim.com/blog/2026-07-26-scraping-in-java"/>
        <updated>2026-07-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I transformed my scraper from Python to Java, from scrapy to jsoup. It was surprisingly easy.]]></summary>
    </entry>
</feed>