quiet redesign yo
This commit is contained in:
+38
-24
@@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="description" content="GDPR Notice | Veit Heller—Technologist at Large">
|
<meta name="description" content="GDPR Notice | Veit Heller—Technologist at Large">
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
src: url('charter_regular-webfont.woff') format('woff');
|
src: url('charter_regular-webfont.woff') format('woff');
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
html {
|
html {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: #fafaf3;
|
background-color: #fafaf7;
|
||||||
}
|
}
|
||||||
.main {
|
.main {
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
@@ -37,16 +38,31 @@
|
|||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
.main h2 {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
.main a {
|
.main a {
|
||||||
color: #000;
|
color: #000;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-bottom: 2px solid #d6dde3;
|
border-bottom: 2px solid #d6dde3;
|
||||||
}
|
}
|
||||||
|
.site-link {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #444;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
.site-link a {
|
||||||
|
border-bottom: none;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<title>GDPR Notice | Veit Heller—Technologist at Large</title>
|
<title>GDPR Notice | Veit Heller—Technologist at Large</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
|
<p class="site-link"><a href="/">← Veit Heller</a></p>
|
||||||
<h1>GDPR Notice</h1>
|
<h1>GDPR Notice</h1>
|
||||||
<p>
|
<p>
|
||||||
This is the personal website of Veit Heller. I will provide a notice that
|
This is the personal website of Veit Heller. I will provide a notice that
|
||||||
@@ -57,25 +73,25 @@
|
|||||||
It collects the requesting party’s IP address and user agent from the
|
It collects the requesting party’s IP address and user agent from the
|
||||||
HTTP request, but does not store them.
|
HTTP request, but does not store them.
|
||||||
</p>
|
</p>
|
||||||
<h2 id="analytics">Web analytics (Plausible)</h2>
|
<h2 id="analytics">Web analytics (Plausible)</h2>
|
||||||
<p>
|
<p>
|
||||||
This site uses <a href="https://plausible.io">Plausible Analytics</a>. Plausible works without cookies
|
This site uses <a href="https://plausible.io">Plausible Analytics</a>. Plausible works without cookies
|
||||||
and without cross-site tracking. No personal data is stored.
|
and without cross-site tracking. No personal data is stored.
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Per pageview captured:</strong> page URL (without query params except common campaign tags),
|
<li><strong>Per pageview captured:</strong> page URL (without query params except common campaign tags),
|
||||||
referrer, and derived browser/OS/device type; city-level location is inferred from the IP.</li>
|
referrer, and derived browser/OS/device type; city-level location is inferred from the IP.</li>
|
||||||
<li><strong>No raw identifiers stored:</strong> Plausible does not store IP addresses or full user-agents.
|
<li><strong>No raw identifiers stored:</strong> Plausible does not store IP addresses or full user-agents.
|
||||||
For daily unique counts it uses a hash of a rotating salt + domain + IP + UA; the salt is deleted
|
For daily unique counts it uses a hash of a rotating salt + domain + IP + UA; the salt is deleted
|
||||||
every 24 hours.</li>
|
every 24 hours.</li>
|
||||||
<li><strong>Legal basis:</strong> Art. 6(1)(f) GDPR (legitimate interest) in lightweight, privacy-preserving
|
<li><strong>Legal basis:</strong> Art. 6(1)(f) GDPR (legitimate interest) in lightweight, privacy-preserving
|
||||||
reach measurement and site improvement.</li>
|
reach measurement and site improvement.</li>
|
||||||
<li><strong>Processor & hosting:</strong> Plausible Insights OÜ (Estonia, EU). Data are processed and stored
|
<li><strong>Processor & hosting:</strong> Plausible Insights OÜ (Estonia, EU). Data are processed and stored
|
||||||
in the EU on servers in Germany (Hetzner). No transfers outside the EU.</li>
|
in the EU on servers in Germany (Hetzner). No transfers outside the EU.</li>
|
||||||
<li><strong>Retention:</strong> Only aggregated statistics are kept for as long as the site is active.
|
<li><strong>Retention:</strong> Only aggregated statistics are kept for as long as the site is active.
|
||||||
You can contact me if you have questions regarding this processing.</li>
|
You can contact me if you have questions regarding this processing.</li>
|
||||||
<li><strong>Public stats:</strong> For transparency, I made the statistics publicly available <a href="https://plausible.io/veitheller.de">here</a>.</li>
|
<li><strong>Public stats:</strong> For transparency, I made the statistics publicly available <a href="https://plausible.io/veitheller.de">here</a>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>For any questions or concerns contact:<br/>
|
<p>For any questions or concerns contact:<br/>
|
||||||
Veit Heller<br/>
|
Veit Heller<br/>
|
||||||
Moltkestr. 5<br/>
|
Moltkestr. 5<br/>
|
||||||
@@ -83,9 +99,7 @@
|
|||||||
Germany
|
Germany
|
||||||
</p>
|
</p>
|
||||||
<p>Don't know what this is? This is a necessity dictated by European law.</p>
|
<p>Don't know what this is? This is a necessity dictated by European law.</p>
|
||||||
<hr/>
|
<p>See also: <a href="./imprint.html">Imprint</a></p>
|
||||||
<a href="mailto:veit@veitheller.de">Shoot me an e-mail</a><br/>
|
|
||||||
<a href="./">Head back home</a>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+12
-4
@@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="description" content="Imprint | Veit Heller—Technologist at Large">
|
<meta name="description" content="Imprint | Veit Heller—Technologist at Large">
|
||||||
@@ -43,11 +43,21 @@
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-bottom: 2px solid #d6dde3;
|
border-bottom: 2px solid #d6dde3;
|
||||||
}
|
}
|
||||||
|
.site-link {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #444;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
.site-link a {
|
||||||
|
border-bottom: none;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<title>Imprint | Veit Heller—Technologist at Large</title>
|
<title>Imprint | Veit Heller—Technologist at Large</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
|
<p class="site-link"><a href="/">← Veit Heller</a></p>
|
||||||
<h1>Imprint</h1>
|
<h1>Imprint</h1>
|
||||||
<p>Veit Heller<br/>
|
<p>Veit Heller<br/>
|
||||||
Moltkestr. 5<br/>
|
Moltkestr. 5<br/>
|
||||||
@@ -55,9 +65,7 @@
|
|||||||
Germany
|
Germany
|
||||||
</p>
|
</p>
|
||||||
<p>Don't know what this is? This is a necessity dictated by German law.</p>
|
<p>Don't know what this is? This is a necessity dictated by German law.</p>
|
||||||
<hr/>
|
<p>See also: <a href="./gdpr_notice.html">GDPR Notice</a></p>
|
||||||
<a href="mailto:veit@veitheller.de">Shoot me an e-mail</a><br/>
|
|
||||||
<a href="./">Head back home</a>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+1
-4
@@ -135,9 +135,6 @@
|
|||||||
.broken-up {
|
.broken-up {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.broken-up li {
|
|
||||||
list-style: circle;
|
|
||||||
}
|
|
||||||
.main h1 {
|
.main h1 {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
@@ -291,7 +288,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Community events: travel-only (free if remote)</li>
|
<li>Community events: travel-only (free if remote)</li>
|
||||||
<li>Corporate talks (45–60 min): 1,900€–2,400€</li>
|
<li>Corporate talks (45–60 min): 1,900€–2,400€</li>
|
||||||
<li>Corporate talks (75–90 min): 2,400€-2,800€</li>
|
<li>Corporate talks (75–90 min): 2,400€–2,800€</li>
|
||||||
<li>Half-day workshop (2–4h): 2,500€–3,000€</li>
|
<li>Half-day workshop (2–4h): 2,500€–3,000€</li>
|
||||||
<li>Full-day workshop (6–8h): 4,200€–4,800€</li>
|
<li>Full-day workshop (6–8h): 4,200€–4,800€</li>
|
||||||
<li>Prep and post is included</li>
|
<li>Prep and post is included</li>
|
||||||
|
|||||||
+72
-17
@@ -35,7 +35,6 @@
|
|||||||
font-family: 'charterregular', Georgia, serif;
|
font-family: 'charterregular', Georgia, serif;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: #fafaf7;
|
background-color: #fafaf7;
|
||||||
}
|
}
|
||||||
@@ -76,7 +75,7 @@
|
|||||||
}
|
}
|
||||||
.main .rule {
|
.main .rule {
|
||||||
border-top: 1px solid #aaa;
|
border-top: 1px solid #aaa;
|
||||||
width: calc(100%-6em);
|
width: calc(100% - 6em);
|
||||||
margin-left: 3em;
|
margin-left: 3em;
|
||||||
margin-right: 3em;
|
margin-right: 3em;
|
||||||
height: 0px;
|
height: 0px;
|
||||||
@@ -118,6 +117,25 @@
|
|||||||
color: #000;
|
color: #000;
|
||||||
border-bottom-color: #000;
|
border-bottom-color: #000;
|
||||||
}
|
}
|
||||||
|
.site-link {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #444;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
.site-link a {
|
||||||
|
border-bottom: none;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.legal {
|
||||||
|
margin-top: 2.5em;
|
||||||
|
padding-top: 1em;
|
||||||
|
border-top: 1px solid #d6dde3;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.legal a {
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
@media(max-width: 700px) {
|
@media(max-width: 700px) {
|
||||||
.main h1 {
|
.main h1 {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
@@ -127,6 +145,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="main">
|
<main class="main">
|
||||||
|
<p class="site-link"><a href="/">← Veit Heller</a></p>
|
||||||
<h1>Workshops, Talks, Publications</h1>
|
<h1>Workshops, Talks, Publications</h1>
|
||||||
<p class="description">I speak and write about systems of all shapes and
|
<p class="description">I speak and write about systems of all shapes and
|
||||||
sizes.</p>
|
sizes.</p>
|
||||||
@@ -135,21 +154,21 @@
|
|||||||
<input type="radio" name="tab" id="tab-talks" class="tab-input">
|
<input type="radio" name="tab" id="tab-talks" class="tab-input">
|
||||||
<input type="radio" name="tab" id="tab-publications" class="tab-input">
|
<input type="radio" name="tab" id="tab-publications" class="tab-input">
|
||||||
|
|
||||||
<nav class="tabs">
|
<nav class="tabs" role="tablist">
|
||||||
<label for="tab-bookable">Bookable</label>
|
<label for="tab-bookable" id="label-bookable" role="tab" aria-controls="bookable" tabindex="0">Bookable</label>
|
||||||
<label for="tab-talks">Talks</label>
|
<label for="tab-talks" id="label-talks" role="tab" aria-controls="talks" tabindex="0">Talks</label>
|
||||||
<label for="tab-publications">Publications</label>
|
<label for="tab-publications" id="label-publications" role="tab" aria-controls="publications" tabindex="0">Publications</label>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section id="bookable" class="panel">
|
<section id="bookable" class="panel" role="tabpanel" aria-labelledby="label-bookable">
|
||||||
|
|
||||||
<h3>Practical threat modelling for engineering teams</h3>
|
<h3>Practical threat modelling for engineering teams</h3>
|
||||||
<p>Lightweight, repeatable threat modelling you can actually run in sprint cadence. We cut jargon, pick a fit-for-purpose method, and get to work quickly. <a href="https://blog.veitheller.de/Threat_Modeling_For_the_Rest_of_Us.html">Read about it here.</a></p>
|
<p>Lightweight, repeatable threat modelling you can actually run in sprint cadence. We cut jargon, pick a fit-for-purpose method, and get to work quickly. <a href="https://blog.veitheller.de/Threat_Modeling_For_the_Rest_of_Us.html">Read about it here.</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Takeaways:</strong> initial model (only for workshops), playbook, templates, 30-day plan to make it stick.</li>
|
<li><strong>Takeaways:</strong> initial model (only for workshops), playbook, templates, 30-day plan to make it stick.</li>
|
||||||
<li><strong>Formats:</strong> 45–90min talk, ~3h half-day (guided exercise), 6–8h full-day (hands-on)</li>
|
<li><strong>Formats:</strong> 45–90min talk, ~3h half-day, 6–8h full-day (hands-on)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><a href="mailto:veit@veitheller.de?subject=threat modelling workshop inquiry">Book this workshop</a></p>
|
<p><a href="mailto:veit@veitheller.de?subject=Threat modelling workshop inquiry">Book this workshop</a></p>
|
||||||
|
|
||||||
<div class="rule"></div>
|
<div class="rule"></div>
|
||||||
|
|
||||||
@@ -159,7 +178,7 @@
|
|||||||
<li><strong>Takeaways:</strong> control set, CI/CD hooks for evidence (workshop only), audit-ready checklists.</li>
|
<li><strong>Takeaways:</strong> control set, CI/CD hooks for evidence (workshop only), audit-ready checklists.</li>
|
||||||
<li><strong>Formats:</strong> 45–90min talk, ~3h half-day, 6–8h full-day (hands-on)</li>
|
<li><strong>Formats:</strong> 45–90min talk, ~3h half-day, 6–8h full-day (hands-on)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><a href="mailto:veit@veitheller.de?subject=isms and ssdlc workshop inquiry">Book this workshop</a></p>
|
<p><a href="mailto:veit@veitheller.de?subject=ISMS and SSDLC workshop inquiry">Book this workshop</a></p>
|
||||||
|
|
||||||
<div class="rule"></div>
|
<div class="rule"></div>
|
||||||
|
|
||||||
@@ -167,9 +186,9 @@
|
|||||||
<p>What VCs, acquirers, and enterprise buyers actually check, and how to be ready to answer. Architecture narrative, risk posture, and processes that actually give you something in return. <a href="https://blog.veitheller.de/What_good_looks_like_in_a_data_room.html">Read about it here.</a></p>
|
<p>What VCs, acquirers, and enterprise buyers actually check, and how to be ready to answer. Architecture narrative, risk posture, and processes that actually give you something in return. <a href="https://blog.veitheller.de/What_good_looks_like_in_a_data_room.html">Read about it here.</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Takeaways:</strong> a DD checklist, a clean architecture one-pager, a 30-day prep plan including process refinements (workshop only).</li>
|
<li><strong>Takeaways:</strong> a DD checklist, a clean architecture one-pager, a 30-day prep plan including process refinements (workshop only).</li>
|
||||||
<li><strong>Formats:</strong> 45–90min talk, ~3h workshop, 6-8h full-day (hands on)</li>
|
<li><strong>Formats:</strong> 45–90min talk, ~3h half-day, 6–8h full-day (hands-on)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><a href="mailto:veit@veitheller.de?subject=funding and buyer readiness workshop inquiry">Book this workshop</a></p>
|
<p><a href="mailto:veit@veitheller.de?subject=Funding and buyer readiness workshop inquiry">Book this workshop</a></p>
|
||||||
|
|
||||||
<div class="rule"></div>
|
<div class="rule"></div>
|
||||||
|
|
||||||
@@ -177,17 +196,17 @@
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="talks" class="panel">
|
<section id="talks" class="panel" role="tabpanel" aria-labelledby="label-talks">
|
||||||
<article>
|
<article>
|
||||||
<h3><i>Upcoming:</i> Type Systems You Might Not Know (But Will Love)</h3>
|
<h3><i>Upcoming:</i> Type Systems You Might Not Know (But Will Love)</h3>
|
||||||
<p><em>WeAreDevelopers World Congress Europe, 2026</em><br>
|
<p><em>WeAreDevelopers World Congress Europe, 2026</em><br>
|
||||||
<p>A tour through beautiful but lesser-known type systems.</p>
|
A tour through beautiful but lesser-known type systems.</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3>Von der Cloud ins Rack – Wie Netzautomatisierung souveräne RZ-Umgebungen ermöglicht</h3>
|
<h3>Von der Cloud ins Rack – Wie Netzautomatisierung souveräne RZ-Umgebungen ermöglicht</h3>
|
||||||
<p><em>Rack & Stack 2026</em><br>
|
<p><em>Rack & Stack 2026</em><br>
|
||||||
<p>A German talk on high fidelity network automation to drive the adoption of sovereign data infrastructure.</p>
|
A German talk on high fidelity network automation to drive the adoption of sovereign data infrastructure.</p>
|
||||||
<p><i>Recording pending</i></p>
|
<p><i>Recording pending</i></p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -230,7 +249,7 @@
|
|||||||
<h3>Brainfuck, Carp, Macros, and Futamura Projections</h3>
|
<h3>Brainfuck, Carp, Macros, and Futamura Projections</h3>
|
||||||
<p><em>LambdaLounge, 2021</em><br>
|
<p><em>LambdaLounge, 2021</em><br>
|
||||||
A technical presentation connecting minimal languages, metaprogramming, and interpreter folding techniques.</p>
|
A technical presentation connecting minimal languages, metaprogramming, and interpreter folding techniques.</p>
|
||||||
<p><a href="https://www.youtube.com/watch?v=G-0Vic9fQU0">Watch →</a></p>
|
<p><a href="https://www.youtube.com/watch?v=wwwa5TG70UA">Watch →</a></p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
@@ -269,7 +288,7 @@
|
|||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="publications" class="panel">
|
<section id="publications" class="panel" role="tabpanel" aria-labelledby="label-publications">
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3>Efficient Module-Level Dynamic Analysis for Dynamic Languages with Module Recontextualization</h3>
|
<h3>Efficient Module-Level Dynamic Analysis for Dynamic Languages with Module Recontextualization</h3>
|
||||||
@@ -285,6 +304,42 @@
|
|||||||
<p><a href="https://sigbovik.org/2019/proceedings.pdf">Read →</a></p>
|
<p><a href="https://sigbovik.org/2019/proceedings.pdf">Read →</a></p>
|
||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
|
<footer class="legal">
|
||||||
|
<a href="./imprint.html">Imprint</a>
|
||||||
|
<a href="./gdpr_notice.html">GDPR Notice</a>
|
||||||
|
</footer>
|
||||||
</main>
|
</main>
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
var tabs = ['bookable', 'talks', 'publications'];
|
||||||
|
var labels = document.querySelectorAll('nav.tabs label');
|
||||||
|
function syncAria(active) {
|
||||||
|
labels.forEach(function(l) {
|
||||||
|
l.setAttribute('aria-selected', l.getAttribute('for') === 'tab-' + active ? 'true' : 'false');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var hash = location.hash.substring(1);
|
||||||
|
if (tabs.indexOf(hash) !== -1) {
|
||||||
|
var input = document.getElementById('tab-' + hash);
|
||||||
|
if (input) input.checked = true;
|
||||||
|
syncAria(hash);
|
||||||
|
} else {
|
||||||
|
syncAria('bookable');
|
||||||
|
}
|
||||||
|
labels.forEach(function(l) {
|
||||||
|
l.addEventListener('click', function() {
|
||||||
|
var name = l.getAttribute('for').replace('tab-', '');
|
||||||
|
history.replaceState(null, '', '#' + name);
|
||||||
|
syncAria(name);
|
||||||
|
});
|
||||||
|
l.addEventListener('keydown', function(e) {
|
||||||
|
if (e.key === 'Enter' || e.key === ' ') {
|
||||||
|
e.preventDefault();
|
||||||
|
l.click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user