diff --git a/src/camping-types.js b/src/camping-types.js index ea1faf5..bd3d34f 100644 --- a/src/camping-types.js +++ b/src/camping-types.js @@ -37,7 +37,7 @@ * @property {string} key La clé du speaker * @property {string} name Le nom du speaker * @property {string} company L'entreprise du speaker - * @property {string} photoUrl L'url de la photo du speaker + * @property {string} photoURL L'url de la photo du speaker * @property {Social[]} socials Les réseaux sociaux du speaker */ diff --git a/src/index.gen.js b/src/index.gen.js index bd67f31..c6c5a75 100644 --- a/src/index.gen.js +++ b/src/index.gen.js @@ -8,7 +8,8 @@ export const views = { }, toJSON: () => "pages.agenda"}, "map": "pages.map", "session": "pages.session", - "speakers": "pages.speakers" + "speaker": "pages.speaker", + "speakerList": "pages.speakerList" } }; export const listeners = { diff --git a/src/manifest.js b/src/manifest.js index 53cf89c..376e24b 100644 --- a/src/manifest.js +++ b/src/manifest.js @@ -9,16 +9,26 @@ export const lenraRoutes = [ { path: "/sessions/:key", view: View(views.layout) - .props({ + .props({ page: views.pages.session, - }) + }) .context({ "pathParams": true }), }, { path: "/speakers", - view: View(views.layout).props({ page: views.pages.speakers }), + view: View(views.layout).props({ page: views.pages.speakerList }), + }, + { + path: "/speakers/:key", + view: View(views.layout) + .props({ + page: views.pages.speaker, + }) + .context({ + "pathParams": true + }), }, { path: "/map", diff --git a/src/resources/socials/github.png b/src/resources/socials/github.png index 9490ffc..9ec5e33 100644 Binary files a/src/resources/socials/github.png and b/src/resources/socials/github.png differ diff --git a/src/resources/socials/twitter.png b/src/resources/socials/twitter.png index ab648c2..44dc0c2 100644 Binary files a/src/resources/socials/twitter.png and b/src/resources/socials/twitter.png differ diff --git a/src/utils/contentDescriber.js b/src/utils/contentDescriber.js index c61597f..52ec622 100644 --- a/src/utils/contentDescriber.js +++ b/src/utils/contentDescriber.js @@ -1,6 +1,5 @@ -import { Flex, Flexible, Text, Wrap } from "@lenra/components"; +import { Actionable, Flex, Flexible, Text, Wrap } from "@lenra/components"; import { LenraColors } from "@lenra/components/dist/colors.js"; -import { Colors } from "@lenra/components/dist/colors.js"; /** * Build a list of components from a list of content children generated by @moox/markdown-to-json @@ -45,8 +44,6 @@ export function buildContentChildren(children) { fontWeight: "bold", }); case "p": - return Text("") - .children(buildContentChildren(child.children)); case "span": return Text("") .children(buildContentChildren(child.children)); @@ -82,18 +79,17 @@ export function buildContentChildren(children) { ]) .spacing(8); case "a": - console.warn("Link are not supported yet", child); - // return Actionable(Text("") - // .children(buildContentChildren(child.children))) - // .onPressed("@lenra:navTo", { path: child.props.href }); const children = buildContentChildren(child.children); if (children.length === 0) return null; - return Text("") - .children(children) - .style({ - color: LenraColors.bluePulse, - decoration: "underline" - }); + return Actionable( + Text("") + .children(children) + .style({ + color: LenraColors.bluePulse, + decoration: "underline" + }) + ) + .onPressed("@lenra:navTo", { path: child.props.href }); default: console.warn("Unknown tag", child.tag); return Wrap(buildContentChildren(child.children)); diff --git a/src/views/layout.js b/src/views/layout.js index 03b10f8..f9174b5 100644 --- a/src/views/layout.js +++ b/src/views/layout.js @@ -12,7 +12,7 @@ export default function (_data, { page/* , context */ }, context) { Container( pageView ) - .maxWidth(page === views.pages.speakers ? 1600 : 800) + .maxWidth(page === views.pages.speakerList ? 1600 : 800) ]) .direction("vertical") .padding(padding.symmetric(32, 16)) diff --git a/src/views/navbar.js b/src/views/navbar.js index e449cd7..0e33183 100644 --- a/src/views/navbar.js +++ b/src/views/navbar.js @@ -13,7 +13,7 @@ const navButtons = [ { icon: "group", path: "/speakers", - pages: [views.pages.speakers], + pages: [views.pages.speakerList, views.pages.speaker], }, { icon: "map", @@ -39,7 +39,7 @@ export default function (_data, { page }) { .padding(padding.all(20)) .color(pages.includes(page) ? colors.opacity(colors.Colors.white, 0.2) : colors.Colors.transparentMask) ) - .onPressed("@lenra:navTo", { path }) + .onPressed("@lenra:navTo", { path }) ) ) .mainAxisAlignment("center") diff --git a/src/views/pages/agenda.js b/src/views/pages/agenda.js index 880c919..b865b04 100644 --- a/src/views/pages/agenda.js +++ b/src/views/pages/agenda.js @@ -58,9 +58,11 @@ function sessionCard(session) { .filter(speaker => speaker in speakers) .map(speaker => View(views.pages.agenda.speaker).props({ speaker })) ) - .direction("vertical"), + .direction("vertical") + .spacing(8), Flex([ - Text(`${session.attributes.time} - ${session.attributes.duration}`), + Text(`${session.attributes.time} - ${session.attributes.duration}`) + , Text(rooms[session.attributes.room].name), ]) .direction("vertical"), @@ -78,11 +80,18 @@ export function speaker(_data, props) { return Text("Speaker not found"); } return Flex([ - // Image(speaker.attributes.photoURL), + Image(speaker.attributes.photoURL ?? "") + .width(40) + .height(40), Flex([ - Text(speaker.attributes.name), - Text(speaker.attributes.company ?? ""), + Text(speaker.attributes.name) + .style({ + fontWeight: "bold", + }), + Text(speaker.attributes.company ?? "") ]) .direction("vertical") ]) + .spacing(16) + .crossAxisAlignment("center") } \ No newline at end of file diff --git a/src/views/pages/session.js b/src/views/pages/session.js index 2c7a91c..e535c12 100644 --- a/src/views/pages/session.js +++ b/src/views/pages/session.js @@ -50,8 +50,13 @@ function body(session) { function speakerList(session) { const cards = session.attributes.speakers .filter(speaker => speaker in speakers) - .map(speaker => View(views.pages.agenda.speaker).props({ speaker })); - if (cards.length > 1) + .map(speaker => + Actionable( + View(views.pages.agenda.speaker).props({ speaker }) + ) + .onPressed("@lenra:navTo", { path: `/speakers/${speaker}` }) + ); + if (cards.length > 0) return [Wrap(cards).spacing(16)]; return cards; } diff --git a/src/views/pages/speaker.js b/src/views/pages/speaker.js new file mode 100644 index 0000000..365433c --- /dev/null +++ b/src/views/pages/speaker.js @@ -0,0 +1,100 @@ +import { Actionable, Container, Flex, Flexible, Image, Text, Wrap, colors } from "@lenra/components"; +import { sessions, speakers } from "../../camping-data.js"; +import { buildContentChildren } from "../../utils/contentDescriber.js"; + +export default function (_data, /* _props, */{ context: { pathParams } }) { + const speaker = speakers[pathParams.key]; + return Flex([ + header(speaker), + ...body(speaker), + ...sessionList(speaker), + ]) + .direction("vertical") + .spacing(16) + .crossAxisAlignment("stretch") +} + +/** + * @param {Speaker} speaker + * @returns + */ +function header(speaker) { + const children = [ + Text(speaker.attributes.name) + .style({ + fontSize: 24, + fontWeight: "bold", + }) + ]; + if (speaker.attributes.company) { + children.push(Text(speaker.attributes.company) + .style({ + fontSize: 20, + fontWeight: "bold", + })); + } + const flex = Flex(children) + .direction("vertical") + if (speaker.attributes.photoURL) { + return Wrap([ + Image(speaker.attributes.photoURL) + .width(100) + .height(100), + flex + ]) + .spacing(16) + .alignment("center") + .crossAxisAlignment("center") + .runAlignment("center") + .runSpacing(16); + } + return flex; +} + +/** + * @param {Speaker} speaker + * @returns + */ +function body(speaker) { + const children = buildContentChildren(speaker.children); + if (children.length > 1) + return [Flex(children).direction("vertical").spacing(8)]; + return children; +} + +/** + * @param {Speaker} speaker + * @returns + */ +function sessionList(speaker) { + const elements = Object.values(sessions) + .filter(session => session.attributes.speakers.includes(speaker.attributes.key)) + .sort((a, b) => a.attributes.day - b.attributes.day || a.attributes.time.localeCompare(b.attributes.time)) + .map(session => + Actionable( + Flex([ + Text("•"), + Flexible(Text(session.attributes.title)), + ]) + .spacing(8) + .crossAxisAlignment("center") + ) + .onPressed("@lenra:navTo", { path: `/sessions/${session.attributes.key}` }) + ); + if (elements.length === 0) return []; + return [ + Container( + Text("") + ) + .color(colors.Colors.black) + .height(1), + Text("Séances") + .style({ + fontSize: 20, + fontWeight: "bold", + }), + Flex(elements) + .spacing(16) + .direction("vertical") + ]; +} diff --git a/src/views/pages/speakerList.js b/src/views/pages/speakerList.js new file mode 100644 index 0000000..3d3c68e --- /dev/null +++ b/src/views/pages/speakerList.js @@ -0,0 +1,69 @@ +import { Actionable, Container, Flex, Image, Text, Wrap, borderRadius } from "@lenra/components"; +import { speakers } from "../../camping-data.js"; + +export default function (_data, _props) { + const sortedSpeakers = Object.values(speakers).sort((a, b) => a.attributes.name.localeCompare(b.attributes.name)); + return Wrap( + sortedSpeakers.map(speaker => + Actionable( + Container.card( + Flex([ + Flex([ + Text(speaker.attributes.name) + .style({ + fontSize: 20, + fontWeight: "bold", + }), + Text(speaker.attributes.company ?? ""), + ]) + .direction("vertical") + .crossAxisAlignment("stretch"), + Container( + Image(speaker.attributes.photoURL ?? "") + .width(150) + .height(150) + .fit("cover") + .filterQuality("high") + .loadingPlaceholder(Text("Loading image...")) + .errorPlaceholder(Text("Failed to load image")), + ) + .width(150) + .height(150) + .borderRadius(borderRadius.all(75)) + // TODO: manage clip Behaviour, see https://github.com/lenra-io/lenra_cli/issues/270 + .alignment("center"), + Container( + // Manage socials + Flex( + speaker.attributes.socials?.map(social => + // TODO: manage link + Actionable( + Image(`socials/${social.icon}.png`) + .width(24) + .height(24) + .filterQuality("high") + ) + .onPressed("@lenra:navTo", { path: social.link }) + ) + ) + .spacing(16) + ) + .height(24) + .alignment("center"), + ]) + .direction("vertical") + .mainAxisAlignment("spaceBetween") + .crossAxisAlignment("center") + .fillParent(true) + ) + .width(276) + .height(276) + ) + .onPressed("@lenra:navTo", { path: `/speakers/${speaker.attributes.key}` }) + ) + ) + .runAlignment("spaceAround") + .spacing(32) + .runSpacing(32) +} + diff --git a/src/views/pages/speakers.js b/src/views/pages/speakers.js deleted file mode 100644 index 4ebb1aa..0000000 --- a/src/views/pages/speakers.js +++ /dev/null @@ -1,71 +0,0 @@ -import { Container, Flex, Image, Text, Wrap, borderRadius } from "@lenra/components"; -import { speakers } from "../../camping-data.js"; - -export default function (_data, _props) { - const sortedSpeakers = Object.values(speakers).sort((a, b) => a.attributes.name.localeCompare(b.attributes.name)); - return Wrap( - sortedSpeakers.map(speaker => - Container.card( - Flex([ - Flex([ - Text(speaker.attributes.name) - .style({ - fontSize: 20, - fontWeight: "bold", - }), - Text(speaker.attributes.company ?? ""), - ]) - .direction("vertical") - .crossAxisAlignment("stretch"), - Container( - Image(speaker.attributes.photoURL ?? "") - .width(150) - .height(150) - .fit("cover") - .filterQuality("high") - .loadingPlaceholder(Text("Loading image...")) - .errorPlaceholder(Text("Failed to load image")), - ) - .width(150) - .height(150) - .borderRadius(borderRadius.all(75)) - // TODO: manage clip Behaviour, see https://github.com/lenra-io/lenra_cli/issues/270 - .alignment("center"), - Container( - // Manage socials - Flex( - speaker.attributes.socials?.map(social => - // TODO: manage link - Flex([ - Image(`socials/${social.icon}.png`) - .width(14) - .height(14) - .filterQuality("high"), - Text(social.name) - .style({ - fontSize: 14, - }), - ]) - .spacing(4) - .crossAxisAlignment("center") - ) - ) - .spacing(8) - ) - .height(24) - .alignment("center"), - ]) - .direction("vertical") - .mainAxisAlignment("spaceBetween") - .crossAxisAlignment("center") - .fillParent(true) - ) - .width(276) - .height(276) - ) - ) - .runAlignment("spaceAround") - .spacing(32) - .runSpacing(32) -} - diff --git a/test/views/pages/__snapshots__/session.test.js.snap b/test/views/pages/__snapshots__/session.test.js.snap index 83d5bb5..a2fcc06 100644 --- a/test/views/pages/__snapshots__/session.test.js.snap +++ b/test/views/pages/__snapshots__/session.test.js.snap @@ -198,18 +198,27 @@ exports[`session page snapshot FrankenPHP 1`] = ` "value": "support du temps réel avec support natif du protocole ", }, { - "children": [ - { - "type": "text", - "value": "Mercure", + "child": { + "children": [ + { + "type": "text", + "value": "Mercure", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://mercure.rocks", + }, + }, + "type": "actionable", }, { "type": "text", @@ -269,11 +278,26 @@ exports[`session page snapshot FrankenPHP 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "kevin_dunglas", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "kevin_dunglas", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/kevin_dunglas", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -468,18 +492,36 @@ Avec l'aide de Robin, expert en développement mobile, nous aborderons les bonne { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "robin_caroff", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "robin_caroff", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/robin_caroff", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "cyril_hue", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "cyril_hue", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/cyril_hue", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -568,18 +610,36 @@ exports[`session page snapshot apprenons_ensemble 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "marion_valentin", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "marion_valentin", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/marion_valentin", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yvonnick_frin", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yvonnick_frin", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yvonnick_frin", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -668,18 +728,36 @@ exports[`session page snapshot astuces_pour_parler 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "willy_malvault", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "willy_malvault", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/willy_malvault", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "sylvain_coudert", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "sylvain_coudert", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/sylvain_coudert", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -776,11 +854,26 @@ exports[`session page snapshot avant_je_supprimai_des_bugs 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "florian_roulet", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "florian_roulet", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/florian_roulet", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -863,11 +956,26 @@ exports[`session page snapshot bienvenue_dans_ma_zone_d_inconfort 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "noemie_delrue", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "noemie_delrue", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/noemie_delrue", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -931,11 +1039,26 @@ En 2023, j'ai décidé de me pencher sur les nouveautés de css et j'ai remarqu "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "olivier_leplus", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "olivier_leplus", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/olivier_leplus", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1041,11 +1164,26 @@ exports[`session page snapshot comment_gerer_des_journees_de_35h 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "sylvain_gougouzian", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "sylvain_gougouzian", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/sylvain_gougouzian", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1130,18 +1268,36 @@ exports[`session page snapshot comment_hacker_vos_applications_mobiles 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "julien_jimenez", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "julien_jimenez", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/julien_jimenez", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "amelie_avignon", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "amelie_avignon", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/amelie_avignon", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -1238,11 +1394,26 @@ exports[`session page snapshot construire_soi_meme_son_clavier_mecanique 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "benjamin_legrand", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "benjamin_legrand", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/benjamin_legrand", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1315,11 +1486,26 @@ exports[`session page snapshot corn_hole_2_turbo 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "paul_roye", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "paul_roye", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/paul_roye", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1382,11 +1568,26 @@ exports[`session page snapshot creer_des_objets_3D_avec_du_code 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yohan_lasorsa", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yohan_lasorsa", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yohan_lasorsa", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1450,18 +1651,27 @@ exports[`session page snapshot creer_sa_propre_vm_avec_compilation_jit_pour_les_ "value": "Dans ce talk nous mettrons en œuvre et en live notre propre machine virtuelle avec JIT intégrée pour une calculatrice ", }, { - "children": [ - { - "type": "text", - "value": "RPN", + "child": { + "children": [ + { + "type": "text", + "value": "RPN", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://en.wikipedia.org/wiki/Reverse_Polish_notation", + }, + }, + "type": "actionable", }, { "type": "text", @@ -1504,11 +1714,26 @@ exports[`session page snapshot creer_sa_propre_vm_avec_compilation_jit_pour_les_ "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "olivier_poncet", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "olivier_poncet", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/olivier_poncet", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1658,18 +1883,36 @@ exports[`session page snapshot d_un_orchestre_fige_a_un_joli_ballet 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "marie_laure_momplot", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "marie_laure_momplot", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/marie_laure_momplot", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "sebastien_viale", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "sebastien_viale", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/sebastien_viale", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -1877,11 +2120,26 @@ exports[`session page snapshot de_la_tablette_d_argile_a_ChatGPT 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "patrice_de_saint_steban", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "patrice_de_saint_steban", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/patrice_de_saint_steban", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -1954,11 +2212,26 @@ exports[`session page snapshot dessines_moi_rust 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yannick_guern", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yannick_guern", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yannick_guern", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2023,18 +2296,36 @@ exports[`session page snapshot dis_papa_c_est_quoi_impression_3D 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yohan_lasorsa", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yohan_lasorsa", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yohan_lasorsa", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "wassim_chegham", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "wassim_chegham", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/wassim_chegham", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -2101,11 +2392,26 @@ exports[`session page snapshot do_not_track_me 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "cedric_gatay", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "cedric_gatay", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/cedric_gatay", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2147,18 +2453,36 @@ exports[`session page snapshot escape_camp_part_1 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "gregory_bevan", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "gregory_bevan", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/gregory_bevan", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "william_bartlett", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "william_bartlett", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/william_bartlett", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -2204,18 +2528,36 @@ exports[`session page snapshot escape_camp_part_2 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "gregory_bevan", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "gregory_bevan", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/gregory_bevan", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "william_bartlett", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "william_bartlett", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/william_bartlett", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -2292,11 +2634,26 @@ exports[`session page snapshot esprit_de_famille 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "mathieu_passenaud", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "mathieu_passenaud", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/mathieu_passenaud", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2336,11 +2693,26 @@ exports[`session page snapshot et_si_on_arretait_de_basher_les_esn 1`] = ` "value": "Les ESN, des marchands de viande qui n'ont aucune considération pour leurs collaborateurs et arnaquent leurs clients ? C'est en tout cas l'image que véhiculent souvent les sociétés de service dans le milieu des développeurs. Pourtant ça fait 25 ans que je bosse dans une ESN et je n'ai jamais eu ce ressenti. Même s'il n y a pas de fumée sans feu, est-ce qu'on peut faire de ces clichés une généralité ? Ai-je eu de la chance ? Ou alors le milieu des ESN n'est pas aussi pourri qu'on le dit ? Je vous propose mon retour d'expérience sur mes années d'ESN, les difficultés qu'on peut vivre dans une ESN, mais aussi les opportunités qu'elles offrent, en particulier en début de carrière.", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "olivier_thierry", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "olivier_thierry", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/olivier_thierry", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2403,11 +2775,26 @@ exports[`session page snapshot event_driven_qu_est_ce_donc 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "celine_louvet", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "celine_louvet", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/celine_louvet", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2480,11 +2867,26 @@ exports[`session page snapshot il_etait_une_fois_un_arbre_qui_parle 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "paul_pinault", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "paul_pinault", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/paul_pinault", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -2912,11 +3314,26 @@ Mais ces vecteurs de réflexion, communication et compréhension semblent parfoi "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "virginie_ferey", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "virginie_ferey", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/virginie_ferey", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3028,11 +3445,26 @@ La grande IA va-t-elle gouverner le monde ?", "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "stephane_philippart", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "stephane_philippart", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/stephane_philippart", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3072,19 +3504,34 @@ exports[`session page snapshot ivre_et_au_chomage 1`] = ` "value": "REX sur l'écriture d'un premier livre : comment s'est arrivé ? pourquoi j'ai accepté ? par quelles étapes de dépression suis-je passée ? Je vais parler des relations avec l'équipe éditoriale, des délais, des étapes de la réalisation d'un livre du jour 1 avec les premières lignes jusqu'à la livraison. Je ne m'arrête pas là, on va parler de marketing, publicité, impression, sortie officielle du livre et pourquoi je ne referai plus ça.", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "agnes_cardin", - }, - "type": "view", - }, - ], - "crossAxisAlignment": "stretch", - "direction": "vertical", - "spacing": 16, - "type": "flex", -} -`; + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "agnes_cardin", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/agnes_cardin", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; exports[`session page snapshot javascript_une_histoire 1`] = ` { @@ -3149,11 +3596,26 @@ exports[`session page snapshot javascript_une_histoire 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "jordane_grenat", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "jordane_grenat", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/jordane_grenat", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3512,18 +3974,27 @@ exports[`session page snapshot l_art_du_DeeJaying_par_la_pratique 1`] = ` "value": "deux ", }, { - "children": [ - { - "type": "text", - "value": "Pioneer CDJ-3000", + "child": { + "children": [ + { + "type": "text", + "value": "Pioneer CDJ-3000", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.pioneerdj.com/fr-fr/product/player/cdj-3000/black/overview/", + }, + }, + "type": "actionable", }, ], "type": "flex", @@ -3548,36 +4019,54 @@ exports[`session page snapshot l_art_du_DeeJaying_par_la_pratique 1`] = ` "value": "une ", }, { - "children": [ - { - "type": "text", - "value": "Pioneer DJM-900 Nexus 2 White", + "child": { + "children": [ + { + "type": "text", + "value": "Pioneer DJM-900 Nexus 2 White", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.pioneerdj.com/fr-fr/product/mixer/archive/djm-900nxs2/white/overview/", + }, + }, + "type": "actionable", }, { "type": "text", "value": " ou une ", }, { - "children": [ - { - "type": "text", - "value": "Pioneer DJM-V10LF", + "child": { + "children": [ + { + "type": "text", + "value": "Pioneer DJM-V10LF", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.pioneerdj.com/fr-fr/product/mixer/djm-v10-lf/black/overview/", + }, + }, + "type": "actionable", }, ], "type": "flex", @@ -3602,18 +4091,27 @@ exports[`session page snapshot l_art_du_DeeJaying_par_la_pratique 1`] = ` "value": "une enceinte amplifiée ", }, { - "children": [ - { - "type": "text", - "value": "FBT - X-Pro 112MA", + "child": { + "children": [ + { + "type": "text", + "value": "FBT - X-Pro 112MA", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.fbt.it/en/products/x-pro/x-pro-112ma/", + }, + }, + "type": "actionable", }, ], "type": "flex", @@ -3660,18 +4158,27 @@ exports[`session page snapshot l_art_du_DeeJaying_par_la_pratique 1`] = ` "value": "une table ", }, { - "children": [ - { - "type": "text", - "value": "AmericanDJ Pro Event table II", + "child": { + "children": [ + { + "type": "text", + "value": "AmericanDJ Pro Event table II", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.americandj.eu/fr/pro-event-table-ii-mb.html", + }, + }, + "type": "actionable", }, ], "type": "flex", @@ -3705,11 +4212,26 @@ exports[`session page snapshot l_art_du_DeeJaying_par_la_pratique 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "david_pilato", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "david_pilato", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/david_pilato", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3782,11 +4304,26 @@ exports[`session page snapshot la_pull_request_de_l_horreur 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "jean_francois_greffier", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "jean_francois_greffier", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/jean_francois_greffier", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3826,11 +4363,26 @@ exports[`session page snapshot le_guide_du_voyageur 1`] = ` "value": "Vous connaissez sûrement ce sigle, mais savez-vous ce qui se cache derrière chaque lettre ? Ce n'est pas facile d'expliquer dans les détails toutes ces définitions, mais des concepts basiques acceptés dans la communauté sont souvent méconnus. Identité sexuelle, orientation sexuelle, sexe biologique, expression de l'identité sexuelle: je vous propose d'expliquer de manière générale les différentes possibilités derrière ces concepts.", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "elaine_dias_batista", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "elaine_dias_batista", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/elaine_dias_batista", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -3903,11 +4455,26 @@ exports[`session page snapshot les_7_vies_d_une_qa_analyst 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "audrey_moulins", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "audrey_moulins", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/audrey_moulins", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4434,11 +5001,26 @@ exports[`session page snapshot maitrise_ton_apprentissage 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "maxime_deroullers", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "maxime_deroullers", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/maxime_deroullers", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4501,11 +5083,26 @@ exports[`session page snapshot mini_golf_pour_une_accessibilite 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "herve_boisgontier", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "herve_boisgontier", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/herve_boisgontier", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4571,18 +5168,36 @@ Cette analogie nous permettra d'appréhender les avantages et inconvénients de { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "benoit_masson", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "benoit_masson", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/benoit_masson", + }, + }, + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "gwendal_leclerc", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "gwendal_leclerc", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/gwendal_leclerc", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -4629,11 +5244,26 @@ Quand on est dans un milieu humide et pas stable. Je passe plusieur mois par an sur mon bateau, et dans ce talk je vais vous raconter comment je me suis organisée pour concilier voile et travail.", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "aleth_gueguen", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "aleth_gueguen", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/aleth_gueguen", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4696,11 +5326,26 @@ exports[`session page snapshot on_vit_deja_dans_un_monde_federe 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "anthony_pena", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "anthony_pena", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/anthony_pena", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4775,18 +5420,36 @@ exports[`session page snapshot passez_moins_de_temps_a_attendre_la_ci 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "jean_phi_baconnais", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "jean_phi_baconnais", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/jean_phi_baconnais", + }, + }, + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "guillaume_membre", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "guillaume_membre", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/guillaume_membre", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -4873,11 +5536,26 @@ exports[`session page snapshot pour_eviter_le_dirty_recruiting 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "shirley_almosni_chiche", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "shirley_almosni_chiche", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/shirley_almosni_chiche", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -4917,11 +5595,26 @@ exports[`session page snapshot programmons_ensemble 1`] = ` "value": "Après avoir vu l’application du logiciel dans la gestion du moteur de voiture il y a quelques temps... continuons le démontage et allons explorer les antres de la boîte de vitesse automatique jusqu’à faire un prototype de boîte pilotée à variation continue avec un arduino et quelques légos ! Ce type de boite de vitesse s'applique au milieu des travaux public, agricole, mais aussi voitures hybrides Toyota ou même des vélos électriques.", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "mathieu_passenaud", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "mathieu_passenaud", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/mathieu_passenaud", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5014,11 +5707,26 @@ exports[`session page snapshot recits_d_epouvante_mlops 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yuliana_khorolich", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yuliana_khorolich", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yuliana_khorolich", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5168,18 +5876,36 @@ exports[`session page snapshot revivez_la_cryptographie_de_nos_ancetres 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "willy_malvault", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "willy_malvault", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/willy_malvault", + }, + }, + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "virginie_casavecchia", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "virginie_casavecchia", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/virginie_casavecchia", + }, }, - "type": "view", + "type": "actionable", }, ], "spacing": 16, @@ -5223,11 +5949,26 @@ exports[`session page snapshot sous_le_capot 1`] = ` "value": "Hey ! Dis moi, tu sais comment ça fonctionne un navigateur web toi ? Le moteur de rendu, concrètement, il fait quoi ? Ça doit être sacrément compliqué de tout dessiner à l'écran non ? Allez, regardons ça ensemble !", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "anthony_le_goas", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "anthony_le_goas", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/anthony_le_goas", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5342,18 +6083,27 @@ exports[`session page snapshot speech_to_text 1`] = ` "value": "Vous découvrirez également une application de Speech to Text, réalisée avec ", }, { - "children": [ - { - "type": "text", - "value": "Streamlit", + "child": { + "children": [ + { + "type": "text", + "value": "Streamlit", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", }, - ], - "style": { - "color": 4279872746, - "decoration": "underline", + "type": "text", + "value": "", }, - "type": "text", - "value": "", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://streamlit.io/", + }, + }, + "type": "actionable", }, { "type": "text", @@ -5369,11 +6119,26 @@ exports[`session page snapshot speech_to_text 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "mathieu_busquet", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "mathieu_busquet", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/mathieu_busquet", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5466,11 +6231,26 @@ exports[`session page snapshot the_developer_portal 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "maha_alsayasneh", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "maha_alsayasneh", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/maha_alsayasneh", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5543,11 +6323,26 @@ exports[`session page snapshot un_scrum_master_en_or 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "laurie_coquillat", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "laurie_coquillat", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/laurie_coquillat", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5632,18 +6427,36 @@ exports[`session page snapshot vite_une_nouvelle_ere_de_tooling_front 1`] = ` { "children": [ { - "name": "pages.agenda::speaker", - "props": { - "speaker": "yann_thomas_le_moigne", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "yann_thomas_le_moigne", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/yann_thomas_le_moigne", + }, }, - "type": "view", + "type": "actionable", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "christophe_jolivet", + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "christophe_jolivet", + }, + "type": "view", }, - "type": "view", + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/christophe_jolivet", + }, + }, + "type": "actionable", }, ], "spacing": 16, @@ -5760,11 +6573,26 @@ exports[`session page snapshot vous_pouvez_venir 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "francois_xavier_lair", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "francois_xavier_lair", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/francois_xavier_lair", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5837,11 +6665,26 @@ exports[`session page snapshot wolfy 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "kevin_jean", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "kevin_jean", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/kevin_jean", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", @@ -5934,11 +6777,26 @@ exports[`session page snapshot yagni_kiss_and_dry 1`] = ` "type": "flex", }, { - "name": "pages.agenda::speaker", - "props": { - "speaker": "maha_alsayasneh", - }, - "type": "view", + "children": [ + { + "child": { + "name": "pages.agenda::speaker", + "props": { + "speaker": "maha_alsayasneh", + }, + "type": "view", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/speakers/maha_alsayasneh", + }, + }, + "type": "actionable", + }, + ], + "spacing": 16, + "type": "wrap", }, ], "crossAxisAlignment": "stretch", diff --git a/test/views/pages/__snapshots__/speaker.test.js.snap b/test/views/pages/__snapshots__/speaker.test.js.snap new file mode 100644 index 0000000..0bfa5fd --- /dev/null +++ b/test/views/pages/__snapshots__/speaker.test.js.snap @@ -0,0 +1,7865 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`speaker page snapshot agnes_cardin 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/agnes_cardin.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Agnès Cardin", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "iAdvize", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Développeuse passionnée et évangéliste SCALA, j'aime les chats 🐱, les jeux vidéos et le Japon. J'aime le travail bien fait et cherche toujours la meilleure façon de faire les choses sans réinventer la roue. Au quotidien, je m'applique à cultiver une vision du travail qui rime avec sens et performance. 🌟", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Ivre et au chômage, elle décide d'écrire un livre sur le Scala en plein Covid", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/ivre_et_au_chomage", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot aleth_gueguen 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/aleth_gueguen.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Aleth Gueguen", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Aleth Gueguen Conseil", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Je suis développeuse indépendante depuis 2006. +Mes missions : développer des logiciels métier pour les PME. +Je prends en charge la totalité du projet, diagnostic business, scopage, définition des besoins, ateliers découverte métier, architecture, dev, accompagnement à la prise en main, maintenance et support. +Ma philosophie : utiliser des technos stables et bien connues, pour me focaliser sur les besoins métiers. Quand je ne suis pas sur la mer, je suis en vélo.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Naviguer et coder, comment on fait ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/naviguer_et_coder_comment_on_fait", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot amelie_avignon 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/amelie_avignon.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Amélie Avignon", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Worldline", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Sortie de l’université en tant que data scientist, j’ai intégré une équipe d’experts sécurité mobile et web. Ma mission est alors de lier data et sécurité afin d’améliorer l’expérience utilisateur.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis aujourd’hui product owner et j’adore élaborer et mettre en place de nouvelles solutions innovantes avec mon équipe.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "La transmission du savoir est également un élément important pour moi. C’est pourquoi je retrouve les bancs de l’école afin d’encadrer des projets universitaires, ou les conférences tech en tant que participante ou speaker.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "--", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "After graduating from university as a data scientist, I joined a team of mobile and web security experts. My mission is to bind data and security in order to improve the user experience.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "I am now a product owner and I love to design and build new innovative solutions with my team.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Knowledge transfer is also an important element for me. That's why I go back to school to supervise university projects, or tech conferences as an attendee or speaker.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Comment hacker vos applications mobiles ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/comment_hacker_vos_applications_mobiles", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot anthony_le_goas 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/anthony_le_goas.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Anthony Le Goas", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Dév. web & directeur @Zenika Brest / Co-organisateur Svelte Society France + BrestJS + UX Design Brest.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Passionné par le web et son optimisation. Contributeur SvelteJS.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Sous le capot des navigateurs web", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/sous_le_capot", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot anthony_pena 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/anthony_pena.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Anthony Pena", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "SFEIR", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Codeur et blogueur le jour et dévoreur de manga la nuit, vous me verrez souvent parler de Java, JavaScript, Typescript, Rust ou de test, parfois un peu (beaucoup) de jeux-vidéos ou de bricolage de console.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "On vit déjà dans un monde fédéré !", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/on_vit_deja_dans_un_monde_federe", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot audrey_moulins 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/audrey_moulins.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Audrey Moulins", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Leboncoin", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Je suis lead QA chez leboncoin depuis maintenant 1 an et QA Analyst depuis presque 3 ans. Issue de la reconversion, j'étais auparavant chargée de Communication et j'ai fais mes études dans le marketing et la Stratégie Digitale J'aime le fromage, la bonne bouffe (notamment découvrir de nouvelles saveurs), faire du karaoké et passer du temps avec mon fils de 3 ans et demi (en ayant le même regard innocent sur la vie)", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Les 7 vies d'une QA Analyst en reconversion", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/les_7_vies_d_une_qa_analyst", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot benjamin_legrand 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/benjamin_legrand.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Benjamin Legrand", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Groupe Onepoint", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Tombé dans la marmite du web étant petit en regardant sous le capot ce que frontpage ou dreamweaver générait, c'est tout naturellement que Benjamin fit depuis 2008 du développement web son métier.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "D'abord full-stack, puis en fait full fronteux, parfois défricheur de frameworks javascript bizarres, amoureux du Typescript, fanboy d'Angular. touche à tout musicien.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Intervenu sur plein de projets variés, de l'e-commerce à l'industrie, en passant par les telecoms .", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Aujourd'hui Tech Lead front / Architecte Logiciel chez Onepoint", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Construire soi-même son clavier mécanique, idée bizarre ou idée de génie ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/construire_soi_meme_son_clavier_mecanique", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot benoit_masson 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/benoit_masson.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Benoît Masson", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "OVHcloud", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Tombé dans la potion quand j'étais petit, je m'intéresse depuis toujours à l'informatique : d'abord joueur, bidouilleur et développeur sur calculatrice, puis professionnellement en tant que chercheur et formateur, et finalement de retour au développement web full-stack depuis quelques années.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Passionné par les langages modernes, de bas niveau (Go, Rust) ou fonctionnels (Caml, Elm) permettant par leur conception de limiter les risques d'erreur humaine, je m'implique dans les communautés locales pour partager mes expériences et améliorer mes pratiques.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Actuellement Team Leader dans l'équipe Noms de Domaines chez OVHcloud.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Möbkky, le mob appliqué au Mölkky 🎳", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/mobkky_le_mob_applique_au_molkky", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot cedric_gatay 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/cedric_gatay.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Cedric Gatay", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Code-Troopers", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Co-fondateur de Code-Troopers : studio de développement basé à Tours.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Co-lead du GDG Tours.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Initiateur de l'OpenDeviceLab de Tours.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Team member Touraine.tech : conférence autour du monde du développement en Touraine.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "#DoNotTrackMe 📺📱", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/do_not_track_me", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot celine_louvet 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/celine_louvet.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Céline Louvet", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Shine", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Développeuse backend passionnée depuis 17 ans, actuellement lead developer chez Shine, j'aime la recherche de stabilité et de qualité d'une application. Je me suis spécialisée sur les architectures cloud.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Event Driven, qu'est-ce donc ?! Un nouveau buzzword ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/event_driven_qu_est_ce_donc", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot christophe_jolivet 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/christophe_jolivet.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Christophe Jollivet", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Apside", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Agitateur technique chez Apside, Christophe prêche les bonnes pratiques sur divers projets informatiques et universités en région tourangelle. Reconverti à l’informatique il y a 17 ans suite à un doctorat de neurobiologie, il contribue activement dans les communautés Java en ayant été co-responsable de la rubrique Java du site developpez.com mais aussi en participant à des conférences et en ayant fondé le Tours JUG en 2008 et co-fondé TouraineTech en 2017", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Vite, une nouvelle ère de tooling front ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/vite_une_nouvelle_ere_de_tooling_front", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot cyril_hue 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/cyril_hue.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Cyril Hue", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Kanoma", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Développeur Front, 30ans, sur Nantes depuis 2018.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Amoureux de rétrogaming, comics, et autres collections.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "En visioconférence, je suis fier de pouvoir montrer ma collection de Mégazord à mes contacts :p", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Organisateur du Meetup Design System Nantes", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "À la découverte du développement mobile, sans les maux de tête", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/a_la_decouverte_du_developpement_mobile", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot david_pilato 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/david_pilato.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "David Pilato", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "elastic", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Depuis 2013, David Pilato est développeur et évangéliste chez elastic.co, après avoir passé les deux années précédentes à promouvoir le projet open-source Elasticsearch. Il en anime la communauté française et organise des BBLs au sein des entreprises.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "L'art du DeeJaying par la pratique", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/l_art_du_DeeJaying_par_la_pratique", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot elaine_dias_batista 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/elaine_dias_batista.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Elaine Dias Batista", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "SFEIR", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Elaine has been working with mobile apps development for the past 6 years. Since the launch of the Google Assistant, she has been following the developments around that area. She truly believes that interacting with technology using natural language will define the future of computing. Born and raised in Brazil, she's been living in France since 2004 and loves everything multicultural. She's a GDE for the Google Assistant.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Le guide du voyageur LGBTQIA+", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/le_guide_du_voyageur", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot florian_roulet 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/florian_roulet.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Florian Roulet", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Orthomatique", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "La journée, je code dans une TPE qui édite un logiciel d'aide à la création de compte rendu de bilan orthophonique. Le soir, Je m'occupe de mes enfants et fais du badminton. Le week-end, je bricole, fais de l'impression 3D, monte des legos. Et entre tout ça, je m'occupe de mon troisième bébé, TouraineTech.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Avant, je supprimai des bugs, maintenant j'élève des abeilles", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/avant_je_supprimai_des_bugs", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot francois_xavier_lair 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/francois_xavier_lair.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "François-Xavier Lair", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "onepoint", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Après plus d'une dizaine d'année de Devfront j'interviens à présent sur les projets en tant qu'expert accessibilité et qualité. Expert BBQ (Bike, Beer and QualityWeb), quand je ne bosse pas sur la qualité Web j'adore bricoler des vélos ou brasser de la bière.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Vous pouvez venir à ce talk les yeux fermés", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/vous_pouvez_venir", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot gregory_bevan 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/gregory_bevan.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Grégory Bévan", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Développeur passionné depuis 15 ans, Grégory est aujourd'hui consultant/formateur chez Zenika Nantes pour mettre à profit son expérience du monde de l'édition de logiciels Web. Architecte et développeur backend Java et NodeJS, il est aussi aguerri à tous les aspects de la construction logicielle et positionne la culture craftsmanship au coeur de la production de logiciels de qualité. Sa quête d'apprentissage l'amène à explorer les mondes du front avec Angular et VueJS, des micro-services et de langages modernes tels que Kotlin.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Escape Camp 🏃🏕️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/escape_camp_part_1", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Escape Camp 🏃🏕️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/escape_camp_part_2", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot guillaume_membre 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/guillaume_membre.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Guillaume Membré", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "type": "text", + "value": "Geek à toute heure, je travaille principalement sur des sujets de migration d’architecture sur le cloud d'AWS et également sur des problématiques d'intégration et de déploiement continu. Je partage son expérience pour faciliter la mise en place de démarche devops chez différents acteurs. J'adore bidouiller des RaspberryPi ou Arduino pour créer des choses inutiles donc indispensables ! Lorsque le temps le permet, je décris mes aventures sur mon ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "site web", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.mydiy.dev/", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ".", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Passez moins de temps à attendre la CI et plus de temps au bord de la piscine", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/passez_moins_de_temps_a_attendre_la_ci", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot gwendal_leclerc 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/gwendal_leclerc.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Gwendal Leclerc", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "OVHcloud", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Möbkky, le mob appliqué au Mölkky 🎳", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/mobkky_le_mob_applique_au_molkky", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot herve_boisgontier 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/herve_boisgontier.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Hervé Boisgontier", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "ENI École Informatique", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Formateur en développement informatique au sein d'ENI École Informatique à Nantes.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Depuis plus de 10 ans, avec différents langages, je forme à la programmation et l’art du développement informatique. Depuis longtemps, je m’intéresse au développement durable et plus récemment comment le mettre en pratique dans notre métier d’informaticien ou d'informaticienne. Je me suis donc intéressé à ces thématiques et pour parfaire mes connaissances, j'ai suivi les formations "Écoconception de services numériques" par GreenIT.fr et "Développer des sites web accessibles" par Access42 et obtenu les certifications associées. J’ai écrit le livre "Green IT et Accessibilité" aux Éditions ENI afin de partager mes connaissances sur ces sujets et d’aider à la création de sites web plus numériquement responsables.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Pour plus d'informations : ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://www.linkedin.com/in/boisgontier/", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.linkedin.com/in/boisgontier/", + }, + }, + "type": "actionable", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Mini golf pour une accessibilité numérique maximale", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/mini_golf_pour_une_accessibilite", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot jean_francois_greffier 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/jean_francois_greffier.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Jean-François Greffier", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Conserto", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Front-end Tech Lead. J'accompagne des équipes vers plus d'agilité et d'excellence technique.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis intéressé par l'agilité, le Software Craft et les tests. Ambassadeur Playwright", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "La Pull Request de l’horreur", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/la_pull_request_de_l_horreur", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot jean_phi_baconnais 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/jean_phi_baconnais.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Jean-Phi Baconnais", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Développeur chez Zenika Nantes", + }, + ], + "style": { + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Plongé dans le développement avec l'éco-système Java, curieux de nature, j'aime découvrir et expérimenter de nouvelles technos back end ou front end et les partager autour de moi.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "GitLab Heroes 🦊 - Community Hero Gitpod 🍑 - Co orga des Human Talks Nantes", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Passez moins de temps à attendre la CI et plus de temps au bord de la piscine", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/passez_moins_de_temps_a_attendre_la_ci", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot jordane_grenat 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/jordane_grenat.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Jordane Grenat", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Comet Meetings", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Jordane est développeur chez Comet Meetings et adore les découvertes et ce qui sort de l'ordinaire. Ce qui est souvent incompatible avec le pragmatisme technologique nécessaire sur les projets clients.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Il assouvit alors sa passion à coup de projets perso jamais finis et en écumant les conférences en compagnie des autres développeurs férus de nouveautés. En vrac : Elm, F#, nouveau-framework-à-la-mode-JS, ...", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Il passe le reste de son temps libre à refuser les cookies sur les sites web qu'il consulte.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "JavaScript : une histoire d'amour 💔", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/javascript_une_histoire", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot julien_jimenez 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/julien_jimenez.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Julien Jimenez", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Worldline", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Comment hacker vos applications mobiles ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/comment_hacker_vos_applications_mobiles", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot kevin_dunglas 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/kevin_dunglas.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Kévin Dunglas", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Les-Tilleuls.coop", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Kévin est le créateur du framework API Platform (un outil populaire pour développer des projets API-first) ainsi que de Mercure (une solution de publication en temps réel), de Vulcain (un style d'API dirigées par les clients) et de FrankenPHP (un serveur d'application performant et moderne pour PHP).", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Il est également membre de la Core Team du framework Symfony (l'un des frameworks web parmi les plus utilisés au monde), contributeur aux langages de programmation Go et PHP et il a cofondé la société société coopérative Les-Tilleuls.coop (entreprise entièrement possédée par ses salarié·es et où les décisions sont prises sur le principe 1 personne = 1 voix).", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "FrankenPHP, un serveur d'application moderne pour PHP écrit en Go", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/FrankenPHP", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot kevin_jean 1`] = ` +{ + "children": [ + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Kevin Jean", + }, + ], + "direction": "vertical", + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Wolfy - de 2000 à 20 000 joueurs connectés", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/wolfy", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot laurie_coquillat 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/laurie_coquillat.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Laurie Coquillat", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Lunatech", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Dans le domaine professionnel on peut dire que j'ai eu deux vies. Après des études dans le domaine littéraire, passionnée par la transmission et le contact humain, j'ai passé plus de huit ans dans le domaine du tourisme, en tant que responsable animation, pédagogie et expérience client. Mon métier ? Créer des contenus à la fois ludiques et pédagogiques à destination de familles et d'enfants de tous âges, afin de découvrir la biodiversité marine et l'importance de sa préservation. J'avais aussi en charge de former et accompagner les équipes de conférenciers et d'animateurs, et améliorer chaque jour la qualité et l'offre de service en fonction des retours client.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Sur mon temps libre, j'ai très tôt commencé à bidouiller des sites Internet, aller voir sous le capot comment fonctionnaient les forums... Si bien qu'un jour j'ai décidé de sauter le pas et de faire une reconversion de Concepteur Développeur Informatique.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Après l'obtention de mon diplôme en 2018, je me suis définitivement lancée en tant que développeuse Java (puis Scala) et très vite je suis tombée dans l'Agilité. Mes expériences passées en terme d'organisation et d'accompagnement d'équipe ont très vite été mis à contribution dans les projets qui ont jalonnés depuis mon parcours de développeuse. Scrum master puis Product Owner certifiée, j'ai pu mettre en pratique la théorie pour des clients français et internationaux. Je suis depuis janvier 2021 "Agile and Product Delivery Lead" au sein de Lunatech France. Je me consacre aujourd'hui à gagner en expérience dans le domaine de l'Agilité et du Scrum plus particulièrement.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Un scrum master en or", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/un_scrum_master_en_or", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot maha_alsayasneh 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/maha_alsayasneh.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Maha ALSAYASNEH", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Elastic", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "I am a computer scientist with more than 10 years of experience in various fields ranging from web development to big data, including cloud computing and artificial intelligence. My experience combines technical and analytical aptitudes with problem-solving strengths to drive projects to on-time and high-quality completion.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "I also have a Ph.D. in optimizing the performance of multi-tier distributed systems.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Currently, I am an Engineering Manager at Elastic. We are the leading platform for search-powered solutions.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "I love communicating and sharing knowledge with people ;) ( I also love sports and mountains ;) )", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "My motto in life is LIVE + LOVE + LAUGH :)", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "The Developer Portal: Open the Gate to Productivity 🚀", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/the_developer_portal", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "YAGNI, KISS, and DRY: The Secret Recipe For Better Software Design", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/yagni_kiss_and_dry", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot marie_laure_momplot 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/marie_laure_momplot.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Marie-Laure Momplot", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Michelin", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Je suis Marie-Laure Momplot 👱‍♀️.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je travaille pour Michelin depuis fin 2009.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Analyste-développeuse de par mes études j'ai commencé par du dev java, un peu devops, de l'analyse fonctionnelle, du scrum master et du chef de projet! Je suis un peu un couteau suisse finalement 😏 ! D'ailleurs je me suis relancée dans l'aventure du développement il y a deux ans, je fais du kafka mais surtout du kafka streams, du kubernetes tanzu :)", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "D'un orchestre figé à un joli ballet aka comment on a propulsé notre monolith dans un pas de danse endiablé 😈", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/d_un_orchestre_fige_a_un_joli_ballet", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot marion_valentin 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/marion_valentin.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Marion Valentin", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "BAM", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Apprenons ensemble grâce aux bookclubs", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/apprenons_ensemble", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot mathieu_busquet 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/mathieu_busquet.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Mathieu Busquet", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "OVHcloud", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Passionné par les technologies ainsi que par la résolution de problèmes, j'ai décidé d'effectuer une école d'ingénieurs ancrée dans le monde numérique. Cette formation m'a permis de développer une solide compréhension des concepts informatiques et de maîtriser plusieurs langages. Actuellement en dernière année, je me spécialise dans le domaine de l'Intelligence Artificielle (IA) et de la Data Science.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Afin de renforcer mes compétences professionnelles dans ces domaines, j'ai décidé d'effectuer cette dernière année en alternance chez OVHcloud. Cette expérience m'offre l'opportunité d'appliquer les connaissances théoriques acquises durant ma formation à des fins concrètes.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "L'IA est un domaine en constante évolution, à la fois complexe et fascinant, qui me permet de découvrir, de comprendre des concepts, de faire parler ma créativité, mais aussi de partager et d'expliquer mes connaissances!", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Speech To Text: une opportunité pour améliorer votre productivité ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/speech_to_text", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot mathieu_passenaud 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/mathieu_passenaud.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Mathieu Passenaud", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "please-open.it", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Après 8 ans en tant que DevOps dans les univers du Cloud et de l'IOT, j'ai découvert la nécessité absolue de bien fait l'authentification sur les applications. Depuis 4 ans, j'ai décidé de ne faire que ça avec please-open.it. N'oublions jamais que nous faisons des logiciels pour des utilisateurs finaux, seul l'usage prime.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Esprit de famille, méthodes, rapport à l'argent, ambitions - l'héritage d'une famille d'entrepreneurs depuis 100 ans", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/esprit_de_famille", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Programmons ensemble... une boite de vitesses", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/programmons_ensemble", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot maxime_deroullers 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/maxime_deroullers.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Maxime Deroullers", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "HoppR", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Maxime Deroullers est un développeur passionné de 8 ans d’expérience. Très curieux par nature, il s’est intéressé rapidement au monde de l’Ops… Avant de se laisser séduire complétement par la culture DevOps.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Ce dont il est le plus fier, c'est de s'impliquer dans les communautés tech en France. Il a créé 2 associations, Cloud Nord et Cloud Alpes, pour permettre le partage de connaissance lors de conférences organisées sur Lille et Lyon.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Il s'est également lancé dans l'entrepreneuriat en s'associant à HoppR.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Maitrise ton apprentissage aussi bien que la cuisson de tes saucisses 🔥", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/maitrise_ton_apprentissage", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot noemie_delrue 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/noemie_delrue.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Noémie Delrue", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Salut c'est Noémie !", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Nantaise pure petit beurre et bretonne de cœur, je travaille dans l'informatique depuis bientôt 7 ans.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Curieuse, pleine d'imagination, je fais partie de ceux qui adorent travailler en société de service et je n'ai d'ailleurs toujours pas changé d'entreprise depuis mon stage de fin d'études (il parait que ça se fait rare).", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Mon univers à moi ? C'est avant tout du Microsoft. SharePoint d'abord, Microsoft 365 maintenant.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Entre cas d'usage spécifiques, contraintes techniques ou de gouvernance, j'ai le sentiment que chacun de mes projets n'est jamais qu'un nouveau puzzle à résoudre. Certains diront que ce n'est pas du code, moi c'est ce qui me plait, c'est le plus important non ?", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "En dehors ça, je suis aussi une grande bricoleuse. Je rénove ma maison de fond en comble. Ce qui n'est toutefois qu'un nouveau casse-tête à résoudre quand on y regarde d'un peu plus près.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Laissez-vous tenter par les histoires que j'ai à raconter =D", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Bienvenue dans ma zone d'inconfort", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/bienvenue_dans_ma_zone_d_inconfort", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot olivier_leplus 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/olivier_leplus.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Olivier Leplus", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "AWS", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Developer Advocate at AWS and Google Developer Expert in Web Technologies. I love to share knowledge (and love) among developers and people in general.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Cette année, retombez amoureux de CSS ❤️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/cette_annee_retombez_amoureux_de_CSS", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot olivier_poncet 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/olivier_poncet.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Olivier PONCET", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "HAWKSWELL", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Geek, ex-nerd repenti, je code, je teste, je bricole, je soude et parfois fait sauter les plombs. CTO et spécialiste du magiciel, je suis aussi libriste dans l'âme et très impliqué dans le mouvement des logiciels libres.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Créer sa propre VM avec compilation JIT pour les nuls", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/creer_sa_propre_vm_avec_compilation_jit_pour_les_nuls", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot olivier_thierry 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/olivier_thierry.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Olivier THIERRY", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "ASI", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Je suis expert technique chez ASI et compte derrière moi près de 25 ans de développement. Après avoir commencé en Visual Basic, fait un peu de PHP et beaucoup de Java, je me suis tourné vers l'écosystème Javascript depuis une dizaine d'années. J'interviens sur des projets d'applications mobiles (Ionic, React Native), d'applications et sites web (React JS, Gatsby, Next.js) et de plateformes API (Node.js, NestJS). J'ai une appétence particulière pour l'écosystème React. En tant qu'expert technique chez ASI, mon rôle est d'imaginer les solutions techniques pour résoudre les problèmes de nos clients, d'accompagner les développeurs pendant la réalisation des projets et d'assurer la qualité de nos réalisations. Je contribue également à l'animation de notre communauté technique. Ce qui me motive chaque jour : travailler en équipe et voir chacun d'entre nous évoluer et progresser, techniquement mais aussi humainement !", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Et si on arrêtait de basher les ESN ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/et_si_on_arretait_de_basher_les_esn", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot patrice_de_saint_steban 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/patrice_de_saint_steban.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Patrice De Saint Steban", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Depuis plus de 10 ans je me passionne pour le développement d'applications WEB et Mobile, en touchant à toutes les couches du Front au Back jusqu'à son déploiement sur le Cloud.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "J'ai travaillé sur des technologies très différentes, du PHP au JAVA et JAVASCRIPT, du GWT à Angular et React, de Google App Engine à NodeJS. Je m'intéresse maintenant à Flutter et Svelte.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "De la tablette d'argile à ChatGPT : la passionnante histoire de la diffusion du savoir", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/de_la_tablette_d_argile_a_ChatGPT", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot paul_pinault 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/paul_pinault.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Paul Pinault", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Braincube", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Paul le jour", + }, + ], + "style": { + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "type": "text", + "value": " +J'ai 45 ans, 3 enfants et 3 jobs, dont celui de responsable de la stratégie produit sur la marché IIoT pour la société Braincube qui m'occupe à plein temps, ca me laisse encore un peu de temps pour animer des communautés et partager mes connaissances et expériences.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Disk91 la nuit", + }, + ], + "style": { + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "type": "text", + "value": " +Passionné, techos plutôt reconnu dans les eco-systèmes IoT et Crypto-IoT , je blog depuis l'an 2000 environ , youtubeur plus récemment, community manager dans l'Internet de Objets depuis quelques années sur différentes technos. Ces aventures mon conduites à une forte implication dans des technos comme Sigfox, LoRaWan (TheThingsNetwork, Helium), à la création de multiples produits et services commerciaux et open-source dans ces domaines. Je code en C, des fois en assembleur pour l'embarqué, mais le gros de mes dev est en Java, Go, JS pour les backends et frontend de service, bash, docker.. pour déployer tout ca.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "M. Pinault durant les RTT", + }, + ], + "style": { + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "type": "text", + "value": " +Partager mes connaissances et expériences est un de mes moteurs, depuis 22 ans j'enseigne sur différentes universités, écoles d'ingénieurs, sciences Po, sur Clermont-Ferrand, Paris, Grenoble. Dans des matières principalement autour de l'Internet des Objets mais aussi de l'architecture ou l'art du pitch appliqué à la technologie.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Il était une fois un arbre qui parle", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/il_etait_une_fois_un_arbre_qui_parle", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot paul_roye 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/paul_roye.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Paul ROYE", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "SII", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Tech Crafter and DIY enthusiast. Also lead tech at SII.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Corn Hole 2 Turbo : De l'arduino pour l'apéro !", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/corn_hole_2_turbo", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot robin_caroff 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/robin_caroff.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Robin Caroff", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Resonantes", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Technical Lead at Resonantes (", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "http://association.resonantes.fr/", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "http://association.resonantes.fr/", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ") where I am mostly developing the App-Elles Android and iOS app (", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://app-elles.fr/", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://app-elles.fr/", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ").", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Mobile developer since 2011, I am also Co-Founder and Organizer of the GDG Nantes Android (", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://www.meetup.com/fr-FR/gdg_nantes_android/", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.meetup.com/fr-FR/gdg_nantes_android/", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ") and the FRAUG (French Android User Group - ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://www.twitch.tv/frenchandroidusergroup", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://www.twitch.tv/frenchandroidusergroup", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ").", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Technology enthusiast, highly convinced that technology and mobile devices can improve productivity for small as well as for big companies.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "À la découverte du développement mobile, sans les maux de tête", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/a_la_decouverte_du_developpement_mobile", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot sebastien_viale 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/sebastien_viale.png", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Sébastien Viale", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Après l'obtention d’un diplôme en Mécanique des fluides il y a 20 ans, je me suis rapidement orienté vers le développement Java. +Très curieux des nouvelles technologies, je me suis spécialisé depuis 6 ans dans l’écosystème Apache Kafka et l’event driven architecture.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "D'un orchestre figé à un joli ballet aka comment on a propulsé notre monolith dans un pas de danse endiablé 😈", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/d_un_orchestre_fige_a_un_joli_ballet", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot shirley_almosni_chiche 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/shirley_almosni_chiche.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Shirley Almosni Chiche", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "BUILD RH", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Je suis recruteuse IT depuis 10 ans, agent de carrière depuis 5 ans et maman de deux enfants. J’adore aider les entreprises dans leurs méthodes de recrutement, accompagner les individus dans leur projet de carrière, faire bouger les lignes et provoquer de l’impact (même minime), tout cela en mettant une pincée d’humour dans mon quotidien !", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Pour éviter le dirty recruiting, on ne laisse pas ses valeurs dans un coin", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/pour_eviter_le_dirty_recruiting", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot stephane_philippart 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/stephane_philippart.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Stéphane Philippart", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "OVHcloud", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Développeur un jour, développeur toujours !", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Développeur Java depuis de nombreuses d'années, j'ai la joie de connaître le JDK 1.1, JEE, Struts, ... et maintenant Spring, Quarkus, Angular, Groovy, Golang, ...", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Durant plus d'une dizaine d'années j'ai été Architecte Logiciel, métier qui m'a permis de me confronter à de nombreuses problématiques inhérentes aux systèmes d'information toujours complexes dans les grands groupes.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "J'ai eu aussi d'autres vies, notamment dans l'automatisation et la livraison avec la mise place de chaînes de CI/CD basées sur les pipelines as code de Jenkins.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Aimant particulièrement le partage et les relations avec les développeurs je suis devenu DevRel au sein d'OVHcloud. Cette nouvelle aventure me permet de continuer à être au milieu de technologies que j'affectionne comme Kubernetes par exemple mais aussi de continuer à apprendre et découvrir énormément de nouvelles choses. J'ai, notamment, découvert le monde passionnant de l'intelligence artificielle et plus particulièrement du machine learning.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Tout en gardant à l'esprit une de mes principales motivation en tant que DevRel : rendre les développeuses et développeurs heureux.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Toujours dans le partage, je suis le co-créateur du Meetup TADx à Tours, permettant la découverte et partage autour de différents sujets de la tech.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "L'intelligence artificielle expliquée en 20 minutes !", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/intelligence_artificielle_expliquee_en_20_minutes", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot sylvain_coudert 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/sylvain_coudert.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Sylvain Coudert", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Freelance", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Dev .NET depuis 2008, Freelance depuis 2018, Crafter devant l'éternel et debugger de l'infini! J'aime apprendre, transmettre et découvrir. Chanteur rockeur intermittent et papa à temps plein, j'aime également prendre le temps de regarder le vent agiter les feuilles d'un arbre.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "🗣️ Zut ! J'aurais du dire ça ! 🙊 Astuces pour parler avec aisance en public 🎙️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/astuces_pour_parler", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot sylvain_gougouzian 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/sylvain_gougouzian.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Sylvain Gougouzian", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Senior Dev @ Zenika depuis Septembre 2022", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Plus d'infos sur ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://sylvain.gougouzian.fr", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://sylvain.gougouzian.fr", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": " et tous mes liens sociaux sont sur ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "https://gouz.dev", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://gouz.dev", + }, + }, + "type": "actionable", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Comment gérer des journées de 35h ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/comment_gerer_des_journees_de_35h", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot virginie_casavecchia 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/virginie_casavecchia.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Virginie CASAVECCHIA", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Actoll", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Diplômée en 2010 d'un Master de cryptologie et sécurité informatique, je travaille depuis 2011 au sein de la société Actoll proposant des solutions de paiement par carte bancaire sur autoroute, dans les transports en commun ou encore pour du don, ainsi que des solutions de billettique (~gestion de titres de transports) pour les réseaux de transport en commun de diverses tailles. ", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Initialement développeuse, je suis ensuite passée côté intégration et qualification des solutions de paiement. ", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis aujourd'hui à la fois responsable qualification, intégratrice, formatrice en interne ou pour les clients, support client, rédactrice de documentations : en somme baby-DevRel 🦄🥑. ", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Parallèlement, je suis membre d'un groupe de musique intitulé Les Marmottes depuis 2011. Nous faisons principalement des reprises instrumentales de morceaux de métal, bandes originales de films/séries/jeux vidéos. ", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Revivez la cryptographie de nos ancêtres, de Lysandre de Sparte à Blaise de Vigenère", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/revivez_la_cryptographie_de_nos_ancetres", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot virginie_ferey 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/virginie_ferey.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Virginie Ferey", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "ENSA Normandie", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Quelques mots pour me situer un peu", + }, + ], + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Côté perso", + }, + ], + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je fais", + }, + ], + "style": { + "fontSize": 18, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Je traîne mes guêtres toutes les semaines dans un HackerSpace, où je retrouve une bande de copains dont les centres d'intérêts sont très variés. Un ami a commencé à me parler d'algorithmes de compression, je vais creuser le sujet pour moi-même et probablement me faire une note de synthèse qui pourrait se transformer en présentation.", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "J'aime que les choses fonctionnent : je m'implique pour ça, en étant bénévole là où ça me semble pertinent selon mes disponibilités mentales et temporelles. En ce moment c'est présidence d'une AMAP, participation au CA d'une crèche associative, et une proposition de participation logistique à DevoxxFR", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + ], + "direction": "vertical", + "padding": { + "left": 8, + }, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "J'aime", + }, + ], + "style": { + "fontSize": 18, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Les Lego, les jeux de construction en général, les puzzles, les jeux de société et les jeux de rôles.", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Voler (en parapente, par exemple, ou bien par procuration en faisant voler un cerf-volant), et faire du vélo (dans les descentes qui vont vite, c'est un peu comme voler :-) !)", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Découvrir : je suis curieuse, dès qu'une opportunité s'offre à moi j'essaie de la saisir : participer à un jeu de rôle grandeur nature, aller voir un match de foot, de hockey sur glace, un concert de Métal, faire une présentation lors d'une conférence, etc. ;-)", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "L'humour, les jeux de mots pourris. Je pratique l'auto-dérision, c'est essentiel ! Par exemple, là, je ne sais pas quoi renseigner côté perso qui ne soit pas encore plus cliché que ce qui précède, donc je vais m'arrêter là.", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + ], + "direction": "vertical", + "padding": { + "left": 8, + }, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "Côté pro", + }, + ], + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Concernant mes choix d'orientation professionnelle, dès le départ je ne pouvais concéder une chose : passer 7 à 8 heures par jour à faire quelque chose qui m'ennuie pour gagner davantage ou sécuriser un emploi, c'était NON. +Ça m'a pris un peu de temps de trouver le domaine dans lequel je me plairais. J'aime les gens, et j'aime comprendre comment fonctionnent les choses. Mais ça, ce n'est pas facile avec les gens :-D. Je trouve aujourd'hui cet équilibre avec l'informatique.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Le boulot", + }, + ], + "style": { + "fontSize": 18, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis en poste en tant que technicienne informatique dans une petite équipe, au sein d'un établissement d'enseignement supérieur : pour moi ça veut dire que je touche à plein de trucs. J'administre quelques serveurs, je gère des équipements de captation vidéo, je mets du papier et des toners dans les imprimantes, je fais de la gestion de parc (inventaire et déploiement), et du support utilisateur.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "La formation", + }, + ], + "style": { + "fontSize": 18, + "fontWeight": "bold", + }, + "type": "text", + "value": "", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Un bac pro \\"Production graphique\\" à 30 ans", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Un titre RNCP niveau 5 \\"Technicien Systèmes et Administration Réseaux\\" en alternance à 40 ans", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Un master ou un titre d'ingénieur, à 50 ans ? Un doctorat à 60 ans ? ;-)", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "Beaucoup d'auto-formation, avec tout ce que ça implique d'errances mais aussi de découvertes !", + }, + ], + "type": "flex", + }, + "type": "flexible", + }, + ], + "spacing": 8, + "type": "flex", + }, + ], + "direction": "vertical", + "padding": { + "left": 8, + }, + "type": "flex", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Imager, matérialiser sa pensée", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/imager_materialiser_sa_pensee", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot wassim_chegham 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/wassim_chegham.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Wassim Chegham", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Microsoft", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Wassim is a Senior Developer Advocate at Microsoft and a contributor to the Angular and Node.js projects. He is the author of many open-source projects such as xlayers.dev and ngx.tools. He is also a GDE for the Angular team, the Google Assistant teams at Google, and an Ambassador for Auth0. He is a member of the Node.js Foundation. A former member of the Angular Universal core team. He is currently learning about music composition and drawing. You can reach out to him on Twitter @manekinekko and wassim.dev.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Dis papa, c'est quoi l'impression 3D ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/dis_papa_c_est_quoi_impression_3D", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot william_bartlett 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/william_bartlett.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "William Bartlett", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Zenika", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Second generation developer, William had his first email account in 1990 at the age of 6 and fell into IT at the age of 10. On his journey across the universe of programming, he has roamed the superpowers of procedural and object-oriented where C, Python or Java are natively spoken. He has also embarked on several treks to the more exotic lands of the functional world, equipped only with a lambda and a few parentheses. His familiar is the penguin and his motto is “Use the right tool at the right time”.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Escape Camp 🏃🏕️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/escape_camp_part_1", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Escape Camp 🏃🏕️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/escape_camp_part_2", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot willy_malvault 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/willy_malvault.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Willy Malvault", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Sogilis", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "I started with my carreer with a PhD in peer-to-peer, Cloud and extreme decentralization between 2008 and 2011. Since then I've worked in several places mainly as developer, doing a lot of tests in various ways particularilry un distributed environment. Since 2018 I'm working at Sogilis, where I'm a senior consultant on architecture, agility, Cloud and security.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Since 2020 I'm officially a Cloud Native and cybersecurity evangelist.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Revivez la cryptographie de nos ancêtres, de Lysandre de Sparte à Blaise de Vigenère", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/revivez_la_cryptographie_de_nos_ancetres", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "🗣️ Zut ! J'aurais du dire ça ! 🙊 Astuces pour parler avec aisance en public 🎙️", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/astuces_pour_parler", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot yann_thomas_le_moigne 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/yann_thomas_le_moigne.jpeg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Yann-Thomas Le Moigne", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Apside TOP", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Développeur informatique passionné par les technologies Angular, Java, Spring et Quarkus.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis curieux et j'aime beaucoup ce qui peut me faciliter la vie. C'est pourquoi je propose de partager mon expérience sur certains outils de développement.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je suis également Sapeur Pompier Volontaire depuis maintenant 9 ans.", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Vite, une nouvelle ère de tooling front ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/vite_une_nouvelle_ere_de_tooling_front", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot yannick_guern 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/yannick_guern.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Yannick Guern", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Clever-Cloud", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "children": [ + { + "children": [ + { + "type": "text", + "value": "Je m'appelle Yannick Guern connu sous les réseaux sous le pseudo d'Akanoa.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je travaille chez Clever Cloud en tant que développeur base de données.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Je fais du Rust depuis plus de 3 ans maintenant et j'essaie de présenter la beauté de cet écosystème au plus grand nombre.", + }, + ], + "type": "text", + "value": "", + }, + { + "children": [ + { + "type": "text", + "value": "Mon plaisir est de vulgariser des concepts pour les amener à la compréhension du plus grand monde, vous pouvez retrouver mon travail ", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "ici", + }, + ], + "style": { + "color": 4279872746, + "decoration": "underline", + }, + "type": "text", + "value": "", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "https://lafor.ge/", + }, + }, + "type": "actionable", + }, + { + "type": "text", + "value": ".", + }, + ], + "type": "text", + "value": "", + }, + ], + "direction": "vertical", + "spacing": 8, + "type": "flex", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Dessines-moi Rust ✏🦀", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/dessines_moi_rust", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot yohan_lasorsa 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/yohan_lasorsa.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Yohan Lasorsa", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Microsoft", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Passionné d'Open Source et d'artisanat logiciel, le web est le terrain de jeu ultime pour Yohan. Avec plus de 10 ans d'expérience dans divers domaines tels que la recherche appliquée sur le mobile et l'IoT, en passant par le développement et l'architecture d'applications cloud, il a commencé avec des stacks de bas niveau avant de plonger dans le développement web. En tant qu'ingénieur fullstack et bricoleur du dimanche, il aime maintenant pousser des morceaux de JavaScript partout où il peut, en partageant sa passion avec les autres.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Créer des objets 3D avec du code, grâce à OpenSCAD", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/creer_des_objets_3D_avec_du_code", + }, + }, + "type": "actionable", + }, + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Dis papa, c'est quoi l'impression 3D ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/dis_papa_c_est_quoi_impression_3D", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot yuliana_khorolich 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/yuliana_khorolich.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Yulianna KHOROLICH", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "SFEIR", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Hi everyone! My name is Yulianna, and I am a Solutions Architect [Data & ML] at SFEIR. Even though I've always had a soft spot for data, I got the chance to participate in all phases of the software development lifecycle in my career path. At the moment, I enable data-driven decision-making by creating simple solutions that are easily maintainable, cost-effective, well-documented and documented, and most importantly, documented.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Récits d'épouvante MLOps : Oseras-tu y faire face ?", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/recits_d_epouvante_mlops", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; + +exports[`speaker page snapshot yvonnick_frin 1`] = ` +{ + "children": [ + { + "alignment": "center", + "children": [ + { + "height": 100, + "src": "speakers/yvonnick_frin.jpg", + "type": "image", + "width": 100, + }, + { + "children": [ + { + "style": { + "fontSize": 24, + "fontWeight": "bold", + }, + "type": "text", + "value": "Yvonnick FRIN", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Pix", + }, + ], + "direction": "vertical", + "type": "flex", + }, + ], + "crossAxisAlignment": "center", + "runAlignment": "center", + "runSpacing": 16, + "spacing": 16, + "type": "wrap", + }, + { + "type": "text", + "value": "Yvonnick développeur chez Pix. Curieux et passionné, il aime découvrir les dernières technologies du Web. Social, il co-organise NantesJS.", + }, + { + "child": { + "type": "text", + "value": "", + }, + "constraints": { + "maxHeight": 1, + "minHeight": 1, + }, + "decoration": { + "color": 4278190080, + }, + "type": "container", + }, + { + "style": { + "fontSize": 20, + "fontWeight": "bold", + }, + "type": "text", + "value": "Séances", + }, + { + "children": [ + { + "child": { + "children": [ + { + "type": "text", + "value": "•", + }, + { + "child": { + "type": "text", + "value": "Apprenons ensemble grâce aux bookclubs", + }, + "type": "flexible", + }, + ], + "crossAxisAlignment": "center", + "spacing": 8, + "type": "flex", + }, + "onPressed": { + "action": "@lenra:navTo", + "props": { + "path": "/sessions/apprenons_ensemble", + }, + }, + "type": "actionable", + }, + ], + "direction": "vertical", + "spacing": 16, + "type": "flex", + }, + ], + "crossAxisAlignment": "stretch", + "direction": "vertical", + "spacing": 16, + "type": "flex", +} +`; diff --git a/test/views/pages/session.test.js b/test/views/pages/session.test.js index ef8d6c0..733323e 100644 --- a/test/views/pages/session.test.js +++ b/test/views/pages/session.test.js @@ -1,4 +1,4 @@ -import { sessions } from "../../../src/camping-data.js"; +import { sessions, speakers } from "../../../src/camping-data.js"; import { default as buildSession } from "../../../src/views/pages/session.js"; // const schema = "https://raw.githubusercontent.com/lenra-io/components-api/beta/api/component.schema.json"; diff --git a/test/views/pages/speaker.test.js b/test/views/pages/speaker.test.js new file mode 100644 index 0000000..8ac615e --- /dev/null +++ b/test/views/pages/speaker.test.js @@ -0,0 +1,15 @@ +import { sessions, speakers } from "../../../src/camping-data.js"; +import { default as buildSpeaker } from "../../../src/views/pages/speaker.js"; + +// const schema = "https://raw.githubusercontent.com/lenra-io/components-api/beta/api/component.schema.json"; + +describe("speaker page", () => { + describe("snapshot", () => { + test.each(Object.keys(speakers))("%s", key => { + const component = buildSpeaker([], { context: { pathParams: { key } } }); + expect(component.toJSON()).toMatchSnapshot(); + }); + }); + + // TODO: ajout la validation JSON Schema +});