<!DOCTYPE html>
<html lang="en" class="">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>
      Julian Møller Ellehauge
    </title>
    <meta content="Julian Møller Ellehauge" property="og:site_name" />
    <meta name="description" content="The weblog on programming by Julian Møller Ellehauge." />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <link rel="stylesheet" href="/css/style.css" />
    <link rel="alternate" type="application/rss+xml" href="/feed.xml" />
    <link
      href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/atom-one-light.min.css"
      rel="stylesheet"
    />
    <script>
      function setClass() {
        document.documentElement.classList.toggle(
          "dark",
          localStorage.theme === "dark" ||
            (!("theme" in localStorage) &&
              window.matchMedia("(prefers-color-scheme: dark)").matches)
        );
      }
      setClass();
    </script>
  </head>
  <body
    class="bg-neutral-100 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-300 font-sans min-h-screen"
  >
    <div class="container max-w-(--breakpoint-md) mx-auto">
      <header
        class="text-white p-2 text-lg font-bold mb-4 bg-linear-to-r from-blue-500 to-purple-500 dark:from-blue-700 dark:to-purple-700"
      >
        <section class=""><a href="/">
  <h1>~jumoel</h1>
</a>
</section>
      </header>
      <main class="grid grid-cols-1 px-4 lg:px-0">
        <section class="">
<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/automerging-exercism-prs-github"><p>Automerging GitHub PR’s from the exercism.org sync bot</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Oct 9, 2025
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p><a href="https://exercism.org/">Exercism.org</a> has a bot to synchronize your exercise solutions to a GitHub repository. If you’re not an Exercism Insider, the bot will only open PR’s for you and not merge directly to your primary branch.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/automerging-exercism-prs-github"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/tailwind-react-native-classnames"><p>Using Tailwind classnames in React Native with intellisense</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Sep 2, 2020
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>I’m writing a small app using <a href="https://reactnative.dev">React Native</a>. Since I’m a fan of <a href="https://tailwindcss.com">Tailwind</a> for styling on the web, I wanted to use it for the app as well. The package <a href="https://www.npmjs.com/package/tailwind-rn"><code>tailwind-rn</code></a> is available, but requires the use of <code>tailwind('...')</code> to apply styles, which <a href="https://github.com/tailwindlabs/tailwindcss-intellisense/issues/129">doesn’t work</a> with the <a href="https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss">intellisense plugin for VSCode</a>.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/tailwind-react-native-classnames"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/rust-roguelike-from-scratch-pt1"><p>A roguelike in Rust from scratch, part 1</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Jun 23, 2020
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>Two tings have collided. Me wanting to learn Rust and the <a href="https://old.reddit.com/r/roguelikedev/comments/grccvt/roguelikedev_does_the_complete_roguelike_tutorial/">r/roguelikedev summer tutorial follow-along</a>. My main motivation (for now) is learning Rust, so I’ve set a restriction for myself: I won’t be using external dependencies for anything that can feasibly be done manually. To keep things manageable, that means that my rogue like will be old school and take place in a plain ol’ terminal.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/rust-roguelike-from-scratch-pt1"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/zero-to-webpack"><p>From zero to webpack, one error at the time</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Feb 16, 2017
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>If you’ve ever struggled getting to grips with webpack, now is a good time to get started. The stable release of webpack version 2 is out, and this guide will take you from zero to a functional webpack configuration. The end result will be a small, but working React application. The configuration will be expanded one item at a time and will be driven by error messages. By not starting out with a boilerplate, you’ll be able to understand what each part does, and thus be able to expand upon it yourself if new needs arise.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/zero-to-webpack"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/fixing-with-subelements-in-ansible"><p>Fixing <code>with_subelements</code> in Ansible</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Sep 17, 2014
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>Lately I’ve been working on automatically provisioning servers <a href="/2014/ansible-rackspace-idempotence.html">while trying to
remain sane</a> as well as getting <a href="/2014/golive-tool.html">simple automatic deployments</a>
running. I’ve been bit by it before, but it wasn’t until I was trying to set up
loadbalancers and DNS in Rackspace, that I took some time to look into the
problem: <a href="http://docs.ansible.com/playbooks_loops.html#looping-over-subelements"><code>with_subelements</code></a> doesn’t work properly. At least not the
way I <em>thought</em> it should work.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/fixing-with-subelements-in-ansible"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/golive-tool"><p>Golive: A simple deployment tool</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Sep 1, 2014
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>I’ve heard that the best way to learn a new programming language is to create a
proper project in it. <code>golive</code> is my “Learn Golang”-project. It is a simple
deployment tool that listens to webhook requests from git repository providers
such as Bitbucket and Github. If the pushed repository and branch matches
something in the configuration file, corresponding jobs run.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/golive-tool"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>

