Files
pw/src/pages/cv.astro
T
Asger Geel Weirsøe cd738a5009 content: væk med tankestregerne i radio- og naturteksten
Asgers stil bruger ikke "—" som pause eller indskud.. det er det tydeligste
AI-tegn der findes, og reglen står allerede i hans egen blog-post-skill. Den
gælder hele sitet, ikke kun blogindlæg, og teksterne fra de to foregående
commits overholdt den ikke.

Rettet: ".." hvor der er en rigtig pause (CV-linjen om radioen, begge linjer i
ascii-CV'et), komma hvor sætningen bare skal hænge sammen (naturafsnittet,
FAQ-svaret, faktalinjerne i llms.txt) og kolon i kodekommentaren i seo.ts.

Resten af sitet har stadig omkring 45 tankestreger fra tidligere tekster; de
ligger urørt her, så det bliver en beslutning for sig.

Claude-Session: https://claude.ai/code/session_0198n4owY35jQpwht1wCGzfh
2026-09-22 19:10:00 +02:00

219 lines
12 KiB
Plaintext
Raw 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.
---
import Base from '../layouts/Base.astro';
import { SITE } from '../consts';
const erhverv = [
{
org: 'Digisense A/S', sted: 'Danmark', roller: [
{ titel: 'Technical Solution Architect', naar: 'maj 2026 – nu', detaljer: ['Teknisk arkitektur og løsningsdesign', 'Bygger bro mellem kunder og udviklingsteams', 'Teknisk overblik og rådgivning'] },
],
},
{
org: 'CGI', sted: 'Aalborg', roller: [
{ titel: 'Teknisk Lead', naar: 'aug. 2023 – maj 2026', detaljer: ['Teknisk overblik og arkitektur', 'Tæt kundesamarbejde om teknisk leverance', 'Kontaktperson og rådgiver for kunden', 'Formidler kundens behov til udviklingsteamet'] },
{ titel: 'Senior Konsulent', naar: 'apr. 2023 – maj 2026', detaljer: ['Buddy for ny udvikler', 'Afholdt installationsvejledning via webinar'] },
{ titel: 'Konsulent', naar: 'aug. 2022 – apr. 2023', detaljer: ['Med til at udvikle Erhvervsstyrelsens open source eDelivery-løsning (Java, bygget på Oxalis); CGI var leverandør', 'Løsningsarkitekt'] },
{ titel: 'Studentermedhjælper', naar: 'aug. 2020 – aug. 2022', detaljer: ['Kode-ansvarlig for en regelmotor (Java, Drools)', 'DevOps (Docker, docker-compose, Linux)'] },
{ titel: 'Konsulent', naar: 'jun. 2019 – aug. 2020', detaljer: ['Frontend (Angular 8, TypeScript)', 'Backend (GoLang, Java, Python)'] },
],
},
{
org: 'BilligVVS', sted: 'Egaa', roller: [
{ titel: 'Fullstack IT-udvikler', naar: 'sep. 2018 – jun. 2019', detaljer: ['Hjemmeside (Python, TypeScript)', 'Backend (Python, Movex)', 'Webcrawler (Python)', 'BI (Python, chart.js)'] },
],
},
];
const uddannelse = [
{ hvad: 'HD 1. del i Erhvervsøkonomi', hvor: 'Aalborg Universitet', naar: '2025 – 2027 (i gang)', note: 'Forretningsforståelse, erhvervsøkonomi, regnskab og finansiering.' },
{ hvad: 'Kandidat i Datalogi (cand.scient.)', hvor: 'Aalborg Universitet', naar: '2020 – 2022', note: 'Speciale: Thread-Fuzz, mutation-based behavioural blackbox fuzzing of Thread.' },
{ hvad: 'Bachelor i Datalogi (B.Sc.)', hvor: 'Aalborg Universitet', naar: '2015 – 2018', note: '' },
{ hvad: 'Almen studentereksamen (STX)', hvor: 'Espergærde Gymnasium og HF', naar: '2012 – 2015', note: '' },
{ hvad: 'Udvekslingsår', hvor: 'Lincoln High School, Ypsilanti, Michigan (USA)', naar: '2011 – 2012', note: '' },
];
const licenser = [
{
hvad: 'Radioamatørlicens, kategori B',
hvor: 'Kaldesignal OZ0AGW',
naar: 'maj 2024',
note: 'Bestod radioamatørprøven lørdag den 18. maj 2024.',
},
];
const frivilligt = [
{ hvad: 'LUNARK', naar: '2020', note: 'Notifikationssystem i C# og React.' },
{ hvad: 'Kirkens Korshær', naar: '2020 – nu', note: 'Køkkenhjælper hver jul og nytår.' },
{ hvad: 'AAU Campus', naar: '2016 – 2022', note: 'Tutor og F-Klub-frivillig.' },
];
const primaere = ['Java', 'Python', 'GoLang', 'TypeScript', 'JavaScript', 'Angular', 'Docker', 'Linux', 'Proxmox', 'PostgreSQL', 'Jenkins', 'Git / GitLab', 'BI', 'Agile'];
const sekundaere = ['C#', 'C++', 'C', 'Kubernetes', 'AWS', 'RabbitMQ', 'Datadog', 'XeLaTeX'];
const sprog = ['Dansk (modersmål)', 'Engelsk (flydende i tale og skrift)'];
---
<Base title="CV" description="Asger Weirsøe, datalog og Technical Solution Architect. Erfaring, uddannelse og publikationer.">
<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>{SITE.location}</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">
Datalog (cand.scient.) fra Aalborg Universitet med en bred profil. Jeg forener teknisk
indsigt med forretningsforståelse og er god til at få komplekse løsninger til at lande i
praksis, særligt inden for elektronisk fakturering. Karrieren gik fra fuld-stack udvikling
hos BilligVVS til konsulent- og Teknisk Lead-rollen hos CGI, og i dag er jeg Technical
Solution Architect hos Digisense A/S, hvor jeg bygger bro mellem kunder, forretning og
udviklingsteams. Ved siden af læser jeg HD i Erhvervsøkonomi for at koble teknik og
forretning endnu tættere.
</p>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Fagområder</h2>
<p class="mt-4 max-w-2xl text-muted">
Jeg arbejder med <strong class="text-text">elektronisk fakturering</strong> (e-faktura / electronic
invoicing) og e-procurement. Hos CGI, der var leverandør til <strong class="text-text">Erhvervsstyrelsen
(ERST)</strong> på NemHandel, var jeg med til at udvikle ERST’s open source eDelivery-løsning bygget på
den open source-baserede access point <strong class="text-text">Oxalis</strong> (Java). I dag er jeg
Technical Solution Architect hos Digisense A/S og arbejder med løsningsarkitektur på området:
<strong class="text-text">Peppol</strong> (BIS, Access Point og eDelivery/AS4),
<strong class="text-text">NemHandel</strong>, <strong class="text-text">OIOUBL/UBL</strong> og den
europæiske e-faktura-standard EN 16931.
</p>
<div class="mt-4 flex flex-wrap gap-2">
{['Peppol', 'Peppol Access Point', 'Oxalis', 'NemHandel', 'e-faktura', 'Electronic invoicing', 'OIOUBL / UBL', 'e-Delivery (AS4)', 'EN 16931', 'e-procurement'].map((k) => (
<span class="rounded-full border border-border bg-surface/60 px-3 py-1 text-sm">{k}</span>
))}
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Erhvervserfaring</h2>
<div class="mt-4 space-y-4">
{erhverv.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.sted}</span></h3>
<div class="mt-3 space-y-3">
{e.roller.map((r) => (
<div>
<div class="flex flex-wrap items-baseline justify-between gap-2">
<span class="font-medium text-text">{r.titel}</span>
<span class="text-xs text-muted">{r.naar}</span>
</div>
<ul class="mt-1 list-disc pl-5 text-sm text-muted">
{r.detaljer.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">Uddannelse</h2>
<div class="mt-4 space-y-4">
{uddannelse.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.hvad}</h3><span class="text-xs text-muted">{u.naar}</span>
</div>
<p class="text-sm text-muted">{u.hvor}</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">Licenser</h2>
<div class="mt-4 space-y-4">
{licenser.map((l) => (
<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">{l.hvad}</h3><span class="text-xs text-muted">{l.naar}</span>
</div>
<p class="text-sm text-muted">{l.hvor}</p>
{l.note && <p class="mt-1 text-sm text-muted">{l.note}</p>}
</div>
))}
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Publikationer</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 &amp; Larsen.
<em>EPTCS</em>, vol. 390 (2023), s. 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">Frivilligt arbejde</h2>
<div class="mt-4 space-y-4">
{frivilligt.map((f) => (
<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">{f.hvad}</h3><span class="text-xs text-muted">{f.naar}</span>
</div>
<p class="mt-1 text-sm text-muted">{f.note}</p>
</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">Primære kompetencer</h2>
<div class="mt-4 flex flex-wrap gap-2">
{primaere.map((k) => <span class="rounded-full border border-border bg-surface/60 px-3 py-1 text-sm">{k}</span>)}
</div>
<h2 class="mt-8 text-sm font-semibold uppercase tracking-widest text-accent">Sekundære</h2>
<div class="mt-4 flex flex-wrap gap-2">
{sekundaere.map((k) => <span class="rounded-full border border-border bg-surface/40 px-3 py-1 text-sm text-muted">{k}</span>)}
</div>
</div>
<div>
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Sprog</h2>
<ul class="mt-4 space-y-2 text-sm">
{sprog.map((s) => <li class="rounded-xl border border-border bg-surface/60 px-3 py-2">{s}</li>)}
</ul>
<h2 class="mt-8 text-sm font-semibold uppercase tracking-widest text-accent">Interesser</h2>
<p class="mt-4 text-sm text-muted">
Selvhosting og drift: jeg har gennem mange år bygget og vedligeholdt et homelab med
<a class="text-accent hover:underline" href="https://www.proxmox.com/" target="_blank" rel="noopener"> Proxmox</a>,
bag SSO via <a class="text-accent hover:underline" href="https://goauthentik.io/" target="_blank" rel="noopener">Authentik</a>.
Det har ført til bidrag i open source-projekter som Qutebrowser og Stregsystemet (IT-studerendes betalingssystem på AAU).
</p>
<p class="mt-3 text-sm text-muted">
Jeg er desuden licenseret radioamatør med <strong class="text-text">B-licens</strong> og kaldesignalet
<strong class="text-text">OZ0AGW</strong>.. samme fascination af protokoller, rækkevidde og
infrastruktur som til daglig, bare uden kabler.
</p>
</div>
</section>
<section class="mt-10">
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Natur og jagt</h2>
<div class="mt-4 rounded-2xl border border-border bg-surface/60 p-5">
<p class="text-muted">
Jeg har jagttegn, men jagten er mest anledningen. Det jeg tager ud efter, er at stå op
længe før resten af landet og træde ud i den stilhed, der kun findes tidligt om morgenen,
og så se solen komme op og disen lette hen over markerne.
</p>
<p class="mt-3 text-muted">
Planter, fugle, årstidernes skiften: jeg kan lide at kunne sætte navn på det jeg ser, og
at lægge mærke til hvad der har ændret sig siden sidst. Ender turen uden at der bliver
nedlagt noget, har den været lige så meget værd.
</p>
</div>
</section>
</Base>