Build & Deploy / deploy (push) Successful in 3m12s
Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
169 lines
10 KiB
Plaintext
169 lines
10 KiB
Plaintext
---
|
||
import Base from '../../layouts/Base.astro';
|
||
import { SITE } from '../../consts';
|
||
|
||
const work = [
|
||
{
|
||
org: 'Digisense A/S', place: 'Denmark', roles: [
|
||
{ title: 'Technical Solution Architect', when: 'May 2026 – present', details: ['Built the company’s information security management system around ISO/IEC 27001, including incident management and escalation procedures, post-incident reviews and an incident register', 'Technical point of contact across engineering, sales and support for a Peppol and NemHandel access point provider', 'Solution design for customer projects'] },
|
||
],
|
||
},
|
||
{
|
||
org: 'CGI Danmark', place: 'Aalborg', roles: [
|
||
{ title: 'Tech Lead, NemHandel', when: 'Aug 2023 – May 2026', details: ['Technical lead on CGI’s supplier team for the Danish Business Authority’s national e-invoicing infrastructure, and the client’s technical adviser', 'Led the response to CVE-2022-1471 (SnakeYAML, remote code execution) in the NemHandel reference implementation: the authority was notified immediately and published mitigation guidance on 8 January 2024, and the team shipped a fixed release within two weeks', 'Coordinated recovery from a production database failure during the July 2024 CrowdStrike outage, when most team workstations were unavailable', 'Translated client requirements for the development team'] },
|
||
{ title: 'Senior Consultant', when: 'Apr 2023 – May 2026', details: ['Mentored a newly hired developer', 'Delivered installation webinars for the NemHandel reference implementation'] },
|
||
{ title: 'Consultant', when: 'Aug 2022 – Apr 2023', details: ['Developed the open source NemHandel eDelivery reference implementation (Java, built on Oxalis) for the Danish Business Authority', 'Solution architect on the project'] },
|
||
{ title: 'Student Developer', when: 'Aug 2020 – Aug 2022', details: ['Owned a rules engine (Java, Drools)', 'Deployment and operations (Docker, Docker Compose, Linux)'] },
|
||
{ title: 'Consultant', when: 'Jun 2019 – Aug 2020', details: ['Frontend (Angular, TypeScript)', 'Backend (Go, Java, Python)'] },
|
||
],
|
||
},
|
||
{
|
||
org: 'BilligVVS', place: 'Egå', roles: [
|
||
{ title: 'Full-stack Developer', when: 'Sep 2018 – Jun 2019', details: ['Webshop checkout and shipping integration (Python, TypeScript)', 'Movex ERP integration', 'Internal BI dashboards (Python, Chart.js)'] },
|
||
],
|
||
},
|
||
];
|
||
|
||
const education = [
|
||
{ what: 'HD Part 1, Business Administration', where: 'Aalborg University', when: '2025 – 2027 (in progress)', note: 'Business economics, accounting and finance.' },
|
||
{ what: 'M.Sc. in Computer Science (cand.scient.)', where: 'Aalborg University', when: '2020 – 2022', note: 'Specialisation in security in distributed systems. Thesis: Thread-Fuzz, mutation-based behavioural blackbox fuzzing of Thread.' },
|
||
{ what: 'B.Sc. in Computer Science', where: 'Aalborg University', when: '2015 – 2018', note: '' },
|
||
];
|
||
|
||
const skills = [
|
||
{ k: 'Incident response', v: ['Incident coordination', 'Escalation', 'Stakeholder communication', 'Vulnerability response', 'Post-incident review'] },
|
||
{ k: 'Compliance and security', v: ['ISO/IEC 27001', 'ISMS', 'Information security'] },
|
||
{ k: 'E-invoicing', v: ['Peppol', 'eDelivery (AS4)', 'Oxalis', 'NemHandel', 'OIOUBL / UBL', 'EN 16931'] },
|
||
{ k: 'Infrastructure', v: ['Linux', 'Docker', 'Kubernetes', 'AWS', 'Proxmox', 'Datadog'] },
|
||
{ k: 'Development', v: ['Java', 'Python', 'Go', 'TypeScript', 'Angular', 'C#', 'PostgreSQL', 'RabbitMQ', 'Git / GitLab', 'Jenkins'] },
|
||
];
|
||
---
|
||
<Base title="CV" description="Asger Weirsøe, computer scientist and Technical Solution Architect. Incident response, ISO/IEC 27001 compliance and national e-invoicing infrastructure."
|
||
lang="en" alternates={[{ lang: 'da', path: '/cv' }, { lang: 'en', path: '/en/cv' }]}>
|
||
<div class="flex items-center justify-between gap-4">
|
||
<h1 class="text-4xl font-bold tracking-tight">CV</h1>
|
||
<a href="/cv" hreflang="da" lang="da" class="rounded-full border border-border px-2.5 py-0.5 text-sm text-muted hover:border-accent hover:text-accent">Dansk</a>
|
||
</div>
|
||
<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:${SITE.email}`}>{SITE.email}</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 Danish Business Authority, 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">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 Danish Business Authority immediately, it published
|
||
<a class="text-accent hover:underline" href="https://nemhandel.dk/orientering-om-mulig-saarbarhed-paa-nemhandel-referenceimplementering" target="_blank" rel="noopener">mitigation guidance</a>
|
||
for service providers, 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">
|
||
{work.map((e) => (
|
||
<div class="rounded-2xl border border-border bg-surface/60 p-5">
|
||
<h3 class="font-semibold">{e.org} <span class="font-normal text-muted">· {e.place}</span></h3>
|
||
<div class="mt-3 space-y-3">
|
||
{e.roles.map((r) => (
|
||
<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">
|
||
{r.details.map((d) => <li>{d}</li>)}
|
||
</ul>
|
||
</div>
|
||
))}
|
||
</div>
|
||
</div>
|
||
))}
|
||
</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">
|
||
{education.map((u) => (
|
||
<div class="rounded-2xl border border-border bg-surface/60 p-5">
|
||
<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>
|
||
{u.note && <p class="mt-1 text-sm text-muted/80">{u.note}</p>}
|
||
</div>
|
||
))}
|
||
</div>
|
||
</section>
|
||
|
||
<section class="mt-10">
|
||
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Publication</h2>
|
||
<div class="mt-4 rounded-2xl border border-border bg-surface/60 p-5">
|
||
<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 & 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">
|
||
{skills.map((s) => (
|
||
<div>
|
||
<h3 class="text-sm font-medium text-text">{s.k}</h3>
|
||
<div class="mt-2 flex flex-wrap gap-2">
|
||
{s.v.map((k) => <span class="rounded-full border border-border bg-surface/60 px-3 py-1 text-sm">{k}</span>)}
|
||
</div>
|
||
</div>
|
||
))}
|
||
</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="rounded-xl border border-border bg-surface/60 px-3 py-2">Danish (native)</li>
|
||
<li class="rounded-xl border border-border bg-surface/60 px-3 py-2">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,
|
||
which makes for honest incident reviews. 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>
|
||
</Base>
|