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
219 lines
12 KiB
Plaintext
219 lines
12 KiB
Plaintext
---
|
||
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 & 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>
|