Skip to content

Commit a2b1f14

Browse files
Mazizovaclaude
andauthored
DuckDB × MySQL Day: add Henrik Ingo and Dominic Preuss, with People profiles (#118)
Speakers without a photo get initials tiles, slots without a time say so, the speaker grid goes to three columns for more than four speakers, and speaker names in the schedule link to their People profiles. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
1 parent 3aab3c1 commit a2b1f14

5 files changed

Lines changed: 90 additions & 8 deletions

File tree

‎assets/scss/_event-landing.scss‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,3 +429,42 @@
429429
height: 100%;
430430
}
431431
}
432+
433+
// Speakers without a photo yet, and slots without a time yet.
434+
.dmd-landing .dmd-portrait-initials {
435+
position: absolute;
436+
inset: 0;
437+
display: flex;
438+
align-items: center;
439+
justify-content: center;
440+
font-size: 72px;
441+
font-weight: 700;
442+
letter-spacing: -2px;
443+
color: #00c8ff;
444+
background: linear-gradient(135deg, #1b2540, #12182b);
445+
}
446+
447+
.dmd-landing .dmd-talk-person .dmd-avatar-initials {
448+
width: 30px;
449+
height: 30px;
450+
border-radius: 50%;
451+
display: inline-flex;
452+
align-items: center;
453+
justify-content: center;
454+
font-size: 10px;
455+
color: #00c8ff;
456+
background: #1b2540;
457+
}
458+
459+
.dmd-landing .dmd-talk-person .dmd-talk-person-link:hover { text-decoration: underline; }
460+
.dmd-landing .dmd-talk-num .dmd-time-tba { font-size: 13px; line-height: 1.4; color: #8e9db6; }
461+
.dmd-landing .dmd-person:nth-child(5) .dmd-person-text { border-color: #00c8ff; }
462+
.dmd-landing .dmd-person:nth-child(6) .dmd-person-text { border-color: #a78bfa; }
463+
464+
@media (min-width: 1001px) {
465+
.dmd-landing .dmd-speaker-grid.dmd-speaker-grid--many { grid-template-columns: repeat(3, 1fr); }
466+
}
467+
468+
[data-theme="light"] .dmd-landing .dmd-portrait-initials { color: #0272a5; background: linear-gradient(135deg, #e3eaf6, #f1f5fb); }
469+
[data-theme="light"] .dmd-landing .dmd-talk-person .dmd-avatar-initials { color: #0272a5; background: #e3eaf6; }
470+
[data-theme="light"] .dmd-landing .dmd-talk-num .dmd-time-tba { color: #64748b; }

‎content/events/duckdb-mysql-day/index.md‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,23 @@ about:
2525
- {title: "Columnar engines on MySQL", text: "How DuckDB-based engines work alongside InnoDB, and where they fit."}
2626
- {title: "Analytical replication", text: "Streaming MySQL changes into DuckDB and Parquet files for analysis."}
2727
- {title: "The road to HTAP", text: "Twenty years of analytics on MySQL — and what DuckDB changes now."}
28-
speakers_intro: "Practitioners from Percona, Alibaba, MariaDB and dbtrail — more speakers to be announced."
28+
speakers_intro: "Practitioners from Oracle, Percona, Alibaba, MariaDB, VillageSQL and dbtrail — more speakers to be announced."
2929
speakers:
30-
- {name: "Vadim Tkachenko", company: "Percona", role: "Co-founder", photo: "vadim-tkachenko.jpg"}
31-
- {name: "Zongzhi Chen", company: "Alibaba", role: "Senior Technical Expert", photo: "zongzhi-chen.jpg"}
32-
- {name: "Daniel Guzmán Burgos", company: "dbtrail", role: "Creator", photo: "daniel-guzman-burgos.jpg"}
30+
- {name: "Vadim Tkachenko", company: "Percona", role: "Co-founder", photo: "vadim-tkachenko.jpg", profile: "/resources/member-directory/people/vadim-tkachenko/"}
31+
- {name: "Zongzhi Chen", company: "Alibaba", role: "Senior Technical Expert", photo: "zongzhi-chen.jpg", profile: "/resources/member-directory/people/zongzhi-chen/"}
32+
- {name: "Daniel Guzmán Burgos", company: "dbtrail", role: "Creator", photo: "daniel-guzman-burgos.jpg", profile: "/resources/member-directory/people/daniel-guzman-burgos/"}
3333
- {name: "Roman Nozdrin", company: "MariaDB", role: "Architect / Staff Developer", photo: "roman-nozdrin.webp"}
34+
- {name: "Henrik Ingo", company: "Oracle", role: "MySQL Community Architect", profile: "/resources/member-directory/people/henrik-ingo/"}
35+
- {name: "Dominic Preuss", company: "VillageSQL", role: "Founder & CEO", profile: "/resources/member-directory/people/dominic-preuss/"}
3436
schedule_label: "Approximate schedule · EST / CET"
3537
schedule:
3638
- {est: "10:00–10:45", cet: "16:00–16:45", track: "Opening talk", title: "Twenty Years of Bolting Analytics onto MySQL: Will DuckDB Finally Make It HTAP?", speaker: "Vadim Tkachenko"}
3739
- {est: "10:45–11:30", cet: "16:45–17:30", track: "Columnar engines", title: "When MySQL meets DuckDB: Best practices for columnar engines on MySQL", speaker: "Zongzhi Chen"}
3840
- {est: "11:30–12:15", cet: "17:30–18:15", track: "Analytical replication", title: "MySQL analytical replication with DuckDB and Parquet files", speaker: "Daniel Guzmán Burgos"}
3941
- {est: "12:15–13:00", cet: "18:15–19:00", track: "Storage engines", title: "When the Sea Lion Learns to Quack: DuckDB as a MariaDB Storage Engine", speaker: "Roman Nozdrin"}
42+
# Slots below have no confirmed time yet: leave est/cet out and the card shows "Time to be announced".
43+
- {track: "More to come", title: "Talk title to be announced", speaker: "Henrik Ingo"}
44+
- {track: "Extensions", title: "Implementing DuckDB inside MySQL as a VillageSQL extension", speaker: "Dominic Preuss"}
4045
schedule_note: "Tentative timings; subject to change. Register to get the final schedule as soon as it’s published."
4146
topic_tags: ["DuckDB", "MySQL", "HTAP", "Parquet", "Columnar engines", "Open source analytics"]
4247
register:
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
title: "Dominic Preuss"
3+
url: "/resources/member-directory/people/dominic-preuss/"
4+
description: "Founder and CEO of VillageSQL, the open source, MySQL-compatible innovation platform."
5+
role: "Founder & CEO, VillageSQL"
6+
company: "VillageSQL"
7+
company_url: "/resources/software/villagesql/"
8+
project: "VillageSQL"
9+
project_url: "/resources/software/villagesql/"
10+
subcategories:
11+
- People
12+
roles:
13+
- Speaker
14+
---
15+
16+
Dominic Preuss is the founder of [VillageSQL](/resources/software/villagesql/), where he is Village Steward — the CEO. VillageSQL is an open source, drop-in replacement tracking fork of MySQL that adds an extension framework for custom data types and functions. According to the company's team page, Dominic spent the last decade building databases for developers at Google and Amazon.
17+
18+
At [DuckDB × MySQL Day](/events/duckdb-mysql-day/) he presents *Implementing DuckDB inside MySQL as a VillageSQL extension*.
19+
20+
**Connect:** [VillageSQL team](https://www.villagesql.com/about)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: "Henrik Ingo"
3+
url: "/resources/member-directory/people/henrik-ingo/"
4+
description: "MySQL Community Architect at Oracle, a long-time open source database engineer, and the author of Open Life."
5+
role: "MySQL Community Architect, Oracle"
6+
company: "Oracle"
7+
subcategories:
8+
- People
9+
roles:
10+
- Author
11+
- Speaker
12+
---
13+
14+
Henrik Ingo is MySQL Community Architect at Oracle. He has been active in the open source database community for about 20 years: he has worked at MySQL, MariaDB, Galera Cluster, MongoDB, and DataStax, and recently returned to the Oracle MySQL team. At Percona Live 2026 in Amsterdam he gave an update on moving MySQL development, planning, and governance into the open — including that developers outside Oracle can now become committers, and a roadmap agreed in two contributor summits — and he helps run the MySQL contributor summits.
15+
16+
He is also the author of *Open Life: The Philosophy of Open Source*. He is a speaker at [DuckDB × MySQL Day](/events/duckdb-mysql-day/).
17+
18+
**Connect:** [LinkedIn](https://www.linkedin.com/in/heingo/) · [openlife.cc](https://www.openlife.cc/)

‎layouts/events/duckdb-mysql-day.html‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ <h1>DuckDB <span class="dmd-cross">×</span><br>MySQL <span class="dmd-gradient"
5252
{{ $speakers := .Params.speakers }}
5353
<section id="speakers" class="dmd-speakers-section"><div class="dmd-wrap dmd-section">
5454
<div class="dmd-section-heading"><div><p class="dmd-eyebrow">Speakers</p><h2>Meet the Speakers</h2></div><p>{{ .Params.speakers_intro }}</p></div>
55-
<div class="dmd-speaker-grid">
55+
<div class="dmd-speaker-grid{{ if gt (len $speakers) 4 }} dmd-speaker-grid--many{{ end }}">
5656
{{ range $i, $s := $speakers }}
5757
{{ $photo := $page.Resources.Get $s.photo }}
5858
<a class="dmd-person" href="#talk-{{ $i }}" aria-label="View talk by {{ $s.name }}">
59-
<div class="dmd-portrait">{{ with $photo }}{{ $img := .Fill "420x420 jpg q85" }}<img src="{{ $img.RelPermalink }}" alt="{{ $s.name }}" width="420" height="420" loading="lazy">{{ end }}<span class="dmd-photo-index">{{ printf "%02d" (add $i 1) }} / SPEAKER</span><span class="dmd-person-arrow">↗</span></div>
59+
<div class="dmd-portrait">{{ with $photo }}{{ $img := .Fill "420x420 jpg q85" }}<img src="{{ $img.RelPermalink }}" alt="{{ $s.name }}" width="420" height="420" loading="lazy">{{ else }}{{ $ini := "" }}{{ range split $s.name " " }}{{ $ini = printf "%s%s" $ini (substr . 0 1) }}{{ end }}<span class="dmd-portrait-initials" aria-hidden="true">{{ $ini }}</span>{{ end }}<span class="dmd-photo-index">{{ printf "%02d" (add $i 1) }} / SPEAKER</span><span class="dmd-person-arrow">↗</span></div>
6060
<div class="dmd-person-text"><p class="dmd-company">{{ $s.company }}</p><h3>{{ $s.name }}</h3><p class="dmd-role">{{ $s.role }}</p></div>
6161
</a>
6262
{{ end }}
@@ -72,9 +72,9 @@ <h1>DuckDB <span class="dmd-cross">×</span><br>MySQL <span class="dmd-gradient"
7272
{{ $sp := dict }}
7373
{{ range $speakers }}{{ if eq .name $t.speaker }}{{ $sp = . }}{{ end }}{{ end }}
7474
<article class="dmd-talk" id="talk-{{ $i }}">
75-
<div class="dmd-talk-num"><span class="dmd-time-est">{{ $t.est }}<small>EST</small></span><span class="dmd-time-cet">{{ $t.cet }}<small>CET</small></span></div>
75+
<div class="dmd-talk-num">{{ if $t.est }}<span class="dmd-time-est">{{ $t.est }}<small>EST</small></span><span class="dmd-time-cet">{{ $t.cet }}<small>CET</small></span>{{ else }}<span class="dmd-time-est dmd-time-tba">Time to be announced</span>{{ end }}</div>
7676
<div class="dmd-talk-content"><span class="dmd-eyebrow">{{ $t.track }}</span><h3>{{ $t.title }}</h3>
77-
<div class="dmd-talk-person">{{ with $sp.photo }}{{ with $page.Resources.Get . }}{{ $av := .Fill "96x96 jpg q85" }}<img src="{{ $av.RelPermalink }}" alt="" width="48" height="48" loading="lazy">{{ end }}{{ end }}<span>{{ $t.speaker }}<small>{{ $sp.company }}</small></span></div>
77+
<div class="dmd-talk-person">{{ $avatar := "" }}{{ with $sp.photo }}{{ $avatar = $page.Resources.Get . }}{{ end }}{{ with $avatar }}{{ $av := .Fill "96x96 jpg q85" }}<img src="{{ $av.RelPermalink }}" alt="" width="48" height="48" loading="lazy">{{ else }}{{ $ini := "" }}{{ range split $t.speaker " " }}{{ $ini = printf "%s%s" $ini (substr . 0 1) }}{{ end }}<b class="dmd-avatar-initials" aria-hidden="true">{{ $ini }}</b>{{ end }}<span>{{ if $sp.profile }}<a href="{{ $sp.profile }}" class="dmd-talk-person-link">{{ $t.speaker }}</a>{{ else }}{{ $t.speaker }}{{ end }}<small>{{ $sp.company }}</small></span></div>
7878
</div>
7979
<span class="dmd-talk-arrow" aria-hidden="true">↗</span>
8080
</article>

0 commit comments

Comments
 (0)