<div class="mb-8"> <article class="pb-4">
  <header>
    <h1
      class="text-lg font-mono tracking-tight font-semibold text-blue-950 dark:text-blue-200"
    >
      <a href="/posts/ansible-rackspace-idempotence"><p>Ansible, Rackspace and Idempotence</p>
</a>
    </h1>
    <p class="text-sm text-neutral-400">
      Aug 27, 2014
    </p>
  </header>

  <section
    class="post-content prose dark:prose-invert max-w-none prose-a:text-blue-400 prose-code:before:content-none prose-code:after:content-none prose-a:underline-offset-2"
  >
     <p>I was recently tasked with transitioning a server setup from the medieval times
of “we can’t get in contact with the server-guy, but here are some vague
instructions that are probably outdated” to the modern times of “automate all
the things!” Trying to make sure the process was fully codified and idempotent,
I ran into some snags here and there. This is a documentation of those snags,
both for a future me, but also for others, should they struggle with the same
things. As the title says, it is focused on <a href="http://www.ansible.com/">Ansible</a>, its integration with
<a href="http://www.rackspace.com/">Rackspace</a> and how to keep the playbook idempotent – that is, how to make
sure that running the playbook has no effect if no changes has been made to it.</p>
 
  </section>

  
  <div class="mt-4">
    <a
      class="underline underline-offset-2 text-blue-950 dark:text-blue-200"
      href="/posts/ansible-rackspace-idempotence"
      >Read more &rarr;</a
    >
  </div>
  
</article>
</div>
 
</section>
      </main>
      <footer class="border-t-2 pt-8 border-purple-500">
        <section class="px-4 lg:px-0">
          <aside>
            <section class="pb-4">
              <b>Theme:</b>
              <span
                class="cursor-pointer bg-linear-to-r from-blue-500 to-purple-500 dark:from-blue-700 dark:to-purple-700 text-white font-bold py-1 px-2 rounded-sm shadow-lg transition duration-300 ease-in-out transform hover:scale-105"
                id="theme-toggle"
              ></span>
            </section>
          </aside>
          <aside class="extras">

<section class="pb-4">
  <b>Elsewhere</b>
  <ul class="sidebar-links">
    <li>
      <a href="https://www.github.com/jumoel">GitHub</a>
    </li>
    <li>
      <a href="https://linkedin.com/in/jumoel"
        >LinkedIn</a
      >
    </li>
  </ul>
</section>

<section class="pb-4">
  <b>Other stuff</b>
  <ul class="sidebar-links">
    <li><a href="/">Home</a></li>
    <li><a href="/feed.xml">RSS feed</a></li>
    <li><a href="/archive/">Full post archive</a></li>
  </ul>
</section>
</aside>

          <aside class="hire-me"><section class="pb-4">
  <h3 class="font-bold">Need a specialist?</h3>

  <p>I'm available for interesting full time positions.</p>
  <p>Fully remote and able to work from Denmark. No relocation.</p>
  <p>
    Send a line to <a href="mailto:hire@jumoel.com">hire@jumoel.com</a> to get
    in touch.
  </p>
</section>
</aside>
        </section>
      </footer>
    </div>

    <script>
      let themeToggle = document.getElementById("theme-toggle");

      function setContent() {
        let content =
          localStorage.theme === "dark"
            ? "dark 🌙"
            : localStorage.theme === "light"
            ? "light ☀️"
            : "system ✨";
        themeToggle.textContent = content;
      }

      function toggleTheme() {
        if (localStorage.theme === "dark") {
          localStorage.theme = "light";
        } else if (localStorage.theme === "light") {
          localStorage.removeItem("theme");
        } else {
          localStorage.theme = "dark";
        }

        setContent();
        setClass();
      }

      setContent();
      themeToggle.addEventListener("click", toggleTheme);
    </script>
  </body>
</html>
