Files
Asger Geel WeirsøeandClaude Opus 5.5 e58a11c2b4 feat: flyt sitet fra Astro til Zola
Samme indhold, URL'er og udseende, bygget af en enkelt zola-binær og Tailwind
standalone-CLI uden Node. Kanonisk domæne er asger.weirsoe.dk.

Blogindlæg ligger som page bundles med frontmatter Zola forstår, så de gamle
stempler er ugyldige, indtil scripts/omstempl.py er kørt med PUBLISH_KEY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 16:47:08 +01:00

143 lines
6.8 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% extends "base.html" %}
{% block main %}
{% set d = load_data(path="data/cv-en.json") %}
<h1 class="text-4xl font-bold tracking-tight">CV</h1>
<div class="mt-3 flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted">
<span>Aalborg, Denmark</span>
<a class="text-accent hover:underline" href="mailto:asger@weirsoe.dk">asger@weirsoe.dk</a>
<a class="text-accent hover:underline" href="https://www.linkedin.com/in/ag-weirs%C3%B8e/">LinkedIn</a>
</div>
<p class="mt-6 max-w-2xl text-muted">
Technical Solution Architect who has worked on Danish national e-invoicing infrastructure
since 2021. I have led responses to production outages and security vulnerabilities,
coordinating engineers, hosting providers and the client, and I built an
information security management system around ISO/IEC 27001 with procedures for incident
response, escalation and post-incident review. M.Sc. in Computer Science, specialising in
security in distributed systems, and currently studying business administration alongside work.
</p>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Areas of expertise</h2>
<p class="mt-4 max-w-2xl text-muted">
I work with <strong class="text-text">electronic invoicing</strong> and e-procurement. At CGI I helped
develop the open source eDelivery solution for NemHandel, built on the open source access point
<strong class="text-text">Oxalis</strong> (Java). Today I am a Technical Solution Architect at Digisense A/S,
working on solution architecture in the same field: <strong class="text-text">Peppol</strong> (BIS,
Access Point and eDelivery/AS4), <strong class="text-text">NemHandel</strong>,
<strong class="text-text">OIOUBL/UBL</strong> and the European e-invoicing standard EN 16931.
</p>
<div class="mt-4 flex flex-wrap gap-2">
{% for k in ["Peppol", "Peppol Access Point", "Oxalis", "NemHandel", "E-invoicing", "OIOUBL / UBL", "eDelivery (AS4)", "EN 16931", "E-procurement"] %}
<span class="wt-tag">{{ k }}</span>
{% endfor %}
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Incident response and compliance</h2>
<p class="mt-4 max-w-2xl text-muted">
When something breaks in production, the technical fix is only half of it. The other half is
getting the right people moving, keeping the client informed and learning from it afterwards.
During the <strong class="text-text">July 2024 CrowdStrike outage</strong> a database failure hit our
hosted production platform just as most of the team’s workstations went down. As tech lead on
CGI’s NemHandel team I coordinated by phone with the hosting provider and the one developer whose
machine still worked, and the database was restored that afternoon. When the critical SnakeYAML
vulnerability <strong class="text-text">CVE-2022-1471</strong> affected the NemHandel reference
implementation, we notified the client immediately, mitigation guidance went out to operators,
and we shipped a fixed release within two weeks.
</p>
<p class="mt-3 max-w-2xl text-muted">
At Digisense I built the information security management system around
<strong class="text-text">ISO/IEC 27001</strong>: incident management and escalation procedures,
post-incident reviews and an incident register. That is the work that has to be in place before
anything is on fire, so nobody has to invent the response as it happens.
</p>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Experience</h2>
<div class="mt-4 space-y-4">
{% for e in d.work %}
<div class="wt-card">
<h3 class="font-semibold">{{ e.org }} <span class="font-normal text-muted">· {{ e.place }}</span></h3>
<div class="mt-3 space-y-3">
{% for r in e.roles %}
<div>
<div class="flex flex-wrap items-baseline justify-between gap-2">
<span class="font-medium text-text">{{ r.title }}</span>
<span class="text-xs text-muted">{{ r.when }}</span>
</div>
<ul class="mt-1 list-disc pl-5 text-sm text-muted">
{% for d in r.details %}<li>{{ d }}</li>{% endfor %}
</ul>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Education</h2>
<div class="mt-4 space-y-4">
{% for u in d.education %}
<div class="wt-card">
<div class="flex flex-wrap items-baseline justify-between gap-2">
<h3 class="font-semibold">{{ u.what }}</h3><span class="text-xs text-muted">{{ u.when }}</span>
</div>
<p class="text-sm text-muted">{{ u.where }}</p>
{% if u.note %}<p class="mt-1 text-sm text-muted/80">{{ u.note }}</p>{% endif %}
</div>
{% endfor %}
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Publication</h2>
<div class="mt-4 wt-card">
<a href="https://arxiv.org/abs/2310.00999" target="_blank" rel="noopener" class="font-medium hover:text-accent">
CGAAL: Distributed On-The-Fly ATL Model Checker with Heuristics
</a>
<p class="mt-1 text-sm text-muted">
Carlsen, Frydenskov, Jensen, Rasmussen, Sørensen, <span class="text-text">Weirsøe</span>, Jensen &amp; Larsen.
<em>EPTCS</em>, vol. 390 (2023), pp. 99–114. <span class="text-muted/80">arXiv:2310.00999</span>
</p>
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Skills</h2>
<div class="mt-4 space-y-4">
{% for s in d.skills %}
<div>
<h3 class="text-sm font-medium text-text">{{ s.k }}</h3>
<div class="mt-2 flex flex-wrap gap-2">
{% for k in s.v %}<span class="wt-tag">{{ k }}</span>{% endfor %}
</div>
</div>
{% endfor %}
</div>
</section>
<section class="mt-10 grid gap-4 sm:grid-cols-2">
<div>
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Languages</h2>
<ul class="mt-4 space-y-2 text-sm">
<li class="wt-card wt-card--compact">Danish (native)</li>
<li class="wt-card wt-card--compact">English (fluent, spoken and written)</li>
</ul>
</div>
<div>
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Projects and interests</h2>
<p class="mt-4 text-sm text-muted">
I run a self-hosted Proxmox environment with around 50 containers and virtual machines,
single sign-on through Authentik, central logging and monitoring. My family uses it every day.
I have contributed to qutebrowser and Stregsystemet,
and I am a licensed radio amateur (call sign <strong class="text-text">OZ0AGW</strong>).
</p>
</div>
</section>
{% endblock %}