diff --git a/EuroPythonBot/bot.py b/EuroPythonBot/bot.py index e2ce2eff..db7f4ade 100644 --- a/EuroPythonBot/bot.py +++ b/EuroPythonBot/bot.py @@ -11,7 +11,7 @@ import configuration from cogs.ping import Ping from cogs.registration import Registration -from helpers.pretix_connector import PretixOrder +from helpers.eventbrite_connector import EventbriteOrder load_dotenv(Path(__file__).resolve().parent.parent / ".secrets") DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN") @@ -75,14 +75,15 @@ async def main(): async with bot: await bot.add_cog(Ping(bot)) await bot.add_cog(Registration(bot)) - await bot.load_extension("extensions.programme_notifications") + # Amazing feature that was replaced by a simpler script + #await bot.load_extension("extensions.programme_notifications") await bot.load_extension("extensions.organisers") await bot.start(DISCORD_BOT_TOKEN) if __name__ == "__main__": bot = Bot() - orders = PretixOrder() + orders = EventbriteOrder() try: asyncio.run(main()) except KeyboardInterrupt: diff --git a/EuroPythonBot/cogs/registration.py b/EuroPythonBot/cogs/registration.py index f10541c0..47f97b07 100644 --- a/EuroPythonBot/cogs/registration.py +++ b/EuroPythonBot/cogs/registration.py @@ -6,19 +6,22 @@ from configuration import Config from error import AlreadyRegisteredError, NotFoundError from helpers.channel_logging import log_to_channel -from helpers.pretix_connector import PretixOrder +from helpers.eventbrite_connector import EventbriteOrder config = Config() -order_ins = PretixOrder() +order_ins = EventbriteOrder() EMOJI_POINT = "\N{WHITE LEFT POINTING BACKHAND INDEX}" +EMOJI_ONE = "1️⃣" +EMOJI_TWO = "2️⃣" +EMOJI_THREE = "3️⃣" ZERO_WIDTH_SPACE = "\N{ZERO WIDTH SPACE}" REGISTERED_LIST = {} _logger = logging.getLogger(f"bot.{__name__}") -class RegistrationButton(discord.ui.Button["Registration"]): +class RegistrationButton(discord.ui.Button["Registro"]): def __init__(self, x: int, y: int, label: str, style: discord.ButtonStyle): super().__init__(style=discord.ButtonStyle.secondary, label=ZERO_WIDTH_SPACE, row=y) self.x = x @@ -33,13 +36,13 @@ async def callback(self, interaction: discord.Interaction) -> None: await interaction.response.send_modal(RegistrationForm()) -class RegistrationForm(discord.ui.Modal, title="Europython 2023 Registration"): +class RegistrationForm(discord.ui.Modal, title="Registro PyConES23"): order = discord.ui.TextInput( - label="Order", + label="N. de Pedido", required=True, - min_length=4, - max_length=6, - placeholder="5-character combination of capital letters and numbers", + min_length=10, + max_length=12, + placeholder="Número de 10 dígitos que viene luego de un '#'", ) name = discord.ui.TextInput( @@ -48,7 +51,7 @@ class RegistrationForm(discord.ui.Modal, title="Europython 2023 Registration"): min_length=3, max_length=50, style=discord.TextStyle.short, - placeholder="Your Full Name as printed on your ticket/badge", + placeholder="Tu nombre completo como está en tu ticket", ) async def on_submit(self, interaction: discord.Interaction) -> None: @@ -58,7 +61,7 @@ async def on_submit(self, interaction: discord.Interaction) -> None: name=self.name.value, order=self.order.value, ) - _logger.info("Assigning %r roles=%r", self.name.value, roles) + _logger.info("Asignando %r roles=%r", self.name.value, roles) for role in roles: role = discord.utils.get(interaction.guild.roles, id=role) await interaction.user.add_roles(role) @@ -72,17 +75,17 @@ async def on_submit(self, interaction: discord.Interaction) -> None: roles=roles, ) await interaction.response.send_message( - f"Thank you {self.name.value}, you are now registered!\n\nAlso, your nickname was" - f"changed to the name you used to register your ticket. This is also the name that" - f" would be on your conference badge, which means that your nickname can be your" - f"'virtual conference badge'.", + f"Gracias {self.name.value}, ¡ya tienes tu registro!\n\nTambién, tu nickname fue" + f" cambiado al nombre que usaste para registrar tu ticket. Este es también el nombre que" + f" estará en tu credencial en la conferencia, lo que significa que tu nickname puede ser" + f" tu 'credencial virtual' de la conferencia.", ephemeral=True, delete_after=20, ) async def on_error(self, interaction: discord.Interaction, error: Exception) -> None: # Make sure we know what the error actually is - _logger.error("An error occurred!", exc_info=error) + _logger.error("Ocurrió un error!", exc_info=error) # log error message in discord channel await log_to_channel( @@ -91,12 +94,12 @@ async def on_error(self, interaction: discord.Interaction, error: Exception) -> error=error, ) if isinstance(error, AlreadyRegisteredError): - _msg = "You have already registered! If you think it is not true" + _msg = "¡Ya te registraste! Si crees que no es verdad" elif isinstance(error, NotFoundError): - _msg = "We cannot find your ticket, double check your input and try again, or" + _msg = "No podemos encontrar tu ticket, verifica nuevamente la información que ingresaste, o" else: - _msg = "Something went wrong," - _msg += f" ask for help in <#{config.REG_HELP_CHANNEL_ID}>" + _msg = "Algo no salió bien, " + _msg += f" pide ayuda en <#{config.REG_HELP_CHANNEL_ID}>" await interaction.response.send_message(_msg, ephemeral=True, delete_after=180) @@ -106,7 +109,7 @@ def __init__(self): super().__init__(timeout=None) self.value = None self.add_item( - RegistrationButton(0, 0, f"Register here {EMOJI_POINT}", discord.ButtonStyle.green) + RegistrationButton(0, 0, f"Registrate aquí {EMOJI_POINT}", discord.ButtonStyle.green) ) @@ -127,18 +130,16 @@ async def on_ready(self): await order_ins.fetch_data() order_ins.load_registered() - _title = "Welcome to EuroPython 2023 on Discord! 🎉🐍" + _title = "Te damos la bienvenida al discord de la PyConES23 🎉🐍" _desc = ( - "Follow these steps to complete your registration:\n\n" - f'1️⃣ Click on the green "Register Here {EMOJI_POINT}" button.\n\n' - '2️⃣ Fill in the "Order" (found by clicking the order URL in your confirmation ' - 'email from support@pretix.eu with the Subject: Your order: XXXX) and "Full Name" ' - "(as printed on your ticket/badge).\n\n" - '3️⃣ Click "Submit". We\'ll verify your ticket and give you your role based on ' - "your ticket type.\n\n" - "Experiencing trouble? Ask for help in the registration-help channel or from a " - "volunteer in yellow t-shirt at the conference.\n\n" - "See you on the server! 🐍💻🎉" + "Sigue los siguientes paso para completar el registro:\n\n" + f'{EMOJI_ONE} Haz clic en el botón verde "Registrate Aquí {EMOJI_POINT}".\n\n' + f'{EMOJI_TWO} Rellena el "Número de pedido" (que encuentras en el email de Eventbrite cuando ' + 'adquiriste tu entrada con el asunto: "Tus entradas para el evento PyConES 2023 ' + 'Tenerife", sin "#") y "Nombre Completo" (como está en la misma orden).\n\n' + f'{EMOJI_THREE} Haz clic "Submit". Verificaremos tu ticket y te asignaremos el rol basado en el tipo..\n\n' + f"¿Tienes algún problema? Pide ayuda en el canal <#{config.REG_HELP_CHANNEL_ID}>.\n\n" + "¡Nos vemos en el servidor! 🐍💻🎉" ) view = RegistrationView() diff --git a/EuroPythonBot/config.toml b/EuroPythonBot/config.toml index 2312e035..38279720 100644 --- a/EuroPythonBot/config.toml +++ b/EuroPythonBot/config.toml @@ -1,37 +1,34 @@ [server] -GUILD=1120766458528542794 +GUILD=1125730669406998618 [roles] -ORGANISERS=1120775903274868857 -VOLUNTEERS=1120776478825664532 -VOLUNTEERS_ONSITE=1124379825826709544 -VOLUNTEERS_REMOTE=1124379970173681664 -SPEAKERS=1120776091393593426 -SPONSORS=1120776149644087406 -PARTICIPANTS=1122452618829107220 -PARTICIPANTS_ONSITE=1120774936655568896 -PARTICIPANTS_REMOTE=1120774557394014298 +MODERATORS=1125756054001684560 +ORGANISERS=1125756245626863697 +VOLUNTEERS=1125756316942602400 +SPEAKERS=1125756357820289024 +SPONSORS=1125756395409649706 +PARTICIPANTS=1125756876546646097 +PARTICIPANTS_REMOTE=1125757073154646106 [registration] -REG_CHANNEL_ID=1120789543000477818 -REG_HELP_CHANNEL_ID=1122535065377837116 -REG_LOG_CHANNEL_ID=1120791994789265675 +REG_CHANNEL_ID=1125911236857573486 +REG_HELP_CHANNEL_ID=1125755854478651392 +REG_LOG_CHANNEL_ID=1125755915526742077 -[pretix] -PRETIX_BASE_URL = "https://pretix.eu/api/v1/organizers/europython/events/ep2023" +[eventbrite] TICKET_TO_ROLES_JSON = "ticket_to_roles_prod.json" [logging] LOG_LEVEL = "INFO" [programme_notifications] -timezone = "Europe/Prague" +timezone = "Atlantic/Canary" timewarp = false -conference_days_first = "2023-07-19" -conference_days_last = "2023-07-21" -pretalx_schedule_url = "https://pretalx.com/api/events/europython-2023/schedules/latest/" -europython_session_base_url = "https://ep2023.europython.eu/session/{slug}" -europython_api_session_url = "https://ep2023.europython.eu/api/session/{code}" +conference_days_first = "2023-10-06" +conference_days_last = "2023-10-08" +pretalx_schedule_url = "https://pretalx.com/api/events/pycones-2023/schedules/latest/" +europython_session_base_url = "https://charlas.2023.es.pycon.org/pycones-2023/talk/{slug}" +europython_api_session_url = "https://charlas.2023.es.pycon.org/api/session/{code}" [[programme_notifications.notification_channels]] webhook_id = "PYTHON_DISCORD" @@ -45,65 +42,3 @@ include_channel_in_embeds = true # Forum Hall webhook_id = "ROOM_2189" discord_channel_id = "1120780288755253338" - -[programme_notifications.rooms.2189.livestreams] -# Forum Hall Livestream ULRs -"2023-07-19" = "https://europython.eu/live/forum" -"2023-07-20" = "https://europython.eu/live/forum" -"2023-07-21" = "https://europython.eu/live/forum" - - -[programme_notifications.rooms.2190] -# South Hall 2A -webhook_id = "ROOM_2190" -discord_channel_id = "1120780345575477421" - -[programme_notifications.rooms.2190.livestreams] -# South Hall 2A Livestream URLs -"2023-07-19" = "https://europython.eu/live/south-hall-2a" -"2023-07-20" = "https://europython.eu/live/south-hall-2a" -"2023-07-21" = "https://europython.eu/live/south-hall-2a" - -[programme_notifications.rooms.2191] -# South Hall 2B -webhook_id = "ROOM_2191" -discord_channel_id = "1120780371622121612" - -[programme_notifications.rooms.2191.livestreams] -# South Hall 2B Livestream URLs -"2023-07-19" = "https://europython.eu/live/south-hall-2b" -"2023-07-20" = "https://europython.eu/live/south-hall-2b" -"2023-07-21" = "https://europython.eu/live/south-hall-2b" - -[programme_notifications.rooms.2194] -# North Hall -webhook_id = "ROOM_2194" -discord_channel_id = "1120780401791750315" - -[programme_notifications.rooms.2194.livestreams] -# North Hall Livestream URLs -"2023-07-19" = "https://europython.eu/live/north-hall" -"2023-07-20" = "https://europython.eu/live/north-hall" -"2023-07-21" = "https://europython.eu/live/north-hall" - -[programme_notifications.rooms.2192] -# Terrace 2A -webhook_id = "ROOM_2192" -discord_channel_id = "1120780461195657387" - -[programme_notifications.rooms.2192.livestreams] -# Terrace 2A Livestream URLs -"2023-07-19" = "https://europython.eu/live/terrace-2a" -"2023-07-20" = "https://europython.eu/live/terrace-2a" -"2023-07-21" = "https://europython.eu/live/terrace-2a" - -[programme_notifications.rooms.2193] -# Terrace 2B -webhook_id = "ROOM_2193" -discord_channel_id = "1120780490576777287" - -[programme_notifications.rooms.2193.livestreams] -# Terrace 2B Livestream URLs -"2023-07-19" = "https://europython.eu/live/terrace-2b" -"2023-07-20" = "https://europython.eu/live/terrace-2b" -"2023-07-21" = "https://europython.eu/live/terrace-2b" diff --git a/EuroPythonBot/configuration.py b/EuroPythonBot/configuration.py index 470e7fba..8cfe0003 100644 --- a/EuroPythonBot/configuration.py +++ b/EuroPythonBot/configuration.py @@ -42,9 +42,8 @@ def __init__(self): self.REG_HELP_CHANNEL_ID = int(config["registration"]["REG_HELP_CHANNEL_ID"]) self.REG_LOG_CHANNEL_ID = int(config["registration"]["REG_LOG_CHANNEL_ID"]) - # Pretix - self.PRETIX_BASE_URL = config["pretix"]["PRETIX_BASE_URL"] - self.TICKET_TO_ROLES_JSON = config["pretix"]["TICKET_TO_ROLES_JSON"] + # Eventbrite + self.TICKET_TO_ROLES_JSON = config["eventbrite"]["TICKET_TO_ROLES_JSON"] # Logging self.LOG_LEVEL = config.get("logging", {}).get("LOG_LEVEL", "INFO") diff --git a/EuroPythonBot/extensions/organisers/organisers.py b/EuroPythonBot/extensions/organisers/organisers.py index e534fa59..75f48a38 100644 --- a/EuroPythonBot/extensions/organisers/organisers.py +++ b/EuroPythonBot/extensions/organisers/organisers.py @@ -28,14 +28,12 @@ async def participants(self, ctx: commands.Context) -> None: embed.add_field(name="Members (total)", value=counts.everyone, inline=False) embed.add_field(name="Unregistered", value=counts.not_registered, inline=False) embed.add_field(name="Participants", value=counts.participants, inline=False) - embed.add_field(name="Onsite Participants", value=counts.participants_onsite, inline=False) embed.add_field(name="Remote Participants", value=counts.participants_remote, inline=False) embed.add_field(name="Sponsors", value=counts.sponsors, inline=False) embed.add_field(name="Speakers", value=counts.speakers, inline=False) embed.add_field(name="Volunteers", value=counts.volunteers, inline=False) - embed.add_field(name="Onsite Volunteers", value=counts.volunteers_onsite, inline=False) - embed.add_field(name="Remote Volunteers", value=counts.volunteers_remote, inline=False) embed.add_field(name="Organisers", value=counts.organisers, inline=False) + embed.add_field(name="Moderators", value=counts.moderators, inline=False) await ctx.send(embed=embed) def _get_counts(self, guild: discord.Guild) -> "_RoleCount": @@ -84,10 +82,8 @@ class _RoleCount: not_registered: int organisers: int volunteers: int - volunteers_onsite: int sponsors: int speakers: int - volunteers_remote: int participants: int - participants_onsite: int participants_remote: int + moderators: int diff --git a/EuroPythonBot/extensions/organisers/roles.py b/EuroPythonBot/extensions/organisers/roles.py index 24d32395..c51752bf 100644 --- a/EuroPythonBot/extensions/organisers/roles.py +++ b/EuroPythonBot/extensions/organisers/roles.py @@ -6,12 +6,10 @@ class Roles: """Role mapping for the organisers extension.""" + moderators: int organisers: int volunteers: int - volunteers_onsite: int - volunteers_remote: int - sponsors: int speakers: int + sponsors: int participants: int - participants_onsite: int participants_remote: int diff --git a/EuroPythonBot/extensions/programme_notifications/configuration.py b/EuroPythonBot/extensions/programme_notifications/configuration.py deleted file mode 100644 index 6a603e05..00000000 --- a/EuroPythonBot/extensions/programme_notifications/configuration.py +++ /dev/null @@ -1,74 +0,0 @@ -import os -from collections.abc import Mapping -from typing import Final - -import arrow -import attrs -import cattrs -import toml -import yarl -from attrs import validators - -import configuration - -_WEBHOOK_ENVVAR_PREFIX: Final = "DISCORD_WEBHOOK_" - -# Simplified validators -_INSTANCE_OF_STR = validators.instance_of(str) -_INSTANCE_OF_URL = validators.instance_of(yarl.URL) -_INSTANCE_OF_DT = validators.instance_of(arrow.Arrow) -_INSTANCE_OF_BOOL = validators.instance_of(bool) -_API_SESSION_URL = validators.and_(_INSTANCE_OF_STR, lambda _i, _a, u: "{code}" in u) -_WEBSITE_SESSION_URL = validators.and_(_INSTANCE_OF_STR, lambda _i, _a, u: "{slug}" in u) -_URL_MAPPING = validators.deep_mapping(_INSTANCE_OF_STR, _INSTANCE_OF_URL) -_URL_LIST = validators.deep_iterable(_INSTANCE_OF_URL, validators.instance_of(list)) - - -@attrs.define(frozen=True) -class RoomConfiguration: - """Configuration for a room.""" - - discord_channel_id: str = attrs.field(validator=validators.matches_re(r"\d+")) - webhook_id: str - livestreams: Mapping[str, yarl.URL] - - -@attrs.define(frozen=True) -class NotificationChannel: - """A webhook for schedule notifications with a session overview.""" - - webhook_id: str - include_channel_in_embeds: bool - - -@attrs.define(frozen=True) -class NotifierConfiguration: - """Configuration for the schedule notifier.""" - - timezone: str = attrs.field(validator=_INSTANCE_OF_STR) - conference_days_first: arrow.Arrow = attrs.field(validator=_INSTANCE_OF_DT) - conference_days_last: arrow.Arrow = attrs.field(validator=_INSTANCE_OF_DT) - europython_session_base_url: str = attrs.field(validator=_WEBSITE_SESSION_URL) - europython_api_session_url: str = attrs.field(validator=_API_SESSION_URL) - pretalx_schedule_url: str = attrs.field(validator=_INSTANCE_OF_STR) - notification_channels: list[NotificationChannel] - rooms: Mapping[str, RoomConfiguration] - webhooks: Mapping[str, yarl.URL] = attrs.field(repr=False, validator=_URL_MAPPING) - timewarp: bool = attrs.field(validator=_INSTANCE_OF_BOOL, default=False) - - @classmethod - def from_environment(cls, config: configuration.Config) -> "NotifierConfiguration": - """Create a NotifierConfiguration from the environment.""" - with config.CONFIG_PATH.open("r", encoding="utf-8") as config_file: - notifier_config = toml.load(config_file)["programme_notifications"] - - notifier_config["webhooks"] = { - key.removeprefix(_WEBHOOK_ENVVAR_PREFIX): value - for key, value in os.environ.items() - if key.startswith(_WEBHOOK_ENVVAR_PREFIX) - } - timezone = notifier_config["timezone"] - converter = cattrs.Converter() - converter.register_structure_hook(arrow.Arrow, lambda v, _: arrow.get(v, tzinfo=timezone)) - converter.register_structure_hook(yarl.URL, lambda v, t: t(v)) - return converter.structure(notifier_config, cls) diff --git a/EuroPythonBot/extensions/programme_notifications/domain/europython.py b/EuroPythonBot/extensions/programme_notifications/domain/europython.py deleted file mode 100644 index d367cae2..00000000 --- a/EuroPythonBot/extensions/programme_notifications/domain/europython.py +++ /dev/null @@ -1,89 +0,0 @@ -"""Models to represent EuroPython sessions.""" -import arrow -import attrs -import yarl -from attrs import validators - -_optional_string = validators.optional(validators.instance_of(str)) -_optional_int = validators.optional(validators.instance_of(int)) -_optional_url = validators.optional(validators.instance_of(yarl.URL)) -_optional_arrow = validators.optional(validators.instance_of(arrow.Arrow)) - - -@attrs.define(frozen=True) -class Speaker: - """A speaker associated with a session.""" - - code: str = attrs.field(validator=validators.instance_of(str)) - name: str = attrs.field(validator=validators.instance_of(str)) - avatar: str | None = attrs.field(validator=_optional_string, default=None) - - -_list_of_speakers = validators.deep_iterable( - validators.instance_of(Speaker), validators.instance_of(list) -) - - -@attrs.define(frozen=True) -class TranslatedString: - """A translated string with an `en` field for English.""" - - en: str = attrs.field(alias="en", validator=validators.instance_of(str)) - - -_optional_ts = validators.optional(validators.instance_of(TranslatedString)) - - -@attrs.define(frozen=True) -class Slot: - """The slot information of a session.""" - - room_id: int = attrs.field(validator=validators.instance_of(int)) - start: arrow.Arrow = attrs.field(validator=validators.instance_of(arrow.Arrow)) - room: TranslatedString | None = attrs.field(validator=_optional_ts, default=None) - - -@attrs.define() -class Session: - """A conference session.""" - - code: str = attrs.field(validator=validators.instance_of(str)) - slot: Slot = attrs.field(validator=validators.instance_of(Slot)) - speakers: list[Speaker] = attrs.field(validator=_list_of_speakers, default=attrs.Factory(list)) - title: str | None = attrs.field(validator=_optional_string, default=None) - duration: int | None = attrs.field(validator=_optional_int, default=None) - abstract: str | None = attrs.field(validator=_optional_string, default=None) - track: TranslatedString | None = attrs.field(validator=_optional_ts, default=None) - url: yarl.URL | None = attrs.field(validator=_optional_url, default=None) - experience: str | None = attrs.field(validator=_optional_string, default=None) - livestream_url: yarl.URL | None = attrs.field(validator=_optional_url, default=None) - discord_channel_id: str | None = attrs.field(validator=_optional_string, default=None) - - -@attrs.define(frozen=True) -class Break: - """Represents schedule break information fetched from Pretalx.""" - - room: TranslatedString = attrs.field(validator=validators.instance_of(TranslatedString)) - room_id: int = attrs.field(validator=validators.instance_of(int)) - start: arrow.Arrow = attrs.field(validator=validators.instance_of(arrow.Arrow)) - end: arrow.Arrow = attrs.field(validator=validators.instance_of(arrow.Arrow)) - description: TranslatedString = attrs.field(validator=validators.instance_of(TranslatedString)) - - -@attrs.define(frozen=True) -class Schedule: - """A conference schedule, as fetched from Pretalx.""" - - sessions: list[Session] = attrs.field( - validator=validators.deep_iterable( - validators.instance_of(Session), validators.instance_of(list) - ), - ) - version: str = attrs.field(validator=validators.instance_of(str)) - schedule_hash: str = attrs.field(validator=validators.matches_re(r"[0-9a-f]{40}")) - breaks: list[Break] = attrs.field( - validator=validators.deep_iterable( - validators.instance_of(Break), validators.instance_of(list) - ), - ) diff --git a/EuroPythonBot/extensions/programme_notifications/domain/services/session_to_embed.py b/EuroPythonBot/extensions/programme_notifications/domain/services/session_to_embed.py deleted file mode 100644 index 73dd3e74..00000000 --- a/EuroPythonBot/extensions/programme_notifications/domain/services/session_to_embed.py +++ /dev/null @@ -1,191 +0,0 @@ -"""Translate EuroPython sessions to Discord embeds.""" -import textwrap -from typing import Final - -from extensions.programme_notifications.domain import discord, europython - -_AUTHOR_WIDTH: Final = 128 -_ABSTRACT_WIDTH: Final = 200 -_ABSTRACT_EMPTY: Final = "*This session does not have an abstract.*" -_TITLE_WIDTH: Final = 128 -_FIELD_VALUE_EMTPY: Final = "—" -_EXPERIENCE_COLORS: Final = { - "advanced": 13846600, - "intermediate": 16764229, - "beginner": 6542417, -} -_EUROPYTHON_WEBSITE: Final = "[europython.eu](https://europython.eu)" - - -def create_session_embed( - session: europython.Session, - include_discord_channel: bool = True, -) -> discord.Embed: - """Create a Discord embed for a conference session. - - :param session: The session information as provided by Pretalx - :param include_discord_channel: If the discord channel should be - linked in the embed - :return: A Discord embed for this session - """ - livestream_value = ( - f"[YouTube]({session.livestream_url})" if session.livestream_url else _FIELD_VALUE_EMTPY - ) - fields = [ - discord.Field(name="Start Time", value=_format_start_time(session), inline=True), - discord.Field(name="Room", value=_format_room(session), inline=True), - discord.Field(name="Track", value=_format_track(session), inline=True), - discord.Field(name="Duration", value=_format_duration(session.duration), inline=True), - discord.Field(name="Livestream", value=livestream_value, inline=True), - ] - if include_discord_channel and session.discord_channel_id: - channel_value = f"<#{session.discord_channel_id}>" - fields.append(discord.Field(name="Discord Channel", value=channel_value, inline=True)) - elif session.experience in _EXPERIENCE_COLORS: - experience = session.experience.capitalize() - fields.append(discord.Field(name="Level", value=experience, inline=True)) - else: - fields.append(discord.Field("EuroPython Website", value=_EUROPYTHON_WEBSITE, inline=True)) - - return discord.Embed( - title=_format_title(session.title), - author=_create_author_from_speakers(session.speakers), - description=_create_description(session), - fields=fields, - footer=_format_footer(session), - url=str(session.url) if session.url else None, - color=_get_color(session.experience), - ) - - -def _create_author_from_speakers(speakers: list[europython.Speaker]) -> discord.Author | None: - """Create a single embed author from the session speakers. - - If the list contains multiple speakers, the names are combined into - a single author `name`. The `icon_url` is set to the avatar url of - the first speaker that has a truthy avatar url; if no truthy avatar - is observed, `None` is used instead. - - :param speakers: A list of speakers - :return: An author for a Discord embed - """ - match speakers: - case [speaker]: - author_name = speaker.name - case [first_speaker, second_speaker]: - author_name = f"{first_speaker.name} & {second_speaker.name}" - case [*first_speakers, last_speaker]: - author_name = ", ".join(s.name for s in first_speakers) + f", & {last_speaker.name}" - case _: - return None - author_name = textwrap.shorten(author_name, width=_AUTHOR_WIDTH) - icon_url = next((avatar for speaker in speakers if (avatar := speaker.avatar)), None) - return discord.Author(name=author_name, icon_url=icon_url) - - -def _create_description(session: europython.Session) -> str: - """Create an embed description from the session. - - :param session: The session - :return: The embed description - """ - url = session.url - abstract = ( - _ABSTRACT_EMPTY - if not session.abstract - else textwrap.shorten(session.abstract, width=_ABSTRACT_WIDTH) - ) - return f"{abstract}\n\n[Read more about this session]({url})" if url else abstract - - -def _format_title(title: str | None) -> str | None: - """Format a session title for a Discord embed. - - :param title: The optional title - :return: The optional title for an embed - """ - if not title: - return None - - return textwrap.shorten(title, width=_TITLE_WIDTH) - - -def _format_start_time(session: europython.Session) -> str: - """Format the start time to a Discord timestamp string. - - :param session: The session - :return: A start time value for the embed. If a start time is - unavailable, this function returns a placeholder value. - """ - try: - start_time_timestamp = session.slot.start.int_timestamp - except AttributeError: - return _FIELD_VALUE_EMTPY - - return f"" - - -def _format_footer(session: europython.Session) -> discord.Footer | None: - """Create a footer with the local conference time - - :param session: The session - :return: A `Footer`, if a start time is available, else `none` - """ - try: - formatted_time = session.slot.start.strftime("%H:%M:%S") - except AttributeError: - return None - - return discord.Footer(f"This session starts at {formatted_time} (local" f" conference time)") - - -def _format_room(session: europython.Session) -> str: - """Format the start time to a Discord timestamp string. - - :param session: The session - :return: The name of a room or a placeholder value. - """ - try: - room = session.slot.room.en - except AttributeError: - return _FIELD_VALUE_EMTPY - - return room if room else _FIELD_VALUE_EMTPY - - -def _format_track(session: europython.Session) -> str: - """Format the track of a session. - - :param session: The session - :return: The name of a track or a placeholder value. - """ - try: - track = session.track.en - except AttributeError: - return _FIELD_VALUE_EMTPY - - return track if track else _FIELD_VALUE_EMTPY - - -def _format_duration(duration: int | None) -> str: - """Format the duration of a session. - - :param duration: The duration of a session - :return: The name of a track or a placeholder value. - """ - if not duration: - return _FIELD_VALUE_EMTPY - - return f"{duration} minutes" - - -def _get_color(experience: str | None) -> int | None: - """Get the color for the embed based on the audience experience. - - :param experience: The expected audience experience - :return: A color (int) or None - """ - try: - return _EXPERIENCE_COLORS[experience] - except KeyError: - return None diff --git a/EuroPythonBot/extensions/programme_notifications/services/_cached/schedule.json b/EuroPythonBot/extensions/programme_notifications/services/_cached/schedule.json deleted file mode 100644 index 7cf5dea2..00000000 --- a/EuroPythonBot/extensions/programme_notifications/services/_cached/schedule.json +++ /dev/null @@ -1 +0,0 @@ -{"slots":[{"code":"HSRTCT","speakers":[{"code":"UMKFPV","name":"Alena Osipova","biography":"","avatar":"https://pretalx.com/media/avatars/Alena_O_speaker_square_tcH2xwh.jpg"},{"code":"AKYBBE","name":"Andrej Zaujec","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_0680_zKfz57z.jpeg"},{"code":"TR7NSD","name":"Lukáš Kubiš","biography":"","avatar":"https://pretalx.com/media/avatars/new_square_REnxX2m.png"}],"title":"We are Python Weekend!","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"Education, Teaching & Training"},"track_id":3558,"state":"confirmed","abstract":"code.kiwi.com community has been running Python Weekend — an educational community project — since 2016. Over the past 7 years we helped hundreds of Python developers complete the program accelerating their careers, traveled to 10+ cities all over Europe and collaborated with numerous local Python communities to make it happen.\r\n\r\nAt first glance, Python Weekend is a 2.5-day supervised coding event for Junior+ Python devs, where participants build the prototype of core Kiwi.com technology, while getting support from a group of experienced engineers, for free. But there’s so much more to this.\r\n\r\nAt this poster session, we will share how to run an educational Python project so the community, business and local tech scene would benefit. We will show how to shape the culture of connecting real-business challenges and junior talent. We will see how dev edu projects can impact the culture of mentorship and present feedback of mentees from all over the world to share their experience.","description":"I think We are Python Weekend talk can be also presented as a poster session. \r\nWe plan\r\n- million of stories\r\n- inspiration for everyone who wants to run their own Python project for the community\r\n- a lot of photos and feedback from the folks who have been part of the project - from a CS student, graphic designer, ex-WizzAir pilot, and more amazing people of Python Weekend.","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00"},"image":null,"resources":[]},{"code":"JHSMMJ","speakers":[{"code":"PBAGAX","name":"Nicolas Demarchi","biography":"","avatar":"https://pretalx.com/media/avatars/nico_optiver_small_Ajc2NAp.jpg"}],"title":"The challenges of doing Infra-As-Code without \"the cloud\"","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":{"en":"Infrastructure: Cloud & Hardware"},"track_id":3559,"state":"confirmed","abstract":"How do you implement Infrastructure-as-Code (IaC) in a non-cloud environment?","description":"Optiver, a key player on major financial exchanges around the world, tackles this complex question head-on. As traditional trading floors have evolved into expansive data centres characterised by low-latency networks and high computing power, building and maintaining infrastructure in this environment presents challenges that can’t be solved with off-the-shelf tools.\r\nIn this talk, you’ll discover more about the unique strategies and bespoke solutions that Optiver deploys to overcome these exciting challenges.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T14:30:00+02:00"},"image":null,"resources":[]},{"code":"F9UBUW","speakers":[],"title":"Cyber Resilience Act Panel","submission_type":{"en":"Panel"},"submission_type_id":2753,"track":null,"track_id":null,"state":"confirmed","abstract":"The [EU Cyber Resilience Act (CRA)](https://digital-strategy.ec.europa.eu/en/library/cyber-resilience-act) may have a huge impact on the open-source community. There are concerns about how this framework would be applied to the open-source software contribution and distribution. If you would like to know more and voice out your concerns, join our sessions with leaders in the Python community and experts in the field.","description":"## Agenda\r\n\r\n- 2:00 pm - 2:40 pm - CRA panel\r\n- 2:40 pm - 3:00 pm - CRA panel Q&A\r\n- 3:00 pm - 3:30 pm - Coffee break\r\n- 3:30 pm - 4:30 pm - CRA Unconference Discussion (at Open Space)\r\n\r\n---\r\n\r\n## CRA Panel\r\n\r\nWe have invited leaders in the Python community and domain experts to discuss the current state of CRA, related regulations and the potential effect to open-source, especially in the Python community. Confirmed Panelists are:\r\n\r\n- Deb Nicholson - Executive Director at the Python Software Foundation\r\n- Jannis Leidel - Founder of the Python Packaging Authority and the PSF Board of Directors\r\n- Ciarán O'Riordan - Senior Policy Advisor of OpenForum Europe\r\n\r\n## CRA panel Q&A\r\n\r\nAfter the panel, it is your turn to ask questions and voice out your concern regarding the CRA. Are you a contributor to open-source software and wonder who will be held accountable for the software that you contributed? Are you working for a company that publishes open-source software and wonder if that will affect the business model of your company? Are you using open-source software and wonder if the open-source ecosystem would be the same after the CRA has been put into action? Join us to discuss all these.\r\n\r\n## CRA Unconference Discussion\r\n\r\nIf you would like to discuss further about CRA and the related PLD (Product Liability Directive), and their potential effect in the open source community. We reserved a 1-hour session in the open space for unconference discussion.","duration":60,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T15:00:00+02:00"},"image":null,"resources":[]},{"code":"RGRQVQ","speakers":[{"code":"LGQMF7","name":"Nilesh Jain","biography":"","avatar":"https://pretalx.com/media/avatars/TDiup5Og_400x400_CpJXZZ6.jpg"}],"title":"Story Generation using Stable Diffusion in Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Recently, most works focus on synthesizing independent images; While for\r\nreal-world applications, it is common and necessary to generate a series of coherent images for story-telling. In this work, we mainly focus on story visualization and continuation tasks and propose AR-LDM, a latent diffusion model auto-regressively conditioned on history captions and generated images. To my best knowledge, this is the first work successfully leveraging diffusion models for coherent visual story synthesizing.","description":"In this talk, we will explore the use of stable diffusion and diffusion models in Python for generating original stories. We will first introduce the concept of stable diffusion and how it can be used to model the spread of information or ideas. We will then discuss how this can be applied to the task of story generation, and demonstrate how to use Python libraries such as Markovify and OpenAI ChatGPT API.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"HSPJMX","speakers":[{"code":"AQNTYV","name":"Alessandro Molina","biography":"","avatar":"https://pretalx.com/media/avatars/cmqf6mcue18pve45utgteigjk9._UX300__twrZwKR.jpg"}],"title":"Apache Arrow and Substrait, the secret foundations of Data Engineering","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Apache Arrow, and its Python library PyArrow are becoming the standard de facto for transfering data and interoperability between libraries and languages. As more compute engines, storages and databases start to speak arrow, you might be relying on it without even knowing.\r\nThe same transformation is happening with Substrait, that is on track to be the standard representation of query plans themselves. Allowing queries to be routed to different engines as far as they speak substrait, or even decomposed and forwarded to different engines.\r\nThis talk we will provide a quick introduction to the Arrow ecosystem, showing to Python developers how libraries like Pandas, Polars and PyArrow itself leverage Arrow and how compute engines like Velox, Datafusion and Acero are embracing Arrow and Substrait.\r\nThe talk will also show how a basic database system based on Arrow and Substrait can be built with a minimum amount of code thanks to all the foundations they provide.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:30:00+02:00"},"image":null,"resources":[]},{"code":"HN3EDM","speakers":[{"code":"HPYZNL","name":"Mykalin Jones","biography":"","avatar":"https://pretalx.com/media/avatars/My_project-14_InauHaY.jpg"}],"title":"Teaching Children Python-What Works?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Education, Teaching & Training"},"track_id":3558,"state":"confirmed","abstract":"We will explore the latest research on how children gain programming knowledge, how to keep them interested and excited, and how this might inform the way we support adult newcomers to programming. Practical advice and suggestions for activities will be given to attendees.","description":"Have you ever tried to teach your kids programming? Do you have friends trying to learn as an adult? Have you ever wondered if you would have been better off learning to code earlier in life? The push for more people to learn to code has caused an explosion in the educational industry. Boot camps and certification programs of dramatically varying quality have emerged in nearly every corner of the world. These programs are often accompanied by lofty claims and promises. Children have been no exception to this, as more and more companies attempt to capitalize on the claim that children should start learning early because it's \"like learning a language\". However, research suggests that this might not be the most solid argument. We will be exploring:\r\n-What benefits are there in teaching them early? \r\n-How do children acquire programming knowledge? \r\n-How does our language around the concepts affect their understanding? \r\n-How do we keep their interest?\r\n-Can the answer to these questions inform how we teach adults coming in from non-STEM fields? \r\nThis talk will focus on these questions by presenting the current data we have, in conjunction with anecdotal evidence from sessions with children and adults who code in python.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T16:05:00+02:00","end":"2023-07-21T16:35:00+02:00"},"image":null,"resources":[]},{"code":"CRTSNK","speakers":[{"code":"KGV7MZ","name":"Franz Kiraly","biography":"","avatar":null},{"code":"GJGS9E","name":"Sagar Mishra","biography":"","avatar":"https://pretalx.com/media/avatars/sagar_vTrdIuC.jpg"},{"code":"T9ZZJA","name":"Kiril Ralinovski","biography":"","avatar":null}],"title":"sktime - python toolbox for time series","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"This tutorial presents sktime - a unified, open source framework for machine learning with time series in python. sktime provides interfaces to algorithms of various types, and modular tools for pipelining, composition, and tuning. You will learn how identify your learning task, and how to build, use, and evaluate different algorithms on real-world data sets.\r\n\r\nAll tutorial notebooks are available in this repository and runnable from the cloud:\r\nhttps://github.com/sktime/sktime-tutorial-europython-2023","description":"Time series are ubiquitous in real-world applications, but often add considerable complications to data science workflows. \r\n\r\nIn this tutorial, we will present sktime - a unified framework for machine learning with time series. sktime covers multiple time series learning problems, including time series transformation, classification and forecasting, among others. In addition, sktime allows you to easily apply an algorithm for one task to solve another (e.g. a scikit-learn regressor to solve a forecasting problem). In the tutorial, you will learn about how you can identify these problems, what their key differences are and how they are related.\r\n\r\nTo solve these problems, sktime provides various time series algorithms and modular tools for pipelining, composition and tuning. In addition, sktime is interoperable with common libraries in the data science stack, including scikit-learn, statsmodels and prophet.\r\n\r\nYou will learn how to use, combine, tune and evaluate different algorithms on real-world data sets. We'll work through all of this step by step using Jupyter Notebooks. \r\n\r\nsktime is an openly governed open source community where everyone can join or become a leader. We encourage contributions and provide mentoring opportunities.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2184,"room":{"en":"Club B"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T11:00:00+02:00"},"image":null,"resources":[]},{"code":"ZPH9PC","speakers":[{"code":"RWYUCX","name":"Harald Lieder","biography":"","avatar":"https://pretalx.com/media/avatars/portrait-H_IC4poJ2.jpg"}],"title":"High Volume PDF Text Extraction using Python Open-Source Tools","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"All major companies have huge amounts of (mostly PDF) documents that contain important - even critically important - information, that does no longer exist anywhere else in their data stores.\r\n\r\nReports, once generated for shareholders and legal or financial authorities, may still be useful for developing longterm forecasts or triggering company management decisions.\r\n\r\nBy definition, documents are intended for human perception, and as such contain unstructured data from an information technology perspective.\r\n\r\nTherefore, tools to extract PDF text content (mostly, but not only text) from millions of pages have become important vehicles to recreate structured information.\r\n\r\nThis presentation talks about extraction \"need for speed\" in this Big Data scenario, the need for integration with OCR capabilities and presents an open-source toolset which combines both, top-of-the-class performance and maximum extraction detail.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"C7SMXT","speakers":[{"code":"NW7HAY","name":"Petr Viktorin","biography":"","avatar":"https://pretalx.com/media/avatars/petr_viktorin_1500x1800_vrXlIsE.jpg"}],"title":"Kindnesses & Promises","submission_type":{"en":"Keynote"},"submission_type_id":2752,"track":null,"track_id":null,"state":"confirmed","abstract":"The more applications you build, the more libraries you share, the more they become an excuse to meet people and have fun together.\r\n\r\nWhat makes it fun? And how do we keep it fun?","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T09:30:00+02:00","end":"2023-07-19T10:15:00+02:00"},"image":null,"resources":[]},{"code":"WB8ZWV","speakers":[{"code":"JRFBAY","name":"William Dealtry","biography":"","avatar":"https://pretalx.com/media/avatars/me_l6re5Lx.jpg"}],"title":"Python interoperability: building a Python-first, petabyte-scale database","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"How can you scale Python to run at petabyte scale, with the reliability needed to trade billions of dollars? With ArcticDB we have been doing exactly that for the last four years, by leveraging interoperability between Python and high-performance C++, with a detailed understanding of the data structures inside Python and a few extra tricks up our sleeves.\r\n\r\nCome take a peek under Python's bonnet and learn how to hotwire a few things along the way.","description":"This talk aims to introduce experienced Pythonistas to the workings of Python's C API and provide you with the means to get started with building Python modules, particularly in modern C++. It's now much easier than you think to write your first Python extension, and despite its reputation for gnarly syntax and lack of memory safety, features that have been gradually added to the C++ language over the last decade such as tuple return types with structured bindings and automatic type deduction, mean that your C++ can be more Pythonic than you might think. Since one of the most common reasons for writing an extension module is to leverage optimized machine code and multi-threading to handle really big data, we'll look at how we avoid shooting ourselves in the performance foot at the boundary between native code and Python.\r\n\r\nIn this talk we will lay out the potential pitfalls of interacting with the Python C API, share some of the hard-won experience we gained in engineering ArcticDB and running it at petabyte scale for critical Python trading applications. We'll also let you in on some tricks for implementing zero-copy data interchange, managing memory ownership and lifetimes, getting the most out of multi-threading through sensitive handling of the Global Interpreter Lock, and interacting with Pandas. \r\n\r\nOf course, nothing stays the same forever. The Python data landscape is changing rapidly and with the advent of Pandas 2.0, the old workhorse NumPy is gradually being supplanted by Apache Arrow, a project that has interoperability at the core of its design. Some things will get easier, some problems will remain. We'll examine the landscape ahead and share vital information to help you future-proof your development both inside and alongside Python.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[]},{"code":"BMYYTX","speakers":[{"code":"NXAP3Q","name":"Omotola Eunice Omotayo","biography":"","avatar":"https://pretalx.com/media/avatars/OMOTOLA_Picture_YdYRpKd.png"}],"title":"Career Building Through Open Source & Community Participation","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Community & Diversity"},"track_id":3556,"state":"confirmed","abstract":"Open source has widely grown to allow different tech career paths to enhance projects with their skills & provide jobs for those interested in working with open source. Open source contribution programs provide & build interested persons' capacity to become professionals.\r\n\r\nActive community participation helps enhance career growth. \r\n\r\nOutreachy is a paid and remote internship OS program that empowers, grows talents, and prepares them for career growth. Outreachy provides internships to people subject to systemic bias and impacted by underrepresentation in the technical industry where they are living. \r\n \r\nAt the end of this session, beginners and persons on the intermediate level will have enough knowledge of how they can build a career in open source; experts will also get more insights on how they can contribute to the advancement of open source contribution by giving back to the community as a mentor helping new contributors understand the open source ecosystem and contribution.","description":"This session aims to empower attendees with different ways to contribute to open source and how the community behind open source can be a tool for their career development and growth. \r\n\r\nCommunity participation is the secret sauce to career growth. I will highlight how to use the community effectively, the skills members can gain, and how to best position oneself for professional career growth in a community. \r\n\r\nOpen source contribution is one of the easiest ways to build and gain relevant skills needed to make a career. I will give insights on the what, why, and steps to achieve this.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"3TWGAB","speakers":[{"code":"PX8AAF","name":"Shagun Sodhani","biography":"","avatar":"https://pretalx.com/media/avatars/headshot_shagun_4ad2FAO.jpeg"}],"title":"PyTorch 2.0 - Why Should You Care","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Pytorch is one of the most popular machine learning frameworks, and its latest iteration (PyTorch 2.0) landed just a couple of days back. Among other things, PyTorch 2.0 offers faster performance with a fully backward-compatible API that guarantees the development ergonomics that PyTorch is known for. \r\n\r\nIn this talk, we will examine how practitioners (researchers and engineers) can benefit from optimizations provided by PyTorch 2.0 and what other improvements are on the horizon.","description":"In this talk, we will talk about the following:\r\n\r\n(i) Performance benefits provided by PyTorch 2.0, even without changing even a single line of code.\r\n(ii) How to leverage the best of PyTorch 2.0, sometimes by changing just a single line of code.\r\n(iii) A quick overview of \"behind-the-scenes\" technologies underpinning PyTorch 2.0 - TorchDynamo, AOTAutograd, PrimTorch, and TorchInductor.\r\n(iv) API improvements to PyTorch 2.0 that makes the user experience even more ergonomic.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T14:35:00+02:00","end":"2023-07-21T15:05:00+02:00"},"image":null,"resources":[]},{"code":"BBZVUP","speakers":[{"code":"RMZKAR","name":"Jean-Luc Stevens","biography":"","avatar":"https://pretalx.com/media/avatars/headshot_yeeqFT8.png"}],"title":"The needle and the haystack: visualizing single datapoints out of billions","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Python tools like Bokeh and Dash let you build custom Web-based interactive visualization apps and dashboards. While these solutions work well to visualize megabyte-sized datasets, web technologies struggle to render gigabyte or larger datasets efficiently, because they transfer all the data into the client browser. Pre-rendering the data on the server using a tool like Datashader can visualize such large datasets efficiently, but the resulting static renderings make exploring individual datapoints difficult.\r\n\r\nThis talk demonstrates how the HoloViz ecosystem of tools (holoviz.org) allows you to run exploratory notebooks and build dashboards that do server-side rendering of billions of data points without losing the ability to interactively inspect and annotate individual samples in the browser.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T14:35:00+02:00","end":"2023-07-19T15:05:00+02:00"},"image":null,"resources":[]},{"code":"3HR8HZ","speakers":[{"code":"YNNEGJ","name":"Daniele Procida","biography":"","avatar":"https://pretalx.com/media/avatars/Daniele_300x400_KvFfbse.JPG"}],"title":"Practical tools for documentation at scale","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"In a hands-on workshop I'll introduce some of the tools and methods I have developed to improve documentation consistently and effectively, at scale - by a thousand people or more, working on a hundred or so software products and other projects.","description":"At Canonical, I lead documentation practice - the way we, as an organisation, do documentation. That means establishing a shared understanding of standards, and how to reach them. \r\n\r\nTo help do this I have developed a number of tools and methods to help all of us understand our progress and achieve it faster.\r\n\r\nIn this hands-on workshop I will introduce some of them, and help you start to adapt them to your own needs.\r\n\r\nI hope that this workshop will be of value to anyone working in an engineering organisation where documentation discipline and success seems harder to obtain than it should be.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2187,"room":{"en":"Club E"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[]},{"code":"73TAHG","speakers":[{"code":"QXW3WL","name":"Nabanita Roy","biography":"","avatar":"https://pretalx.com/media/avatars/1608393249873_I8mfcX7.jpg"}],"title":"Women in AI Workshop","submission_type":{"en":"Conference Workshop"},"submission_type_id":3075,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2185,"room":{"en":"Club C"},"start":"2023-07-17T13:45:00+02:00","end":"2023-07-17T15:15:00+02:00"},"image":null,"resources":[]},{"code":"YZSTKK","speakers":[{"code":"LBHYNH","name":"Victor Stinner","biography":"","avatar":"https://pretalx.com/media/avatars/profile_08cXFRO.jpg"}],"title":"Introducing Incompatible Changes in Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Python 2 to Python 3 migration used the D-day approach which failed. We learnt from our mistake and we are introducing incompatible changes differently now. Document changes, provide a way to write code compatible with the old and the new way, tooling to ease the migration, design long term approach to reduce the need for incompatible changes.","description":"In the Python 2 era, it was decided to migrate at a D-Day: convert all your code base to Python 3. It didn't go as well as expected. We learnt lessons from this mistake. Incompatible changes are now introduced differently in Python.\r\n\r\nToday, changes start with a deprecation warning for at least two Python releases before removing old functions. We think about how to write a single code base working on the old and new Python versions. More and more often, instructions to migrate existing code are provided, or even automated tools. Changes breaking too many projects are reverted when there is not enough time to update enough projects. Code search helps detecting affected projects, notify them, and maybe also propose changes to prepare their code.\r\n\r\nIn the future, Python is working on a stable ABI to be able to build C extensions once and use them on many Python versions. The HPy project is an interesting candidate for this goal. More and more projects are being tested on the Python version currently under development (Python 3.12).","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"YNHRBS","speakers":[{"code":"EAPUNV","name":"Bhawna Singh","biography":"","avatar":"https://pretalx.com/media/avatars/picture_bhawna_LyvGSrk.jpeg"}],"title":"Generative AI: Beyond technicalities – an ethical perspective","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Ethics in AI"},"track_id":3563,"state":"confirmed","abstract":"Machines have become smarter than ever before. Recently, we have started using computers for solving problems beyond computations, and it might not be wrong to call them electronic creators. The future laptop might have a prompt based word application, replacing the current Word, where one has to type their thoughts and formulate an entire document from scratch. Similarly, we might see a prompt based Paint application, instead of the typical Paint program, that generates the paintings for us. In my opinion, AI-based applications are not in fiction anymore, and we may soon be using them on our computers. However, there is a possibilty that the Generative AI can be potentially harmful for society. We need to explore the ethical concerns, and how the AI can impact our society. In this talk, we will try to understand how Generative AI is becoming a part of our future and how we can use it in a responsible and ethical manner.","description":"In the current rat race of building AI, the hype is being created to show that AI can take over the world and it can perform better in some aspects than humans. People are scared that they will not have their jobs anymore as they might get automated by GPT. There's also a belief that AI might develop sentience after ingesting so much data. This talk aims at addressing such issues. As a Researcher, I want to discuss the ground truth and share what's possible and what's not. Ultimately, the talk will leave the audience with an understanding of the architectures of AI and why we should adopt an ethical approach in developing and deploying these models.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"VATHTK","speakers":[{"code":"YNNEGJ","name":"Daniele Procida","biography":"","avatar":"https://pretalx.com/media/avatars/Daniele_300x400_KvFfbse.JPG"}],"title":"Lessons from Prague","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Ethics, Philosophy & Politics"},"track_id":3569,"state":"confirmed","abstract":"Our EuroPython takes place in Prague - a city with some lessons for us, about programming, software and technology. More than 100 years ago Prague produced buildings that hint at how far our ideas in software might take us, and writers and artists who imagined challenges that have lately become real.","description":"Cities, electronic circuits and software all have *architectures*; they are machines that process signals and messages, balance forces and respond to demands, strongly analogous ways. Cities are much older than circuits and software. They are full of lessons about systems - I think some of these lessons van apply directly to our work in software, and I think that Prague, our host city, has some special ones. Some of the lessons are built literally into its buildings: Prague has the most intense concentration of Cubist architecture in the world.\r\n\r\nArchitecture springs from ideas - this talk will discuss those ideas, and the people who had them, and what we can think about our software when we think about them. I'll discuss, amongst other things, Karel Čapek, the Czech writer who gave us the word \"robot\" in 1920, and who also offers us ways of thinking about how artificial intelligence might occupy a space in our life and civilisation, and the Czech movement from Cubism to functionalism in architecture, and the connection between them, and more besides.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T14:30:00+02:00"},"image":null,"resources":[]},{"code":"QUQSZH","speakers":[],"title":"Opening Session","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T09:00:00+02:00","end":"2023-07-19T09:30:00+02:00"},"image":null,"resources":[]},{"code":"WB7ALT","speakers":[{"code":"MATUWK","name":"Oz Tiram","biography":"","avatar":"https://pretalx.com/media/avatars/OzTiram_ljOOcMi.jpg"}],"title":"Kubernetes <3 Python - Deploy Python apps & extend Kubernetes with Python","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Infrastructure: Cloud & Hardware"},"track_id":3559,"state":"confirmed","abstract":"You don't have to be an Ops expert to make Kubernetes useful! In this workshop, you will learn how to overcome complexity, and love Kubernetes as a Platform to deploy a Python web application or your data science and machine learning pipelines. You will learn how and when to use basic elements of Kubernetes like Deployments and Stateful Sets.\r\n\r\nOnce you understand these basic elements, you will learn how to extend Kubernetes using Python.\r\nYou will learn how to define custom resources and controllers to automate all things related to your applications' life cycle, from ETL through sending email for password reset to where your imagination stops.\r\n\r\nIn the end of this workshop, you will have deployed a python web application and successfully extend Kubernetes with so-called operators to manage the complete life-cycle of your application.","description":"Why you need this workshop?\r\n\r\nKubernetes is a platform for running applications on one or more computer. It provides a command line and a set of APIs to provision applications, virtual machines and even a complete cloud infrastructure.\r\nIn this workshop, you will learn why Kubernetes is a great platform to host your applications or run your data pipeline consistently - whether you run on a single Raspberry Pi or tens of Virtual machines in the public cloud.\r\n\r\nWhat will you do in this workshop?\r\n\r\n1. You will see that deploying Kubernetes isn't hard. You can use a single node or a cluster. Furthermore, you will learn the differences and trade-off between managed Kubernetes and DIY approach.\r\n\r\n2. After a basic introduction to Kubernetes, you will learn to deploy and run a web application written in Python using a Kubernetes deployment and store data in a data using a Stateful Set. You will learn how to define these resources using YAML manifests and learn to use a pure Python alternative to create these manifests.\r\n\r\n3. Finally, you will learn how you can extend Kubernetes to more than just serving a web application to almost anything you want, using so-called Kubernetes Operators. To do this, you will create a Kubernetes \"extension\". You first learn how to store your own data inside Kubernetes, using Custom Resources. Once you define your own custom definitions, you will learn how to create a controller that interacts with this data and other objects in your Kubernetes.\r\n\r\nThe ultimate goal of this training:\r\n\r\nBy the end of this workshop, you will know how to deploy a Python application, and you will be able to extend Kubernetes using operators written also in Python.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-18T13:45:00+02:00","end":"2023-07-18T15:15:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/WB7ALT/resources/K8s_Workshop_Europython_erv3Kr9.pdf","description":"Workshop notes"}]},{"code":"KPHVEL","speakers":[{"code":"UD3JDR","name":"Jamie Coombes","biography":"","avatar":null}],"title":"Language Model Zen","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Ethics in AI"},"track_id":3563,"state":"confirmed","abstract":"Beautiful is better than ugly.\r\n\r\nThe frontier of AI Language Models awaits exploration.\r\n\r\n We, Pythonistas, face choices on how to use these tools.\r\n\r\nAdvanced models like GPT-4, BARD, and LLaMa generate human-like responses.\r\n\r\nThe nature of Language Models is fear,\r\n\r\nBut tools like TransformerLens show The Way.\r\n\r\nUnderstanding The Model is possible.\r\n\r\nThe nature of Language Models is excitement.\r\n\r\nUsing them out of the box is one option.\r\n\r\nPrompt engineering is another.\r\n\r\nChatGPT plugins and LangChain offer a third choice.\r\n\r\nFine-tuning them presents a fourth.\r\n\r\nTraining them from scratch is the fifth option.\r\n\r\nNot using them at all is the final option. It may be safer.\r\n\r\nThe output for one LM is the prompt for another.\r\n\r\nWhile openai is an excellent library, and\r\n\r\nLangChain composes language models and utilities.\r\n\r\nGPT's plugin system also composes language models and utilities, and\r\n\r\nThere should be one-- and preferably only one --obvious way to do it.","description":"This talk explores the complex frontier of Language Modeling, recognizing the importance of mitigating risks and ethical considerations while exploring opportunities and challenges. It provides practical examples using OpenAI, LangChain, and GPT's plugin system to showcase the different ways to use these powerful tools.\r\n\r\nThe Capability in AI focus is provided by the comparison between LangChain and the GPT Plugin System.\r\n\r\nThe Ethics in AI focus is provided by demonstrating the TransformerLens library. \r\n\r\nTransformerLens allows surgeon-like analysis of language model internals. This mechanistic Interpretability library created by the London-based Researcher, Neel Nanda, This talk will compare the abundant code-quality linting and tooling available for static and dynamic analysis of code, to the comparatively weaker MLOps ecosystem, and the almost non-existent MLSafetyOps (Mechanistic Interpretability) ecosystem. \r\n\r\nThis talk will propose a greater focus on open-source interpretability tooling.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[]},{"code":"FRZHZG","speakers":[{"code":"M88987","name":"Alisa","biography":"","avatar":"https://pretalx.com/media/avatars/me_nR8MhMZ.jpg"}],"title":"Quantify Self","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Career, Life, Health"},"track_id":3555,"state":"confirmed","abstract":"Want to learn something new about yourself? This talk will showcase some approaches to get the best from behavioral tracking as well as silent wearables tracking. Where and how to get data with my experience regarding the quality (expectation management), what to do with the raw data (IDA + some knowledge needed), how to convert insights into actions.","description":"This talk present my summed up experience in self-tracking of many years. I will show what can be detected using modern wearable devices (rings, watches, EEG helms, etc.), what should you be searching in your data (if searching for specific answer at all), what interesting findings can present themselves and what you can do about them to make your life better.\r\nMy personal questions as a use-case would be:\r\n- Focus and Productivity\r\n- Nutrition (general health concerns like energy levels, resilience)\r\n- Happiness (mood, stress)\r\n- Overall health (energy levels, sleep, stress)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"LQZ7BP","speakers":[{"code":"Q7VFPN","name":"Peter Vidos","biography":"","avatar":"https://pretalx.com/media/avatars/Peter_Vidos_headshot3_Ak67UYJ.jpg"}],"title":"Interactive, animated reports and dashboards in Streamlit with ipyvizzu.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"It's great when you can share the results of your analysis not only as a presentation but as something that non-data scientists can explore on their own, looking for insights and applying their business expertise to understand the significance of what they find.\r\n\r\nWith its accessibility for both creators and viewers, Streamlit offers a brilliant platform for data scientists to build and deploy data apps. Now, with the integration of [ipyvizzu](https://ipyvizzu.vizzuhq.com/latest/) - a new, open-source data visualization tool focusing on animation and storytelling - you can quickly create and publish interactive, animated reports and dashboards on top of static or dynamic data sets and your models.","description":"The ability to build Streamlit apps that enable business users to explore data on their own is an excellent way to support data-driven decision-making in any organization. Pair this up with the animated transitions between the charts provided by the new, open-source library, ipyvizzu, and you have a self-service, interactive report or dashboard that makes it much easier for non-experts to make sense of complex data sets.\r\n\r\nIn this talk, one of the creators of ipyvizzu shows how their technology works within Streamlit and the advantages of using animation in self-service data exploration to help business stakeholders feel smarter and do a better job.\r\n\r\nWe'll cover the following topics within the talk:\r\n- Introduction to Vizzu, the open-source C++/JavaScript library behind ipyvizzu\r\n- Benefits of animated charts for storytelling and data exploration\r\n- Basic logic and options of ipyvizzu\r\n- Quick walkthrough of building an interactive report within Streamlit\r\n- Live examples to showcase the benefits and the opportunities","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[]},{"code":"YPKPWV","speakers":[{"code":"QRLBNV","name":"Anupama Tiruvaipati","biography":"","avatar":"https://pretalx.com/media/avatars/Anupama_gYGNDmU.jpg"}],"title":"The Power of Spec-Based Testing:Adding Functional Requirements to Unit Test","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Testing"},"track_id":3572,"state":"confirmed","abstract":"Testing is a crucial part of the software development process. But, with so many testing techniques available, it can be challenging to know which one to use. While unit testing is a popular technique, it's not always the most effective or efficient way to ensure software quality. In this talk, we’ll explore spec-based testing, a technique that focuses on verifying that the software behaves in accordance with its specifications or requirements.","description":"Our focus in this talk will be on the benefits of spec-based testing, including:\r\n1. Problems with unit testing: How spec-based testing can bridge this gap.\r\n2. Improved test coverage: Spec-based testing will ensure all the requirements or specifications are covered by the test, thereby helping to attain better overall software quality.\r\n3. Reducing maintenance work: Since they are based on the software’s intended behaviour and not implementation details, spec-based tests are less likely to break due to changes in the code. This can lead to fewer tests needing to be maintained over time.\r\n4. Better alignment: Spec-based testing ensures that software meets its intended purpose as defined by the requirements or specifications.\r\n\r\nKey takeaways:\r\n1. Benefits of spec-based testing\r\n2. How to boost your testing strategy with spec-based testing\r\n3. How to get started with spec-based testing in your own project development\r\n4. Learn how to identify functional requirements or specifications and create effective test cases","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T14:30:00+02:00"},"image":null,"resources":[]},{"code":"XEQPYB","speakers":[{"code":"JQ3MRZ","name":"Max Kahan","biography":"","avatar":"https://pretalx.com/media/avatars/pycon_uk_profile_pic_under_10mb_IHYslfb.png"}],"title":"pip install malware","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Security"},"track_id":3571,"state":"confirmed","abstract":"pip install malware: it’s that easy. Almost all projects depend on external packages, but did you know how easy it can be to install something nasty instead of the dependency you want? I'll be showing this live, as I make malware and install it from PyPI onto my own computer during the talk!","description":"You might remember classic typosquatting examples like goggle.com, but it’s now common to see malicious code hidden in spoofed or otherwise fraudulent PyPI packages or nested dependencies. Malware developers can also use techniques like starjacking to appear legitimate, so these unpleasant packages become even more difficult to spot. It’s estimated that over 3% of packages on PyPI could be using this technique.\r\n\r\nBy the end of this talk, you’ll know how to protect yourself when installing and updating dependencies and you’ll leave with a checklist to follow to help you stay safe in future.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T14:30:00+02:00"},"image":null,"resources":[]},{"code":"UPEWP3","speakers":[{"code":"8YEPUD","name":"Tibs","biography":"","avatar":"https://pretalx.com/media/avatars/DSC05129-Tibs-Helsinki-2023-square_yQ2vikP.jpg"}],"title":"Fish and chips and Apache Kafka®","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Infrastructure: Cloud & Hardware"},"track_id":3559,"state":"confirmed","abstract":"Apache Kafka® is the de facto standard in the data streaming world for sending messages from multiple producers to multiple consumers, in a fast, reliable and scalable manner.\r\n\r\nCome and learn the basic concepts and how to use it, by modelling a traditional British fish and chips shop!","description":"Handling large numbers of events is an increasing challenge in our cloud centric world. For instance, in the IoT (Internet of Things) industry, devices are all busy announcing their current state, which we want to manage and report on, and meanwhile we want to send firmware and other updates back to specific groups of devices.\r\n\r\nTraditional messaging solutions don't scale well for this type of problem. We want to guarantee not to lose events, to handle high volumes in a timely manner, and to be able to distribute message reception or production across multiple consumers or producers (compare to sharding for database reads).\r\n\r\nAs it turns out, there is a good solution available: Apache Kafka® - it provides all the capabilities we are looking for.\r\n\r\nIn this talk, rather than considering some imaginary IoT scenario, I'm going to look at how one might use Kafka to model the events required to run a traditional British fish and chip shop: ordering (plaice and chips for me, please), food preparation, accounting and so on.\r\n\r\nI'll demonstrate handling of multiple producers and consumers, automatic routing of events as new consumers are added, persistence, which allows a new consumer to start consuming events from the past, and more.\r\n\r\nFind the slides and demos on [Aiven Labs](https://github.com/Aiven-Labs/fish-and-chips-and-kafka)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T14:30:00+02:00"},"image":null,"resources":[]},{"code":"XYHXYP","speakers":[{"code":"KVVBUX","name":"Flavio Percoco","biography":"","avatar":"https://pretalx.com/media/avatars/mGaDYYSG_400x400_b7qsVpp.jpg"},{"code":"ECALAF","name":"Honza Král","biography":"","avatar":"https://pretalx.com/media/avatars/pyconua.jpg"}],"title":"From idea to production","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"DevOps"},"track_id":3557,"state":"confirmed","abstract":"In this talk we will take you through a complete journey a website takes - from conception to running in production, the right way.\r\n\r\nWhat is the best setup for local development, how to then move to testing and production? An opinionated talk from two veterans.","description":"We start with choosing the proper architecture, show you what is a good setup for local development, and finally we will deploy our code to production.\r\n\r\nThe aim is to demystify the devops buzzword as well as show some practical examples that can be used by beginners as well as experienced developers.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:50:00+02:00"},"image":null,"resources":[]},{"code":"GKHPZB","speakers":[{"code":"K8J9XT","name":"Paul Everitt","biography":"","avatar":"https://pretalx.com/media/avatars/Paul_Headshot_Smaller_2020_3qJSjps.jpg"}],"title":"Power Django with PyCharm","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":null,"track_id":null,"state":"confirmed","abstract":"Django and Python make fullstack and API web projects a breeze. But as Python has matured, significant tooling has risen to improve the development experience (DX). Can you use this tooling, in a modern editor and IDE, to stay in the flow and make your development…joyful?\r\n\r\nIn this session we’ll put PyCharm to work, at helping us work. Navigation, refactoring, autocomplete – the usual suspects. We’ll also see “test-first” development to stay in the IDE, plus how this can apply to frontends.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[]},{"code":"9CUAPR","speakers":[{"code":"99QXYY","name":"Kesia Mary Joies","biography":"","avatar":"https://pretalx.com/media/avatars/kesia_photo_In5DL3g.jpeg"},{"code":"BZ8RFC","name":"Aby M Joseph","biography":"","avatar":"https://pretalx.com/media/avatars/AbyMJoseph.max-800x600_3c5eorb.jpg"}],"title":"Zero-Copy Zen: Boost Performance with Memory View","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Are you tired of struggling with memory management in Python? Do you want to take your skills to the next level and achieve maximum performance while minimising memory usage? Look no further, here is Zero-Copy in Python!\r\nZero-copy is a technique in computer programming that allows data to be transferred between different parts of a program without being copied to intermediate buffers. In Python, this technique can be achieved using the memory view object, which provides a view into the memory of other objects. Learn how to efficiently manipulate large datasets and optimise your code with the help of this powerful tool. Whether you're working with sockets, objects or memory profiling, memory view is your key to faster and more efficient Python programming.","description":"In today's data-driven world, efficient memory management is critical for achieving optimal performance in Python. Memory view and byte array provide a powerful combination of tools for managing bytes and memory in Python, enabling zero-copy interactions that can significantly improve performance and reduce memory usage. \r\n\r\nMemory view is a built-in Python class that provides a zero-copy interface to the memory of an object, allowing efficient manipulation of large data sets. Memory view objects can be used to share memory between different parts of a program without creating intermediate copies of the data, which can significantly improve the performance of Python code. This feature is particularly useful when working with large arrays, binary data, or network programming using sockets. Memory view can also be used in conjunction with the buffer protocol to work with objects in a zero-copy manner. \r\n\r\nOverall, memory view is a powerful tool for Python developers looking to optimise their code and improve performance. This talk will explore the technical aspects of memory view and byte array, providing real-world examples of how these tools can be used to achieve zero-copy interactions with bytes. Attendees will learn how to optimise their code by leveraging these tools, with a focus on achieving maximum performance while minimising memory usage.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T14:30:00+02:00"},"image":null,"resources":[]},{"code":"3Y3BJN","speakers":[{"code":"CCZUDR","name":"Pranjal Biyani","biography":"","avatar":null}],"title":"Solving Multi-Objective Constrained Optimisation Problems using Pymoo","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Pymoo is an open source python framework with state-of-the-art optimisation and post performance analysis capabilities. It provides an object oriented interface to solve constrained Single/Multi-Objective optimisation problems with a catalog of algorithms, customisations and post-optimisation evaluation functionalities. With additional features like Visualisation of optimal pareto-fronts, decision making, parallelization and customised sampling, Pymoo promises to be highly valuable for scalable optimisation solutions.","description":"I will share a github repository with jupyter notebooks and datasets with the attendees, before the talk and have multiple hands on segments during the talk. The talk will take the users step-by-step through the sections mentioned below - \r\n\r\n1. What is an optimisation problem ? \r\n2. Core components of an optimisation problem ? \r\n3. Finding the right type of solution ? \r\n4. Identifying constraints, bounds and objectives\r\n5. Pymoo API - Object Oriented Interface, Parallelization, Visulization\r\n6. Hands on Example : a ML Model as an objective function, to find optimal input variables for a desired output variable\r\n7. Customisations using Pymoo : Termination, Crossover, Mutation etc\r\n8. A one-stop solution for Optimisation Problems","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:35:00+02:00"},"image":null,"resources":[]},{"code":"LWWPUS","speakers":[],"title":"Morning Announcement","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":15,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T09:00:00+02:00","end":"2023-07-21T09:15:00+02:00"},"image":null,"resources":[]},{"code":"WNSZ9R","speakers":[{"code":"VST3SV","name":"Roberto Polli","biography":"","avatar":"https://pretalx.com/media/avatars/c6c5e33601dc00f6dc863f768e8e5687_buJezj1.jpg"}],"title":"The digital State of the European Union","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Ethics, Philosophy & Politics"},"track_id":3569,"state":"confirmed","abstract":"What is the European digital identity? How can you access digital public services from another EU country? Why is it so hard to create an European ecosystem of digital services? Does the EU support open source?\r\n\r\nThis (opinionated) talk will present the current State of the digital services in the EU. Will summarize the normative and technical challenges, and their impacts on the resulting platforms in terms of UX, cybersecurity and maintainability.","description":"European Union members started many years ago to plan common infrastructures in order to provide shared digital services to EU citizens. Some of them are consolidated, like the visa and the VAT information system, others are going to be revised - like the eID. Many new services are under development.\r\n\r\nThe cornerstone of these services is the \"Once Only Principle\": citizens provide diverse data only once in contact with public administrations, while public administration bodies take actions to internally share and reuse these data – even across borders.\r\n\r\nAfter a brief presentation of some existing EU services (e.g. participate to an EC consultation authenticating with your eID, [VAT information system API](https://ec.europa.eu/taxation_customs/vies/#/vat-validation), the [EU data portal](https://data.europa.eu/en) , ..) the talk will cover:\r\n\r\n- the four categories of challenges: legal -> organizational -> semantic -> technical, and the importance of addressing them **in order**;\r\n- how shifting-right challenges from the legal and organizationa level down to the technical one affects the UX and the cybersecurity of the resulting platforms;\r\n- challenges in procurement.\r\n\r\nFinally, a focus on the technical level:\r\n\r\n- the role that the EU can play to support open source and open standards.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T14:30:00+02:00"},"image":null,"resources":[]},{"code":"RAXZVW","speakers":[{"code":"TL3UVH","name":"Maxim Fateev","biography":"","avatar":"https://pretalx.com/media/avatars/maxim_headshot_l4qDa2z.jpeg"}],"title":"Temporal Python – A Durable, Distributed Asyncio Event Loop","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":null,"track_id":null,"state":"confirmed","abstract":"This talk discusses asyncio, an essential tool for asynchronous, non-blocking code in Python, and its limitations, such as non-durability and inability to distribute across multiple machines. Temporal.io, an open-source microservice orchestration platform, is introduced as a robust solution capable of using event sourcing for durability, scalability, and resilience, effectively managing system failures. Temporal based asyncio event loop implementation adds seamless durability to Python code. The complete state of the program, including local variables and await calls, is fully preserved across process and other infra failures. We highlight real-world applications and conclude by emphasizing how Temporal transforms the design and implementation of distributed fault-tolerant systems.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[{"resource":"https://github.com/temporalio/sdk-python","description":"Temporal Python SDK"},{"resource":"https://temporal.io/blog/durable-distributed-asyncio-event-loop","description":"Blog Post: Temporal Python 1.0.0 – A Durable, Distributed Asyncio Event Loop"}]},{"code":"ATGCBX","speakers":[{"code":"CPJQQS","name":"Gajendra Deshpande","biography":"","avatar":"https://pretalx.com/media/avatars/gcd_vHsVXyh.png"}],"title":"Fighting Money Laundering with Python and Open Source Software","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"In this talk proposal, we will discuss how to detect the chain of fraudulent transactions and help the investigation agencies by providing useful insights to fight money laundering with the help of Python programming language and packages.","description":"In this talk proposal, we will discuss the chain of fraudulent transactions and help the investigation agencies to fight money laundering with the help of Python programming language and packages.\r\nThe working of the proposed solution is described below\r\nStep 1: The investigation officer obtains data of suspicious accounts across banks.\r\nStep 2: Using Benford’s Law the accounts data will be checked for possible fraud and marked for further analytics.\r\nStep 3: The account details will also be matched with Politically Exposed Persons(PEP), Relatives and Close Associates (RCA), and Sanctions Data. If a match is found then it increases the probability of possible money laundering. \r\nStep 4: Generate graphs showing the links between transactions of different bank accounts for step 2 and step 3.\r\nStep 5: Apply Graph Machine Learning techniques and graph algorithms to identify the fraudulent chains between depositor and receiver accounts. \r\nStep 6: Find a correlation between transactions and bank accounts to form a fraudulent chain.\r\nStep 7: Generate results in the form of reports and interactive visualizations\r\nStep 8: Verify the result for genuineness and false positive rate.\r\nStep 9: Keep track of all the activities and tasks executed from steps 2 through 8. \r\nStep 10: Generate a report for step 9 in a human-readable and understandable form.\r\n\r\nThe application has been developed using Scipy, numpy, pandas, matplotlib, NetworkX, Altair, scikit-learn, and Dash packages.\r\n\r\nThe participants will learn about a new use case of python in crime investigation.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"BABLES","speakers":[{"code":"PXQBU9","name":"Jodie Burchell","biography":"","avatar":"https://pretalx.com/media/avatars/BK7A9876_korr_sRGB_8_1000x1500px_b_NbNTtra.jpg"},{"code":"VWGMRU","name":"Lais Carvalho","biography":"","avatar":"https://pretalx.com/media/avatars/profile_lais_dlBMIiY.jpeg"}],"title":"Humble Data","submission_type":{"en":"Conference Workshop"},"submission_type_id":3075,"track":null,"track_id":null,"state":"confirmed","abstract":"Are you a complete beginner to coding, but would love to learn how to get started? Have you been curious about data science, but feel overwhelmed with all the talk of AI? Many people working in data science were once in the same position and know how hard it is to take those first steps.\r\n\r\nHowever, fear not! It’s easier than you think to get started, and to help make this transition easier we’re hosting a workshop to teach beginners how to get started in Python and data science. We’ll start with Python basics, and show you how you can use this knowledge to easily read and transform data using Pandas, Python’s powerful data analysis library. You’ll also see how you can create beautiful, customized visualizations in Python using packages such as Matplotlib and Seaborn. You’ll also learn how to use a core data science tool, Jupyter notebooks, to run and check the output of your code. See more details on the workshop here: https://ep2023.europython.eu/humble-data","description":"This workshop is aimed at both those with no programming experience, and those with some experience in Python who want to get started in data science, and who want to learn in a supportive, relaxed and empathic environment. \r\n\r\nAs part of the workshop, participants will work through a series of approachable tutorials with the help of a mentor. For 3 hours (breaks included) we will have teams that will work together with mentors to do plenty of exercises, quizzes and games, to go from Zero to Hero in Python data science. All that participants will need to bring is a tablet or a laptop with internet access - we will help them get started with the rest!","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2185,"room":{"en":"Club C"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T11:00:00+02:00"},"image":null,"resources":[]},{"code":"BXZD9Z","speakers":[{"code":"8AQTSF","name":"Pedro Holanda","biography":"","avatar":"https://pretalx.com/media/avatars/ph_s_22_U26BtS3.jpg"}],"title":"DuckDB: Bringing analytical SQL directly to your Python shell","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"In this talk, we will present DuckDB. DuckDB is a novel data management system that executes analytical SQL queries without requiring a server. DuckDB has a unique, in-depth integration with the existing PyData ecosystem. This integration allows DuckDB to query and output data from and to other Python libraries without copying it. This makes DuckDB an essential tool for the data scientist. In a live demo, we will showcase how DuckDB performs and integrates with the most used Python data-wrangling tool, Pandas. \r\nBesides learning about DuckDB's main charactestics, users will also experience a live demo of DuckDB and Pandas in a typical data science scenario, focusing on comparing their performance and usability while showcasing their cooperation. The demo is most interesting for an audience familiar with Python, the Pandas API, and SQL.","description":"The talk is catered primarily towards data scientists and data engineers. The talk aims to familiarize users with the design differences between Pandas and DuckDB and how to combine them to solve their data-science needs. We will have an overview about five main characteristics of DuckDB. 1) Vectorized Execution Engine, 2) End-to-end Query Optimization, 3) Automatic Parallelism, 4) Beyond Memory Execution, and 5) Data Compression.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:50:00+02:00"},"image":null,"resources":[]},{"code":"8XKCB8","speakers":[{"code":"SR9UDD","name":"Yan Yanchii","biography":"","avatar":null}],"title":"Asyncio without Asyncio","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"This tutorial aims to demystify asyncio builtin module by implementing it from scratch without any dependencies other than the Python Standard Library. We will go through the problem of blocking IO and how it is possible to solve it without single \"async\" and \"await\" statement using native Python concepts. Then, we will demystify async/await syntax and see how it is implemented. We will also build our own scheduler which will have a similar API as asyncio, which will be able to run async functions the same way asyncio does. And finally we will build real asynchronous http proxy using our own asyncio implementation. Why reinvent the wheel? - \"I hear and I forget. I see and I remember. I do and I understand.\".","description":"","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T11:00:00+02:00"},"image":null,"resources":[]},{"code":"MAGZUV","speakers":[{"code":"TJUQVQ","name":"Ahter Sonmez","biography":"","avatar":"https://pretalx.com/media/avatars/ahter_S77wQhW.png"}],"title":"Best Practices for GraphQL API Development","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Must-have tools for running GraphQL in production\r\n\r\nGear up for a groundbreaking transformation of your GraphQL prowess! Join us for an engaging and informative session as we unveil a set of indispensable tools and practices that will take your GraphQL APIs to new heights in production environments.","description":"In this talk, we'll tackle the toughest challenges head-on. From conquering query depth limits and query complexity constraints to mastering authorization checks, role-based access control (RBAC), we've got the insider GraphQL knowledge you need. As we plunge into the depths of GraphQL sorcery (where Krakens live) you'll uncover the secrets to unleashing lightning-fast pagination, implementing intelligent rate-limiting, and harnessing a treasure trove of indispensable monitoring tools.\r\n\r\nDon't miss out on this opportunity to supercharge your GraphQL API skills. By embracing these must-have tools and practices, you'll confidently navigate production environments, delivering outstanding user experiences and leaving your stakeholders in awe.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"G9NKUY","speakers":[{"code":"9ZAK7C","name":"Nischal Harohalli Padmanabha","biography":"","avatar":"https://pretalx.com/media/avatars/photo_2023-03-12_15.39.47_Q20k0El.jpeg"},{"code":"J98AEX","name":"Raghotham Sripadraj","biography":"","avatar":"https://pretalx.com/media/avatars/2022-04-03_22.40.18_BPxR1BI.jpg"}],"title":"Language Models for Music Recommendation","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Music streaming services like Spotify and youtube are famous for their recommendation systems and each service takes a unique approach to recommending and personalize content. While most users are happy with the recommendations provided, there are a section of users who are curious how and why a certain track is recommended. Complex recommendation systems take various factors like track metadata, user metadata, and play counts along with the track content itself. \r\n\r\nInspired by Andrej Karpathy to build an own GPT, we have to use Language Models to build our own music recommendation system.","description":"Music streaming services like spotify and youtube are famous for their recommendation systems and each service takes a unique approach to recommend and personalize content. While most users are happy with the recommendations provided, there are a section of users who are curious how and why a certain track is recommended. Complex recommendation systems take various factors like track metadata, user metadata, play counts along with the track content itself. \r\n\r\nAs music aficionados who love techno, trance, deep house and classical genres, we want to understand the following questions:\r\n\r\n1. Can we analyze the signals from the song track and identify the different instruments used?\r\n2. How can we create embeddings of all the tracks and index these for further analysis?\r\n3. How do we create a simple User interface to pick a song track, retrieve relevant embeddings from a section of the track and get recommendations based on just the music content.\r\n4. As a side effect, can I retrieve similar sections of music across various tracks.\r\n5. Using audio LMs, can we generate high quality music based of the embeddings?","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T16:05:00+02:00","end":"2023-07-21T16:35:00+02:00"},"image":null,"resources":[]},{"code":"VPWTYU","speakers":[{"code":"VZM8L3","name":"Reuven M. Lerner","biography":"","avatar":"https://pretalx.com/media/avatars/reuven-headshot_eNVHHfd.jpg"}],"title":"Stop using print! Understanding and using the \"logging\" module","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"If you're like me, then you've long known about Python's \"logging\" module, but you've ignored it because it seemed too complex. In this talk, I'll show you that \"logging\" is easy to learn and use, giving you far more flexibility than you can get from inserting calls to \"print\" all over your code. I'll show you how you can start to use \"logging\" right away -- but also how you can use it to create a sophisticated logging system that sends different types of output to different destinations. After this talk, you'll know how to use \"logging\", and you'll be less likely to use \"print\" in your applications.","description":"You don't need to be a Python expert to use the \"logging\" module! In this talk, I'll show how you can take advantage of it almost right away, with the basic configuration. We'll then go into more complex parts of the module, looking at different handler types (and using multiple handlers), formatters, and filters. We'll look at different ways you can configure your logging system, and what some of the best practices are for including logging in your programs. \r\n\r\nI'm aiming this talk at beginners because it took me far too long to recognize the usefulness of the \"logging\" module, and I'm hoping to help others start using it much earlier in their Python journey.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:40:00+02:00"},"image":null,"resources":[]},{"code":"PZQHFU","speakers":[{"code":"DP8DBG","name":"Waldemar Hummer","biography":"","avatar":"https://pretalx.com/media/avatars/profile_head_3P9wr6I.png"},{"code":"7ESZPJ","name":"Thomas Rausch","biography":"","avatar":"https://pretalx.com/media/avatars/portrait-square_m7WHtF9.jpg"},{"code":"Q9GQKB","name":"Alex Rashed","biography":"","avatar":"https://pretalx.com/media/avatars/DSC_0194_crop_compressed_vYMq2XN.jpg"}],"title":"Develop your Python cloud applications offline with LocalStack","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"This tutorial provides a hands-on introduction to LocalStack - the leading platform to develop and test cloud applications entirely on your local machine!\r\n\r\nLocalStack provides a set of 70+ AWS services, running in a local Docker container. The hugely popular open source project (46k+ Github stars, 130+ million downloads) is today considered a “must-have” in the toolbox of every AWS cloud developer around the globe.\r\n\r\nOutline:\r\n(1) Intro to AWS cloud development with Python\r\n(2) Developing Python cloud apps with LocalStack\r\n(3) Advanced integrations for IaC and CI/CD pipelines\r\n(4) Python internals & advanced features in LocalStack\r\n(5) Summary and wrap-up\r\n\r\nThis interactive session covers live coding to showcase common use cases, settings for local debugging of Lambdas and containerized apps, as well as advanced features that can radically improve team collaboration. We'll also glance over the large ecosystem of tools & integrations - including Terraform, Pulumi, CDK, Serverless.","description":"In this tutorial, we provide a hands-on introduction to LocalStack - the leading community platform that allows you to develop and test cloud&serverless applications entirely on your local machine, without ever having to connect to the real cloud!\r\n\r\nLocalStack is the leading AWS cloud emulator that provides a set of 70+ AWS services, running in a Docker container entirely on your local machine. Being a hugely popular open source project, LocalStack is among the top ~150 all-time repositories ranked on Github (46k+ stars), has been downloaded over 130+ million times, and is today considered a “must-have” in the toolbox of every AWS cloud developer around the globe.\r\n\r\nThis tutorial is designed to follow along on participants’ own laptops. There are no special requirements - literally the only prerequisite is having Python 3.x and Docker installed on the local machine. We are going to develop AWS applications, but since LocalStack runs entirely on the local machine without ever talking to the real cloud, *no* cloud access credentials are required to follow the tutorial.\r\n\r\nThe tutorial is structured as follows:\r\n(1) Intro to AWS cloud development with Python (0:00-0:30h)\r\n(2) Developing Python cloud apps with LocalStack (0:30-1:30h)\r\n(3) Advanced integrations for IaC and CI/CD pipelines (1:30-2:15h)\r\n(4) Python internals and advanced team collaboration features in LocalStack (2:15-2:45h)\r\n(5) Summary and wrap-up (2:45-3:00h)\r\n\r\nThe session covers interactive live coding to showcase common scenarios and use cases, different settings for local debugging of Lambdas and containerized apps (e.g., ECS/EKS), as well as some advanced new features that can radically improve productivity and team collaboration patterns. We will also glance over the large ecosystem of tools that LocalStack natively integrates with - from IaC frameworks like Terraform or Pulumi, to application frameworks like Serverless, to a whole suite of tools in the AWS ecosystem, including CDK, SAM, Copilot, Chalice, etc.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2188,"room":{"en":"Club H"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[]},{"code":"QRBSUK","speakers":[{"code":"TJSMCP","name":"Maxim Danilov","biography":"","avatar":"https://pretalx.com/media/avatars/52487229351_888bc6cc5c_o_yrBnWU3.jpg"}],"title":"What are you yield from?","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Many developers avoid using generators. For example, many well-known python libraries use lists instead of generators. The generators themselves are slower than normal list loops, but their use in code greatly increases the speed of the application. Let’s discover why.","description":"Many developers, avoid to use the generators in regular python code:\r\n\r\nIt is hard to debug,\r\nit is not easy to profile,\r\nit is not obviously to refactor.\r\nit requires to use special algorithms.\r\nIn this talk i speak about generator pipelines, one-line-generators, builtin-generators, custom generators with yield and yield from.\r\nI will show how to use generators and why we should use them. Also, we learn about situations where we can’t use generators and how to change our thinking to avoid such situations in the future. I give some hints and examples - how big python frameworks use lists instead of generators and therefore lose performance. At the end we can see how builtin zip function works in other world, where developers always use generators in own code.\r\n\r\nLet see what we can yield from this talk…","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00"},"image":null,"resources":[]},{"code":"AEAPDB","speakers":[{"code":"BLWEQ9","name":"Jakub Urban","biography":"","avatar":"https://pretalx.com/media/avatars/profil_ju_IMG_8102_1_ckFI61i.jpeg"},{"code":"CKX3LQ","name":"Jan Pipek","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_3812-Edit_xAWUaIr.jpg"}],"title":"Robust Data Transformation with Pandas: Typing, Validation, Testing","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":null,"track_id":null,"state":"confirmed","abstract":"We will explore possibilities for making our data analyses and transformations in Pandas robust and production ready. We will see how advanced group-by, resample or rolling aggregations work on large time series weather data. (As a bonus, you will learn about Prague climate.) We will use type annotations and schema validations with the Pandera library to make our code more readable and robust. We will also show the potential of property-based testing using the Hypothesis package, with strategies generated from Pandera schemas. We will show how to avoid issues with time zones when working with time series data. By the end of the tutorial, you will have a deeper understanding of advanced Pandas aggregations and be able to write robust, production ready Pandas code.","description":"## Instructions\r\n\r\nBefore attending the workshop, it's important to prepare your environment by following the **instructions in the repository located at https://github.com/coobas/robust-pandas-workshop**. This will ensure that you have all the necessary tools and dependencies installed to participate in the workshop.\r\n\r\nPlease note that we will be continuously updating the repository leading up to the workshop, so it's important to **pull the latest changes on the day of the workshop** to ensure that you have the most up-to-date materials.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2188,"room":{"en":"Club H"},"start":"2023-07-18T13:45:00+02:00","end":"2023-07-18T15:15:00+02:00"},"image":null,"resources":[]},{"code":"JHY3ZK","speakers":[{"code":"ZZLH9P","name":"Eva Klimentová","biography":"","avatar":"https://pretalx.com/media/avatars/Portret_midjourney_od_Denci_SixQts4.png"}],"title":"Using NLP to Detect Knots in Protein Structures","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Proteins are essential components of our bodies, with their function often dependent on their 3D structure. However, uncovering the 3D structure has for a long time been redeemed by months of hard work in the lab. Recent advances in Machine learning and Natural language processing have made it possible to build models (eg. AlphaFold) capable of predicting the protein's 3D structure with the same precision as experimental methods.\r\n\r\nIn this talk, I will explore an even more specific application of language models for proteins - the detection of a knot in a protein's 3D structure solely from the protein amino acid sequence. Knotting in proteins is a phenomenon that can affect their function and stability. Thanks to NLP and interpretation techniques we can try to uncover why and how proteins tie themself into a knot. In this research, we rely on many Python-based tools starting from Biopython to Pymol and Hugging Face transformer library.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[]},{"code":"ZJRTGW","speakers":[{"code":"Z9SMLD","name":"Sophie Wilson","biography":"","avatar":"https://pretalx.com/media/avatars/Sophie_Wilson-2110x2667_LW4ObOx.jpg"}],"title":"The Future of Microprocessors","submission_type":{"en":"Keynote"},"submission_type_id":2752,"track":null,"track_id":null,"state":"confirmed","abstract":"The Future of Microprocessors - a talk about the history of microprocessors, how we got here and what might happen next. There will be two laws, one equation, some graphs and a particle beam weapon out of Star Trek.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T09:15:00+02:00","end":"2023-07-20T10:00:00+02:00"},"image":null,"resources":[]},{"code":"C3GDXY","speakers":[{"code":"LUY39H","name":"Mark Shannon","biography":"","avatar":"https://pretalx.com/media/avatars/mark_shannon_MLGHvFH.jpg"}],"title":"Talks: How we are making CPython faster. Past, present and future.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Python 3.11 is considerably faster than 3.10. \r\nHow did we do that? And how are we going to make 3.12 and following releases even faster?\r\n\r\n In this talk, I will present a high level overview of the approach we are taking to speeding up CPython. Starting with a simple overview of some basic principles, I will show how we can apply those to streamline and speedup CPython. I will try to avoid computer science and software engineering terminology, in favor of diagrams, a few simple examples, and some high-school math. Finally, I make some estimates about how much faster the next few releases of CPython will be, and how much faster Python could go.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:15:00+02:00"},"image":null,"resources":[]},{"code":"XLLSWL","speakers":[{"code":"BXVSCG","name":"Roman Yurchak","biography":"","avatar":"https://pretalx.com/media/avatars/90e4251aee531aa36f6e09d7b935378f_X6t0Gow.jpg"}],"title":"Running Python packages in the browser with Pyodide","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Pyodide is a port of CPython to WebAssembly/Emscripten enabling Python packages to run directly in the browser or Node.js. We will provide an overview of Pyodide's architecture, capabilities, and potential use cases before looking into building, running, and testing Python packages for the browser.\r\n\r\nWe will also discuss how browser-specific optimizations, such as code splitting, tree shaking, and lazy loading could be adapted to Python to reduce package size and load time.\r\n\r\nFinally, we will mention some of the common restrictions of the browser runtime and how they can be overcome in Python packages.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"VCGQWF","speakers":[{"code":"BGPPXA","name":"Marcelo Trylesinski","biography":"","avatar":"https://pretalx.com/media/avatars/gxssyo64_400x400_UWBnBAf.jpg"}],"title":"Performance tips by the FastAPI Expert","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Is your FastAPI really fast? Did you benchmark it, or you just have faith?\r\n\r\nOn this talk, Marcelo will give tips to improve the performance of your FastAPI application, and you’ll see how impactful those changes can be.","description":"We’ll go through FastAPI common mistakes regarding performance, and how to make improvements.\r\n\r\nWe’ll make a small study about how those improvements can impact on your applications, and you’ll find out that even small details can make a tremendous impact.\r\n\r\nAs part of the study, we'll talk about points like encoding and decoding your data, the event loop, specific details about validation, and so on.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[]},{"code":"SG3NQB","speakers":[{"code":"9RC8S7","name":"Petr Simecek","biography":"","avatar":"https://pretalx.com/media/avatars/myslef3_VXjqzVD.jpg"}],"title":"Word Wranglers & News Navigators: Taming GPT-3 Beast for Media Monitoring","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"The emergence of ChatGPT has led to an exponential growth of prospects and implementations in the field of Natural Language Processing (NLP). Various teams were struck with FOMO (Fear of Missing Out) and hastened to incorporate Large Language Models (LLMs) into their products. By using OpenAI models (text-curie-001, davinci, gpt-3.5-turbo), we successfully integrated them into our production on March 2, granting our users the ability to receive text summaries in their email reports and comprehend the essence of any article within our application. Three weeks later, we trained our own large language model for the same purpose. This talk will delve into our journey, exploring the lessons and insights gleaned from our hands-on experience with these cutting-edge tools.","description":"While heaps of research focus on English texts, this talk will zoom in on using LLMs for smaller languages like Czech or Slovak. I'll share some hair-raising examples from our early days after deployment (trust me, when the LLM starts hallucinating about a local politician's resignation, your client won't be thrilled) and how we managed to tackle those challenges. I'll also chat about the quirks that come with non-English languages (more tokens, bigger models, ...) and dish about our experiments with other LLMs like OPT, BLOOM, and LLaMA. I will show how to fine-tune the general LLM to the Czech instruction set and demonstrate the danger of injecting false information. Finally, I will discuss possibilities of putting LLM to production.\r\n\r\nEstablished in 2015, Monitora Media burst onto the scene and rapidly rose to prominence in the realm of media analysis and monitoring across Central Europe. We've been shaking things up with innovations like real-time media monitoring and scrollable print titles, even scoring a spot on Deloitte's Technology Fast 50 for Central Europe in the past two years. We keep an eye on print and online publications, as well as TV and radio broadcasts, and podcast transcripts – we're talking over 350 programs, 9,000 websites, and 2,500 print titles! Python and Django hold a special place in our hearts.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"TJW3YZ","speakers":[{"code":"8YFYD9","name":"Jeremiah Paige","biography":"","avatar":"https://pretalx.com/media/avatars/FB_IMG_1479148712979_7HSytv7.jpg"}],"title":"Site Unseen: hidden python customization","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Python offers us the ability to customize how it starts up. In some cases arbitrary python code can get executed before the first line of your module is reached. This is necessary for some of its dynamic nature, like virtualenvs but can also be harnessed to make the interpreter experience truly personal.","description":"Python does a lot of work to customize itself when starting up. It also provides hooks for even more customization from users and packages during startup. Some of these are on by default while others must be enabled. Learn how to take advantage of Python's startup to craft a custom interpreter.\r\n\r\nPython has a dizzying array of environment variables, many of which are used for startup tuning. The list has grown so long that recent Python versions have split the description of these variables into their own help (--help-env). It is valuable to a Pythonista to know about all of these, but this talk will show you how to use a subset to personalize the Python runtime environment to your development needs and preferences.\r\n\r\nAs powerful as this customization is, much of it is possible through arbitrary code execution or otherwise manipulating the expected behavior of lookups. Since many of these behaviors happen automatically, it is important to know how to disable them for many reasons: security, reproducibility, and speed among them.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T16:05:00+02:00","end":"2023-07-21T16:35:00+02:00"},"image":null,"resources":[]},{"code":"D88LXE","speakers":[{"code":"UF9YY9","name":"Arthur Pastel","biography":"","avatar":null}],"title":"Building native Rust modules for Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"We'll cover the basics of Rust and demonstrate how to create a Rust module that can be imported and used within Python. Discover the advantages of using Rust in Python, especially regarding improved performance.","description":"As Python developers, we love our favorite language's ease of use and flexibility. However, performance becomes increasingly important as projects grow in size and complexity. That's where Rust can come in.\r\n\r\nIn this session, we'll explore the basics of Rust and demonstrate how to build native Rust modules for Python. We'll cover the advantages of using Rust in Python, including improved performance and memory safety, and how to leverage existing Rust libraries within our Python projects.\r\n\r\nDetailed plan:\r\n- Why Rust?\r\n- Introduction to Rust for Python developers\r\n- Rust tooling for Python module development\r\n- Building a simple Python extension module in Rust\r\n- Writing tests to ensure proper integration with Python\r\n- Performance comparisons between the Rust and Python implementation\r\n- Real-world examples of successful Rust and Python integration\r\n\r\nWhether you're a Python developer looking to improve the performance of your projects or just curious about Rust, this session will provide valuable insights and practical guidance on building native Rust modules for Python.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:15:00+02:00"},"image":null,"resources":[]},{"code":"YWGAUU","speakers":[],"title":"Lightning Talks Thursday","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T17:45:00+02:00","end":"2023-07-20T18:30:00+02:00"},"image":null,"resources":[]},{"code":"PNVM3S","speakers":[{"code":"8D7B98","name":"Sebastian Witowski","biography":"","avatar":"https://pretalx.com/media/avatars/2019-07-29_profesjonalny_fotograf_small_YUM1emC.jpg"}],"title":"Optimizing Your CI Pipelines","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"DevOps"},"track_id":3557,"state":"confirmed","abstract":"Take your Continuous Integration to the next level! Learn how to optimize your pipelines for faster and more efficient builds through parallelization, caching, failing early, conditional runs, and more.","description":"This talk aims to show you some ideas on how to improve your CI pipelines. I assume that you already know what CI is, you chose one of many tools available on the market and wrote some kind of a CI setup for your project. Great! Now, let’s take it one step forward and see how we can make it even better.\r\n\r\nI will talk mainly about improving the speed of your CI pipelines (which in many cases will correspond to also lowering costs if you use a paid service) through:\r\n\r\n- Making more things run at the same time - parallelization\r\n- Making things start faster - caching, smaller containers\r\n- Making things finish faster - failing early, splitting tests, running CI conditionally, etc.\r\n\r\nI will use Gitlab CI to show concrete examples, but I will also try to make this talk as generic as possible to make it useful for people using different CI tools.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[]},{"code":"3AD79Q","speakers":[{"code":"FTHHKT","name":"Chang She","biography":"","avatar":"https://pretalx.com/media/avatars/profile_2n3ndWn.jpg"}],"title":"Serverless billion-scale vector search for AI applications","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"From recommendation systems to LLM-based applications, vector search is a critical component of the modern AI workflow. Existing vector solutions are complicated to use, hard to maintain, and cost too much. LanceDB is a free open-source vector store that can perform low latency vector search on billion-scale vector datasets on a single node.","description":"LanceDB is powered by Lance format, a modern columnar data format for machine learning and data science. Compatible with pandas/polars/duckdb, Lance format supports vector index, predicate pushdown, and random access performance 2000x faster than parquet.\r\n\r\nThis talk will:\r\n1. Introduce LanceDB and show some example workflows\r\n2. Outline Lance format design and what makes it so fast\r\n3. Review the Lance roadmap and ecosystem integrations\r\n\r\nYou can find Lance here: https://github.com/eto-ai/lance","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T14:30:00+02:00"},"image":null,"resources":[]},{"code":"SEBRJA","speakers":[{"code":"ZPQUMD","name":"Sanskar Jethi","biography":"","avatar":"https://pretalx.com/media/avatars/Screen_Shot_2023-03-06_at_18.10.46_Ahp4Phk.png"}],"title":"Build, Serve, and Deploy a Fast, Production-Ready API with Python and Robyn","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Join our hands-on workshop and discover how to build fast, production-ready APIs using Robyn, a developer-friendly web framework for Python. We'll guide you through key features like GraphQL, WebSockets, and data validation, as well as essential topics like app structure, database modeling, and code splitting. With our workshop, you'll gain practical experience and valuable insights into Robyn's simple and extensible API, middleware, and deployment process.","description":"Are you looking to build a fast, scalable, and production-ready API using Python? Look no further than Robyn - one of the fastest and most developer-friendly web frameworks on the market! In this hands-on workshop, you'll learn how to use Robyn to build a robust API that can handle a high volume of requests.\r\n\r\nWe will walk you through the key features of Robyn. You'll also learn how to take advantage of Robyn's easy deployment process, fast shipping process, and middleware functionality to customize your app's behavior.\r\n\r\nWe'll cover essential topics like app structure, database modeling, and code splitting using views so that you can organize your code in a modular and reusable way. Additionally, we'll explore Robyn's simple and extensible API, which makes it easy to create a custom API that meets your unique requirements.\r\n\r\nThroughout the workshop, you'll have ample opportunity to practice your skills and ask questions. We'll provide a fully-functional codebase that you can use as a starting point for your own API, and our instructors will be on hand to help you troubleshoot any issues you encounter.\r\n\r\nBy the end of the workshop, you'll have the confidence and expertise to build a fast, production-ready API using Python and Robyn. Whether you're building a web app, mobile app, or IoT device, this workshop is a must-attend event for anyone looking to take their API development skills to the next level. Sign up today and get ready to supercharge your API development workflow!","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2187,"room":{"en":"Club E"},"start":"2023-07-17T13:45:00+02:00","end":"2023-07-17T15:15:00+02:00"},"image":null,"resources":[]},{"code":"ZSCRBC","speakers":[{"code":"PJWEGJ","name":"Jeremy Lempereur","biography":"","avatar":"https://pretalx.com/media/avatars/avatar_W4q7gBv.png"}],"title":"Write your first web API with Rust!","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":null,"track_id":null,"state":"confirmed","abstract":"with Jeremy","description":"In this 180 minutes tutorial, we will take a hands on approach to Rust, and write our first web API!\r\n\r\nWe will only focus on the parts you'll need to know to start building APIs, so you can learn while you build!\r\n\r\nNo need to know Rust as long as you're curious about the language.\r\nIf you've already built web APIs in python, you should be good to go!","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2184,"room":{"en":"Club B"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[]},{"code":"SXEJWS","speakers":[{"code":"BLNV7P","name":"Rodrigo Girão Serrão","biography":"","avatar":"https://pretalx.com/media/avatars/rgs_square_pMKs1bG.jpg"}],"title":"Practical introduction to descriptors","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Descriptors are not black magic and this practical tutorial will show you that.\r\nIn fact, you use descriptors every day and you don't even know it!\r\n\r\nThrough a series of practical, hands-on exercises, you will learn\r\n\r\n - how to create a descriptor;\r\n - how to use the dunder methods `__get__`, `__set__`, and `__set_name__`;\r\n - what the descriptor protocol is; and\r\n - where descriptors show up in day-to-day Python code.","description":"The expected Python level for participants is “intermediate”.\r\nIn practice, if you are comfortable with using the built-in `property` and if you have used [dunder methods](https://mathspp.com/blog/pydonts/dunder-methods) before, you should be fine.\r\n\r\nThis tutorial is based off of [an article I wrote about descriptors](https://mathspp.com/blog/pydonts/describing-descriptors).","duration":90,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2184,"room":{"en":"Club B"},"start":"2023-07-18T15:30:00+02:00","end":"2023-07-18T17:00:00+02:00"},"image":null,"resources":[]},{"code":"EWBEZZ","speakers":[{"code":"8VVS8L","name":"Cristián Maureira-Fredes","biography":"","avatar":"https://pretalx.com/media/avatars/profile1_RoJXZBn.JPG"}],"title":"The Python's stability promise","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Many modules you use and love have a portion of their implementation written in other languages, and for that a Python extension need to be made.\r\nPython offers a C-API that allow people extending the language, and being a nice glue-language, C is also a bridge to many other languages as well.\r\n\r\nSo if everything is simple, what's the deal with stability?\r\nChanges in the C-API might break the functionality in older versions, so PEP 387 saves the day with a policy for backward compatibility.\r\nStarting from Python 3.2, the Limited API was introduced, which defined a subset of Python's C-API that it's promised that if used, the code can be compiled in one version, and run in many others as well.\r\n\r\nAlso, having a Stable ABI compatible wheel, allow you to only have one-wheel-per-OS, and not one-wheel-per-python-version, which can simplify your release process.\r\n\r\nThis talk will introduce the Limited API concept, and provide the necessary information to include it in your project.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[]},{"code":"J3PUYZ","speakers":[{"code":"GLMZDC","name":"Radoslav Georgiev","biography":"","avatar":"https://pretalx.com/media/avatars/Radoslav_HackSoft_team_AiYbuH9.jpg"}],"title":"Upgrading Django - from legacy to latest","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Django is a framework that's been around for more than 15 years, which makes for enough legacy projects to deal with.\r\n\r\nIn this talk we'll show practical tips and tricks for how to get Django from legacy to latest & greatest.","description":"As developers, we love working with the latest version of our favorite tools & frameworks.\r\n\r\nBut sometimes, we have to deal with legacy projects & since Django has been around for more than 15 years - there are plenty of legacy Django projects to work with.\r\n\r\nWe either inherit one, or, somehow, we start with good intentions, but things deteriorate and we end up running Django that’s 2 or 3 major versions behind.\r\n\r\nNo matter how we end up in that legacy situation, we usually have 2 choices:\r\n\r\n1. Stay within the boundaries of the existing project.\r\n2. Try upgrading Django & the rest of the dependencies.\r\n\r\nThis talk will cover point 2, giving practical advice, derived from experience of migrating large legacy Django projects from versions 1 & 2, all the way to latest & greatest.\r\n\r\nWe will approach the problem in a structured way, going through different scenarios and showing practical steps, tips & tricks, so a human can deal with the challenges of upgrading a legacy Django project.\r\n\r\nWe will talk about starting from scratch vs. gradually upgrading.\r\n\r\nThe talk will cover the following topics:\r\n\r\n1. We will start with the most important question - How reckless can we be?\r\n - Is this in production?\r\n - Is this mission critical?\r\n - Is backwards compatibility important?\r\n - Are there tests? Automated? Test cases? Documentation?\r\n - Are we building from scratch or are we gradually upgrading?\r\n2. Next, we will go through various scenarios.\r\n - We are dealing with Django 2. What now?\r\n - We are dealing with Django 1 & Python 2. What now?\r\n - There are core dependencies that are no longer supported. What now?\r\n3. Finally, after we managed to get to Django 4, we will talk about how not to end up in the same situation again.\r\n\r\nThe end goal of the talk is to show that keeping up to date is possible, even if we start with a big legacy project.\r\n\r\nThe talk should serve as inspiration & example for those, who want to push their legacy Django projects forward.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:00:00+02:00"},"image":null,"resources":[]},{"code":"9GJFZZ","speakers":[{"code":"HGSWKF","name":"Adrin Jalali","biography":"","avatar":"https://pretalx.com/media/avatars/Farb3SW3229-w-small_mpaHfiN.png"}],"title":"Dynamically generated methods with a non-generic signature","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"In other words, Descriptors + PEP-362 (function signature object) and a seasoning of PEP-487 (simpler customization of class creation via `__init_subclass__`).\r\n\r\nThere are different ways to have generated methods and attributes attached to all classes in a library, and this talk presents the way we’re doing it in scikit-learn. Here you’ll understand the use-case, and see the details and challenges presented by it, and how we approached them.","description":"Title:\r\nDynamically generated methods with a non-generic signature\r\n\r\nAbstract:\r\nIn other words, Descriptors + PEP-362 (function signature object) and a seasoning of PEP-487 (simpler customization of class creation via `__init_subclass__`).\r\n\r\nThere are different ways to have generated methods and attributes attached to all classes in a library, and this talk presents the way we’re doing it in scikit-learn. Here you’ll understand the use-case, and see the details and challenges presented by it, and how we approached them.\r\n\r\nLong:\r\nThe use-case we study here goes as: we would like to add methods to all `Estimator`s, which are all subclasses of the `BaseEstimator`. The signature of the methods generated depends on the signature of other methods existing in those subclasses, but we also want to give the option of modifying generated methods without having to change the existing methods.\r\n\r\nThe solution we present involves a few concepts which we’ll explain during the talk:\r\nInvestigate the existing methods’ signature using `inspect`\r\nManually traverse MRO (method resolution order) and inspect class attributes allowing for modifications on what the `inspect` has concluded\r\nUse a descriptor to generate methods accordingly\r\nUse PEP-362 to attach a signature object to the generated methods\r\nDynamically generate docstrings for those methods\r\nUse PEP-487, aka `__init_subclass__`, to attach those methods to child classes when appropriate\r\n\r\nThis is a hands-on talk, explaining each concept in isolation and then showing how they fit together, and we’ll be presenting and testing code during the talk.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[]},{"code":"7KAKAG","speakers":[{"code":"NCU7GS","name":"Diego Russo","biography":"","avatar":"https://pretalx.com/media/avatars/diegor_dsWVgJQ.jpg"}],"title":"Python on Arm architecture","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Arm is everywhere technology matters: 250+ billion chips in everything from sensors to smartphones to servers. Due to its simplicity, versatility, and growth in popularity over the past decade Python is the most used language in the world.\r\n\r\nIn this presentation I will show you what the status of Python is on Arm architecture on all major operating systems and how you could help to improve it further.","description":"I've recently joined the RCVM (runtimes, compilers and virtual machines) team in the Open Source Software group at Arm for a secondment of 6 months, looking at the status of Python and its ecosystem on Arm architecture. I engage with Arm's internal teams, external partners and the upstream community looking at potential gaps and how these can be fixed. During the presentation I will introduce the Arm architecture and explain the status of Python and its ecosystem on it. I will share my findings about potential gaps to be fixed and how we (as company, partners and community) can fix them to have a flawless Python experience on Arm.\r\n\r\nThe high-level agenda for this talk is:\r\n\r\n* Introduction to Arm architecture and why this matters to you (5 min)\r\n* What it has been done to enable Python on Arm architecture (10 min)\r\n * This will likely involve activities from Arm, its partners and the upstream community\r\n * I'll try to cover all major operating systems\r\n* What gaps do we have today? (10 min)\r\n * This will be likely the result of my secondment\r\n* What's next? (5 min)\r\n * How you can help to get Python and its ecosystem even better on Arm architecture\r\n* Final remarks (5 min)","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:15:00+02:00"},"image":null,"resources":[]},{"code":"BHXSQU","speakers":[{"code":"UPWXFZ","name":"Sebastiaan Zeeff","biography":"","avatar":"https://pretalx.com/media/avatars/photo_square_cropped_1000_1000_fRtHpCV.jpg"}],"title":"Don’t Panic! A Developer’s Guide to Security","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Security"},"track_id":3571,"state":"confirmed","abstract":"As a developer, you play a crucial role in the security of your projects. At the same time, it can be difficult to know if what you’re doing is enough. Luckily, you don’t have to be a security expert to contribute to the security of your projects. Instead, you can use industry standards as a guide for your approach to security.\r\n\r\nIn this talk, I will introduce you to a framework that is especially accessible to developers, the [OWASP DevSecOps Maturity Model](https://owasp.org/www-project-devsecops-maturity-model/), and help you get started with a systematic approach to improving the security of your projects.","description":"One of the leading security principles today is that you should embrace security practices throughout your entire Software Development Lifecycle (SDLC), from design to deployment and maintenance. This means that you, as a developer, have a crucial part to play in keeping your projects secure.\r\n\r\nIn my talk, I will show you how to do that by introducing you to the [OWASP DevSecOps Maturity Model (DSOMM)](https://owasp.org/www-project-devsecops-maturity-model/). This model, which is very accessible to anyone familiar with DevOps, allows you to evaluate and improve your security practices. As the model describes the entire Software Development Lifecycle, it also serves as a nice reference framework for industry-standard security practices.\r\n\r\nI will start by giving you a high-level overview of the model and the principles behind it. I will also compare the DevSecOps Maturity Model with its older sibling, the [OWASP Software Assurance Maturity Model (SAMM)](https://owasp.org/www-project-samm/). Since it’s important, I will end the first part by going into the difference between having a good security culture and [checkbox compliance](https://en.wiktionary.org/wiki/checkbox_compliance).\r\n\r\nNext, I will take you through the dimensions of the DevSecOps Maturity Model, with a focus on those dimensions that are especially relevant to developers. I will illustrate each dimension with concrete examples of security practices that you can implement yourself today.\r\n\r\nFinally, I will talk about the best way to start implementing these practices. This is crucial: For instance, if you suddenly introduce all the tools you can find, chances are that the only thing you’ll learn from the plethora of alerts you’ll get is how to ignore these tools. Since some of us also have to deal with corporate policies and a limited sphere of influence within an organization, I will end with some pointers on how to advocate good security practices from the bottom up.\r\n\r\nAnd, if this all feels a bit overwhelming, remember the big friendly letters in the title: [**Don’t Panic!**](https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"STLLDQ","speakers":[{"code":"8F38DV","name":"Alexander CS Hendorf","biography":"","avatar":"https://pretalx.com/media/avatars/hendorf-2020_square_1LJOKAe.jpg"},{"code":"3D73MN","name":"Alessia Marcolini","biography":"","avatar":"https://pretalx.com/media/avatars/ale_speck.jpg"},{"code":"BXPSJJ","name":"Jimena Bermúdez","biography":"","avatar":"https://pretalx.com/media/avatars/20220331_212511_CgwexY0.jpg"},{"code":"FSFTU9","name":"Bára Drbohlavová","biography":"","avatar":"https://pretalx.com/media/avatars/mdevcamp_B%C3%A1ra_bmTMwOL.jpg"},{"code":"ZT9XSF","name":"Honza Javorek","biography":"","avatar":"https://pretalx.com/media/avatars/noc-question-square_87miS2B.jpg"},{"code":"HVQ7LJ","name":"Tim (文昌) Hsu","biography":"","avatar":null}],"title":"Python Organizers' Panel: Exploring Community-Driven Python Conferences","submission_type":{"en":"Panel"},"submission_type_id":2753,"track":null,"track_id":null,"state":"confirmed","abstract":"Did you know that Python conferences are primarily organized by the community? Go backstage and join us at the Python \r\n\r\nJoin us for an engaging and insightful discussion as we bring together a group of passionate Python conference organizers from the community. Discover the vibrant ecosystem behind Python conferences and gain valuable insights into their experiences, motivations, and learnings. \r\n\r\nWhether you are an aspiring organizer, a Python enthusiast, or simply curious about the inner workings of community-driven events, this panel promises to provide a wealth of knowledge and inspiration. Don't miss the opportunity to hear firsthand from the dedicated individuals who make Python conferences an incredible experience for all!","description":"Did you know that Python conferences are primarily organized by the community? Go backstage and join us at the Python Organizers' Panel.\r\n\r\nJoin us for an engaging and insightful discussion as we bring together a group of passionate Python conference organizers from the community. Discover the vibrant ecosystem behind Python conferences and gain valuable insights into their experiences, motivations, and learnings.\r\n\r\nIn this panel, we aim to shed light on the efforts and dedication of the individuals who selflessly devote their time and energy to create enriching events for the Python community.\r\n\r\nYou will get a glance behind the scenes and get a better grasp on why community-run conferences are so authentic, inclusive and diverse..\r\n\r\nOur panelists, seasoned organizers of Python conferences, will share their unique perspectives, recounting their journeys and the challenges and fun anecdotes planning and executing successful events.\r\n\r\nDuring the discussion, we will explore a wide range of topics, including:\r\n\r\n1. Behind the Scenes: Gain a behind-the-scenes understanding of what it takes to organize a Python conference.\r\n\r\n2. Community Engagement: Discover how Python conferences foster a sense of community and bring together Python enthusiasts from diverse backgrounds. Explore the ways in which organizers encourage participation, inclusivity, and collaboration.\r\n\r\n3. Motivations and Inspirations: Hear the personal stories of our panelists as they share what drives their passion for organizing Python conferences. Learn about their motivations, inspirations, and the impact they hope to make in the Python community.\r\n\r\n4. Challenges, Lessons Learned and Personal Growth: Delve into the challenges faced by organizers and the lessons they have learned along the way. Gain valuable insights into how they tackle obstacles, adapt to changing circumstances, and continually improve the conference experience. Furthermore, hear about takeaways organizers have for their professional and personal life.\r\n\r\nWhether you are an aspiring organizer, a Python enthusiast, or simply curious about the inner workings of community-driven events, this panel promises to provide a wealth of knowledge and inspiration. Don't miss the opportunity to hear firsthand from the dedicated individuals who make Python conferences an incredible experience for all!","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T15:00:00+02:00"},"image":null,"resources":[]},{"code":"XACJPR","speakers":[],"title":"Registration & Welcome @ Forum Hall Foyer 1st Floor","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"Welcome to EuroPython 2023! You can pick up your badges at any time during the week as long as we are open! If you want to avoid the morning rush on Wednesday, come on Monday and Tuesday!\r\n\r\nQueues will be sorted by your **first name** on your ticket. Your ticket can be located via your order confirmation email (from support@pretix.eu with the Subject: Your order: XXXX). If you ordered your ticket after we've sent badges for printing (after 10 July), go directly to the Info Desk (also referred as Debugging Desk) and a volunteer will help!","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T08:00:00+02:00","end":"2023-07-21T09:00:00+02:00"},"image":null,"resources":[]},{"code":"UBK8JB","speakers":[{"code":"SCAGQW","name":"Petr Viktorin","biography":"","avatar":null},{"code":"Z3AHU3","name":"Mia Bajić","biography":"","avatar":"https://pretalx.com/media/avatars/38294198_s4JNJKk.jpeg"}],"title":"Beginners' Day - PyLadies Snake Workshop","submission_type":{"en":"Free Workshop"},"submission_type_id":2754,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":105,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2186,"room":{"en":"Club D"},"start":"2023-07-17T17:15:00+02:00","end":"2023-07-17T19:00:00+02:00"},"image":null,"resources":[]},{"code":"NLZZBQ","speakers":[{"code":"8EGVC9","name":"Cheuk Ting Ho","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_1037_vjqZpqv.jpg"}],"title":"Polars vs Pandas - what's the difference?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Have you heard about Polars? What are the differences? Is Polars replacing Pandas? In this talk, we are going to demystify these questions about Polars. Compares the differences between Polars and Pandas, and explains the pros and cons of both of them.","description":"In this talk, we will explore what is Polars, a new tabular data management package that is written in Rust and used Arrow. Many people compare it to Pandas, the goto package for tabular data management for years. However, there is still some confusion regarding what Polars really is, whether or not it is more efficient than Pandas and if you can just replace Pandas with Polars. Hopefully, by the end of the talk, all of these questions will be answered and for people new to Polars, they will feel encouraged to try it out and more confident to make the switch.\r\n\r\n## Goal\r\n\r\nThis talk is for data scientists who have been using Pandas and have only heard of the name Polars to understand more about the difference and similarities between the two libraries and can make a better decision of which one to use when they start their next project.\r\n\r\n## Outline\r\n\r\n- Introduction: why I am talking about this (5 mins)\r\n- Polars is not Pandas 2.0 (5 mins)\r\n- If you do this in Pandas, do that in Polars (10 mins)\r\n- Performance comparison (5 mins)\r\n- Which one should I use? (5 mins)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[]},{"code":"VCNMWZ","speakers":[{"code":"QFSMUG","name":"Johannes Kolbe","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_20200508_134855_268_U8I76wS.jpg"}],"title":"Robot Holmes and The MLington Murder Mysteries","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"We will follow master detective Robot Holmes on his way to solve one of his hardest cases so far - a series of mysterious murders in the city of MLington. The traces lead him to the Vision-Language part of town, which has been a quiet and tranquil place with few incidents until lately. For a few months the neighbourhood has been growing extensively and careless benchmark leaders are dropping dead at an alarming rate.\r\n\r\nRobot Holmes sets out to find the cause for this new development and will gather intel on some of the most notorious of the new citizens of the Vision-Language neighbourhood and find out what makes them tick.","description":"Join the detective Robot Holmes on an adventure through the streets of the vibrant city of MLington. Together, we will find out who is behind a series of mysterious murders in the bustling neighbourhood of Vision-Language Village (ViLaVi).\r\n\r\nViLaVi has seen a steady influx of new posh Vision-Language models, which are not only rapidly expanding the size of the district but also the quality of services that are offered in these streets.\r\n\r\nOn his journey Robot Holmes will compile an overview of the tasks these new models excel in and find out what makes them so good at it. Additionally he will gather details on some of the most successful of the Vision-Language models and eventually find out who or what is behind the series of murders.\r\n\r\nBy the end of our journey you will have a better overview of the rapidly expanding Vision-Language neighbourhood and will have knowledge of the most important inner workings of Vision-Language models like CLIP, OWL-ViT, and BLIP. You will also know how to run them yourself in a few lines of code with the transformers library by Hugging Face.\r\n\r\nThe talk is for everyone interested in the topic of Vision-Language models and who wants to gain some first insights into their ways of working. People who already have a profound knowledge of Vision-Language models are welcome as well, as they probably have never seen it presented as a crime story in a strangely familiar city.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:50:00+02:00"},"image":null,"resources":[]},{"code":"BTRPGQ","speakers":[{"code":"7DHQ8R","name":"Alison Orellana Rios","biography":"","avatar":"https://pretalx.com/media/avatars/Ali23_k1D377Y.jpeg"}],"title":"OCR, Information through images","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"The acquisition and processing of images to find information is a field of multiple possibilities since the world has a lot of visual information that applied to different areas can demonstrate its great potential","description":"The area of recognition of patterns and text in various images will be seen, the processing that requires capturing, decoding and analyzing to finally obtain text from images or digital files.\r\nFrom these premises, we will see the use of the OpenCV library and its complementation with Tesseract, (together with Python) since both allow us to easily obtain visual data, to later generate textual information that is very useful for complex functions. within the automotive industry, autonomous driving, activity recording, signaling and sensors, robotics among many other fields of application.\r\nThe recovery of text from images is a fundamental pillar for the execution of multiple categories of data processing, which demonstrates its great importance as a base factor for a wide variety of applications.\r\nThe use of Python libraries allows us to contrast the ease and handling of graphic information, its complementation will allow us to understand a little better the application fields that the study of images and artificial vision have.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"LLHGKF","speakers":[{"code":"MDUMUQ","name":"Phil Elson","biography":"","avatar":"https://pretalx.com/media/avatars/headpic.small_ovEJ0FS.jpg"},{"code":"X7XAXH","name":"Ivan Sinkarenko","biography":"","avatar":"https://pretalx.com/media/avatars/fc30c66e443443e288ded73fc06a5243_gGc8U9b.jpg"}],"title":"The Python package repository accelerating software development at CERN","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"DevOps"},"track_id":3557,"state":"confirmed","abstract":"Python’s expressive syntax, ease of use, and powerful ecosystem of third-party packages are all major contributing factors to its thriving use for accelerator controls at CERN. Providing access to this rich ecosystem in a protected environment, whilst also allowing developers to augment this with internally developed packages is a key enabling service. Existing open-source solutions didn’t meet our needs, and the evolving Package index standardisation, as well as exposure to dependency confusion attacks, left us searching for a more modular and flexible approach. \r\n\r\n\r\nIn this presentation we will demonstrate the Python package upload, index, and browsing services developed at CERN. We will discuss the gradual transition from our existing repository service (based on Nexus), and demonstrate - with the help of recent packaging PEPs - the flexibility that modularising the services has brought, helping us to meet our needs for local specialisation and enhanced security measures.","description":"CERN, the European Organization for Nuclear Research, operates the largest particle physics laboratory in the world, including the 27km long Large Hadron Collider (LHC). Python is increasingly at the heart of CERN’s accelerator control software, with hundreds of domain specialists using Python on a daily basis to research, engineer and operate this world-leading facility. \r\n\r\nPython’s expressive syntax, ease of use, and powerful ecosystem of third-party packages are all major contributing factors to its success. Providing access to this rich ecosystem in a protected environment, whilst also allowing developers to augment this with internally developed packages is a key enabling service. Existing open-source solutions didn’t meet our needs, and the evolving Package index standardisation as well as exposure to dependency confusion attacks, left us wishing for a more modular and flexible approach. \r\n\r\nIn this presentation we will demonstrate the Python package upload, index, and browsing services developed at CERN, and will show that modularising the service gives greater opportunities for local specialisation and enhanced security approaches, as well as offering easy evaluation and adoption of PEP-standardised packaging enhancements. Starting from an existing package repository setup (based on Nexus), we will present the steps taken to gradually introduce this modular infrastructure using specific packaging PEPs to demonstrate the existing challenges and motivation. \r\n\r\nWe will look at code snippets that we are able to inject into the package index definition, and get into fine detail about recent packaging PEPs (e.g., PEP-658) in order to build the case that modularity is essential to build package index services that can evolve with the standards, and which can be adapted to the specific needs of an organisation such as CERN (e.g., specific authentication methods, resource ownership, network segregation). \r\n\r\nFinally, we will demonstrate our package browsing service, which is a FastAPI-based web service offering a browser on a “Simple Index” (PEP-503) package repository which mimics the look-and-feel of PyPI.org.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[]},{"code":"MEXBJ7","speakers":[{"code":"PK8LSS","name":"Vinícius Gubiani Ferreira","biography":"","avatar":"https://pretalx.com/media/avatars/profile_xKpnCpq.jpeg"}],"title":"CLI application development made easier with typer","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"Do you feel like digging through github code to learn how to use it is painful? Also think simply packaging and publishing your library to the world on pypi sometimes isn't enough to help others use what you are working on? Then come join me, as this talks is definitely for you!\r\n\r\nIn this presentation, I'd like to present you typer, and why it's probably the easiest and most affordable way to create command line applications (in 2023) that your users will love to use.\r\nWe'll discuss it's key strong points, how to structure your CLI application, and make it ready to be packaged and published with no hussle.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T14:35:00+02:00","end":"2023-07-19T15:05:00+02:00"},"image":null,"resources":[]},{"code":"FNLQH7","speakers":[{"code":"8PWUMB","name":"Sebastian Buczyński","biography":"","avatar":"https://pretalx.com/media/avatars/avatar_ZGw40Cn.png"}],"title":"BDD - how to make it work?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Testing"},"track_id":3572,"state":"confirmed","abstract":"Behaviour-driven development promises evergreen documentation or human-readable executable specification - sounds great. However, adopting it takes much more than simply installing behave or pytest-bdd and writing Gherkin. This talk will show what.","description":"This talk discusses common issues with BDD specifications, such as:\r\n- lengthy, hard to maintain & read specifications\r\n- intertwined order of given-when-then steps\r\n- technical details leaking to specifications.\r\n\r\nThen it shows how to deal with them:\r\n- how to write good specifications,\r\n- what do modularization and DDD have to do with focused scenarios,\r\n- building automation layer to have reusable blocks for Gherkin scenarios.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:50:00+02:00"},"image":null,"resources":[]},{"code":"DA3GWB","speakers":[{"code":"CWD3DM","name":"Patrick Arminio","biography":"","avatar":"https://pretalx.com/media/avatars/489cdabedd1112f98474038939668778_ZyNQo0D.jpg"}],"title":"GraphQL Subscriptions: Real-time Data with WebSockets* and Strawberry 🍓","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Bring your GraphQL APIs to life with real-time data using Strawberry! 🌟 In this talk, we'll dive into GraphQL Subscriptions and explore how to leverage WebSockets for interactive, real-time updates. Say goodbye to constant polling and hello to efficient, seamless communication!\r\n\r\nKey insights:\r\n\r\n- Understanding GraphQL Subscriptions and their role in real-time data delivery.\r\n- Setting up WebSocket connections and integrating them with your GraphQL server using Strawberry.\r\n- Designing subscription schemas and handling server-side events for seamless updates.\r\n- Enhancing client-side experiences with real-time data and updates.","description":"GraphQL Subscriptions offer a powerful solution to deliver real-time data\r\nefficiently, without the need for constant polling. In this talk, we'll explore\r\nthe power of GraphQL Subscriptions using WebSockets and Strawberry,\r\nempowering you to build dynamic, real-time applications with ease.\r\n\r\nDuring this session, we'll cover:\r\n\r\n1. An introduction to GraphQL Subscriptions: We'll discuss the concept of\r\n GraphQL Subscriptions, their role in real-time data delivery, and how they\r\n differ from traditional polling techniques. You'll gain a deep understanding\r\n of their importance in creating modern, responsive applications.\r\n\r\n2. Setting up WebSockets with GraphQL and Strawberry: We'll guide you through\r\n the process of integrating WebSocket connections with your GraphQL server\r\n using the Strawberry library. Learn how to establish and manage secure,\r\n real-time communication channels between your server and clients.\r\n\r\n3. Designing and implementing subscription schemas: We'll walk you through the\r\n process of designing and implementing subscription schemas using Strawberry,\r\n allowing you to define the structure and behavior of real-time updates. Learn\r\n how to handle server-side events and ensure seamless updates for clients.\r\n\r\n4. Enhancing client-side experiences: Discover how to leverage real-time data\r\n and updates in your client-side applications to create engaging and\r\n interactive experiences for users. We'll share best practices for handling\r\n GraphQL Subscriptions on the client-side, enabling you to build dynamic,\r\n real-time applications that delight your users.\r\n\r\nBy the end of this talk, you'll be well-equipped to harness the power of GraphQL\r\nSubscriptions using WebSockets and Strawberry, enabling you to create\r\nresponsive, real-time applications!","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[]},{"code":"PQHEAS","speakers":[{"code":"KMTAWE","name":"Merve Noyan","biography":"","avatar":"https://pretalx.com/media/avatars/Ekran_Resmi_2021-02-12_22.12.03_VcQ0pcZ.PNG"}],"title":"Responding to Earthquakes using Machine Learning and Racing through Time","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Right after the devastating earthquakes in Turkey, there has been a massive flow of tweets and posts from survivors and their relatives, calling for help. There was a need to extract the data, make it meaningful and open to public, so we have come up with afetharita.com. The machine learning part of the application is completely based on open-source tools in Python and I will go through the pipeline and the process.","description":"On February 6, 2023, earthquakes measuring 7.7 and 7.6 hit South Eastern Turkey, affecting 10 cities and resulting in more than 42,000 deaths and 120,000 injured as of February 21.\r\n\r\nA few hours after the earthquake, a group of programmers started a Discord server to roll out an application called afetharita, literally meaning, disaster map. This application would serve search & rescue teams and volunteers to find survivors and bring them help. The need for such an app arose when survivors posted screenshots of texts with their addresses and what they needed (including rescue) on social media. Some survivors also tweeted what they needed so their relatives knew they were alive and that they need rescue. Needing to extract information from these tweets, we developed various applications to turn them into structured data and raced against time in developing and deploying these apps.\r\nThe machine learning part of the application is completely based on open-source tools in Python and I will go through the pipeline and the process.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:35:00+02:00"},"image":null,"resources":[]},{"code":"3GWJCA","speakers":[{"code":"9SCBB3","name":"Nar Saynorath","biography":"","avatar":"https://pretalx.com/media/avatars/Nar_KUVl2mE.jpeg"}],"title":"Cultivating a Performance Mindset","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":null,"track_id":null,"state":"confirmed","abstract":"As developers, we learn early on that it’s important to focus on getting our code to work without unnecessarily pre-optimizing, but how do we learn to eventually optimize our code? What do we look for? How do you know when something is slow? How do you **do** something about it?\r\n\r\nIn this talk, we’ll discuss why your application performance matters, how you can learn to identify what matters most to you, and how Sentry has you in mind so you can effectively spend time improving the performance of critical user flows in your application.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T14:35:00+02:00","end":"2023-07-20T15:05:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/3GWJCA/resources/Cultivating_a_Performance_Mindset_h41ZvIA.pptx","description":"Powerpoint Slides"}]},{"code":"CUEWG8","speakers":[{"code":"CHTAPC","name":"Bojan Miletic","biography":"","avatar":"https://pretalx.com/media/avatars/bojanLinkedIn_pNAhnuD.png"}],"title":"Pydantic: Making life easier with data validation","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"Abstract:\r\nData validation is a critical component of any software application, ensuring that the data processed by the application is accurate and consistent. However, data validation can often be a tedious and error-prone process, especially when dealing with complex data structures. Pydantic, a powerful and flexible data validation library for Python, simplifies the process of data validation by providing a declarative syntax that is easy to read and write.","description":"In this talk, we will introduce Pydantic and discuss how it can be used to make data validation easy in Python. We will cover the following topics:\r\n\r\n- What is Pydantic and how does it work?\r\n- How to define data models using Pydantic\r\n- Validating and converting data using Pydantic\r\n- Working with complex data structures using Pydantic\r\n- Integrating Pydantic with other Python libraries\r\n\r\nWe will also provide real-world examples of how Pydantic has been used to simplify data validation in production applications. By the end of this talk, attendees will have a solid understanding of Pydantic and how it can be used to make data validation easy in their Python applications.\r\n\r\nTarget Audience:\r\nThis talk is aimed at Python developers of all levels who are interested in simplifying the process of data validation in their applications. No prior knowledge of Pydantic is required, but a basic understanding of Python is recommended.\r\n\r\nConclusion:\r\nIn this talk, attendees will learn how to use Pydantic to simplify data validation in their Python applications. Whether you are building a small script or a large-scale application, Pydantic can be an invaluable tool for data validation","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T14:30:00+02:00"},"image":null,"resources":[]},{"code":"AXWQBB","speakers":[{"code":"LGD9GF","name":"Alexys Jacob","biography":"","avatar":"https://pretalx.com/media/avatars/08a6119bcdbeb9d58e3fc74154cde84b_kOKv1hX.jpg"}],"title":"Would Rust make you a better Pythonista?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"What would a Pythonista gain from becoming a Rustacean other than semicolons and brackets?\r\n\r\nIn this talk I'll share the learnings and achievements I got by adding the Rust programming language into my Python life. Illustrating a real story now in production at scale, I'll walk you through all the pains and joys of this unexpected journey which changed me more than I anticipated.\r\n\r\nProposed agenda:\r\n- Project introduction\r\n- Motivations of selecting this project to learn Rust\r\n- Tales of a Pythonista learning Rust\r\n- Results, numbers and production graphs\r\n- How Rust influences my daily Python\r\n- Was it worth it? Should you do it too?","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:55:00+02:00"},"image":null,"resources":[]},{"code":"U3SEG8","speakers":[{"code":"MGH3VT","name":"Luka Raljević","biography":"","avatar":"https://pretalx.com/media/avatars/luka_raljevic_2U2Ex9q.jpg"}],"title":"Dive into codebase like a pro","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"How to get familiar with codebase you need to maintain with minimum suffering? How to leave codebase easier to deal with for your colleagues so they don’t have to suffer like you did?\r\n\r\nIf you are experienced developer or a junior just starting your journey, inheriting codebase can be a very challenging task. Especially if the codebase is not quite up to your standards, or it’s just huge and complex beast.\r\n\r\nI will convey my experience and tips and tricks on inheriting code I acquired during 12 years of software development on new and old projects.\r\n\r\nThe talk will provide guidelines to ease taking over code from somebody else, as well as remind developers of the importance that planning, preparation and documentation have in facilitating code change and project growth.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"S3LKMH","speakers":[{"code":"7NCRBJ","name":"Furkan Taha ÖNDER","biography":"","avatar":"https://pretalx.com/media/avatars/ba6bbe407c31fcaff47da91b1cf8fa60_GeZC5OL.jpg"}],"title":"Instrumenting CPython with eBPF","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"eBPF is a amazing technology that can run sandboxed programs in a privileged context such as the operating system kernel. But are eBPF programs limited to the operating system kernel? eBPF programs have fast access to resources like memory. These programs can access the memory of running Python applications very faster, allowing you to instrument Python processes with low overhead!\r\n\r\nIn my presentation, I will show how Python's internal structure supports instrumentation through the use of eBPF. Following that, we'll experiment with eBPF and other modern techniques to instrumenting the Python applications. I'll explain explain why eBPF is more appropriate and efficient technology for instrumentation. By the end of the session, we will have developed an eBPF-based simple tracing tool for instrumenting Python applications.\r\n\r\nAfter this presentation, you will better understand how eBPF can help you in the instrumentation of Python applications.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"DQBDJE","speakers":[{"code":"ST8PJ9","name":"Maria Jose Molina Contreras","biography":"","avatar":"https://pretalx.com/media/avatars/mj_Vsl1Qia.jpg"}],"title":"Continue Thinking Small: Next level machine learning with TinyML","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Makers, Microcontrollers and IoT"},"track_id":3560,"state":"confirmed","abstract":"The Internet of Things has been flourishing for many years, and Python has been playing an important role on the “easy to automate” topic for many devices. One of the challenges for the next generation ML is to think small, you read that right “thinking small”. It’s time to start being able to have mechanisms with super well-trained ML models in small-devices: ML on Microcontrollers. We are going to dive into TinyML and evaluate different setups to interact with sensors on microcontrollers. We will discuss the different hardware options and frameworks to start with, while checking different use cases that TinyML can solve, like: agriculture, conservation, health issues detection, ecology monitoring etc. In this talk, you will learn about Tiny Machine Learning (TinyML), which is an approach that explores machine learning to be deployed in embedded systems that enable run ML on microcontrollers. Lastly, we will discuss real use-cases and a practical case that could be implemented at home","description":"We usually associate the future of computing as large clusters being able to perform tasks in a fraction of a second, but is it really the only scenario on how computational hardware will evolve?\r\n\r\nMachine learning has become an important component in our societies, we see how people, communities, and global companies are focusing their resources into improving their technological stack, and being the leader into the next generation of AI.\r\nAt the same time that we see clusters getting larger, GPUs more powerful, and our phones are practically computers being capable of doing almost everything, we do see that some of the smart devices are becoming smaller.\r\n\r\nThe Internet of Things has been flourishing for many years, and Python has been playing an important role on the “easy to automate” topic for many devices, but can Python help us in all scenarios? One of the challenges for the next generation ML is to think small, you read that right “thinking small”.\r\n\r\nIt’s time to start being able to have mechanisms with super well-trained ML models in small-devices: ML on Microcontrollers.\r\n\r\nWe are going to dive into TinyML and evaluate different setups to interact with sensors on microcontrollers. We will discuss the different hardware options and frameworks to start with, while checking different use cases that TinyML can solve, like: agriculture, conservation, health issues detection, ecology monitoring, autonomous vehicles, etc.\r\n\r\nIn this talk, you will learn about Tiny Machine Learning (TinyML), which is an approach that explores machine learning to be deployed in embedded systems that enable run ML on microcontrollers. \r\nLastly, we will discuss a real use-case that you will be able to implement at home.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T14:30:00+02:00"},"image":null,"resources":[]},{"code":"URF3Z9","speakers":[{"code":"ZX7UWL","name":"Artur Smęt","biography":"","avatar":"https://pretalx.com/media/avatars/_MG_2433_Yu1pPyC.jpg"}],"title":"GraphQL as an umbrella for microservices","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"Systems built with microservices tend to become complex over time. There are several approaches that encapsulate complex distributed system layouts with an API Gateway, or backends for frontends. Having a GraphQL gateway is one of the available options. This method of delivering client-facing APIs has become the standard with modern single-page applications.","description":"During this talk you will:\r\n\r\n* Discover the basics of GraphQL as the communication layer and it's core differences from REST approach\r\n* See the real life example of how my team used [Ariadne](https://ariadnegraphql.org/) - an open-source python GraphQL server, to abstract the complexity of a large-scale, microservice-oriented system\r\n* Learn about some common mistakes, caveats, and outtakes from taking such an approach\r\n* Discover how deploying GraphQL as an API gateway speeds up the development process, makes the engineering team more productive and allows both, front-end and back-end engineers to shape the APIs together","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T16:05:00+02:00","end":"2023-07-21T16:35:00+02:00"},"image":null,"resources":[]},{"code":"JWTGPG","speakers":[{"code":"SCAGQW","name":"Petr Viktorin","biography":"","avatar":null},{"code":"Z3AHU3","name":"Mia Bajić","biography":"","avatar":"https://pretalx.com/media/avatars/38294198_s4JNJKk.jpeg"}],"title":"Beginners' Day - PyLadies Snake Workshop","submission_type":{"en":"Free Workshop"},"submission_type_id":2754,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":90,"slot_count":5,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2186,"room":{"en":"Club D"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T10:00:00+02:00"},"image":null,"resources":[]},{"code":"BSZFSA","speakers":[{"code":"ZP7QSM","name":"Adarsh Divakaran","biography":"","avatar":"https://pretalx.com/media/avatars/Headshot_square1_KJF8OoO.JPG"},{"code":"AYQRFP","name":"Thameem Karakkoth","biography":"","avatar":"https://pretalx.com/media/avatars/Frame_1_1hUPViV.jpg"}],"title":"Pygoat - Learn Django security the hard way","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Learn to secure your Django apps by attacking (and then securing) Pygoat - An intentionally vulnerable Python Django application. Explore the OWASP top 10 vulnerabilities and understand how to mitigate them from Django apps.","description":"Pygoat is an intentionally vulnerable Python Django application that can be used to learn to secure our Django apps. In this talk, we will attack a deployed Pygoat application, identify the underlying security issues in our code, and then secure it. We will learn about common security vulnerabilities (OWASP Top 10) in Django apps and how to fix them so that we can keep our applications safe from attackers.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"RMHLRA","speakers":[{"code":"KHLYGS","name":"Andrew Smith","biography":"","avatar":"https://pretalx.com/media/avatars/andrew_smith_9JiAMaj.jpg"}],"title":"Welcome to Your World","submission_type":{"en":"Keynote"},"submission_type_id":2752,"track":null,"track_id":null,"state":"confirmed","abstract":"In 2018 the author, journalist and broadcaster Andrew Smith realized that although computer code now mediated almost everything he did, he understood next to nothing about it. The only way to participate in the growing debates around what our code should and should not do, he reasoned, would be to enter the world of the people writing it, by learning to code himself. Nice idea! In a near thirty year writing career, Smith had flown to the edge of space, slept under Spearfish torpedoes aboard a nuclear hunter-killer submarine, roamed the vast Victorian sewer system under London, spent six months on the road with Bianca Jagger, toured with artists including Radiohead and The Prodigy, and been perhaps the only person ever to shake Fidel Castro's hand by accident. None of which prepared him for the challenge of learning to code. After a miserable false start with JavaScript, a kindly C++ programmer pointed him in the direction of Python and he fell in love not just with the language, but with the remarkable community behind it. In this unusual keynote, Andrew, with help from his great friend and Python stalwart Nicholas Tollervey, will describe what he found—explaining the joys, frustrations and surprises, while touching on his experiences in Silicon Valley and the intriguing historical discoveries he made during his research. Smith's meditation on code's relationship to the wider world, Devil in the Stack: Searching for the Soul of the New Machine, will be published next March. This is his chance to share a preview of his reflections with the community that did so much to make them possible, of which he is grateful to consider himself a part.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T16:55:00+02:00","end":"2023-07-20T17:40:00+02:00"},"image":null,"resources":[]},{"code":"938SAD","speakers":[],"title":"Lightning Talks Wednesday","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T17:50:00+02:00","end":"2023-07-19T18:35:00+02:00"},"image":null,"resources":[]},{"code":"BRY8JS","speakers":[{"code":"QN7YGR","name":"Emma Delescolle","biography":"","avatar":"https://pretalx.com/media/avatars/2062c924ffdd2a54dcd3b369a650191d_VxQPRIe.jpg"}],"title":"Leveraging the power of Django REST Framework's renderers with HTMX.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"HTMX has been quite popular lately in the Django circles and has demonstrated how powerful it can be with vanilla Django. But... have you thought about HTMX paired with Django REST Framework and more specifically paired with DRF's flexible renderer system?","description":"Django is most known for its admin. Ironically it is also one of the less Django-like parts of Django and one with many dimensions that make it harder to extend and fully customize. That's probably why, for several years, people have been trying to find alternatives to Django admin, packages that have had variables amounts of success like Django Grappelli, Django Admin2 or Django Admin Bootstrap.\r\n\r\nOne of these attempts is actually part of a very popular Django package, it's the Admin Renderer from Django REST Framework. Although it is quite powerful, I'm not sure it really ever caught on in the Django community.\r\n\r\nBut the Admin renderer is not the only renderer packaged with DRF, most of us are likely familiar with the Browsable API renderer and some of us have probably heard of the Template HTML renderer.\r\n\r\nBefore diving into the renderer itself, we will do a quick round-up of the capabilities DRF offers, both out-of-the box and also with a few extra addons and compare that to what Django Admin offers.\r\n\r\nFinally we will look at the mechanics of DRF renderers and how, coupled with HTMX, the Template HTML renderer can bring dynamicity to an admin-like, feature-rich, CRUD interface born of Django REST Framework.\r\n\r\nIt will be up to you to decide... Is Django REST Framework going to be the basis of the admin of your next Django project???","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/BRY8JS/resources/slides_OBUSeWi.md","description":"Slides"}]},{"code":"REVKYV","speakers":[{"code":"ALN8NK","name":"Damian Wysocki","biography":"","avatar":"https://pretalx.com/media/avatars/day3-13_1_oqn8bf3.jpg"}],"title":"Deep Dive into Asynchronous SQLAlchemy - Transactions and Connections","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"SQLAlchemy is one of the most popular ORM libraries in Python. In this talk I will try to present caveats and gotchas that other Pythonists can find on their way while writing the asynchronous backend application using SQLAlchemy as an ORM. Mainly we will focus on how SQLAlchemy handles transactions and connections to the database and what issues we may face because of it.","description":"The presentation is about SQLAlchemy, which is an Object-Relational Mapping (ORM) library used in Python for working with databases. \r\n\r\nThe presenter will discuss the challenges and potential problems that developers may encounter when using SQLAlchemy to create asynchronous backend applications.\r\n\r\nThe main focus of the talk will be on how SQLAlchemy handles transactions and connections to the database, which are crucial components of building a robust and reliable backend system. The presenter will explain some of the common caveats and gotchas that can arise when using SQLAlchemy in this context.\r\n\r\nOverall, the talk aims to provide valuable insights and practical advice for Python developers who are interested in working with SQLAlchemy and building scalable, high-performance backend applications.\r\n\r\nAs a bonus we'll see how other popular asynchronous ORM handles connections to the database.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T14:35:00+02:00","end":"2023-07-21T15:05:00+02:00"},"image":null,"resources":[]},{"code":"ETSMPK","speakers":[{"code":"ANZZRH","name":"Kairo de Araujo","biography":"","avatar":"https://pretalx.com/media/avatars/Kairo_de_Araujo_y22uEvQ.jpg"},{"code":"8SJZJT","name":"Martin Vrachev","biography":"","avatar":"https://pretalx.com/media/avatars/profile_photo_xzKYaDx.jpg"}],"title":"PEP 458 a solution not only for PyPI","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Security"},"track_id":3571,"state":"confirmed","abstract":"[PEP 458](https://peps.python.org/pep-0458/) uses cryptographic signing on [PyPI](https://pypi.org) to protect Python packages against attackers. The implementation of the PEP inspired the [Repository Service for TUF (RSTUF)](http://repository-service-tuf.readthedocs.io/), a project [accepted into the OpenSSF sandbox](https://github.com/ossf/tac/pull/137). We identified that the design could benefit other organizations and repositories looking to secure their software supply chains.\r\nIn this talk we would answer the following questions: \r\n- How did the PEP 458 design help to start the Repository Service for TUF (RSTUF)?\r\n- How could RSTUF be used for PyPI with its millions of packages?\r\n- How can RSTUF be deployed by any organization at any scale without requiring TUF expertise?\r\n\r\nAdditionally, in this talk, we would give an overview of PEP 458, how it works, and give a high-level overview of TUF.","description":"[PEP 458](https://peps.python.org/pep-0458/) was designed to protect [PyPI](https://pypi.org) against various possible attacks on PyPIs own content distribution network and its mirrors while giving administrators a mechanism to recover from a compromise if it happens using [The Update Framework (TUF)](http://theupdateframework.io/).\r\nUsing [Repository Service for TUF (RSTUF)](http://repository-service-tuf.readthedocs.io/) is actually deploying TUF as a service based on PEP 458 design to solve a lot of common problems for repositories. It will help PyPI maintainers to integrate TUF using simple REST API calls without adding a large amount of code in the PyPI/Warehouse code base. \r\nIn this talk, we will recap PEP 458 and TUF, and what they are good for. We will show how RSTUF works and demonstrate the integration with Warehouse. Additionally, we will share how other organizations could use RSTUF to protect their clients.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T14:35:00+02:00","end":"2023-07-20T15:05:00+02:00"},"image":null,"resources":[]},{"code":"DT9HXE","speakers":[{"code":"8F38DV","name":"Alexander CS Hendorf","biography":"","avatar":"https://pretalx.com/media/avatars/hendorf-2020_square_1LJOKAe.jpg"},{"code":"VHVMNZ","name":"Lucas-Raphael Müller","biography":"","avatar":null}],"title":"Solving Data Problems in Management Accounting","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Controllers deal with numbers all day long. They have to check a lot of data from different sources. Often the reports contain erroneous or missing data. Identifying outliers and suspicious data is time-consuming. \r\n\r\nThis presentation will introduce a Small Data Problem-End2End workflow using statistical tools and machine learning to make controllers' jobs easier and help them be more productive.\r\n\r\nWe will demonstrate how we used amongst others, \r\n- [scipy](https://scipy.org/)\r\n- [pandera](https://pandera.readthedocs.io/en/stable/)\r\n- [dirty cat](https://dirty-cat.github.io/stable/)\r\n- [nltk](https://www.nltk.org/)\r\n- [fastnumbers](https://pypi.org/project/fastnumbers/)\r\nto create a self-improving system to automate the screening of reports and report outliers in advance so that they can be eliminated more quickly.","description":"Controllers deal with numbers all day long. They have to check a lot of data from different sources. Often the reports contain erroneous or missing data. Identifying outliers and suspicious data is time-consuming. \r\n\r\nThis presentation will introduce a Small Data Problem-End2End workflow using statistical tools and machine learning to make controllers' jobs easier and help them be more productive.\r\n\r\nIt is a common business problem that the data provided is incorrect due to misunderstandings, manual input, cultural differences, typos, etc. and these errors can often be weeded out in short order. \r\n\r\nThis talk will show how heuristic data validation can help to facilitate - in our specific use case controller - automated detection of inaccuracies, outliers or input errors. \r\n\r\nIn our use case we have to deal with a lot of reports. Some of the reports contain hundreds of columns and are very individually structured. Defining data types and expectations for each individual report for each column would be too time-consuming. \r\nWe are dealing with a technically manageable number of data sets, but too many to leave to human visual control alone.\r\n\r\nIn our talk we will present strategies on how we have solved small data problems using heuristic and statistical methods.\r\n\r\nQuestions to tackle:\r\n* Are None values ok or not, and if - why?\r\n* Is a value an outlier or a typo?\r\n* How much deviation is ok, or not?\r\n* How can historical data help and to what extent?\r\n* Which other external information can help to validate data?\r\n\r\nWe will demonstrate how we used amongst others, \r\n- [scipy](https://scipy.org/)\r\n- [pandera](https://pandera.readthedocs.io/en/stable/)\r\n- [dirty cat](https://dirty-cat.github.io/stable/)\r\n- [nltk](https://www.nltk.org/)\r\n- [fastnumbers](https://pypi.org/project/fastnumbers/)\r\nto create a self-improving system to automate the screening of reports and report outliers in advance so that they can be eliminated more quickly.\r\n\r\nAudience:\r\nThis presentation is intended for anyone interested in data quality management without heavy lifting. Especially small data problems.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T14:30:00+02:00"},"image":null,"resources":[]},{"code":"KYAWCJ","speakers":[{"code":"YFCVFV","name":"Łukasz Langa","biography":"","avatar":"https://pretalx.com/media/avatars/%C5%81ukasz_Langa_Portret_2021.10_Prawy_profil_VNI4Aj1.jpeg"}],"title":"Games of Life: generative art in Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Arts, Crafts Culture & Demos"},"track_id":3544,"state":"confirmed","abstract":"We're entering the age of machine-generated art. Many of the new systems are shockingly impressive but impossible to replicate by individuals because they rely on complex machine learning techniques with huge datasets that aren't feasible to do in a home environment. Fortunately, there's an entire group of clever approaches to generate graphics that look cohesive, unique, and deliberate... and that you can easily do on your own computer.\r\n\r\nIn this short talk we'll go through a few of those algorithms like Clifford attractors, slime mold simulation, and reduction of source imagery to geometric primitives. We'll generate images and animations, we'll dabble in 2D and 3D. You'll leave the talk with your own ideas how to create attractive visualizations out of thin air. The talk assumes familiarity with Python and high-school math.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:50:00+02:00"},"image":null,"resources":[]},{"code":"ZUSHKU","speakers":[{"code":"BQVLYL","name":"Nicholas Tollervey","biography":"","avatar":"https://pretalx.com/media/avatars/avatar_large_FOn6ad4.jpg"},{"code":"EBNEWH","name":"Fabio Pliger","biography":"","avatar":"https://pretalx.com/media/avatars/Fabio_Headshot_2_RUflFuP.jpeg"}],"title":"PyScript and the magic of Python in the browser","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Python running on the browser is the new frontier to creating true client-side web and mobile applications. Today we can many incredible things that were not possible just a few months ago before WASM, Pyodide and PyScript.\r\n\r\nThe talk will cover what's possible today, cover the major features offered by PyScript and walk through creating amazing applications and games with Python, on the browser, without the need for Python server-side logic.","description":"A year after its announcement, PyScript is a very different project. From major performance improvements to great plugins, PyScript applications allow a new way to create fun and educational opportunities that were not possible until now. This talk summarizes the work done over the past year, and what you might expect in the future. In this talk I will:\r\n\r\n* Give a quick overview of what PyScript is\r\n* Talk about features and changes introduced this year:\r\n * Support for the blazing-fast MicroPython interpreter\r\n * Powerful Plugins System (support for Python and Javascript)\r\n * Much improved Pythonic Dom interface\r\n * Improved support for data\r\n * Execution in web workers\r\n * Many amazing plugins!\r\n * Much more…\r\n* Show how to create PyScript applications [running on the browser] and leverage the new possibilities that the web and the browser provide to the Python ecosystem\r\n* Live demo of amazing [PyScript] web applications running Python on the browser\r\n* Give you a sneak preview of some upcoming features\r\n\r\nWhat should you expect? Fun! Yes, I promise we’ll make it fun :) To walk away with a good understanding of how to write a PyScript application To have an understanding of what parts of Python on the browser are different than “regular Python” See snippets and examples that you can use to build your own PyScript apps Why should you care? Python on the browser is the new frontier of Python. You’ll have the chance to learn more about it, how to create your own Python apps on the browser, and see what’s coming.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:15:00+02:00"},"image":null,"resources":[{"resource":"https://ntoll.org/static/presentations/2023-pyscript-magic/index.html","description":"Web based slides (press \"S\" for speaker notes and allow popups from the site)"}]},{"code":"NYMGMF","speakers":[{"code":"SM9CEH","name":"Alexander Darby","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_1369_ecfBLev.jpg"}],"title":"A Magic Implementation of NotImplemented","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Testing"},"track_id":3572,"state":"confirmed","abstract":"[Dirty Equals](https://github.com/samuelcolvin/dirty-equals) is a new python library by Samuel Colvin, the creator of Pydantic. It will transform how you write tests, especially for APIs. \r\n\r\nI made some contributions to it, which forever changed how I thought about `NotImplemented`. I thought it was a placeholder for unfinished work and unexpected use cases. I thought the language quirks it created in equality comparison were annoying. \r\n\r\nBut in **DirtyEquals**, it’s a magic way to transform Python’s built in equality operator... And that changed how I think about language quirks, full stop.","description":"*Intro (5m)*\r\n\r\nI adore Pydantic. It's a fantastic library that creates classes which check types at Python runtime. In short, it turns type hints into static types.\r\n\r\nI had a crush on the code that did this. I thought it was so cool to trick Python into behaving this way. I wanted to learn how this library worked. But when I went to contribute to it, I saw it wasn't looking for contributions.\r\n\r\nSo, I decided to look at his other projects in the hope I could learn something there.\r\n\r\n*What is Dirty Equals (10m)*\r\n\r\nThis is how I discovered **DirtyEquals**. This library lets you write tests in a whole new way. With **DirtyEquals**., you get to (mis)use Python’s equality operator in way that speeds up testing. \r\n\r\n**DirtyEquals** lets you write assert statements that compare objects to custom types, This makes your tests more declarative and more readable. I’ll go over several examples in this section.\r\n\r\n*How Does It Work (10m)*\r\n\r\nYou might be thinking, isn’t it strange that the Python equality operator can work in this way? Shouldn’t it return False, since the **DirtyEquals**. types are different to the types they’re compared to?\r\n\r\nThis is where things get interesting. It turns out that if you write `x == y` in Python, three things happen:\r\n\r\n1. First, Python looks at `x.__eq__` to see if x and y are the same.\r\n2. If `y` is a new type, it returns `NotImplemented` because the `y`'s type isn’t part of Python’s built ins. So there isn’t an implementation for how Python checks the type for equality.\r\n3. But - here’s the kooky bit - Python then checks `y.__eq__` ! So if we can hook into the `y.__eq__` part, we can write our own rules for the equality operator.\r\n\r\nThere are so many things you can do mucking around with `.__eq__` and `.__ne__`, which is what I’ll cover in this section.\r\n\r\n*Conclusion (5m)*\r\n\r\nWhen it comes to coding, I think we should pursue our crushes. If there’s code that you find attractive, then see if you can contribute! As a result, I learnt things I would never have learnt any other way.\r\n\r\nIn fact, the main thing I learnt was a completely different approach to coding. To me, mucking around with the `.__eq__` seemed like a terrible idea that would cause untold errors.\r\n\r\nBut when I saw someone else do it so well, it seemed like a magic trick. I now no longer think of language quirks as problems. I consider them opportunities to perform magic tricks.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T14:00:00+02:00","end":"2023-07-20T14:30:00+02:00"},"image":null,"resources":[]},{"code":"SURAC3","speakers":[],"title":"Sprint Orientation","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":20,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T17:30:00+02:00","end":"2023-07-21T17:50:00+02:00"},"image":null,"resources":[]},{"code":"Z7HAUH","speakers":[{"code":"MKHTB9","name":"Roy M Mezan","biography":"","avatar":"https://pretalx.com/media/avatars/me_xiOWqIM.png"}],"title":"Food For Rabbits: Celery From Zero to Hero","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"In a world, full of Micro-Services, distributing tasks is a constant challenge, and there's only one tool that can rule them all.\r\n\r\nIn this workshop, we'll introduce Celery - a tool for distributing tasks in an easy, fast, and flexible manner, and take you from zero to hero!\r\n- We're going to understand why we need a distributed task system, and why to choose Celery.\r\n- We'll write our first Celery task.\r\n- Understand how to configure and run Celery.\r\n- Familiarize ourselves with Celery's fundamental concepts.\r\n- Dive into celery customizable options.\r\n- Finally, we'll see a real-life example of how we used Celery in our production system and how we customized it to fit our needs, and discuss how you can do the same.","description":"**Outline:**\r\n- Setup [5 min]\r\n- What is Celery? When to use it and why. [5 min]\r\n- Let's write our first Celery Task. [5 min + 10 min Exercise]\r\n- Getting statuses and results. [5 min + 15 min Exercise]\r\n- The Celery Worker. [5 min]\r\n- Go configure - the Celery Config. [5 min]\r\n- Customize it & Retry [10 min + 15 min Exercise]\r\n- Break - [15min]\r\n- Celery Workflows and Signature. [10 min + 25 min Exercise]\r\n- How we use Celery to solve complex problems & Production use-case [10 min]\r\n- Final Excercise [40 min]\r\n- Recap [5 min]\r\n\r\n---\r\n## [link to the workshop materials](https://gitlab.com/88roy88/celery_workshop)","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2184,"room":{"en":"Club B"},"start":"2023-07-17T13:45:00+02:00","end":"2023-07-17T15:15:00+02:00"},"image":null,"resources":[]},{"code":"AAJLRW","speakers":[{"code":"YFCVFV","name":"Łukasz Langa","biography":"","avatar":"https://pretalx.com/media/avatars/%C5%81ukasz_Langa_Portret_2021.10_Prawy_profil_VNI4Aj1.jpeg"},{"code":"SCAGQW","name":"Petr Viktorin","biography":"","avatar":null},{"code":"NLHSWB","name":"Pablo Galindo Salgado","biography":"","avatar":"https://pretalx.com/media/avatars/11718525_9iMR7ZV.jpeg"},{"code":"LUY39H","name":"Mark Shannon","biography":"","avatar":"https://pretalx.com/media/avatars/mark_shannon_MLGHvFH.jpg"},{"code":"PMWVSA","name":"Steve Dower","biography":"","avatar":"https://pretalx.com/media/avatars/Headshot_Python_2q9HWBk.jpg"},{"code":"EKPXTC","name":"Marta Gomez","biography":"","avatar":"https://pretalx.com/media/avatars/image_ezG6qQm.png"}],"title":"CPython Core Developer Panel","submission_type":{"en":"Panel"},"submission_type_id":2753,"track":null,"track_id":null,"state":"confirmed","abstract":"Come meet the folks who make the Python programming language!\r\n\r\nA panel discussion of core Python developers will take place on Wednesday at 2pm. Hear what's on their mind, what they're working on, and what the future holds for Python.\r\n\r\nThe panel will include:\r\n* sitting Steering Council member Pablo Galindo Salgado;\r\n* cybersecurity expert and aspiring core developer Marta Gómez Macías who made f-strings much better in 3.12;\r\n* CPython's Windows expert Steve Dower;\r\n* Red Hat veteran and emeritus Steering Council member Petr Viktorin;\r\n* and the tech lead of Microsoft's \"Faster Python\" team Dr. Mark \"HotPy\" Shannon. \r\n\r\nThe panel will be chaired by Łukasz \"Any-color-you-like-as-long-as-it's-black\" Langa.","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T14:00:00+02:00","end":"2023-07-19T15:00:00+02:00"},"image":null,"resources":[]},{"code":"NZ8J7S","speakers":[{"code":"CSLXTY","name":"Radomir Dopieralski","biography":"","avatar":"https://pretalx.com/media/avatars/gogles-big_OCjYWs4.jpg"}],"title":"Async Robots","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Makers, Microcontrollers and IoT"},"track_id":3560,"state":"confirmed","abstract":"Interactive control of robots can be a challenge, as it requires a lot of things to happen in parallel while at the same time reacting to data from sensors and control signals. Using python's async facilities may greatly simplify this task, allowing us to write code that is similar to the non-parallel version, but that is at the same time easy to compose into bigger program doing many things at once. I will talk about my own experiences programming the Fluffbug robot with CircuitPython, point out the problems and the solutions I found.","description":"Fluffbug is a small, affordable walking robot programmed with CircuitPython. The way it moves and reacts to sensors and control signals requires code that seemingly does a lot of things all at once, but we don't have direct access to mechanisms like threads or interrupts. What we use instead is Python's async syntax and the minimal version of asyncio library available in CircuitPython. This makes an interesting use case for asynchronous programming that is different from the usual web servers and API frontends. The resulting code is much shorter and easier to maintain than similar code written in a traditional, linear way.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T14:35:00+02:00","end":"2023-07-19T15:05:00+02:00"},"image":null,"resources":[]},{"code":"3HURZQ","speakers":[],"title":"Registration & Welcome @ Forum Hall Foyer 1st Floor","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"Welcome to EuroPython 2023! You can pick up your badges at any time during the week as long as we are open! If you want to avoid the morning rush on Wednesday, come on Monday and Tuesday!\r\n\r\nQueues will be sorted by your **first name** on your ticket. Your ticket can be located via your order confirmation email (from support@pretix.eu with the Subject: Your order: XXXX). If you ordered your ticket after we've sent badges for printing (after 10 July), go directly to the Info Desk (also referred as Debugging Desk) and a volunteer will help!","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-17T08:30:00+02:00","end":"2023-07-17T09:30:00+02:00"},"image":null,"resources":[]},{"code":"W8J9MF","speakers":[{"code":"QCTWRT","name":"David Seddon","biography":"","avatar":"https://pretalx.com/media/avatars/davidseddon_RvnuC37.png"}],"title":"Learning the ropes: understanding Python generics","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"What if you don't want a Cat to be an Animal? What is the Liskov Substitution Principle? And what on earth is contravariance?\r\n\r\nDiscover the answers to these questions and more, as we explore the foundations of generic types in Python. And by the end, you might even understand the weirder errors that Mypy sometimes throws your way.","description":"Do you run a static type checker, such as Mypy, on your Python code? And have you ever been confused by the error messages?\r\n\r\nIn Learning the Ropes, we'll explore how the Python's support for generics can unlock new patterns in your code. Along the way, we'll learn about some foundations of type theory which will give you a firmer understanding of what type safety really means. Suddenly those Mypy errors will make sense. Be prepared to think hard and learn fancy new terms with which you can dazzle your friends and relations!","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"BCDBBR","speakers":[{"code":"NLHSWB","name":"Pablo Galindo Salgado","biography":"","avatar":"https://pretalx.com/media/avatars/11718525_9iMR7ZV.jpeg"},{"code":"EKPXTC","name":"Marta Gomez","biography":"","avatar":"https://pretalx.com/media/avatars/image_ezG6qQm.png"}],"title":"f\"yeah!\" - How we are supercharging f-strings in Python 3.12","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Everybody loves f-strings in Python. But what if they could be even better? Thanks to PEP 701, Python 3.12 will ship with an improved version of f-strings that will once and for all fix the little remaining problems that f-strings have had, while also supercharging them with new cool powers. In this talk, you will discover the dark little secrets of how f-strings were being processed before Python 3.12 and the many things that didn't work and you didn't know about. You will learn how we changed thousands of lines of manually written C code without anybody noticing, how we changed the oldest part of CPython so quotes behave like parentheses, and how we taught the PEG parser to understand f-strings. Plus, you'll gain an understanding of how these new and improved capabilities will provide several advantages for both end-users and library developers, while also reducing the maintenance cost of the CPython implementation.","description":"In this talk, we will cover one of the primary syntactic changes of Python 3.12: PEP 701 – Syntactic formalisation of f-strings. Here is the structure of the talk: - How f-strings were originally introduced - Problems with f-strings * Backslashes cannot be used within the expression part of f-strings * It is impossible to use the quote character delimiting the f-string within the expression portion * Comments are forbidden, even in multi-line f-strings * Arbitrary nesting of expressions without expansion of escape sequences is impossible * There is no referential transparency - How f-strings are currently parsed: The two-pass process - How PEP 701 formalises a grammar for f-strings - How we changed the tokeniser and parser to understand f-strings - Syntactic and semantic consequences of the new grammar - Implementation challenges Attendees will not only learn the (normally unknown) problems that f-strings previously had, but also will learn through the journey of how the PEP was implemented several techniques and approaches to changing big codebases such as CPython in an efficient way, while minimising user impact. Attendees will also learn how changes to the CPython grammar that also require lexer changes are implemented, which is quite a unique situation, as most changes to the Python Grammar do not require lexer changes. No matter whether someone is new to Python or an advanced developer that enjoys hacking with the interpreter, there is something in this talk for them.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[]},{"code":"NYEBMZ","speakers":[{"code":"LKXMJS","name":"Ramón Corominas","biography":"","avatar":"https://pretalx.com/media/avatars/ramon-corominas-avatar-1x1-2021-06-30_MY8cTlt.png"}],"title":"What a screen reader can teach you about remote Python debugging","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"~ None of these topics"},"track_id":3574,"state":"confirmed","abstract":"The NVDA screen reader is a Python application packaged with Py2exe, along with C++ extensions for low-level system access and improved performance. Its functionality can be expanded through addons that are also written in Python, which makes the ability to debug both the core and addon code highly desirable.\r\n\r\nHowever, debugging code within an embedded or packaged Python environment can be quite challenging, especially if you are a visually impaired programmer trying to debug your own screen reader, since hitting a breakpoint will freeze the tool you rely on for computer access!\r\n\r\nIn this presentation, I will demonstrate how I addressed this challenge by leveraging Microsoft's debugpy library for remote debugging. I will showcase how this technique can be used to debug Python applications running within an embedded Python environment, regardless of the host language. Additionally, I will explore its applicability in debugging applications running on different operating systems or environments than the one where you prefer to use your debugging IDE.","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T14:30:00+02:00"},"image":null,"resources":[]},{"code":"RQCYKG","speakers":[{"code":"AY3PZE","name":"Jan Kroon","biography":"","avatar":"https://pretalx.com/media/avatars/Jan_Kroon__De_Lik_2018_9X0WTx5.jpeg"}],"title":"Spiral Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Education, Teaching & Training"},"track_id":3558,"state":"confirmed","abstract":"Most introductory Python books and online resources like w3schools.com try to be complete when a new concept is explained. This does not always work well for beginners. E.g. if you have just grasped how a while-loop works, it may cause too much cognitive load to also understand the break and continue options, let alone the else clause.\r\nThe learning psychologist Jerome Bruner introduced the term \"spiral learning\". The idea is that you don't teach all aspects of a new concept, but just enough to use it. At a later stage a teacher can revisit the subject and explain more details, when a student needs this to take the next step.\r\nSpiral Python is a road map of subjects that can be found in any introductory book or online resource about Python, but absolutely original in the sense that it takes into account how people learn in a natural way. You do not need to know the whole language before you can use it. Spiral Python also contains exercises (to practice) and challenges (to motivate).","description":"The idea of Spiral Python comes from the original Meccano construction kits. In Kit #1 you found building materials, some simple tools and a booklet with ideas what to build. It was possible, however, to build much cooler contraptions than those in the booklet. Meccano enabled children to be creative. Soon a kid needed Kit #2 to realise his or her ideas.\r\n\r\nIn a workshop, I can first summarise what cognitive psychology understands about learning (e.g. from \"How We Learn\", Dehaene 2020). Subsequently I can share our experience at Rotterdam University on what beginner programmers find difficult or misunderstand when they learn programming. In general the problem is that there is too much cognitive load, too much new ideas at once (\"The Programmer's Brain\", Hermans 2021). Finally I will sketch the Spiral Python approach, in which new concepts build on prior experience of students (e.g. the Python List is related to shopping lists and to-do lists) and gradually explained. At each stage of Spiral Python, students don't make just standard exercises but are challenged to be creative and follow their own passion in building software-driven products. We use libraries (turtle, opencv) and hardware (microbit, raspberry pi with sense hat) to make the software products more interesting.\r\nStudents that take the Spiral Python approach get used to extending and adapting the mental models they have made of the Python programming language, computers, networking and computing. This makes them more flexible and independent thinkers, who hopefully enjoy lifelong learning.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T14:35:00+02:00","end":"2023-07-19T15:05:00+02:00"},"image":null,"resources":[]},{"code":"T3JFHR","speakers":[{"code":"A7BNZH","name":"Michael Seifert","biography":"","avatar":"https://pretalx.com/media/avatars/michael_seifert_-_300x300_KY7yE8t.png"}],"title":"Bulletproof Python – Writing fewer tests with a typed code base","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"A fully typed code base requires less test code to achieve the same level of confidence in its correctness. We'll analyze specific code examples and see how dependent types and exhaustiveness checking make certain classes of tests obsolete.","description":"A type system forms a set of rules that is imposed on a programming language with the goal to avoid invalid operations. Type checking Python code is particularly interesting, because it happens before running the code or the test code. This allows software engineers to perform checks on the source code that otherwise would have to be performed at runtime.\r\n\r\nThe typing module in the Python standard library provides powerful concepts to provide hints to the type checker. Specifically, we'll look at use cases for NewType, dependent functions, and exhaustiveness checking.\r\n\r\nAudience members are expected to be able to read and understand Python code and have a basic understanding of unit testing.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/T3JFHR/resources/slides-with-notes_ML6WmNj.pdf","description":"Annotated slides"},{"resource":"https://program.europython.eu/media/europython-2023/submissions/T3JFHR/resources/slides_HFC9Q5J.pdf","description":"Slides"}]},{"code":"3KTQQW","speakers":[],"title":"Registration & Welcome @ Forum Hall Foyer 1st Floor","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"Welcome to EuroPython 2023! You can pick up your badges at any time during the week as long as we are open! If you want to avoid the morning rush on Wednesday, come on Monday and Tuesday!\r\n\r\nQueues will be sorted by your **first name** on your ticket. Your ticket can be located via your order confirmation email (from support@pretix.eu with the Subject: Your order: XXXX). If you ordered your ticket after we've sent badges for printing (after 10 July), go directly to the Info Desk (also referred as Debugging Desk) and a volunteer will help!","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-18T08:30:00+02:00","end":"2023-07-18T09:30:00+02:00"},"image":null,"resources":[]},{"code":"B3MU99","speakers":[{"code":"CK9WMY","name":"Jean-Baptiste Braun","biography":"","avatar":"https://pretalx.com/media/avatars/recadree_6_small_square_FGCIrDN.jpg"}],"title":"Unlocking the Power of What-If Analysis for BI, Data, and AI with Taipy","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":null,"track_id":null,"state":"confirmed","abstract":"What-if analysis is the key to exploring datasets and assessing outcomes by gradually varying input parameters. It is a vital tool for users in the realm of data analysis and decision-making. However, implementing what-if analysis can be challenging. Join this captivating talk as we delve into the practical implementation of what-if analysis using Taipy.","description":"This session will delve into a real-world industry case study highlighting the profound benefits of what-if analysis. While the focus is on Business Intelligence (BI), the concepts discussed are equally applicable to AI and data analysis in general.\r\n\r\nAgenda:\r\n\r\n Understanding the limitations of data exploration without what-if analysis\r\n Discovering why your users will fall in love with what-if analysis\r\n Demystifying the possibility of implementing what-if analysis with popular tools like PowerBI and Looker\r\n Introducing Taipy: The Ultimate What-If Analysis Toolkit\r\n Unveiling the killer features of Taipy that empower data professionals\r\n A glimpse into the future of Taipy and what to expect\r\n Live demo showcasing Taipy's powerful scenario feature\r\n\r\nThis session will ignite your enthusiasm as we explore the game-changing potential of designing front-ends in Python. With Python skills already prevalent among data analysts, the possibilities are endless.\r\n\r\nJoin this exciting journey as we unlock the full potential of what-if analysis with Taipy.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"ZUPSUD","speakers":[],"title":"Closing Session","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T17:50:00+02:00","end":"2023-07-21T18:20:00+02:00"},"image":null,"resources":[]},{"code":"XYLWJH","speakers":[],"title":"Sponsor Highlight & Recruitment Fair","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":null,"track_id":null,"state":"confirmed","abstract":"Many of our sponsors are looking to hire talented people and EuroPython is the perfect place to reach out to them!\r\n\r\nIn this session, our sponsors will each give a short presentation about their company and what they do with Python. You will meet and hear the exciting opportunities from JetBrains. Kraken Technologies, Microsoft, Optiver, Sentry, Temporal Technologies, Google Cloud, Numberly and Arm. Afterwards, you can approach them directly in their sponsor booth to carry on the conversation!","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:50:00+02:00"},"image":null,"resources":[]},{"code":"TKPZSM","speakers":[{"code":"MKHTB9","name":"Roy M Mezan","biography":"","avatar":"https://pretalx.com/media/avatars/me_xiOWqIM.png"}],"title":"Face Off: Brute-force attack on Biometrical-databases","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Security"},"track_id":3571,"state":"confirmed","abstract":"Magic happens every time you take your phone out of your pocket. Somehow, just by looking at the screen, your phone recognizes you (and only you) and magically unlocks.\r\n\r\nHave you ever stopped for a minute and thought to yourself - How does that even work? And maybe more importantly, how secure is it?\r\n\r\nIn this session, we're going to understand how facial recognition works under the hood. We'll dive into some potential security problems, and we'll show you how we were able to break into a biometric database built on the Dlib-python-library by applying a sophisticated brute-force attack. The results will surprise you.","description":"**Outline:**\r\n- Intro - The magic of Face ID [3 min]\r\n- Under the hood - How Deep Learning Face ID works [5 min]\r\n- Comparing faces - Exploring the Face-Space [4 min]\r\n- Recap - Tying it all together [2 min]\r\n- Exploitation - Weird behavior & Possible weakness? [6 min]\r\n- Shocking results! - [2 min]\r\n- The Attack - Our attack on a Biometrical database [6 min]\r\n- Summary [1 min]","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"TYTBKX","speakers":[{"code":"37ZAQC","name":"Ritchie Vink","biography":"","avatar":"https://pretalx.com/media/avatars/headshot_c6AvDG7.jpg"}],"title":"What polars does for you.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Ritchie Vink is the Author of the new Polars DataFrame library. The library that is built for modern hardware. \r\n\r\nPolars is a query engine written in Rust that focusses on the DataFrame front-end. It is written from scratch in Rust designed to be fast, parallel and memory efficient. This talk we'll go through in the design of Polars and some of its design decisions.","description":"Ritchie Vink is the Author of the new Polars DataFrame library. The library that is built for modern hardware. \r\n\r\nPolars is a query engine written in Rust that focusses on the DataFrame front-end. It is written from scratch in Rust designed to be fast, parallel and memory efficient. This talk we'll dive deeper the design of Polars.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T11:20:00+02:00","end":"2023-07-20T11:50:00+02:00"},"image":null,"resources":[]},{"code":"N7DVSG","speakers":[{"code":"EU8HKQ","name":"Alvaro Duran","biography":"","avatar":"https://pretalx.com/media/avatars/WriterPic_YqhJTCE.png"}],"title":"Working in Units: How to Decouple the Database and Domain Layers in Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"A crucial element of architecting a software application for scale is the collaboration of domain experts and developers. For that to happen, the application must separate the domain layer— where elements that represent the real world reside—from the infrastructure layer—where these elements are translated into precise software processes.\r\n\r\nWithin the Fintech team at Kiwi.com, we are rearchitecting a critical service to accept more payment providers. As part of this refactor, we are adopting the Unit of Work pattern to disentangle domain entities from the database processes that represent them. This way, domain experts can share their knowledge with developers more easily, and developers can find opportunities for optimization without the involvement of domain experts in the process.\r\n\r\nAttendees will gain a solid understanding of how to implement the UoW pattern in their Python applications, how it fits into the broader context of DDD, and how to prepare their code for future growth.","description":"As developers modelling a domain into a software product, how can we make the most of the insights that we receive from domain experts? Crucially, a system that reads similar to how domain experts talk and think about their area of expertise enables the team to look at the codebase as a whole, and not as a mix of modules.\r\n\r\nBut in order to do that, the system must be designed in such a way that what’s relevant to the domain takes a centre stage, and implementation details stay in the background. In order to do that, we can layer the codebase so that the domain—where elements that represent the concepts and interactions that domain experts talk about— is clearly delineated from the infrastructure—where these elements find a way to be implemented in purely software engineering terms.\r\n\r\nAt Kiwi.com, we are redesigning one of our most critical services in order to expand the number of payment providers that we are integrating with, enabling us to serve a bigger and more diverse pool of customers. As part of this redesign, we are making use of the Unit of Work pattern, with which the interaction between domain entities gets abstracted from the specifics of the database in which those interactions are recorded. Much has been said about the use of abstracting elementary domain objects into a clean data model, but it is the very interaction between those objects where, in practice, the delineation between the domain and the infrastructure layer collapses.\r\n\r\nIn this talk, we will cover the limitations of ORMs as a way to abstract the database details from the rest of the application, and will introduce the Unit of Work pattern to address those limitations. By means of real-world examples, the attendees will learn the advantages and trade-offs that the UoW pattern was designed to overcome, and will come away with practical use cases in which this pattern makes applications cleaner and more future-proof.\r\nThe outline of the talk is the following:\r\n\r\n1. Introduction, or “ORMs are the Vietnam of Computer Science” (5min)\r\na. Impedance mismatch - Code and Database\r\nb. Impedance between Domain and Code\r\nc. Domain Driven Design\r\n2. Understanding the Unit of Work pattern (5min)\r\na. Definition and purpose\r\nb. Trade-offs\r\n3. Advantages of UoW (5min)\r\na. Isolation of data access from business logic\r\nb. Polyglot persistence\r\n4. UoW in the wild (10min)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T14:30:00+02:00"},"image":null,"resources":[]},{"code":"PKCL9Z","speakers":[{"code":"7NYLSL","name":"Mathias Arens","biography":"","avatar":"https://pretalx.com/media/avatars/profile2022_h12sO4f_kX5dmww.png"}],"title":"Whisper AI: Live English Subtitles for 96 Languages","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Whisper AI, a model from OpenAI, has been largely overlooked despite its impressive ability to accurately transcribe and translate human speech from audio.\r\n\r\nIn this talk I will explore the architecture of the model and explain why it works so well. Additionally, I will live demo the model's capabilities in three languages, showing how you can use it on your own computer to generate English subtitles for a wide range of content.","description":"From this talk you will gain a basic understanding of OpenAI's Whisper AI, how it works, how it was trained, and how to run it and experiment with it yourself.\r\n\r\nI will demonstrate how you can use Whisper to generate real-time English subtitles for 97 spoken languages. Not only are the subtitles displayed with minimal delay, but this solution is also suitable for meetings with sensitive content as it can be run locally on your PC without relying on any third-party cloud services.\r\n\r\nI'll also be sharing what I learned about Python's threading and queueing modules, and how to use parallel processing to achieve real-time performance.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"GY9LZC","speakers":[{"code":"TJSMCP","name":"Maxim Danilov","biography":"","avatar":"https://pretalx.com/media/avatars/52487229351_888bc6cc5c_o_yrBnWU3.jpg"}],"title":"Ultimative session about hidden gems of Django Admin.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"The Django Admin Panel is a complex and bad-documented tool in the Django that can greatly speed up development if you start to understand it.\r\n“Isn’t it easier for us to write our Backend?” I will answer: “No, it’s not easier!”. 8 years of insights and discoveries in my Talk. Here i want talk about multiple admin sites, ModelAdmins possibilities, object state versioning and app configs as completely forgotten hidden power.","description":"The following questions should be in this Talk:\r\n1. Review of ideas Django.contrib.admin module.\r\n2. Django admin panel as it could be.\r\n3. Django admin sites multiplication.\r\n4. How to remove the legacy of older versions of Django im admin panel\r\n5. Undocumented Django.contrib.admin features.\r\n6. Using Django Admin Panel for third-party Backend implementations.\r\n\r\nI have presented many talks about Django Contrib Admin on PyCon RU, PyCon DE, Django Con EU, Django Con US. Here should be ultimative session about important parts and Vulnerabilities of this Library.\r\nThis talk for advanced and experienced developers.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"VHWTVF","speakers":[{"code":"Z3AHU3","name":"Mia Bajić","biography":"","avatar":"https://pretalx.com/media/avatars/38294198_s4JNJKk.jpeg"}],"title":"The Standard Library Tour","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Are you tired of writing complicated code only to discover that Python has tools in its standard library that could have made your life easier? Join us for a tour of the standard library where we'll dive into less-known modules that do well-known things and well-known modules that do less-known things. This talk is tailored to beginners or anyone who wants to learn more about Python's standard library.","description":"The Standard Library Tour is designed to provide attendees with an understanding of Python's standard library less known features. Have you ever found yourself writing complex code only to discover that Python has tools available within its library that could have made your job easier? Then this talk is for you!\r\n\r\nThe outline of the talk:\r\n* Basic information about the library \r\n* Well-known modules which do less-known things\r\n * `functools` less-known features: `@singledispatch`, `partial()`, `@cache`\r\n * `itertools` less-known features: `product()`, `filterfalse()`, `zip_longest()`\r\n * `collections` less-known features: `ChainMap`, `defaultdict`\r\n* Less-known modules which do well-known things\r\n * `doctest` for testing: `testmod()` \r\n * `Difflib` & `Filecmp` for comparison: `Difflib.SequenceMatcher`, `Filecmp.cmpfiles()`\r\n * `contextlib` for tasks involving the `with` statement: `@contextmanager`, `@asynccontextmanager`\r\n\r\nBy attending this session, you'll gain a deeper understanding of Python's standard library and you'll discover the \"unknown unknowns\" - tools that you may not even know exist within Python's standard library. By becoming familiar with the library and all of its capabilities, you'll be better equipped to solve problems and build applications more efficiently, without reinventing the wheel. You'll also receive recommendations on where to find additional resources and information so you can continue learning and exploring Python's tools after the conference has ended.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"GDZU3R","speakers":[{"code":"8EGVC9","name":"Cheuk Ting Ho","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_1037_vjqZpqv.jpg"}],"title":"Reserved for Mentored Sprint","submission_type":{"en":"Open Space"},"submission_type_id":3078,"track":null,"track_id":null,"state":"confirmed","abstract":"✨ We are running mentored sprints for diverse community members at EuroPython this year ✨\r\n\r\n👉🏽 Apply to be a mentor on the day or feature your open source project: email [cheuk@europython.eu](mailto:cheuk@europython.eu)\r\n\r\n👉🏽 Apply to participate as a contributor (sprint on the day): [fill in this form](https://forms.gle/56EbHh4g19Mevo9i8).\r\n\r\nIf you are not a member of an underrepresented group of the community and want to take on the sprint we encourage you to bring someone from an underrepresented group with you.\r\n\r\n👉🏽Volunteer for our Git Helpdesk (4 volunteers needed): Help new contributors with git/GitHub, such as cloning repo, creating branch, committing, resolving merge conflicts. [fill in this form](https://forms.gle/56EbHh4g19Mevo9i8)\r\n\r\n📖 Check out our online handbook to learn more about our approach to sprinting: https://mentored-sprints.netlify.app/","description":"Open source projects such as Python and its multiple stacks (web, scientific, etc.) are nothing but a collaborative effort from many community members. It is the constant involvement of the numerous maintainers, contributors, and users that make open-source software sustainable and keep the community as a whole going.\r\n\r\nWalking the path from user to collaborator, and thus contributing to an open-source project, can sometimes be intimidating especially for newcomers. From a technical perspective, interacting with web-based hosting services (such as GitHub, GitLab, etc.), branching and opening pull requests can be overwhelming if these are not everyday actions of your workflow. The correctness of the code and potential bugs are other common obstacles and fears any newcomer might face. Not to mention the time and frustration accumulated over the task of finding a ‘beginner-friendly’ issue to work on.\r\n\r\nWe also recognize that some groups are traditionally underrepresented in the open-source community and we would like to support them in their open-source path. We are running the mentored sprints for individuals from underrepresented groups willing to start contributing to Python projects. This event will provide a supportive, friendly, and safe environment for all the attendees and partner open source projects.\r\n\r\nTo achieve this goal, we are seeking to work with a number of Python projects and their maintainers interested in providing mentorship to these individuals. In return, we will provide guidance and advice on how to prepare the projects for the day and to better serve a diverse range of contributors.\r\n\r\nCheck out more details at [https://ep2023.europython.eu/mentored-sprint](https://ep2023.europython.eu/mentored-sprint)","duration":150,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2234,"room":{"en":"Open Space"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"YRM7GF","speakers":[{"code":"B9JJ3N","name":"Aleksandra Płońska","biography":"","avatar":"https://pretalx.com/media/avatars/zdjecie_AP_9l1umJs.png"},{"code":"CM9MZR","name":"Piotr Płoński","biography":"","avatar":"https://pretalx.com/media/avatars/pplonski_smile_h5PqeGn.jpeg"}],"title":"Serve notebook as a Web App with Mercury framework","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Make your coding meaningful to non-technical recipients! Write your code in Jupyter Notebook, add widgets with the Mercury framework, and easily turn your notebook into an interactive web app. Or.. create a dashboard, a report, and DEPLOY it.","description":"Problem: sharing coding work, notebooks with stakeholders, non-technical people without any basic knowledge of coding. \r\nSolution: 1. Write code in Jupyter Notebook. 2. Install Mercury 3. Choose widgets and decide how to present it. 3. Deploy.\r\nThe poster will show how, with a few steps transform, a notebook into an interactive website, report, and dashboard easily. Using the Mercury framework doesn't require frontend technologies knowledge, only python. With this open-source solution, you can decide to restrict access to the created web app by adding authentication. What is more, you can set up notifications, show or hide code, serve multiple apps without the user's limit, users can easily export the executed notebook as a PDF or HTML. It doesn't require rewriting your code. In the end, you can decide if you want to self-host it or deploy it with Mercury Cloud.","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00"},"image":null,"resources":[]},{"code":"RAVZM9","speakers":[{"code":"QGU73Y","name":"Eirini Angeloudi","biography":"","avatar":"https://pretalx.com/media/avatars/eirini2_SYdVwws.jpeg"},{"code":"G9EQTN","name":"Regina Sarmiento","biography":"","avatar":"https://pretalx.com/media/avatars/indice_KpmpyOh.jpg"}],"title":"How well do we understand our Universe? Let’s Python it out!","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"As our understanding of the Universe is expanding, the desire to model the physics that govern cosmic evolution is more evident than ever, driving the emergence of cosmological simulations that model the Universe from the beginning of time till present day. In combination with Machine Learning, they allow for an unprecedented capability; one can train AI models on simulations, where the evolution history of galaxies is available, that can in turn be applied on real galaxies. In this work, we propose the use of Python as a ML tool, through the popular library Tensorflow, to quantify the impact of different cosmological models on the derivation of the history of galaxies. Python accompanies us at every step of the way, from creating the datasets and training the probabilistic neural networks to the visualization of the results, as we attempt to shed light on the cosmic past of galaxies, surpassing the unshakeable reality that we can only observe them at a specific moment in time.","description":"This talk is part of my research as a PhD student in the Institute of Astrophysics of the Canary Islands, studying the evolution and formation of galaxies. I would like to present how Python has helped me all the way providing an easy yet powerful ML framework (Tensorflow and tensorflow-probability) and great libraries for scientific processing and visualization (pandas, seaborn etc.). \r\n\r\nThe key points of my talk will be:\r\n1) Brief introduction to the formation and evolution of galaxies basics and cosmological simulations\r\n2) Using simulation-based inference by training robust probabilistic convolutional neural network models across two cosmological simulations with a domain adaptation scheme\r\n3) Building more complex neural network architectures with Python (e.g. Variational Autoencoders, Normalizing flows)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T14:35:00+02:00","end":"2023-07-20T15:05:00+02:00"},"image":null,"resources":[]},{"code":"MD3PX3","speakers":[{"code":"EZMJWT","name":"Theodore Meynard","biography":"","avatar":"https://pretalx.com/media/avatars/friendly_picture-min_Z9856ct.jpg"}],"title":"Test your data like you test your code","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"I will introduce the concept of data unit tests and why they are important in the workflow of data scientists when building data products. In this talk, you will learn a new tool you can use to ensure the quality of the products you build.","description":"When data scientists build data products, they usually need to combine multiple data sources to train their models and then serve predictions. Making sure that the code and the data will be as expected throughout the full lifetime of the project is complex. To ensure the quality of the code, it is a best practice in software engineering to use automatic testing, this has a large corpus of support material. However, ensuring the quality of the data input and output holistically is not yet as well covered. \r\n\r\nIn this talk, I will explain the concept of data unit tests and why they are important. Then I will present an overview of the current libraries helping to build data unit tests. Finally, I will explain how we integrated it into our workflow at GetYourGuide.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:00:00+02:00"},"image":null,"resources":[]},{"code":"GQAARK","speakers":[{"code":"QG8KNW","name":"Meder Kamalov","biography":"","avatar":"https://pretalx.com/media/avatars/1595512072323_mDWyyIY.jpg"}],"title":"Unleashing the Power of dbt and Python for Modern Data Stack","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"This talk will introduce dbt and demonstrate how to leverage Python to unlock its full potential. Attendees will learn best practices for working with dbt, how to integrate it with other tools in their data stack, and how to use Python packages like fal to perform complex data analysis. With real-world examples and use cases, this talk will equip attendees with the tools to build a modern, scalable, and maintainable data infrastructure.","description":"Data modeling, transformation, and analysis are integral parts of data pipelines. However, managing and maintaining data infrastructure can be a daunting task. dbt (data build tool) is a powerful open source package that helps data teams build modular, maintainable, and scalable data transformations.\r\n\r\nIn this talk, we will introduce dbt to the Python community and demonstrate its full potential. We will go over best practices for data modeling and transformation, and how to integrate dbt into your existing data stack. We will also show how to use Python packages such as fal to interact with dbt and perform complex data analysis.\r\n\r\nAttendees will learn: \r\n\r\n- What is dbt and why it’s a game-changer for data engineering and analysis \r\n\r\n- Best practices for data modeling and transformation with dbt \r\n\r\n- How to integrate dbt into your existing data stack and work with data warehouses such as Snowflake and BigQuery \r\n\r\n- How to leverage Python packages such as fal to interact with dbt and perform advanced data analysis \r\n\r\n- Real-world examples and use cases of dbt and Python in action\r\n\r\nBy the end of this talk, attendees will have a solid understanding of how to use dbt and Python together to build a modern, scalable, and maintainable data stack. Whether you’re a data engineer, analyst, or scientist, this talk will give you the knowledge and tools to take your data infrastructure to the next level.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T14:00:00+02:00","end":"2023-07-21T14:30:00+02:00"},"image":null,"resources":[]},{"code":"KT8QPL","speakers":[{"code":"NN8GFM","name":"Martin Fleischmann","biography":"","avatar":"https://pretalx.com/media/avatars/2019_des_sq_web_small_UNza8hK.jpg"}],"title":"Vector data cubes as a bridge between raster and vector worlds","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"This talk introduces the concept of vector data cubes - multi-dimensional arrays where at least one dimension is composed of vector geometries - and its implementation in Python within a new library Xvec, built on top of Xarray, Shapely 2.0 and GeoPandas.","description":"Vector geospatial data, such as points, lines and polygons, are primarily stored in one-dimensional arrays; in Python, typically as a GeoPandas' GeoSeries column within a data frame. At the same time, raster data representing, among others, satellite imagery or digital terrain models (DTM) are multi-dimensional arrays with a number of dimensions being anywhere from 2 (e.g. DTM) to N (e.g. multi-spectral time series from Sentinel 2), in Python mostly captured as Xarray objects. The two, raster and vector, rarely meet, and if so, we either transform one to the other using rasterisation or vectorisation or link vector geometries to a raster index via a unique identifier. However, there is a space in between that would benefit from multi-dimensional arrays with support for vector geometry.\r\n\r\nThis talk presents a concept of vector data cubes - multi-dimensional arrays where at least one dimension is composed of vector geometries - and its implementation in Python using Xarray, Shapely 2.0 and GeoPandas under the hood. Using the new Xvec package extending Xarray's abilities, we can assign an array of vector geometries as dimension coordinates and use the geospatial capabilities within the Xarray object. A typical use case can be a time series of a land cover proportion per region, where one dimension is composed of vector region boundaries, other as land use classes and a third one capturing time. While the same can be stored as a long-form data frame, it is not an efficient format due to a large amount of data replication. Using the vector data cube instead brings both efficiency and convenience as the included vector dimension can be directly used for indexing, plotting, and other operations that depend on the vector data and for which we would need to switch between Xarray and GeoPandas.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T14:35:00+02:00","end":"2023-07-20T15:05:00+02:00"},"image":null,"resources":[]},{"code":"NVW8EF","speakers":[{"code":"G9FNPT","name":"Stepan Sindelar","biography":"","avatar":"https://pretalx.com/media/avatars/Fdw3-IqZ_400x400_K2lfEGK.jpg"},{"code":"HUBV7F","name":"Florian Angerer","biography":"","avatar":"https://pretalx.com/media/avatars/0a2383698a52f54f82346cdd8166df7d_yImAEgg.jpg"}],"title":"HPy: The Future of Python Native Extensions","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Updating Python versions often forces us to update native extensions at the\r\nsame time. But what if you need to update Python because of a security issue,\r\nbut cannot (yet) move to a newer version of a dependency? Or you are running a\r\nproprietary binary extension that cannot easily be recompiled?\r\n\r\nThe HPy project provides a better C extension API for Python. It compiles to\r\nbinaries that work across all versions of CPython, PyPy, GraalPy. HPy makes\r\nporting from the existing C API easy and its design ensures that the binaries\r\nwe produce today stay binary compatible with future Python versions.\r\n\r\nNumPy is the single largest direct user of the CPython C API we know of. After\r\nover 2 years of work and more than 30k lines of code ported, we can demonstrate\r\nNumPy running its tests and benchmarks with HPy. We will show the same NumPy\r\nbinary run on multiple CPython versions and GraalPy. And we will discuss\r\nperformance characteristics of this port across CPython, GraalPy, and PyPy.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:40:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/NVW8EF/resources/EuroPython2023_HPy_dLwxQ4i.pdf","description":"Slides"}]},{"code":"7VLWUV","speakers":[],"title":"Reserved for Tournament","submission_type":{"en":"Open Space"},"submission_type_id":3078,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":90,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2234,"room":{"en":"Open Space"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T17:00:00+02:00"},"image":null,"resources":[]},{"code":"E9QUAW","speakers":[{"code":"T99QXX","name":"Michał Lowas-Rzechonek","biography":"","avatar":"https://pretalx.com/media/avatars/MichalRzechonek3_woDBqNb.jpg"}],"title":"Caching in microservices","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"There are two hard problems in programming: naming things and cache invalidation. I'll cover the latter, in a microservice-based system. Given a fairly standard setup with API Gateway and a backend service with its own database, I'll show how to implement cache that allows us to avoid database queries without modifying API client.\r\n\r\nThe whole talk is based on live coding.","description":"In the talk I will go through the implementation of both sides of an ETag cache.\r\n\r\nFirst part will be a ASGI middleware (using FastAPI as an example) that\r\ncaptures resources returned by REST endpoints and creates ETags for them.\r\n\r\nThe middleware will also allow views to affect cache key construction, so that\r\nthe mechanism can be made aware of e.g. custom headers.\r\n\r\nThis middleware will be installed in the \"backend\" service.\r\n\r\nOn the \"backend\" side, I will also show how to invalidate the cache when\r\ndata used to create a given resource is modified.\r\n\r\nThe second part is an extension of aiohttp's ClientSession that stores ETagged\r\nresponse bodies. This will be installed inside the API Gateway, allowing\r\nexternal clients to utilize the cache without even knowing about it.\r\n\r\nFinally, I'll mention how to make it usable in a distributed system, by\r\nimplementing a simple content-based pubsub mechanism.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:15:00+02:00"},"image":null,"resources":[]},{"code":"8M8UCT","speakers":[{"code":"VJFBLQ","name":"Pascal Chambon","biography":"","avatar":"https://pretalx.com/media/avatars/official_pascal_portrait_small_2IhamOU.jpg"}],"title":"How Python can help victims of violence","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"Ethics, Philosophy & Politics"},"track_id":3569,"state":"confirmed","abstract":"There are two values that everyone agrees with: Judicial Truth (criminals should be prosecuted, but innocent people left free), and Privacy (others shouldn't know unnecessarily about my private life).\r\n\r\nBut these two values are constantly put in opposition, e.g. videosurveillance helps gather evidence of crime, but it endangers our legitimate rights as citizens.\r\n\r\nThat's why we launched the WitnessAngel initiative, a research effort to invent new concepts and technologies able to reconcile Judicial Truth and Privacy.\r\n\r\nWith algorithms like Flightbox, with ideas like VideoTestimony and Familiar, and with the open-source code we provide, we work with associations and enterprises to eventually put life-changing solutions into the hands of the general public. So that countless victims of rape, abuse, bullying, stop facing the usual brick wall: \"it's your word against theirs\".","description":"This poster will summarize the concepts, technological blocks, frequently asked questions, and challenges still to be tackled by the WitnessAngel project.\r\n\r\nIt will provide an overview of our roadmaps, and of how people can contribute to this effort, so that one day #metoo and other global scandals become a thing of the past.","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00"},"image":null,"resources":[{"resource":"https://witnessangel.com/en/explanatory-comic-strip/","description":"A comic strip to show our concepts"}]},{"code":"79HLM8","speakers":[{"code":"7ESZPJ","name":"Thomas Rausch","biography":"","avatar":"https://pretalx.com/media/avatars/portrait-square_m7WHtF9.jpg"}],"title":"How LocalStack is recreating AWS with Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"At LocalStack, we are building a platform that enables development and testing of cloud applications on your local machine. The core is an [open source AWS emulator](https://github.com/localstack/localstack) that is primarily written in Python. It is among the top Python projects on GitHub, and has seen a massive uptake in contributions over the past two years. Many Python software developers and architects will relate to the struggles of maintaining a large and complex Python codebase, while keeping developer teams productive. In this talk, we'll explore how we at LocalStack tackle these as we re-create AWS for local development. We'll explain our approaches to automating around AWS specifications, building a highly modular and pluggable system to make it easy for teams to integrate their components, the software patterns we use to keep devs productive, as well as our approach to automated contract testing using pytest.","description":"This talk aims to provide a broad overview of LocalStack and its implementation, and at the same time provide listeners with relatable insights from our experience in architecting, developing, and maintaining a large, complex Python code base.\r\n\r\nThe outline is roughly as follows:\r\n\r\n- Intro: What's LocalStack, who am I, what problems are we solving?\r\n- Software patterns we use, and how they are implemented in Python. These include:\r\n - A web framework based on WSGI/Werkzeug that implements the chain-of-responsibility pattern: I'll explain how this pattern is similar to WSGI middleware, and demonstrate how it allows us to plug in different types of functionality into the HTTP request processing, when this pattern is beneficial (compared to traditional web frameworks: much more flexible), and what the drawbacks are (hard to debug!)\r\n - Other patterns found in the code base: Visitor, Adapter, Proxy, Singleton\r\n - Monkey patching: I will briefly explain how monkey patching works, how it helps us move fast, but also how it can hurt (with real examples of when things blew up in our face), but why the trade-off leans towards using monkey patching.\r\n - Dynamic code loading: We built an open source framework called Plux that builds a higher-level plugin mechanism around Python entrypoints. will explain both the benefits (super flexible, allows clean code organization) and the drawbacks (pretty hard at times to figure out what's going on) of dynamic code loading.\r\n- Strategies we use to maintain parity with AWS: People are usually skeptical that an idea like LocalStack can even work. \r\n - We automate a lot around the AWS specs, for example we get weekly PRs when service APIs change. I'll demonstrate how we do server-side code generation from the AWS specs, and how that helps us.\r\n - Snapshot testing: We have built our own contract testing framework around pytest. We use that to write contract tests against AWS, that we then run against LocalStack to ensure parity. I'll go into a bit of details of the challenges with this approach, but also how we couldn't work without it.\r\n- Wrap up and conclusion: I will tie together all the presented solutions and summarize how they help us solve the challenges. After this, the audience should have a deeper appreciation for how Python helps build something like LocalStack. I'll conclude by pointing out some of the overarching themes in this talk (like the tradeoffs between introducing certain patterns on maintainability).","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T14:35:00+02:00","end":"2023-07-21T15:05:00+02:00"},"image":null,"resources":[]},{"code":"HL8XCC","speakers":[{"code":"QMAPYZ","name":"Antonio Cuni","biography":"","avatar":"https://pretalx.com/media/avatars/cdc3cafa377f0e0e93fc69636021ef65_5Ador3O.jpg"}],"title":"The CPU in your browser: WebAssembly demystified","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"In the recent years we saw an explosion of usage of Python in the browser:\r\nPyodide, CPython on WASM, PyScript, etc. All of this is possible thanks to the\r\npowerful functionalities of the underlying platform, WebAssembly, which is essentially a virtual CPU\r\ninside the browser.","description":"In the recent years we saw an explosion of usage of Python in the browser:\r\nPyodide, CPython on WASM, PyScript, etc. All of this is possible thanks to the\r\npowerful functionalities of the underlying platform, WebAssembly.\r\n\r\nIn this talk we will examine what is exactly WebAssembly, what are the strong\r\nand weak points, what are the limitations and what the future will bring us.\r\nWe will also see why and how WebAssembly is useful and used outside the\r\nbrowser.\r\n\r\nThis talk is targeted to an intermediate/advanced audience: no prior knowledge of\r\nWebAssembly is required, but it is required to have a basic understanding of what is a compiler, an interpreter and the concept of bytecode.\r\n\r\nThe introduction will cover the basics to make sure that the talk is\r\nunderstandable also by people who are completely new to the WebAssembly world,\r\nbut after that we will dive into the low-level technical details, with a\r\nspecial focus on those who are relevant to the Python world, such WASI vs\r\nemscripten, dynamic linking, JIT compilation, interoperability with other\r\nlanguages, etc.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"MQRJXF","speakers":[{"code":"BXVSCG","name":"Roman Yurchak","biography":"","avatar":"https://pretalx.com/media/avatars/90e4251aee531aa36f6e09d7b935378f_X6t0Gow.jpg"},{"code":"BQVLYL","name":"Nicholas Tollervey","biography":"","avatar":"https://pretalx.com/media/avatars/avatar_large_FOn6ad4.jpg"}],"title":"WASM Summit","submission_type":{"en":"Conference Workshop"},"submission_type_id":3075,"track":null,"track_id":null,"state":"confirmed","abstract":"This summit aims to bring together maintainers and users of the Python with WebAssembly, to discuss the state of this ecosystem, existing challenges and ongoing work.\r\n\r\nFind out more, including how to sign up, here: [https://ep2023.europython.eu/wasm](https://ep2023.europython.eu/wasm)","description":"Agenda:\r\n \r\n* 9:00: Meet and greet (many of us won’t know each other) + unconference-y post-it based organisation.\r\n* 9:30: Presentations (30mins each)\r\n* 11:00: Coffee\r\n* 11:20: Presentations\r\n* 13:00: Lunch at the PCC (included)\r\n* 14:00: Unconference-y activities (discussions, hacks, ad hoc tutorials etc…)\r\n* 16:00: Round-up / plenary session for feedback and organising next steps.\r\n* 18:30: Dinner","duration":90,"slot_count":4,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2185,"room":{"en":"Club C"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[]},{"code":"GRDPPX","speakers":[{"code":"8EGVC9","name":"Cheuk Ting Ho","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_1037_vjqZpqv.jpg"}],"title":"Beginner Conference Orientation","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"Are you new to EuroPython or any Python conference? You must have a lot of questions like: \r\n\r\n- What is a Lightning Talk? \r\n- What is an Open Space? \r\n- Besides going to talk, what else can I do? \r\n- Why everyone seems to know each other, how can I join in conversations?\r\n\r\nDon't worry, we are here to help you get the most out of your first EuroPython experience. Come to join us in this Beginner Conference Orientation that is tailer made for you.","description":"In this orientation, we will break into 2 parts\r\n\r\n**1) Suggestions about what you can do as a first-time attendee at the conference (30 mins)**\r\n\r\nWe will give you many tips on how you can get the most out of your experience here at EuroPython. We will also tell you what you can expect at the conference and how to make new connections at the conference. \r\n\r\n**2) No questions are stupid questions, ask away Q &A session (20 mins)**\r\n\r\nSince we are here to help we would like to let you ask us questions. We love your questions! Please ask us anything, we are happy to answer and no questions are stupid questions.\r\n\r\nSlides can be found here: https://drive.google.com/file/d/1Sga1kbrMkmj1rHWpjBispQ-PnTOx0KOi/view?usp=sharing","duration":50,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2186,"room":{"en":"Club D"},"start":"2023-07-18T17:10:00+02:00","end":"2023-07-18T18:00:00+02:00"},"image":null,"resources":[]},{"code":"EAPRY9","speakers":[{"code":"LJNU97","name":"Ester Beltrami","biography":"","avatar":"https://pretalx.com/media/avatars/foto.profilo.1_7fDB5qi.png"}],"title":"Breaking the Stereotype: Evolution & Persistence of Gender Bias in Tech","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Community & Diversity"},"track_id":3556,"state":"confirmed","abstract":"Did you know that originally programming was a female-heavy field? \r\nHow did we get to the stereotype of the antisocial programmer (and therefore male)? \r\n\r\nHow the concept that good programmers appeared to have been “born, not made” is still affecting our tech industry and society.","description":"I will explore the early days of computing when **women were actually the dominant sex in programming**. Can you believe it??\r\n**How did we get from this to the stereotype of the nerdy programmer obsessed with programming?**\r\nWe will find out how this has changed and how gender bias has influenced the development of the tech industry as we know it today.\r\n\r\nI will also dig into the consequences of gender bias in the tech industry, including the negative impacts on innovation, profitability, and the overall well-being of the industry. The talk will conclude with practical steps and solutions that companies can take to create a more inclusive and diverse tech industry.\r\n\r\nThe gender gap it’s an important issue that affects all of us. By taking action to address these biases, we can create a better future for everyone in the industry.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"8S3VD9","speakers":[{"code":"PKATFL","name":"Oliver Rew","biography":"","avatar":null}],"title":"Designing a Human-Friendly CLI for API-Driven Infrastructure","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Infrastructure: Cloud & Hardware"},"track_id":3559,"state":"confirmed","abstract":"As Bloomberg’s infrastructure grows and evolves, the tools we use to manage it are becoming increasingly important. To streamline infrastructure management, our team set out to design a REST API and constituent CLI (Command Line Interface) that would comprise a single interface for both programmatic and human interaction with our infrastructure. Traditionally, building a CLI that is tightly coupled to an API requires maintaining a separate codebase, which is tedious and error-prone. Instead, we designed a CLI that dynamically generates commands based on the OpenAPI JSON documentation. However, since APIs are designed for computer interaction, we designed our API to include the information needed to implement a human-friendly CLI. Leveraging Python, FastAPI, and numerous other open source projects, we built a stable, extensible tool that greatly improves how we interact with our infrastructure.","description":"In this talk, we will share our experience designing a resilient infrastructure API with a human-friendly CLI that does not need continued development, even as the API evolves.\r\n\r\nWe will discuss some of the specific approaches we used to build a dynamically-updated CLI with human-friendly features:\r\n- Extending OpenAPI to communicate CLI intent\r\n- Using templating languages (Jinja) to convert the API’s response JSON into human readable output\r\n- Defining CLI command aliases to abstract long, verbose API endpoints\r\n- Embedding CLI help text in the API to generate well-documented commands\r\n- Other small enhancements and strategies that improve the CLI user’s quality-of-life.\r\n\r\nFurthermore, we will also discuss how we leveraged several open source projects and standards to accomplish our goals, including Python, FastAPI, OpenAPI, Jinja, OAuth2, Pydantic, prompt_toolkit, and more.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"WAZGKA","speakers":[{"code":"CHHWUG","name":"Neeraj Pandey","biography":"","avatar":"https://pretalx.com/media/avatars/profile_pic_MtDXVQ5_hTyMfCa.jpeg"},{"code":"3TY3A9","name":"Hitesh Khandelwal","biography":"","avatar":"https://pretalx.com/media/avatars/com-prof_pFZRszD.jpg"}],"title":"From Dataset to Features: A Python-Based Evolutionary Approach","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Multilabel classification is a machine learning task in which each instance is assigned to a group of labels. It has gained widespread use in various applications in recent years. Preprocessing, such as feature selection, is an important step in any machine learning or data mining task. It helps to improve the performance of an algorithm and reduce computational time by eliminating highly correlated, irrelevant, and noisy features. A new algorithm called Black Hole, inspired by the phenomenon of black holes, has recently been developed to tackle multi-label classification problems. In this talk, we present a modified version of the Black Hole algorithm that combines it with two genetic algorithm operators: crossover and mutation. The combination of Black Hole and genetic algorithms has the potential to solve multi-label classification problems across a range of domains.","description":"Multilabel classification is a machine learning task where each instance in a dataset is assigned to multiple labels. This is in contrast to traditional classification, where each instance is assigned to a single label. Multilabel classification has gained popularity in recent years due to its expanding use in a variety of applications across domains.\r\n\r\nOne of the key challenges in multilabel classification is the high dimensionality of the data, which can make it difficult for machine learning algorithms to learn effectively. This is where feature selection comes in. Feature selection is the process of identifying and selecting a subset of relevant and non-redundant features from a larger set of features. It is a critical preprocessing step that can improve the performance and efficiency of machine learning algorithms.\r\n\r\nOne of the recent developments in feature selection is the Black Hole algorithm, which is inspired by the phenomenon of black holes in space. The Black Hole algorithm is a metaheuristic that iteratively removes the least relevant features from a dataset, based on a relevance measure such as mutual information. In this talk, we present a modified standalone Black Hole algorithm that incorporates genetic algorithm operators, such as crossover and mutation, to improve its performance in solving multilabel classification problems. The hybridization of Black Hole and Genetic Algorithms has shown to be effective in solving multilabel classification problems in different domains.","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00"},"image":null,"resources":[]},{"code":"C7AZ33","speakers":[{"code":"BLNV7P","name":"Rodrigo Girão Serrão","biography":"","avatar":"https://pretalx.com/media/avatars/rgs_square_pMKs1bG.jpg"}],"title":"Build a terminal TODO app with Textual","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"Learn how to build powerful terminal-based user interfaces (TUIs) with ease using Textual - an open-source Python framework.\r\n\r\nThroughout this tutorial, you'll learn how to use Textual's built-in widgets, reactive features, and message-passing system to create a dynamic and user-friendly TODO app that's perfect for managing your daily tasks.\r\n\r\nFrom creating and displaying tasks to editing and deleting them, you'll cover all the essential features needed to make a functional TODO app.\r\n\r\nYou'll also learn how to use Textual CSS to style your TUI for a polished and elegant look, together with some tips and tricks to make it even easier to develop your TUIs in Textual.\r\n\r\nThis tutorial provides everything you need to get started with building TUIs in Python. By the end of the tutorial, you'll have a fully functional and stylish TODO app that showcases Textual's versatility and useful features.","description":"[Instructions below!]\r\n\r\nDuring this tutorial, we will build a terminal-user interface for a TODO app.\r\nThis will showcase all the essential features that make Textual a very interesting Python framework to build terminal user interfaces.\r\n\r\nTopics covered in this tutorial include:\r\n\r\n - the vast built-in widget gallery;\r\n - reactive attributes;\r\n - handling messages;\r\n - key bindings and action methods;\r\n - Textual CSS;\r\n - the Textual developer console; and\r\n - creation of custom widgets.\r\n\r\nAttendees are not expected to have prior Textual experience but they are expected to have a working knowledge of classes, methods, and attributes.\r\n\r\nIf you want to attend the workshop, please follow the instructions in [this GitHub repo](https://github.com/Textualize/TODO-tutorial): https://github.com/Textualize/TODO-tutorial.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2188,"room":{"en":"Club H"},"start":"2023-07-17T13:45:00+02:00","end":"2023-07-17T15:15:00+02:00"},"image":null,"resources":[]},{"code":"SWSLHC","speakers":[{"code":"BLNV7P","name":"Rodrigo Girão Serrão","biography":"","avatar":"https://pretalx.com/media/avatars/rgs_square_pMKs1bG.jpg"}],"title":"You DON'T know comprehensions 🤷","submission_type":{"en":"Poster"},"submission_type_id":2751,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"You _**don't**_ know comprehensions!\r\n\r\nWhy are list comprehensions good?\r\nBecause they are fast?\r\n\r\nWrong!\r\n\r\nBecause they are short?\r\n\r\nWrong!\r\n\r\nThis poster session will show why list comprehensions are an excellent Python tool.\r\n\r\nThe poster session will:\r\n - teach you to convert loops to list comprehensions;\r\n - show how to write list comprehensions from scratch; and\r\n - give 10+ actionable tips and tricks for list comprehensions.\r\n\r\nThe poster will also show the similarities between list comprehensions and:\r\n - set comprehensions;\r\n - dict comprehensions; and\r\n - generator expressions.","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00"},"image":null,"resources":[]},{"code":"S8H88E","speakers":[{"code":"BGLPFA","name":"Paolo Melchiorre","biography":"","avatar":"https://pretalx.com/media/avatars/52487760478_283a36a901_o-min_JhQ67nS.jpg"}],"title":"All about djangoproject.com","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"The [djangoproject.com](https://www.djangoproject.com) website is the _showcase_ of the **Django** project and is the result of **contributions** from many _people_. In this talk, we'll update you on its **development** and _learn_ how to contribute to it.","description":"The [djangoproject.com](https://www.djangoproject.com) website is the _showcase_ of the **Django** project and _developers_ and _users_ have always looked for _updates_ on the project, _documentation_, and information from the **DSF** _(Django Software Foundation)_.\r\n\r\nAs with its _source code_, the Django project website is also the result of **contributions** from many _people_ who voluntarily help to keep it updated and _improve_ it.\r\n\r\nThis talk will show all the latest **updates**, ongoing **improvements**, and upcoming **developments** of the Django project website.\r\n\r\nParticipants will be able to **learn** more about the Django project site, how it is maintained, and above all understand how to **help** improve it.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"WUPCGU","speakers":[{"code":"S3SUGY","name":"Tanya Sneh","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_8242_small_N0Dispe.jpg"}],"title":"Unlocking the Power of Raft Consensus with rqlite using Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Distributed databases are widely used in modern applications for their high availability and scalability. Have you ever wondered how data integrity is maintained with the data across multiple nodes? One of the key components of achieving this is distributed consensus. Raft is a widely used consensus algorithm that provides a fault-tolerant and highly available system. In this talk, we will explore how to implement Raft consensus using the rqlite distributed database in python.","description":"Consensus is a fundamental problem in distributed systems, and it is critical for maintaining data consistency and availability in applications. In this talk, we will explore how to implement Raft consensus using rqlite, a distributed database that uses SQLite as its storage engine.\r\n\r\nWe will begin with an overview of distributed databases and the need for consensus algorithms, followed by a deep dive into the key concepts of the Raft consensus algorithm. We will discuss how Raft ensures consistency and availability in a distributed system and explore its strengths and weaknesses compared to other consensus algorithms.\r\n\r\nWe will then focus on rqlite, a powerful tool for building distributed databases with Raft consensus. We will cover its key features, including its SQL interface, fault tolerance, and scalability. We will also demonstrate how to use rqlite in Python applications to build fault-tolerant and highly available distributed systems.\r\n\r\nAttendees will gain a deeper understanding of the key concepts of distributed consensus, the benefits of using the Raft algorithm, and how to implement it using rqlite in python. No prior knowledge of consensus algorithms, Raft, and rqlite is required, but some familiarity with databases would be helpful. This talk is suitable for developers, database enthusiasts, and anyone interested in distributed systems and database design.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:00:00+02:00"},"image":null,"resources":[]},{"code":"B7WYKQ","speakers":[{"code":"LDFVBH","name":"Russell Keith-Magee","biography":"","avatar":"https://pretalx.com/media/avatars/b91373320dbc3bc52fcd870d3b21748f_UHhnDR7.jpg"}],"title":"Packaging Python Apps with Briefcase","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"Python has proven itself to be a powerful tool for data science, and for web servers. However, one area where it hasn't historically been popular is in building applications for end users.\r\n\r\nIn this talk, you'll discover how you can use Briefcase to distribute an app to users on desktop, mobile, and the web - all from a single Python codebase.","description":"Once you're written your amazing new application using Python, the next problem you'll face is how to get that application into the hands of users. If your users are familiar with `pip` and and `venv`, you can put `pip install` into a README, and leave it at that. But what if your audience aren't Python programmers? What if your app needs to be used by people who don't write Python at all? How do you distribute your code so that others can use it?\r\n\r\nIn this talk, you'll learn about **Briefcase**, a tool that can convert a Python project into platform-native installers on macOS, Windows, Linux - and can also target iOS, Android, and the web. You'll learn how to use Briefcase to start a new project, or convert an existing project for distribution. You'll learn about the features of Briefcase that can support you while you develop your application. Finally, you'l learn how to generate installers and standalone applications for multiple platforms from a single Python codebase.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T12:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"H3TBAP","speakers":[{"code":"J8PUCE","name":"Karim Jedda","biography":"","avatar":"https://pretalx.com/media/avatars/e9e5d24cce9a566ed378ead6b545a46e_7b2afhM.jpg"}],"title":"Rust for Python data engineers","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Python is a popular language for data engineering but has some limitations in performance, concurrency, and production deployments. The Rust programming language offers powerful alternatives with strong compile-time and memory safety guarantees. In this talk, I'll explore how data engineers can leverage Rust to build high-performance data pipelines and processing systems. I'll cover the Rust ecosystem for data work, including frameworks and libraries for working with data formats, databases, streaming systems, and scientific computing. By combining Rust and Python, data engineers can harness the benefits of both languages and build robust end-to-end data systems that scale to meet demanding production needs.","description":"After using Python for almost a decade now, mostly for data engineering, I thought I'd give Rust a try to solve some of the problems I face daily as a data engineer. What I learned doing so is that Rust can be a great and valid additional tool for any data engineer, especially in combination with Python.\r\n\r\nI'll elaborate on:\r\n- How the Python ecosystem can benefit from integrating Rust in data engineering workflows \r\n- How Rust can be interfaced with Python\r\n- The strengths of each programming language \r\n\r\nFurther reading material: \r\n\r\n- [Blog post](https://karimjedda.com/carefully-exploring-rust/) \r\n- [HN discussion](https://news.ycombinator.com/item?id=33581901)\r\n- [LinkedIn post](https://www.linkedin.com/feed/update/urn:li:activity:7035701103337828352/)\r\n- [Website](https://datawithrust.com/)","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[]},{"code":"3MDSQN","speakers":[{"code":"CQ3EYA","name":"Abel Meneses Abad","biography":"","avatar":"https://pretalx.com/media/avatars/abel_xUR7uq6.jpeg"},{"code":"YXEULE","name":"Oscar L. Garcell","biography":"","avatar":"https://pretalx.com/media/avatars/profile-1_MsMUZmL.jpg"}],"title":"Private Data Anonymization with Python, Fundamentals","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"How to bring large legal document repositories into the public domain without releasing private data? The fundamental concepts behind document anonymization are entity recognition, masking type, and pseudoanonymization. Using python language and a collection of libraries such as spacy, pytorch, and others we can achieve good scores of anonymization. How is this applied within a flow containing AI models for NER? Once anonymized how to improve the result by doing more text mining with python based apps and human in the loop. Although it was approved in 2016, the application of the GDPR at the European level remains a challenge in banking, legal, and other contexts. This talk covers the process of transforming pdf and docx documents into xml, processing them using regexp and spacy/torch models, and how to parse these results using AntConc and Textacy. All the ideas will be supported with the real experience of the MAPA project a European project for anonymization finished in 2022.","description":"Based on the experience of more than 3 years anonymizing documents in different domains, the idea is to present the necessary steps in the anonymization process and how python tools are essential for it.\r\n\r\nIt will include the presentation of a European project in the field of anonymization completed in 2022 whose data is available to the entire community and which is known as MAP (https://www.elrc-share.eu/repository/search/? q=MAP)\r\n\r\nThe talk will focus its objectives on the importance of AI models to scale anonymization in environments with high volumes of documents, and how python technologies make possible a better performance of the solution and also of the team that develops it.\r\n\r\nThe following frameworks will be mentioned in the presentation: Spacy, Pytorch, FastAPI, Textacy, Pytest and other base libraries.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"FFTHXB","speakers":[{"code":"7DHKEF","name":"Jimmy Lai","biography":"","avatar":"https://pretalx.com/media/avatars/profile_picture_202105_HCxWsMb.jpg"}],"title":"Python Linters at Scale","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"DevOps"},"track_id":3557,"state":"confirmed","abstract":"Black, Flake8, isort, and Mypy are useful Python linters but it’s challenging to use them effectively at scale in the case of multiple codebases, in a large codebase, or with many developers. Linter analysis on large codebases is slow. Linters may slow down developers by asking them to fix trivial issues. Running linters in distributed CI jobs makes it hard to understand the overall developer experience.\r\n\r\nIn this talk, we'll walk you through solving those scaling problems using a reusable linter framework that releases new linter updates automatically, reuses consistent configurations, runs linters on only updated code to speedup runtime, collects logs and metrics to provide observability, and builds auto fixes for common linter issues. Our linter runs are fast and scalable. Every week, they run 10k times on multiple millions of lines of code in over 25 codebases, generating 25k suggestions for more than 200 developers. Its autofixes also save 20 hours of developer time every week.","description":"Popular Python linters overview and configuration recommendation (6 mins)\r\n- Black, Flake8, isort, mypy\r\nCommon practice: linter versions and config files managed by version control (1.5 mins)\r\n- dependency management\r\n- cached dependencies in CI jobs\r\n\r\nScaling Challenges: (5 mins)\r\n - Multiple codebases \r\n 1. Inconsistent linter version and configuration\r\n 2. Endless effort on upgrading linters and configs\r\n - Large codebases (1 min): Linters run slow on analyzing million lines of code\r\n - Many developers (2 mins): Linter suggestions of trivial issues slow down developers\r\n\r\nSolutions for the challenges: (12.5 mins in total)\r\n - The solution for inconsistent version and configuration (2.5 mins)\r\n - Tradeoff between consistent version and flexible versions\r\n - All codebases use the same version and configurations of linters\r\n - Need to fix existing linter errors while upgrading linters\r\n - Reusable workflow\r\n - The solution for slow linter run: (2.5 mins)\r\n - Avoid repeated analysis by caching linter results\r\n - Only run linters on updated files\r\n - The solution for lake of developer experience overview (2.5 mins)\r\n - Collect linter suggestions from CI jobs\r\n - Detect linter errors that are merged to the main branch and find the breaking change easily\r\n - Understand frequent linter suggestions\r\n - The solution for slowing down developers (2.5 mins)\r\n - Build autofixes for frequent linter suggestions: Black and isort formatting, Flake8 unused import, and Mypy missing return type.\r\n - The solution for providing guidance on more best practices (2.5 minutes)\r\n - Build custom linters for best practices using PyGithub and LibCST\r\n\r\nEffective linter strategies: (3 mins)\r\n- Use linters to guide developers on best practices\r\n - Convention over configuration\r\n - With linters, developer don’t need to remember too many things\r\n- Use autofix to help developer on fixing issues\r\n - DRY: don’t repeat yourself\r\n - Wth autofixes, developers move fast to focus on developing products\r\n\r\nResults and Recap: (2 mins)\r\n - scaled out our linters to run 10k times on 25 codebases for 200 developers and provide 25k suggestions on a weekly basis\r\n - recap the solutions for scaling out linters","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:15:00+02:00"},"image":null,"resources":[]},{"code":"UWKSPN","speakers":[{"code":"MZUEG3","name":"Abhinand C","biography":"","avatar":"https://pretalx.com/media/avatars/photo_xm5Agxd.jpeg"},{"code":"WHLSXE","name":"Jothir Adithyan","biography":"","avatar":"https://pretalx.com/media/avatars/prof_TYIkGY9.jpg"}],"title":"Time Made Easy: Simplify Date and Time Handling with Python's Pendulum","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Pendulum is a Python package for working with dates, times, and timezones. It offers a simple and intuitive API for common date/time operations and provides advanced functionality for dealing with more complex scenarios. Some of the interesting points of Pendulum include support for leap years, time zones, and daylight saving time, as well as a fluent API for creating and modifying dates and times.\r\n\r\nOne of the standout features of Pendulum is its support for time zones. The library comes with a comprehensive list of time zones, and it can automatically adjust dates and times to the local time zone of a given location. Additionally, Pendulum can handle time zone conversions with ease, making it easy to work with date/time data across different time zones.\r\n\r\nPendulum also provides a powerful API for creating and modifying dates and times. With its fluent interface, developers can create and manipulate dates and times using a natural, human-readable syntax.","description":"Pendulum is a Python library designed to simplify the handling of dates, times, and time zones. It offers an easy-to-use API that allows developers to perform common date/time operations with ease, while also providing advanced functionality for more complex scenarios. With its support for time zones, leap years, and daylight saving time, Pendulum is a comprehensive solution for managing date/time data in Python. Its fluent interface and intuitive syntax make it easy to create and manipulate dates and times in a natural way, while its robust documentation and helpful community make it easy to get started with the library. Whether you're building a simple date calculator or a complex scheduling application, Pendulum can help you work with time-related data more efficiently and effectively.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"FGWHPW","speakers":[{"code":"PRVT8J","name":"Renne Rocha","biography":"","avatar":"https://pretalx.com/media/avatars/foto-perfil-quadrada_vQusnGV.png"}],"title":"Gathering data from the web using Python","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"Information is abundant and readily available on the internet. However, the sheer amount of data can be overwhelming and time-consuming to navigate through. That's where web scraping comes in - a powerful tool used to extract data from websites and turn it into a usable format.\r\n\r\nIn this tutorial, we will explore the basics of web scraping and how to implement it using Scrapy (a Python framework). Whether you are a data analyst, programmer, or researcher, this tutorial will equip you with the fundamental skills needed to create your own web scraper and extract valuable information from websites.","description":"During the tutorial, we will learn concepts of web scraping doing some exercises against a fake website with challenges that are very similar to the ones we will find in real websites using Scrapy, a Python framework designed for web scraping tasks.\r\n\r\n**To better follow the tutorial, it would be good to install Scrapy in your machine**. More information at https://github.com/rennerocha/europython-2023-gathering-data-tutorial#before-the-tutorial\r\n\r\n1. (presentation) Web scraping fundamentals\r\n - What is web scraping, why we want to do web scraping and real use cases for web scraping\r\n\r\n2. (presentation) Scrapy basic concepts\r\n - What is Scrapy, what its advantages over other tools, its basic classes (Spider, Request, Response, parses) and how to create a very simple web crawler\r\n\r\n3. (presentation + exercise) Scraping a basic HTML page \r\n - Gathering data from http://quotes.toscrape.com/, a plain well-structure HTML page\r\n\r\n4. (presentation exercise) Scraping Javascript generated content (external API)\r\n - Gathering data from http://quotes.toscrape.com/scroll, where the data is gathered from an API call\r\n\r\n5. (presentation + exercise) Scraping Javascript generated content (data into HTML)\r\n - Gathering data from http://quotes.toscrape.com/js/, where the data to be gathered is located inside the HTML code, but processed by Javascript\r\n \r\n6. (presentation + exercise) Scraping page with forms and ViewState\r\n - Gathering data from http://quotes.toscrape.com/search.aspx, where we need to handle forms submission and ViewStates\r\n \r\n7. (presentation) Proxies and headless browsers\r\n - When simple requests are not enough, what other tools we have to proceed\r\n\r\n8. (presentation) Being polite and not gathering data you shouldn't gather\r\n - How to avoid interfering in your target website and some restrictions about what data you can and you can't gather","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[{"resource":"https://github.com/rennerocha/europython-2023-gathering-data-tutorial","description":"Slides and Code Samples of the Tutorial"}]},{"code":"ZPN8UC","speakers":[],"title":"Registration & Welcome @ Forum Hall Foyer 1st Floor","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"Welcome to EuroPython 2023! You can pick up your badges at any time during the week as long as we are open! If you want to avoid the morning rush on Wednesday, come on Monday and Tuesday!\r\n\r\nQueues will be sorted by your **first name** on your ticket. Your ticket can be located via your order confirmation email (from support@pretix.eu with the Subject: Your order: XXXX). If you ordered your ticket after we've sent badges for printing (after 10 July), go directly to the Info Desk (also referred as Debugging Desk) and a volunteer will help!","description":"","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T08:00:00+02:00","end":"2023-07-19T09:00:00+02:00"},"image":null,"resources":[]},{"code":"DTXYKX","speakers":[{"code":"8NBKQT","name":"Hynek Schlawack","biography":"","avatar":"https://pretalx.com/media/avatars/Chicago_200x200_qvECPGe.jpg"}],"title":"Subclassing, Composition, Python, and You","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"Ever seen a code base where understanding a simple method meant jumping through tangled class hierarchies? We all have! And while \"Favor composition over inheritance!\" is almost as old as object-oriented programming, strictly avoiding all types of subclassing leads to verbose, un-Pythonic code. So, what to do?\r\n\r\nThe discussion on composition vs. inheritance is so frustrating because far-reaching design decisions like this can only be made with the ecosystem in mind – and because there's more than one type of subclassing!\r\n\r\nLet's take a dogma-free stroll through the types of subclassing through a Pythonic lens and untangle some patterns and trade-offs together. By the end, you'll be more confident in deciding when subclassing will make your code more Pythonic and when composition will improve its clarity.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:15:00+02:00"},"image":null,"resources":[]},{"code":"UAEJZX","speakers":[{"code":"EKA3S9","name":"Eli Holderness","biography":"","avatar":"https://pretalx.com/media/avatars/aeef7b38adf063370662bc96aa051080_BD0zth9.jpg"}],"title":"A Brief History of Data Storage","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"~ None of these topics"},"track_id":3574,"state":"confirmed","abstract":"For millennia, humans have known things. Pretty quickly, we started writing them down; our brains aren't very good at storing all the things we know reliably, and we needed something more durable.\r\n\r\nA long time ago, this meant clay tablets with cuneiform on them, and things have only got more complicated from there. Nowadays, we try to store data so that computers can understand it too, and that's given us a bewildering array of options - portable hard drives, magnetic tape storage and so much more.\r\n\r\nIn this talk, we'll take a look at the history of data storage, and discuss why some methods have worked better than others. We'll talk about why writing things down for humans is different than doing it for computers, and why it's difficult to do both at the same time (this is what code is). Finally, we'll look at today's state-of-the-art for keeping data safe, and discuss what the future might hold.\r\n\r\nThis talk has no prerequisites, although a fondness for weird facts will help!","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:00:00+02:00"},"image":null,"resources":[]},{"code":"XPARN3","speakers":[],"title":"Registration & Welcome @ Forum Hall Foyer 1st Floor","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"Welcome to EuroPython 2023! You can pick up your badges at any time during the week as long as we are open! If you want to avoid the morning rush on Wednesday, come on Monday and Tuesday!\r\n\r\nQueues will be sorted by your **first name** on your ticket. Your ticket can be located via your order confirmation email (from support@pretix.eu with the Subject: Your order: XXXX). If you ordered your ticket after we've sent badges for printing (after 10 July), go directly to the Info Desk (also referred as Debugging Desk) and a volunteer will help!","duration":60,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T08:00:00+02:00","end":"2023-07-20T09:00:00+02:00"},"image":null,"resources":[]},{"code":"MRLACS","speakers":[{"code":"P9XQDF","name":"Tom Christie","biography":"","avatar":null}],"title":"Designing an HTTP client","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"HTTPX is a fully featured HTTP client for Python 3, which provides sync and async APIs, and support for both HTTP/1.1 and HTTP/2. It also includes a built-in command-line client.\r\n\r\nWe'll be taking a look at the architecture of the client, learning from the design decisions behind it, and gaining a better understanding of HTTP along the way.","description":"Some of the aspects we'll be taking a look at include:\r\n\r\n* Layered designs. How to design for separation of responsibilities. Why it matters, and the benefits it provides.\r\n* What are you saying? From the bytes on the wire, though SSL, content encoding, compression, media and text encodings.\r\n* Connection pooling in HTTP.\r\n* Building packages that support both sync and async concurrency models.\r\n* HTTP/1.1, HTTP/2, and HTTP/3.\r\n* Supporting more complex requirements. Handling WebSockets and other protocol upgrades.\r\n* Keeping it clean. Managing resource lifespans.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"U9SNQ7","speakers":[{"code":"RSAUTH","name":"Giordano Tuvo","biography":"","avatar":"https://pretalx.com/media/avatars/Giordano-Tuvo-WEB-1_iv1xMa8.jpg"}],"title":"How to land your new Python Developer job: a Recruiter's perspective","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Career, Life, Health"},"track_id":3555,"state":"confirmed","abstract":"Looking for a job is already a job. How can you make sure that you are successful in the role of a Python Developer job-seeker? Join this talk to learn directly from an insider the tips & tricks about what technologies are in-demand, how to look for your next role, how to display your experience (or lack of) in your CV, how to prepare for interviews, and much more.","description":"Being a job-seeker is one of the most extenuating jobs ever. Everyone knows this, Recruiters included. This is why, after several years of experience working as a Recruiter and facing challenging times, it would be my pleasure to share my knowledge with the community. Together, we are going to tackle the steps and skills that are needed to secure a role in today's job market, with a focus on landing a job in the Python field. Come and then share your knowledge with other job seekers, we are in this all together!","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:00:00+02:00"},"image":null,"resources":[]},{"code":"F78KKP","speakers":[{"code":"TG8QZS","name":"Edwin Rijgersberg","biography":"","avatar":null}],"title":"Threat to Life: Preventing Planned Murders with Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"At the Netherlands Forensic Institute (NFI), we've developed a Python-based deep learning model to spot life-threatening messages in lawfully intercepted communication data, like those from the infamous chat service Encrochat.\r\n\r\nThanks to the application of our model in collaboration with the Dutch Police, dozens of potential victims of violent crimes, including murder, serious assault, and kidnapping, have been warned and safeguarded. In this talk, we'll dive into the development, implementation, and success of our deep learning model in the fight against violent criminal activities. We'll also tackle the risks tied to using deep learning for these cases and discuss the precautions we took to ensure responsible and accurate use.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[]},{"code":"ZCXMQK","speakers":[{"code":"RMHTBJ","name":"Michal Karzynski","biography":"","avatar":"https://pretalx.com/media/avatars/michal.karzynski_8sqgZB4.jpg"}],"title":"Understanding Neural Network Architectures with Attention and Diffusion","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"Neural networks have revolutionized AI, enabling machines to learn from data and make intelligent decisions. In this talk, we'll explore two popular architectures: Attention models and Diffusion models.\r\n\r\nFirst up, we'll discuss Attention models and how they've contributed to the success of large language models like ChatGPT. We'll explore how the Attention mechanism helps GPT focus on specific parts of a text sequence and how this mechanism has been applied to different tasks in natural language processing.\r\n\r\nNext, we'll dive into Diffusion models, a class of generative models that have shown remarkable performance in image synthesis. We'll explain how they work and their potential applications in the creative industry.\r\n\r\nThis is a good talk for visual learners. I prepared schematic diagrams, which present main features of the nerual network architectures. By necessity, the diagrams are oversimplified, but I believe they will allow you to gain some insight into Transformers and Latent Diffusion models.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:00:00+02:00"},"image":null,"resources":[]},{"code":"UNPKDU","speakers":[{"code":"X8WCZB","name":"Joanna Bryson","biography":"","avatar":"https://pretalx.com/media/avatars/joanna_bryson_BldMjYo.jpg"}],"title":"DevOps vs AGI","submission_type":{"en":"Keynote"},"submission_type_id":2752,"track":null,"track_id":null,"state":"confirmed","abstract":"Are you afraid of AI? Are you afraid of your own government? Are you just a great developer who practices decent devops and wants to know how you might wind up helping the people who answered \"yes\" to the previous two questions? I'll review the nature of intelligence, ethics, and EU digital regulation, then we can all talk about how coders can help make the planet work better on solving problems like sustainability and peace.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T09:15:00+02:00","end":"2023-07-21T10:00:00+02:00"},"image":null,"resources":[]},{"code":"P77JBK","speakers":[{"code":"SM8RTE","name":"Naomi Ceder","biography":"","avatar":null}],"title":"Trans*Code","submission_type":{"en":"Free Workshop"},"submission_type_id":2754,"track":null,"track_id":null,"state":"confirmed","abstract":"Trans\\*Code is an international hack event series focused on building connections and community while exploring the tech side of transgender issues and opportunities. Coders, designers, activists, visionaries of all sorts, and community members not currently working in technology are all welcome and encouraged to participate. FInd more details including how to sign up here: https://ep2023.europython.eu/trans_code","description":"Trans\\*Code is an international hack event series focused on building connections and community while exploring the tech side of transgender issues and opportunities. Trans\\*Code events are informal hackdays where participants can explore their ideas in collaboration with like-minded people. Coders, designers, activists, visionaries of all sorts, and community members not currently working in technology are all welcome and encouraged to participate.\r\n\r\nTrans*Code events are similar to hackathons, but with some key differences:\r\n\r\n* Events are only one day long. So you don’t need to take off an entire weekend;\r\n* Events are not competitive. At Trans\\*Code events, we’re all pulling for each other. While we do have final presentations, they are made in the spirit of sharing, not in the spirit of competition;\r\n* Events encourage following your interests. Want to work on that project? Fine, do it. Want to spend the morning with this one, and the afternoon with that one? The choice is yours. Trans*Code subscribes to the Un-Conference philosophy - whatever happens is exactly what should happen.","duration":90,"slot_count":4,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2186,"room":{"en":"Club D"},"start":"2023-07-18T09:30:00+02:00","end":"2023-07-18T11:00:00+02:00"},"image":null,"resources":[]},{"code":"PNYMHE","speakers":[{"code":"F3YM7C","name":"Jeroen Overschie","biography":"","avatar":"https://pretalx.com/media/avatars/4b2b4af030f0cb0fbb8d12db524aa1eb_g6dPb1d.jpg"},{"code":"KGPK3A","name":"Yke Rusticus","biography":"","avatar":"https://pretalx.com/media/avatars/my_profile_pic_ER4t9zo.jpg"}],"title":"How to MLOps: Experiment tracking & deployment 📊","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"PyData: Machine Learning, Stats"},"track_id":3564,"state":"confirmed","abstract":"What's this thing called **MLOps**? You may have heard about it by now, but never really understood what all the fuzz is about. Let's find out together!\r\n\r\nIn this tutorial, you will learn about MLOps and take your first steps in a hands-on way. To do so, we will be using **Open Source** tooling. We will be taking a simple example of Machine Learning use case and will gradually make it more ready for production 🚀.\r\n\r\nWe start with a simple time-series model in Python using scikit-learn and first add logging steps to make the performance of the model measurable. Don't worry: we will go through it step-by-step, so you won't be overwhelmed. Then, we will log our ML model and load it back into an inference step. Lastly, we will learn about deploying these actual models by Dockerizing our application 🙏.","description":"Welcome! You will be learning about MLOps in a hands-on way. So get ready to get your hands dirty and code along! 👏🏻\r\n\r\nJoin us if you 🫵:\r\n- Are working with Machine Learning / Data Science\r\n- Have some experience with Python\r\n- Are interested in MLOps and want to get some hands-on experience\r\n- Are interested in taking your Machine Learning model to production\r\n\r\n### Contents of the tutorial 📌:\r\n1. [15 min] MLOps: what's the fuzz about?\r\n2. [15 min] Why Experiment tracking? 📊\r\n3. [15 min] Hands-on: Logging metrics with MLFlow\r\n4. [10 min] Hands-on: Comparing experiments in the MLFlow interface\r\n5. [15 min] Hands-on: Saving a trained model with MLFlow\r\n6. [20 min] Hands-on: Loading a model with MLFlow and running inference\r\n7. [15 min] How to deploy our application? 🚀\r\n8. [30 min] Hands-on: Dockerizing our application\r\n9. [30 min] Hands-on: Deploying our application\r\n\r\n### 🏡 What you will take home\r\nAt the end of the tutorial, you will be taking home the following:\r\n- What MLOps is\r\n- When it's applicable, and why it is important\r\n- How you can track your Machine Learning experiments and build better models because of it\r\n- Separate model training from model inference\r\n- Know how you could deploy your ML model to production\r\n\r\n### ❤️ Open Source Software\r\nMany of the used tooling is Open Source. Open software for all!\r\n\r\n### 🎒 Pre-requisites\r\nSome Python knowledge is required, as well as some general Data Science knowledge: model- training and inference as well as cross-validation. We will not go into details on the Data Science part, but it is good to have a rough understanding about it 👍🏻.","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2187,"room":{"en":"Club E"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T11:00:00+02:00"},"image":null,"resources":[]},{"code":"VFLKKR","speakers":[{"code":"8RV9AV","name":"Rashmi Nagpal","biography":"","avatar":"https://pretalx.com/media/avatars/Photo-Rashmi-Nagpal_U6hCw3u.jpg"}],"title":"Building and Deploying Fair and Unbiased ML Systems : An Art, Not Science","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"There has been a renaissance around Artificial Intelligence systems in recent years. However, despite the hype, only a small percentage, i.e. 13% of Machine Learning models see the light of day!\r\nWell, effectively building and deploying machine learning models is more of an art than science! ML models are indeed inherently complex, have fuzzy boundaries, and rely heavily on data distribution. But what if they are trained on biased data? Then they’ll generate highly biased decisions! As the famous saying goes by, “Garbage in, garbage out,” so if the model is trained on skewed and unfair data distribution, they are bound to produce fuzzy output!\r\nSo, join me in this talk as I will share my learnings in developing effective practices to build and deploy ethical, fair and unbiased machine learning models into production.","description":"Have you ever wondered why the increasing reliance on Machine Learning systems raises concerns about fairness and bias in their data-driven decisions? What if ML models are built on skewed data or are not designed to mitigate bias - then they can perpetuate and even amplify existing inequalities and injustices!\r\n\r\nSince there's no one-size-fits-all approach, thus, building and deploying a fair and unbiased ML system is more of an art than a science! In this talk, firstly, we will explore the challenges involved in building and deploying fair and unbiased ML systems. Secondly, we will understand the technical debts which incur while building such systems and how to investigate them. Finally, we will learn fundamental strategies and best practices for ensuring your ML models are fair, unbiased, and ethical!","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-21T16:05:00+02:00","end":"2023-07-21T16:35:00+02:00"},"image":null,"resources":[]},{"code":"ADBP8B","speakers":[{"code":"CWD3DM","name":"Patrick Arminio","biography":"","avatar":"https://pretalx.com/media/avatars/489cdabedd1112f98474038939668778_ZyNQo0D.jpg"}],"title":"Build your first GraphQL API using Python 🍓","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"This workshop will teach you how to create your first GraphQL API using Python and Strawberry. We will be using using Fastapi as our framework of choice, but most of the concept will be applicable to other frameworks too.\r\n\r\nWe'll learn how GraphQL works under the hood, and how we can leverage type hints to create end to end type safe GraphQL queries.\r\n\r\nTo run this workshop you need to have at least python 3.8 and have followed the installation guide here: https://github.com/patrick91/strawberry-tiny-workshop","description":"","duration":90,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2184,"room":{"en":"Club B"},"start":"2023-07-18T13:45:00+02:00","end":"2023-07-18T15:15:00+02:00"},"image":null,"resources":[]},{"code":"M93HCV","speakers":[{"code":"8EGVC9","name":"Cheuk Ting Ho","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_1037_vjqZpqv.jpg"},{"code":"DHPEJJ","name":"Vaibhav Srivastav","biography":"","avatar":"https://pretalx.com/media/avatars/JFlrSzB4_400x400_e1UV9lu.jpg"},{"code":"PXQBU9","name":"Jodie Burchell","biography":"","avatar":"https://pretalx.com/media/avatars/BK7A9876_korr_sRGB_8_1000x1500px_b_NbNTtra.jpg"},{"code":"GHGDNR","name":"Valerio Maggio","biography":"","avatar":"https://pretalx.com/media/avatars/me_QNWdYHe.jpg"}],"title":"Q&A panel for data science newbies","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"Are you just getting started in the world of data science and feeling overwhelmed by the abundance of information on various packages, models, and techniques? Perhaps you're finding it challenging to decide which visualization package to use or which tools to begin with. Maybe you're puzzled by the distinctions between pip and Conda, or you're feeling bombarded by all the news about AI and large language models.\r\n\r\nWorry no more! Join us for this Q&A session, where a panel of data science experts will be there to address all of your pressing questions. This session is designed to create a relaxed and welcoming environment for complete beginners in the field, offering guidance on topics that might be causing confusion.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T14:35:00+02:00","end":"2023-07-19T15:05:00+02:00"},"image":null,"resources":[]},{"code":"TN3EXR","speakers":[{"code":"TPYBEP","name":"Steve Dower","biography":"","avatar":"https://pretalx.com/media/avatars/steve_dower_CIdjSnE.jpg"}],"title":"Python, Visual Studio Code, Copilot - Revolutionizing the way you do data science","submission_type":{"en":"Sponsored"},"submission_type_id":3042,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Come join this session to check out how Visual Studio Code along with GitHub, Codespaces, and Copilot can significantly improve the data science workflow and take your productivity to the next level. In this talk we will walk through several common Python data science scenarios, showcasing all the productive tooling VS Code has to offer along the way. As a sneak peek, we will be demoing a best-in-class Jupyter Notebooks experience with VS Code Notebooks, a revolutionary new data cleaning / preparation experience with Data Wrangler in VS Code, Copilot that helps you write code and fix issues faster, and more!","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T11:55:00+02:00","end":"2023-07-20T12:25:00+02:00"},"image":null,"resources":[]},{"code":"MMQTLC","speakers":[{"code":"KYHYTE","name":"SzymonMolinski","biography":"","avatar":null}],"title":"We can get more from spatial, GIS and public domain datasets!","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Machine Learning, Stats"},"track_id":3564,"state":"confirmed","abstract":"- Are prices of short-term rental apartments in your region similar? How similar are they, and at which distance do they tend to be correlated?\r\n- Do you have access to a few air pollution measurements but must provide a smooth map over the whole area?\r\n- Is your machine learning model based on remote sensing data from Earth Observation satellites, and do you want to include data sampled on Earth?\r\n- Do you work with county-level socio-economic factors, but you want to get insights at a finer scale?\r\n\r\n`if any(answer)`, then come and see what we can do with the `pyinterpolate` package designed exactly for spatial interpolation!","description":"The talk introduces spatial interpolation in Python at the intermediate/advanced level. You should know Python basics and the statistical concepts of variance and correlation to understand the presentation.\r\n\r\nSpatial interpolation is the new kid on the block, and in the future, with IoT devices everywhere, it will gain much more weight (along with its relative - time-series modeling). Heavily based on statistics, it falls into a single concept:\r\n\r\n*Everything is related to everything else, but near things are more connected than distant things*. (**W. Tobler**).\r\n\r\nThe presentation will focus on one concept and two techniques:\r\n- the concept of spatial correlation (the example from the leisure & tourism market),\r\n- the point kriging technique used to interpolate values at unseen locations (weather readings enhancement),\r\n- the Poisson Kriging Area-to-Point technique for preparation of the input from regional statistics that fit into satellite-based observations (cancer rates in U.S. counties).\r\n\r\nTechniques for spatial data interpolation are used by:\r\n- mining industry,\r\n- agriculture & forestry,\r\n- defense & security,\r\n- retail,\r\n- public health,\r\n- administration, urban planning, water management,\r\n- weather forecasting,\r\n- and everywhere where we sample events distributed over an area or analyze regional statistics.\r\n\r\nWhy should we bother from the business perspective? We have various ML models, and house-price prediction is a topic of many tutorials. There are a few reasons: with spatial interpolation, we get knowledge about spatial dependencies between our samples, we get uncertainty measures, and we may perform analysis on a relatively small sample (> 50 samples) that won't work with the ML pipeline. We may even link geostatistical models within complex machine-learning pipelines. And finally, we may save a lot of money on sampling.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[]},{"code":"XRGTRX","speakers":[{"code":"9DMGRT","name":"Larry Hastings","biography":"","avatar":"https://pretalx.com/media/avatars/pycon.profile.pic_2Ohe0DM.png"}],"title":"Give your program Appeal!","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"This talk presents Appeal, a new library for command-line parsing in Python. Appeal avoids the cumbersome APIs and repetition endemic to the currently prevalent libraries in this space by leveraging Python's own function call interface. This talk will familiarize the audience with Appeal, its motivation, its approach, and its expressive power, and show them how to use Appeal in their own programs.","description":"Appeal is a new and different command-line parsing library. It leverages Python's powerful function call interface to define your command-line, thus avoiding the clumsy, wordy APIs and endless repetition associated with other libraries. With Appeal, you just write Python functions, and it does the rest! This talk will show you how to use Appeal, how it works internally, and will leave you ready to use Appeal with your own programs.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T14:35:00+02:00","end":"2023-07-20T15:05:00+02:00"},"image":null,"resources":[]},{"code":"ZFB73A","speakers":[{"code":"QQSVVM","name":"Çağıl Uluşahin Sönmez","biography":"","avatar":"https://pretalx.com/media/avatars/me-2023_IjHoFqZ.jpg"}],"title":"The coding conventions that makes our lives easier","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"Discover how coding conventions can enhance code quality, readability, maintainability, and reduce errors. Join us as we discuss the creation and implementation of coding conventions, and how to use linters for maintenance.","description":"Engineers review code as often as they write it and use a lot of tools to improve this process, such as linters and auto-formatters. One tool that is also very useful is coding conventions. It is a collection of references that can be used during code reviews while also serving as a valuable day-to-day reference and guide for the entire team.\r\n\r\nThis talk will explore several different conventions from the open-source conventions repository, offering an in-depth exploration of how they improve the quality of the codebase and serve as a tool for knowledge transfer among engineering teams.\r\n\r\nThe structure of the talk will follow:\r\n\r\n* What are coding conventions, and why do we use them?\r\n\r\n* How to establish your own coding conventions?\r\n\r\n* Examples of some of the most useful coding conventions and how they enhance code quality.\r\n\r\n* How to uphold your coding conventions with the help of linters?\r\n\r\nAttendees will leave with a comprehensive understanding of the concept of coding conventions and how to implement them within their own team.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:35:00+02:00"},"image":null,"resources":[]},{"code":"K9VPWE","speakers":[{"code":"BNPWPR","name":"Dilyan Grigorov","biography":"","avatar":"https://pretalx.com/media/avatars/60695841-6B63-41B6-807B-7FB71B1D7484_Na78TOv.jpeg"}],"title":"Python 3.11 What’s new?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"The topic aims to introduce participants to the latest from Python in version 3.11, released in early October 2022, which includes:\r\n\r\n• Speed improvements;\r\n• Standard Libraries Improvements;\r\n• Self type;\r\n• Exception Notes;\r\n• Better Error Messages;\r\n• Improved Type Variables;\r\n• Variadic generics;\r\n• Marking individual TypedDict items as required or potentially missing;\r\n• Arbitrary literal string type;\r\n• Data class transforms;\r\n• TOML read-only support in stdlib;\r\n• Exception Groups;\r\n• Negative Zero Formatting.","description":"My presentation aims to consider the most interesting new features of Python 3.11 which have been discussed among the software engineers since the official release of the new version of the language. Then real practical examples will be taken into account and implemented for real solutions of problems.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T10:30:00+02:00","end":"2023-07-21T11:00:00+02:00"},"image":null,"resources":[]},{"code":"F3KLX7","speakers":[{"code":"R8VEKR","name":"Rafał Nowicki","biography":"","avatar":"https://pretalx.com/media/avatars/7cb87ff339df2cccf20c7a8fc2bb3952_kT5qwCb.jpg"}],"title":"Zero downtime deployments: Is it worth the effort?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"TBD - Multiple Tracks"},"track_id":3683,"state":"confirmed","abstract":"Learn about the advantages and disadvantages of zero downtime deployment strategy, as well as best practices for implementing it in your organization. Learn how to make changes to production systems while keeping users up to date. Don't pass up this chance to optimize your software deployments.","description":"Minimizing downtime during deployments is critical in the world of software development for maintaining high-availability applications and ensuring users have continuous access to applications. In this presentation, we will look at the advantages, disadvantages, and best practices of zero-downtime deployments. \r\n\r\nWe will go over the technical aspects of achieving zero downtime, such as blue-green deployments, canary releases, feature toggles, and so on. We'll also talk about how to balance the benefits of zero-downtime deployments with the effort required to put them in place. You will discover the significance of testing, monitoring, and automation in achieving successful zero-downtime deployments.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2193,"room":{"en":"Terrace 2B"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:40:00+02:00"},"image":null,"resources":[]},{"code":"EWHVWK","speakers":[{"code":"3CXHP7","name":"Franz Wöllert","biography":"","avatar":"https://pretalx.com/media/avatars/franz_3PbzgWQ.jpg"}],"title":"Apache Spark vs cloud-native SQL engines","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Currently, SQL and Cloud Data Warehouses (DWH) are extremely popular for good reason. They are great for dashboarding and business intelligence (BI) use cases due to their ease-of-use. However, their combination might not be the best choice for every problem. More precisely, business-critical data pipelines with high complexity might be better suited for frameworks such as Apache Spark which greatly benefit from the tight integration with general purpose languages like Python (e.g., PySpark). \r\n\r\nExpect an opinionated comparison between Apache Spark and seemingly easier-to-use cloud native SQL engines. By the end of this talk, you will be challenged to think about why they are complementary and when each has its justification.","description":"This talk is intended for data engineers, solution architects and alike who deal with distributed computation engines for analytical batch workloads in their day to day work.\r\n\r\nWhile SQL is the lingua franca for data analysis, it might not be the best choice for every problem. Business-critical data pipelines with high complexity demand for appropriate abstractions, proper testability and enhanced debugging tooling that is hard to achieve with SQL and surrounding frameworks. In contrast, using the power of Python in conjunction with frameworks like Apache Spark is a promising solution for the following reasons:\r\n\r\n- Apache Spark’s DataFrame API is embedded in a general purpose programming language like Python which allows to leverage software engineering concepts such as inheritance, composition, introspection and higher order functions. This provides data engineers a toolbox of abstractions to properly handle complexity. More precisely, it allows to structure, modularize, reuse, and dynamically generate building blocks of data pipelines.\r\n- To ensure semantic correctness, data engineers can develop unit tests on individual transformations or integration tests on entire pipelines in classical software development tradition which is hardly possible with cloud-native SQL engines.\r\n- Apache Spark's future-proof is ensured due to its wide adoption, runtime flexibility and vendor independence.\r\n\r\nThe talk will guide you through each of the claims stated above using a real world IoT use case while comparing the strengths and weaknesses of both Apache Spark and cloud-native SQL engines.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:40:00+02:00"},"image":null,"resources":[]},{"code":"UD3GZD","speakers":[],"title":"Reserved for EPS/PSF/PYO Session","submission_type":{"en":"Open Space"},"submission_type_id":3078,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":150,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2234,"room":{"en":"Open Space"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T13:00:00+02:00"},"image":null,"resources":[]},{"code":"3XQWYC","speakers":[{"code":"GHGDNR","name":"Valerio Maggio","biography":"","avatar":"https://pretalx.com/media/avatars/me_QNWdYHe.jpg"}],"title":"Hitchhickers Guide to D&D 🐉","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"This talk is meant to be an hitchhickers guide to **Dungeons and Dragons** (`D&D`) _for programmers_. \r\nWe will leverage on our wit and intelligence to explore a very perilious dungeon 🧙 , where a venomous dragon is hiding in the shadows 🐉 . \r\nThanks to a magical potion in an ancient flask, our wizardly skills have been enhanced with Pythonic capabilities 🐍 making us the most powerful and geeky magician of the realm.\r\nThese new acquired power revealed _unprecedented strategies_ (i.e. algorithms 🙃) that will guide us through the maze avoiding all the traps and pitfalls ⚔️, and will help us maximising the power of our _fire magic_ ☄️ to finally slay the dragon.\r\n\r\nIf you would like to know more about this new Pythonic spell, and the secrets it unveiled, or if you're simply interested in **new graph algorithms** that can run balzingly _fast_ maximising your CPU capabilities, **this is the talk for you!**","description":"I am playing D&D since I was 13, and that is indeed a fantastic game for so many reasons. Even more fantastic if you could combine your geeky programming skills to it, whenever you have to explore hidden dungeons. \r\nIn facts, **graphs** are the most versatile, and fascinating data abstraction that could help us handling these challenges in a very programmatic way.\r\nIn Python we would have many solutions to work with Graph problems: from `scipy.sparse` to `networkx`.\r\nHowever, none of these solutions are generally known to be fast and efficient, and this can represent a huge impediment when the size of the graph in question (in terms of nodes, and edges) increases.\r\nBut _What if_ **graph** algorithms could be expressed as **linear algebraic** operations ? And _what if_ this _translation_ would make graph algorithms super efficient so that this would represent a viable and scalable alternative for high-performance graph analytics ? \r\nAnd _what if_ we could leverage on these new and blanzingly fast algiorithms, while still using the **same** libraries (and abstractions) we would normally use with `networkx`?\r\n\r\nIn this talk, we will introduce [`python-graphblas`](https://github.com/python-graphblas/python-graphblas), i.e. the official Python API to [GraphBLAS](https://graphblas.org/): a powerful framework for creating graph algorithms expressed as linear algebra sparse matrix operations. \r\nWe will explore two practical examples (working on our D&D use case) showcasing performance, and how `python-graphblas` with [`graphblas-algorithms`](https://github.com/python-graphblas/graphblas-algorithms) integrate with `networkX`.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[]},{"code":"XW8RB3","speakers":[{"code":"CTVASZ","name":"Tushar Sadhwani","biography":"","avatar":"https://pretalx.com/media/avatars/dp_raJCt9B.jpg"}],"title":"Writing a Python interpreter from scratch, in half an hour.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"You use the Python interpreter every single day. It does a lot of things for you: checks that your code has valid syntax and is properly indented, imports modules from various locations, and runs your code instruction-by-instruction.\r\n\r\nBut if you've ever wondered how exactly it happens, this talk will teach you the entire process, by building a working python interpreter from scratch.","description":"The plan is to write a really simple, but working Python interpreter that can run Python code, from scratch.\r\n\r\nThe topics we'll be going through to build this interpreter:\r\n- Lexing an indentation based language\r\n - Why `Indent` and `Dedent` need to be tokens\r\n- Writing a Recursive Descent parser\r\n - Parsing literals: ints, strings, lists, dictionaries\r\n - Parsing expressions\r\n - Parsing function calls - `print(\"Hello world!\")`\r\n- Semantic analysis: removing invalid code\r\n- A tree-walk interpreter\r\n - Interpreting `print()` statements\r\n - Running `import` statements\r\n - File I/O: implementing `open()` calls\r\n- Running `json.loads()` and `json.dumps()` from scratch","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:50:00+02:00"},"image":null,"resources":[]},{"code":"CRPQGK","speakers":[{"code":"8HVY9P","name":"Mateusz Modrzejewski","biography":"","avatar":"https://pretalx.com/media/avatars/MM_profile_photo_JLpmhcS.JPG"}],"title":"Music information retrieval with Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Deep Learning, NLP, CV"},"track_id":3562,"state":"confirmed","abstract":"The advancements of artificial intelligence in computer vision and natural language processing often make the headlines, but the subspace of musical AI is developing just as rapidly. Let’s take a dive into the research area of music information retrieval and see how Python enables some of its proudest achievements. You’ll learn about common MIR tasks and get ideas on how you can analyze, generate and interact with music using code, so you can start exploring right away! \r\nNo music theory knowledge nor prior experience with MIR is expected.","description":"The talk gives an overview of the music information retrieval (MIR) research area. The area encompasses music analysis, generation, processing and recommendation. Python is one of the main tools used in MIR, with many dedicated libraries and more and more pre-trained AI models available for Pythonistas. Both the research area of MIR and the contents of this talk are highly interdisciplinary - MIR has something for you regardless whether you're a music lover, an active musician, deep learning researcher or web app builder!","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T15:30:00+02:00","end":"2023-07-20T16:00:00+02:00"},"image":null,"resources":[]},{"code":"HUC9XE","speakers":[{"code":"Q77JXX","name":"Stefano Cotta Ramusino","biography":"","avatar":"https://pretalx.com/media/avatars/whitone_xlI5uG2.jpg"}],"title":"Unlocking Healthcare data: the power of Open Formats in Python Data Science","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Are you a data scientist or developer working in healthcare? Are you tired of dealing with proprietary data formats for biological and vital sign information? It's time to unlock the power of open data and make your research more impactful.\r\n\r\nIn this talk, we'll explore how you can leverage Python analytics to manipulate and analyze complex datasets of patient information, including blood work, ECG, EEG, echocardiography, radiography, and more.\r\n\r\nWe'll also dive into the world of open data formats, and show you how using these formats can make it easier to anonymize, convert, and collaborate on research.\r\n\r\nDon't miss this opportunity to learn how Python analytics and open data formats can help you unlock the insights hidden in your data and improve patient outcomes.","description":"In this talk, we'll explore the power of open data formats for healthcare and how Python analytics, like NumPy, SciPy, Pandas and Matplotlib, can be used to analyze and unlock the insights hidden in biomedical datasets. We'll dive into the world of open data formats, including EDF for ECG and EEG, ISHNE for Holter, FASTA, FASTQ and SAM for biological sequence data, DICOM for radiology, and more.\r\n\r\nWe'll also discuss the importance of adhering to open data format standards and avoiding proprietary extensions, which can limit collaboration and hinder progress in healthcare research. To help ensure compliance with these standards, we'll introduce a variety of Python libraries, like Biopython, MNE-Python, pydicom, EDFlib-Python and ISHNEHolterLib, that can be used to test output files and ensure they meet the required standard.\r\n\r\nWhether you're a data scientist, developer, or healthcare professional, this talk is for you. By leveraging the power of open data formats and Python analytics, we can improve patient outcomes and advance the field of healthcare research. Join us as we explore the exciting possibilities of open data formats and Python analytics in healthcare.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-20T16:05:00+02:00","end":"2023-07-20T16:50:00+02:00"},"image":null,"resources":[]},{"code":"P7CVWV","speakers":[],"title":"Lightning Talks Friday","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-21T16:45:00+02:00","end":"2023-07-21T17:30:00+02:00"},"image":null,"resources":[]},{"code":"TZLHXN","speakers":[{"code":"DYJUDX","name":"Sebastien Crocquevieille","biography":"","avatar":null}],"title":"Orchestrating Python Workflows in Apache Airflow","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Python Libraries"},"track_id":3567,"state":"confirmed","abstract":"[**Apache Airflow**](https://github.com/apache/airflow) is an Open Source workflow orchestrator. It is a python library that allows you to automate complex code and integrate it with a plethora of Data Sources. It is provided with an integrated UI and API for both your human and programmatic needs.\r\n\r\nAfter 5 years of running Airflow in production, I hope to share some insights on the technology. The strengths and weaknesses, recommended features and more dangerous ones, and similar considerations on the UI.\r\n\r\nI'll also be talking about how **you** can make your own *Operators* in Airflow.\r\n\r\nCome take a deeper dive into the same solution used by Airbnb, Slack, Walmart and many more to efficiently run their data pipelines.","description":"","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[]},{"code":"RRJAZA","speakers":[{"code":"FKEVZR","name":"Sin-seok SEO","biography":"","avatar":"https://pretalx.com/media/avatars/me_6wC1Sou.jpg"}],"title":"From Jupyter Notebooks to a Python Package: The Best of Both Worlds","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"A Jupyter notebook is quite handy for rapid REPL (Read-Eval-Print-Loop) style tasks\r\nsuch as exploratory data analysis and data science. However, we would feel\r\ndeficiencies in proper SW engineering supports at some point as the notebook grows\r\nto have larger and more complicated code. It is because the Jupyter notebook lacks\r\nseveral important features including code sharing, refactoring support,\r\nversion control and advanced editing. Fortunately, traditional full-fledged IDEs,\r\nsuch as *VS Code* or *PyCharm*, are available at hand and they support\r\nthese lacking features very well.\r\nThen, why don’t we take advantage of the best of both worlds?\r\n\r\nIn this beginner-level hands-on talk, I will demonstrate how to\r\ntransform Jupyter notebook workflows to a proper Python package using *VS Code*.\r\nI will also introduce several basic but essential refactoring recommendations.\r\nBy doing so, you can use the package for several notebooks\r\nand even share with your colleagues and friends.","description":"Notebooks, code and slides are available in [this repo](https://github.com/sesise0307/europython2023-package).\r\n\r\n## Introduction\r\n\r\n- Jupyter Notebook\r\n - Provides ideal workflows for data science\r\n - Pros: REPL, interactivity, integration of code / output / documentation,\r\n visualization, rapid prototyping, result sharing, etc.\r\n - Cons: lacks of debugging, code sharing, refactoring, version control,\r\n advanced editing, etc.\r\n- Full-fledged IDEs\r\n - Designed to maximize programmer productivity\r\n - One iteration might take a long journey\r\n- We can benefit from the best of both worlds\r\n by using a Python package\r\n\r\n## Jupyter Notebook Data Science Workflow\r\n\r\n- Data Loading\r\n- Preprocessing\r\n- Exploratory Data Analysis (EDA)\r\n- Prediction\r\n\r\n## To (Your Own) Python Package\r\n\r\n- What is a package and why do we want to use it?\r\n- How to create a (minimal) package\r\n- How to import and use\r\n- Live refactoring examples\r\n\r\n## Wrap up / Some tips\r\n\r\n- Publish your awesome package\r\n- PyScaffold\r\n- VS Code","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T12:10:00+02:00","end":"2023-07-19T12:40:00+02:00"},"image":null,"resources":[{"resource":"https://github.com/sesise0307/europython2023-package","description":"GitHub repo"},{"resource":"https://program.europython.eu/media/europython-2023/submissions/RRJAZA/resources/slides_JE8Oe8x.pdf","description":"Slides"}]},{"code":"TGRMDT","speakers":[{"code":"HZMBBH","name":"Florian Bruhin","biography":"","avatar":"https://pretalx.com/media/avatars/square-1kpx_pfnPej4.jpg"}],"title":"pytest tips and tricks for a better testsuite","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Testing"},"track_id":3572,"state":"confirmed","abstract":"pytest lets you write simple tests fast - but also scales to very complex scenarios: Beyond the basics of no-boilerplate test functions, this training will show various intermediate/advanced features, as well as gems and tricks.\r\n\r\nTo attend this training, you should already be familiar with the pytest basics (e.g. writing test functions, parametrize, or what a fixture is) and want to learn how to take the next step to improve your test suites.\r\n\r\nIf you're already familiar with things like fixture caching scopes, autouse, or using the built-in tmp_path/monkeypatch/... fixtures: There will probably be some slides about concepts you already know, but there are also various little hidden tricks and gems I'll be showing.","description":"We'll cover things like:\r\n\r\n- Recommended pytest settings for more strictness\r\n- What's xfail and why is it useful?\r\n- How to mark an entire test file or single parameters\r\n- Ways to deal with parametrize IDs and syntax\r\n- Useful built-in pytest fixtures\r\n- Caching for fixtures\r\n- Using fixtures implicitly\r\n- Advanced fixture and parametrization topics\r\n- How to customize fixtures behavior based on markers or custom CLI arguments\r\n- Patching, mocking, and alternatives\r\n- Various useful plugins, and how to write your own\r\n- Short intro to property-based testing with Hypothesis","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2187,"room":{"en":"Club E"},"start":"2023-07-18T13:45:00+02:00","end":"2023-07-18T15:15:00+02:00"},"image":null,"resources":[]},{"code":"3TUMQT","speakers":[{"code":"8QTNH7","name":"Lil","biography":"","avatar":null}],"title":"What my 300+ fantastic young students taught me about Python.","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Education, Teaching & Training"},"track_id":3558,"state":"confirmed","abstract":"Computer pRogramming, Technology, Bit-coinism Success, Climate Change and Billionaires are all associated with one another.\r\nThis talk will describe how a cohort of 299+ young people (aged 11-14) were introduced to Python Programming, at the same time, for the very first time.\r\nAnd in this talk, I would like to share with a great secret in that I have actually learnt more from the young students than they learnt from me. \r\nThis talk is about how these young people have opened my eyes, mind and heart about alternative ways of looking at and appreciating:- \r\nThe humble IF statement; the under-rated FOR loop, the dry Return Statement, the functional Maths & Random modules, etc. as if one were an artist.\r\nWe will talk about the renewed delight of looking at these things from fresh pairs of eyes and how we can take these new learnings forward.","description":"Computer pRogramming, Technology, Bit-coinism Success, Climate Change and Billionaires are all associated with one another.\r\nThis talk will describe how a cohort of 299+ young people (aged 11-14) were introduced to Python Programming, at the same time, for the very first time.\r\nAnd in this talk, I would like to share with a great secret in that I have actually learnt more from the young students than they learnt from me. \r\nThis talk is about how these young people have opened my eyes, mind and heart about alternative ways of looking at and appreciating:- \r\nThe humble IF statement; the under-rated FOR loop, the dry Return Statement, the functional Maths & Random modules, etc. as if one were an artist.\r\nWe will talk about the renewed delight of looking at these things from fresh pairs of eyes and how we can take these new learnings forward.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T15:30:00+02:00","end":"2023-07-21T16:00:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/3TUMQT/resources/Copy_of_EuroPython_2023_jQXACcR.pdf","description":"Slides of the Talk"},{"resource":"https://program.europython.eu/media/europython-2023/submissions/3TUMQT/resources/Copy_of_EuroPython_2023_3Gzf3tA.pdf","description":"Slides of the Talk"}]},{"code":"3HDWUZ","speakers":[{"code":"DKNKQU","name":"Martin Christen","biography":"","avatar":"https://pretalx.com/media/avatars/martin_sq_pcRy206.jpg"}],"title":"Geospatial Data Processing in Python: A Comprehensive Tutorial","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"In this tutorial, you will learn about the various Python modules for processing geospatial data, including GDAL, Rasterio, Pyproj, Shapely, Folium, Fiona, OSMnx, Libpysal, Geopandas, Pydeck, Whitebox, ESDA, and Leaflet. You will gain hands-on experience working with real-world geospatial data and learn how to perform tasks such as reading and writing spatial data, reprojecting data, performing spatial analyses, and creating interactive maps. This tutorial is suitable for beginners as well as intermediate Python users who want to expand their knowledge in the field of geospatial data processing.","description":"Geospatial data, which refers to data that has a geographic component, is a crucial part of many fields, including geography, geography, urban planning, and environmental science. In this tutorial, you will learn about the various Python modules that are available for working with geospatial data.\r\n\r\nWe will start by introducing the **GDAL** (Geospatial Data Abstraction Library) and **Rasterio** modules, which are used for reading and writing raster data (data stored in a grid of cells, where each cell has a value). You will learn how to read and write common raster formats such as GeoTIFF and ESRI ASCII, as well as how to perform common raster operations such as resampling and reprojecting.\r\n\r\nNext, we will cover the **Pyproj** module, which is used for performing coordinate system transformations. You will learn how to convert between different coordinate systems and how to perform common tasks such as converting latitude and longitude coordinates to UTM (Universal Transverse Mercator) coordinates.\r\n\r\nAfter that, we will introduce the **Shapely** module, which is used for working with geometric objects in Python. You will learn how to create and manipulate points, lines, and polygons, as well as how to perform spatial operations such as intersection and union.\r\n\r\nThen, we will cover the **Folium** module, which is used for creating interactive maps in Python. You will learn how to create simple maps, add markers and popups, and customize the appearance of your maps.\r\n\r\nNext, we will introduce the **Fiona** module, which is used for reading and writing vector data (data stored as individual features, each with its own geometry and attributes). You will learn how to read and write common vector formats such as ESRI Shapefile and GeoJSON, as well as how to access and manipulate the attributes of vector features.\r\n\r\nAfter that, we will cover the **OSMnx** module, which is used for working with OpenStreetMap data in Python. You will learn how to download and manipulate street networks, buildings, and other geospatial data.\r\n\r\nNext, we will introduce the **Libpysal** module, which is used for performing spatial statistics and econometrics in Python. You will learn how to calculate spatial weights, perform spatial autocorrelation tests, and estimate spatial econometric models.\r\n\r\nThen, we will cover the **Geopandas** module, which is used for working with geospatial data in a Pandas DataFrame. You will learn how to load and manipulate vector data, perform sp","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2183,"room":{"en":"Club A"},"start":"2023-07-17T13:45:00+02:00","end":"2023-07-17T15:15:00+02:00"},"image":null,"resources":[]},{"code":"AG7JR9","speakers":[{"code":"8LQU9C","name":"Florian Wilhelm","biography":"","avatar":"https://pretalx.com/media/avatars/florian_squared_O3yeLYq.jpg"}],"title":"From Algorithms to Agendas: A Beginner's Guide to Integer Programming","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Machine Learning, Stats"},"track_id":3564,"state":"confirmed","abstract":"This talk will provide an introduction to Integer Programming and demonstrate how it can be used for conference scheduling. We will explore the basics of Integer Programming and how it can be applied to optimize the allocation of talks to time slots and rooms in a conference program. By the end of the talk, attendees will have a better understanding of how this powerful tool can help to create an efficient and effective conference schedule that maximizes attendee satisfaction. Whether you're a conference organizer or simply interested in learning more about optimization algorithms, this talk is for you!","description":"### Introduction\r\n\r\n* Overview of the challenges of conference scheduling and the potential benefits of using optimization algorithms\r\n* Explanation of the basics of Integer Programming and its role in conference scheduling\r\n\r\n### Key Concepts\r\n\r\n* The importance of defining clear objectives and constraints for a conference program\r\n* The different types of variables used in Integer Programming models for conference scheduling (e.g. binary, integer, continuous)\r\n* An overview of popular optimization algorithms and their application to conference scheduling (e.g. branch-and-bound, cutting plane methods, column generation)\r\n* A step-by-step guide to constructing an Integer Programming model for conference scheduling, including how to formulate objectives and constraints\r\n\r\n### PyConDE / PyData 2023 Berlin Example:\r\n\r\n* A real-world conference scheduling problem, that is for the PyConDE / PyData 2023, and how we used Integer Programming\r\n\r\n### Conclusion\r\n\r\n* Recap of the key concepts and takeaways from the talk\r\n* Q&A session to answer any remaining questions from the audience\r\n\r\nOverall, this talk aims to provide attendees with a beginner-friendly introduction to Integer Programming and its applications in conference scheduling. By the end of the talk, attendees will have a better understanding of how to use optimization algorithms to create an efficient and effective conference schedule that maximizes attendee satisfaction.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2194,"room":{"en":"North Hall"},"start":"2023-07-19T15:30:00+02:00","end":"2023-07-19T16:00:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/AG7JR9/resources/MIP_Introduction_fwilhelm_AnOFZ7w.pdf","description":"Slides"}]},{"code":"CHSAUC","speakers":[],"title":"Morning Announcement","submission_type":{"en":"Announcements"},"submission_type_id":3076,"track":null,"track_id":null,"state":"confirmed","abstract":"","description":"","duration":15,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-20T09:00:00+02:00","end":"2023-07-20T09:15:00+02:00"},"image":null,"resources":[]},{"code":"LJZBKW","speakers":[{"code":"FLAREA","name":"Ines Montani","biography":"","avatar":"https://pretalx.com/media/avatars/Ines-Montani_C2jlP5X.png"}],"title":"Large Language Models: From Prototype to Production","submission_type":{"en":"Keynote"},"submission_type_id":2752,"track":null,"track_id":null,"state":"confirmed","abstract":"Large Language Models (LLMs) have shown some impressive capabilities and their impact is the topic of the moment. What will the future look like? Are we going to only talk to bots? Will prompting replace programming? Or are we just hyping up unreliable parrots and burning money? In this talk, I'll present visions for NLP in the age of LLMs and a pragmatic, practical approach for how to use Large Language Models to ship more successful NLP projects from prototype to production today.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2189,"room":{"en":"PyCharm (Forum Hall)"},"start":"2023-07-19T17:00:00+02:00","end":"2023-07-19T17:45:00+02:00"},"image":null,"resources":[]},{"code":"PMNVR3","speakers":[{"code":"7HPWPW","name":"Ivaylo Donchev","biography":"","avatar":"https://pretalx.com/media/avatars/personal_KPiB7nc.jpg"}],"title":"A quick guide to logging for Django developers","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"The python `logging` module is a really powerful tool for troubleshooting with a lot of potential to save us hours of debugging.\r\n\r\nThe aim for the talk is to provide an overview how the logging module in python works, how Django uses it and how to improve our logging to make it better for our web project.","description":"As Django developers, we implictly use the python `logging` module daily in our work - for HTTP requests, for SQL queries, for custom logs, etc.\r\n\r\nThe aim of this talk is to provide useful information for Django developers on:\r\n1. How does logging in python works?\r\n2. How to setup a logging configuration based on our needs?\r\n3. How to configure logging in our Django app?\r\n4. Tips and tricks for custom logging in Django app","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T11:35:00+02:00","end":"2023-07-19T12:05:00+02:00"},"image":null,"resources":[]},{"code":"DQ9RA9","speakers":[{"code":"ME3WGG","name":"Calvin Hendryx-Parker","biography":"","avatar":"https://pretalx.com/media/avatars/Calvin_Hendryx-Parker_104oRPw.jpg"}],"title":"Too Big for DAG Factories?","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Data Engineering"},"track_id":3561,"state":"confirmed","abstract":"Do you need to transform, optimize and scale your data workflow? In this talk, we’ll review use cases, and you’ll learn how to dynamically generate thousands of DAGs (Directed Acyclic Graphs) with Airflow.","description":"You’re working on a project that needs to aggregate petabytes of data, and it doesn’t make sense to manually hard-code thousands of tables, DAGs (Directed Acyclic Graphs) and pipelines. How can you transform, optimize and scale your data workflow? Developers around the world (especially those who love Python) are using Apache Airflow — a platform created by the community to programmatically author, schedule and monitor workflows without limiting the scope of your pipelines. \r\n\r\nIn this talk, we’ll review use cases, and you’ll learn best practices for how to:\r\n\r\n- use Airflow to transfer data, manage your infrastructure and more;\r\n- implement Airflow in practical use cases, including as a:\r\n - workflow controller for ETL pipelines loading big data;\r\n - scheduler for a manufacturing process; and/or\r\n - batch process coordinator for any type of enterprise;\r\n- scale and dynamically generate thousands of DAGs that come from JSON configuration files;\r\n- automate the release of both the DAGs and infrastructure updates via a CI/CD pipeline;\r\n- run all tasks simultaneously using Airflow.\r\n\r\nBoth beginner and intermediate developers will benefit from this talk, and it is ideal for developers wanting to learn how to use Airflow for managing big data. Beginners will learn about dynamic DAG factories, and intermediate developers will learn how to scale DAG factories to thousands of DAGS — which is something Airflow can’t do out of the box.\r\n\r\nAfter this talk and live demo, people will learn best practices (including access to a code repo) that will allow them to scale to thousands of DAGs and spend more time having fun with big data.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"HMJU9J","speakers":[{"code":"9CX9CB","name":"Anna-Lena Popkes","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_2806_ILNuZhJ.jpg"}],"title":"An unbiased evaluation of environment management and packaging tools","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"Python packaging is quickly evolving and new tools pop up on a regular basis. Lots of talks and posts on packaging exist but none of them give a structured, unbiased overview of the available tools.\r\n\r\nThis talk will shed light on the jungle of packaging and environment management tools, comparing them on a basis of predefined features.","description":"Python packaging has come a long way in the last years. The landscape is evolving quickly and new tools pop up on a regular basis. Lots of talks and posts on packaging exist but none of them give a structured, unbiased overview of the available tools.\r\n\r\nThis talk will shed light on the jungle of packaging and environment management tools, comparing them on a basis of predefined features.\r\n\r\nWe will categorize tools using the following categories:\r\n- Python version management\r\n- Environment management\r\n- Package management\r\n- Package building\r\n- Package publishing\r\n\r\nA lot of tools exist, including: pyenv, pip, poetry, hatch, flit, and many more. We will categorize all of them and discuss some in more detail.\r\n\r\nMost importantly, we will evaluate the tools on the basis of features that are important for developers like:\r\n- Does the tool manage dependencies?\r\n- Can it manage Python installations?\r\n- Does it have a clean build/publish flow?\r\n- Does it allow for plugins?\r\n- Does it support important PEPs, e.g. PEP 660, PEP 621, PEP 582?\r\n\r\nThis talk is intended for developers who\r\n- Have used packaging and want to get to know new tools\r\n- Want to have an overview of existing tools and their capabilities","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:30:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/HMJU9J/resources/slides_euro_python_2023_aeLoKB9.pdf","description":"PDF of slides"}]},{"code":"BHWTKF","speakers":[{"code":"JWBPS9","name":"Judite Cypreste","biography":"","avatar":"https://pretalx.com/media/avatars/WhatsApp_Image_2023-03-17_at_17.22.35_ZrfVVpz.jpeg"},{"code":"MWVY3Y","name":"Patricia Bongiovanni Catandi","biography":"","avatar":"https://pretalx.com/media/avatars/foto_nova_FuZqehL.jpg"}],"title":"How Python can help monitor governments","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Ethics, Philosophy & Politics"},"track_id":3569,"state":"confirmed","abstract":"With the risk of losing access to information, Python has been used to create means for society to continue having the right to know what government officials are doing in Brazil.\r\n\r\nThis lecture aims to show how the difficulty of accessing Brazilian government information has been combated by creating tools that use Python and how the language has been a useful tool for those who seek to leave society in the light of information.","description":"With the imminent risk of the collapse of democracies and the constant attacks on journalism, access to information becomes increasingly difficult. As a result, civil society and journalists have been looking for ways to ensure that society is not left in the dark and that government monitoring continues.\r\n\r\nWith the popularization of Python in several professional areas, the language has become increasingly present in the fight for a more open government in Brazil, whether in the construction of monitoring tools or in the analysis of data from a government agency. Initiatives by government entities are also helping to enable transparency. \r\n\r\nIn this talk we will see examples of the use of Python to monitor the Brazilian government and how the language was fundamental for Brazilian society not to be left in the dark by misinformation. The idea is to show examples of civic uses that the programming language is gaining in the fight for transparency in Brazil.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T14:35:00+02:00","end":"2023-07-21T15:05:00+02:00"},"image":null,"resources":[]},{"code":"BEVEFH","speakers":[{"code":"BXSEVX","name":"Junya Fukuda","biography":"","avatar":"https://pretalx.com/media/avatars/junyafukuda1000x1000circle_TFJ2gYf.png"}],"title":"Asyncio Evolved: Enhanced Exception Handling with TaskGroup in Python 3.11","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"With the release of Python 3.11 in October 2022, PEP 654 \"Exception Groups and except\" was accepted, and asyncio.TaskGroup() was added. This enhancement of exception and cancellation handling has allowed asyncio to evolve more flexibly, addressing the existing issues with asyncio APIs, such as insufficient cancellation and exception handling in asyncio.gather.\r\n\r\nIn this talk, I would like to discuss the problems of existing asyncio APIs and how the newly introduced asyncio.TaskGroup() solves these issues. Attendees will learn about the improved way of handling exceptions and cancellations using asyncio.TaskGroup(), enabling them to write more efficient and robust asynchronous code with Python 3.11.","description":"### Description\r\nIn Python 3.11, asyncio.TaskGroup() and asyncio timeout context managers were added. Additionally, get_event_loop() was deprecated in 3.10, and loop objects were further obscured, making the already less intimidating asyncio even less scary. \r\n\r\nI will discuss the basic usage of asyncio in Python 3.11, which has become simpler and more flexible, focusing on exception and cancellation handling. \r\n\r\nI hope that this will be helpful for those who choose asyncio when writing web applications using ASGI frameworks or Python scripts where asynchronous I/O is useful.\r\n\r\n### By the end of this talk, attendees will be able to:\r\n\r\n* Understand the limitations of the existing asyncio APIs, specifically regarding cancellation and exception handling in asyncio.gather.\r\n* Learn how Python 3.11's asyncio.TaskGroup() overcomes these limitations and improves exception and cancellation handling.\r\n* Apply the new asyncio.TaskGroup() features in their asynchronous programming to build more resilient and efficient applications.\r\n\r\n### Planned Outline\r\n* Overview of asyncio.taskgroup (5 min)\r\n * New \"except*\" syntax\r\n * PEP 654 Exception Groups and except\r\n* Capturing concurrent exceptions(10 min)\r\n * Using asyncio.gather() / asyncio.TaskGroup()\r\n* Cancelling tasks on exception(10 min)\r\n * Using asyncio.gather() / asyncio.TaskGroup()\r\n* Writing \"predictable\" and \"safe\" asyncio code(5 min)\r\n * Introducing the new standard \"Hello-ish world\" example","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T11:20:00+02:00","end":"2023-07-21T11:50:00+02:00"},"image":null,"resources":[]},{"code":"UVUXFQ","speakers":[{"code":"UELBSG","name":"Iga Karbowiak","biography":"","avatar":"https://pretalx.com/media/avatars/S-11_2_Vy8Ad8I.jpg"}],"title":"Adding zero-downtime migrations strategy in a SaaS project","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Web"},"track_id":3573,"state":"confirmed","abstract":"Zero-downtime migration is a technique for running database migrations without stopping the web app. As clients' databases grow larger, applying necessary updates to the database can become time-consuming or potentially break the database schema. This talk will describe problematic operation types and provide a strategy for writing and running migrations to release new software versions without downtime.","description":"When running a web-based SaaS application, it is important to provide software updates without causing downtime for users. However, these updates often require changing the database schema with migrations. In this talk, we will discuss a solution that allows the software to remain life and able to handle incoming traffic while performing migrations.\r\nTo ensure zero downtime during this process, the old code must be compatible with the new database schema. Although this may seem easy, it often isn't. In this talk, we will cover problematic operations such as:\r\n- renaming tables or columns,\r\n- deleting tables or columns,\r\n- adding new columns,\r\n- updating all records in a table with a large amount of data.\r\n\r\nWe will discuss potential problems that may arise due to certain changes and provide corresponding solutions. Additionally, I will describe the challenges we encountered when introducing this approach to Saleor, an open-source e-commerce platform powered by Django.\r\n\r\nWhile the topic and examples are from the Django project, the issue is general and can be faced by any database-related project.\r\n\r\nThe structure of the talk:\r\n1. Background of the problem\r\n2. Examples of operations causing the downtime\r\n3. Introducing the zero-downtime strategy\r\n a) Writing migrations that follow a zero downtime approach\r\n b) Proceeding the software update without any downtime","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T10:45:00+02:00","end":"2023-07-19T11:15:00+02:00"},"image":null,"resources":[]},{"code":"BGEYP7","speakers":[{"code":"9KSJ3K","name":"Mike Müller","biography":"","avatar":"https://pretalx.com/media/avatars/arrow.png"}],"title":"Decorators - A Deep Dive","submission_type":{"en":"Tutorial"},"submission_type_id":2750,"track":{"en":"Python Internals & Ecosystem"},"track_id":3568,"state":"confirmed","abstract":"Python offers decorator to implement re-usable code for cross-cutting task.\r\nThe support the separation of cross-cutting concerns such as logging, caching,\r\nor checking of permissions.\r\nThis can improve code modularity and maintainability.\r\n\r\nThis tutorial is an in-depth introduction to decorators.\r\nIt covers the usage of decorators and how to implement simple and more advanced\r\ndecorators.\r\nUse cases demonstrate how to work with decorators.\r\nIn addition to showing how functions can use closures to create decorators,\r\nthe tutorial introduces callable class instance as alternative.\r\nClass decorators can solve problems that use be to be tasks for metaclasses.\r\nThe tutorial provides uses cases for class decorators.\r\n\r\nWhile the focus is on best practices and practical applications, the tutorial\r\nalso provides deeper insight into how Python works behind the scene.\r\nAfter the tutorial participants will feel comfortable with functions that take\r\nfunctions and return new functions.","description":"## Audience\r\n\r\nThis tutorial is for intermediate Python programmers who want to dive deeper.\r\nSolid working knowledge of functions and classes basics is required.\r\n\r\n## Format\r\n\r\nThe tutorial will be hands on.\r\nI will start with a blank Notebook for each topic and develop the content\r\nstep-by-step.\r\nThe participants are encouraged to type along.\r\nMy typing speed is usually appropriate and allows participants to follow.\r\nThe students will receive a comprehensive PDF with all course content as well\r\nPython source code files for all use cases and large code blocks I use.\r\nI will load these files in my Notebook.\r\nThe students can do the same or open the files in their preferred editor or IDE.\r\n\r\nI also explicitly ask for feedback if I am too fast or things are unclear.\r\nI encourage questions at any time.\r\nIn fact, questions and my answers are often an important part of my teaching,\r\nmaking the learning experience much more lively and typically more useful.\r\n\r\nSo the participants will be active throughout the whole tutorial.\r\nThere will be two exercises that each participant has to do on its own\r\n(or in breakout rooms if the tutorials should be remote) during the tutorial.\r\nWe will look at the solutions during the tutorial.\r\nI also supply a solutions PDF after the tutorial.\r\n\r\n\r\n## Outline\r\n\r\n* Examples of using decorators\r\n * from the standard library\r\n * from third-party packages\r\n* Closures for decorators\r\n* Write a simple decorator\r\n* Best Practice\r\n* Use case: Caching\r\n* Use case: Logging\r\n* Parameterizing decorators\r\n* Chaining decorators\r\n* Callable instances instead of functions\r\n* Use case: Argument Checking\r\n* Use case: Registration\r\n* Class decorators\r\n* Wrap-up and questions","duration":90,"slot_count":2,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2188,"room":{"en":"Club H"},"start":"2023-07-17T09:30:00+02:00","end":"2023-07-17T11:00:00+02:00"},"image":null,"resources":[]},{"code":"DE3XED","speakers":[{"code":"QYTJB9","name":"Marc-André Lemburg","biography":"","avatar":"https://pretalx.com/media/avatars/mal-business-2-170x170_VPXpWrX.jpg"}],"title":"Diving into Event-Driven Architectures with Python","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"Software Engineering & Architecture"},"track_id":3570,"state":"confirmed","abstract":"Event-Driven Architectures (EDAs) target a real need in today's application landscape, as systems grow more complex or need to scale organically.\r\n\r\nThe talk will introduce the architecture and provide insights into different components which can be managed, connected and implemented with Python.","description":"Event-driven architectures (EDAs) and AsyncAPI are being pushed at the moment as the new big thing after REST/OpenAPI and GraphQL. Indeed, EDAs target a real need in today's application landscape, as systems grow more complex or need to scale both vertically and horizontally.\r\n\r\nPython can help build such architectures by leveraging existing event bus/queue systems or by providing the needed async interfaces directly.\r\n\r\nThe talk will introduce the architecture and terminology around it, such as AsyncAPI, as well as provide insights into different components which can be managed, connected and implemented with Python.\r\n\r\nIt is also meant to spark some more interest in getting Python into a more prominent position within the AsyncAPI community, where Node and Java still dominate.\r\n\r\nResources:\r\n- https://en.wikipedia.org/wiki/Event-driven_architecture\r\n- https://www.asyncapi.com/","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2192,"room":{"en":"Terrace 2A"},"start":"2023-07-21T11:55:00+02:00","end":"2023-07-21T12:25:00+02:00"},"image":null,"resources":[]},{"code":"EATNFR","speakers":[{"code":"EQMGKH","name":"Alejandro Saucedo","biography":"","avatar":"https://pretalx.com/media/avatars/aletechuk-high-res_m9IQ6Nl.png"}],"title":"The State of Production Machine Learning in 2023","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Machine Learning, Stats"},"track_id":3564,"state":"confirmed","abstract":"As the number of production machine learning use-cases increase, we find ourselves facing new and bigger challenges where more is at stake. Because of this, it's critical to identify the key areas to focus our efforts, so we can ensure our machine learning pipelines are reliable and scalable. In this talk we dive into the state of production machine learning, and we will cover the concepts that make production machine learning so challenging, as well as some of the recommended tools available to tackle these challenges.","description":"As the number of production machine learning use-cases increase, we find ourselves facing new and bigger challenges where more is at stake. Because of this, it's critical to identify the key areas to focus our efforts, so we can ensure our machine learning pipelines are reliable and scalable. In this talk we dive into the state of production machine learning, and we will cover the concepts that make production machine learning so challenging, as well as some of the recommended tools available to tackle these challenges.\r\n\r\nThis talk will cover key principles, patterns and frameworks around the open source frameworks powering single or multiple phases of the end-to-end MLOps lifecycle, incluing model training, deploying, monitoring, etc. We will be covering a high level overview of the production ML ecosystem and dive into best practices that have been abstracted from production use-cases of machine learning operations at scale, as well as how to leverage tools to that will allow us to deploy, explain, secure, monitor and scale production machine learning systems.","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-19T16:05:00+02:00","end":"2023-07-19T16:50:00+02:00"},"image":null,"resources":[]},{"code":"SDEUCB","speakers":[{"code":"XEYXAF","name":"Adrian Gonzalez-Martin","biography":"","avatar":"https://pretalx.com/media/avatars/IMG_4164_2mZ1eOl.JPG"}],"title":"Poisoned pickles make you ill","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Machine Learning, Stats"},"track_id":3564,"state":"confirmed","abstract":"Don’t you love pickles? In the data science space, the pickle module has become one of the most popular ways to serialise and distribute machine learning models - yet, pickles introduce a wide range of problems. For starters, it is incredibly easy to poison a pickle. Once this happens, a poisoned pickle can be used by an attacker to inject any arbitrary code into your ML pipelines. And what’s even worse: it’s incredibly hard to detect if a pickle has been poisoned!\r\n\r\nGood news? Help is on the way! You now have access to an increasing number of tools to help you generate higher-quality pickles. And when those are not enough, you can always draw inspiration from the DevOps movement and their trust-or-discard processes.\r\n\r\nThis talk will show you how widespread pickles are and how easy it is to poison models serialised with pickle, but also how easy it is to start protecting them from attacks.","description":"","duration":45,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2190,"room":{"en":"South Hall 2A"},"start":"2023-07-20T10:30:00+02:00","end":"2023-07-20T11:00:00+02:00"},"image":null,"resources":[]},{"code":"KFMCSK","speakers":[{"code":"WAV8NL","name":"Neil Vaytet","biography":"","avatar":"https://pretalx.com/media/avatars/39047984_JrOUNhR.jpeg"}],"title":"Scipp: multi-dimensional arrays with labeled dimensions and physical units","submission_type":{"en":"Talk"},"submission_type_id":2749,"track":{"en":"PyData: Software Packages & Jupyter"},"track_id":3565,"state":"confirmed","abstract":"Inspired by Xarray, Scipp ([scipp.github.io](https://scipp.github.io)) enriches raw NumPy-like multi-dimensional data arrays by adding named dimensions and associated coordinates.\r\nFor an even more intuitive and less error-prone user experience, Scipp adds physical units to arrays and their coordinates.\r\nScipp data arrays additionally support a dictionary of masks, as well as histogram bin-edge coordinates.\r\n\r\nOne of Scipp's key features is the possibility of using multi-dimensional non-destructive binning to sort record-based \"tabular\"/\"event\" data into arrays of bins.\r\nThis provides fast and flexible binning, rebinning, and filtering operations, all while preserving the original individual records.\r\n\r\nScipp ships with data display and visualization features for Jupyter notebooks, including a powerful plotting interface.\r\nNamed Plopp, this tool uses a graph of connected nodes to provide interactivity between multiple plots and widgets, requiring only a few lines of code from the user.","description":"This presentation will be in the form of a live demo of the Scipp package in Jupyter.\r\nScipp is an open-source project developed by the [European Spallation Source](https://europeanspallationsource.se/) under the BSD-3 licence.\r\nIt is a Python library built around a C++ core, which uses TBB for multi-threading, providing good out-of-the-box performance.\r\nIt is installable on Linux, Mac and Windows via `pip` and `conda`, and the documentation is hosted at https://scipp.github.io .\r\nThe source code can be found at https://github.com/scipp .\r\nCo-authors (but not co-speakers): Simon Heybrock, Jan-Lukas Wynen, Sunyoung Yoo.","duration":30,"slot_count":1,"do_not_record":false,"is_featured":false,"content_locale":"en","slot":{"room_id":2191,"room":{"en":"South Hall 2B"},"start":"2023-07-21T12:30:00+02:00","end":"2023-07-21T13:00:00+02:00"},"image":null,"resources":[{"resource":"https://program.europython.eu/media/europython-2023/submissions/KFMCSK/resources/scipp-europython2023_CjFEojX.ipynb","description":"Jupyter notebook used for the presentation"}]}],"version":"0.23","breaks":[{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-17T11:00:00+02:00","end":"2023-07-17T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-17T12:45:00+02:00","end":"2023-07-17T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-17T15:15:00+02:00","end":"2023-07-17T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-18T11:00:00+02:00","end":"2023-07-18T11:15:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-18T12:45:00+02:00","end":"2023-07-18T13:45:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Club B"},"room_id":2184,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club C"},"room_id":2185,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club A"},"room_id":2183,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club D"},"room_id":2186,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club E"},"room_id":2187,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Club H"},"room_id":2188,"start":"2023-07-18T15:15:00+02:00","end":"2023-07-18T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-19T10:15:00+02:00","end":"2023-07-19T10:45:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-19T13:00:00+02:00","end":"2023-07-19T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-19T15:05:00+02:00","end":"2023-07-19T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-20T10:00:00+02:00","end":"2023-07-20T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00","description":{"en":"Lunch "}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-20T13:00:00+02:00","end":"2023-07-20T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-20T15:05:00+02:00","end":"2023-07-20T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-21T10:00:00+02:00","end":"2023-07-21T10:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-21T13:00:00+02:00","end":"2023-07-21T14:00:00+02:00","description":{"en":"Lunch"}},{"room":{"en":"Terrace 2B"},"room_id":2193,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"PyCharm (Forum Hall)"},"room_id":2189,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2B"},"room_id":2191,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"North Hall"},"room_id":2194,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"Terrace 2A"},"room_id":2192,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}},{"room":{"en":"South Hall 2A"},"room_id":2190,"start":"2023-07-21T15:05:00+02:00","end":"2023-07-21T15:30:00+02:00","description":{"en":"Coffee Break"}}]} \ No newline at end of file diff --git a/EuroPythonBot/extensions/programme_notifications/services/session_information.py b/EuroPythonBot/extensions/programme_notifications/services/session_information.py deleted file mode 100644 index ac40369e..00000000 --- a/EuroPythonBot/extensions/programme_notifications/services/session_information.py +++ /dev/null @@ -1,89 +0,0 @@ -import logging - -import attrs -import yarl - -from .. import configuration, exceptions -from ..domain import europython, repositories -from . import api - -_logger = logging.getLogger(f"bot.{__name__}") - - -@attrs.define -class SessionInformation: - """A service to fetch session information.""" - - _session_repository: repositories.ISessionRepository - _api_client: api.IApiClient - _config: configuration.NotifierConfiguration - - async def fetch_session(self, code: str) -> europython.Session: - """Fetch the session. - - Not all session information is available in the original Pretalx - API response. If additional session information is unavailable - in the session instance retrieved from the repository, the - additional information is fetched from the EuroPython API. - - :param code: The identifier code of the session - :return: A session instance - """ - session = self._session_repository.get(code) - if session.url is None or session.experience is None: - try: - session.url, session.experience = await self._api_client.fetch_session_details(code) - except Exception: - _logger.exception("Fetching addition session details failed!") - - session.livestream_url = self._get_livestream_url(session) - session.discord_channel_id = self._get_discord_channel_id(session) - return session - - async def _fetch_session_details(self, code: str) -> tuple[yarl.URL | None, str | None]: - """Fetch session details using the API client. - - :param code: The identifier code - :return: The session URL and the audience experience level - """ - try: - url, experience = await self._api_client.fetch_session_details(session_id=code) - except exceptions.ApiClientError: - _logger.exception("Failed to retrieve session detail information for session %r", code) - return None, None - - return url, experience - - def _get_livestream_url(self, session: europython.Session) -> yarl.URL | None: - """Get the livestream URL for this session from the config. - - :param session: The session - :return: The livestream URL or None - """ - date = session.slot.start.strftime("%Y-%m-%d") - try: - return self._config.rooms[str(session.slot.room_id)].livestreams[date] - except (KeyError, AttributeError): - return - - def _get_discord_channel_id(self, session: europython.Session) -> str | None: - """Get the discord channel id for this session - - :param session: The session - :return: The discord channel id for the room or None - """ - try: - return self._config.rooms[str(session.slot.room_id)].discord_channel_id - except (KeyError, AttributeError): - return - - def refresh_from_sessions(self, sessions: list[europython.Session]) -> None: - """Refresh from a list of sessions - - :param sessions: The schedule to use - """ - session_repository = self._session_repository.__class__() - for session in sessions: - session_repository.add(session) - self._session_repository = session_repository - _logger.info("Sessions refreshed. Added %r sessions to the repository.", len(sessions)) diff --git a/EuroPythonBot/helpers/eventbrite_connector.py b/EuroPythonBot/helpers/eventbrite_connector.py new file mode 100644 index 00000000..fc328d21 --- /dev/null +++ b/EuroPythonBot/helpers/eventbrite_connector.py @@ -0,0 +1,83 @@ +import logging +import os +import pandas as pd +import aiofiles + +from datetime import datetime +from http import HTTPStatus +from pathlib import Path +from time import time +from typing import Dict, List +from unidecode import unidecode + +from configuration import Config, Singleton +from error import AlreadyRegisteredError, NotFoundError + +_logger = logging.getLogger(f"bot.{__name__}") + + +def sanitize_string(input_string: str) -> str: + """Process the name to make it more uniform.""" + return unidecode(input_string.replace(" ", "").lower()) + + +class EventbriteOrder(metaclass=Singleton): + def __init__(self): + self.config = Config() + + self.id_to_name = None + self.orders = {} + self.last_fetch = None + + self.registered_file = getattr(self.config, "REGISTERED_LOG_FILE", "./registered_log.txt") + self.REGISTERED_SET = set() + + def load_registered(self): + try: + f = open(self.registered_file, "r") + registered = [reg.strip() for reg in f.readlines()] + self.REGISTERED_SET = set(registered) + f.close() + except Exception: + _logger.exception("Cannot load registered data, starting from scratch. Error:") + + async def fetch_data(self) -> None: + """Fetch data from Pretix, store id_to_name mapping and formated orders internally""" + + _logger.info("Fetching IDs names from pretix") + + raw_orders = pd.read_csv("report.csv", encoding="utf-8")[["Order #", "First Name", "Last Name", "Ticket Type"]] + print(raw_orders) + + orders = {} + for idx, row in raw_orders.iterrows(): + order_number = row["Order #"] + name = f'{row["First Name"]} {row["Last Name"]}' + ticket_type = row["Ticket Type"] + + orders[f"{order_number}-{sanitize_string(name)}"] = ticket_type + + self.orders = orders + self.last_fetch = datetime.now() + + async def get_ticket_type(self, order: str, full_name: str) -> str: + """With user input `order` and `full_name`, check for their ticket type""" + + key = f"{order}-{sanitize_string(input_string=full_name)}" + if self.validate_key(key): + if key in self.orders: + async with aiofiles.open(self.registered_file, mode="a") as f: + await f.write(f"{key}\n") + return self.orders[key] + else: + raise NotFoundError(f"No ticket found - inputs: {order=}, {full_name=}") + + + async def get_roles(self, name: str, order: str) -> List[int]: + ticket_type = await self.get_ticket_type(full_name=name, order=order) + return self.config.TICKET_TO_ROLE.get(ticket_type) + + def validate_key(self, key: str) -> bool: + if key in self.REGISTERED_SET: + raise AlreadyRegisteredError(f"Ticket already registered - id: {key}") + return True