--- import PageLayout from "~/layouts/PageLayout.astro"; import _ from "lodash"; import { getSlugFromFile } from "~/utils.ts"; import ListingPage from "~/components/ListingPage.astro"; const talks = await Astro.glob("../../talks/*.md"); const talkCount = _(talks) .flatMap((talk) => talk.frontmatter.events) .size(); const sortedTalks = talks .map((talk) => { const slug = `/talks/${getSlugFromFile(talk.file)}`; return { slug, item: talk }; }) .sort((b, a) => { const events = [ a.item.frontmatter.events[a.item.frontmatter.events.length - 1], b.item.frontmatter.events[b.item.frontmatter.events.length - 1], ]; return ( new Date(events[0].date).valueOf() - new Date(events[1].date).valueOf() ); }); ---

Starting with my first talk in September 2012, I have given {talkCount} presentations and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.