diff --git a/data/speakers/PyConItalia/2023.json b/data/speakers/PyConItalia/2023.json new file mode 100644 index 0000000..f90c3e5 --- /dev/null +++ b/data/speakers/PyConItalia/2023.json @@ -0,0 +1,700 @@ +{ + "year": 2023, + "speakers": [ + { + "fullname": "Lorenzo Barbieri", + "type": "Training", + "title": "Public Speaking Training - Become a great public speaker!" + }, + { + "fullname": "Carlton Gibson", + "type": "Keynote", + "title": "Open Source for the long-haul" + }, + { + "fullname": "Alessandro Garavaglia", + "type": "Talk", + "title": "Unit-tests for machine learning pipelines" + }, + { + "fullname": "Raul Pino", + "type": "Talk", + "title": "Ensembles of GANs as a Data Augmentation Technique for Alzheimer research" + }, + { + "fullname": "Carlo Bertini", + "type": "Talk", + "title": "Coding to interfaces: Structural Subtyping in Python" + }, + { + "fullname": "Francesco Panico", + "type": "Talk", + "title": "Coding to interfaces: Structural Subtyping in Python" + }, + { + "fullname": "Riccardo Magliocchetti", + "type": "Talk", + "title": "A simple serverless data pipeline" + }, + { + "fullname": "Paolo Melchiorre", + "type": "Talk", + "title": "Maps with Django" + }, + { + "fullname": "Aaron Bassett", + "type": "Talk", + "title": "Rust for Pythonistas" + }, + { + "fullname": "Giuseppe Mastrandrea", + "type": "Training", + "title": "Risveglia l'artista che è in te con Processing.py!" + }, + { + "fullname": "Angela Parker", + "type": "Training", + "title": "Beyond the technology: Are YOU considering the human being?" + }, + { + "fullname": "Dom Weldon", + "type": "Talk", + "title": "Serverless from scratch with CI/CD on AWS: it’s a lot easier than you think (and mostly free)." + }, + { + "fullname": "Piergiacomo Fonseca", + "type": "Talk", + "title": "Location Intelligence and Spatial Data Science: from geographic coordinates to business insights" + }, + { + "fullname": "Giovanni Barillari", + "type": "Talk", + "title": "Granian: a Rust HTTP server for Python applications" + }, + { + "fullname": "Tommaso Radicioni", + "type": "Talk", + "title": "GPT or how I learned to stop worrying and love the generative AI" + }, + { + "fullname": "Nicola Donelli", + "type": "Talk", + "title": "Intelligent Documents Management System" + }, + { + "fullname": "Lorenzo Barbieri", + "type": "Talk", + "title": "Personal Branding for Developers: stand out in the market!" + }, + { + "fullname": "Serena Sensini", + "type": "Talk", + "title": "Una libreria al giorno, toglie il medico di torno" + }, + { + "fullname": "William Arias", + "type": "Talk", + "title": "Beyond Grid Search: XGBoost and Optuna as the ultimate ML Optimization Combo " + }, + { + "fullname": "Sebastian Witowski", + "type": "Talk", + "title": "Optimizing Your CI Pipelines" + }, + { + "fullname": "Sanskar Jethi", + "type": "Talk", + "title": "Robyn: A fast async Python web framework with a Rust runtime" + }, + { + "fullname": "Fabio Lamanna", + "type": "Talk", + "title": "Map transit systems on transportation networks using GTFS Data and Infomap" + }, + { + "fullname": "Luca Gilli", + "type": "Talk", + "title": "Tests are docs and docs are tests: an introduction to great_expectations and data profiling" + }, + { + "fullname": "Samantha Cristoforetti", + "type": "Talk", + "title": "Q&A with ESA Astronaut Samantha Cristoforetti" + }, + { + "fullname": "Kushal Das", + "type": "Training", + "title": "Writing Python extensions in Rust" + }, + { + "fullname": "Rumanu Bhardwaj", + "type": "Training", + "title": "Save Sheldon" + }, + { + "fullname": "Marie Roald", + "type": "Talk", + "title": "Teaching teachers to teach Python: what have I learned?" + }, + { + "fullname": "Florian Haas", + "type": "Talk", + "title": "Creativity: How we lost it, why that’s bad, and how we get it back" + }, + { + "fullname": "Virginia Capoluongo", + "type": "Talk", + "title": "Come migliorare l’usabilità di un sito: il caso djangoproject.com" + }, + { + "fullname": "Laura Lezcano", + "type": "Talk", + "title": "Come migliorare l’usabilità di un sito: il caso djangoproject.com" + }, + { + "fullname": "Aivars Kalvāns", + "type": "Talk", + "title": "Pessimism, optimism, realism and Django database concurrency" + }, + { + "fullname": "Artem Kislovskiy", + "type": "Talk", + "title": "The bumps in the road: A retrospective on my data visualisation mistakes" + }, + { + "fullname": "Niccolò Venerandi", + "type": "Talk", + "title": "Become a Better Pythonista by Abusing List Comprehensions and :=" + }, + { + "fullname": "Avila", + "type": "Training", + "title": "The art of taking time for yourself and growing a mindful hobby" + }, + { + "fullname": "Anastasiia Tymoshchuk", + "type": "Talk", + "title": "My first 90 days, kick starting a new team for long term success" + }, + { + "fullname": "Valerio Maggio", + "type": "Talk", + "title": "The `__magic__` of the Python Model for Magic™ data" + }, + { + "fullname": "Sabrina Scoma", + "type": "Talk", + "title": "Bias: ci influenzano più di quanto pensiamo" + }, + { + "fullname": "Albert Sweigart", + "type": "Talk", + "title": "Using GUI Automation to Create APIs for API-less Desktop Apps" + }, + { + "fullname": "Joel Lord", + "type": "Talk", + "title": "Help! I Need To UnSQLize My Application" + }, + { + "fullname": "Emanuele Fabbiani", + "type": "Talk", + "title": "The hitchhiker's guide to asyncio" + }, + { + "fullname": "Darla Magdalene Shockley", + "type": "Talk", + "title": "Site reliability engineering when your team is too small for a full time SRE" + }, + { + "fullname": "Elena Guidi", + "type": "Talk", + "title": "Let's save the penguins with green computing" + }, + { + "fullname": "Giulio Piccolo", + "type": "Talk", + "title": "Saving time, money and sanity by Pythonizing Google Slides" + }, + { + "fullname": "Di Scala", + "type": "Talk", + "title": "Develop modern games in Python the old-school way" + }, + { + "fullname": "Alessandro Volpe", + "type": "Talk", + "title": "Let's do graph machine learning on Cloud" + }, + { + "fullname": "Alessandro Molina", + "type": "Talk", + "title": "Apache Arrow as a full stack data engineering solution" + }, + { + "fullname": "Anwesha Das", + "type": "Keynote", + "title": "Altering lives with communities" + }, + { + "fullname": "Marlene Mhangami", + "type": "Keynote", + "title": "Transcendence: The Power of Representation" + }, + { + "fullname": "Miriam Perrone", + "type": "Talk", + "title": "Remote teams are autistic" + }, + { + "fullname": "Justin Castilla", + "type": "Talk", + "title": "What's that smell? Monitoring air quality with Python, Raspberry Pi, and Redis" + }, + { + "fullname": "MERVE NOYAN", + "type": "Talk", + "title": "Building Data and Machine Learning Applications using Gradio" + }, + { + "fullname": "Antonio Cuni", + "type": "Talk", + "title": "The CPU in your browser: WebAssembly demystified" + }, + { + "fullname": "Patrizio Gelosi", + "type": "Talk", + "title": "Dyndesign: Merging Classes Dynamically" + }, + { + "fullname": "Andrea Guzzo", + "type": "Talk", + "title": "Creating an AI-Python Infrastructure that works with a reasonable scale" + }, + { + "fullname": "Vaibhav Srivastav", + "type": "Training", + "title": "Build with Audio: The easy & hard way!" + }, + { + "fullname": "Suman Debnath", + "type": "Training", + "title": "Getting started with Polars (when Dataframe gets little too fast)" + }, + { + "fullname": "Andrea Romoli", + "type": "Training", + "title": "The state of innovation with LEGO© SERIOUS PLAY©" + }, + { + "fullname": "Duarte Carmo", + "type": "Talk", + "title": "On scaling Machine Learning microservices" + }, + { + "fullname": "Fiorella De Luca", + "type": "Talk", + "title": "Data Discrimination" + }, + { + "fullname": "Mirko Galimberti", + "type": "Talk", + "title": "Kivy: Pythonistas can develop cross-platform (yes, even mobile) GUI Apps" + }, + { + "fullname": "Neel Shah", + "type": "Talk", + "title": "Polyglot Library Development" + }, + { + "fullname": "Alberto Danese", + "type": "Talk", + "title": "Beyond Pandas: lightning fast in-memory dataframes with Polars" + }, + { + "fullname": "Luca Baggi", + "type": "Talk", + "title": "Rust is easy" + }, + { + "fullname": "Ambra Tonon", + "type": "Talk", + "title": "La community Django Girls in Italia e Fuzzy Brains: un connubio vitale!" + }, + { + "fullname": "Juna Salviati", + "type": "Talk", + "title": "Costruire torri ed attraversare fiumi: una prospettiva diversa sui puzzle con Python" + }, + { + "fullname": "Marc-André Lemburg", + "type": "Talk", + "title": "Diving into Event-Driven Architectures (EDA) with Python - Solving complexity at scale" + }, + { + "fullname": "Danica Fine", + "type": "Talk", + "title": "Practical Pipelines: A Houseplant Alerting System with ksqlDB" + }, + { + "fullname": "Maxim Danilov", + "type": "Talk", + "title": "What are you yield from?" + }, + { + "fullname": "Anastasia Samokhina", + "type": "Talk", + "title": "Build a Frontend for Your Web App: From Basic HTML to JS Frameworks" + }, + { + "fullname": "Serena Palazzo", + "type": "Talk", + "title": "How to use Deep Learning to process audio data and classify sounds." + }, + { + "fullname": "Cheuk Ho", + "type": "Talk", + "title": "Don't just test, my friend, test better" + }, + { + "fullname": "Juliana Nicacio", + "type": "Talk", + "title": "La mia prima esperienza di contribuzione ad un progetto Open Source" + }, + { + "fullname": "Jonathan Striebel", + "type": "Talk", + "title": "How to Tune your Python Analysis Pipeline: A Profiler Guide" + }, + { + "fullname": "Daniel Roy Greenfeld", + "type": "Talk", + "title": "No Holds Barred Web Framework Battle" + }, + { + "fullname": "Dr. Patrick Schemitz", + "type": "Talk", + "title": "How Not to Repeat Yourself - pydantic, YAML, Connexion and all the REST of it." + }, + { + "fullname": "Karen Jex", + "type": "Training", + "title": "Everything You Wanted to Know About Databases as a Developer but Were Too Afraid to Ask Your DBA" + }, + { + "fullname": "Marco Zamboni", + "type": "Training", + "title": "Backpropagation is \"easy\"!" + }, + { + "fullname": "Fiorella De Luca", + "type": "Training", + "title": "Non autosabotarti, smaschera l’impostore che è in te!" + }, + { + "fullname": "Ambra Tonon", + "type": "Training", + "title": "Non autosabotarti, smaschera l’impostore che è in te!" + }, + { + "fullname": "Sabrina Scoma", + "type": "Training", + "title": "Non autosabotarti, smaschera l’impostore che è in te!" + }, + { + "fullname": "Marco Rossi", + "type": "Talk", + "title": "Speed up Python with hardware accelerators" + }, + { + "fullname": "Flavio Percoco", + "type": "Talk", + "title": "Striving for simplicity: Creating software that is simple to use and easy to maintain" + }, + { + "fullname": "Alexander Hendorf", + "type": "Talk", + "title": "5 Things about fastAPI I wish we had known beforehand" + }, + { + "fullname": "Justin Mayer", + "type": "Talk", + "title": "Open Source Is Eating the World" + }, + { + "fullname": "Stefano Fiorucci", + "type": "Talk", + "title": "Fact Checking Rocks! - How to build a fact checking system for rock music" + }, + { + "fullname": "Maciej Marzęta", + "type": "Talk", + "title": "PEP 8: How to Avoid Being a Python Hooligan" + }, + { + "fullname": "Lorenzo Addazi", + "type": "Talk", + "title": "Let's talk about transpilers!" + }, + { + "fullname": "Jonathan Oberländer", + "type": "Talk", + "title": "Trace functions: Building a tiny debugger" + }, + { + "fullname": "Mattia Ferrini", + "type": "Talk", + "title": "Decision sciences in Python" + }, + { + "fullname": "Marcelo Trylesinski", + "type": "Talk", + "title": "What does Starlette really do for FastAPI?" + }, + { + "fullname": "Pelucchi Mauro", + "type": "Talk", + "title": "Data Warehouses Meet Data Lakes" + }, + { + "fullname": "Roberto Polli", + "type": "Talk", + "title": "Cybersecurity in the semantic web with MITRE D3FEND" + }, + { + "fullname": "Priyanshi Goel", + "type": "Talk", + "title": "Debugging that bugger : Cleanly handling the errors" + }, + { + "fullname": "Hemangi Subodh Karchalkar", + "type": "Talk", + "title": "From WSGI to ASGI - Django 3.0" + }, + { + "fullname": "Christina Dahlén", + "type": "Talk", + "title": "Efficient Communication Between Python Microservices using LavinMQ" + }, + { + "fullname": "Nyior Clement", + "type": "Talk", + "title": "Efficient Communication Between Python Microservices using LavinMQ" + }, + { + "fullname": "Radovan Bacovic", + "type": "Talk", + "title": "Do the magic with DevOps, Open Source and All-remote teams (with Python, of course)" + }, + { + "fullname": "Andrea Guarino", + "type": "Talk", + "title": "Managing the code quality of your project. Leave the past behind: Focus on new code." + }, + { + "fullname": "Peter Bittner", + "type": "Talk", + "title": "Smettiamola di scrivere script! Applicazioni CLI con TDD." + }, + { + "fullname": "Donatella Taurasi", + "type": "Keynote", + "title": "Learning the Other \"Full Stack\": An epistle from business to the technical people." + }, + { + "fullname": "Anna Martelli Ravenscroft", + "type": "Talk", + "title": "What we learned by writing and editing the 4th edition of Python in a Nutshell" + }, + { + "fullname": "Alex Martelli", + "type": "Talk", + "title": "What we learned by writing and editing the 4th edition of Python in a Nutshell" + }, + { + "fullname": "Emily Morehouse-Valcarcel", + "type": "Keynote", + "title": "Stay Curious: Reflections on Passion, Risk-Taking, and Re-Invention" + }, + { + "fullname": "sagie shamay", + "type": "Talk", + "title": "Running your Django WebAuthN service" + }, + { + "fullname": "Pietro Mascolo", + "type": "Talk", + "title": "Bringing life and motion to AI Explainability" + }, + { + "fullname": "Joao Nogueira", + "type": "Talk", + "title": "Bringing life and motion to AI Explainability" + }, + { + "fullname": "Federico Belotti", + "type": "Talk", + "title": "ChatGPT and Minecraft's diamonds playing agents: Reinforcement Learning in a nutshell with sheeprl" + }, + { + "fullname": "Pier Paolo Ippolito", + "type": "Talk", + "title": "Paradoxes in Data Science" + }, + { + "fullname": "Alexander Darby", + "type": "Talk", + "title": "Hack Your Own Code" + }, + { + "fullname": "Kacper Szczepanek", + "type": "Training", + "title": "Infrastructure as a Code in Python with AWS CDK" + }, + { + "fullname": "Sami Musallam", + "type": "Training", + "title": "Troubleshooting and Monitoring Production Applications with OpenTelemetry" + }, + { + "fullname": "Fabio Rotondo", + "type": "Talk", + "title": "restest - Il coltellino svizzero per i test di endpoint REST in Python" + }, + { + "fullname": "Sanskar Jethi", + "type": "Talk", + "title": "Robyn: A fast async Python web framework with a Rust runtime" + }, + { + "fullname": "Alan Franzoni", + "type": "Talk", + "title": "Tech and the Italy: spunti di management IT per il Belpaese" + }, + { + "fullname": "Vikram Waradpande", + "type": "Talk", + "title": "Working with multiple hands: Parallel and Distributed Programming" + }, + { + "fullname": "Sarthika Dhawan", + "type": "Talk", + "title": "Working with multiple hands: Parallel and Distributed Programming" + }, + { + "fullname": "Mackenzie Jackson", + "type": "Talk", + "title": "Exploiting Leaked Credentials - How python code is leaking millions of secrets" + }, + { + "fullname": "Iacopo Spalletti", + "type": "Talk", + "title": "Domare il pony: configurare django è difficile?" + }, + { + "fullname": "REFIK CAN MALLI", + "type": "Talk", + "title": "Controlling the Chaos: Reproducible Deep Learning Experiments Using Lightning and Hydra" + }, + { + "fullname": "Adrin Jalali", + "type": "Talk", + "title": "Let’s exploit pickle, and `skops` to the rescue!" + }, + { + "fullname": "Jean-Luc Stevens", + "type": "Talk", + "title": "HoloViz: Visualization and Interactive Dashboards in Python" + }, + { + "fullname": "Dave Klein", + "type": "Talk", + "title": "Real-time Event Streaming with Python" + }, + { + "fullname": "Aya Elsayed", + "type": "Training", + "title": "You CAN teach an old doc new tricks: Automate your project documentation using Sphinx+GitHub Actions" + }, + { + "fullname": "Olga Matoula", + "type": "Training", + "title": "You CAN teach an old doc new tricks: Automate your project documentation using Sphinx+GitHub Actions" + }, + { + "fullname": "Stefanie Molin", + "type": "Training", + "title": "Beyond the Basics: Data Visualization in Python" + }, + { + "fullname": "Furkan M. Torun", + "type": "Talk", + "title": "How to Build an Open-Source Machine Learning Platform in Biology?" + }, + { + "fullname": "Ester Beltrami", + "type": "Talk", + "title": "Workplace culture is not just a fashion trend!" + }, + { + "fullname": "Tommaso Furlanello", + "type": "Talk", + "title": "Code Debugging and Refactoring with OpenBugger: a Python Library for Self-Supervised AI Debuggers" + }, + { + "fullname": "Luca Baggi", + "type": "Talk", + "title": "Is the great dataframe showdown finally over? Enter: polars" + }, + { + "fullname": "Sarthika Dhawan", + "type": "Talk", + "title": "You've got trust issues, we've got solutions: Differential Privacy" + }, + { + "fullname": "Vikram Waradpande", + "type": "Talk", + "title": "You've got trust issues, we've got solutions: Differential Privacy" + }, + { + "fullname": "Mario Migliaccio", + "type": "Talk", + "title": "Network analysis inside the Italian parliament" + }, + { + "fullname": "Emanuele Fabbiani", + "type": "Talk", + "title": "Serverless Computing for Mathematical Optimization" + }, + { + "fullname": "Stefania Delprete", + "type": "Talk", + "title": "Introduction to AI Safety. Let's be ready before it's too late!" + }, + { + "fullname": "H. Josiah Raj", + "type": "Talk", + "title": "Decoding Binary Files - a Primer (specifically optical spectra for analysis)" + }, + { + "fullname": "Jan Giacomelli", + "type": "Talk", + "title": "Celery on AWS ECS" + }, + { + "fullname": "Nicola Landro", + "type": "Talk", + "title": "Scraping o UI-Automation? Da livello scimmia a pro!" + }, + { + "fullname": "Fabio Lipreri", + "type": "Talk", + "title": "Pandas on Steroids" + }, + { + "fullname": "Filippo Pinton", + "type": "Talk", + "title": "Write portable CI/CD pipelines using Python" + } + ] +} \ No newline at end of file diff --git a/data/speakers/PyConItalia/2024.json b/data/speakers/PyConItalia/2024.json new file mode 100644 index 0000000..f64f2df --- /dev/null +++ b/data/speakers/PyConItalia/2024.json @@ -0,0 +1,605 @@ +{ + "year": 2024, + "speakers": [ + { + "fullname": "Lorenzo Barbieri", + "type": "Training", + "title": "Corso Public Speaking" + }, + { + "fullname": "Jodie Burchell", + "type": "Keynote", + "title": "Mirror, mirror: LLMs and the illusion of humanity" + }, + { + "fullname": "David Berenstein", + "type": "Talk", + "title": "🧼 From GPU-poor to data-rich: data quality practices for LLM fine-tuning" + }, + { + "fullname": "Ruslan Kiyanchuk", + "type": "Talk", + "title": "Mastering Cryptography in Python: Best Practices and Myth-Busting" + }, + { + "fullname": "Raffaele Colace", + "type": "Talk", + "title": "Il software funzionante è il principale metro di misura di progresso" + }, + { + "fullname": "Adrin Jalali", + "type": "Talk", + "title": "Dynamically generated methods with a non-generic signature" + }, + { + "fullname": "Alessandro Romano", + "type": "Talk", + "title": "Pandas, Polars and the DataFrame Consortium." + }, + { + "fullname": "Luca Baggi", + "type": "Talk", + "title": "functime: a next generation ML forecasting library powered by Polars" + }, + { + "fullname": "Gintare Statkute", + "type": "Training", + "title": "Memray 101: Demystifying memory profiling in Python" + }, + { + "fullname": "Jesse Carnaxide", + "type": "Training", + "title": "Memray 101: Demystifying memory profiling in Python" + }, + { + "fullname": "Lorenzo Turrino", + "type": "Training", + "title": "Instrumenting Python: build a full telemetry pipeline with OpenTelemetry, Prometheus and Grafana" + }, + { + "fullname": "Stefano Fiorucci", + "type": "Talk", + "title": "Large Language Models for Devs: from zero to your first LLM application" + }, + { + "fullname": "Rodrigo Girão Serrão", + "type": "Talk", + "title": "Descriptors made easy" + }, + { + "fullname": "Christian Heitzmann", + "type": "Talk", + "title": "Documenting Python Code" + }, + { + "fullname": "Ricardo Sueiras", + "type": "Talk", + "title": "Next Generation Authorisation using Cedar" + }, + { + "fullname": "Marco Gorelli", + "type": "Talk", + "title": "How you can write a dataframe-agnostic library" + }, + { + "fullname": "Fabio Lamanna", + "type": "Talk", + "title": "Sit back, relax, and enjoy the talk: a journey through FlightRadar24 with Python" + }, + { + "fullname": "Lemaitre Guillaume", + "type": "Talk", + "title": "A Retrieval Augmented Generation system to query the scikit-learn documentation" + }, + { + "fullname": "Katharina Rasch", + "type": "Talk", + "title": "AI on a Microbudget - Methods of Machine Learning Miniaturization" + }, + { + "fullname": "Christian Staudt", + "type": "Talk", + "title": "AI on a Microbudget - Methods of Machine Learning Miniaturization" + }, + { + "fullname": "Artem Kislovskiy", + "type": "Talk", + "title": "Simplifying Python Code through the Lens of Functional Programming" + }, + { + "fullname": "Jorge Martinez Gomez", + "type": "Talk", + "title": "Demystifying Oauth2 Authorization framework" + }, + { + "fullname": "Miroslav Šedivý", + "type": "Talk", + "title": "Solving Two Hard Problems in Computer Science Using Pandas" + }, + { + "fullname": "Pietro Mascolo", + "type": "Talk", + "title": "I have no clue what my model is doing..." + }, + { + "fullname": "Laís Carvalho", + "type": "Talk", + "title": "Python and Freedom and Bias" + }, + { + "fullname": "Tim Paine", + "type": "Talk", + "title": "High Performance Data Visualization for the Web" + }, + { + "fullname": "Riccardo Magliocchetti", + "type": "Talk", + "title": "Is Django async yet?" + }, + { + "fullname": "Armuzza", + "type": "Talk", + "title": "Django, Metadati e Inspire: come catalogare dati geospaziali grazie a Python " + }, + { + "fullname": "Erik Wrede", + "type": "Talk", + "title": "Rewrite everything in Rust? What we learned from introducing Rust in Strawberry-GraphQL" + }, + { + "fullname": "Francesco Panico", + "type": "Talk", + "title": "Zero waste: trucchi per riciclare (la memoria) meglio" + }, + { + "fullname": "Carlo Bertini", + "type": "Talk", + "title": "Zero waste: trucchi per riciclare (la memoria) meglio" + }, + { + "fullname": "Giuseppe Mastrandrea", + "type": "Training", + "title": "Train-Prey-Deploy: the journey of a ML model from the cradle to the online" + }, + { + "fullname": "Quazi Nafiul Islam", + "type": "Training", + "title": "Calling Rust from Python: A Gentle Introduction to PyO3" + }, + { + "fullname": "Thiago Bellini Ribeiro", + "type": "Talk", + "title": "Building high-performance, type-safe GraphQL APIs with Strawberry and Django" + }, + { + "fullname": "Andrii Soldatenko", + "type": "Talk", + "title": "Debugging python applications inside k8s environment" + }, + { + "fullname": "Artur Patoka", + "type": "Talk", + "title": "Testing for Ghosts in the Machine: Assuring 'Good Enough' Software Quality in AI-based systems" + }, + { + "fullname": "Jill Cates", + "type": "Talk", + "title": "How to Handle Very Large Data with Python" + }, + { + "fullname": "Mia Bajić", + "type": "Talk", + "title": "Combining Django ORM & FastAPI in a Data Visualization Tool" + }, + { + "fullname": "Emiel Veersma", + "type": "Talk", + "title": "From Pixels to Plots: Transforming Lives of African Smallholder Farmers through Geospatial Data" + }, + { + "fullname": "Andrea Purgato", + "type": "Talk", + "title": "Data VS Engineers: a long lasting story" + }, + { + "fullname": "Federica Previ", + "type": "Talk", + "title": "Data VS Engineers: a long lasting story" + }, + { + "fullname": "Yash Saboo", + "type": "Talk", + "title": "Code More, Draw Less, and Debug Just a Little!" + }, + { + "fullname": "Nefta Kanilmaz", + "type": "Talk", + "title": "Analyzing COVID-19 Protest Movements: A Multidimensional Approach Using Geo-Social Media Data" + }, + { + "fullname": "Shirli Di-Castro", + "type": "Talk", + "title": "AI, SQL, and GraphQL Walk into a Fertility Clinic… LLM-based Medical feature development" + }, + { + "fullname": "Davide Poggiali", + "type": "Talk", + "title": "streamlit vs gradio: which to pick?" + }, + { + "fullname": "Anton Caceres", + "type": "Talk", + "title": "Enhancing AsyncIO for Complex Applications" + }, + { + "fullname": "Daniel Roy Greenfeld", + "type": "Keynote", + "title": "Scaling Yourself: Make an Impact to Billions" + }, + { + "fullname": "Daniele Procida", + "type": "Keynote", + "title": "The attentive programmer" + }, + { + "fullname": "Ilyas Chaoua", + "type": "Talk", + "title": "Scaling Machine Learning Training and Inference" + }, + { + "fullname": "Cesare Placanica", + "type": "Talk", + "title": "Sviluppare operatori kubernetes \"Pythonicamente\"" + }, + { + "fullname": "Ines Montani", + "type": "Talk", + "title": "The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs" + }, + { + "fullname": "Adrian Garcia Badaracco", + "type": "Talk", + "title": "Modern observability for Python" + }, + { + "fullname": "Alan Franzoni", + "type": "Talk", + "title": "Typing at scale: statically type-checking a large codebase" + }, + { + "fullname": "Stefanie Molin", + "type": "Talk", + "title": "Getting Started with Open Source Contributions" + }, + { + "fullname": "Leonardo Giordani", + "type": "Training", + "title": "TDD in Python con pytest" + }, + { + "fullname": "Valerio Maggio", + "type": "Training", + "title": "PPML: Machine learning on data you cannot see" + }, + { + "fullname": "Florian Haas", + "type": "Talk", + "title": "Quit Simplifying!" + }, + { + "fullname": "Vaibhav Srivastav", + "type": "Talk", + "title": "Speeding up Whisper for speech recognition by 10x - Optimisations and walkthrough" + }, + { + "fullname": "Fagani Hajizada", + "type": "Talk", + "title": "Building a self-service kubernetes platform for python developers" + }, + { + "fullname": "Peter Bittner", + "type": "Talk", + "title": "Pythonic deployment of (Python) applications" + }, + { + "fullname": "Luciano Ramalho", + "type": "Talk", + "title": "Pythonic type hints with typing.Protocol" + }, + { + "fullname": "Alexander Hendorf", + "type": "Talk", + "title": "Ten Years of Community Organizer" + }, + { + "fullname": "Yossi Rozantsev", + "type": "Talk", + "title": "Writing Beautiful, Simple, and Safe Operations Scripts with Python" + }, + { + "fullname": "Tommaso Radicioni", + "type": "Talk", + "title": "RAGtime with Haystack! How to build a RAG with Haystack 2.0? " + }, + { + "fullname": "Marcelo Trylesinski", + "type": "Talk", + "title": "Logfire - Uncomplicated Observability" + }, + { + "fullname": "Adrian Garcia Badaracco", + "type": "Talk", + "title": "Logfire - Uncomplicated Observability" + }, + { + "fullname": "Damian Wysocki", + "type": "Talk", + "title": "Blue-Green Deployment in Action: A Real Case Study" + }, + { + "fullname": "Nicola Guglielmi", + "type": "Talk", + "title": "Da 100 a 100M utenti: come scalare le tue architetture cloud!🚀" + }, + { + "fullname": "Lorenzo Mele", + "type": "Talk", + "title": "Oltre il Codice: Che Ruolo ha la Filosofia nella Programmazione?" + }, + { + "fullname": "Maciej Marzęta", + "type": "Talk", + "title": "FastAPI: Hitting the Performance Jackpot" + }, + { + "fullname": "Serena Palazzo", + "type": "Talk", + "title": "A Journey through Generative AI's Frontier Python Libraries" + }, + { + "fullname": "Nicolò Giso", + "type": "Talk", + "title": "Exploring Art with Python: Building an Italian Art Bot" + }, + { + "fullname": "Ievgen Burdin", + "type": "Talk", + "title": "From Domain to Delivery: End-to-End Clean Architecture in Python" + }, + { + "fullname": "Pietro Peterlongo", + "type": "Talk", + "title": "Nim for Pythonistas" + }, + { + "fullname": "Luca Corbucci", + "type": "Talk", + "title": "Is your model private?" + }, + { + "fullname": "Jan Pipek", + "type": "Training", + "title": "Data Analysis, the Polars Way" + }, + { + "fullname": "Aya Elsayed", + "type": "Training", + "title": "No More Raw SQL: SQLAlchemy, ORMs & asyncio" + }, + { + "fullname": "Rhythm Patel", + "type": "Training", + "title": "No More Raw SQL: SQLAlchemy, ORMs & asyncio" + }, + { + "fullname": "Yullia Barabash", + "type": "Talk", + "title": "Is it me or Python memory management? 🤔💻" + }, + { + "fullname": "Rashmi Nagpal", + "type": "Talk", + "title": "Beyond Bias: Crafting Fairness in Pythonic Machine Learning Systems" + }, + { + "fullname": "Adarsh Kumar", + "type": "Talk", + "title": "Let’s make the world a better place: Python for Social Good" + }, + { + "fullname": "Siddharta Govindaraj", + "type": "Talk", + "title": "Supercharge your code with Python's 'match' statement" + }, + { + "fullname": "Marcelo Trylesinski", + "type": "Talk", + "title": "FastAPI Internals - How does it work?" + }, + { + "fullname": "Bernice Waweru", + "type": "Talk", + "title": "Tricking Neural Networks : Explore Adversarial Attacks" + }, + { + "fullname": "Egon Ferri", + "type": "Talk", + "title": "Computer Vision IRL: dall'idea al deploy on-premise" + }, + { + "fullname": "Vinícius Gubiani Ferreira", + "type": "Talk", + "title": "PEP 683: Immortal Objects - A new approach for memory managing" + }, + { + "fullname": "Marc-André Lemburg", + "type": "Talk", + "title": "Advanced parsing of structured data using Python's new match statement" + }, + { + "fullname": "Luca Gilli", + "type": "Talk", + "title": "The European AI Act: a data scientist’s perspective" + }, + { + "fullname": "Oliver Rew", + "type": "Talk", + "title": "Designing a Human-Friendly CLI for API-Driven Infrastructure" + }, + { + "fullname": "Sheena O'Connell", + "type": "Keynote", + "title": "A Tale from the Trenches" + }, + { + "fullname": "Antonio Cuni", + "type": "Keynote", + "title": "Myths and fairy tales around Python performance" + }, + { + "fullname": "Hemangi Subodh Karchalkar", + "type": "Talk", + "title": "From Pydantic V1 to V2" + }, + { + "fullname": "Simone Pulcini", + "type": "Talk", + "title": "Release it like a pro!" + }, + { + "fullname": "Luigi Giuseppe Corollo", + "type": "Talk", + "title": "Release it like a pro!" + }, + { + "fullname": "Simona Mazzarino", + "type": "Talk", + "title": "Preservare la Privacy dei Dati Personali nell'Era dell'IA: Un Approccio Pratico con Nerpii" + }, + { + "fullname": "Cheuk Ho", + "type": "Talk", + "title": "Acknowledging Women’s Contributions in the Python Community Through Podcast" + }, + { + "fullname": "David Seddon", + "type": "Talk", + "title": "Crabs in Snakes!" + }, + { + "fullname": "Vincenzo Maritati", + "type": "Training", + "title": "Space Invaders: un approccio custom in Reinforcement Learning" + }, + { + "fullname": "Navid Nobani", + "type": "Training", + "title": "Essentials of Generative Models" + }, + { + "fullname": "Loris Cro", + "type": "Talk", + "title": "Deinventing the Wheel" + }, + { + "fullname": "Nicola Procopio", + "type": "Talk", + "title": "Don’t get lost in Vector Space" + }, + { + "fullname": "Iga Karbowiak", + "type": "Talk", + "title": "Adding zero-downtime migrations strategy in SaaS project" + }, + { + "fullname": "Mara Marzocchi", + "type": "Talk", + "title": "Sii il cambiamento che vuoi vedere nel mondo " + }, + { + "fullname": "Anže Pečar", + "type": "Talk", + "title": "Self hosting your side projects with Django and duct tape" + }, + { + "fullname": "Melhin Ahammad", + "type": "Talk", + "title": "Django 5.0: Elevating Experiences with Server-Sent Events – A Journey from Polling to Real-Time Vibe" + }, + { + "fullname": "Davide Brunato", + "type": "Talk", + "title": "Abstract tricks: how abstract base classes can help you to solve difficult challenges." + }, + { + "fullname": "William Arias", + "type": "Talk", + "title": "🤑 Paying Off Technical Debt in the Development of Machine Learning Apps" + }, + { + "fullname": "Paolo Melchiorre", + "type": "Talk", + "title": "Many ways to be a Python contributor" + }, + { + "fullname": "Karen Jex", + "type": "Talk", + "title": "Optimising your Database for Analytics" + }, + { + "fullname": "Luca Baggi", + "type": "Talk", + "title": "Embeddings, Transformers, RLHF: Three key ideas to understand ChatGPT" + }, + { + "fullname": "Bryce Beagle ", + "type": "Talk", + "title": "Importing Without \"import\": Behind the Scenes of importlib" + }, + { + "fullname": "Juna Salviati", + "type": "Talk", + "title": "Infiniti mondi da set finiti di tessere: un approccio \"quantum\" all'arte generativa" + }, + { + "fullname": "Viktor Zagranovskyy", + "type": "Talk", + "title": "Scraping the Dungeons. Find your perfect D&D game using Scrapy and Bokeh visualisation" + }, + { + "fullname": "Roman Prykhodchenko", + "type": "Talk", + "title": "Python-friendly cloud infrastructure management" + }, + { + "fullname": "Rodrigo Girão Serrão", + "type": "Talk", + "title": "503 days working full time on FOSS: lessons learned" + }, + { + "fullname": "Swastika Yadav", + "type": "Talk", + "title": "Understanding the Magic of Python Modules and Packages" + }, + { + "fullname": "Kristi Perreault", + "type": "Talk", + "title": "Snakes and Ladders: The Ups and Downs of Python Development with AWS Lambda" + }, + { + "fullname": "Jacek Kołodziej", + "type": "Talk", + "title": "GIL: What's the hassle and... should I care?" + }, + { + "fullname": "Scott Chacon", + "type": "Talk", + "title": "So you think you know Git: Advanced Git Tips and Tricks" + }, + { + "fullname": "Vicki Boykis", + "type": "Keynote", + "title": "Stay Close to the Metal" + } + ] +} \ No newline at end of file diff --git a/data/speakers/PyConItalia/2025.json b/data/speakers/PyConItalia/2025.json new file mode 100644 index 0000000..eb5be5f --- /dev/null +++ b/data/speakers/PyConItalia/2025.json @@ -0,0 +1,695 @@ +{ + "year": 2025, + "speakers": [ + { + "fullname": "Lorenzo Barbieri", + "type": "Training", + "title": "Corso Public Speaking" + }, + { + "fullname": "Giuseppe Mastrandrea", + "type": "Training", + "title": "Beginner's Workshop" + }, + { + "fullname": "Stefania Delprete", + "type": "Training", + "title": "Humble Data - Learn Python and Data Science from scratch!" + }, + { + "fullname": "Paolo Melchiorre", + "type": "Training", + "title": "Djangonauts" + }, + { + "fullname": "Sarah Abderemane", + "type": "Training", + "title": "Djangonauts" + }, + { + "fullname": "Sheena", + "type": "Training", + "title": "Djangonauts" + }, + { + "fullname": "Raffaella Suardini", + "type": "Training", + "title": "Djangonauts" + }, + { + "fullname": "Andrea Grandi", + "type": "Training", + "title": "Python Dojo" + }, + { + "fullname": "Nicholas Tollervey", + "type": "Training", + "title": "Python Dojo" + }, + { + "fullname": "Seemin Suleri", + "type": "Keynote", + "title": "From Struggle to Stardom: The Secret Sauce of High Performance Teams" + }, + { + "fullname": "Spela Giacomelli", + "type": "Talk", + "title": "Best buddies: Django and HTMX" + }, + { + "fullname": "Giulia De Poli", + "type": "Talk", + "title": "Rivoluzione LLM: Necessità o Eccesso? Uno studio sulle soluzioni più efficienti" + }, + { + "fullname": "Giuseppe Lovino", + "type": "Talk", + "title": "Rivoluzione LLM: Necessità o Eccesso? Uno studio sulle soluzioni più efficienti" + }, + { + "fullname": "Francesco Lucantoni", + "type": "Talk", + "title": "Working with Data Scientists and why I left my job (not)" + }, + { + "fullname": "Saurav Jain", + "type": "Talk", + "title": "Build, Deploy, Monetize: The Future of the Developer Economy" + }, + { + "fullname": "Karen Jex", + "type": "Talk", + "title": "Postgres Partitioning Best Practices" + }, + { + "fullname": "Andrea Griffini", + "type": "Talk", + "title": "Cose a caso su problemi difficili" + }, + { + "fullname": "Leonardo Cavagnis", + "type": "Training", + "title": "Arduino e MicroPython: Soluzioni IoT dal Sensore al Cloud" + }, + { + "fullname": "Claudio Giorgio Giancaterino", + "type": "Training", + "title": "Building Intelligent Agents with RAG and AutoGen" + }, + { + "fullname": "Luca Palmieri", + "type": "Training", + "title": "Rust-Python interoperability" + }, + { + "fullname": "Yash Raj", + "type": "Talk", + "title": "Boosting Python Web Apps performance with Celery and Concurrency" + }, + { + "fullname": "Serena Sensini", + "type": "Talk", + "title": "Intelligence avversaria: usare GAN nella cybersecurity" + }, + { + "fullname": "David Berenstein", + "type": "Talk", + "title": "🤯 No data? No problem! Synthetic data to the rescue" + }, + { + "fullname": "Paolo Melchiorre", + "type": "Talk", + "title": "A Pythonic semantic search" + }, + { + "fullname": "Antonio Spadaro", + "type": "Talk", + "title": "Design by Contract: costruire software robusto con il Contract-First Development" + }, + { + "fullname": "Salvatore Giammanco", + "type": "Talk", + "title": "Under the Hood of Python Data Structures" + }, + { + "fullname": "Simona Mazzarino", + "type": "Talk", + "title": "Democratizing Data: A deep dive into Eurostat Open Database" + }, + { + "fullname": "Andrew Stroev", + "type": "Talk", + "title": "Live audio synthesis with Synchrotron" + }, + { + "fullname": "Matteo Maria Terzuolo", + "type": "Talk", + "title": "Python & Flutter: can birds and snakes really be friends?" + }, + { + "fullname": "Noam Cattan", + "type": "Talk", + "title": "Beyond Alembic and Django Migrations" + }, + { + "fullname": "Data Office", + "type": "Talk", + "title": "Making EPUBs Accessible with AI: A Serverless Pipeline for Automated Alt Text Generation" + }, + { + "fullname": "Marcelo Trylesinski", + "type": "Talk", + "title": "Generative AI Monitoring with PydanticAI and Logfire" + }, + { + "fullname": "Fabio Pliger", + "type": "Talk", + "title": "The marvelous world of Python in Browser: a nice surprise" + }, + { + "fullname": "Michele Zanchi", + "type": "Talk", + "title": "Python, YOLO e Kubernetes: la Super-Visione di un impianto industriale" + }, + { + "fullname": "Alessandro Cosentino", + "type": "Talk", + "title": "Quantum computing without leaving Python behind" + }, + { + "fullname": "Marina Caporlingua", + "type": "Talk", + "title": "Italy-Finland climate round trip with Python" + }, + { + "fullname": "Elisa Bestetti", + "type": "Talk", + "title": "Italy-Finland climate round trip with Python" + }, + { + "fullname": "Tereza Iofciu", + "type": "Talk", + "title": "Behind the Data: Unraveling Leadership Challenges in the LLM Era" + }, + { + "fullname": "Pietro Peterlongo", + "type": "Talk", + "title": "Domain-driven Data Science" + }, + { + "fullname": "Melloncelli", + "type": "Training", + "title": "Hands-On Workshop: Programming a Quantum Computer with Python" + }, + { + "fullname": "Rigel Di Scala", + "type": "Training", + "title": "Learn asyncio by writing the fastest crypto-miner!" + }, + { + "fullname": "Giulio Melloni", + "type": "Training", + "title": "Databricks Delta Live Tables: Data Engineering made easy" + }, + { + "fullname": "Andrea Calegari", + "type": "Training", + "title": "Databricks Delta Live Tables: Data Engineering made easy" + }, + { + "fullname": "Caio Costa Salgado", + "type": "Talk", + "title": "No more Locks! What can we achieve without the GIL" + }, + { + "fullname": "Pietro Mascolo", + "type": "Talk", + "title": "Graph-Based Machine Learning with Python" + }, + { + "fullname": "Castellani", + "type": "Talk", + "title": "Capire il cambiamento climatico con Python: dal rapporto IPCC all’azione climatica" + }, + { + "fullname": "Andrii Soldatenko", + "type": "Talk", + "title": "The essense of Graceful Shutdown" + }, + { + "fullname": "Juna Salviati", + "type": "Talk", + "title": "Pixel e Particelle: quando l’arte generativa incontra il Quantum Computing" + }, + { + "fullname": "Emanuele Fabbiani", + "type": "Talk", + "title": "Langfuse, OpenLIT, and Phoenix: Observability for the GenAI Era" + }, + { + "fullname": "Archana Vaidheeswaran", + "type": "Talk", + "title": "Back to Basics: Cutting Through the AI-Generated Code Noise" + }, + { + "fullname": "Daniele Giunta", + "type": "Talk", + "title": "Local LLM fine-tuning: a practical example" + }, + { + "fullname": "Stefano Fiorucci", + "type": "Talk", + "title": "Post-Training Small Language Models: the adventures of a practitioner" + }, + { + "fullname": "Davide Gerosa", + "type": "Talk", + "title": "Black holes and gravitational waves are discovered (also) with Python!" + }, + { + "fullname": "Peter Bittner", + "type": "Talk", + "title": "Pitonisti! Ecco l'ambiente di sviluppo perfetto! Edizione 2025 (NixOS)" + }, + { + "fullname": "Alessandro Molina", + "type": "Keynote", + "title": "Composable Data Systems, the new frontier" + }, + { + "fullname": "Alex Martelli", + "type": "Keynote", + "title": "Lessons from a lifetime of doing, teaching, managing, and leading technical development" + }, + { + "fullname": "Anastasiia Tymoshchuk", + "type": "Talk", + "title": "Continuous Documentation: basics and advanced techniques" + }, + { + "fullname": "Vaibhav Srivastav", + "type": "Talk", + "title": "Hugging Face ecosystem for Local AI/ ML" + }, + { + "fullname": "Serban Cristian Tudosie", + "type": "Talk", + "title": "Reconstructing Unseen Dimensions in Biophotonics Through Python" + }, + { + "fullname": "Duarte Carmo", + "type": "Talk", + "title": "RAG: Tricks from the trenches." + }, + { + "fullname": "Carlos A Aranibar", + "type": "Talk", + "title": "Designing and Building Custom Keyboards ⌨️ with Python" + }, + { + "fullname": "Daniele Maccagnola", + "type": "Talk", + "title": "Crash detector" + }, + { + "fullname": "Angela Addesso", + "type": "Talk", + "title": "Crash detector" + }, + { + "fullname": "Giovanna Reggina GALLENO MALAGA", + "type": "Training", + "title": "Designing your Success!" + }, + { + "fullname": "Gianfranco Castro", + "type": "Training", + "title": "FastAPI: from Hello World to Production" + }, + { + "fullname": "Marco Gorelli", + "type": "Training", + "title": "Learn Polars in just half-a-day!" + }, + { + "fullname": "Michele Mondelli", + "type": "Talk", + "title": "Efficient AI with Python: running AI models on CPUs" + }, + { + "fullname": "Maren Westermann", + "type": "Talk", + "title": "I feel like writing software documentation is like doing my taxes - help!" + }, + { + "fullname": "Marc-André Lemburg", + "type": "Talk", + "title": "Programming hardware displays the easy way - using MicroPython and LVGL" + }, + { + "fullname": "Diana Bernabei", + "type": "Talk", + "title": "Componenti accessibili e zero framework" + }, + { + "fullname": "Bryce Beagle ", + "type": "Talk", + "title": "Hot-swapping Symbols During Tests: Demystifying unittest.mock[.patch]" + }, + { + "fullname": "Iryna Kondrashchenko", + "type": "Talk", + "title": "Is Prompt Engineering Dead? How Auto-Optimization is Changing the Game" + }, + { + "fullname": "Oleh Kostromin", + "type": "Talk", + "title": "Is Prompt Engineering Dead? How Auto-Optimization is Changing the Game" + }, + { + "fullname": "Oliver Rew", + "type": "Talk", + "title": "Python Untethered: Building Robust Embedded Systems" + }, + { + "fullname": "Peichao Qin", + "type": "Talk", + "title": "Fast Jigsaw Puzzle Solving with Python: From CV Algorithms to Applications" + }, + { + "fullname": "Mykalin Jones", + "type": "Talk", + "title": "Supporting Adult Career Switchers: The Unbootcamp Method" + }, + { + "fullname": "Luka Raljević", + "type": "Talk", + "title": "UX is frontend only! Why do I, super ninja backend developer, need to care about it?" + }, + { + "fullname": "Klemenčić", + "type": "Talk", + "title": "UX is frontend only! Why do I, super ninja backend developer, need to care about it?" + }, + { + "fullname": "Stefanie Molin", + "type": "Talk", + "title": "Data Morph: A Cautionary Tale of Summary Statistics" + }, + { + "fullname": "Antonio Cuni", + "type": "Talk", + "title": "SPy (Static Python) lang: fast as C, Pythonic as Python" + }, + { + "fullname": "Giulio Melloni", + "type": "Talk", + "title": "From hand-down maps to AI/BI: a journey toward Databricks" + }, + { + "fullname": "Andrea Calegari", + "type": "Talk", + "title": "From hand-down maps to AI/BI: a journey toward Databricks" + }, + { + "fullname": "Florian Stefan", + "type": "Talk", + "title": "Accelerating privacy-enhancing data processing" + }, + { + "fullname": "Patrick Deutschmann", + "type": "Talk", + "title": "Hello Bug, My Old Friend" + }, + { + "fullname": "Jorge Martinez Gomez", + "type": "Talk", + "title": "Understanding geospatial data with duckdb" + }, + { + "fullname": "Adrin Jalali", + "type": "Talk", + "title": "Writing a scikit-learn compatible estimator in the modern age" + }, + { + "fullname": "Jessica Greene", + "type": "Training", + "title": "Monitoring carbon emissions: making the impact of your Python code visible" + }, + { + "fullname": "Tereza Iofciu", + "type": "Training", + "title": "Monitoring carbon emissions: making the impact of your Python code visible" + }, + { + "fullname": "Giovanni Pedroncelli ", + "type": "Training", + "title": "Python e Cybersecurity: Caccia alle vulnerabilità" + }, + { + "fullname": "Andrea Pastelli", + "type": "Training", + "title": "Zero to Deployed: Create Your First App with Streamlit" + }, + { + "fullname": "Attila Toth", + "type": "Talk", + "title": "Building real-time apps for web, mobile & desktop in Python" + }, + { + "fullname": "Alex Casalboni", + "type": "Talk", + "title": "From Cloud to Edge computing - Unleashing the power of WebAssembly at the edge" + }, + { + "fullname": "Tommaso Radicioni", + "type": "Talk", + "title": "Come migliorare la tua applicazione basata su LLM? Haystack, Llamaindex e LangChain a confronto" + }, + { + "fullname": "Aivars Kalvāns", + "type": "Talk", + "title": "QuerySet.explain(): make it make sense." + }, + { + "fullname": "Cristián Maureira-Fredes", + "type": "Talk", + "title": "Understanding Python from the inside: C concepts to dive into CPython fearless" + }, + { + "fullname": "Luca Baggi", + "type": "Talk", + "title": "Foundational Models for Time Series Forecasting: are we there yet?" + }, + { + "fullname": "Konrad Gawda", + "type": "Talk", + "title": "Bytecode and .pyc files" + }, + { + "fullname": "Lorenzo Bisi", + "type": "Talk", + "title": "Prevenire l'Obsolescenza dei Modelli ML: Il Caso Bioretics" + }, + { + "fullname": "Lavelli", + "type": "Talk", + "title": "Prevenire l'Obsolescenza dei Modelli ML: Il Caso Bioretics" + }, + { + "fullname": "Giovanni Giacometti", + "type": "Talk", + "title": "Prevenire l'Obsolescenza dei Modelli ML: Il Caso Bioretics" + }, + { + "fullname": "Nicola Guglielmi", + "type": "Talk", + "title": "Beyond Solo: Enhancing LLMs through Collaborative Dialogue with GAN-Inspired Approaches" + }, + { + "fullname": "Rodrigo Girão Serrão", + "type": "Talk", + "title": "Dipping my toes in metaprogramming" + }, + { + "fullname": "Iacopo Spalletti", + "type": "Talk", + "title": "Django dalle trincee: pattern e pratiche dopo 15 anni di esperienza su Django" + }, + { + "fullname": "Sarah Abderemane", + "type": "Keynote", + "title": "Accessibility awareness" + }, + { + "fullname": "Nicholas Tollervey", + "type": "Keynote", + "title": "Creative Compassionate Code (if Python isn't fun, we're doing it wrong)" + }, + { + "fullname": "Riccardo Magliocchetti", + "type": "Talk", + "title": "Observing Python applications with OpenTelemetry" + }, + { + "fullname": "Sebastián Ramírez", + "type": "Talk", + "title": "Deploy FastAPI to the cloud" + }, + { + "fullname": "Loïc Estève", + "type": "Talk", + "title": "PyPI in the face: running jokes that PyPI download stats can play on you" + }, + { + "fullname": "Navid Nobani", + "type": "Talk", + "title": "Private Generative Models: Balancing Privacy and Utility in AI" + }, + { + "fullname": "Domenico Nucera", + "type": "Talk", + "title": "Practical Python parsing with the ast standard module" + }, + { + "fullname": "Daniel Hervás", + "type": "Talk", + "title": "Python Containers: Best Practices" + }, + { + "fullname": "Roberto Polli", + "type": "Training", + "title": "Knowledge management 101" + }, + { + "fullname": "Oleh Kostromin", + "type": "Training", + "title": "What's inside the box? Building a deep learning framework from scratch." + }, + { + "fullname": "Sheena", + "type": "Talk", + "title": "So you want a modern frontend for your Python web app?" + }, + { + "fullname": "ChiaraCielo Longobardi", + "type": "Talk", + "title": "Get Accessibility Right: Shift It Left!" + }, + { + "fullname": "Thiago Bellini Ribeiro", + "type": "Talk", + "title": "Typing your Python code like a ninja!" + }, + { + "fullname": "Arthur Pastel", + "type": "Talk", + "title": "Intuition vs. Reality: Surprising Truths in Python Performance" + }, + { + "fullname": "Adrien Cacciaguerra", + "type": "Talk", + "title": "Intuition vs. Reality: Surprising Truths in Python Performance" + }, + { + "fullname": "Vinícius Gubiani Ferreira", + "type": "Talk", + "title": "uv without sunblock: faster than ever dependency and project management" + }, + { + "fullname": "Alessandra Bilardi", + "type": "Talk", + "title": "The Art of Data Visualization" + }, + { + "fullname": "Lovisa", + "type": "Talk", + "title": "A love letter to messaging: Celebrating RabbitMQ's journey" + }, + { + "fullname": "Ilyas Timour", + "type": "Talk", + "title": "Autonomous driving, how Python drives Formula Racing cars" + }, + { + "fullname": "Rodrigo Girão Serrão", + "type": "Talk", + "title": "A tour of the module itertools" + }, + { + "fullname": "Tanu Batra", + "type": "Talk", + "title": "Demystifying Design Patterns: A Practical Guide for Developers" + }, + { + "fullname": "Gianluca Romanin", + "type": "Talk", + "title": "Backend-First: Revolutionizing Front-End Development with Django and HTMX" + }, + { + "fullname": "Giovanni Barillari", + "type": "Talk", + "title": "RLoop: an AsyncIO event loop implemented in Rust" + }, + { + "fullname": "Luca Di Vita", + "type": "Talk", + "title": "Cifrari Fantastici E Come Violarli" + }, + { + "fullname": "Luca Gilli", + "type": "Talk", + "title": "How to build your own Tiny Language Model from scratch" + }, + { + "fullname": "Maxim Danilov", + "type": "Talk", + "title": "Distributing complexity in huge python projects." + }, + { + "fullname": "Luca Corbucci", + "type": "Talk", + "title": "Learning Together, Distributed: An Introduction to Federated Learning" + }, + { + "fullname": "Jan Giacomelli", + "type": "Talk", + "title": "Efficient FastAPI testing with pytest, dependency injection and snapshots" + }, + { + "fullname": "Lisa Di Marco", + "type": "Talk", + "title": "Come imparare Python da 0 con un approccio evidence-based" + }, + { + "fullname": "Giuseppe Birardi", + "type": "Talk", + "title": "AI Intuition: Exploring Language Model Latent Space" + }, + { + "fullname": "Sebastiaan Zeeff", + "type": "Talk", + "title": "Don't Panic! A Developer's Guide To Security" + }, + { + "fullname": "Stanislav Zmiev", + "type": "Talk", + "title": "They are not unit tests: a survey of unit-testing anti-patterns" + }, + { + "fullname": "Rami Awar", + "type": "Talk", + "title": "Exploring Functional Options in Python" + }, + { + "fullname": "Jonathan Marcel Ehwald", + "type": "Talk", + "title": "Strawberry Fields Forever: Enjoy building GraphQL Web APIs" + }, + { + "fullname": "Sofie Van Landeghem", + "type": "Keynote", + "title": "Data doesn't lie — but it can mislead: How to ensure integrity of your Machine Learning applications" + } + ] +} \ No newline at end of file diff --git a/data/sponsors/PyConItalia/2022.json b/data/sponsors/PyConItalia/2022.json new file mode 100644 index 0000000..5825d04 --- /dev/null +++ b/data/sponsors/PyConItalia/2022.json @@ -0,0 +1,155 @@ +{ + "year": 2022, + "levels": { + "Keystone": 0, + "Gold": 0, + "Silver": 0, + "Bronze": 0, + "Patron": 0, + "Diversity": 0, + "Startup": 0, + "Partners": 0 + }, + "sponsors": [ + { + "name": "Symphonie Prime", + "website": "https://symphonieprime.com/", + "level": "Keystone" + }, + { + "name": "Telnyx", + "website": "https://telnyx.com/", + "level": "Gold" + }, + { + "name": "Prima", + "website": "http://www.helloprima.com", + "level": "Gold" + }, + { + "name": "Casavo", + "website": "https://casavo.com/it/", + "level": "Silver" + }, + { + "name": "Jina", + "website": "https://github.com/jina-ai/jina", + "level": "Silver" + }, + { + "name": "Octopus Energy", + "website": "https://octopusenergy.it/", + "level": "Silver" + }, + { + "name": "BCG", + "website": "https://www.bcg.com/it-it", + "level": "Bronze" + }, + { + "name": "20tab", + "website": "https://www.20tab.com/", + "level": "Patron" + }, + { + "name": "Maieutical Labs", + "website": "https://maieuticallabs.it/", + "level": "Patron" + }, + { + "name": "Djungle", + "website": "https://djungle.io/", + "level": "Patron" + }, + { + "name": "EuroPython Society", + "website": "https://www.europython-society.org/", + "level": "Diversity" + }, + { + "name": "Nephila", + "website": "https://www.nephila.digital/it/", + "level": "Diversity" + }, + { + "name": "Python Software Foundation", + "website": "https://www.python.org/psf/", + "level": "Diversity" + }, + { + "name": "ClearBox AI", + "website": "https://clearbox.ai/", + "level": "Startup" + }, + { + "name": "Fabio Lamanna", + "website": "http://www.fabiolamanna.it/", + "level": "Startup" + }, + { + "name": "Vedrai", + "website": "https://vedrai.com/", + "level": "Startup" + }, + { + "name": "iGenius", + "website": "https://igenius.ai/", + "level": "Startup" + }, + { + "name": "Roll Studio", + "website": "https://rollstudio.co.uk", + "level": "Partners" + }, + { + "name": "Top-IX", + "website": "https://www.top-ix.org/it/home/", + "level": "Partners" + }, + { + "name": "Python Biella Group", + "website": "https://pythonbiellagroup.it/", + "level": "Partners" + }, + { + "name": "DataMasters", + "website": "https://datamasters.it/", + "level": "Partners" + }, + { + "name": "GrUSP", + "website": "https://www.grusp.org/", + "level": "Partners" + }, + { + "name": "PyRE", + "website": "https://pyre.it", + "level": "Partners" + }, + { + "name": "In Sprint Srl", + "website": "https://www.in-sprint.com/", + "level": "Partners" + }, + { + "name": "Speck&Tech", + "website": "https://speckand.tech/", + "level": "Partners" + }, + { + "name": "Packt", + "website": "https://packt.link/pyconitalia2025", + "level": "Partners" + }, + { + "name": "Fresh Lemonade Gardens", + "website": "https://www.freshlemonadegardens.com/", + "level": "Partners" + }, + { + "name": "Python Milano", + "website": "http://milano.python.it", + "level": "Partners" + } + ] +} \ No newline at end of file diff --git a/data/sponsors/PyConItalia/2023.json b/data/sponsors/PyConItalia/2023.json new file mode 100644 index 0000000..b2ac365 --- /dev/null +++ b/data/sponsors/PyConItalia/2023.json @@ -0,0 +1,254 @@ +{ + "year": 2023, + "levels": { + "Gold": 0, + "Silver": 0, + "Bronze": 0, + "Patron": 0, + "Startup": 0, + "Diversity": 0, + "Partner": 0 + }, + "sponsors": [ + { + "name": "Sentry", + "website": "https://sentry.io/welcome/", + "level": "Gold" + }, + { + "name": "Thux Code", + "website": "https://thux.it/it/thux-code/", + "level": "Silver" + }, + { + "name": "Octopus Energy", + "website": "https://octopusenergy.it/", + "level": "Silver" + }, + { + "name": "84codes", + "website": "http://www.cloudamqp.com", + "level": "Silver" + }, + { + "name": "Fiscozen", + "website": "https://www.fiscozen.it/", + "level": "Silver" + }, + { + "name": "Deepset", + "website": "https://www.deepset.ai/", + "level": "Bronze" + }, + { + "name": "Orobix", + "website": "https://orobix.com/", + "level": "Bronze" + }, + { + "name": "bit4id", + "website": "http://www.bit4id.com/", + "level": "Bronze" + }, + { + "name": "Hype", + "website": "https://www.hype.it", + "level": "Bronze" + }, + { + "name": "20tab", + "website": "https://www.20tab.com/", + "level": "Patron" + }, + { + "name": "Paneido", + "website": "https://www.paneido.com/", + "level": "Patron" + }, + { + "name": "Quix", + "website": "https://quix.io/", + "level": "Patron" + }, + { + "name": "Witapp", + "website": "https://www.witapp.it/", + "level": "Patron" + }, + { + "name": "BIP Group", + "website": "https://www.bipxtech.com/en/home/", + "level": "Patron" + }, + { + "name": "Fabio Lamanna", + "website": "http://www.fabiolamanna.it/", + "level": "Startup" + }, + { + "name": "E42", + "website": "https://www.elan42.com/", + "level": "Startup" + }, + { + "name": "EuroPython Society", + "website": "https://www.europython-society.org/", + "level": "Diversity" + }, + { + "name": "Nephila", + "website": "https://www.nephila.digital/it/", + "level": "Diversity" + }, + { + "name": "Python Software Foundation", + "website": "https://www.python.org/psf/", + "level": "Diversity" + }, + { + "name": "Develer", + "website": "https://www.develer.com", + "level": "Partner" + }, + { + "name": "Top-IX", + "website": "https://www.top-ix.org/it/home/", + "level": "Partner" + }, + { + "name": "Manning", + "website": "https://www.manning.com/", + "level": "Partner" + }, + { + "name": "Python Biella Group", + "website": "https://pythonbiellagroup.it/", + "level": "Partner" + }, + { + "name": "DataMasters", + "website": "https://datamasters.it/", + "level": "Partner" + }, + { + "name": "GrUSP", + "website": "https://www.grusp.org/", + "level": "Partner" + }, + { + "name": "Speck&Tech", + "website": "https://speckand.tech/", + "level": "Partner" + }, + { + "name": "Python Milano", + "website": "http://milano.python.it", + "level": "Partner" + }, + { + "name": "theRedCode", + "website": "https://www.theredcode.it/", + "level": "Partner" + }, + { + "name": "Schrödinger Hat", + "website": "https://www.schrodinger-hat.it/", + "level": "Partner" + }, + { + "name": "Come to Code", + "website": "https://www.cometocode.it/", + "level": "Partner" + }, + { + "name": "GDG Pisa", + "website": "https://gdgpisa.it/", + "level": "Partner" + }, + { + "name": "WTM Pisa", + "website": "https://gdgpisa.it/wtm", + "level": "Partner" + }, + { + "name": "PointerPodcast", + "website": "https://pointerpodcast.it/", + "level": "Partner" + }, + { + "name": "firenze.dev", + "website": "https://firenze.dev/community", + "level": "Partner" + }, + { + "name": "Mozilla Italia", + "website": "https://www.mozillaitalia.org/", + "level": "Partner" + }, + { + "name": "EA Data Science/ML/AI", + "website": "https://forum.effectivealtruism.org/groups/zhBeNLrGug2EvhnfS", + "level": "Partner" + }, + { + "name": "ENGIM Torino", + "website": "http://www.engimtorino.net/", + "level": "Partner" + }, + { + "name": "She Tech", + "website": "https://shetechitaly.org/eventi/", + "level": "Partner" + }, + { + "name": "WTM Italia", + "website": "https://www.facebook.com/WTMItalia", + "level": "Partner" + }, + { + "name": "Codemotion", + "website": "http://codemo.tech/partners", + "level": "Partner" + }, + { + "name": "pisa.dev", + "website": "https://pisa.dev/", + "level": "Partner" + }, + { + "name": "Women In Voice Italy", + "website": "https://womeninvoice.org/wiv-italy/", + "level": "Partner" + }, + { + "name": "Django Girls Italia", + "website": "https://djangogirls.org/pt/bologna/", + "level": "Partner" + }, + { + "name": "NumFocus", + "website": "https://numfocus.org/", + "level": "Partner" + }, + { + "name": "Apogeo Editore", + "website": "https://www.apogeonline.com/", + "level": "Partner" + }, + { + "name": "Product Management Day", + "website": "https://www.productmanagementday.com/", + "level": "Partner" + }, + { + "name": "XstreamData Lab", + "website": "https://www.meetup.com/it-IT/xstream-data/", + "level": "Partner" + }, + { + "name": "42 Firenze", + "website": "https://42firenze.it/", + "level": "Partner" + } + ] +} \ No newline at end of file diff --git a/data/sponsors/PyConItalia/2024.json b/data/sponsors/PyConItalia/2024.json new file mode 100644 index 0000000..8cc0923 --- /dev/null +++ b/data/sponsors/PyConItalia/2024.json @@ -0,0 +1,261 @@ +{ + "year": 2024, + "levels": { + "Keystone": 10000, + "Gold": 7000, + "Silver": 5000, + "Exclusive Tech Partner": 6000, + "Bronze": 3000, + "Patron": 1000, + "Startup": 500, + "Diversity": 1000, + "Media Partners": 0 + }, + "sponsors": [ + { + "name": "Kraken", + "website": "https://kraken.tech/", + "level": "Keystone" + }, + { + "name": "Vedrai", + "website": "https://vedrai.com/", + "level": "Gold" + }, + { + "name": "Pydantic", + "website": "https://pydantic.dev/", + "level": "Gold" + }, + { + "name": "20tab", + "website": "https://www.20tab.com/", + "level": "Silver" + }, + { + "name": "Fiscozen", + "website": "https://www.fiscozen.it/", + "level": "Silver" + }, + { + "name": "Generali", + "website": "http://www.gogenerali.com", + "level": "Silver" + }, + { + "name": "Sentry", + "website": "https://sentry.io/welcome/", + "level": "Exclusive Tech Partner" + }, + { + "name": "Bloomberg", + "website": "https://www.bloomberg.com/company/", + "level": "Bronze" + }, + { + "name": "Immobiliare.it", + "website": "https://labs.immobiliare.it/", + "level": "Bronze" + }, + { + "name": "JetBrains", + "website": "https://www.jetbrains.com/", + "level": "Bronze" + }, + { + "name": "Thux Code", + "website": "https://thux.it/it/thux-code/", + "level": "Patron" + }, + { + "name": "APPBOX", + "website": "https://appbox.cloud/", + "level": "Patron" + }, + { + "name": "Dvision Lab", + "website": "https://dvisionlab.it/", + "level": "Patron" + }, + { + "name": "AppSignal", + "website": "https://www.appsignal.com/", + "level": "Patron" + }, + { + "name": "Dygma", + "website": "https://dygma.com/", + "level": "Patron" + }, + { + "name": "subito.it", + "website": "https://www.subito.it", + "level": "Patron" + }, + { + "name": "Fabio Lamanna", + "website": "http://www.fabiolamanna.it/", + "level": "Startup" + }, + { + "name": "E42", + "website": "https://www.elan42.com/", + "level": "Startup" + }, + { + "name": "Barisoft", + "website": "https://www.barisoft.it/", + "level": "Startup" + }, + { + "name": "Smitten", + "website": "https://smitten.fun/", + "level": "Startup" + }, + { + "name": "EuroPython Society", + "website": "https://www.europython-society.org/", + "level": "Diversity" + }, + { + "name": "Nephila", + "website": "https://www.nephila.digital/it/", + "level": "Diversity" + }, + { + "name": "Python Software Foundation", + "website": "https://www.python.org/psf/", + "level": "Diversity" + }, + { + "name": "Seeweb", + "website": "https://www.seeweb.it", + "level": "Diversity" + }, + { + "name": "Top-IX", + "website": "https://www.top-ix.org/it/home/", + "level": "Media Partners" + }, + { + "name": "Python Biella Group", + "website": "https://pythonbiellagroup.it/", + "level": "Media Partners" + }, + { + "name": "GrUSP", + "website": "https://www.grusp.org/", + "level": "Media Partners" + }, + { + "name": "PyRE", + "website": "https://pyre.it", + "level": "Media Partners" + }, + { + "name": "Speck&Tech", + "website": "https://speckand.tech/", + "level": "Media Partners" + }, + { + "name": "Python Milano", + "website": "http://milano.python.it", + "level": "Media Partners" + }, + { + "name": "theRedCode", + "website": "https://www.theredcode.it/", + "level": "Media Partners" + }, + { + "name": "Schrödinger Hat", + "website": "https://www.schrodinger-hat.it/", + "level": "Media Partners" + }, + { + "name": "GDG Pisa", + "website": "https://gdgpisa.it/", + "level": "Media Partners" + }, + { + "name": "WTM Pisa", + "website": "https://gdgpisa.it/wtm", + "level": "Media Partners" + }, + { + "name": "firenze.dev", + "website": "https://firenze.dev/community", + "level": "Media Partners" + }, + { + "name": "She Tech", + "website": "https://shetechitaly.org/eventi/", + "level": "Media Partners" + }, + { + "name": "WTM Italia", + "website": "https://www.facebook.com/WTMItalia", + "level": "Media Partners" + }, + { + "name": "Codemotion", + "website": "http://codemo.tech/partners", + "level": "Media Partners" + }, + { + "name": "pisa.dev", + "website": "https://pisa.dev/", + "level": "Media Partners" + }, + { + "name": "Django Girls Italia", + "website": "https://djangogirls.org/pt/bologna/", + "level": "Media Partners" + }, + { + "name": "Apogeo Editore", + "website": "https://www.apogeonline.com/", + "level": "Media Partners" + }, + { + "name": "PyCon Lithuania", + "website": "https://pycon.lt/2024", + "level": "Media Partners" + }, + { + "name": "DjangoCon EU", + "website": "https://2024.djangocon.eu/", + "level": "Media Partners" + }, + { + "name": "PLUG", + "website": "https://www.pignolalug.it/", + "level": "Media Partners" + }, + { + "name": "PyBari", + "website": "https://bari.python.it/", + "level": "Media Partners" + }, + { + "name": "Python Pescara", + "website": "https://pescara.python.it/", + "level": "Media Partners" + }, + { + "name": "PyRoma", + "website": "https://t.me/pyroma", + "level": "Media Partners" + }, + { + "name": "Python Torino", + "website": "https://torino.python.it/", + "level": "Media Partners" + }, + { + "name": "Tripsitta", + "website": "https://tripsitta.com/", + "level": "Media Partners" + } + ] +} diff --git a/data/sponsors/PyConItalia/2025.json b/data/sponsors/PyConItalia/2025.json new file mode 100644 index 0000000..d90e7f7 --- /dev/null +++ b/data/sponsors/PyConItalia/2025.json @@ -0,0 +1,315 @@ +{ + "year": 2025, + "levels": { + "Keystone": 15000, + "Gold": 10000, + "Silver": 7300, + "Bronze": 3000, + "Patron": 1500, + "Startup": 600, + "Kinship": 1000, + "Media Partners": 0 + }, + "sponsors": [ + { + "name": "Prima", + "website": "http://www.helloprima.com", + "level": "Keystone" + }, + { + "name": "Qube RT", + "website": "https://www.qube-rt.com/", + "level": "Gold" + }, + { + "name": "NTT DATA", + "website": "https://it.nttdata.com/", + "level": "Gold" + }, + { + "name": "Zanichelli DATA Office", + "website": "https://github.com/ZanichelliEditore/data_office", + "level": "Gold" + }, + { + "name": "Kraken", + "website": "https://kraken.tech/", + "level": "Silver" + }, + { + "name": "Generali", + "website": "http://www.gogenerali.com", + "level": "Silver" + }, + { + "name": "VARgroup", + "website": "https://www.vargroup.com/", + "level": "Silver" + }, + { + "name": "Apify", + "website": "https://apify.com/", + "level": "Silver" + }, + { + "name": "FastAPI", + "website": "https://fastapicloud.com/", + "level": "Silver" + }, + { + "name": "Nephila", + "website": "https://www.nephila.digital/it/", + "level": "Bronze" + }, + { + "name": "Fiscozen", + "website": "https://www.fiscozen.it/", + "level": "Bronze" + }, + { + "name": "Bloomberg", + "website": "https://www.bloomberg.com/company/", + "level": "Bronze" + }, + { + "name": "AppSignal", + "website": "https://www.appsignal.com/", + "level": "Bronze" + }, + { + "name": "Crif", + "website": "https://www.crif.com/", + "level": "Bronze" + }, + { + "name": "Tenaris", + "website": "https://www.tenaris.com/en", + "level": "Bronze" + }, + { + "name": "20tab", + "website": "https://www.20tab.com/", + "level": "Patron" + }, + { + "name": "Thux Code", + "website": "https://thux.it/it/thux-code/", + "level": "Patron" + }, + { + "name": "Barisoft", + "website": "https://www.barisoft.it/", + "level": "Patron" + }, + { + "name": "Zattoo", + "website": "https://zattoo.com/int", + "level": "Patron" + }, + { + "name": "devpunks", + "website": "https://www.devpunks.com/", + "level": "Patron" + }, + { + "name": "Fondazione CNI", + "website": "https://mying.it/", + "level": "Patron" + }, + { + "name": "BPER", + "website": "https://www.bper.it/", + "level": "Patron" + }, + { + "name": "Fabio Lamanna", + "website": "http://www.fabiolamanna.it/", + "level": "Startup" + }, + { + "name": "Cargoful", + "website": "https://cargoful.tech/", + "level": "Startup" + }, + { + "name": "ML Cube", + "website": "http://mlcube.com", + "level": "Startup" + }, + { + "name": "EuroPython Society", + "website": "https://www.europython-society.org/", + "level": "Kinship" + }, + { + "name": "Python Software Foundation", + "website": "https://www.python.org/psf/", + "level": "Kinship" + }, + { + "name": "Packt", + "website": "https://packt.link/pyconitalia2025", + "level": "Kinship" + }, + { + "name": "Django Software Foundation", + "website": "https://www.djangoproject.com/", + "level": "Kinship" + }, + { + "name": "Regione Emilia Romagna", + "website": "https://emiliaromagnaturismo.it/it", + "level": "Kinship" + }, + { + "name": "Top-IX", + "website": "https://www.top-ix.org/it/home/", + "level": "Media Partners" + }, + { + "name": "Python Biella Group", + "website": "https://pythonbiellagroup.it/", + "level": "Media Partners" + }, + { + "name": "DataMasters", + "website": "https://datamasters.it/", + "level": "Media Partners" + }, + { + "name": "GrUSP", + "website": "https://www.grusp.org/", + "level": "Media Partners" + }, + { + "name": "PyRE", + "website": "https://pyre.it", + "level": "Media Partners" + }, + { + "name": "Speck&Tech", + "website": "https://speckand.tech/", + "level": "Media Partners" + }, + { + "name": "Python Milano", + "website": "http://milano.python.it", + "level": "Media Partners" + }, + { + "name": "theRedCode", + "website": "https://www.theredcode.it/", + "level": "Media Partners" + }, + { + "name": "Schrödinger Hat", + "website": "https://www.schrodinger-hat.it/", + "level": "Media Partners" + }, + { + "name": "GDG Pisa", + "website": "https://gdgpisa.it/", + "level": "Media Partners" + }, + { + "name": "WTM Pisa", + "website": "https://gdgpisa.it/wtm", + "level": "Media Partners" + }, + { + "name": "PointerPodcast", + "website": "https://pointerpodcast.it/", + "level": "Media Partners" + }, + { + "name": "firenze.dev", + "website": "https://firenze.dev/community", + "level": "Media Partners" + }, + { + "name": "She Tech", + "website": "https://shetechitaly.org/eventi/", + "level": "Media Partners" + }, + { + "name": "WTM Italia", + "website": "https://www.facebook.com/WTMItalia", + "level": "Media Partners" + }, + { + "name": "Codemotion", + "website": "http://codemo.tech/partners", + "level": "Media Partners" + }, + { + "name": "pisa.dev", + "website": "https://pisa.dev/", + "level": "Media Partners" + }, + { + "name": "Django Girls Italia", + "website": "https://djangogirls.org/pt/bologna/", + "level": "Media Partners" + }, + { + "name": "Apogeo Editore", + "website": "https://www.apogeonline.com/", + "level": "Media Partners" + }, + { + "name": "PyBari", + "website": "https://bari.python.it/", + "level": "Media Partners" + }, + { + "name": "Python Pescara", + "website": "https://pescara.python.it/", + "level": "Media Partners" + }, + { + "name": "PyRoma", + "website": "https://t.me/pyroma", + "level": "Media Partners" + }, + { + "name": "Python Torino", + "website": "https://torino.python.it/", + "level": "Media Partners" + }, + { + "name": "Python Marche", + "website": "https://marche.python.it/", + "level": "Media Partners" + }, + { + "name": "Python Catania", + "website": "https://catania.python.it/", + "level": "Media Partners" + }, + { + "name": "PugliaTechs", + "website": "https://www.pugliatechs.com/", + "level": "Media Partners" + }, + { + "name": "AIHeroes", + "website": "https://aiheroes.it/2025/", + "level": "Media Partners" + }, + { + "name": "Refresh Academy", + "website": "https://refresh-academy.org/", + "level": "Media Partners" + }, + { + "name": "Designing Success - Community", + "website": "https://www.linkedin.com/company/designing-success-community", + "level": "Media Partners" + }, + { + "name": "PyCampania", + "website": "https://www.meetup.com/it-IT/pycampania/", + "level": "Media Partners" + } + ] +} \ No newline at end of file diff --git a/scripts/pyconitalia.py b/scripts/pyconitalia.py new file mode 100644 index 0000000..6f3657c --- /dev/null +++ b/scripts/pyconitalia.py @@ -0,0 +1,259 @@ +import json +import sys +import argparse +from pathlib import Path +from typing import Any, TypedDict + +import requests +import logging + +logger = logging.getLogger(__name__) + + +class GraphQLPayload(TypedDict): + query: str + variables: dict[str, str] + + +class GraphQLResponse(TypedDict): + data: dict[str, dict[str, Any]] + errors: list[dict[str, Any]] | None + + +def fetch_graphql_data(query: str, variables: dict[str, str]) -> GraphQLResponse: + """ + Fetch data from the PyCon Italia GraphQL endpoint. + """ + headers = { + "Content-Type": "application/json", + } + + payload: GraphQLPayload = { + "query": query, + "variables": variables, + } + + try: + response = requests.post( + "https://pycon.it/graphql", json=payload, headers=headers + ) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException: + logger.exception("Error fetching data:") + sys.exit(1) + + +def get_pycon_sponsors(conference_code: str) -> GraphQLResponse: + """ + Fetch sponsors data from PyCon Italia GraphQL API. + """ + + query = """ + query GetSponsors($code: String!) { + conference(code: $code) { + sponsorsByLevel { + level + sponsors { + name + link + } + } + sponsorLevels { + name + price + } + start + } + } + """ + + variables = {"code": conference_code} + + return fetch_graphql_data(query, variables) + + +def get_pycon_speakers(conference_code: str) -> GraphQLResponse: + """ + Fetch speakers data from PyCon Italia GraphQL API. + """ + + query = """ + query GetSpeakers($code: String!) { + conference(code: $code) { + start + days { + slots { + items { + title + speakers { + fullName + } + type + } + } + } + } + } + """ + + variables = {"code": conference_code} + + return fetch_graphql_data(query, variables) + + +class Sponsor(TypedDict): + name: str + website: str + level: str + + +class SponsorsData(TypedDict): + year: int + levels: dict[str, int] + sponsors: list[Sponsor] + + +class Speaker(TypedDict): + fullname: str + type: str + title: str + + +class SpeakersData(TypedDict): + year: int + speakers: list[Speaker] + + +def format_sponsors_data(raw_data: GraphQLResponse) -> SponsorsData: + """ + Format the raw GraphQL response into a structured format. + """ + if "errors" in raw_data and raw_data["errors"]: + raise ValueError(f"GraphQL errors: {raw_data['errors']}") + + conference_data = raw_data["data"]["conference"] + sponsors_by_level = conference_data["sponsorsByLevel"] + sponsor_levels = conference_data["sponsorLevels"] + start_date = conference_data["start"] + + # Extract year from start date + year = int(start_date.split("-")[0]) + + # Create levels dictionary + levels_dict: dict[str, int] = {} + for level_data in sponsor_levels: + name = level_data["name"] + price_str = level_data["price"] + # Convert price string to integer (e.g., "15000.00" -> 15000) + try: + price = int(float(price_str)) + except (ValueError, TypeError): + price = 0 # fallback for invalid prices + levels_dict[name] = price + + # Create sponsors list in the format you specified + sponsors_list: list[Sponsor] = [] + for level_data in sponsors_by_level: + level = level_data["level"] + sponsors = level_data["sponsors"] + + for sponsor in sponsors: + sponsors_list.append( + {"name": sponsor["name"], "website": sponsor["link"], "level": level} + ) + + return {"year": year, "levels": levels_dict, "sponsors": sponsors_list} + + +def format_speakers_data(raw_data: GraphQLResponse) -> SpeakersData: + """ + Format the raw GraphQL response into a structured speakers format. + """ + if "errors" in raw_data and raw_data["errors"]: + raise ValueError(f"GraphQL errors: {raw_data['errors']}") + + conference_data = raw_data["data"]["conference"] + days = conference_data["days"] + start_date = conference_data["start"] + + # Create speakers list + speakers_list: list[Speaker] = [] + + # Track processed items to avoid duplicates + + # Extract year from start date + year = int(start_date.split("-")[0]) + + for day in days: + for slot in day["slots"]: + for item in slot["items"]: + # Only process training, talk, and keynote items + if item["type"] not in ["training", "talk", "keynote"]: + continue + + title = item["title"] + item_type = item["type"] + speakers = item["speakers"] + + # If no speakers, skip this item + if not speakers: + continue + + # Add one entry per speaker + for speaker in speakers: + speakers_list.append({ + "fullname": speaker["fullName"], + "type": item_type.title(), # Capitalize first letter + "title": title + }) + + return {"year": year, "speakers": speakers_list} + + +def save_to_json(data: SponsorsData | SpeakersData, output_file: Path) -> None: + """ + Save data to a JSON file. + """ + try: + with open(output_file, "w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=4) + logger.info("Data saved to: %s", output_file) + except IOError as e: + logger.error("Error saving file: %s", e) + sys.exit(1) + + +def main(): + parser = argparse.ArgumentParser( + description="Fetch data from PyCon Italia GraphQL API" + ) + parser.add_argument( + "--conference-code", required=True, help="Conference code (e.g., pycon12)" + ) + args = parser.parse_args() + + logger.info( + "Fetching data for conference: %s", args.conference_code + ) + + raw_data = get_pycon_speakers(args.conference_code) + formatted_data = format_speakers_data(raw_data) + output_path = Path("data/speakers/PyConItalia") / f"{formatted_data['year']}.json" + output_path.parent.mkdir(parents=True, exist_ok=True) + save_to_json(formatted_data, output_path) + + raw_data = get_pycon_sponsors(args.conference_code) + formatted_data = format_sponsors_data(raw_data) + output_path = Path("data/sponsors/PyConItalia") / f"{formatted_data['year']}.json" + output_path.parent.mkdir(parents=True, exist_ok=True) + save_to_json(formatted_data, output_path) + + if not raw_data: + logger.error("No data received from the API") + sys.exit(1) + + + +if __name__ == "__main__": + main()