diff --git a/Resources/App/Images/speakers/daniel-jilg.jpg b/Resources/App/Images/speakers/daniel-jilg.jpg new file mode 100644 index 00000000..9b9ba25f Binary files /dev/null and b/Resources/App/Images/speakers/daniel-jilg.jpg differ diff --git a/Resources/App/Images/speakers/eric-bariaux.png b/Resources/App/Images/speakers/eric-bariaux.png new file mode 100644 index 00000000..14ca46b2 Binary files /dev/null and b/Resources/App/Images/speakers/eric-bariaux.png differ diff --git a/Resources/App/Images/speakers/si-beaumont.png b/Resources/App/Images/speakers/si-beaumont.png new file mode 100644 index 00000000..87c43b8b Binary files /dev/null and b/Resources/App/Images/speakers/si-beaumont.png differ diff --git a/Sources/Conference/Components/Schedule.swift b/Sources/Conference/Components/Schedule.swift index a1269436..46029f30 100644 --- a/Sources/Conference/Components/Schedule.swift +++ b/Sources/Conference/Components/Schedule.swift @@ -21,7 +21,7 @@ struct Schedule: Component { } Table(header: headerRow) { TableRow { - TableCell("09:00 - 09:45").class("text-center font-weight-bold") + TableCell("09:00 - 09:30").class("text-center font-weight-bold") TableCell("Breakfast and Registration").attribute(named: "colspan", value: "2") } TableRow { @@ -59,8 +59,7 @@ struct Schedule: Component { } TableRow { TableCell("09:50 - 10:40").class("text-center font-weight-bold") - // createTalkRow(speakers: [AllSpeakers.speakers[16], AllSpeakers.speakers[17]]) - TableCell("Keynote") + createTalkRow(speakerName: "Ben Cohen") } TableRow { TableCell("10:40 - 11:30").class("text-center font-weight-bold") @@ -96,7 +95,7 @@ struct Schedule: Component { } TableRow { TableCell("16:40 - 17:15").class("text-center font-weight-bold") - createTalkRow(speakerName: "Moritz Lang") + createTalkRow(speakerName: "Daniel Jilg") } TableRow { TableCell("19:00 - 21:00").class("text-center font-weight-bold") @@ -134,11 +133,11 @@ struct Schedule: Component { } TableRow { TableCell("11:30 - 12:10").class("text-center font-weight-bold") - createTalkRow(speakerName: "ARichard Kendall Wolf") + createTalkRow(speakerName: "Simon Pilkington") } TableRow { TableCell("12:10 - 12:45").class("text-center font-weight-bold") - createTalkRow(speakerName: "ADaniel Jilg") + createTalkRow(speakers: [AllSpeakers.speakers[17], AllSpeakers.speakers[5]]) } TableRow { TableCell("12:45 - 14:00").class("text-center font-weight-bold") @@ -170,11 +169,11 @@ struct Schedule: Component { } TableRow { TableCell("16:00 - 16:15").class("text-center font-weight-bold") - createTalkRow(speakerName: "Lightning 2") + createTalkRow(speakerName: "Mikaela Caron") } TableRow { TableCell("16:15 - 16:30").class("text-center font-weight-bold") - createTalkRow(speakerName: "Lightning 3") + createTalkRow(speakerName: "Eric Bariaux") } TableRow { TableCell("16:30 - 17:10").class("text-center font-weight-bold") @@ -187,9 +186,8 @@ struct Schedule: Component { TableRow { TableCell("18:30 - 21:00").class("text-center font-weight-bold") TableCell { - Text("After Party") - // Text("After Party at ") - // Link("Hoop and Toy", url: "https://www.greeneking.co.uk/pubs/greater-london/hoop-and-toy").linkTarget(.blank) + H6("After Party").class("speakers-list-speaker-name") + Link("Hoop and Toy", url: "https://www.greeneking.co.uk/pubs/greater-london/hoop-and-toy").linkTarget(.blank) } } }.class("table table-striped table-bordered") diff --git a/Sources/Conference/Models/Speaker.swift b/Sources/Conference/Models/Speaker.swift index 6f1864a2..e3a0899c 100644 --- a/Sources/Conference/Models/Speaker.swift +++ b/Sources/Conference/Models/Speaker.swift @@ -73,11 +73,11 @@ struct AllSpeakers { static let instructors: [Speaker] = [ allSpeakers[0], allSpeakers[3], - allSpeakers[15], - allSpeakers[16], - allSpeakers[17] + allSpeakers[21], + allSpeakers[22], + allSpeakers[23] ] - static let speakers: [Speaker] = Array(allSpeakers[1...14]) + static let speakers: [Speaker] = Array(allSpeakers[1...20]) static let allSpeakers: [Speaker] = [ Speaker( name: "Daniel Steinberg", @@ -216,9 +216,9 @@ struct AllSpeakers { twitter: "http://twitter.com/tuparev", website: "https://www.tuparev.com/", bio: ComponentGroup { - Paragraph("My first real experience with computers was as a teenager when I created a simple application to control my homemade telescope on an Apple ][e. Soon after, I learned to program IBM 370 mainframes, writing FORTRAN programs to calculate FFTs for variable stars, as well as a PL/1-based accounting system. Before finishing high school, I programmed the weather station for Bulgaria’s first satellite and contributed to the development of the control software for the Bulgarian Academy of Sciences’ 2-meter telescope.") + Paragraph("My first real experience with computers was as a teenager when I created a simple application to control my homemade telescope on an Apple ][e. Soon after, I learned to program IBM 370 mainframes, writing FORTRAN programs to calculate FFTs for variable stars, as well as a PL/1-based accounting system. Before finishing high school, I programmed the weather station for Bulgaria's first satellite and contributed to the development of the control software for the Bulgarian Academy of Sciences' 2-meter telescope.") Paragraph("During my university studies in Heidelberg, Germany, and subsequent research at the European Molecular Biology Laboratory (EMBL), my work centred around protein folding and computer graphics using Silicon Graphics, SUN, DEC Alpha, Maspar, and NeXT computers. In this period, I developed the first Braille driver for NeXTStep, co-organised two scientific computing conferences, hosted the GNUStep project for two years, and contributed significantly to the MiscKit framework for NeXTStep. Additionally, I was an early adopter and contributor to the WebObjects framework (initially Objective-C-based, later Java-based).") - Paragraph("I started developing for NeXTStep around 1990. Alongside engaging extensively in open source projects, I worked on a database for storing infrared astronomical images and developed image-processing software for NMR crystallographic data. Later, I was involved in the initial implementation of Apple’s VoiceOver accessibility technology and presented frequently on Apple’s behalf to the European banking and finance sectors. I also delivered a presentation at Apple’s WWDC focused on scientific applications.") + Paragraph("I started developing for NeXTStep around 1990. Alongside engaging extensively in open source projects, I worked on a database for storing infrared astronomical images and developed image-processing software for NMR crystallographic data. Later, I was involved in the initial implementation of Apple's VoiceOver accessibility technology and presented frequently on Apple's behalf to the European banking and finance sectors. I also delivered a presentation at Apple's WWDC focused on scientific applications.") Paragraph("During the last 25 or so years, my team worked on several highly complex systems. Examples include: - An educational portal for the Ministry of Education in Lower Saxony, Germany. - A legal documentation system for the Baden-Württemberg Police Department, Germany. - The Mars Rover image archive for NASA. - A fully robotic astronomical observatory control system, deployed in observatories across the U.S., South Africa, and Europe. - The largest inter-bank document and transaction exchange system in the Netherlands (ongoing) - Observatory control, image processing, and large-scale data storage solutions for space debris monitoring stations (ongoing).") }, talkIDs: [10] @@ -228,7 +228,7 @@ struct AllSpeakers { role: "Software Engineer", company: "Deloitte LLC", website: "https://www.oliverbinns.co.uk/", - bio: "Oliver is an experienced software engineer based in London. After attaining an IET accredited master’s degree in Computer Science from the University of York, he started his career building websites in PHP and JavaScript, before pivoting into native iOS development. He has worked on highly-rated mobile apps for airlines, healthcare organisations and even government departments. Oliver was shortlisted for British Computer Society’s Engineer of the Year 2024.", + bio: "Oliver is an experienced software engineer based in London. After attaining an IET accredited master's degree in Computer Science from the University of York, he started his career building websites in PHP and JavaScript, before pivoting into native iOS development. He has worked on highly-rated mobile apps for airlines, healthcare organisations and even government departments. Oliver was shortlisted for British Computer Society's Engineer of the Year 2024.", talkIDs: [11] ), Speaker( @@ -250,6 +250,55 @@ struct AllSpeakers { talkIDs: [13] ), Speaker(name: "Eric Ernst", role: "Software Engineering Leader", company: "Apple", image: "/App/Images/speakers/eric-ernst.png", twitter: "http://twitter.com/egernst", bio: "Eric Ernst is a software engineering leader at Apple, where he focuses on virtualization, containers, container runtimes and Kubernetes.", talkIDs: [14]), + Speaker( + name: "Eric Bariaux", + role: "Software Engineer", + company: "Nelcea", + image: "/App/Images/speakers/eric-bariaux.png", + website: "https://www.ericbariaux.com/", + bio: "Eric, a Software Engineer by trade and a Geek at heart, has had numerous encounters with development in the Apple software ecosystem throughout his career, starting from his early professional days developing on a NeXTstation. Currently, Eric's focus lies in Personal Knowledge Management and wearable AI solutions on various Apple platforms.", + talkIDs: [18] + ), + Speaker( + name: "Mikaela Caron", + role: "Independent iOS Engineer", + company: "Icy App Studio LLC", + twitter: "https://twitter.com/mikaela__caron", + website: "https://mikaelacaron.com/", + bio: "Mikaela Caron is an independent iOS Engineer, and a member of the Swift Ecosystem Workgroup, who actively shares her expertise on social media, focusing on iOS development, building apps in public, and freelancing. She's continuing to work on her indie app Fruitful, which helps people connect with others at conferences, while also traveling as much as she can. She's also an organizer for iOSDevHappyHour and loves giving back to the community.", + talkIDs: [19] + ), + Speaker( + name: "Daniel Jilg", + role: "CTO", + company: "TelemetryDeck", + twitter: "https://twitter.com/breakthesystem", + website: "https://telemetrydeck.com/", + bio: "I've been an app developer, a CTO, and a Python developer, mostly at the same time. I've carried through it all a desire to learn, a love for data visualisation, and a knack to pass on what I learned. I want to learn, I want to mentor, and I want to create inclusive spaces for people to learn and mentor themselves. In my free time, I open tins for my cats (who have their own instagram account), visit various spaceports around the world, and occasionally dabble in some motor sports.", + talkIDs: [20] + ), + Speaker( + name: "Si Beaumont", + role: "Software Engineer", + company: "Apple", + image: "/App/Images/speakers/si-beaumont.png", + bio: "Si works at Apple, where he helps maintain a number of open-source Swift libraries to support server-side use cases. Before that, he's worked in a wide range of areas including virtulalization, cloud technologies, privacy-preserving machine learning, and developer tools.", + talkIDs: [7] + ), + Speaker( + name: "Simon Pilkington", + role: "Principle Engineer", + company: "Atlassian", + bio: "Simon has a substantial Software Engineering career with over a decade at Amazon - including working on a high scale Swift-based orchestrator ingesting content into Prime Video - and now as a principal engineer at Atlassian. At Amazon, Simon worked on a variety of components to support Swift-based development and also contributed to the business case for the Swift AWS SDK. Simon has also been a member of the Swift Server Work Group since 2020, helping with development of the AWS Lambda runtime and more recently discussions for a generic http server and middleware.", + talkIDs: [22] + ), + Speaker( + name: "Ben Cohen", + role: "Manager", + company: "Apple", + bio: "Ben is a manager on the Swift team at Apple.", + talkIDs: [21] + ), Speaker( name: "Frank Lefebvre", role: "Trainer", diff --git a/Sources/Conference/Models/Talk.swift b/Sources/Conference/Models/Talk.swift index ba8f246a..2bd2ad38 100644 --- a/Sources/Conference/Models/Talk.swift +++ b/Sources/Conference/Models/Talk.swift @@ -233,8 +233,8 @@ struct AllTalks { id: 16, title: "Understanding Isolation", description: ComponentGroup { - Paragraph("The foundation of Swift Concurrency’s data race safety system is isolation. It is something many people struggle to understand, but using concurrency with success requires both a solid mental model as well as a command of the language features involved.") - Paragraph("We’re going to cover all forms of static isolation, learn what dynamic isolation is and when to use it. And, we’ll also cover what Sendable is and how close a relationship it has with isolation. There will be an emphasis on approachable concurrency and how to understand and incorporate the newest language features.") + Paragraph("The foundation of Swift Concurrency's data race safety system is isolation. It is something many people struggle to understand, but using concurrency with success requires both a solid mental model as well as a command of the language features involved.") + Paragraph("We're going to cover all forms of static isolation, learn what dynamic isolation is and when to use it. And, we'll also cover what Sendable is and how close a relationship it has with isolation. There will be an emphasis on approachable concurrency and how to understand and incorporate the newest language features.") }, speakerNames: ["Matt Massicotte"], order: 16, @@ -250,6 +250,55 @@ struct AllTalks { speakerNames: ["Daniel Steinberg", "Nick Shook", "Agam Dua"], order: 17, isWorkshop: true - ) + ), + Talk( + id: 18, + title: "Cryptography 101: What Every Swift Developer Should Understand", + description: ComponentGroup { + Paragraph("In a previous role as the tech lead of a team building a digital identity solution, I often saw developers using cryptography without fully grasping it. Whether during hiring, onboarding, or working with partners, I noticed a general lack of understanding about how the pieces fit together and why they work the way they do under the hood.") + Paragraph("This talk aims to demystify the core concepts of cryptography (hashing, encryption, and digital signatures) in a way that's both accessible and directly useful. We won't dive into algorithmic details or math-heavy theory. Instead, I'll show you that having a basic understanding of those building blocks allows you to confidently approach most of the security you'll be faced with in your everyday work.") + Paragraph("This talk is aimed at any developer with a basic understanding of Swift. No prior knowledge of security or cryptography is required.") + Paragraph("Attendees will gain a practical understanding of core cryptographic concepts and how they apply to everyday development tasks, helping them build more secure, privacy-conscious apps.") + }, + speakerNames: ["Eric Bariaux"], + order: 18 + ), + Talk( + id: 19, + title: "Server-Side Swift: Surviving or Thriving?", + description: ComponentGroup { + Paragraph("A common feature in many apps is having a profile picture. When adding this feature on the backend, we have to upload a photo, save the photo, and download the photo. This is pretty straight forward, but why did it take longer than expected?") + Paragraph("The resources to learn how to do this common feature are limited. Last year, I challenged everyone to make some new piece of content around Server-Side Swift, let's explore what everyone created. How can we, as a community, help Server-Side Swift thrive and not just survive.") + }, + speakerNames: ["Mikaela Caron"], + order: 19, + isWorkshop: false + ), + Talk( + id: 20, + title: "Lessons learned from running a SaaS entirely on Swift Vapor", + description: ComponentGroup { + Paragraph("Because Swift on the Server is not as well-known as, say, Node or Django, sometimes it's hard to find examples of what problems developers encounter once they scale beyond a certain point. There are hidden traps of technical debt that people will fall into, and there are surprising shortcuts if you know they're there. Sometimes it's just hard to choose a solution without any real-world examples.") + Paragraph("I built a reasonably successful Software-as-a-Service startup entirely based on Swift, and I want to lay all my cards on the table: what services and SDKs are we using, how our project structure, architecture and testing looks like, how we solved technical and security problems, and of course what songs I sing to myself while SwiftNIO compiles for the 38th time today. There may also be sprinkles on how to use analytics properly and ethically, and I might just find one or two edge cases where Swift is not the right answer.") + }, + speakerNames: ["Daniel Jilg"], + order: 20 + ), + Talk( + id: 21, + title: "Keynote", + description: ComponentGroup { + Paragraph("A special keynote presentation from the Swift team.") + }, + speakerNames: ["Ben Cohen"], + order: 21 + ), + Talk( + id: 22, + title: "Effective Strategies for Testing and Releasing Server Side Changes", + description: "Whether you are a solo developer or a team coordinating tens or hundreds of changes every day, making sure you don’t break your application is critical. This talk walks through some strategies to provide confidence in your changes and ensure they provide their designed functionality.", + speakerNames: ["Simon Pilkington"], + order: 22 + ), ] }