{"$schema": "https://c3voc.de/schedule/schema.json", "generator": {"name": "pretalx", "version": "2025.1.0"}, "schedule": {"url": "https://pretalx.evolutio.pt/pycon-portugal-2025/schedule/", "version": "0.17", "base_url": "https://pretalx.evolutio.pt/", "conference": {"acronym": "pycon-portugal-2025", "title": "PyCon Portugal 2025", "start": "2025-07-24", "end": "2025-07-26", "daysCount": 3, "timeslot_duration": "00:05", "time_zone_name": "Europe/Lisbon", "colors": {"primary": "#1f2b37"}, "rooms": [{"name": "Auditorium", "slug": "24-auditorium", "guid": "bf34b7c1-3d44-5f9b-8827-55d43acb3e6e", "description": null, "capacity": 200}, {"name": "Sala Madeira", "slug": "26-sala-madeira", "guid": "e82e8fd6-e53f-59d6-9889-f21771470540", "description": null, "capacity": 100}, {"name": "Sala A\u00e7ores", "slug": "25-sala-acores", "guid": "677c8b53-df75-5a5c-a8ee-698effa21457", "description": null, "capacity": 100}, {"name": "D -112, Floor -1 (Room Madeira)", "slug": "27-d-112-floor-1-room-madeira", "guid": "4759c744-02f6-5525-9ec5-29a67364b1dd", "description": null, "capacity": 100}, {"name": "D -114, Floor -1 (Room Azores)", "slug": "28-d-114-floor-1-room-azores", "guid": "42f02851-b138-5498-97c1-3a955b65f225", "description": null, "capacity": 100}], "tracks": [], "days": [{"index": 1, "date": "2025-07-24", "day_start": "2025-07-24T04:00:00+01:00", "day_end": "2025-07-25T03:59:00+01:00", "rooms": {"Auditorium": [{"guid": "b77a4dc2-5f75-5c77-986e-9caf1527d3c3", "code": "X7QJN9", "id": 1700, "logo": null, "date": "2025-07-24T09:00:00+01:00", "start": "09:00", "duration": "00:15", "room": "Auditorium", "slug": "pycon-portugal-2025-1700-welcome-session", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/X7QJN9/", "title": "Welcome Session", "subtitle": "", "track": null, "type": "Other", "language": "en", "abstract": "Welcome Session", "description": "Welcome Session", "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/X7QJN9/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/X7QJN9/", "attachments": []}, {"guid": "5e70a870-ff71-513d-a808-4deefd7ddebf", "code": "TQBNLH", "id": 1706, "logo": null, "date": "2025-07-24T09:15:00+01:00", "start": "09:15", "duration": "01:00", "room": "Auditorium", "slug": "pycon-portugal-2025-1706-from-lisbon-to-space-data-science-at-exoplanetary-scale-with-python", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TQBNLH/", "title": "From Lisbon to Space: Data Science at ExoPlanetary Scale with Python", "subtitle": "", "track": null, "type": "Keynote", "language": "en", "abstract": "What does it mean to lead a boutique data science company in Portugal working with clients across the globe, including the European Space Agency? In this talk, we\u2019ll share the journey of building a specialized team that operates in banking, telecom, pharma, and space, with a spotlight on one of our contributions to the European Space Agency\u2019s ARIEL mission.\r\n\r\nAs part of this collaboration, we\u2019ll showcase an interactive Streamlit app we developed as an educational tool to explore exoplanet data, from raw light curves to atmospheric spectra, and to experiment with machine learning models that estimate those spectra. This example illustrates how Python can power real-world scientific collaboration and make complex space science accessible, explainable, and interactive.", "description": "What does it mean to lead a boutique data science company in Portugal working with clients across the globe, including the European Space Agency? In this talk, we\u2019ll share the journey of building a specialized team that operates in banking, telecom, pharma, and space, with a spotlight on one of our contributions to the European Space Agency\u2019s ARIEL mission.\r\n\r\nAs part of this collaboration, we\u2019ll showcase an interactive Streamlit app we developed as an educational tool to explore exoplanet data, from raw light curves to atmospheric spectra, and to experiment with machine learning models that estimate those spectra. This example illustrates how Python can power real-world scientific collaboration and make complex space science accessible, explainable, and interactive.", "recording_license": "", "do_not_record": false, "persons": [{"code": "P9NN7T", "name": "Mar\u00edlia Felismino Sim\u00f5es", "avatar": "https://pretalx.evolutio.pt/media/avatars/P9NN7T_WnTcZZo.jpg", "biography": "With over 15 years of experience in Data Science, Mar\u00edlia Felismino Sim\u00f5es has held prominent roles in renowned companies such as TomTom and TNT/FedEx, where she led Data Science teams and oversaw TomTom's extensive worldwide e-commerce operations for map sales.\r\n\r\n Mar\u00edlia brings a wealth of expertise in International Digital Business Management and Customer Intelligence Management, boasting over a decade of experience in both domains. Her unique blend of business acumen and analytical skills enables her to approach strategy, design, and business solutions development with a practical, evidence-based, and hands-on mindset.\r\n\r\n Having spent a part of her life in global positions in Amsterdam, Mar\u00edlia has relocated to Lisbon, where she is passionately pursuing entrepreneurship. Alongside her husband, she co-founded ML Analytics, a boutique specialized in generating business value from company data using state-of-the-art Artificial Intelligence tools. The company operates multi-nationally with renowned clients such as ESA - European Space Agency.\r\n\r\nAs an independent consultant specializing in Data Science and Business Analytics, Mar\u00edlia and her team assist companies in leveraging their data to drive tangible business outcomes by applying state-of-the-art AI and Data science techniques, embodying her mantra of \"Turning DATA into BUSINESS\".", "public_name": "Mar\u00edlia Felismino Sim\u00f5es", "guid": "99a429bb-ac70-5a58-9356-3e4aeeb4fd1a", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/P9NN7T/"}, {"code": "HCPF8L", "name": "Nikki Grens", "avatar": "https://pretalx.evolutio.pt/media/avatars/HCPF8L_ailwdT9.jpg", "biography": "Nikki is a data scientist at ML Analytics, where she focuses on a space-related project. With a Master\u2019s in Econometrics and Data Science and a second in Space Flight Dynamics nearing completion, she applies machine learning to astrophysical problems.", "public_name": "Nikki Grens", "guid": "5f27b40f-fc97-59e9-8449-a9d7df2fe6c4", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/HCPF8L/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TQBNLH/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TQBNLH/", "attachments": []}, {"guid": "1344744a-67b9-5b44-bf3c-18cdf3000741", "code": "S7NMTF", "id": 1653, "logo": null, "date": "2025-07-24T10:40:00+01:00", "start": "10:40", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1653-an-a11y-for-better-seo", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/S7NMTF/", "title": "An A11y for better SEO", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "As applications grow increasingly complex and AI transforms development practices, accessibility has never been more critical. Making your digital products work for people with disabilities doesn't just promote inclusion\u2014it directly improves your SEO performance. This presentation explores the powerful correlation between accessibility and search rankings, providing practical strategies to leverage this relationship for enhanced user experiences and outcomes.", "description": "Web accessibility and search engine optimization (SEO) share a symbiotic relationship that increasingly defines digital success. When websites are designed to be accessible to people with disabilities, they inherently incorporate many elements that search engines value for ranking purposes. Proper semantic HTML structure, descriptive alt text for images, clear navigation hierarchies, and readable content benefit both users with disabilities and search engine crawlers. This overlap is not coincidental but reflects a fundamental truth: what makes content accessible to humans with diverse needs also makes it more comprehensible to algorithmic systems. As search engines evolve to prioritize user experience metrics, the connection between accessibility and SEO grows stronger, with improved page speed, reduced bounce rates, and enhanced engagement serving both purposes. \r\nDuring this presentation, we'll explore a small flask app, improve it's accessibility and document best practices, while discussing accessibility fundamentals.\r\nAccessibility is a key feature of your application and should always be viewed as an ally for your SEO.\r\n\r\nPresentation topics:\r\n- How do people with disabilities interact with our applications\r\n- Web accessibility and the WCAG\r\n- Proper content and structure of a good web app\r\n- Description and context are everything\r\n- HTML Semantics\r\n- Image alt text, video transcriptions and audio descriptions\r\n- Responsiveness and optimized navigation\r\n- Speed and optimization\r\n- Continuous testing and improvements", "recording_license": "", "do_not_record": false, "persons": [{"code": "SZMUEX", "name": "Sandro Costa", "avatar": "https://pretalx.evolutio.pt/media/avatars/SZMUEX_OzC4KdW.jpg", "biography": "Developer at a large learning platform at FCT|FCCN (https://www.fccn.pt/), with a special interest in web accessibility and search engine optimization. I have a Bachelors degree in  Multimedia Technologies and Communication and a Master degree in Computer Engineering. I do regular contributions to open source and am always looking for ways to help communities grow.", "public_name": "Sandro Costa", "guid": "33165f69-6b8a-58af-bc32-271f094da3c7", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/SZMUEX/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/S7NMTF/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/S7NMTF/", "attachments": []}, {"guid": "20c20f37-4328-5414-9d83-dc886aac6b98", "code": "J3JQBR", "id": 1659, "logo": null, "date": "2025-07-24T11:40:00+01:00", "start": "11:40", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1659-unifying-data-management-in-python-with-ibis", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/J3JQBR/", "title": "Unifying Data Management in Python with Ibis", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Discover how Ibis provides a single DataFrame API across pandas, DuckDB, and SQL databases, bridging the gap between data science prototypes and production code.", "description": "The data ecosystem in Python is fragmented: data scientists typically use pandas or polars, engineers favor SQL or PySpark, and web developers depend on ORMs. This fragmentation leads to silos where code cannot be shared, prototypes have to be rewritten for production, and knowledge transfer is hindered, even though everyone is working with the same underlying data.\r\nAs a contributor to Ibis for the past two years, I'll demonstrate how this portable DataFrame library provides a unified API across pandas, DuckDB, PostgreSQL, and more, enabling true collaboration between teams without sacrificing performance.\r\nThe presentation will begin with a practical demonstration of the same data query written three different ways - in pandas, SQL, and an ORM - highlighting the costs of this fragmentation. Attendees will then see an overview of the tools different roles typically use and their limitations through a simple demo task.\r\nNext, the talk will dive into Ibis core concepts, explaining its architecture that separates interface from execution engine, its deferred execution model, and support for 20+ backends. This section includes a short demo of building an analytics query step by step.\r\nThe heart of the presentation will be two real-world examples: first, taking a data exploration workflow to production using the same Ibis code across pandas, DuckDB, and PostgreSQL with performance comparisons; second, integrating analytics into web applications, showing how data science and web development teams can share code.\r\nThe talk will conclude with strategic considerations on when to leverage native SQL capabilities and performance optimization tips.\r\nAttendees will learn to write Pythonic data code that works across multiple engines, strategically use SQL while keeping most code in Python, share code between prototyping and production, and process data significantly faster than with pandas alone.\r\nThis talk is for data scientists, engineers, web developers, and anyone working with tabular data. No specific SQL knowledge is required, though familiarity with pandas or other DataFrame libraries will be helpful.", "recording_license": "", "do_not_record": false, "persons": [{"code": "NWKF3J", "name": "Daniel Mesejo", "avatar": "https://pretalx.evolutio.pt/media/avatars/NWKF3J_BNlCcMt.png", "biography": "Hi, I'm Daniel, a software engineer based in Barcelona with a knack for Data Science and Machine Learning.\r\n\r\nI've worked in startups and scale-ups in Brazil, Germany, and the US, mostly building software with Python and Java.\r\n\r\nI'm an open-source enthusiast and I've contributed to projects such as dask, xarray, geopandas, ibis, and datafusion-python bindings.", "public_name": "Daniel Mesejo", "guid": "32523891-9466-5ae1-a6e4-2dd488f20910", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/NWKF3J/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/J3JQBR/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/J3JQBR/", "attachments": []}, {"guid": "1400462a-d27c-5c3f-9e89-cc185a6c9658", "code": "KCQ3MA", "id": 1685, "logo": null, "date": "2025-07-24T12:10:00+01:00", "start": "12:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1685-property-based-testing-the-python-way", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KCQ3MA/", "title": "Property-based testing the Python way", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "What if I told you that you could write simpler tests but get better results?\r\n\r\nWhat if I told you can automatically generate your test data?\r\n\r\nThis may sound difficult to your traditional testing approach but can be easily done with Hypothesis, the Python library used for property-based testing.", "description": "This is an introductory talk about property-based testing. The talk requires some previous knowledge about testing to make the most out of it but if you are new and curious I think you would get something out of it.\r\nThe talk approaches a simple problem from two different testing perspectives. Giving you an idea about property-based testing and how it\u2019s different from the traditional approach with Python.\r\n\r\nThe main focus of the topic would be Hypothesis and how you can achieve your testing goals with it.\r\nBy the end of this talk you would have a solid understanding of property-based testing with Hypothesis, that would help you decide which testing approach fits your need.\r\n\r\nGiven below is a rough overview of the talk structure:\r\nThe testing problem. (10 mins)\r\nThe traditional approach. \r\nCons of traditional approach.\r\nWhat is property-based testing. \r\nIntro to Hypothesis. (20 mins)\r\nSame problem solution with Hypothesis. \r\nWhy choose Hypothesis as a go-to property-based testing tool. \r\nParameterized testing with Pytest vs Hypothesis approach. \r\nWhen or when not to use property based testing. \r\nHow you can adopt Hypothesis in your code base.", "recording_license": "", "do_not_record": false, "persons": [{"code": "WELESD", "name": "Emma Saroyan", "avatar": "https://pretalx.evolutio.pt/media/avatars/WELESD_ltNMfly.jpg", "biography": "Emma is actively involved in open source communities. She serves on the DISC Steering Committee of NumFOCUS. She's also a member of the PgUS Software Foundation, and the founder and organizer of the PG Armenia community group in Yerevan. She is a Developer Advocate, and she enjoys contributing to developer communities by mentoring, giving talks, and organizing meetups.", "public_name": "Emma Saroyan", "guid": "dc041af8-e7bd-55a7-9f52-1d2e0914a0fd", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/WELESD/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KCQ3MA/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KCQ3MA/", "attachments": []}, {"guid": "f84212df-b33e-5bd4-8f0b-43016dcd83bf", "code": "3KPGAT", "id": 1687, "logo": null, "date": "2025-07-24T12:40:00+01:00", "start": "12:40", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1687-python-driven-robotics-where-bytes-meet-biopsies", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KPGAT/", "title": "Python-Driven Robotics: Where Bytes Meet Biopsies", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Python's innovation in MedTech: Robotics for precise lung biopsies. See how Python advances healthcare's future.", "description": "Explore how Python's robust ecosystem is driving innovation in medical robotics. This talk will showcase Python's potential to enable minimally-invasive robot-assisted lung biopsies with unprecedented accuracy, including high sensitivity and specificity on hundreds of medical images.\r\n\r\n<b>Minimally-Invasive Robotic Systems:</b>\r\n<ul>\r\n<li>Understand the system for biopsy procedures, focusing on precision and minimally-invasive techniques.</li>\r\n<li>Examine Python libraries for imaging, highlighting algorithmic solutions for nodule targeting.</li>\r\n<li>Discuss challenges encountered when achieving high accuracy and sensitivity, and solutions developed to overcome them.</li></ul>\r\n<b>Algorithmic Diagnostics:</b>\r\n<ul>\r\n<li>Delve into the application of 3D Convolutional Neural Networks (TensorFlow, Keras) for enhanced lung nodule detection.</li>\r\n<li>Analyze the model's performance on large-scale medical image datasets, key metrics, and complexities of training such models.</li>\r\n</ul>\r\nWe'll explore how Python empowers advanced medical imaging, predictive maintenance, and real-time telemetry, shaping the future of AI-driven surgery. This presentation aims to inspire the PyCon Portugal community (and beyond!), highlighting Python's potential to advance MedTech and improve patient care through innovative robotic solutions.", "recording_license": "", "do_not_record": false, "persons": [{"code": "NAYZZY", "name": "Lilinoe Harbottle", "avatar": "https://pretalx.evolutio.pt/media/avatars/NAYZZY_T1P0je9.jpg", "biography": "Lilinoe Harbottle is an Indigenous Data Scientist who bridges data algorithms, robotics, and healthcare. She leads AI initiatives at a San Francisco startup, developing models for autonomous systems and natural language processing. At Auris Health (Johnson & Johnson), she enhanced medical robotic systems, improving bronchoscopy and urology procedures. A champion for open source and inclusive tech communities, she is a Sequoyah Fellow of the American Indian Science & Engineering Society (AISES).", "public_name": "Lilinoe Harbottle", "guid": "116575f5-7f08-57d0-941c-47aaf193440a", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/NAYZZY/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KPGAT/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KPGAT/", "attachments": []}, {"guid": "614469a1-0eeb-59f7-9a22-2504d513dbce", "code": "VJQRJZ", "id": 1430, "logo": null, "date": "2025-07-24T14:10:00+01:00", "start": "14:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1430-build-without-limits-lessons-learned-from-using-generative-ai-dev-tools", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/VJQRJZ/", "title": "Build without limits - lessons learned from using generative AI dev tools", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Next generation developer tools that incorporate generative AI are everywhere, but how good are they, and. more importantly, how useful. In this talk I am going to share what I have learned from using these tools over the last 12 months.", "description": "This talk is always evolving as the AI coding landscape changes.\r\n\r\nI will cover the kinds of day-to-day scenarios and use cases I am finding them useful for, how they are helping me address some of my developer problems, and tips I have learned to more effectively use these tools. This builds upon a series of blogs posts where I have been sharing my experiences (and code) in 2024.\r\n\r\nThis session contains live coding/demos that will help you see this in action.", "recording_license": "", "do_not_record": false, "persons": [{"code": "UZLEAZ", "name": "Ricardo Sueiras", "avatar": "https://pretalx.evolutio.pt/media/avatars/Amazon_DA_RicardoSueiras-43_1_aiqbvCV.jpg", "biography": "I have been working in tech for over 35 years, and now spend my time exploring emerging developer technologies to help developers understand how they work and how they can adopt them. I am passionate about open source, and how open source enables developers to innovate.", "public_name": "Ricardo Sueiras", "guid": "d0aaed90-8418-547d-a9c9-b82951e4caf7", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/UZLEAZ/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/VJQRJZ/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/VJQRJZ/", "attachments": []}, {"guid": "f56d44a7-d507-571e-9b25-4c26864f9d70", "code": "PFTBFK", "id": 1707, "logo": null, "date": "2025-07-24T14:50:00+01:00", "start": "14:50", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1707-what-s-new-in-python-3-14", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PFTBFK/", "title": "What's new in Python 3.14", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Python 3.14 is shaping up to be one of the biggest Python releases in recent years. Let's explore the exciting new features and see how they'll make you a more effective Python developer.", "description": "In this talk we'll explore the new features in Python 3.14 through live coding examples that show how they work in practice. This includes:\r\n\r\n* Free threaded Python\r\n* Multiple interpreters\r\n* Deferred evaluation of annotations\r\n* Template strings\r\n* Asyncio introspection\r\n* Remote attaching to a running Python process\r\n* Better error messages\r\n\r\nIf you prefer seeing new features in action over reading release notes this is the talk for you!", "recording_license": "", "do_not_record": false, "persons": [{"code": "DGGFQB", "name": "An\u017ee Pe\u010dar", "avatar": "https://pretalx.evolutio.pt/media/avatars/12b7e40ed1ebd4846746004c77020183_1Oby6lU.jpg", "biography": "I write code and surf waves!", "public_name": "An\u017ee Pe\u010dar", "guid": "9865c82b-8b21-5583-9172-a890e87572a4", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/DGGFQB/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PFTBFK/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PFTBFK/", "attachments": []}, {"guid": "f12892ea-63f0-55e1-b9d0-ba64a046dd85", "code": "GLYSA7", "id": 1713, "logo": null, "date": "2025-07-24T15:50:00+01:00", "start": "15:50", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1713-a-tour-of-the-module-itertools", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/GLYSA7/", "title": "A tour of the module `itertools`", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "This talk walks you through the 20 tools available in `itertools`, a module you should be proficient in if you aspire to write Python code that makes efficient use iterables.", "description": "The talk proposes splitting the module itertools in 5 categories of iterables: combinatorial, reshaping, infinite, filtering, and complementary.\r\n\r\nFor each category, we will explore the tools available, look at examples of usage, and understand when each iterable can be useful.\r\n\r\nOh, and there\u2019s also `tee`. Let us not forget `tee`!", "recording_license": "", "do_not_record": false, "persons": [{"code": "D33C79", "name": "Rodrigo Gir\u00e3o Serr\u00e3o", "avatar": "https://pretalx.evolutio.pt/media/avatars/D33C79_89XSd4r.png", "biography": "Rodrigo Gir\u00e3o Serr\u00e3o is the author of [multiple independently published books](https://mathspp.com/books) on Python, programming, and mathematics, and [frequently blogs about those same topics](https://mathspp.com/blog).\r\nRodrigo has also presented talks and tutorials at some of the largest Python conferences in the world, including PyCon US, EuroPython, and multiple European PyCons.\r\n\r\nBy creating technical content that is easily digestible by those looking to improve their Python knowledge, Rodrigo is working to help everyone appreciate the elegance of the Python language and to make an effective use of the tools it provides.\r\n\r\nWhen he is not working or writing, Rodrigo can be found playing board games, walking his dog, or exercising at the gym.", "public_name": "Rodrigo Gir\u00e3o Serr\u00e3o", "guid": "deadfed1-3cce-5c6f-b1cc-2dd63deac2a5", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/D33C79/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/GLYSA7/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/GLYSA7/", "attachments": []}, {"guid": "e2f81be2-ecfa-51fb-b537-6ad0c7c65ad5", "code": "UJJX3N", "id": 1615, "logo": null, "date": "2025-07-24T16:30:00+01:00", "start": "16:30", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1615-tools-to-setup-great-python-projects-2025-update", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/UJJX3N/", "title": "Tools to setup great Python projects: 2025 update", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "In 2023, I talked about my approach to setup reliable python projects, using tools to manage dependencies robustly and level up the team's code automatically. Since then, new tools have come out and my preferences have changed a bit:\r\n\r\n- Package manger: uv (previously: poetry)\r\n- Python manager: uv (previously: pyenv)\r\n- Python binaries manager: uv (previously: pipx)\r\n- Formatter: ruff + reorder-python-imports (previously: black + isort)\r\n- Linter: ruff\r\n- Tester: pytest\r\n\r\nI still find it important to centralize your configurations and assure consistent behavior across CLIs, IDEs, CI/CDs, etc. I keep storing all configurations in `pyproject.toml` and setup a script that calls these tools (usually `pre-commit`).\r\n\r\nResults: \r\n- configure once, get helpful checks forever\r\n- improve workflow for all team members, present and future\r\n- deploy projects deterministically with little surprises\r\n- consistent behavior across different environments", "description": "# Summary \r\n\r\nIn 2023, I presented \"How to setup great Python projects\" in PyCon Portugal. I talked about my setup that brought some goodies to me and my team with little effort: good package management, automatic formatting, lint with auto-fixing, and others.\r\n\r\n2 years later, I've changed my workflow to include recent tooling and I'm getting even better results, so I'd like to share my experience again.\r\n\r\nResults: \r\n- configure once, get helpful checks forever\r\n- improve workflow for all team members (present and future)\r\n- deploy projects deterministically with little surprises\r\n- consistent behavior across different environments\r\n\r\n# Tools\r\n\r\n## Package/python/binaries manager\r\n\r\n2025: `uv`\r\n2023: `poetry` / `pyenv` / `pipx`\r\n\r\nAfter creating the widely popular `ruff`, the code formatter and linter, astral created `uv`, a package manager with similar principles behind: speed and quality.\r\n\r\nI like how fast it is, and how you can also manage python versions and standalone binaries with it.\r\n\r\nMy favorite features:\r\n- good dependency solving and locking: makes deployments very deterministic\r\n- speed: it's fast and pleasing to use\r\n- batteries included:  does what previously required 3 different tools\r\n- backwards-compatibility with pip: I can immediately migrate projects that use `pip` and `requirements.txt` to `uv`\r\n\r\n## Formatters\r\n\r\n2025: `uv` + `reorder-python-imports`\r\n2023: `black` + `isort`\r\n\r\n`uv` has introduced the option to format code, which is very similar to `black` and `isort` but much quicker, and will also allow linting code. So I'm using it and I'm quite happy.\r\n\r\n`reorder-python-imports` first felt a bit strange, but has reduced the amount of git conflicts when different people change imports, so I'm fully onboard.\r\n\r\nMy favorite features of `ruff`:\r\n- it's fast\r\n- it also lints code\r\n\r\nMy favorite features of `reorder-python-imports`:\r\n- it reduces git conflicts\r\n\r\n## Linters\r\n\r\n2025: `ruff`\r\n2023: `ruff`\r\n\r\nI'm still using ruff: it was promising before, and it's the best nowadays.\r\n\r\nMy favorite features:\r\n- it's fast\r\n- it supports a lots of rules, and keeps growing\r\n- it also formats code\r\n\r\n## Tester\r\n\r\n2025: pytest\r\n2023: pytest\r\n\r\nI still find pytest a nice solution for tests, and more pythonic than the native `unittest` module.\r\n\r\nMy favorite features:\r\n\r\n- it's more pythonic than `unittest`\r\n- it allows re-usable fixtures and parametrization out of the box\r\n\r\n# Centralizing the configurations\r\n\r\n1. I store all configs in `pyproject.toml`, which is the default place for configuration nowadays. \r\n2.  I write some script (Makefile, or pre-commit, or shell) to invoke the formatters, linters, etc WITHOUT any flag - (they will check `pyproject.toml` automatically)\r\n\r\nThe result:\r\n- it's easy to apply the checks in the CLI (run the script)\r\n- it's easy for IDEs to emit warnings and format on save (check pyproject.toml)\r\n- it's easy for CI/CD processes to check PRs (run the script)\r\n\r\nAnd all this happens consistently without drift across different processes!\r\n\r\n# Results\r\n\r\nI find these to be the most important results:\r\n\r\n- configure once, get helpful checks forever\r\n- improve workflow for all team members (present and future)\r\n- deploy projects deterministically with little surprises\r\n- achieve consistent behavior across different environments", "recording_license": "", "do_not_record": false, "persons": [{"code": "NMESZQ", "name": "Duarte Pompeu", "avatar": "https://pretalx.evolutio.pt/media/avatars/foto_passe_uCkN5lo.jpg", "biography": null, "public_name": "Duarte Pompeu", "guid": "f5005c5c-5ca6-58c6-b025-bce7e8b36ded", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/NMESZQ/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/UJJX3N/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/UJJX3N/", "attachments": []}, {"guid": "d94afecd-4ada-56c1-8e68-1ff017d0051f", "code": "YNU98X", "id": 1703, "logo": null, "date": "2025-07-24T17:10:00+01:00", "start": "17:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1703-lightning-talks", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/YNU98X/", "title": "Lightning Talks", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Lightning Talks", "description": "Lightning Talks", "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/YNU98X/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/YNU98X/", "attachments": []}]}}, {"index": 2, "date": "2025-07-25", "day_start": "2025-07-25T04:00:00+01:00", "day_end": "2025-07-26T03:59:00+01:00", "rooms": {"Auditorium": [{"guid": "75e38d53-ba75-5a8e-bdc2-2e9dfa7e3cb5", "code": "7QLPMN", "id": 1705, "logo": null, "date": "2025-07-25T09:00:00+01:00", "start": "09:00", "duration": "01:00", "room": "Auditorium", "slug": "pycon-portugal-2025-1705-um-siri-fazendo-barra", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7QLPMN/", "title": "Um Siri fazendo barra", "subtitle": "", "track": null, "type": "Keynote", "language": "en", "abstract": "What have in common crabs doing pull-ups, Python and infinitely backtracking parsers?", "description": "Sometimes the best way forward is to parse through unexpected choices, backtrack when needed, and commit to what works. This keynote is about a  journey exploring how we navigate through ordered attempts, pattern matching, and discovering that successful parsing often depends on the right lookahead. Stories of memoizing the lessons that matter and learning when to fail fast versus when to keep trying alternative paths.", "recording_license": "", "do_not_record": false, "persons": [{"code": "SF9ATW", "name": "Pablo Galindo Salgado", "avatar": null, "biography": "Pablo Galindo Salgado works in the Python Infrastructure team at the Software Infrastructure department at Bloomberg L.P. He is a CPython core developer and a Theoretical Physicist specializing in general relativity and black hole physics. He is currently serving on the Python Steering Council and he is the release manager for Python 3.10 and 3.11. He has also a cat but he does not code.", "public_name": "Pablo Galindo Salgado", "guid": "86324274-444b-5af9-b4cc-eea823ce4091", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/SF9ATW/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7QLPMN/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7QLPMN/", "attachments": []}, {"guid": "677005c0-795f-5b55-b106-447111d80231", "code": "ZQUSTH", "id": 1617, "logo": null, "date": "2025-07-25T10:10:00+01:00", "start": "10:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1617-django-htmx-patterns-for-success", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/ZQUSTH/", "title": "Django & HTMX: Patterns for Success", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "This talk explores effective patterns for combining Django and HTMX, addressing common challenges and gaps in standards. \r\nDrawing from real-world experience, it provides practical insights into hypermedia-focused development, covering topics like server-side state management, on-demand resource handling, and component-based templating to enhance your Django projects.", "description": "This talk is designed for Python developers who are either interested in HTMX development or have some experience working with it. \r\nThe Python and Django communities have been at the forefront of the \u201chypermedia revolution,\u201d serving as one of the early adopters of HTMX.\r\n\r\nWhile there are numerous introductory tutorials and presentations detailing the shift from SPAs to HTMX with great success, there's a noticeable gap when it comes to established patterns and practical, technical examples drawn from real, in-production applications.\r\n\r\nIn this talk, I'll start by explaining why Django and HTMX make such a powerful combination and offer solutions to common challenges and gaps in standards that arise during HTMX-driven application development.\r\n\r\nDrawing from my experience working on various projects with this tech stack, I\u2019ll share practical insights on how to structure Django projects with a stronger focus on the hypermedia approach.\r\n\r\nTopics such as server-side state management, on-demand resource handling and component-based templating are just some of the topics that will be delved into in order to show the strengths of the hypermedia approach.", "recording_license": "", "do_not_record": false, "persons": [{"code": "JPZMG7", "name": "Lucas Pires", "avatar": "https://pretalx.evolutio.pt/media/avatars/JPZMG7_co6AnXJ.JPEG", "biography": "Back-End Software Engineer at CheckSec.\r\nFrom Porto, Portugal.\r\nMore than 5 years of experience with Python and Django.\r\nFocused in porting SPAs and developing Django applications using the hypermedia approach with HTMX and Alpine.js.\r\nHelped build products in several markets such as education and real estate, including CMS platforms, GIS integration, and event management.\r\nMultiple freelance projects deployed using these technologies.", "public_name": "Lucas Pires", "guid": "5ba153c6-03fa-5833-bfae-5625ed4ee2c0", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/JPZMG7/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/ZQUSTH/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/ZQUSTH/", "attachments": []}, {"guid": "474b87cf-5566-5feb-ae9e-867563d61201", "code": "KWZZZS", "id": 1711, "logo": null, "date": "2025-07-25T11:10:00+01:00", "start": "11:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1711-data-morph-a-cautionary-tale-of-summary-statistics", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KWZZZS/", "title": "Data Morph: A Cautionary Tale of Summary Statistics", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Relying solely on simple summary statistics like the mean, median, or standard deviation is not enough to describe complex data. Come and see why this is the case and learn what it takes to translate research into an open-source library.", "description": "Statistics do not come intuitively to humans; they always try to find simple ways to describe complex things. Given a complex dataset, they may feel tempted to use simple summary statistics like the mean, median, or standard deviation to describe it. However, these numbers are not a replacement for visualizing the distribution.\r\n\r\nTo illustrate this fact, researchers have generated many datasets that are very different visually, but share the same summary statistics. In this talk, I will discuss [Data Morph](https://github.com/stefmolin/data-morph), an open source package that builds on previous research using simulated annealing to perturb an arbitrary input dataset into a variety of shapes, while preserving the mean, standard deviation, and correlation to multiple decimal points. I will showcase how it works, discuss the challenges faced during development, and explore the limitations of this approach.", "recording_license": "", "do_not_record": false, "persons": [{"code": "9NHRV8", "name": "Stefanie Molin", "avatar": "https://pretalx.evolutio.pt/media/avatars/li_2V5oeN2.jpeg", "biography": "[Stefanie Molin](https://stefaniemolin.com) is a software engineer at Bloomberg in New York City, where she tackles tough problems in information security, particularly those revolving around data wrangling/visualization, building tools for gathering data, and knowledge sharing. She is also a core developer of [numpydoc](https://github.com/numpy/numpydoc) and the author of \u201c[Hands-On Data Analysis with Pandas: A Python data science handbook for data collection, wrangling, analysis, and visualization](https://www.amazon.com/Hands-Data-Analysis-Pandas-visualization/dp/1800563450),\u201d which is currently in its second edition and has been translated into Korean and Chinese. She holds a bachelor\u2019s of science degree in operations research from Columbia University's Fu Foundation School of Engineering and Applied Science, as well as a master\u2019s degree in computer science, with a specialization in machine learning, from Georgia Tech. In her free time, she enjoys traveling the world, inventing new recipes, and learning new languages spoken among both people and computers.", "public_name": "Stefanie Molin", "guid": "4d769dc0-ead5-5507-b574-f7d4a5d2a214", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/9NHRV8/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KWZZZS/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KWZZZS/", "attachments": []}, {"guid": "9793155c-5132-5ec3-822e-c8e3daa6848e", "code": "9PNTEV", "id": 1538, "logo": null, "date": "2025-07-25T11:50:00+01:00", "start": "11:50", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1538-inside-the-black-box-the-anatomy-of-virtual-environments", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/9PNTEV/", "title": "Inside the Black Box: The Anatomy of Virtual Environments", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Virtual environments are a fundamental part of Python development, but to most developers, they\u2019re largely a \u2018black box\u2019. In this talk, we\u2019re gonna dissect the code, file structure and utilities that make them up to deeply learn, and not just have superficial knowledge of, how venvs actually work.", "description": "We all use virtual environments, but do we know how they work? What\u2019s inside a virtual environment? Why do we even have to \u2018activate\u2019 them anyways, and what does that mean in the first place? In this talk, we\u2019re gonna discover that.\r\n\r\nFirst, we\u2019ll need to go over how Python installs work in modern operating systems (hopefully, the days of xkcd 1987 https://xkcd.com/1987/ are long gone), and how we can\u2019t isolate projects without the aid of a tool such as these virtual environments. \r\n\r\nThen, we\u2019ll go over the files and folders inside venvs, examine their purpose, and browse through the venv module source code to understand the CLI tool we use every day. We\u2019ll install some deps and see how those fit inside this virtual environment structure.\r\n\r\nLastly, we\u2019ll check which problems are not solved by virtual environments, its limitations depending on the scope we\u2019re looking for (i.e, a venv is not a container! And shouldn\u2019t be used as such!), and how, lately, many libraries which purpose overlap with those of venvs are actually wrapping over this functionality so that you don\u2019t have to manage it yourself (beware the law of leaky abstractions!).", "recording_license": "", "do_not_record": false, "persons": [{"code": "MURCZA", "name": "Daniel Herv\u00e1s", "avatar": "https://pretalx.evolutio.pt/media/avatars/me3_JHib70c.png", "biography": "Daniel is a software engineer with a background in first, local, and then international and VC-backed startups. He's now the lead engineer at Reckon Digital, where he directs and coordinates several projects with clients such as the UN's World Food Programme.", "public_name": "Daniel Herv\u00e1s", "guid": "18bbffb2-b791-5e27-9245-d3890c52cef7", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/MURCZA/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/9PNTEV/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/9PNTEV/", "attachments": []}, {"guid": "4c90145f-87be-50ea-9b8e-1f871aea2eb4", "code": "3KBMXY", "id": 1569, "logo": null, "date": "2025-07-25T12:30:00+01:00", "start": "12:30", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1569-queryset-explain-make-it-make-sense", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KBMXY/", "title": "QuerySet.explain(): make it make sense", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "We have tools that show what queries are executed and the time it takes. But what next? What is going on there? Is it good that it's doing that? Will some indexes help?\r\nIn this talk, I will help you decipher database query plans and give some rules of thumb to understand if the database is doing the best it can. We will learn about different ways databases retrieve the data and how they estimate the cost of those operations. We will also use query plans to find the best function-based and partial indexes for different kinds of Django filter conditions. JSON fields? We will cover those as well! I will also share several anti-patterns I have seen in  Django projects and show how to rewrite them in a database-friendly way.", "description": "This might change: introduce explain plan, overview of table/index/parallel scans, nested loop/hash joins. Different approaches when we need less than 5-10% of data or more. Query cost calculation, why database will not choose multiple indexes on separate fields. Nulls in indexes, \"NOT IN\" queries, how to transform them into \"IN\" queries.  Creating indexes for specific queries including the proper typecast, lower/upper/like. Using explain plan to see what index the database is looking for. Partial indexes. How active searches over multiple tables fail (OR conditions) and how to fix that (actually did it for clients and had some revelations about Postgres). Will have a demo django code for that.", "recording_license": "", "do_not_record": false, "persons": [{"code": "VSHFQY", "name": "Aivars Kalv\u0101ns", "avatar": "https://pretalx.evolutio.pt/media/avatars/meamazon_D6g3t03.jpg", "biography": "Aivars Kalv\u0101ns is a FinTech developer, software architect, and consultant. He spent more than 18 years developing and architecting payment card software for acquiring and issuing, accounting and utility payments through mobile phones, ATMs, and POS terminals. At the moment he is a contractor for Ebury exploring the Foreign Exchange area of the FinTech landscape.", "public_name": "Aivars Kalv\u0101ns", "guid": "7e91ac18-412d-52b3-bf07-05589f549c30", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/VSHFQY/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KBMXY/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3KBMXY/", "attachments": []}, {"guid": "e43f9c9d-4e9f-5e33-8e53-b8ab1cd86efc", "code": "Z93RGG", "id": 1710, "logo": "https://pretalx.evolutio.pt/media/pycon-portugal-2025/submissions/Z93RGG/kandinsky-download-175320_QYj7kr0.png", "date": "2025-07-25T14:00:00+01:00", "start": "14:00", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1710-visualizing-complexity", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/Z93RGG/", "title": "Visualizing complexity", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "An overcomplicated project increases development and maintenance time. We need some metrics for reducing the complexity of the existing code base. However, if we can make complexity visible, it will be much easier to work with it.", "description": "Sun Tzu said in The Art of War: \"If you know your enemy and know yourself, you have nothing to fear from the outcome of a hundred battles\". \r\nIn this talk we will talk about how to measure project complexity and how to visualize this complexity for successful follow-up actions to reduce complexity.\r\n\r\nIn each part of the talk, examples of complexity measurements in well-known OS projects will be given. Thanks to visualization tools we will be able to take a closer look at our enemy.\r\n\r\nIn this talk:\r\n1. Arts of Complexity\r\n2. Critical mass of tech debt\r\n3. Managed complexity\r\n4. Measuring complexity\r\n5. CCL index\r\n6. OOP vs FB style measurement.\r\n7. Coupling/Cohesion index.\r\n8. Cognitive Complexity Index\r\n9. Cyclomatic Complexity\r\n10. Composite code quality Index\r\n11. Strategies to distribute or reduce complexity\r\n12. Refactoring\r\n13. Defining refactoring Hot Zones\r\n14. Visual \u00abheatmaps\u00bb of changes\r\n15. Changing abstraction level\r\n16. Increasing modularity\r\n17. Extracting Dependency\r\n18. Isolation without refactoring\r\n19. Imports control\r\n20. KIS- Keep Imports Short\r\n21. TDD - Three dots deprecation\r\n22. Alternatives for Type-Hinting\r\n23. Documentation\r\n24. LLMs\r\n25. Summary + Q&A\r\n\r\nThis workshop will offer participants a list of tools to measure and visualize complexity in any project.", "recording_license": "", "do_not_record": false, "persons": [{"code": "JUGPGE", "name": "Maxim Danilov", "avatar": "https://pretalx.evolutio.pt/media/avatars/JUGPGE_ix3ebLM.jpeg", "biography": "Senior software developer and architect with 12+ years of experience leading international teams, launching startups, speaking at technology conferences, writing and reviewing hundreds of thousands of lines of code, and \u0441ontributing to the open-source community as an award-winning code mentor.", "public_name": "Maxim Danilov", "guid": "2926c361-78a7-541a-9dc2-e5151c958cbb", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/JUGPGE/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/Z93RGG/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/Z93RGG/", "attachments": []}, {"guid": "cafbc525-35c8-5979-a6aa-02ed1fa33f8e", "code": "TC8ZAX", "id": 1715, "logo": null, "date": "2025-07-25T14:35:00+01:00", "start": "14:35", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1715-pablo-does-random-stuff", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TC8ZAX/", "title": "Pablo does random stuff", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Join Pablo in an exploration of random Python stuff!", "description": "Join Pablo in an exploration of random Python stuff!", "recording_license": "", "do_not_record": false, "persons": [{"code": "SF9ATW", "name": "Pablo Galindo Salgado", "avatar": null, "biography": "Pablo Galindo Salgado works in the Python Infrastructure team at the Software Infrastructure department at Bloomberg L.P. He is a CPython core developer and a Theoretical Physicist specializing in general relativity and black hole physics. He is currently serving on the Python Steering Council and he is the release manager for Python 3.10 and 3.11. He has also a cat but he does not code.", "public_name": "Pablo Galindo Salgado", "guid": "86324274-444b-5af9-b4cc-eea823ce4091", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/SF9ATW/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TC8ZAX/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/TC8ZAX/", "attachments": []}, {"guid": "9d8887ca-1553-5eeb-a217-51ca6ea45465", "code": "EDNLWT", "id": 1646, "logo": null, "date": "2025-07-25T15:10:00+01:00", "start": "15:10", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1646-what-if-you-became-an-open-source-contributor-in-2025", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EDNLWT/", "title": "What if you became an open source contributor in 2025?", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "The classic open source dichotomy is well known: everyone uses it, but few give back for the convenience we've all grown so used to. What sustains a community? And how can we help ensure that the frameworks and libraries we rely on daily remain viable and healthy in the long run? In this talk, I intend to show how easy it is to get started with your open source contributions, regardless of your seniority.", "description": "The classic open source dichotomy is well known: everyone uses it, but few give back for the convenience we've all grown so used to. What sustains a community? And how can we help ensure that the frameworks and libraries we rely on daily remain viable and healthy in the long run?\r\n\r\nContributing is easier than it seems. Maintainers are, more often than not, more welcoming and kind than you'd expect, and I want to show you how simple it can be to take your first steps in this world. After all, it wasn't that long ago that I was in that exact same place.\r\n\r\nIn this talk, you can expect to:\r\n\r\n- Learn a bit more about the open source ecosystem;\r\n- Understand how these decentralized communities operate at a basic level;\r\n- Get practical tips on how to start contributing and explore possible paths you can take.\r\n\r\nTalk outline:\r\n\r\n- Personal introduction\r\n- Open source and its sustainability\r\n- Demystifying barriers to contributing\r\n    - Maintainers \u2014 what do they want?\r\n    - How senior do I need to be to contribute?\r\n- How to start contributing?\r\n    - Mentorship programs\r\n        - Djangonaut Space\r\n    - Getting involved in communities and forums\r\n- Practical tips for contributing to OSS projects\r\n    - Navigating repositories\r\n    - Using AI to help understand codebases\r\n    - Finding good issues to start contributing\r\n    - Best practices for contributing\r\n        - Conventional Commits\r\n        - TDD\r\n        - Documentation updates\r\n    - Communicating with maintainers", "recording_license": "", "do_not_record": false, "persons": [{"code": "DVGCGQ", "name": "Amanda Savluchinske", "avatar": "https://pretalx.evolutio.pt/media/avatars/DVGCGQ_SNsj6bY.jpg", "biography": "Amanda is an Engineering Manager at Vinta Software. She considers herself to be a hybrid professional, having a background in business and software engineering. Amanda enjoys getting into technical topics, having been a speaker at conferences such as DjangoCon US, DjangoCon Europe and Python Brasil in the past, but loves discussing the overlap and challenges around technical and non-technical domains. She\u2019s a social introvert with a passion for cooking, writing, music, video games and (shockingly, based on her history) strength training. Her current goal is to be less chronically online and touch some grass from time to time.", "public_name": "Amanda Savluchinske", "guid": "66182109-5182-5d5b-a588-51405bec4a3c", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/DVGCGQ/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EDNLWT/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EDNLWT/", "attachments": []}, {"guid": "54800d9a-0368-5358-83ba-63635475af06", "code": "7YHMDK", "id": 1708, "logo": null, "date": "2025-07-25T16:20:00+01:00", "start": "16:20", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1708-the-role-of-c-in-the-python-ecosystem-the-case-of-the-qt-framework", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7YHMDK/", "title": "The role of C++ in the Python ecosystem: the case of the Qt framework", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "With the recent popularity of new programming languages that are improving the Python ecosystem, one cannot dismiss the role of \u201cold\u201d languages like C++, and how the new versions might stay relevant.\r\nOn this talk, we will dive directly into the internals on how the Qt for Python project brought one of the most popular C++ frameworks into Python - but not only with 1-to1 bindings.", "description": "With the recent popularity of new programming languages that are improving the Python ecosystem, one cannot dismiss the role of \u201cold\u201d languages like C++, and how the new versions might stay relevant.\r\n\r\nWith these ideas in mind, how do you bring a huge project, as old as Python, written in C++ to Python? If you are thinking: \u00ab\u2026just create some bindings and call it a day\u00bb you will be surprised.\r\n\r\nOn this talk, we will dive directly into the internals on how the Qt for Python project brought one of the most popular C++ frameworks into Python - but not only with 1-to1 bindings.\r\n\r\nWe will discuss about build systems, packaging, limited API, interpreters support, Platform and API compatibility, Python and C++ types, ecosystem awareness, CPython code generation, communities, documentation, and many more challenging aspects of maintaining and developing a C++ library in Python.\r\n\r\nAfter this talk, you will not only understand why exposing an existing library from one language to another is much more than just binding them together, but also you will be able to start developing Python applications with Qt.\r\n\r\nOutline\r\n- Introduction to C++ and quick summary of changes from the recent versions\r\n- Describing the Qt framework, history, features and scope.\r\n- Exposing C++ projects into Python\r\n + Build system details\r\n + Limited API and CPython\r\n + Packaging and distribution\r\n- [demo] Developing an hybrid Python and C++ application\r\n- [demo] Developing a Qt for Python application from Scratch", "recording_license": "", "do_not_record": false, "persons": [{"code": "8DMJYJ", "name": "Cristi\u00e1n Maureira-Fredes", "avatar": "https://pretalx.evolutio.pt/media/avatars/kYnHLWgc_400x400_lv7vu5A.jpg", "biography": "Cristi\u00e1n is is a serial conference and community organizer in many countries, and participates in different initiatives like the translation of the Python documentation into Spanish, PyLadies Berlin & Con, PyPI moderation, and a few more. He is one of the coordinators of the Python en Espa\u00f1ol initiative, that aims to gather all the Spanish speaking python communities in one place. Due to his contributions, he got awarded a PSF Fellowship in 2021 and got elected to the PSF Board of Directors in 2024. His day job is at The Qt Company, working as a team lead of the Qt for Python (PySide) project, and Qt Core (Berlin).", "public_name": "Cristi\u00e1n Maureira-Fredes", "guid": "6a563746-d11d-58d5-a267-fcb010782ae0", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/8DMJYJ/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7YHMDK/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/7YHMDK/", "attachments": []}, {"guid": "c7df937a-6e90-5eb6-970e-b685a23722b7", "code": "3YB3VB", "id": 1702, "logo": null, "date": "2025-07-25T17:00:00+01:00", "start": "17:00", "duration": "00:30", "room": "Auditorium", "slug": "pycon-portugal-2025-1702-lightning-talks", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3YB3VB/", "title": "Lightning Talks", "subtitle": "", "track": null, "type": "Talk", "language": "en", "abstract": "Lightning Talks", "description": "Lightning Talks", "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3YB3VB/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/3YB3VB/", "attachments": []}, {"guid": "b096330d-cb19-593f-bfa4-4a93e9d4a1c2", "code": "KSJDHU", "id": 1701, "logo": null, "date": "2025-07-25T17:30:00+01:00", "start": "17:30", "duration": "00:15", "room": "Auditorium", "slug": "pycon-portugal-2025-1701-closing-session", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KSJDHU/", "title": "Closing Session", "subtitle": "", "track": null, "type": "Other", "language": "en", "abstract": "Closing Session", "description": "Closing Session", "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KSJDHU/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KSJDHU/", "attachments": []}]}}, {"index": 3, "date": "2025-07-26", "day_start": "2025-07-26T04:00:00+01:00", "day_end": "2025-07-27T03:59:00+01:00", "rooms": {"D -112, Floor -1 (Room Madeira)": [{"guid": "6ada5452-332f-523a-baf5-a2ce2560df9c", "code": "BRPBEV", "id": 1704, "logo": null, "date": "2025-07-26T10:30:00+01:00", "start": "10:30", "duration": "02:00", "room": "D -112, Floor -1 (Room Madeira)", "slug": "pycon-portugal-2025-1704-understanding-and-expanding-python-hand-on-experience-with-the-python-internals", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/BRPBEV/", "title": "Understanding and expanding Python: hand-on experience with the Python internals", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "Understanding and expanding Python: hand-on experience with the Python internals", "description": "(check [the repository](https://github.com/cmaureir/cpython_tutorial))\r\nOn this tutorial you will learn to:\r\n\r\n* Explore the core of the standard Python implementation\r\n* Modify the interpreter by adding new functions\r\n* Extend Python with C, Rust, and Zig.\r\n\r\nThe session will be a combination of a theoretical introduction of the topics, followed by a hand-on experience on each step.\r\n\r\nHere is an outline of what will be done:\r\n\r\n* Navigating CPython (short presentation)\r\n* Setting up a development environment\r\n* Compiling CPython from source\r\n* Adding a free function to the interpreter\r\n* Adding a new method to a Python container (list or set)\r\n* Extending CPython (short presentation)\r\n* Minimal C-extension for \"Hello World\"\r\n* Minimal Rust, and Zig extensions for \"Hello World\",\r\n* Create a new extension replacing Python functionality with C, Rust and Zig.", "recording_license": "", "do_not_record": false, "persons": [{"code": "8DMJYJ", "name": "Cristi\u00e1n Maureira-Fredes", "avatar": "https://pretalx.evolutio.pt/media/avatars/kYnHLWgc_400x400_lv7vu5A.jpg", "biography": "Cristi\u00e1n is is a serial conference and community organizer in many countries, and participates in different initiatives like the translation of the Python documentation into Spanish, PyLadies Berlin & Con, PyPI moderation, and a few more. He is one of the coordinators of the Python en Espa\u00f1ol initiative, that aims to gather all the Spanish speaking python communities in one place. Due to his contributions, he got awarded a PSF Fellowship in 2021 and got elected to the PSF Board of Directors in 2024. His day job is at The Qt Company, working as a team lead of the Qt for Python (PySide) project, and Qt Core (Berlin).", "public_name": "Cristi\u00e1n Maureira-Fredes", "guid": "6a563746-d11d-58d5-a267-fcb010782ae0", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/8DMJYJ/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/BRPBEV/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/BRPBEV/", "attachments": []}, {"guid": "e883682c-f5f8-5ccf-a081-1c031903404c", "code": "HAD3VX", "id": 1673, "logo": null, "date": "2025-07-26T13:30:00+01:00", "start": "13:30", "duration": "02:00", "room": "D -112, Floor -1 (Room Madeira)", "slug": "pycon-portugal-2025-1673-the-pokemon-trainer-s-guide-to-polars", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/HAD3VX/", "title": "The Pok\u00e9mon trainer's guide to Polars", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "[Polars](https://github.com/pola-rs/polars) is lightning fast, easy to use, dataframe library.\r\nIt's clean API and its contexts and expressions allow writing readable but performant data wrangling code.\r\n\r\nAimed at both data newbies and pandas experts (Polars != pandas), in this hands-on tutorial we'll use data from the [Pok\u00e9mon franchise](https://en.wikipedia.org/wiki/Pok\u00e9mon) to explore the Polars API and the ideas that set it apart from pandas and other dataframe libraries.", "description": "**Set-up instructions**: install Polars (1.12+); jupyter notebooks are optional.\r\n\r\n---\r\n\r\nThe [Polars](https://github.com/pola-rs/polars) dataframe library leverages a couple of key concepts to allow you to write lightning-fast data manipulation code: contexts and expressions.\r\n\r\nThe tutorial is split in 4 sections of roughly 30 minutes:\r\n1. The basics\r\n2. Expression expansion\r\n3. Data transformations\r\n4. The lazy API\r\n### 1. The basics\r\n\r\nEarly on in the tutorial we will introduce the concept of expression and explain that expressions simply _represent_ computations, but do not compute anything.\r\nThen, using Polars contexts (`select`, `group_by`, etc), Polars takes expressions and performs computations, producing a result that depends on the context used.\r\nThe first 30 minutes of the tutorial are spent exploring the four basic contexts that Polars provides:\r\n1. `select`\r\n2. `with_columns`\r\n3. `filter`\r\n4. `group_by`\r\n\r\n### 2. Expression expansion\r\n\r\nEffective use of the Polars API can only be attained if you become comfortable with expression expansion, a Polars feature that is highly intuitive but that requires some practising to recognise all of the opportunities where it could be used.\r\nDuring this section, we explore how to select columns based on names, patterns, data types, and how to use the Polars column selectors `polars.selectors`.\r\n\r\n### 3. Data transformations\r\n\r\nDuring this section we spend some time playing with some general-purpose transformations and we see how the Polars API exposes them, namely pivots and unpivots, as well as several types of joins: equi-joins, the join asof, and a non-equi join.\r\n\r\n### 4. The lazy API\r\n\r\nFinally, we conclude the tutorial by going through one of the most important features of Polars, which is what enables Polars uses to process enormous amounts of data at impressive speeds: the lazy API.\r\nDuring this section, we explore how the lazy API differs from the eager API, how to write queries with the lazy API and how to execute them, how to use streaming, and how to do profiling.\r\n\r\n---\r\n\r\nI will present the tutorial in a notebook and the whole tutorial will be practical and the audience is supposed to follow along while I live-code.\r\nIn each section, there will be around 15 minutes for participants to work on exercises to practise the concepts introduced.\r\n\r\n(During the whole tutorial I will have a script that continuously synchronises my live-coded demos with a GitHub repository so that everyone can pull my code locally if they get lost.)", "recording_license": "", "do_not_record": false, "persons": [{"code": "D33C79", "name": "Rodrigo Gir\u00e3o Serr\u00e3o", "avatar": "https://pretalx.evolutio.pt/media/avatars/D33C79_89XSd4r.png", "biography": "Rodrigo Gir\u00e3o Serr\u00e3o is the author of [multiple independently published books](https://mathspp.com/books) on Python, programming, and mathematics, and [frequently blogs about those same topics](https://mathspp.com/blog).\r\nRodrigo has also presented talks and tutorials at some of the largest Python conferences in the world, including PyCon US, EuroPython, and multiple European PyCons.\r\n\r\nBy creating technical content that is easily digestible by those looking to improve their Python knowledge, Rodrigo is working to help everyone appreciate the elegance of the Python language and to make an effective use of the tools it provides.\r\n\r\nWhen he is not working or writing, Rodrigo can be found playing board games, walking his dog, or exercising at the gym.", "public_name": "Rodrigo Gir\u00e3o Serr\u00e3o", "guid": "deadfed1-3cce-5c6f-b1cc-2dd63deac2a5", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/D33C79/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/HAD3VX/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/HAD3VX/", "attachments": []}, {"guid": "399441bf-8a58-5be2-baa6-416cae11cfc7", "code": "KYUBDF", "id": 1493, "logo": null, "date": "2025-07-26T16:00:00+01:00", "start": "16:00", "duration": "02:00", "room": "D -112, Floor -1 (Room Madeira)", "slug": "pycon-portugal-2025-1493-pre-commit-to-better-code", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KYUBDF/", "title": "(Pre-)Commit to Better Code", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "Maintaining code quality can be challenging, no matter the size of your project or number of contributors. Different team members may have different opinions on code styling and preferences for code structure, while solo contributors might find themselves spending a considerable amount of time making sure the code conforms to accepted conventions. However, manually inspecting and fixing issues in files is both tedious and error-prone. As such, computers are much more suited to this task than humans. Pre-commit hooks are a great way to have a computer handle this for you.\r\n\r\nPre-commit hooks are code checks that run whenever you attempt to commit your changes with Git. They can detect and, in some cases, automatically correct code-quality issues *before* they make it to your codebase. In this tutorial, you will learn how to install and configure pre-commit hooks for your repository to ensure that only code that passes your checks makes it into your code base. We will also explore how to build custom pre-commit hooks for novel use cases.", "description": "## Section 1: Setting Up Pre-Commit Hooks\r\n\r\nAfter laying the foundation with an overview of Git hooks, we will discuss the use cases for hooks at the pre-commit stage (called pre-commit hooks), as well as a high-level explanation of how to set them up without any external tools. We will then introduce the\u00a0`pre-commit`\u00a0tool and disambiguate it from pre-commit hooks, before commencing a detailed walkthrough of the pre-commit hooks setup process when using\u00a0`pre-commit`.\r\n\r\n## Section 2: Creating a Pre-Commit Hook\r\nWhile there are a lot of pre-made hooks in existence, sometimes they aren't sufficient for the task at hand. In this section, we will walk step-by-step through the process of creating and distributing a custom hook. After wiring everything up, we will discuss best practices for sharing, documenting, testing, and maintaining the codebase.\r\n\r\n## Audience\r\nThis tutorial is for anyone with intermediate knowledge of Python and basic knowledge of `git`. You must be comfortable writing Python code and working with `git` on the command line and using basic commands (`git clone`, `git add`, `git status`, `git commit`, `git push`). Attendees should have Python and `git` installed on their computers, as well as a text editor for writing code (e.g., Visual Studio Code).", "recording_license": "", "do_not_record": false, "persons": [{"code": "9NHRV8", "name": "Stefanie Molin", "avatar": "https://pretalx.evolutio.pt/media/avatars/li_2V5oeN2.jpeg", "biography": "[Stefanie Molin](https://stefaniemolin.com) is a software engineer at Bloomberg in New York City, where she tackles tough problems in information security, particularly those revolving around data wrangling/visualization, building tools for gathering data, and knowledge sharing. She is also a core developer of [numpydoc](https://github.com/numpy/numpydoc) and the author of \u201c[Hands-On Data Analysis with Pandas: A Python data science handbook for data collection, wrangling, analysis, and visualization](https://www.amazon.com/Hands-Data-Analysis-Pandas-visualization/dp/1800563450),\u201d which is currently in its second edition and has been translated into Korean and Chinese. She holds a bachelor\u2019s of science degree in operations research from Columbia University's Fu Foundation School of Engineering and Applied Science, as well as a master\u2019s degree in computer science, with a specialization in machine learning, from Georgia Tech. In her free time, she enjoys traveling the world, inventing new recipes, and learning new languages spoken among both people and computers.", "public_name": "Stefanie Molin", "guid": "4d769dc0-ead5-5507-b574-f7d4a5d2a214", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/9NHRV8/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KYUBDF/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/KYUBDF/", "attachments": []}], "D -114, Floor -1 (Room Azores)": [{"guid": "3470dbd3-ca40-5ee3-86ca-e807d4ab560f", "code": "38R3EF", "id": 1494, "logo": null, "date": "2025-07-26T10:30:00+01:00", "start": "10:30", "duration": "02:00", "room": "D -114, Floor -1 (Room Azores)", "slug": "pycon-portugal-2025-1494-fastapi-meets-langchain-crafting-a-rag-ai-powered-chatbot", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/38R3EF/", "title": "FastAPI Meets Langchain: crafting a RAG AI-powered chatbot", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "During the workshop we will create an HTTP-based API that interacts as a chatbot.\r\n\r\nIt will cover key concepts and delines core challenges such as:\r\n- including integrating a vector database for document retrieval,\r\n- enhancing the capabilities of large language models with retrieved context with *Langchain*, \r\n- and finally exposing the core operations through endpoints with *FastAPI* for seamless interaction. \r\n\r\nWhether you're a developer aiming to expand your AI toolkit or a data enthusiast exploring RAG, the aims to provide you with the knowledge and skills to design and deploy intelligent, context-driven applications.", "description": "# Description\r\n*RAG* (Retrieval-Augmented Generation) is an emerging paradigm in AI that combines the strengths of retrieval systems and generative models to deliver context-aware, highly relevant responses.\r\n\r\nBy leveraging FastAPI and Langchain, a modular tool for interacting with language models and knowledge sources, you'll learn how to create an AI assistant application for a shop.\r\n\r\nThe purpose of the workshop is to outline the core challenges to face when building a chatbot, covering key concepts, including the integration of a vector database for document retrieval, configuring FastAPI endpoints for seamless interaction, and using Langchain to enhance the capabilities of large language models with retrieved context. \r\n\r\n## Prerequisites\r\n- good understanding of Python syntax, \r\n- familiarity with the asyncio library and aync await syntax. \r\n- basic knowledge of HTTP services, such as HTTP requests, methods etc.., \r\n- prior experience with FastAPI is not required, it can be helpful for following along. \r\n- general understanding or interest in Generative AI is beneficial but not essential.", "recording_license": "", "do_not_record": false, "persons": [{"code": "L3JRY3", "name": "Giunio De Luca", "avatar": "https://pretalx.evolutio.pt/media/avatars/L3JRY3_ZwVRYFV.jpg", "biography": "Giunio is a freelance software engineer working for research labs, gouvernmental institutions and startups across Europe.\r\nHe recently published the FastAPI Cookbook Packt edition.\r\nHe holds an Industrial Engineering degree from the University of Basilicata, Italy, and a PhD in numerical simulations from Paris-Saclay University, France. \r\nHe loves supporting education by sharing his knowledge in masterclasses and lectures in schools and universities.", "public_name": "Giunio De Luca", "guid": "caafcff8-0ce1-5e01-afd5-d876d22466a2", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/L3JRY3/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/38R3EF/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/38R3EF/", "attachments": []}, {"guid": "07ad4427-3d08-5e54-b707-0b05fea1f243", "code": "PPZBB8", "id": 1693, "logo": null, "date": "2025-07-26T13:30:00+01:00", "start": "13:30", "duration": "02:00", "room": "D -114, Floor -1 (Room Azores)", "slug": "pycon-portugal-2025-1693-building-pure-django-rest-api", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PPZBB8/", "title": "Building pure Django REST API", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "The new version of Django has several important features that allow us to avoid installing additional modules. Libraries like DRF, yasg, spectacular have always been recommended for REST API development. Now the rules have changed. In this workshop: \r\n1. The modern art of project development in Django. (\u00b5-Django style). \r\n2. Built-in serializer tools. \r\n3. Json response, an underrated tool. \r\n4. Async ORM and class based views . The best parts of modern Django.\r\n\r\nAfter this workshop, all participants got information about the new features of Django.", "description": "In this workshop: \r\n1. Modern art of Django project development. Theory\r\n2. Starting a project using the Documentation first approach.\r\n3. Adding API visualization and manual testing utility.\r\n4. Create the first django api view\r\nbreak \r\n6. Using the serializer tools.\r\n7. Adding validators\r\n*8. Async ORM and class-based views\r\n*9. Testing\r\n\r\nAfter this workshop, all participants got information about the new features of Django.", "recording_license": "", "do_not_record": false, "persons": [{"code": "JUGPGE", "name": "Maxim Danilov", "avatar": "https://pretalx.evolutio.pt/media/avatars/JUGPGE_ix3ebLM.jpeg", "biography": "Senior software developer and architect with 12+ years of experience leading international teams, launching startups, speaking at technology conferences, writing and reviewing hundreds of thousands of lines of code, and \u0441ontributing to the open-source community as an award-winning code mentor.", "public_name": "Maxim Danilov", "guid": "2926c361-78a7-541a-9dc2-e5151c958cbb", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/JUGPGE/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PPZBB8/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/PPZBB8/", "attachments": []}, {"guid": "c3350b60-e197-5732-a35d-bdea3dc6485c", "code": "EMWGJK", "id": 1712, "logo": "https://pretalx.evolutio.pt/media/pycon-portugal-2025/submissions/EMWGJK/ChatGPT_Image_Jun_30_202_x6m0bAJ.png", "date": "2025-07-26T16:00:00+01:00", "start": "16:00", "duration": "02:00", "room": "D -114, Floor -1 (Room Azores)", "slug": "pycon-portugal-2025-1712-advanced-decorators-decorators-classes", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EMWGJK/", "title": "Advanced decorators \u2013 decorators & classes", "subtitle": "", "track": null, "type": "Workshop", "language": "en", "abstract": "Decorators are often thought of as functions that accept functions as arguments and that return other functions...\r\n\r\nIn this hands-on workshop you will see that this is not always right.", "description": "This hands-on workshop is divided into 4 sections of 30 minutes each:\r\n\r\n 1. Decorators refresher.\r\n 2. Advanced function decorators.\r\n 3. Classes as decorators.\r\n 4. Decorating classes.\r\n\r\nEach section is divided into 15 minutes of live-coded lecture and 15 minutes for exercises where participants work in pairs to solve coding exercises.\r\n\r\nThe first section briefly recaps the fundamental concepts behind function decorators and the second section introduces the concepts required to write decorators with arguments.\r\n\r\nThe third section shows how classes can also be decorators, allowing you to create flexible and powerful decorators that leverage the full strength of OOP.\r\n\r\nFinally, the fourth section shows how to apply decorators to classes, typically for the purpose of streamlining the definition of some boilerplate code.\r\n\r\n**Pre-requisites**: attendees are expected to have used decorators before and to have written one or two decorators for themselves. Attendees are expected to be comfortable writing classes, methods, and implementing the dunder method `__init__`.\r\n\r\n**Set-up**: your IDE of choice and Python 3.12+.\r\n\r\n**Reference materials**: the reference materials can be found online at <https://decorators.mathspp.com>", "recording_license": "", "do_not_record": false, "persons": [{"code": "D33C79", "name": "Rodrigo Gir\u00e3o Serr\u00e3o", "avatar": "https://pretalx.evolutio.pt/media/avatars/D33C79_89XSd4r.png", "biography": "Rodrigo Gir\u00e3o Serr\u00e3o is the author of [multiple independently published books](https://mathspp.com/books) on Python, programming, and mathematics, and [frequently blogs about those same topics](https://mathspp.com/blog).\r\nRodrigo has also presented talks and tutorials at some of the largest Python conferences in the world, including PyCon US, EuroPython, and multiple European PyCons.\r\n\r\nBy creating technical content that is easily digestible by those looking to improve their Python knowledge, Rodrigo is working to help everyone appreciate the elegance of the Python language and to make an effective use of the tools it provides.\r\n\r\nWhen he is not working or writing, Rodrigo can be found playing board games, walking his dog, or exercising at the gym.", "public_name": "Rodrigo Gir\u00e3o Serr\u00e3o", "guid": "deadfed1-3cce-5c6f-b1cc-2dd63deac2a5", "url": "https://pretalx.evolutio.pt/pycon-portugal-2025/speaker/D33C79/"}], "links": [], "feedback_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EMWGJK/feedback/", "origin_url": "https://pretalx.evolutio.pt/pycon-portugal-2025/talk/EMWGJK/", "attachments": []}]}}]}}}