diff --git a/AGENTS.md b/AGENTS.md index ca4dfac52..c8a3d74ec 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -71,6 +71,19 @@ re-running an importer against `content/`, which is the destructive thing the paragraph above measures. The export is not part of maintaining this site, and a correction to a published page goes in the page. +The one feed that keeps moving is the YouTube channel. `data/channel_videos.yaml` +is its inventory, the list this site maintains: one entry per video of the +channel, with the id, the title as the channel shows it, and the decision, +`placed: true` when an event page carries the link, or `placed: false` with a +reason. `bin/list-channel` reads the channel with `yt-dlp` and prints what the +inventory does not hold, which is how a new video gets noticed: write its link +on the talk of its event page (a link of type `video`, or an entry of +`session_videos` for the recording of a whole session), then add the entry. +`bin/check-content` fails on a placed entry no page carries, on a YouTube link +no entry lists, and on an unplaced entry with no reason, and it never reads the +network. `yt-dlp` is not in this repository and not in CI: `bin/list-channel` +says how to install it when it is absent. + **`unsafe=true` in `[markup.goldmark.renderer]`.** Raw HTML in front matter and page bodies renders unescaped. Two content files still carry it, `content/events/pyday_bcn/pyday_bcn_2018.md` and `pyday_bcn_2019.md`, which @@ -205,7 +218,7 @@ plausible but different result. | `themes/pybcn_theme/` | The theme, **vendored in-tree**, not a submodule | | `themes/pybcn_theme/layouts/partials/` | Most of the interesting template logic | | `static/archives/` | Verbatim mirrors of pre-Hugo sites, copied unprocessed | -| `data/` | Tables the templates read: `roles.yaml` maps a heading to a role, `role_emoji.yaml` a role to a glyph, `event_emoji.yaml` an event to a glyph, `venues.yaml` the exact `venue` string of an event to the short name the `/events/` list prints (the page of the meetup keeps the full string) | +| `data/` | Tables the templates read: `roles.yaml` maps a heading to a role, `role_emoji.yaml` a role to a glyph, `event_emoji.yaml` an event to a glyph, `venues.yaml` the exact `venue` string of an event to the short name the `/events/` list prints (the page of the meetup keeps the full string). Plus `channel_videos.yaml`, the inventory of the YouTube channel, which `bin/check-content` reads and `bin/list-channel` refreshes | | `bin/` | Setup and build scripts, the checks, `bin/list-channel` (names a channel video the inventory lacks; needs `yt-dlp` and the network), the one-time `bin/import-*` scripts, plus the gitignored Hugo binary | | `.hugo-version` | The pinned Hugo version, single source of truth | @@ -213,7 +226,7 @@ The checks, which are what a pull request has to pass: | Script | What it rejects | |---|---| -| `bin/check-content` | A broken reference, a photo that is not square, a source far larger than the build asks for, a field that no longer exists, a `venue` string with no row in `data/venues.yaml`, a row of that table no event uses, an `end_date` that is not a date or not later than `date` | +| `bin/check-content` | A broken reference, a photo that is not square, a source far larger than the build asks for, a field that no longer exists, a gallery photo the template would skip in silence, a session video with no title or no url or listed twice on its page, a channel video the inventory marks placed that no page carries, a YouTube link the inventory does not list, an unplaced video with no reason, a `venue` string with no row in `data/venues.yaml`, a row of that table no event uses, an `end_date` that is not a date or not later than `date` | | `bin/check-html-safety` | Dangerous raw HTML in content, with an allowlist for the legitimate embeds | | `bin/check-rendered` | The same, on the built pages, plus any `http://` URL. Run it against a directory you built, never against `public/` while a dev server is writing there | diff --git a/LICENSING.md b/LICENSING.md index c2e1098a5..6aa643fbc 100644 --- a/LICENSING.md +++ b/LICENSING.md @@ -112,6 +112,26 @@ of the people in them, and that permission can be withdrawn. The event photographs are the same case: the photographer keeps the copyright, and the people in them keep their image rights. +#### Where the event photographs come from + +Most of them were taken by a member of the association at the event and +published on the association's own social media on the day. The archive +import brings those back here. Each one credits the account that published +it and links to the post it came from, so the origin is on the page and the +post itself can prove it. The account is not the photographer: a member of +the association took the photograph, and the copyright stays with them. + +A photograph the association only **shared**, rather than took, is never +imported. Its copyright belongs to whoever took it, and sharing a post is not +permission to republish the image. `bin/import-x-photos` separates those and +lists them for a human to ask one by one. + +An event photograph also shows people who came to listen, and they gave no +permission for anything. The association prefers a wide view of a room or a +speaker on stage, over a portrait of somebody who came to learn. **To ask for +a photograph to come down, write to the association.** It comes down, and +nobody has to explain why. + ### Person pages `content/people/` holds one page per person. Each person wrote their own text diff --git a/README.md b/README.md index 823fc7e4c..5856ed723 100644 --- a/README.md +++ b/README.md @@ -149,11 +149,12 @@ shortcode, a partial, the theme, a Hugo internal template or the minifier. The check needs a build made with `-D`. Three draft pages are a canary: a sponsor and a person whose name closes the attribute it sits in and opens a -link to `canary.invalid`, listed on `content/canary.md` through the real -sponsor and people grids. The check fails if either name did not reach that -page as text, or if the page is missing, so the fixture cannot disappear -without notice. The deploy workflow builds without `-D`, so the canary never -reaches the live site. +link to `canary.invalid`, plus a photo caption that does the same with a +protocol relative address, listed on `content/canary.md` through the real +sponsor grid, people grid and photo gallery. The check fails if any of the +three did not reach that page as text, or if the page is missing, so the +fixture cannot disappear without notice. The deploy workflow builds without +`-D`, so the canary never reaches the live site. ``` ./bin/hugo --minify -D -d public diff --git a/bin/check-content b/bin/check-content index 3a4e4604b..5f8356e84 100755 --- a/bin/check-content +++ b/bin/check-content @@ -6,6 +6,16 @@ match its filename, a duplicate id, a page that lists a person or sponsor id with no page behind it, a declared photo with no file behind it, and a remote photo_url. It warns about a person photo with no colour in it. +For an event photo gallery it catches what the template drops in silence: a +declared photo with no file, a photo with no caption, a photo that points at +a talk of another event, and a talk that credits a person with no page. + +For the videos it checks data/channel_videos.yaml, the inventory of the +YouTube channel, against the pages: a video the inventory marks placed has +its link on some event page, every YouTube link of an event front matter +is in the inventory, and a video the inventory leaves out carries a +reason. No network: bin/list-channel is what reads the channel. + For the venues it checks data/venues.yaml, the short name the /events/ list prints for each venue, against the pages: every venue string of an event front matter has a row, and every row is the venue of some event. A venue @@ -56,6 +66,15 @@ PHOTO_DIRS = [ ROOT / "assets" / "images" / "people", ] +# The photos of an event gallery. partials/photo_gallery.html resolves a +# declared file as images/photos/ with resources.Get, which reads the +# theme assets and the project ones, so a file in either place renders. Same +# two roots as PHOTO_DIRS, and static/ counts for neither. +GALLERY_DIRS = [ + ROOT / "themes" / "pybcn_theme" / "assets" / "images" / "photos", + ROOT / "assets" / "images" / "photos", +] + FRONT_MATTER = re.compile(r"\A---\r?\n(.*?)\r?\n---[ \t]*(?:\r?\n|\Z)", re.S) errors = [] @@ -280,6 +299,54 @@ def report_small(small): f"the grid. Smallest: {shown}. Replacing the file is the only fix.") +def check_gallery(people): + """Every item of an event photo gallery must reach the page it declares. + + partials/photo_gallery.html skips an item whose file it cannot resolve, + and an item with no caption, on purpose. A missing asset would otherwise + stop the build, and an image with no accessible name is worse on the page + than one photo fewer: bin/check-rendered fails the site for an img with + no alt, and the caption is that alt. The template drops a talk id it + cannot find just as quietly, and prints a speaker id that matches no + person as the id with its hyphens taken out. + + Every one of those is a data mistake that reaches a reader as a page with + something missing from it, and nothing else reports it. So the silence of + the template is only safe while this check says the words out loud: the + file, the item, and what to fix. + + The gallery of one event points only at the talks of its own file, the + way the template builds its talk index, so a photo that names a talk of + another edition is an error and not a near miss. + """ + for path in sorted((CONTENT / "events").rglob("*.md")): + data = front_matter(path) + if data is None or not data.get("photos"): + continue + photos = data["photos"] + if not isinstance(photos, dict): + error(path, f"'photos' holds {photos!r}, which is not a photos " + f"block. It takes a date, a thread, and items.") + continue + talk_ids = talk_ids_of(path, data, people) + + # Two models of a programme in one file. The migration to talks is + # closing this, and a file is expected to carry both while it runs, + # so a warning: what it costs is a reader seeing the same session + # twice, once from each. + if data.get("events"): + warn(path, "declares both 'events' and 'talks'. The page renders " + "the schedule from both, so a session can show twice. " + "Keep 'talks' and drop 'events' once it is converted.") + + for index, item in enumerate(photos.get("items") or [], start=1): + if not isinstance(item, dict): + error(path, f"photo {index} holds {item!r}, which is not a " + f"photo. It takes a file and a caption.") + continue + check_gallery_item(path, index, item, talk_ids) + + _talk_ids = {} @@ -368,6 +435,88 @@ def report_unnamed(path, unnamed, talks): f"Correct when the source names nobody.") +def check_gallery_item(path, index, item, talk_ids): + """Check one photo of a gallery: its file, caption, talk, and source.""" + name = item.get("file") + label = f"photo {index} '{name}'" if name else f"photo {index}" + found = gallery_file(path, label, name) + if found: + gallery_size(path, label, name, found) + + # The caption is the alt text as well as the visible line, so an item + # without one is skipped rather than rendered without an accessible name. + caption = item.get("caption") + if not str(caption if caption is not None else "").strip(): + error(path, f"{label} has no caption. The caption is the alt text of " + f"the image too, so the gallery leaves the photo out " + f"rather than publish an image nobody can read. Copy the " + f"text of the post.") + + talk_ref = item.get("talk") + if talk_ref and talk_ref not in talk_ids: + known = ", ".join(sorted(talk_ids)) or "none" + error(path, f"{label} points at talk '{talk_ref}', which is not a " + f"talk of this file. The gallery credits a photo to a " + f"talk of its own event only, so the line is dropped. " + f"Use one of: {known}.") + + # The credit line is "Via @account", and the account is the first + # segment of the path of this URL. So a value that is not a post URL + # credits the photo to whatever that segment happens to hold. + source = item.get("source") + if source is not None and not str(source).strip().startswith("https://"): + error(path, f"{label} has source '{source}', which is not an https " + f"URL. The gallery reads the account that gets the credit " + f"out of the path of that URL. Use the address of the " + f"post, or remove the line.") + + +def gallery_file(path, label, name): + """Return the directory that holds this photo, or None after an error.""" + if not name: + error(path, f"{label} has no file. Every item names a file under " + f"{GALLERY_DIRS[0].relative_to(ROOT)}.") + return None + # resources.Get resolves a '..' segment, so a relative path reaches any + # asset of the repository, and the existence check below would pass. Same + # hole bare_file_name closes for a person photo, which cannot be reused + # here: a gallery file is a path, one directory per event. + if ".." in pathlib.PurePosixPath(str(name)).parts: + error(path, f"{label} has a '..' segment. A file is named relative to " + f"{GALLERY_DIRS[0].relative_to(ROOT)} and stays inside " + f"it.") + return None + found = next((d for d in GALLERY_DIRS if (d / str(name)).is_file()), None) + if not found: + where = ", ".join(str(d.relative_to(ROOT)) for d in GALLERY_DIRS) + error(path, f"{label} is in none of: {where}. The gallery skips a " + f"photo it cannot resolve, so the page shows one photo " + f"fewer and says nothing. Add the file, or remove the " + f"item.") + return found + + +def gallery_size(path, label, name, found): + """Warn about a photo larger than the widest variant the gallery asks for. + + The cap is the one SOURCE_CAPS already declares for this directory, so + the two checks cannot drift apart. A warning here and not an error: + check_sources is what fails the build for a source that is both over the + cap and heavy, and this names the gallery photo it belongs to. + """ + cap = source_cap(pathlib.PurePosixPath("photos") / str(name)) + dimensions = image_size(found / str(name)) + if not cap or not dimensions: + return + max_width, max_height = cap + width, height = dimensions + if width > max_width or (max_height and height > max_height): + fits = f"{max_width}x{max_height}" if max_height else f"{max_width} wide" + warn(path, f"{label} is {width}x{height}, over the {fits} the gallery " + f"asks of it, so the build carries pixels no reader gets. " + f"Run bin/fit-sources.") + + # One form per network, so a reader of the files can tell at a glance that two # links point at the same place, and so nobody has to wonder whether # es.linkedin.com and www.linkedin.com are the same profile. The hosts are the @@ -732,6 +881,7 @@ def check_agenda(people): talks = check_talks(path, data, people) for position, slot in enumerate(data.get("agenda") or [], start=1): check_slot(path, position, slot, rooms, talks) + check_session_videos(path, data) def check_rooms(path, data): @@ -813,6 +963,105 @@ def check_links(path, label, links): f"else is listed under Repository.") +def check_session_videos(path, data): + """Check the event-level session_videos block, and that no video of the + page is listed twice. + + A recording of a whole session, a block of lightning talks or the + introduction of an evening, belongs to no talk, so bin/import-videos + writes it as an entry of session_videos: a title and a url. + partials/session_videos.html prints those under a Recordings heading, + and it does what the gallery does with a photo it cannot place: an entry + with no url is skipped in silence, and an entry with no title prints a + Watch link with no title in it. The same URL on a talk link and in the + block, or twice in the block, renders two identical entries, which the + template cannot tell apart from two recordings. Nothing but this check + says any of that out loud. + + The key is session_videos and not videos, because Hugo reads + .Params.videos as the og:video URLs of the page and fails the build on a + list of records there. An entry under that key is reported for the same + reason: the build would say so too, but with a stack of template frames + and no file name a person can act on. + """ + if "videos" in data: + error(path, "carries 'videos', which Hugo reserves for the og:video " + "URLs of a page: a list of records under it stops the " + "build. The recording of a whole session goes in " + "'session_videos'.") + seen = {} + for talk in data.get("talks") or []: + if isinstance(talk, dict): + label = f"talk '{talk.get('title') or talk.get('id')}'" + for url in video_urls_of(talk): + seen.setdefault(url, label) + for position, slot in enumerate(data.get("agenda") or [], start=1): + if isinstance(slot, dict) and not slot.get("talk"): + for url in video_urls_of(slot): + seen.setdefault(url, f"agenda slot {position}") + + entries = data.get("session_videos") + if entries is None: + return + if not isinstance(entries, list): + error(path, f"'session_videos' holds {entries!r}, which is not a list " + f"of videos. Each entry takes a title and a url.") + return + for index, entry in enumerate(entries, start=1): + label = f"session video {index}" + if not isinstance(entry, dict): + error(path, f"{label} holds {entry!r}, which is not a video. It " + f"takes a title and a url.") + continue + if not str(entry.get("title") or "").strip(): + error(path, f"{label} has no title. The title is the only line " + f"the gallery prints over the Watch link, so the entry " + f"would read as a link with no name. Use the title the " + f"channel gives the recording.") + url = str(entry.get("url") or "").strip() + if not url: + error(path, f"{label} has no url. The gallery skips an entry it " + f"cannot link, so the page shows one video fewer and " + f"says nothing. Add the address, or remove the entry.") + continue + if not url.startswith("https://"): + error(path, f"{label} has url '{url}', which is not an https " + f"address. bin/check-rendered fails a built page that " + f"carries an http:// URL.") + if url in seen: + error(path, f"{label} repeats {url}, already on {seen[url]} of " + f"this page. The gallery would list the same video " + f"twice. Keep one of the two.") + else: + seen[url] = label + + +def video_urls_of(record): + """Return the video URLs of one talk or one row of the grid, the links + of type video, as partials/agenda_entry.html and + layouts/_default/meetup.html read them.""" + return [str(link.get("url")) for link in record.get("links") or [] + if isinstance(link, dict) and link.get("type") == "video" and link.get("url")] + + +# The inventory of the YouTube channel: one entry per video of the channel +# with the decision the site took on it, placed or not and why, plus the +# videos of other channels the event pages link. It is the list the site +# maintains. bin/list-channel refreshes it from the channel over the +# network; this check reads the file and the pages and never the network. +INVENTORY = ROOT / "data" / "channel_videos.yaml" + +# The id of a YouTube video inside any of the URL shapes YouTube hands out. +# The pages write watch?v= today, and a hand-written link may arrive in any +# of the others. +YOUTUBE_ID = re.compile( + r"https?://(?:www\.|m\.)?(?:youtube\.com/(?:watch\?(?:[^#\s]*&)?v=|embed/|shorts/|live/|v/)" + r"|youtu\.be/)([A-Za-z0-9_-]{11})") +VIDEO_ID = re.compile(r"\A[A-Za-z0-9_-]{11}\Z") + +# What check_channel_videos counted, for the summary line. +_inventory_summary = None + # The short name of each venue, keyed by the exact string the venue field of # an event carries. layouts/_default/events_index.html prints the short name # in the /events/ list and falls back to the full string for a venue with no @@ -823,6 +1072,159 @@ VENUES = ROOT / "data" / "venues.yaml" _venue_summary = None +def page_video_links(): + """Return {video id: [(path, where)]} for every YouTube link in the front + matter of content/events/. + + The three places a page carries one: the links of a talk, the links of + a row of the grid that holds no talk (the welcome of PyDay BCN 2020), + and the session_videos block. Every link counts, whatever its type: a + YouTube address under slides is still a video this site points at. + """ + found = {} + for path in sorted((CONTENT / "events").rglob("*.md")): + data = front_matter(path) + if data is None: + continue + links = [] + for talk in data.get("talks") or []: + if isinstance(talk, dict): + label = f"talk '{talk.get('id') or talk.get('title')}'" + links += [(label, link) for link in talk.get("links") or []] + for position, slot in enumerate(data.get("agenda") or [], start=1): + if isinstance(slot, dict) and not slot.get("talk"): + links += [(f"agenda slot {position}", link) + for link in slot.get("links") or []] + for index, entry in enumerate(data.get("session_videos") or [], start=1): + links.append((f"session video {index}", entry)) + for where, link in links: + if not isinstance(link, dict): + continue + match = YOUTUBE_ID.search(str(link.get("url") or "")) + if match: + found.setdefault(match.group(1), []).append((path, where)) + return found + + +def check_channel_videos(): + """Check data/channel_videos.yaml against the video links of the pages. + + Three rules, which together turn "a video is missing from a page" from + a thing a reader notices into an error here: + + 1. an entry marked placed has its link on some event page. A video + the channel holds and no page shows is the gap this inventory + exists to close. + 2. every YouTube link of an event front matter is in the inventory, + under videos when the channel holds it and under elsewhere when + another channel does. A link to a video the inventory does not + know is a link nobody decided on. + 3. an entry marked placed: false carries a reason. "Not placed" with + no reason is a video somebody forgot, which looks the same as a + video somebody left out on purpose. + + Also reported, because the rules above mean nothing without them: an + id that is not an 11-character YouTube id, an id listed twice, an entry + with no title, an unplaced entry that a page does link, and a video of + another channel with no channel named. + """ + global _inventory_summary + if not INVENTORY.is_file(): + error(INVENTORY, "is missing. It is the inventory of the YouTube " + "channel, one entry per video with the decision the " + "site took on it. bin/list-channel says how to " + "rebuild it from the channel.") + return + try: + data = yaml.safe_load(INVENTORY.read_text(encoding="utf-8")) + except yaml.YAMLError as exc: + error(INVENTORY, f"is not valid YAML: {exc}") + return + if not isinstance(data, dict): + error(INVENTORY, "does not hold a mapping with 'videos' and 'elsewhere'") + return + + linked = page_video_links() + known = {} + placed = unplaced = elsewhere = 0 + for section in ("videos", "elsewhere"): + entries = data.get(section) + if entries is None: + error(INVENTORY, f"has no '{section}' list") + continue + if not isinstance(entries, list): + error(INVENTORY, f"'{section}' holds {entries!r}, which is not a list") + continue + for index, entry in enumerate(entries, start=1): + label = f"{section} entry {index}" + if not isinstance(entry, dict): + error(INVENTORY, f"{label} holds {entry!r}, which is not a video. " + f"It takes an id, a title, and the decision.") + continue + video_id = str(entry.get("id") or "") + if not VIDEO_ID.match(video_id): + error(INVENTORY, f"{label} has id {video_id!r}, which is not an " + f"11-character YouTube video id") + continue + label = f"{section} entry {video_id}" + if video_id in known: + error(INVENTORY, f"{label} is listed twice, already as {known[video_id]}") + continue + known[video_id] = label + if not str(entry.get("title") or "").strip(): + error(INVENTORY, f"{label} has no title. Use the title the channel " + f"shows, so a person can tell the videos apart.") + if section == "elsewhere": + elsewhere += 1 + if not str(entry.get("channel") or "").strip(): + error(INVENTORY, f"{label} names no channel. An entry under " + f"elsewhere says which channel hosts the video.") + continue + decision = entry.get("placed") + if not isinstance(decision, bool): + error(INVENTORY, f"{label} has placed: {decision!r}. It is true when " + f"an event page carries the link and false, with " + f"a reason, when the video belongs to no page.") + continue + if decision: + placed += 1 + if video_id not in linked: + error(INVENTORY, f"{label} is marked placed, and no event page " + f"carries https://www.youtube.com/watch?v=" + f"{video_id}. Write the link on the talk of " + f"its event (a link of type video), or in " + f"session_videos for the recording of a whole " + f"session, or mark it placed: false with a " + f"reason.") + continue + unplaced += 1 + for path, where in linked.get(video_id, []): + error(INVENTORY, f"{label} is marked placed: false, and " + f"{path.relative_to(ROOT)} carries it on {where}. " + f"Set placed: true, or remove the link.") + if not str(entry.get("reason") or "").strip(): + error(INVENTORY, f"{label} is marked placed: false with no reason. " + f"Say why the video belongs to no page, so a " + f"video left out on purpose does not look like " + f"one somebody forgot.") + + for video_id, places in sorted(linked.items()): + if video_id in known: + continue + for path, where in places: + error(path, f"{where} links the YouTube video {video_id}, which " + f"data/channel_videos.yaml does not list. A video of the " + f"channel goes under videos with placed: true; a video " + f"another channel hosts goes under elsewhere with its " + f"channel.") + + links = sum(len(places) for places in linked.values()) + _inventory_summary = (f"{placed + unplaced} channel videos in the inventory, " + f"{placed} placed, {unplaced} unplaced with a reason, " + f"{elsewhere} videos of other channels; " + f"{links} YouTube links to {len(linked)} videos on the pages.") + + def page_venues(): """Return {venue string: [path]} for every venue of content/events/. @@ -1170,12 +1572,14 @@ def main(): people = collect_ids("people") sponsors = collect_ids("sponsors") check_photos(people) + check_gallery(people) check_logos(sponsors) check_social(people, sponsors) check_sources() listed_people = check_listings(people, sponsors) check_agenda(people) check_dates() + check_channel_videos() check_venues() check_orphans(people, listed_people) check_security_txt() @@ -1189,6 +1593,8 @@ def main(): talks = sum(len(ids) for ids in _talk_ids.values()) print(f"\n{len(people)} people, {len(sponsors)} sponsors, " f"{talks} talks on {len(_talk_ids)} pages checked.") + if _inventory_summary: + print(_inventory_summary) if _venue_summary: print(_venue_summary) print(f"{len(errors)} errors, {len(warnings)} warnings.") diff --git a/bin/check-rendered b/bin/check-rendered index b15e98dfc..7c6b50199 100755 --- a/bin/check-rendered +++ b/bin/check-rendered @@ -90,11 +90,14 @@ the same way. The canary. content/sponsors/canary.md and content/people/canary.md carry a name that is harmless as text and unmistakable as markup: it closes the -attribute it sits in and opens a link to CANARY_HOST. content/canary.md is a -draft page that renders both through the real sponsor and people grids. A -draft is not built without -D, so the production site never carries them, -and a build made with -D does. The check fails if the canary page is missing -or if the two names did not reach it as text, so the fixture cannot silently +attribute it sits in and opens a link to CANARY_HOST. The photo caption of +content/canary.md does the same with a protocol relative address, because +that page reaches a template through safeHTML by design, see the note in +CANARY_NAMES. content/canary.md is a draft page that renders all three +through the real sponsor grid, people grid and photo gallery. A draft is not +built without -D, so the production site never carries them, and a build made +with -D does. The check fails if the canary page is missing or if any of the +three values did not reach it as text, so the fixture cannot silently disappear. --without-canary scans a build made without -D. Findings are matched against ALLOWLIST. An entry names the page or the @@ -128,6 +131,14 @@ CANARY_PAGE = "canary/index.html" CANARY_NAMES = { "sponsor": 'Canary sponsor ">canarycanarycanary]*>(.*)", re.S) @@ -975,7 +1011,8 @@ def main(): "The fixture in content/ or the grid that lists it has changed." % (CANARY_PAGE, " or the ".join(missing))) else: - print("\nCanary: both names reached %s as text, not as markup." % CANARY_PAGE) + print("\nCanary: all %d names reached %s as text, not as markup." + % (len(CANARY_NAMES), CANARY_PAGE)) if failed: return 1 diff --git a/content/canary.md b/content/canary.md index 30baaf713..8a16ea926 100644 --- a/content/canary.md +++ b/content/canary.md @@ -14,10 +14,27 @@ people_sections: - people_per_line: 4 people: - canary +photos: + thread: "https://x.com/PyBCN/status/1" + items: + - file: pyday/group_photo.jpeg + caption: 'Canary caption ">canary30 mentees, coding their first blog in #Django" + source: "https://x.com/PyBCN/status/1535573510210441216" + time: "12:43" + - file: django-2022/03-we-re-doing-a-few-lightning-talks-before-lunch.jpg + caption: "We're doing a few lightning talks before lunch" + source: "https://x.com/PyBCN/status/1535581935594004487" + time: "13:17" + talk: lightning-talks + - file: django-2022/04-cool-catalan-sign-language-recognition-by-roser-ro.jpg + caption: "Cool! Catalan Sign Language recognition, by Roser @roser_13" + source: "https://x.com/PyBCN/status/1535587088107814912" + time: "13:37" + - file: django-2022/05-best-conference-lunch-ever.jpg + caption: "Best conference lunch ever! 🤤" + source: "https://x.com/PyBCN/status/1535609923727392769" + time: "15:08" + - file: django-2022/06-no-siesta-only-coding.jpg + caption: "No siesta, only coding! 💪" + source: "https://x.com/PyBCN/status/1535610876107145220" + time: "15:12" + - file: django-2022/07-let-s-play-a-game.jpg + caption: "Let's play a game!" + source: "https://x.com/PyBCN/status/1535659317659160577" + time: "18:24" + - file: django-2022/08-kathrin-wins-the-prize.jpg + caption: "Kathrin wins the prize!" + source: "https://x.com/PyBCN/status/1535659398210764803" + time: "18:25" + - file: django-2022/09-thanks-for-attending-it-s-been-great.jpg + caption: "Thanks for attending, it's been great!" + source: "https://x.com/PyBCN/status/1535666276240080897" + time: "18:52" + - file: django-2022/10-the-hands-on-django-with-pyladiesbcn-was-a-huge-su.jpg + caption: "The \"Hands-on Django with @PyLadiesBCN\" was a huge success! It was possible thanks to our sponsors:" + source: "https://x.com/PyBCN/status/1536275433578184704" + time: "11:13" + talk: hands-on-django + - file: django-2022/11-finally-a-big-applause-to-all-our-organizers-mento.jpg + caption: "Finally, a big applause to all our Organizers, Mentors, Speakers, Volunteers, and Atendees! @PyLadiesBCN, you rock 🤟" + source: "https://x.com/PyBCN/status/1536275453626961920" + time: "11:13" --- Do you want to learn how to code your own web application? In this workshop for non-experienced women and LGBTIQ+ people, organised by PyLadiesBCN, **we'll learn how to code our own blog with Django** using HTML, CSS and Python. diff --git a/content/events/other_events/pydata_2017_barcelona.md b/content/events/other_events/pydata_2017_barcelona.md index 85c0307d9..b81fc4ccc 100644 --- a/content/events/other_events/pydata_2017_barcelona.md +++ b/content/events/other_events/pydata_2017_barcelona.md @@ -28,6 +28,9 @@ talks: PyData conferences aim to be accessible and community-driven, with novice to advanced level presentations. PyData tutorials and talks bring attendees the latest project features along with cutting-edge use cases.' + links: + - type: video + url: https://www.youtube.com/watch?v=NBliyFXnWeo title_note: 'pyvideo stored the role line of the speaker where the title goes, "Chief Data Scientist and co-founder of Continuum Analytics", and no source names the talk. "Opening keynote" is what it was.' - id: the-magic-behind-pyspark-how-it-impacts-perf-the-future title: The Magic Behind PySpark, how it impacts perf & the "future" @@ -48,6 +51,9 @@ talks: Hopefully no one is scared away from using Spark once they see the 300 small gnome like creatures behind the curtain, but parental guidance is encouraged for those who still believe in magic, reliable distributed systems, and vendor marketing brochures.' + links: + - type: video + url: https://www.youtube.com/watch?v=TI05I_8uS3U - id: a-beginners-guide-to-weather-climate-data title: A Beginners Guide to Weather & Climate Data speakers: @@ -69,6 +75,8 @@ talks: * The raw model data is processed for you when you request weather data through a REST API. Learn how to use a weather API to train a supervised model with historical weather time series and then use the weather forecast data to do predictions. This session provides you with a brief overview of the science behind weather and climate forecasts and gives you the tools to get started with weather data.' links: + - type: video + url: https://www.youtube.com/watch?v=U_Aq2cPxwss - type: slides url: https://www.slideshare.net/MargrietGroenendijk/pydata-barcelona-weather-and-climate-data - id: despicable-machines-how-computers-can-be-assholes @@ -99,6 +107,9 @@ talks: * What''s been done so far (i.e. techniques from recently-published papers). * What to do next: unanswered questions.' + links: + - type: video + url: https://www.youtube.com/watch?v=8kL71zk4KNk - id: how-to-manage-complexity-in-distributed-applications title: How to manage complexity in distributed applications speakers: @@ -121,6 +132,9 @@ talks: This project has been funded by the Spanish Ministry of Economy and Competitivity under the grant IDI-20150936, cofinanced with FEDER funds' + links: + - type: video + url: https://www.youtube.com/watch?v=rPDZg2--5uM - id: feature-importance-and-ensemble-methods-a-new-perspective title: 'Feature Importance and Ensemble Methods : a new perspective' speakers: @@ -174,6 +188,9 @@ talks: 2) Is there a compromise performance/interpretation ?' + links: + - type: video + url: https://www.youtube.com/watch?v=qdEhJ0uT7wk - id: happiness-inside-a-job-a-social-network-analysis title: 'Happiness inside a job: a social network analysis' speakers: @@ -206,6 +223,8 @@ talks: We will also review common mistakes that can happen during the modeling process and, how to prevent invalid data from getting leaked into your machine learning models. To conclude we compare the merits of using a Python framework versus R Language in terms of development time and computational performance. Data set provided by https://myhappyforce.com' links: + - type: video + url: https://www.youtube.com/watch?v=2Ot3gyGLVA0 - type: slides url: https://github.com/Guillem-db/Happiness-inside-a-job-PyDataBcn17 - id: machine-learning-to-know-if-you-r-coming @@ -224,6 +243,9 @@ talks: Some users are more likely to cancel their bookings than others, depending on several factors/conditions. Knowing these factors and how many bookings will be canceled will help hotels to optimize their incomes and maximize their occupancy.' + links: + - type: video + url: https://www.youtube.com/watch?v=IlofEE7Sswc - id: analyzing-code-contributions-to-the-cpython-project-using title: Analyzing code contributions to the CPython project using NetworkX and Matplotlib speakers: @@ -241,6 +263,8 @@ talks: You can download the slides for this talk from https://github.com/jtorrents/thesis/blob/master/presentations/pydata_bcn/cpython_code_contributions.pdf' links: + - type: video + url: https://www.youtube.com/watch?v=4YqMpYqjqps - type: slides url: https://github.com/jtorrents/thesis/blob/master/presentations/pydata_bcn/cpython_code_contributions.pdf - id: running-jupyter-notebook-remotely-in-a-docker-swarm-cluster @@ -259,6 +283,9 @@ talks: https://github.com/jordeu/pytalks/tree/master/20170520_pydata_jupyter_in_a_docker_cluster' + links: + - type: video + url: https://www.youtube.com/watch?v=0XYRr6MLrVA - id: tensorflow-wide-deep-advanced-classification-the-easy-way title: 'TensorFlow Wide & Deep: Advanced Classification the easy way' speakers: @@ -275,6 +302,8 @@ talks: In this talk, we will go on an adventure to build a machine learning model that combines the benefits of linear models with deep neural networks. You will also gain some intuition about what is happening under the hood, and learn how to use this model for your own datasets! To accomplish this, we will use TensorFlow, an open-source machine learning library with a full Python interface. It has become the most popular machine learning library on GitHub, and the community around it is growing rapidly.' links: + - type: video + url: https://www.youtube.com/watch?v=WKgNNC0VLhM - type: slides url: https://storage.googleapis.com/yufengg-slides/pydataBCNslides.pdf - id: deepcare-chatbot-generating-answers-to-customers-using-deep @@ -291,6 +320,8 @@ talks: A live demo will be available at https://deepcare.online on the day of the talk.' links: + - type: video + url: https://www.youtube.com/watch?v=PF0HCAmzz7U - type: slides url: https://www.slideshare.net/PascalvanKooten/deepcare-chatbot-generating-answers-to-customers-using-a-hybrid-approach-of-deep-learning-and-nlp title_note: 'The Slides list of the pre-Hugo page named it "DeepCare Chatbot - Generating answers to customers using a hybrid approach of Deep Learning and NLP", the title of the slides. The video names it as above.' @@ -310,6 +341,9 @@ talks: src-d/jgscm is a Jupyter file system backend for Google Cloud Storage. It allows to work with notebooks and other files directly in Google Cloud Storage. It''s codebase is rather small and simple thanks to Jupyter''s modular architecture. We start from the very basics, revise how Google Cloud Storage works and how Jupyter deals with the virtual file system and end up with the complete production-tested backend implementation. The described ideas are rather versatile and can be re-used to create backends for similar cloud storage systems, e.g. Amazon.' + links: + - type: video + url: https://www.youtube.com/watch?v=uLC0t5JZBZs - id: the-secret-life-of-rolling-pandas title: The Secret Life Of Rolling Pandas speakers: @@ -334,6 +368,9 @@ talks: * How are Series.rolling().max() and .min() implemented. The beauty of clever algorithms. The use of specialized data structures: a ring buffer as a deque. * How are Series.rolling().median() and .quantile() implemented. More specialized data structures: the skip list, or why randomization can be your friend.' + links: + - type: video + url: https://www.youtube.com/watch?v=XM_r5La-1tA - id: nasa-space-apps-challenge-asteroid-prediction-impact title: 'NASA Space APPS Challenge: Asteroid prediction impact' speakers: @@ -347,6 +384,9 @@ talks: The talk will have two separate parts ; the first of it focuses on explaining Tensorflow architecture and Prophet opensource tools and the second part will dive into the Neural Net design and forecast prediction .' + links: + - type: video + url: https://www.youtube.com/watch?v=8h3uyQfiMNc - id: squeeze-gently-your-data title: Squeeze (gently) your data speakers: @@ -364,6 +404,8 @@ talks: My talk will start by introducing the technological reasons behind the increasing benefit of using compression in data science, and then will show some practical cases where data compression can lead to much more efficient data pipelines. For this, I will be using well-proven compression libraries like [Blosc](https://www.blosc.org/), [Zstandard](https://github.com/facebook/zstd) and [LZ4](https://github.com/lz4/lz4) that, either in combination with data handling libraries (like [PyTables](https://www.pytables.org/), [bcolz](https://bcolz.blosc.org/en/latest/) or [zarr](https://zarr.readthedocs.io/en/latest/)), or used for handling high-speed data streams (transmitted e.g. via [gRPC](https://www.grpc.io/)).' links: + - type: video + url: https://www.youtube.com/watch?v=o9PC4JC74tU - type: slides url: https://speakerdeck.com/francescalted/squeeze-gently-your-big-data - id: increasing-the-trading-prediction-by-mining-aggregated @@ -380,6 +422,8 @@ talks: Sentiment analysis This step is observed the time series of the company''s event based on the financial news or the social media, which analyses problem of coreference in text mining that is sentiment classification. Fasttext is inspired method that focuses on the meaning of words, which solves to obscure by ambiguity and play on words. This way can classify polarity, subjectivity and intensity in the corpus. According to the results of the classification, then it changes to the word representation. Thus, prediction accuracy increases significantly at this layer that is attributed to appropriate noise-reduction from the feature-space. Model creation and prediction The first layer is termed Sentiment Integration Layer by the deep neural network, which integrates sentiment analysis capability into the algorithm by proposing a sentiment weight that reflects their sentiment. Additionally, this layer reduces the dimensions by eliminating value in terms of sentiment and thereby improves prediction accuracy. The second layer encompasses a deep neural network model creation algorithm. It updates the models with the most recent information available, the deep learning algorithm is extensively evaluated using real market data and news content across multiple years, which is a good fitting capability to evaluate and select the financial news. The third layer is that it uses the recursive neural network explore patterns and of financial news through the recursive and pooling operation.' links: + - type: video + url: https://www.youtube.com/watch?v=G2GuL-xPhJA - type: slides url: https://drive.google.com/open?id=0B19Xo1zu3JtgZmVDaWVyTk1uN3M - id: the-neuroscience-lab @@ -397,6 +441,8 @@ talks: Biologists have always built their own hardware to perform unique experiments; today, new data collection and analysis techniques demand that they develop their own software as well. Often, this means that researchers without a formal education in programming must perform a wide variety of programming tasks in order to perform cutting-edge research. As a "real" programming language, Python is an excellent fit for scientists, not only for its oft-celebrated readability, active scientific community, and cross-platform support, but also for its versatility across a wide variety of domains. In this talk, we will celebrate this versatility of Python by sharing the research being done in our neuroscience laboratory, focusing how Python packages, applications, and plugins have become the tools of choice for everything from real-time machine vision and 3D graphics to data analysis and the presentation of scientific results.' links: + - type: video + url: https://www.youtube.com/watch?v=pdrX1qdjvxE - type: slides url: https://www.slideshare.net/JavierMartinezAlcant/neuroscience-lab-a-tour-through-the-eyes-of-a-pythonista-pydata-barcelona2017 title_note: 'The Slides list of the pre-Hugo page named it "Neuroscience Lab, a tour through the eyes of a pythonista", the title of the slides, and credited Javier Martínez Alcántara alone. The video names it as above and credits both speakers.' @@ -445,6 +491,9 @@ talks: In this talk we will present some of the most powerful tools for extracting data from web pages using Python. We will learn how to use Python to request information from a web server, how to perform basic handling of the server''s response, and how to begin interacting with a website in an automated fashion.' + links: + - type: video + url: https://www.youtube.com/watch?v=aTwvQZjEZhk - id: guillotina-an-async-rest-resource-db-to-manage-millions-of title: Guillotina - An Async REST Resource DB to manage millions of objects speakers: @@ -462,6 +511,8 @@ talks: After 15 years on Plone/Zope framework we started to design a new concept using all the lessons learned on content management to provide a CRUD storage layer for big data objects.' links: + - type: video + url: https://www.youtube.com/watch?v=IkIfxkI5qpY - type: slides url: https://www.slideshare.net/bloodbare/guillotina-76266421 - id: lymphos2-organizing-and-sharing-biological-data @@ -472,6 +523,8 @@ talks: language: en description: "The study of the proteome (the set of proteins expressed by a cell,\ntissue, or organism at a defined time and conditions) generates a large\namount of complex data. This data should be processed, stored, curated,\nand made easily available to researchers so it can be studied to obtain\nbiomedical knowledge. In this talk we expose the Python tools we have\nused and developed to accomplish it.\n\nAbstract\n\nAt the [LP-CSIC/UAB](https://proteomica.uab.cat) we use a technology called [Mass Spectrometry](https://en.wikipedia.org/wiki/Mass_spectrometry) to\nstudy the *phospho-proteome of human T-Lymphocytes*; this is, the group\nof proteins that are phosphorilated (modified with phosphate groups) in\nthe human [T cells](https://en.wikipedia.org/wiki/T_cell) during their activation and differentiation as part\nof the [immune response](https://en.wikipedia.org/wiki/Immune_response). The experiments involved in this study\ngenerates a *large* amount of *complex* data:\n\n- Experimental conditions and procedures metadata.\n- The spectra data and metadata obtained from the mass spectrometers\n (usually in proprietary binary formats).\n- Qualitative or identification data, consisting of search results of\n those spectra against human protein sequence databases (using\n multiple search engines, that use different output file-formats)\n linking the spectra with possible peptides (small protein sequence\n fragments) that may or may not contain phosphorylated amino-acids.\n- Semi-quantitative data about the abundance of each possible\n identified peptide.\n- Missing values, identification scores, phosphorylation reassignments,\n and a lot of relationships and inter-linked data...\n\nAnd all this data has to be **processed**, **stored**, **curated**, and\nmade **easily accessible** to researchers in our lab and worldwide, so\nthey can study it to obtain biomedical knowledge about the\nphosphorylation changes in peptides and proteins involved in the signal\ntransduction pathways of T cells after their activation during the\nspecific immune response.\n\nWe have used different Python *packages* to develop different tools and\napplications to accomplish those objectives:\n\n- The [EasierMgf](https://bitbucket.org/lp-csic-uab/easiermgf) front-end application, to extract plain text spectra\n data from proprietary binary mass spectrometer files, was developed\n using the [wxPython](https://wxpython.org/) GUI toolkit.\n- The [ORM](https://en.wikipedia.org/wiki/Object-relational_mapping) from the [django](https://www.djangoproject.com/) framework was used to design and\n interact with the LymPHOS2 [MySQL](https://www.mysql.com/) database, which stores all the\n data and their inter-relationships.\n- Also, different modules from the Python standard library (*json*,\n *xml.etree.ElementTree*, *csv*, *zipfile*) were used to read and\n [import](https://bitbucket.org/lp-csic-uab/lymphosweb/src/c127cd7a88a5dfb0a70b9e3b6243553c6adda6fb/src/LymPHOS_v1_5/lymphos/filters.py) into the database the different files containing the data;\n and to [export](https://bitbucket.org/lp-csic-uab/lymphostools) database data into commonly used file formats for\n the researches to work with.\n- The [PQuantifier](https://bitbucket.org/lp-csic-uab/lymphospquantifier) group of tools was developed to do the statistical\n processing and analysis of the LymPHOS2 semi-quantitative data. It\n uses the [SQLAlchemy](https://www.sqlalchemy.org/) ORM for fast database storage in local\n [SQLite](https://sqlite.org/) files, the [NumPy](https://www.numpy.org/) N-dimensional array package, the\n [SciPy](https://scipy.org/scipylib) scientific computing library for the statistics, the\n [uncertainties](https://pythonhosted.org/uncertainties/) package for calculations with error propagation,\n and the [matplotlib](https://matplotlib.org/) 2D plotting library for some nice plots of\n data distributions.\n- And the full django framework itself was used to develop the\n [LymPHOS2](https://www.lymphos.org) web application. Which also uses the matplotlib library\n to dynamically generate the mass spectra images.\n\nThe final result is the `LymPHOS2 `_ web-oriented database, that\nnowadays (2017) contains 131.908 mass spectra, 15.566 phosphorylation\nsites from 8.273 unique phospho-peptides and 4.937 proteins (which\nrepresent a 45-fold increase over the original LymPHOS database of\n2009); aside from the new quantitative data for 1.975 of the identified\nphospho-peptides, which was not present in the previous version of\nLymPHOS.\n\n**Repositories and Presentation Slides:**\n\n- Bitbucket code repositories: https://bitbucket.org/lp-csic-uab/\n- Presentation Slides (.ODP, .PDF and .PPTX):\n https://bitbucket.org/lp-csic-uab/lymphosdocs/downloads/\n\n**Credits:**\n\nThe exposed work has been carried out at [LP-CSIC/UAB](https://proteomica.uab.cat) from\n[Catalonia](https://en.wikipedia.org/wiki/Catalonia), part of the `Spanish National Research Council (Consejo\nSuperior de Investigaciones Científicas - CSIC)`_ and of `ProteoRed\n(Proteomics National NetWork Platform)`_.\n\nThe *people* who have participated directly in the current work are:\n\n- **Data analysis, bioinformatics and informatics**: *Joaquin Abian*\n and *Óscar Gallardo*.\n- **Mass Spectrometry, experimental design and implementation**:\n *Montserrat Carrascal*, *Nguyen Tien Dung* and *Oriol Vidal-Cortes*.\n- **Sample preparation**: *Montserrat Carrascal*, *Nguyen Tien Dung*,\n *Oriol Vidal-Cortes* and *Vanessa Casas*.\n- **Past collaborators**: *David Ovelleiro* and *Marina Gay*.\n- **Direction**: *Joaquin Abian*." links: + - type: video + url: https://www.youtube.com/watch?v=IpZeg2siLVU - type: slides url: https://bitbucket.org/lp-csic-uab/lymphosdocs/downloads/ title_note: 'The Slides list of the pre-Hugo page named it "LympHOS2, Organizing and Sharing Biological Data of the Human Lymphocyte Proteome using Python". The video names it as above.' @@ -495,6 +548,8 @@ talks: In this talk, I share experiences of using this toolset for different use cases related to analysis of Internet traffic and network engineering. I''ll go over examples of how to build widgets to explore the Internet traffic and other network data, while highlighting some of its characteristics. Furthermore, I''ll describe some optimisations performed by network engineers on their traffic, such as load balancing, and how the tools can be used to evaluate them.' links: + - type: video + url: https://www.youtube.com/watch?v=LAy8vD4PQLg - type: slides url: https://github.com/jccardonar/pydata_bcn_presentation title_note: 'The Slides list of the pre-Hugo page named it "Prototyping Interactive Dashboards with Jupyter Notebooks: Examples from Network Engineering". The video names it as above.' @@ -520,6 +575,9 @@ talks: Finally... Fun time! All the concepts will be exemplified with a Q&A contest implemented as a smart contract where all attendants can play.' + links: + - type: video + url: https://www.youtube.com/watch?v=eSaLdLrXzO4 - id: how-to-map-a-protein-structure-into-a-network-graph-to title: How to map a protein structure into a network graph to understand protein folding speakers: @@ -536,6 +594,9 @@ talks: .. [#] Sammito M1, Millán C, Rodríguez DD, de Ilarduya IM, Meindl K, De Marino I, Petrillo G, Buey RM, de Pereda JM, Zeth K, Sheldrick GM, Usón I. Exploiting tertiary structure through local folds for crystallographic phasing. Nat Methods. 2013 Nov;10(11):1099-101. doi: 10.1038/nmeth.2644. Epub 2013 Sep 15.' + links: + - type: video + url: https://www.youtube.com/watch?v=aEFR7_EzMJs - id: python-for-visualization-of-hpc-applications title: Python for visualization of HPC applications speakers: @@ -543,6 +604,9 @@ talks: type: talk language: en description: This work describes the usage of python in application that makes use of high performance application (HPC). Such applications comprise examples as computational fluid dynamics, where the analysis of large data bases is necessary in order to extract useful information. On the other hand, a common way used in the analysis of data is the visualization. It can be done by libraries as matplotlib or pandas, however more sophisticated 3D visualization can also be performed though vtk and mpi4py libraries, or even though Blender of 3d Max. The two latter case enable the use of high quality rendering. + links: + - type: video + url: https://www.youtube.com/watch?v=0ni90h8EErQ - id: data-science-for-lazy-people-genetics-will-work-for-you title: Data science for lazy people... genetics will work for you! speakers: @@ -557,6 +621,8 @@ talks: We love Data Science, but sometimes we have to do some manual and repetitive work before starting with the interesting and fun parts, but that will change. TPOT is an open source tool built on top of scikit-learn for creating and optimizing machine learning pipelines. It can be considered a data science assistant. The library will automate from feature selection to parameter optimization, it is also able to do preprocessing or construct new features from existing ones. TPOT tests a huge number of pipelines to provide you with the optimal one, this work is done with genetic algorithms. It is easy to use, has a familiar syntax if you have used Pandas or scikit-learn, and it''s very powerful. Let genetics work for you!' links: + - type: video + url: https://www.youtube.com/watch?v=-nTLS7BtcGA - type: slides url: https://slides.com/j-diegohueltesvega/data-science-lazy-people#/ - id: marketing-data-science @@ -578,6 +644,9 @@ talks: I will provide some short examples about how we are using python jupyter notebook environment in order to gain inisghts from customers using IBM Watson API, generating new segmentation and customer experiences.' + links: + - type: video + url: https://www.youtube.com/watch?v=jzuQJg3bFy8 - id: using-network-community-clustering-algorithms-to-aid title: Using network community clustering algorithms to aid determination of protein structures speakers: @@ -601,6 +670,8 @@ talks: From the technical point of view, the language we use for our development is Python, and the tool in which our graphs are implemented is python-igraph. There are a number of community clustering algorithms available and deciding which is the best for our case and which metrics to use to describe our structures has been an interesting process that we want to share with you. In this talk I will explain our research and development on this topic and I will link the general descriptions to our current and successful use case, possibly leaving open questions on what can we do more!' links: + - type: video + url: https://www.youtube.com/watch?v=9g-DaHZZKDE - type: slides url: https://drive.google.com/file/d/0Bzli2ZOV2beTd01ZdHBkWHc5b2M/view - id: security-for-data-scientists @@ -642,6 +713,8 @@ talks: * More Resources' links: + - type: video + url: https://www.youtube.com/watch?v=aicyYd8MZWo - type: slides url: https://www.slideshare.net/DZPM/security-for-data-scientists - id: an-introduction-to-the-tidyverse @@ -668,6 +741,92 @@ talks: links: - type: slides url: https://github.com/jtorrents/pydata_bcn_NetworkX +photos: + thread: https://x.com/PyBCN/status/865470914107891717 + items: + - file: pydata-2017/01-first-day-of-pydatabcn-see-you-here.jpg + caption: 'First day of #PyDataBCN See you here!' + source: https://x.com/PyBCN/status/865470914107891717 + time: 09:35 + - file: pydata-2017/02-about-to-start-the-workshops-pydatabcn.jpg + caption: 'About to start the workshops! #PyDataBCN' + source: https://x.com/PyBCN/status/865471272750161920 + time: 09:36 + - file: pydata-2017/03-taking-numpy-in-stride-by-jaime-fernandez-del-rio.jpg + caption: 'Taking NumPy in Stride, by Jaime Fernandez del Rio #PyDataBCN' + source: https://x.com/PyBCN/status/865474452238155778 + time: 09:49 + - file: pydata-2017/04-introduction-to-data-analysis-with-pandas-is-full.jpg + caption: Introduction to data analysis with Pandas is full! With Eduard Goma + source: https://x.com/PyBCN/status/865474697214836736 + time: 09:50 + talk: introduction-to-data-analysis-with-pandas + - file: pydata-2017/05-an-introduction-to-the-tidyverse-by-jorge-cimentad.jpg + caption: 'An introduction to the tidyverse, by Jorge Cimentada #PyDataBCN' + source: https://x.com/PyBCN/status/865510553984286722 + time: '12:12' + talk: an-introduction-to-the-tidyverse + - file: pydata-2017/06-waves-hackaton-by-mcarricano-pydatabcn.jpg + caption: 'Waves hackaton, by @mcarricano #PyDataBCN' + source: https://x.com/PyBCN/status/865511932362539010 + time: '12:18' + - file: pydata-2017/07-high-performance-python-for-data-analysis-by-guill.jpg + caption: 'High Performance Python for Data Analysis, by @guillemborrell #PyDataBCN' + source: https://x.com/PyBCN/status/865517539853344768 + time: '12:40' + - file: pydata-2017/08-hdf5-and-pandas-by-francescalted-pydatabcn.jpg + caption: 'HDF5 and pandas, by @FrancescAlted #PyDataBCN' + source: https://x.com/PyBCN/status/865564323120283648 + time: '15:46' + - file: pydata-2017/09-social-network-analysis-with-python-and-networkx-b.jpg + caption: 'Social Network Analysis with Python and NetworkX, by Jordi Torrents #PyDataBCN' + source: https://x.com/PyBCN/status/865564663748194305 + time: '15:47' + talk: social-network-analysis-with-python-and-networkx + - file: pydata-2017/10-good-morning-today-we-ll-have-lightning-talks-go-t.jpg + caption: 'Good Morning! Today we''ll have Lightning Talks, go to the board and write down your proposal! First come, first served :) #PyDataBCN' + source: https://x.com/PyBCN/status/865816252920549377 + time: 08:27 + - file: pydata-2017/11-welcome-to-pydatabcn-2017.jpg + caption: 'Welcome to #PyDataBCN 2017!' + source: https://x.com/PyBCN/status/865829255829213184 + time: 09:19 + - file: pydata-2017/12-ifosch-our-great-sponsors-made-pydatabcn-possible.jpg + caption: 'Our great sponsors made #PyDataBCN possible, thank you all!' + source: https://x.com/PyBCN/status/865831488297762816 + time: 09:28 + - file: pydata-2017/13-first-keynote-data-science-and-machine-learning-wi.jpg + caption: 'First Keynote: Data science and Machine Learning with Anaconda, by @teoliphant from @ContinuumIO #PyDataBCN' + source: https://x.com/PyBCN/status/865832295533510656 + time: 09:31 + - file: pydata-2017/14-pydatabcn-keynote-speaker-teoliphant-is-on-stage-t.jpg + caption: '#PyDataBCN keynote speaker @teoliphant is on stage talking about data science stack and software tools!' + source: https://x.com/PyBCN/status/865835722003156992 + time: 09:44 + - file: pydata-2017/15-second-keynote-the-magic-behind-pyspark-how-it-imp.jpg + caption: 'Second Keynote: The Magic Behind PySpark, how it impacts perf & the "future", by @holdenkarau from @IBM #PyDataBCN' + source: https://x.com/PyBCN/status/865849763849285632 + time: '10:40' + talk: the-magic-behind-pyspark-how-it-impacts-perf-the-future + - file: pydata-2017/16-third-keynote-nasa-space-apps-challenge-asteroid-p.jpg + caption: 'Third Keynote: NASA Space APPS Challenge: Asteroid prediction impact, by @SoyGema #PyDataBCN #TensorFlow' + source: https://x.com/PyBCN/status/865947122696409088 + time: '17:07' + talk: nasa-space-apps-challenge-asteroid-prediction-impact + - file: pydata-2017/17-fourth-keynote-squeeze-gently-your-big-data-by-fra.jpg + caption: 'Fourth Keynote: Squeeze (Gently) Your (Big) Data, by @FrancescAlted #PyDataBCN' + source: https://x.com/PyBCN/status/866215737270173696 + time: '10:54' + - file: pydata-2017/18-lightning-talks-pydatabcn.jpg + caption: 'Lightning Talks! #PyDataBCN' + source: https://x.com/PyBCN/status/866308840140279808 + time: '17:04' + - file: pydata-2017/19-last-keynote-closing-act-security-for-data-scienti.jpg + caption: 'Last Keynote, Closing Act: Security for Data Scientists, by @DZPM from @LeadRatings #PyDataBCN' + source: https://x.com/PyBCN/status/866327528121741313 + time: '18:19' + talk: security-for-data-scientists + album: https://www.flickr.com/photos/pydata/sets/72157684439580266/ --- The [PyData 2017 - Barcelona edition](https://pydata.org/barcelona2017/) took place from May 19th to 21th at [ESADE](https://www.esade.edu/homesite/esp/esadeforum). The talks below link to the page of each one, with its video and its slides. The event also published an album of [photos](https://www.flickr.com/photos/pydata/sets/72157684439580266/) and a playlist of its [videos](https://www.youtube.com/playlist?list=PLGVZCDnMOq0oieXy92cJBwSirA3G2MCU1). diff --git a/content/events/pydatabcn/pydatabcn_2023.md b/content/events/pydatabcn/pydatabcn_2023.md index 9fb60105b..fe906d502 100644 --- a/content/events/pydatabcn/pydatabcn_2023.md +++ b/content/events/pydatabcn/pydatabcn_2023.md @@ -23,11 +23,11 @@ free_text_sections: 10th May: Call for proposals closing
24th May: Program available
26th May,10AM: Early registration open for speakers, sponsors and PyLadiesBCN members
- 29th May, 9AM: General registration open through Eventbrite
+ 29th May, 9AM: General registration open through [Eventbrite](https://www.eventbrite.com/e/entradas-pydatabcn-2023-643559583037)
10th June: PyDataBCN 2023" - title: Registration id: registration - content: "General registration will open on Monday 29th of May, at 9AM through Eventbrite." + content: "General registration will open on Monday 29th of May, at 9AM through [Eventbrite](https://www.eventbrite.com/e/entradas-pydatabcn-2023-643559583037)." sponsor_levels: @@ -363,6 +363,123 @@ agenda: label: "Closing session & Kahoot" duration_minutes: 15 +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1667433149322735616" + items: + - file: pydata-2023/01-starting-the-day-our-president-lpmayos-is-introduc.jpg + caption: "Starting the day: our president @lpmayos is introducing Python Barcelona https://pybcn.org" + source: "https://x.com/PyBCN/status/1667433149322735616" + time: "09:26" + - file: pydata-2023/02-this-event-is-only-possible-thanks-to-our-sponsors.jpg + caption: "This event is only possible thanks to our sponsors 👏" + source: "https://x.com/PyBCN/status/1667433772797640704" + time: "09:29" + - file: pydata-2023/03-data-orchestration-with-airflow-by-fiorella-piriz.jpg + caption: "Data orchestration with Airflow, by Fiorella Piriz Sapio" + source: "https://x.com/PyBCN/status/1667454807328661512" + time: "10:53" + talk: data-orchestration-with-airflow + - file: pydata-2023/04-jupyter-notebooks-101-by-amalia-vradi.jpg + caption: "Jupyter Notebooks 101, by Amalia Vradi" + source: "https://x.com/PyBCN/status/1667455050828992514" + time: "10:53" + talk: jupyter-notebooks-101 + - file: pydata-2023/05-convierte-tus-notebooks-de-jupyter-en-codigo-mante.jpg + caption: "Convierte tus notebooks de Jupyter en código mantenible con Kedro, by Juan Luis Cano Rodríguez" + source: "https://x.com/PyBCN/status/1667455195125633024" + time: "10:54" + talk: convierte-tus-notebooks-de-jupyter-en-codigo-mantenible-con + - file: pydata-2023/06-de-los-datos-al-modelo-en-produccion-by-ricardo-an.jpg + caption: "De los datos al modelo en producción, by Ricardo Ander-Egg Aguilar" + source: "https://x.com/PyBCN/status/1667455679081086976" + time: "10:56" + talk: de-los-datos-al-modelo-en-produccion + - file: pydata-2023/07-had-a-nice-coffee-break-let-s-do-more-workshops.jpg + caption: "Had a nice coffee break, let's do more workshops!" + source: "https://x.com/PyBCN/status/1667475551102148610" + time: "12:15" + - file: pydata-2023/08-data-analytics-with-python-by-juan-bernardo-lince.jpg + caption: "Data Analytics with Python, by Juan Bernardo Lince" + source: "https://x.com/PyBCN/status/1667476072718278658" + time: "12:17" + talk: data-analytics-with-python + - file: pydata-2023/09-machine-learning-robustness-and-monitoring-by-dani.jpg + caption: "Machine Learning Robustness and Monitoring, by Daniel Sánchez Santolaya" + source: "https://x.com/PyBCN/status/1667476187122114562" + time: "12:17" + talk: machine-learning-robustness-and-monitoring + - file: pydata-2023/10-indices-invertidos-desde-cero-by-ricardo-ander-egg.jpg + caption: "Índices invertidos desde cero, by Ricardo Ander-Egg Aguilar" + source: "https://x.com/PyBCN/status/1667476445243793408" + time: "12:18" + talk: indices-invertidos-desde-cero + - file: pydata-2023/11-fine-tuning-of-llm-models-for-text-processing-by-r.jpg + caption: "Fine-tuning of LLM models for text processing, by Ruben Afonso" + source: "https://x.com/PyBCN/status/1667521263726624770" + time: "15:17" + talk: fine-tuning-of-llm-models-for-text-processing + - file: pydata-2023/12-ask-your-data-build-a-full-pipeline-to-get-generat.jpg + caption: "Ask your data! Build a full pipeline to get generative answers from a text dataset, by Carmen Iniesta López" + source: "https://x.com/PyBCN/status/1667521428093120515" + time: "15:17" + talk: ask-your-data-build-a-full-pipeline-to-get-generative + - file: pydata-2023/13-foundations-of-machine-learning-exploring-use-case.jpg + caption: "Foundations of Machine Learning: exploring use cases and typical tasks, by Nikita Polovinkin" + source: "https://x.com/PyBCN/status/1667521809040670726" + time: "15:19" + talk: foundations-of-machine-learning-exploring-use-cases-and + - file: pydata-2023/14-com-visualitzar-incertesa-i-models-probabilistics.jpg + caption: "Com visualitzar incertesa i models probabilistics, by Oriol Abril Pla" + source: "https://x.com/PyBCN/status/1667522020345618433" + time: "15:20" + talk: com-visualitzar-incertesa-i-models-probabilistics + - file: pydata-2023/15-how-data-scientists-can-be-more-productive-with-th.jpg + caption: "How Data Scientists Can Be More Productive with the Power of Static Typing, by Alvaro Duran" + source: "https://x.com/PyBCN/status/1667577219026132992" + time: "18:59" + - file: pydata-2023/16-python-models-and-alerts-within-dbt-with-dbt-fal-a.jpg + caption: "Python models and alerts within dbt with dbt-fal and novu, by Diego Quintana" + source: "https://x.com/PyBCN/status/1667577221593149441" + time: "18:59" + - file: pydata-2023/17-international-data-spaces-implementing-the-europea.jpg + caption: "International Data Spaces: Implementing the European Strategy on Data, by Miquel Sarrias" + source: "https://x.com/PyBCN/status/1667577224344616960" + time: "18:59" + - file: pydata-2023/18-data-science-in-transport-modelling-by-monica-domi.jpg + caption: "Data Science in Transport Modelling, by Monica Dominguez" + source: "https://x.com/PyBCN/status/1667577226781499393" + time: "18:59" + - file: pydata-2023/19-serverless-machine-learning-streamlining-deploymen.jpg + caption: "Serverless Machine Learning: Streamlining Deployment and Scaling of ML Services, by Rajdeep Pal" + source: "https://x.com/PyBCN/status/1667577229516079104" + time: "18:59" + - file: pydata-2023/20-bundling-a-python-app-in-a-single-file-ricardo-and.jpg + caption: "Bundling a Python app in a single file - Ricardo Ander-Egg" + source: "https://x.com/PyBCN/status/1667577233127653376" + time: "18:59" + - file: pydata-2023/21-the-workshops-and-talks-are-done-let-s-play-a-game.jpg + caption: "The workshops and talks are done. Let's play a game!" + source: "https://x.com/PyBCN/status/1667577815041032195" + time: "19:01" + - file: pydata-2023/22-the-best-programming-language-is.jpg + caption: "The best programming language is..." + source: "https://x.com/PyBCN/status/1667579239321698304" + time: "19:07" + - file: pydata-2023/23-all-our-communications-are-written-by.jpg + caption: "All our communications are written by..." + source: "https://x.com/PyBCN/status/1667579241678995456" + time: "19:07" + - file: pydata-2023/24-will-you-volunteer-at-the-next-event-sure-natalias.jpg + caption: "Will you volunteer at the next event? Sure, @nataliasirera!!" + source: "https://x.com/PyBCN/status/1667579243780349952" + time: "19:07" + - file: pydata-2023/25-nataliasirera-the-pydatabcn-2023-has-been-incredib.jpg + caption: "The PyDataBCN 2023 has been incredible! We are grateful for all the organizers, volunteers, speakers, sponsors and assistants. See you at our next event!" + source: "https://x.com/PyBCN/status/1667589285262786561" + time: "19:47" --- ## About PyDataBCN 2023 diff --git a/content/events/pyday_bcn/pyday_bcn_2016.md b/content/events/pyday_bcn/pyday_bcn_2016.md index ae602519b..05f5ccefc 100644 --- a/content/events/pyday_bcn/pyday_bcn_2016.md +++ b/content/events/pyday_bcn/pyday_bcn_2016.md @@ -73,6 +73,28 @@ sponsor_levels: - pyladiesbcn - pythones +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/776469200915337217" + items: + - file: pyday-2016/01-we-are-starting-with-tensorflow.jpg + caption: "We are starting with TensorFlow" + source: "https://x.com/PyBCN/status/776469200915337217" + time: "19:14" + - file: pyday-2016/02-and-we-re-in-our-second-talk-already-radinamatic-i.jpg + caption: "And we're in our second talk already. @RadinaMatic is talking about accessibility in a Django project" + source: "https://x.com/PyBCN/status/776476825530863617" + time: "19:44" + - file: pyday-2016/03-citybik-es-talk-at-pybcn-pydaybcn16-pydayes16.jpg + caption: "Citybik.es talk at @pybcn #pydaybcn16 #pydayes16" + source: "https://x.com/PyBCN/status/776488042647449600" + time: "20:29" + - file: pyday-2016/04-it-was-an-amazing-meetup-thanks-to-all-who-helped.jpg + caption: "It was an amazing meetup. Thanks to All Who helped make it possible. See you tomorrow in our workshops! #PyDayBCN16" + source: "https://x.com/PyBCN/status/776742531241545728" + time: "13:20" --- We are excited and glad to announce that we are organizing our first big event related to Python. diff --git a/content/events/pyday_bcn/pyday_bcn_2018.md b/content/events/pyday_bcn/pyday_bcn_2018.md index b3f20ee8e..e08de84b2 100644 --- a/content/events/pyday_bcn/pyday_bcn_2018.md +++ b/content/events/pyday_bcn/pyday_bcn_2018.md @@ -207,6 +207,93 @@ agenda: - "scikit-learn" - "spacy (with Spanish model installed)" +# Photos published by @PyBCN on the day, from the account's own X export. +# One photo per tweet: the lunch tweet carried four, and a caption is also +# the alt text, so three repeated alts help nobody. The first of the four is +# the one kept. Nothing else of the day is left out: the export holds no +# retweet with a photo for this date, and no photograph of a credential or +# of a screen that says nothing about the day. +# +# A photo carries a talk only when its caption names that talk. The eight +# that do are the eight sessions of the programme above, each announced as +# it started. The other eight are the room, the welcome slides, and lunch. +photos: + date: 2018-11-24 + thread: "https://x.com/PyBCN/status/1066253610957324288" + items: + - file: pyday-2018/01-about-to-start-the-pydaybcn2018.jpg + caption: "About to start the #PyDayBCN2018!" + source: "https://x.com/PyBCN/status/1066253610957324288" + time: "09:54" + - file: pyday-2018/02-welcome-to-the-pydaybcn2018-lpmayos-is-explaining.jpg + caption: "Welcome to the #PyDayBCN2018! @lpmayos is explaining our recent history" + source: "https://x.com/PyBCN/status/1066258474206679041" + time: "10:13" + - file: pyday-2018/03-full-room-the-100-tickets-were-over-in-less-than-t.jpg + caption: "Full room! The ~100 tickets were over in less than two hours #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066259011425701888" + time: "10:15" + - file: pyday-2018/04-pybcn-went-from-17-to-3000-members-in-11-years-pyd.jpg + caption: "#PyBCN went from 17 to ~3000 members in 11 years! #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066259424862453760" + time: "10:17" + - file: pyday-2018/05-we-want-to-organize-more-activities-help-us.jpg + caption: "We want to organize more activities. Help us! 😊" + source: "https://x.com/PyBCN/status/1066259982545494016" + time: "10:19" + - file: pyday-2018/06-we-just-registered-an-association-seriousbusiness.jpg + caption: "We just registered an association! #SeriousBusiness #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066260675356499968" + time: "10:22" + - file: pyday-2018/07-we-re-doing-a-code-tournament-with-prizes-pydaybcn.jpg + caption: "We're doing a code tournament, with prizes! #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066262626718687232" + time: "10:29" + - file: pyday-2018/08-developing-a-small-application-with-git-ignasi-fos.jpg + caption: "Developing a small application with git - Ignasi Fosch (@ifosch) #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066271782657765376" + time: "11:06" + talk: developing-a-small-application-with-git + - file: pyday-2018/09-introduction-to-pytorch-bartek-skorulski-pydaybcn2.jpg + caption: "Introduction to pytorch - Bartek Skorulski #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066272113886224386" + time: "11:07" + talk: introduction-to-pytorch + - file: pyday-2018/10-data-analysis-with-jupyter-notebook-pandas-and-plo.jpg + caption: "Data analysis with Jupyter Notebook, Pandas and Plotly - Natàlia Padilla @nataliasirera and Laura Pérez @lpmayos (@PyLadiesBCN)" + source: "https://x.com/PyBCN/status/1066297782099722243" + time: "12:49" + talk: data-analysis-with-jupyter-notebook-pandas-and-plotly + - file: pyday-2018/11-mirror-mirror-on-the-wall-who-is-the-fairest-of-th.jpg + caption: "Mirror, mirror on the wall, who is the fairest of them all? (Introduction to OpenCV) - Ismael Benito" + source: "https://x.com/PyBCN/status/1066297904976052224" + time: "12:50" + talk: mirror-mirror-on-the-wall-introduction-to-opencv + - file: pyday-2018/12-lunch-time-pydaybcn2018.jpg + caption: "Lunch time! #PyDayBCN2018" + source: "https://x.com/PyBCN/status/1066316089100066816" + time: "14:02" + - file: pyday-2018/13-intro-to-nosql-db-with-pymongo-jordi-guix.jpg + caption: "Intro to NoSQL DB with PyMongo - Jordi Guix" + source: "https://x.com/PyBCN/status/1066335895740141568" + time: "15:21" + talk: intro-to-nosql-db-with-pymongo + - file: pyday-2018/14-python-and-elasticsearch-artur-mindiyarov.jpg + caption: "Python and Elasticsearch - Artur Mindiyarov" + source: "https://x.com/PyBCN/status/1066336198262747138" + time: "15:22" + talk: python-and-elasticsearch + - file: pyday-2018/15-guillotina-data-framework-ramon-navarro-bosch-bloo.jpg + caption: "Guillotina - Data framework - Ramon Navarro Bosch (@bloodbare)" + source: "https://x.com/PyBCN/status/1066366658460246017" + time: "17:23" + talk: guillotina-data-framework + - file: pyday-2018/16-organizando-chistes-con-nlp-julio-martinez-liopic.jpg + caption: "Organizando chistes con NLP - Julio Martínez (@liopic)" + source: "https://x.com/PyBCN/status/1066366811829088258" + time: "17:23" + talk: organizando-chistes-con-nlp + # The index of sections in the sidebar, like every other edition. layout: event --- diff --git a/content/events/pyday_bcn/pyday_bcn_2019.md b/content/events/pyday_bcn/pyday_bcn_2019.md index bc207c687..55ddbcf8b 100644 --- a/content/events/pyday_bcn/pyday_bcn_2019.md +++ b/content/events/pyday_bcn/pyday_bcn_2019.md @@ -237,6 +237,107 @@ agenda: talk: quick-data-exploration-with-jupyter-and-ipywidgets level: beginner +# Photos published by PyBCN on the day. One per tweet, so no two share a +# caption, and the caption is also the alt text. PyBCN organisers took them, +# David Arcos all but the one he is standing in. The page credits the account +# that published them, which is the part the post itself proves. +photos: + date: 2019-11-16 + thread: "https://x.com/PyBCN/status/1195623896537554944" + # The album the organisers kept at the time. It holds more of the day than + # the posts do, so the gallery links it instead of the body of the page. + album: "https://drive.google.com/drive/folders/1kODXtBARnTbZmQwVW1Qx2EvBCDSqhZjX?usp=sharing" + items: + - file: pyday-2019/01-the-pydaybcn-just-started-keynote-by-our-president.jpg + caption: "The #PyDayBCN just started! Keynote, by our President @lpmayos. This is what we do!" + source: "https://x.com/PyBCN/status/1195623896537554944" + time: "09:45" + talk: opening-keynote + - file: pyday-2019/03-python-barcelona-is-doing-lots-of-events.jpg + caption: "Python Barcelona is doing lots of events!" + source: "https://x.com/PyBCN/status/1195624998209232896" + time: "09:49" + - file: pyday-2019/04-this-is-us-the-social-media-guy.jpg + caption: "This is us! - the social media guy" + source: "https://x.com/PyBCN/status/1195625223665704960" + time: "09:50" + - file: pyday-2019/05-help-python-barcelona-send-a-proposal-become-a-mem.jpg + caption: "Help Python Barcelona! Send a proposal, become a member 😊" + source: "https://x.com/PyBCN/status/1195625991529541633" + time: "09:53" + - file: pyday-2019/06-introducing-the-djangogirlsbcn-event-by-ellaquimic.jpg + caption: "Introducing the #DjangoGirlsBCN event, by @EllaQuimica" + source: "https://x.com/PyBCN/status/1195628735539625984" + time: "10:04" + - file: pyday-2019/07-me-oh-no-a-g-balloon-is-broken-djangogirlsbcn-hold.jpg + caption: "- me: oh no, a \"G\" balloon is broken! - @DjangoGirlsBCN: hold my beer... #quickhack" + source: "https://x.com/PyBCN/status/1195630182075420674" + time: "10:10" + - file: pyday-2019/08-this-is-the-agenda-for-our-three-workshop-track.jpg + caption: "This is the agenda for our three workshop track:" + source: "https://x.com/PyBCN/status/1195637939285430272" + time: "10:41" + - file: pyday-2019/09-deep-learning-for-image-classification-using-tenso.jpg + caption: "Deep Learning for Image Classification using TensorFlow" + source: "https://x.com/PyBCN/status/1195638268727042051" + time: "10:42" + talk: deep-learning-for-image-classification-using-tensorflow + - file: pyday-2019/10-arquitectura-limpia-para-microservicios-un-caso-pr.jpg + caption: "Arquitectura limpia para microservicios: Un caso practico" + source: "https://x.com/PyBCN/status/1195638580137406464" + time: "10:43" + talk: arquitectura-limpia-para-microservicios + - file: pyday-2019/11-keep-your-repo-clean-by-hectorcanto-dev-from-bluel.jpg + caption: "\"Keep your repo clean\", by @hectorcanto_dev from @blueliv" + source: "https://x.com/PyBCN/status/1195639258599563264" + time: "10:46" + talk: keep-your-repo-clean + - file: pyday-2019/12-great-materials-on-our-djangogirls-track.jpg + caption: "Great materials on our #DjangoGirls track:" + source: "https://x.com/PyBCN/status/1195645166138228737" + time: "11:09" + - file: pyday-2019/13-decoradores-en-evolucion.jpg + caption: "\"Decoradores en evolución\"" + source: "https://x.com/PyBCN/status/1195662968203153410" + time: "12:20" + talk: decoradores-en-evolucion + - file: pyday-2019/14-refactoring-a-web-application-with-python.jpg + caption: "\"Refactoring a Web Application with Python\"" + source: "https://x.com/PyBCN/status/1195663218259243010" + time: "12:21" + talk: refactoring-a-web-application-with-python + - file: pyday-2019/15-thanks-codekiwicom-for-bringing-churros-con-chocol.jpg + caption: "Thanks @codekiwicom for bringing churros con chocolate, and hot wine! 👏👏👏 #PyDay" + source: "https://x.com/PyBCN/status/1195680425752051712" + time: "13:30" + - file: pyday-2019/16-building-interactive-data-visualizations-with-plot.jpg + caption: "\"Building Interactive Data Visualizations with Plotly and Dash\" by Anna Fedotova" + source: "https://x.com/PyBCN/status/1195729247731630080" + time: "16:44" + talk: building-interactive-data-visualizations-with-plotly-and-dash + - file: pyday-2019/17-sqlalchemy-from-0-to-proficient-by-bustawin.jpg + caption: "\"SQLAlchemy from 0 to proficient\" by @bustawin" + source: "https://x.com/PyBCN/status/1195729652893077504" + time: "16:45" + talk: sqlalchemy-from-0-to-proficient + - file: pyday-2019/18-quick-data-exploration-with-jupyter-and-ipywidgets.jpg + caption: "\"Quick data exploration with Jupyter and ipywidgets\"" + source: "https://x.com/PyBCN/status/1195729783734202368" + time: "16:46" + talk: quick-data-exploration-with-jupyter-and-ipywidgets + - file: pyday-2019/19-thanks-codekiwicom-for-the-quiz-and-the-prizes-pyd.jpg + caption: "Thanks @codekiwicom for the quiz and the prizes! #PyDayBCN" + source: "https://x.com/PyBCN/status/1195777282914304000" + time: "19:54" + - file: pyday-2019/20-great-ending-keynote-from-dzpm-hey-is-that-a-napki.jpg + caption: "Great ending keynote from @DZPM! (Hey, is that a napkin?)" + source: "https://x.com/PyBCN/status/1195779452829097984" + time: "20:03" + talk: closing-keynote + - file: pyday-2019/21-finally-our-gratitude-to-the-python-barcelona-comm.jpg + caption: "Finally, our gratitude to the Python Barcelona community! @PyBCN, @PyLadiesBCN, @DjangoGirlsBCN, and all our awesome organizers, coaches, speakers, volunteers and assistants! 👏👏👏" + source: "https://x.com/PyBCN/status/1197534799130497024" + time: "16:18" ---

The group photograph of PyDay BCN 2019, in the cloister of the Universitat de Barcelona

Archived content

diff --git a/content/events/pyday_bcn/pyday_bcn_2020.md b/content/events/pyday_bcn/pyday_bcn_2020.md index 229109a93..7938baeef 100644 --- a/content/events/pyday_bcn/pyday_bcn_2020.md +++ b/content/events/pyday_bcn/pyday_bcn_2020.md @@ -19,7 +19,7 @@ layout: event free_text_sections: - title: Registration id: registration - content: "All attendeed must **register to the event through Meetup**, which will be the main communication channel with attendees before the event. All registered attendees will receive the links to the YouTube playlists and Slack channels through Meetup." + content: "All attendeed must **[register to the event through Meetup](https://www.meetup.com/python-barcelona/events/274983461/)**, which will be the main communication channel with attendees before the event. All registered attendees will receive the links to the YouTube playlists and Slack channels through Meetup." sponsor_levels: - sponsors_per_line: 2 @@ -231,7 +231,7 @@ talks: language: en topic: "Data Science, ML, DL" duration_minutes: 15 - description: "We will explain how to switch from Pandas to Dask in order to analyze a large dataset that does not fit into single-machine memory.

Repository: https://github.com/ber2/pyday2020-counting-votes-with-dask" + description: "We will explain how to switch from Pandas to Dask in order to analyze a large dataset that does not fit into single-machine memory.

Repository: https://github.com/ber2/pyday2020-counting-votes-with-dask" links: - type: video url: "https://www.youtube.com/watch?v=KOpW86J56CU" diff --git a/content/events/pyday_bcn/pyday_bcn_2021.md b/content/events/pyday_bcn/pyday_bcn_2021.md index f482f3831..dd415da70 100644 --- a/content/events/pyday_bcn/pyday_bcn_2021.md +++ b/content/events/pyday_bcn/pyday_bcn_2021.md @@ -23,11 +23,11 @@ free_text_sections: 24th October: Call for proposals closing
17th November: Program available
19th November, 9AM: Early registration open for PyBCN members, PyDay speakers and sponsors
- 22nd November, 9AM: General registration open through eventbrite
+ 22nd November, 9AM: General registration open through [eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2021-212686419807)
27th November: PyDay BCN 2021" - title: Registration id: registration - content: "Registration to the general public will be open on Monday 22nd November, 9AM, through eventbrite.

Please have a look at the schedule below and choose which talks you would like to attend beforehand." + content: "Registration to the general public will be open on Monday 22nd November, 9AM, through [eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2021-212686419807).

Please have a look at the schedule below and choose which talks you would like to attend beforehand." sponsor_levels: - sponsors_per_line: 2 @@ -412,6 +412,153 @@ agenda: label: "Closing session & Kahoot" duration_minutes: 15 +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1464506413720420352" + items: + - file: pyday-2021/01-gooooood-morning-pydaybcn.jpg + caption: "Gooooood morning, #PyDayBCN!!" + source: "https://x.com/PyBCN/status/1464506413720420352" + time: "09:08" + - file: pyday-2021/02-kudos-to-our-organizing-team-lpmayos-nataliasirera.jpg + caption: "Kudos to our organizing team: @lpmayos @nataliasirera @DZPM @llevaNEUS @srxavi @berenguel @eloipuertas @sianna" + source: "https://x.com/PyBCN/status/1464529899155296257" + time: "10:41" + - file: pyday-2021/03-thanks-for-sponsoring-us.jpg + caption: "Thanks for sponsoring us!" + source: "https://x.com/PyBCN/status/1464530306246057990" + time: "10:43" + - file: pyday-2021/04-build-a-chat-application-that-lets-you-speak-multi.jpg + caption: "\"Build a chat application that lets you speak multiple languages\", by Diego Gonzalez from @PreplyCom" + source: "https://x.com/PyBCN/status/1464531105562910720" + time: "10:46" + talk: build-a-chat-application-that-lets-you-speak-multiple + - file: pyday-2021/05-preplycom-building-the-cloud-with-python-getting-s.jpg + caption: "\"Building the Cloud with Python: getting started with AWS CDK\", by Anton Caceres and Alexandre Savio" + source: "https://x.com/PyBCN/status/1464531763867357184" + time: "10:49" + talk: building-the-cloud-with-python-getting-started-with-aws-cdk + - file: pyday-2021/06-implementing-your-api-with-fastapi-by-esperanza-bu.jpg + caption: "\"Implementing your API with FASTAPI\", by Esperanza Buitrago (@ebuitragod)" + source: "https://x.com/PyBCN/status/1464531971544076290" + time: "10:50" + talk: implementing-your-api-with-fastapi + - file: pyday-2021/07-how-to-create-data-apps-with-python-by-sergi-ortiz.jpg + caption: "\"How to create Data apps with Python\", by Sergi Ortiz" + source: "https://x.com/PyBCN/status/1464532219498749958" + time: "10:51" + talk: how-to-create-data-apps-with-python + - file: pyday-2021/08-and-the-catering-for-the-coffee-break-is-ready.jpg + caption: "And the catering for the coffee break is ready!" + source: "https://x.com/PyBCN/status/1464532407172931585" + time: "10:51" + - file: pyday-2021/09-yes-we-got-the-good-stuff.jpg + caption: "Yes, we got the good stuff ✌️" + source: "https://x.com/PyBCN/status/1464545721349193729" + time: "11:44" + - file: pyday-2021/10-creating-cute-user-interfaces-in-python-with-qt-by.jpg + caption: "\"Creating cute user interfaces in python with Qt\", by Elisabeth Ortega (@draentropia)" + source: "https://x.com/PyBCN/status/1464547004923719684" + time: "11:49" + talk: creating-cute-user-interfaces-in-python-with-qt + - file: pyday-2021/11-microservicios-en-la-vida-moderna-un-enfoque-pytho.jpg + caption: "\"Microservicios en la vida moderna: Un enfoque python-centrico\", by Antonio Molina (@aydevosotros), Erik Tordera and Pablo Fernández from @qustodio" + source: "https://x.com/PyBCN/status/1464547526246375433" + time: "11:51" + talk: microservicios-en-la-vida-moderna-un-enfoque-python-centrico + - file: pyday-2021/12-aydevosotros-qustodio-introduction-to-django-by-vi.jpg + caption: "\"Introduction to Django\", by Vincent Choubard from Rover (@roverdotcom_es)" + source: "https://x.com/PyBCN/status/1464547803712172039" + time: "11:53" + talk: introduction-to-django + - file: pyday-2021/13-vector-search-engines-with-python-from-embeddings.jpg + caption: "\"Vector search engines with Python: from embeddings to similarity search\", by Gabriel de Maeztu (@gabimaeztu) from IOMED (@iomed_ehr)" + source: "https://x.com/PyBCN/status/1464548109808279559" + time: "11:54" + talk: vector-search-engines-with-python-from-embeddings-to + - file: pyday-2021/14-nice-limited-edition-pybcn-stickers.jpg + caption: "Nice limited-edition @PyBCN stickers!" + source: "https://x.com/PyBCN/status/1464548681026355201" + time: "11:56" + - file: pyday-2021/15-remember-we-ll-take-the-group-photo-at-13h-in-the.jpg + caption: "Remember, we'll take the group photo at 13h, in the terrace. See you there!" + source: "https://x.com/PyBCN/status/1464549374147678209" + time: "11:59" + - file: pyday-2021/16-at-the-end-of-each-talk-please-use-the-post-its-to.png + caption: "At the end of each talk, please use the post-its to leave feedback for the speakers:" + source: "https://x.com/PyBCN/status/1464550721731371008" + time: "12:04" + - file: pyday-2021/17-warm-coffe.jpg + caption: "Warm coffe!" + source: "https://x.com/PyBCN/status/1464554868568428548" + time: "12:21" + - file: pyday-2021/18-save-some-pastries-for-our-guys-at-the-entrance.jpg + caption: "Save some pastries for our guys at the entrance!!" + source: "https://x.com/PyBCN/status/1464555890200166403" + time: "12:25" + - file: pyday-2021/19-causal-data-science-workshop-by-jordi-mur.jpg + caption: "\"Causal Data Science workshop\", by Jordi Mur" + source: "https://x.com/PyBCN/status/1464595512926126084" + time: "15:02" + talk: causal-data-science-workshop + - file: pyday-2021/20-making-mlops-uncool-again-by-david-de-la-iglesia-c.jpg + caption: "\"Making MLOps uncool again\", by David de la Iglesia Castro (@daviddelachurch)" + source: "https://x.com/PyBCN/status/1464595698251358217" + time: "15:03" + talk: making-mlops-uncool-again + - file: pyday-2021/21-daviddelachurch-how-to-beat-imposter-syndrome-conf.jpg + caption: "\"How to beat imposter syndrome: confessions of a developer\", by Matteo Bruno from Onna (@onnahq)" + source: "https://x.com/PyBCN/status/1464596540283101190" + time: "15:06" + talk: how-to-beat-imposter-syndrome-confessions-of-a-developer + - file: pyday-2021/22-daviddelachurch-onnahq-building-a-dag-factory-by-a.jpg + caption: "\"Building a DAG Factory\", by Albert Franzi Cros (@FranziCros) from Typeform (@typeform)" + source: "https://x.com/PyBCN/status/1464597043339534336" + time: "15:08" + talk: building-a-dag-factory + - file: pyday-2021/23-burnout-paradise-buenas-practicas-para-evitar-el-b.jpg + caption: "\"Burnout Paradise: buenas prácticas para evitar el burnout en desarrollo\", by Alejandro Nicolás (@sander_pm) from Hybrid Theory (@HybridTheory_GL)" + source: "https://x.com/PyBCN/status/1464600432463032330" + time: "15:22" + talk: burnout-paradise-buenas-practicas-para-evitar-el-burnout-en + - file: pyday-2021/24-sander-pm-hybridtheory-gl-yes-the-lunch-was-delici.jpg + caption: "(Yes, the lunch was delicious)" + source: "https://x.com/PyBCN/status/1464600704312659973" + time: "15:23" + - file: pyday-2021/25-say-cheese.jpg + caption: "Say Cheese!" + source: "https://x.com/PyBCN/status/1464600946181292035" + time: "15:24" + - file: pyday-2021/26-build-a-machine-learning-iot-device-running-python.jpg + caption: "\"Build a Machine Learning IoT Device running Python\", by Marc Pous (@gy4nt)" + source: "https://x.com/PyBCN/status/1464619233619365899" + time: "16:36" + talk: build-a-machine-learning-iot-device-running-python + - file: pyday-2021/27-the-moons-of-jupyter-widgets-ecosystem-by-mariana.jpg + caption: "\"The moons of Jupyter: widgets ecosystem\" by Mariana Meireles (@mari_meir) and Laysa Uchoa (@laysauchoa)" + source: "https://x.com/PyBCN/status/1464619630924865545" + time: "16:38" + talk: the-moons-of-jupyter-widgets-ecosystem + - file: pyday-2021/28-signal-processing-from-neurons-to-mars-by-vivek-sh.jpg + caption: "\"Signal Processing - From Neurons to Mars!\", by Vivek Sharma" + source: "https://x.com/PyBCN/status/1464619822386397191" + time: "16:39" + talk: signal-processing-from-neurons-to-mars + - file: pyday-2021/29-keeping-sync-between-datasets-with-diffsync-by-chr.jpg + caption: "\"Keeping sync between datasets with Diffsync\", by Christian Adell (@chadell0)" + source: "https://x.com/PyBCN/status/1464620079518208007" + time: "16:40" + talk: keeping-sync-between-datasets-with-diffsync + - file: pyday-2021/30-chadell0-hey-david-hurry-up-and-finish-doing-the-k.jpg + caption: "Hey David, hurry up and finish doing the Kahoot!!" + source: "https://x.com/PyBCN/status/1464625183478755331" + time: "17:00" + - file: pyday-2021/16-finally-thanks-to-everybody-who-helped-us-organize.jpg + caption: "Finally, thanks to everybody who helped us organize our biggest 2021 event 💪💪 We hope to see you again in the #PyDayBCN 2022!" + source: "https://x.com/PyBCN/status/1465217532218982403" + time: "08:14" --- ## About PyDay BCN 2021 diff --git a/content/events/pyday_bcn/pyday_bcn_2022.md b/content/events/pyday_bcn/pyday_bcn_2022.md index 3fe2d0d86..0cc0800f5 100644 --- a/content/events/pyday_bcn/pyday_bcn_2022.md +++ b/content/events/pyday_bcn/pyday_bcn_2022.md @@ -23,11 +23,11 @@ free_text_sections: 31th October: Call for proposals closing
16th November: Program available
18th November, 9AM: Early registration open for PyBCN members, PyDay speakers and sponsors
- 21nd November, 9AM: General registration open through Eventbrite
+ 21nd November, 9AM: General registration open through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2022-470666304587)
26th November: PyDay BCN 2022" - title: Registration id: registration - content: "General registration will open on Monday 21st of November, at 9AM through Eventbrite." + content: "General registration will open on Monday 21st of November, at 9AM through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2022-470666304587)." sponsor_levels: - sponsors_per_line: 2 @@ -377,6 +377,152 @@ agenda: room: sala-dactes-ada-lovelace talk: lightning-talks-session-2-closing-session-kahoot +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1596420421569908741" + items: + - file: pyday-2022/01-welcome-to-the-pydaybcn-our-president-lpmayos-is-d.jpg + caption: "Welcome to the #PyDayBCN! Our president @lpmayos is doing the welcome, please come to the main room! https://pybcn.org/events/pyday_bcn/pyday_bcn_2022/" + source: "https://x.com/PyBCN/status/1596420421569908741" + time: "09:27" + - file: pyday-2022/02-our-association-is-run-by-volunteers-we-need-your.jpg + caption: "Our association is run by volunteers. We need your help!" + source: "https://x.com/PyBCN/status/1596421097028812800" + time: "09:30" + - file: pyday-2022/03-companies-are-welcome-too-we-need-your-venues-and.jpg + caption: "Companies are welcome too, we need your venues and pizzas!" + source: "https://x.com/PyBCN/status/1596421507483586562" + time: "09:32" + - file: pyday-2022/04-today-we-ll-have-3-tracks-pf-workshops-2-lightning.jpg + caption: "Today we'll have 3 tracks pf workshops, 2 lightning sessions, a kahoot game with prizes, group picture, free lunch and coffee breaks, sponsor booths woth goodies, and many, many surprises! Hello world! @lpmayos" + source: "https://x.com/PyBCN/status/1596422075698532352" + time: "09:34" + - file: pyday-2022/05-machine-learning-en-produccion-experimentos-con-ve.jpg + caption: "\"Machine Learning en producción: Experimentos con versionado de datos con DVC y VSCode\" by Gema Parreño @SoyGema" + source: "https://x.com/PyBCN/status/1596440972757708801" + time: "10:49" + talk: machine-learning-en-produccion-experimentos-con-versionado + - file: pyday-2022/06-friendly-fuzzing-for-your-python-saas-applications.jpg + caption: "\"Friendly fuzzing for your Python SaaS applications\" by Pavel Lonkin @pavel_lonkin" + source: "https://x.com/PyBCN/status/1596441500862513152" + time: "10:51" + talk: friendly-fuzzing-for-your-python-saas-applications + - file: pyday-2022/07-how-many-ants-can-carry-an-elephant-pushing-the-li.jpg + caption: "\"How many ants can carry an elephant? Pushing the limits of AWS Chalice\" by Kemalcan Bora @KemalcanBora" + source: "https://x.com/PyBCN/status/1596442007328550912" + time: "10:53" + talk: how-many-ants-can-carry-an-elephant-pushing-the-limits-of + - file: pyday-2022/08-build-air-quality-sensors-with-python-and-choose-y.jpg + caption: "\"Build Air Quality Sensors with Python and choose your own adventure!\" Marc Pous @gy4nt" + source: "https://x.com/PyBCN/status/1596463444550483968" + time: "12:18" + talk: build-air-quality-sensors-with-python-and-choose-your-own + - file: pyday-2022/09-build-a-full-stack-app-with-flask-and-vue-by-eva-m.jpg + caption: "\"Build a full-stack app with Flask and Vue\" by Eva Martín del Pico" + source: "https://x.com/PyBCN/status/1596466419746889735" + time: "12:30" + talk: build-a-full-stack-app-with-flask-and-vue + - file: pyday-2022/10-python-as-a-gis-tools-howtos-and-gotchas-by-biel-s.jpg + caption: "\"Python as a GIS: Tools, howtos and gotchas\" by Biel Stela" + source: "https://x.com/PyBCN/status/1596466719924576266" + time: "12:31" + talk: python-as-a-gis-tools-howtos-and-gotchas + - file: pyday-2022/11-pyton-chupito.jpg + caption: "\"Pyton\" = chupito 🥃" + source: "https://x.com/PyBCN/status/1596467078600482819" + time: "12:33" + - file: pyday-2022/12-had-a-great-lunch.jpg + caption: "Had a great lunch! 🍴" + source: "https://x.com/PyBCN/status/1596494809623326720" + time: "14:23" + - file: pyday-2022/13-building-an-end-to-end-open-source-modern-data-pla.jpg + caption: "\"Building an End-to-End Open-Source Modern Data Platform for Biomedical Data\", by Alberto Labarga @alabarga" + source: "https://x.com/PyBCN/status/1596497893430812673" + time: "14:35" + talk: building-an-end-to-end-open-source-modern-data-platform-for + - file: pyday-2022/14-cuando-los-precios-suben-scrapy-by-jimena-escobar.jpg + caption: "\"Cuando los precios suben: Scrapy\" by Jimena Escobar @Jimena_y_yo" + source: "https://x.com/PyBCN/status/1596501266368167940" + time: "14:48" + talk: cuando-los-precios-suben-scrapy + - file: pyday-2022/15-inside-out-or-how-to-get-your-app-observable-by-an.jpg + caption: "\"Inside out. Or how to get your app observable\" by Antonio Molina @aydevosotros" + source: "https://x.com/PyBCN/status/1596501481338929152" + time: "14:49" + talk: inside-out-or-how-to-get-your-app-observable + - file: pyday-2022/16-lightning-talks-amp-coffee.jpg + caption: "Lightning talks & coffee!" + source: "https://x.com/PyBCN/status/1596517293474910208" + time: "15:52" + - file: pyday-2022/17-very-interesting-lightning-talks-we-astropy.jpg + caption: "Very interesting lightning talks, we ❤️ @astropy!" + source: "https://x.com/PyBCN/status/1596518550944243714" + time: "15:57" + - file: pyday-2022/18-making-sense-of-your-data-platform-with-openmetada.jpg + caption: "\"Making sense of your Data Platform with OpenMetadata\" by Pere Miquel Brull" + source: "https://x.com/PyBCN/status/1596528205611114496" + time: "16:36" + talk: making-sense-of-your-data-platform-with-openmetadata + - file: pyday-2022/19-tdd-coding-dojo-by-ana-eliza-barbosa.jpg + caption: "\"TDD Coding Dojo\" by Ana Eliza Barbosa" + source: "https://x.com/PyBCN/status/1596528574160580609" + time: "16:37" + talk: tdd-coding-dojo + - file: pyday-2022/20-using-numba-effectively-today-by-cheuk-ting-ho-che.jpg + caption: "\"Using Numba Effectively Today\" by Cheuk Ting Ho @cheukting_ho" + source: "https://x.com/PyBCN/status/1596528814645182465" + time: "16:38" + talk: using-numba-effectively-today + - file: pyday-2022/21-thank-you-thisiscloudblue-for-sponsoring-the-pyday.jpg + caption: "Thank you @ThisisCloudBlue for sponsoring the #PyDayBCN!" + source: "https://x.com/PyBCN/status/1596530443809079301" + time: "16:44" + - file: pyday-2022/22-thank-you-qustodio-for-sponsoring-the-pydaybcn.jpg + caption: "Thank you @qustodio for sponsoring the #PyDayBCN!" + source: "https://x.com/PyBCN/status/1596530641885138945" + time: "16:45" + - file: pyday-2022/23-thank-you-insideveriff-for-sponsoring-the-pydaybcn.jpg + caption: "Thank you @insideveriff for sponsoring the #PyDayBCN!" + source: "https://x.com/PyBCN/status/1596531130702139394" + time: "16:47" + - file: pyday-2022/24-thank-you-roverdotcom-es-for-sponsoring-the-pydayb.jpg + caption: "Thank you @roverdotcom_es for sponsoring the #PyDayBCN!" + source: "https://x.com/PyBCN/status/1596531320288866306" + time: "16:48" + - file: pyday-2022/25-thank-you-apsl-web-for-sponsoring-the-pydaybcn.jpg + caption: "Thank you @apsl_web for sponsoring the #PyDayBCN!" + source: "https://x.com/PyBCN/status/1596531705892204544" + time: "16:49" + - file: pyday-2022/26-now-the-second-bunch-of-lightning-talks-and-the-fi.jpg + caption: "Now, the second bunch of lightning talks, and the final contest! 🎉🎉" + source: "https://x.com/PyBCN/status/1596543523389845505" + time: "17:36" + - file: pyday-2022/27-let-s-trash-the-regular-expressions.jpg + caption: "Let's trash the regular expressions 🔝" + source: "https://x.com/PyBCN/status/1596545675742908417" + time: "17:45" + - file: pyday-2022/28-optimal-binning-using-python.jpg + caption: "Optimal binning using Python:" + source: "https://x.com/PyBCN/status/1596547451921596418" + time: "17:52" + - file: pyday-2022/29-quiz.jpg + caption: "Quiz!" + source: "https://x.com/PyBCN/status/1596564226457280512" + time: "18:59" + - file: pyday-2022/30-thank-you-lpmayos-nataliasirera-sianna-and-mochi.jpg + caption: "Thank you @lpmayos, @nataliasirera, @sianna... and Mochi!" + source: "https://x.com/PyBCN/status/1596564666586628100" + time: "19:00" + - file: pyday-2022/31-the-winners.jpg + caption: "The winners! 🎉" + source: "https://x.com/PyBCN/status/1596564775512989696" + time: "19:01" + - file: pyday-2022/32-thank-you-all-for-attending-the-pydaybcn.jpg + caption: "Thank you all for attending the #PyDayBCN!! 🥰" + source: "https://x.com/PyBCN/status/1596567778798014466" + time: "19:13" --- ## About PyDay BCN 2022 diff --git a/content/events/pyday_bcn/pyday_bcn_2023.md b/content/events/pyday_bcn/pyday_bcn_2023.md index 5f6b5820b..dc7626335 100644 --- a/content/events/pyday_bcn/pyday_bcn_2023.md +++ b/content/events/pyday_bcn/pyday_bcn_2023.md @@ -19,15 +19,15 @@ layout: event free_text_sections: - title: Important dates id: important_dates - content: "2nd October: Call for proposals opening: Workshops and Lightning talks
+ content: "2nd October: Call for proposals opening: [Workshops](https://forms.gle/MdS3Qx64wQs9N7NQ8) and [Lightning talks](https://forms.gle/RZ2vYzGtWNgUnuBT8)
22nd October: Call for proposals closing
31st October: Program available
3rd November, 9AM: Early registration open for PyBCN members, PyDay speakers and sponsors
- 6th November, 9AM: General registration open through Eventbrite
+ 6th November, 9AM: General registration open through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2023-751258453257?aff=oddtdtcreator)
11th November: PyDay BCN 2023" - title: Registration id: registration - content: "General registration will open on Monday 6th of November, at 9AM through Eventbrite." + content: "General registration will open on Monday 6th of November, at 9AM through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2023-751258453257?aff=oddtdtcreator)." sponsor_levels: - sponsors_per_line: 2 @@ -252,7 +252,7 @@ talks: title: "Lightning talks (session 2) & Closing session & Kahoot" type: talk duration_minutes: 15 - description: "

Lightning talks

\nCreación de APIs con Python y manejo de datos
Diego Giaquinta

Implementación sencilla de APIs con Python, para poder realizar peticiones http e intercambio de información entre aplicaciones.

\nStep4ward: Empowering Women in Tech
Susana Vázquez y Coral Olivares

Come explore step4ward, a non-profit organization passionately crafted BY and FOR women. In just 5 minutes, learn how we're all about supporting women in the tech job market. We provide advice, build a community, and help with interview prep and early career steps. Let's break barriers and boost women in tech together!

\nCommon Security Vulnerabilities for Developers
Dan Neciu

Best practices for developers to protect themselves from scams and hacking attempts

\nMachine Learning for time-series analysis in the context of IoT
Raziel Amador

In this light talk, I would like to present my implementation of temperature and humidity monitoring using Iot (Raspberry Pi, DHT22 sensor, all in Docker services), and Machine learning for time series analysis.

\nHow to support the Python open source ecosytem
Oriol Abril

I will showcase a wide array of ways for anyone to support the Python open source ecosystem, with a special focus on financial support. I won't have any special focus on special communities or libraries but will aim for a general overview: including open source contributions as part of one's job description, sponsoring events and/or libraries, donating to foundations that act as umbrella for the exisiting projects...

\nTinymem: a game under 40 lines and under 30mm
Isaac Bernat

We'll go through tinymem, a working example of a game programmed in MicroPython which has menus, audio, sprites, text, button inputs... All this under 40 lines of code available for the Thumby hardware, which is a miniature Raspberry Pi Pico based console.

" + description: "

Lightning talks

\nCreación de APIs con Python y manejo de datos
Diego Giaquinta

Implementación sencilla de APIs con Python, para poder realizar peticiones http e intercambio de información entre aplicaciones.

\nStep4ward: Empowering Women in Tech
Susana Vázquez y Coral Olivares

Come explore step4ward, a non-profit organization passionately crafted BY and FOR women. In just 5 minutes, learn how we're all about supporting women in the tech job market. We provide advice, build a community, and help with interview prep and early career steps. Let's break barriers and boost women in tech together!

\nCommon Security Vulnerabilities for Developers
Dan Neciu

Best practices for developers to protect themselves from scams and hacking attempts

\nMachine Learning for time-series analysis in the context of IoT
Raziel Amador

In this light talk, I would like to present my implementation of temperature and humidity monitoring using Iot (Raspberry Pi, DHT22 sensor, all in Docker services), and Machine learning for time series analysis.

\nHow to support the Python open source ecosytem
Oriol Abril

I will showcase a wide array of ways for anyone to support the Python open source ecosystem, with a special focus on financial support. I won't have any special focus on special communities or libraries but will aim for a general overview: including open source contributions as part of one's job description, sponsoring events and/or libraries, donating to foundations that act as umbrella for the exisiting projects...

\nTinymem: a game under 40 lines and under 30mm
Isaac Bernat

We'll go through [tinymem](https://github.com/isaacbernat/tinymem), a working example of a game programmed in MicroPython which has menus, audio, sprites, text, button inputs... All this under 40 lines of code available for the [Thumby](https://thumby.us/) hardware, which is a miniature Raspberry Pi Pico based console.

" # The grid, one row per slot of the day, in the order it is printed. A slot # names the talk it holds, or carries its own label and type when it holds @@ -374,6 +374,156 @@ agenda: room: room-b5 talk: lightning-talks-session-2-closing-session-kahoot +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1723274179888230446" + items: + - file: pyday-2023/01-welcome-to-the-pydaybcn-2023-https-pybcn-org-event.jpg + caption: "Welcome to the #PyDayBCN 2023! https://pybcn.org/events/pyday_bcn/pyday_bcn_2023/" + source: "https://x.com/PyBCN/status/1723274179888230446" + time: "10:39" + - file: pyday-2023/02-pydaybcn-is-an-event-full-of-free-python-related-w.jpg + caption: "#PyDayBCN is an event full of free python-related workshops and activities for the Barcelona Python community, organized once per year" + source: "https://x.com/PyBCN/status/1723274187488256485" + time: "10:39" + - file: pyday-2023/03-introduction-to-neural-networks-with-pytorch-by-no.jpg + caption: "\"Introduction to Neural Networks with PyTorch\", by Noé Casas" + source: "https://x.com/PyBCN/status/1723274805997179294" + time: "10:41" + talk: introduction-to-neural-networks-with-pytorch + - file: pyday-2023/04-quantum-computing-for-everyone-by-vyron-vasileiadi.jpg + caption: "\"Quantum Computing for Everyone\", by Vyron Vasileiadis, Adrià Blanco, Guille Abad and Javier Sabariego" + source: "https://x.com/PyBCN/status/1723275563450675247" + time: "10:44" + talk: quantum-computing-for-everyone + - file: pyday-2023/05-automating-networks-with-nornir-by-christian-adell.jpg + caption: "\"Automating networks with Nornir\", by Christian Adell" + source: "https://x.com/PyBCN/status/1723275859388244070" + time: "10:45" + talk: automating-networks-with-nornir + - file: pyday-2023/06-introduction-to-artificial-emotional-intelligence.jpg + caption: "\"Introduction to Artificial [Emotional] Intelligence: Decode emotions with Deep Learning and Facial Recognition\" by Emanuel Frazao" + source: "https://x.com/PyBCN/status/1723305285027082336" + time: "12:42" + talk: introduction-to-artificial-emotional-intelligence-decode + - file: pyday-2023/07-quantum-breakthrough-from-basic-quantum-algorithms.jpg + caption: "\"Quantum Breakthrough: From Basic Quantum Algorithms to Quantum Generative AI\" by Pavel Sulimov" + source: "https://x.com/PyBCN/status/1723305399871254963" + time: "12:43" + talk: quantum-breakthrough-from-basic-quantum-algorithms-to + - file: pyday-2023/08-python-packaging-101-by-ferran-jovell.jpg + caption: "\" Python Packaging 101\", by Ferran Jovell" + source: "https://x.com/PyBCN/status/1723306078576816327" + time: "12:46" + talk: python-packaging-101 + - file: pyday-2023/09-had-a-great-lunch-break-thanks-sponsors.jpg + caption: "Had a great lunch break. Thanks, sponsors!" + source: "https://x.com/PyBCN/status/1723328858223501495" + time: "14:16" + - file: pyday-2023/10-creating-virtual-worlds-generating-synthetic-data.jpg + caption: "\"Creating Virtual Worlds: Generating Synthetic Data for AI Digital Twins\", by Alberto Labarga" + source: "https://x.com/PyBCN/status/1723329782849376654" + time: "14:20" + talk: creating-virtual-worlds-generating-synthetic-data-for-ai + - file: pyday-2023/11-creacion-de-apis-con-python-y-manejo-de-datos-by-d.jpg + caption: "\"Creación de APIs con Python y manejo de datos\", by Diego Giaquinta" + source: "https://x.com/PyBCN/status/1723330041860202798" + time: "14:21" + talk: creacion-de-apis-con-python-y-manejo-de-datos + - file: pyday-2023/12-create-a-personal-website-with-sphinx-by-oriol-abr.jpg + caption: "\"Create a personal website with sphinx\", by Oriol Abril" + source: "https://x.com/PyBCN/status/1723330176501596620" + time: "14:21" + talk: create-a-personal-website-with-sphinx + - file: pyday-2023/13-retrieval-augmented-generation-from-scratch-by-gab.jpg + caption: "\"Retrieval Augmented Generation from scratch\", by Gabriel de Maeztu" + source: "https://x.com/PyBCN/status/1723370453249479067" + time: "17:01" + talk: retrieval-augmented-generation-from-scratch + - file: pyday-2023/14-gabimaeztu-iomed-ehr-mojo-el-poderoso-aliado-de-py.jpg + caption: "\"Mojo: El poderoso aliado de Python\", by Camilo Chacón" + source: "https://x.com/PyBCN/status/1723370632065233082" + time: "17:02" + talk: mojo-el-poderoso-aliado-de-python + - file: pyday-2023/15-gabimaeztu-iomed-ehr-mob-programming-solving-codin.jpg + caption: "\"Mob programming: Solving coding problems collaboratively\", by Israel Saeta" + source: "https://x.com/PyBCN/status/1723370811296190680" + time: "17:03" + talk: mob-programming-solving-coding-problems-collaboratively + - file: pyday-2023/16-data-visualization-using-blender-by-muhammad-usman.jpg + caption: "\"Data Visualization using Blender\", by Muhammad Usman" + source: "https://x.com/PyBCN/status/1723389842363441256" + time: "18:18" + - file: pyday-2023/17-writing-code-is-not-your-job-thoughts-on-data-scie.jpg + caption: "\"Writing Code Is Not Your Job: Thoughts On Data Science On A Post-chatGPT World\", by Álvaro Durán" + source: "https://x.com/PyBCN/status/1723390142935687275" + time: "18:20" + - file: pyday-2023/18-pycamp-2024-by-israel-saeta.jpg + caption: "\"PyCamp 2024\", by Israel Saeta" + source: "https://x.com/PyBCN/status/1723390346946576517" + time: "18:20" + - file: pyday-2023/19-demystifying-llm-deployments-in-aws-sagemaker-by-g.jpg + caption: "\"Demystifying LLM deployments in AWS SageMaker\", by Guillermo Blasco" + source: "https://x.com/PyBCN/status/1723390541499359647" + time: "18:21" + - file: pyday-2023/20-step4ward-empowering-women-in-tech-by-susana-vazqu.jpg + caption: "\"Step4ward: Empowering Women in Tech\", by Susana Vázquez and Coral Olivares" + source: "https://x.com/PyBCN/status/1723391091230065006" + time: "18:23" + - file: pyday-2023/21-common-security-vulnerabilities-for-developers-by.jpg + caption: "\"Common Security Vulnerabilities for Developers\", by Dan Neciu" + source: "https://x.com/PyBCN/status/1723391244942864452" + time: "18:24" + - file: pyday-2023/22-machine-learning-for-time-series-analysis-in-the-c.jpg + caption: "\"Machine Learning for time-series analysis in the context of IoT\", by Raziel Amador" + source: "https://x.com/PyBCN/status/1723391406733959312" + time: "18:25" + - file: pyday-2023/23-how-to-support-the-python-open-source-ecosytem-by.jpg + caption: "\"How to support the Python open source ecosytem\", by Oriol Abril" + source: "https://x.com/PyBCN/status/1723391549793350102" + time: "18:25" + - file: pyday-2023/24-tinymem-a-game-under-40-lines-and-under-30mm-by-is.jpg + caption: "\"Tinymem: a game under 40 lines and under 30mm\", by Isaac Bernat" + source: "https://x.com/PyBCN/status/1723391728705495145" + time: "18:26" + - file: pyday-2023/25-thank-you-all-for-sponsoring-speaking-organizing-a.jpg + caption: "Thank you all for sponsoring, speaking, organizing, and for assisting!" + source: "https://x.com/PyBCN/status/1723392641125974477" + time: "18:29" + - file: pyday-2023/26-let-s-play-a-game.jpg + caption: "Let's play a game!" + source: "https://x.com/PyBCN/status/1723393250931696010" + time: "18:32" + - file: pyday-2023/27-congratulations-to-the-winners.jpg + caption: "Congratulations to the winners!" + source: "https://x.com/PyBCN/status/1723394075527630978" + time: "18:35" + - file: pyday-2023/28-thanks-qustodio-qustodio-for-sponsoring-us.jpg + caption: "Thanks Qustodio (@qustodio) for sponsoring us!" + source: "https://x.com/PyBCN/status/1723397962334691551" + time: "18:51" + - file: pyday-2023/29-thanks-travelperk-travelperk-for-sponsoring-us.jpg + caption: "Thanks Travelperk (@travelperk) for sponsoring us!" + source: "https://x.com/PyBCN/status/1723398182476873915" + time: "18:52" + - file: pyday-2023/30-thanks-iomed-iomed-ehr-for-sponsoring-us.jpg + caption: "Thanks IOMED (@iomed_ehr) for sponsoring us!" + source: "https://x.com/PyBCN/status/1723398493765583099" + time: "18:53" + - file: pyday-2023/31-thanks-flanks-flanks-io-for-sponsoring-us.jpg + caption: "Thanks Flanks (@Flanks_io) for sponsoring us!" + source: "https://x.com/PyBCN/status/1723398651215487073" + time: "18:53" + - file: pyday-2023/32-thanks-preply-preplycom-for-sponsoring-us.jpg + caption: "Thanks Preply (@PreplyCom) for sponsoring us!" + source: "https://x.com/PyBCN/status/1723398866970591424" + time: "18:54" + - file: pyday-2023/33-thank-you-for-the-pydaybcn.jpg + caption: "Thank you for the #PyDayBCN! ❤️" + source: "https://x.com/PyBCN/status/1723405506839027714" + time: "19:21" --- ## About PyDay BCN 2023 diff --git a/content/events/pyday_bcn/pyday_bcn_2024.md b/content/events/pyday_bcn/pyday_bcn_2024.md index c7639535a..770e4be5f 100644 --- a/content/events/pyday_bcn/pyday_bcn_2024.md +++ b/content/events/pyday_bcn/pyday_bcn_2024.md @@ -19,15 +19,15 @@ layout: event free_text_sections: - title: Important dates id: important_dates - content: "26th September: Call for proposals opening: Workshops and Lightning talks
+ content: "26th September: Call for proposals opening: [Workshops](https://forms.gle/GDL2VpUTu4veHbff8) and [Lightning talks](https://forms.gle/VLDY6zdmRxRsGsmv7)
27th October: Call for proposals closing
3rd Novembre: Program available
4th November, 9AM: Early registration open for PyBCN members, PyDay speakers and sponsors
- 5th November, 9AM: General registration open through Eventbrite
+ 5th November, 9AM: General registration open through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2024-1068930563089?aff=oddtdtcreator)
9th November: PyDay BCN 2024" - title: Registration id: registration - content: "General registration will open on Tuesday 5th of November, at 9AM through Eventbrite." + content: "General registration will open on Tuesday 5th of November, at 9AM through [Eventbrite](https://www.eventbrite.es/e/entradas-pydaybcn-2024-1068930563089?aff=oddtdtcreator)." sponsor_levels: - sponsors_per_line: 2 @@ -417,6 +417,116 @@ agenda: label: "Closing session & Kahoot" duration_minutes: 0 +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1855180142240272592" + items: + - file: pyday-2024/01-today-we-re-celebrating-the-pydaybcn-welcome-pleas.jpg + caption: "Today we're celebrating the #PyDayBCN! Welcome 👋, please get a seat!" + source: "https://x.com/PyBCN/status/1855180142240272592" + time: "10:26" + - file: pyday-2024/02-unboxing-machine-learning-models-predicting-with-n.jpg + caption: "\"Unboxing Machine Learning Models: Predicting with Numpy After Model Training\", by Xiang Xu" + source: "https://x.com/PyBCN/status/1855181919559790867" + time: "10:33" + talk: unboxing-machine-learning-models-predicting-with-numpy + - file: pyday-2024/03-discovering-etl-testing-essential-for-your-ai-solu.jpg + caption: "\"Discovering ETL Testing: Essential for Your AI Solutions\", by Paula Bassagañas" + source: "https://x.com/PyBCN/status/1855182272384663612" + time: "10:34" + talk: discovering-etl-testing-essential-for-your-ai-solutions + - file: pyday-2024/04-izi-record-revolutionizing-the-camera-app-by-ferra.jpg + caption: "\"IZI Record, revolutionizing the camera app\" by Ferran Jovell (@MrSwats)" + source: "https://x.com/PyBCN/status/1855211394183962886" + time: "12:30" + - file: pyday-2024/05-mrswats-a-solution-to-store-catalog-and-visualize.jpg + caption: "\"A solution to store, catalog and visualize images using Django and Django Rest Framework\" by Josep Sitjar Suñer" + source: "https://x.com/PyBCN/status/1855211686346510817" + time: "12:31" + - file: pyday-2024/06-mrswats-image-generation-with-ai-gans-and-diffusio.jpg + caption: "\"Image Generation with AI (GANs and Diffusion Techniques)\" by Marina Palma" + source: "https://x.com/PyBCN/status/1855213044026032482" + time: "12:37" + talk: image-generation-with-ai-gans-and-diffusion-techniques + - file: pyday-2024/07-introduccio-a-xarray-etiqueta-les-teves-dades-n-di.jpg + caption: "\"Introducció a xarray: etiqueta les teves dades n-dimensionals\" by Oriol Abril Pla" + source: "https://x.com/PyBCN/status/1855213518359834954" + time: "12:39" + talk: introduccio-a-xarray-etiqueta-les-teves-dades-n-dimensionals + - file: pyday-2024/08-static-typing-in-python-by-alex-molas.jpg + caption: "\"Static Typing in Python\" by Alex Molas" + source: "https://x.com/PyBCN/status/1855213686542983460" + time: "12:39" + talk: static-typing-in-python + - file: pyday-2024/09-building-data-pipelines-with-sqlmesh-by-marc-ramir.jpg + caption: "\"Building data pipelines with SQLMesh\" by Marc Ramirez" + source: "https://x.com/PyBCN/status/1855213884220600758" + time: "12:40" + talk: building-data-pipelines-with-sqlmesh + - file: pyday-2024/10-la-rosalia-unveiled-decoding-her-lyrics-with-ai-by.jpg + caption: "\"La Rosalía Unveiled: Decoding Her Lyrics with AI\", by Olga Ss" + source: "https://x.com/PyBCN/status/1855249867385307276" + time: "15:03" + - file: pyday-2024/11-a-kingdom-above-the-clouds-how-far-can-you-go-on-a.jpg + caption: "\"A kingdom above the clouds: How far can you go on AWS for $1 a month?\", by Kemalcan Bora" + source: "https://x.com/PyBCN/status/1855250188463411365" + time: "15:04" + talk: a-kingdom-above-the-clouds-how-far-can-you-go-on-aws-for-1 + - file: pyday-2024/12-a-deep-dive-into-the-arrow-columnar-format-with-py.jpg + caption: "\"A deep dive into the Arrow Columnar format with pyarrow and nanoarrow\", by Raúl Cumplido" + source: "https://x.com/PyBCN/status/1855251365431288257" + time: "15:09" + talk: a-deep-dive-into-the-arrow-columnar-format-with-pyarrow-and + - file: pyday-2024/13-polars-procesando-datos-a-la-velocidad-de-la-luz-c.jpg + caption: "\"Polars: Procesando datos a la velocidad de la luz con recursos espartanos\", by Fernando Aparicio" + source: "https://x.com/PyBCN/status/1855263927799525470" + time: "15:59" + - file: pyday-2024/14-evita-bugs-amb-pre-commit-by-carles-julia-chaosct.jpg + caption: "\"Evita bugs amb Pre-Commit\", by Carles Julià (@chaosct)" + source: "https://x.com/PyBCN/status/1855267845711527972" + time: "16:14" + - file: pyday-2024/15-chaosct-predict-gender-equality-with-your-own-mach.jpg + caption: "\"Predict gender equality with your own Machine Learning model\", by Asia Noble" + source: "https://x.com/PyBCN/status/1855268923261767778" + time: "16:19" + talk: predict-gender-equality-with-your-own-machine-learning-model + - file: pyday-2024/16-chaosct-l-embolic-videojuegos-hechos-en-el-fronten.jpg + caption: "\"L'Embolic: Videojuegos hechos en el frontend por un lenguaje de backend\", by Jimena (@Jimena_y_yo)" + source: "https://x.com/PyBCN/status/1855269101087735918" + time: "16:19" + talk: lembolic-videojuegos-hechos-en-el-frontend-por-un-lenguaje + - file: pyday-2024/17-chaosct-jimena-y-yo-open-source-databases-python-d.jpg + caption: "\"Open Source Databases Python Devs\" by Dave Pitts" + source: "https://x.com/PyBCN/status/1855269396618355152" + time: "16:21" + talk: open-source-databases-python-devs + - file: pyday-2024/18-automate-end-to-end-mlflow-with-kestra-and-mlflow.jpg + caption: "\"Automate end to end MLflow with Kestra and MLFlow\", by Manuel Gijón" + source: "https://x.com/PyBCN/status/1855269627300827556" + time: "16:22" + talk: automate-end-to-end-mlflow-with-kestra-and-mlflow + - file: pyday-2024/19-la-iniciativa-scientific-python-by-oriol-abril-pla.jpg + caption: "\"La iniciativa Scientific Python\", by Oriol Abril Pla" + source: "https://x.com/PyBCN/status/1855316971211948104" + time: "19:30" + - file: pyday-2024/20-drugscope-a-ml-based-platform-for-drug-discovery-b.jpg + caption: "\"DrugScope: a ML-based platform for drug discovery\", by Verónica Larroy" + source: "https://x.com/PyBCN/status/1855317098773225775" + time: "19:30" + - file: pyday-2024/21-can-llms-power-product-recommendations-by-babaniyi.jpg + caption: "\"Can LLMs Power Product Recommendations?\", by Babaniyi Olaniyi\"" + source: "https://x.com/PyBCN/status/1855317374867472871" + time: "19:31" + - file: pyday-2024/22-pixel2mechanics-automated-biomechanical-simulation.jpg + caption: "\"Pixel2Mechanics: Automated Biomechanical Simulations of High-Resolution Intervertebral Discs from Anisotropic MRIs\", by Sai Natarajan" + source: "https://x.com/PyBCN/status/1855317468480479312" + time: "19:32" + - file: pyday-2024/01-thanks-for-attending-the-pydaybcn-2024-see-you-nex.jpg + caption: "Thanks for attending the #PyDayBCN 2024! See you next year!" + source: "https://x.com/PyBCN/status/1855898395161805079" + time: "10:00" --- diff --git a/content/events/pyday_bcn/pyday_bcn_2025.md b/content/events/pyday_bcn/pyday_bcn_2025.md index c44e58898..50e8b9dfc 100644 --- a/content/events/pyday_bcn/pyday_bcn_2025.md +++ b/content/events/pyday_bcn/pyday_bcn_2025.md @@ -20,15 +20,15 @@ layout: event free_text_sections: - title: Important dates id: important_dates - content: "29th September: Call for proposals opening: Workshops and Lightning talks
+ content: "29th September: Call for proposals opening: [Workshops](https://forms.gle/tGnJHW5oNkCFQrXx7) and [Lightning talks](https://forms.gle/GzYmMU4qvqRHmgCh7)
7th November: Call for proposals closing
21th November: Program available
24th November, 9AM: Early registration open for PyBCN members, PyDay speakers and sponsors
- 25th November, 9AM: General registration open through Eventbrite
+ 25th November, 9AM: General registration open through [Eventbrite](https://www.eventbrite.es/e/pyday-2025-tickets-1924233868299?aff=oddtdtcreator)
29th November: PyDay BCN 2025" - title: Registration id: registration - content: "General registration will open on Tuesday 25th of November, at 9AM through Eventbrite." + content: "General registration will open on Tuesday 25th of November, at 9AM through [Eventbrite](https://www.eventbrite.es/e/pyday-2025-tickets-1924233868299?aff=oddtdtcreator)." sponsor_levels: - sponsors_per_line: 2 @@ -524,6 +524,112 @@ agenda: room: sala-dactes-ada-lovelace talk: lightning-talks-closing-session-kahoot +# Photos published by PyBCN on the day, one per post so no two share a caption, +# which is also the alt text. Imported with bin/import-x-photos, which excludes +# anything the account only shared: that copyright belongs to somebody else. +photos: + thread: "https://x.com/PyBCN/status/1994662616132673581" + items: + - file: pyday-2025/01-18-years-since-our-first-meetup-https-www-meetup-c.jpg + caption: "18 years since our first meetup! https://www.meetup.com/python-barcelona/events/6778043/" + source: "https://x.com/PyBCN/status/1994662616132673581" + time: "08:00" + - file: pyday-2025/02-today-we-re-celebrating-the-pydaybcn-2025.jpg + caption: "Today we're celebrating the #PyDayBCN 2025!" + source: "https://x.com/PyBCN/status/1994684222666412236" + time: "09:25" + - file: pyday-2025/03-welcome-to-the-pyday-please-grab-your-lanyard.jpg + caption: "Welcome to the PyDay! Please grab your lanyard" + source: "https://x.com/PyBCN/status/1994702575589822690" + time: "10:38" + - file: pyday-2025/04-build-advanced-agentic-llm-apps-with-langgraph-and.jpg + caption: "Build advanced Agentic LLM Apps with LangGraph and LangChain, by Enric Domingo" + source: "https://x.com/PyBCN/status/1994704711178748154" + time: "10:47" + talk: build-advanced-agentic-llm-apps-with-langgraph-and-langchain + - file: pyday-2025/05-from-zero-to-chatbot-create-your-own-ai-assistant.jpg + caption: "From Zero to Chatbot: Create Your Own AI Assistant with Python, by Ester Jara" + source: "https://x.com/PyBCN/status/1994707695165702368" + time: "10:59" + talk: from-zero-to-chatbot-create-your-own-ai-assistant-with + - file: pyday-2025/06-introduction-to-analog-quantum-computing-by-natali.jpg + caption: "Introduction to Analog Quantum Computing, by Natàlia Padilla, Amir Azam, David Arcos, Javier Sabariego, Ely Farrés & Flavie Le Bars" + source: "https://x.com/PyBCN/status/1994709800337154471" + time: "11:07" + talk: introduction-to-analog-quantum-computing + - file: pyday-2025/07-testeando-api-s-like-a-boss-con-bdd-javier-ramos-p.jpg + caption: "Testeando API's like a boss con BDD, Javier Ramos Panduro" + source: "https://x.com/PyBCN/status/1994709904108786052" + time: "11:07" + talk: testeando-apis-like-a-boss-con-bdd + - file: pyday-2025/08-del-texto-al-dato-como-entienden-las-maquinas-el-l.jpg + caption: "Del texto al dato: cómo entienden las maquinas el lenguaje humano con Python, by Cristina Cosma" + source: "https://x.com/PyBCN/status/1994722041816318026" + time: "11:56" + talk: del-texto-al-dato-como-entienden-las-maquinas-el-lenguaje + - file: pyday-2025/09-crea-un-agente-llm-desde-cero-sin-frameworks-by-ri.jpg + caption: "Crea un agente LLM desde cero, sin frameworks, by Ricardo Ander-Egg" + source: "https://x.com/PyBCN/status/1994722652775502202" + time: "11:58" + talk: crea-un-agente-llm-desde-cero-sin-frameworks + - file: pyday-2025/10-building-multi-agent-system-with-pydantic-ai-by-al.jpg + caption: "Building Multi-Agent System with Pydantic AI, by Alberto Camara" + source: "https://x.com/PyBCN/status/1994722776759111743" + time: "11:59" + talk: building-multi-agent-system-with-pydantic-ai + - file: pyday-2025/11-mastering-word-automation-with-python-by-jordi-bos.jpg + caption: "Mastering Word Automation with Python, by Jordi Bosch" + source: "https://x.com/PyBCN/status/1994723082851029329" + time: "12:00" + talk: mastering-word-automation-with-python + - file: pyday-2025/12-lunch.jpg + caption: "Lunch!" + source: "https://x.com/PyBCN/status/1994776732851921080" + time: "15:33" + - file: pyday-2025/13-keywords-bm25-y-vectores-construyendo-un-buscador.jpg + caption: "Keywords, BM25 y vectores: construyendo un buscador de texto desde cero, by Ricardo Ander-Egg" + source: "https://x.com/PyBCN/status/1994776783711863011" + time: "15:33" + talk: keywords-bm25-y-vectores-construyendo-un-buscador-de-texto + - file: pyday-2025/14-del-desorden-visual-al-significado-una-aventura-co.jpg + caption: "Del Desorden Visual al Significado: Una Aventura con Transformers y Donut, by Kevin Sanchez" + source: "https://x.com/PyBCN/status/1994777272277164346" + time: "15:35" + talk: del-desorden-visual-al-significado-una-aventura-con + - file: pyday-2025/15-house-controlled-by-ai-what-could-go-wrong-by-kema.jpg + caption: "House, Controlled by AI (What Could Go Wrong?), by Kemalcan Bora" + source: "https://x.com/PyBCN/status/1994777475922997289" + time: "15:36" + talk: house-controlled-by-ai-what-could-go-wrong + - file: pyday-2025/16-models-de-regressio-bayesians-by-oriol-abril.jpg + caption: "Models de regressió bayesians, by Oriol Abril" + source: "https://x.com/PyBCN/status/1994777557820924408" + time: "15:36" + talk: models-de-regressio-bayesians + - file: pyday-2025/17-agentes-inteligentes-que-evolucionan-software-auto.jpg + caption: "Agentes Inteligentes que Evolucionan: Software Automodificable con LLMs y Python, by Camilo Chacón Sartori" + source: "https://x.com/PyBCN/status/1994801610967716187" + time: "17:12" + talk: agentes-inteligentes-que-evolucionan-software + - file: pyday-2025/18-fabric-en-accion-conectando-bloques-datos-y-magia.jpg + caption: "Fabric en Acción: conectando bloques, datos y magia en python, by Victor Garcia" + source: "https://x.com/PyBCN/status/1994802306496565681" + time: "17:15" + talk: fabric-en-accion-conectando-bloques-datos-y-magia-en-python + - file: pyday-2025/19-htmx-a-love-story-between-a-backend-dev-and-a-fron.jpg + caption: "HTMX: A love story between a backend dev and a frontend \"framework\", by Eric Massip" + source: "https://x.com/PyBCN/status/1994802513367715964" + time: "17:15" + talk: htmx-a-love-story-between-a-backend-dev-and-a-frontend + - file: pyday-2025/20-causal-inference-a-brief-introduction-by-ubaldo-he.jpg + caption: "Causal Inference: a brief introduction, by Ubaldo Hervas" + source: "https://x.com/PyBCN/status/1994802560104841660" + time: "17:16" + talk: causal-inference-a-brief-introduction + - file: pyday-2025/02-the-pydaybcn-2025-was-a-success-140-attendants-16.jpg + caption: "The #PyDayBCN 2025 was a success! 140 attendants, 16 workshops, many lightning talks, and hundreds of coffees! Thanks for coming, and see you next year!" + source: "https://x.com/PyBCN/status/1995426809425613242" + time: "10:36" --- diff --git a/content/people/giorgio-polvara.md b/content/people/giorgio-polvara.md index edffb1706..33e821384 100644 --- a/content/people/giorgio-polvara.md +++ b/content/people/giorgio-polvara.md @@ -1,4 +1,5 @@ --- id: giorgio-polvara name: "Giorgio Polvara" +photo: giorgio-polvara.jpg --- diff --git a/content/pybcn_association/legal-notice.md b/content/pybcn_association/legal-notice.md index 952f9100e..6707346fa 100644 --- a/content/pybcn_association/legal-notice.md +++ b/content/pybcn_association/legal-notice.md @@ -23,7 +23,7 @@ The Management Board is responsible for this website. You can see who sits on it ## What this site is -This is an informational site. It describes the association, its events, the people who organise them and speak at them, and how to join, propose a talk, or sponsor us. Nothing is sold through this site. The membership fee is paid on PayPal's own site, not here. Some pages embed a Google Form or a Google Calendar; those are served by Google. +This is an informational site. It describes the association, its events, the people who organise them and speak at them, and how to join, propose a talk, or sponsor us. Nothing is sold through this site. The membership fee is paid on PayPal's own site, not here. Some pages embed a Google Form or a Google Calendar, and the page of a recorded talk embeds its video in a YouTube player (youtube-nocookie.com); those frames are served by Google. The site is a set of static pages, published from a public repository on GitHub and served by GitHub Pages. We keep no server of our own and we run no analytics. The [Privacy policy](/pybcn_association/privacy-policy/) says what personal data this involves. @@ -54,4 +54,4 @@ We may update this notice. Every change is visible in the [history of this page] Spanish law applies to this notice and to the use of this site. Any dispute goes to the courts of Barcelona, unless the law gives you the right to the courts of your own domicile. -Last updated: 2026-10-07 +Last updated: 2026-10-14 diff --git a/content/pybcn_association/organizers.md b/content/pybcn_association/organizers.md index 742a502a3..7bf2178e5 100644 --- a/content/pybcn_association/organizers.md +++ b/content/pybcn_association/organizers.md @@ -25,7 +25,7 @@ people_levels: people: [elisabeth-ortega-carrasco, josep-martinez-vila, loris-mularoni, laura-perez-mayos, nuria-pujol-vilanova, jose-riera-sanchez, ruben-berenguel, xavi-francisco-gilabert] name: Collaborators - people_per_line: 5 - name: Management Board (2018 - 2025) + name: Former Management Board (2018 - 2025) # An entry with a role shows that role on this page instead of the # pybcn_position of the person file. See people-grid.html. people: diff --git a/content/pybcn_association/privacy-policy.md b/content/pybcn_association/privacy-policy.md index ba0134418..81089c399 100644 --- a/content/pybcn_association/privacy-policy.md +++ b/content/pybcn_association/privacy-policy.md @@ -20,7 +20,7 @@ PyBCN is a volunteer association. This page says what personal data this website **Associació Python Barcelona** (CIF G67254045) is the data controller. - **Email**: [pybcn@googlegroups.com](mailto:pybcn@googlegroups.com) -- **Registered address**: *pending. The association must add its registered address here before this page is published.* +- **Registered address**: Carrer de Concepció Arenal, 165, 08027 Barcelona The Management Board handles requests about personal data. We have no data protection officer: the law does not require one for an association of our size and activity. @@ -61,7 +61,14 @@ Our contact addresses, such as pybcn@googlegroups.com and pyladies-bcn@googlegro ### Embedded Google content -A few pages embed a Google Form or a Google Calendar in a frame. The frame is served by Google: when the page loads, Google sees your IP address and browser details, and may set its own cookies inside the frame. Google's [privacy policy](https://policies.google.com/privacy) applies to that. +A few pages embed a Google Form or a Google Calendar in a frame: the two talk proposal forms and the agenda of PyDay BCN 2019. The frame is served by Google: when the page loads, Google sees your IP address and browser details, and may set its own cookies inside the frame. Google's [privacy policy](https://policies.google.com/privacy) applies to that. + +The page of a talk that was recorded embeds the video in a frame from **youtube-nocookie.com**, the YouTube player Google serves for sites that do not want it to set cookies. Only the page of a recorded talk carries one, one frame per talk. No other page has one: the lists of talks and the event pages carry a link to the video and nothing else. What the frame does and does not do: + +- When you open the page of a recorded talk and scroll near the video, your browser asks Google for the player. Google then sees your IP address and browser details, and that you opened a talk page on this site, as it would for an image loaded from its servers. This happens before you press play. +- Until you press play, Google states that this player stores nothing in your browser and sets no cookie. +- When you press play, you are watching a YouTube video inside this page, and Google's [privacy policy](https://policies.google.com/privacy) applies as it would on youtube.com. +- Under every player there is the plain link to the same video on youtube.com, so you can watch it there instead, and the page reads fine with the frame blocked. ### Cookies @@ -73,7 +80,7 @@ The site is served by [GitHub Pages](https://pages.github.com). GitHub may log t ## Who else sees your data -Nobody buys or receives your data from us. The companies named above see it because we use their services: Google (forms, calendar, mailing lists, documents), PayPal (payments), and GitHub (hosting and the source repository). All three are based in the USA. Each publishes the safeguards it applies to data from the EU, and we rely on those. +Nobody buys or receives your data from us. The companies named above see it because we use their services: Google (forms, calendar, mailing lists, documents, and the YouTube player on the talk pages), PayPal (payments), and GitHub (hosting and the source repository). All three are based in the USA. Each publishes the safeguards it applies to data from the EU, and we rely on those. ## Your rights @@ -94,4 +101,4 @@ If you think we handle your data wrongly, you can complain to the Spanish data p We may update this policy. Every change is visible in the [history of this page](https://github.com/pybcn/pybcn.github.io/commits/edition/content/pybcn_association/privacy-policy.md) on GitHub. -Last updated: 2026-10-07 +Last updated: 2026-10-14 diff --git a/data/channel_videos.yaml b/data/channel_videos.yaml new file mode 100644 index 000000000..9f112da92 --- /dev/null +++ b/data/channel_videos.yaml @@ -0,0 +1,406 @@ +# The videos of the Python Barcelona YouTube channel, and what this site does +# with each one. One entry per video of the channel, with the id, the title +# as the channel shows it, and the decision: placed, which means some event +# page carries a link to it, or placed: false with the reason it belongs to +# no page. +# +# This is the list the site maintains. It is not a copy of the pybcn-archive +# export, which is one-time archaeology that is not in this repository: the +# export says where a published fact came from, this file says what the +# channel holds today and whether the site accounts for it. +# +# bin/check-content reads this file and fails on three things: a placed +# entry that no event front matter carries, a YouTube video link in the +# front matter that no entry lists, and an unplaced entry with no reason. +# It never touches the network. +# +# How to refresh it: run bin/list-channel. It reads the two tabs of the +# channel that hold videos (videos and streams) with yt-dlp and prints every +# video the channel has and this list does not, and every entry of this list +# the tabs no longer show. For a new video, write its link on the talk of +# the event page by hand (a link of type video, or an entry of +# session_videos for the recording of a whole session), then add the entry +# here with placed: true. A video that belongs to no page gets placed: false +# and a reason. bin/list-channel --yaml prints the new entries ready to +# paste. +# +# unlisted: true marks a video the channel holds but no tab shows, because +# it was uploaded unlisted and only a playlist reveals it. bin/list-channel +# expects those to be absent from the tabs and says so, instead of reporting +# them as removed. +# +# The order of the entries is by id and means nothing. Append a new entry at +# the end if that is easier. +# +# First generated on 2026-10-13 from the two channel tabs read with yt-dlp +# (84 in videos, 3 in streams) plus the two unlisted videos the export +# found through its playlists, crossed with the video links of +# content/events/. + +channel: UCEhI2CfdT5--TYq47K4en4A + +videos: + - id: "-usvyg6h3wY" + title: "PyBCN Meetup 2019/03 - PySpark on Kubernetes: Avoiding the pain of YARN by H. Karau" + placed: true + - id: "04ZPyA_lE8Y" + title: "PyBCN Meetup 2020/05 - Chatops 101 with Python and Opsdroid, by À. Fernández (@anxodio)" + placed: true + - id: "1R3WiyJhpQs" + title: "PyBCN Meetup 2020/02 - Intercepting & debugging all Python http(s) by T. Perry" + placed: true + - id: "1VdEN4B2OIM" + title: "PyBCN Meetup 2015/10 - API by example by C. Barrobés" + placed: true + - id: "1mr0Gx7qJ5E" + title: "PyBCN Meetup 2015/09 - Técnicas OSINT & Python by A. Sánchez" + placed: true + - id: "2VP2d_Ukj3E" + title: "PyBCN Meetup 2016/04 - Ingesting 35 Million Hotel Images With Python In the Cloud by A. Vinyals" + placed: true + - id: "2xqQwC2MwYY" + title: "PyMeetup 2023/02/23 Python & ChatGPT by Ismael Benito Altamirano" + placed: true + - id: "3V1AEXT3PrI" + title: "PyBCN Meetup 2016/03 - sklearn-pandas: streamline your model building process by I. Saeta" + placed: true + - id: "3mNktCVBGlc" + title: "PyBCN Meetup 2016/06 - Machine Learning for Dummies with Python by J. Arias" + placed: true + - id: "4-OPxy4CLAw" + title: "PyDayBCN 2020 Track 2 - A Day Has Only 24±1 Hours by M. Šedivý" + placed: true + - id: "4kY7IfWJ_Mg" + title: "PyBCN Meetup 2021/05/20 A principled approach to authorization with SQLAlchemy by Sam Scott" + placed: true + - id: "4oc0OTkks0k" + title: "PyDayBCN 2020 Track 1 - Transformers the all in one tool for NLP by J. Martínez" + placed: true + - id: "5lHomEoRndM" + title: "February 2019 Meetup" + placed: true + - id: "64gY5bXuJPY" + title: "PyBCN Meetup 2018/06 - Practical clean code by I. Saeta" + placed: true + - id: "68FOP7sBDes" + title: "Python May 2019 Meetup - Automatize reports using Google Slides API by Victor Perez" + placed: true + - id: "698441URsrc" + title: "PyBCN June 2018 - PySpark and Arrow - Rubén Berenguel" + placed: true + - id: "6ELCbtx3GJU" + title: "PyBCN Meetup 2019/03 - Houston, we have a snake: Python at Satellogic by A. Pujol & J.L. Cano" + placed: true + - id: "76jG59xQzVw" + title: "PyMeetup 2022/05/19 Building a Django scalable system by Samuel Parra" + placed: true + - id: "8H2PrNLEEYQ" + title: "PyBCN Meetup 2019/06 - Kiwi Python Tour Intro" + placed: true + - id: "8UjkfOKh6jA" + title: "PyDayBCN 2020 Track 2 - Alexa, te elijo a ti by E. Ortega-Carrasco" + placed: true + - id: "9ASVfIPj_M8" + title: "PyMeetup 2024/09 From text to actions: LLMs as the new software consumers by Pol Alvarez Vecino" + placed: true + - id: "B0YM3XkNkQs" + title: "PyDayBCN 2020 Track 1 - Ho sento, no ets el meu tipus by C. Barrobés" + placed: true + - id: "BOkeUX9d1Ko" + title: "PyBCN Meetup 2019/10 - Avoid food waste with QR codes and computer vision by I. Benito" + placed: true + - id: "BoaGrcmfVH8" + title: "PyDayBCN 2020 Track 1 - Documentation driven development for Python web APIs by J. Haro" + placed: true + - id: "CCxse-fiAr4" + title: "PyBCN Meetup 2019/04 - Building a validation scheme for a REST API using Voluptuous by A. Camara" + placed: true + - id: "Ga5Wiq0swS8" + title: "PyBCN Meetup 2021/10/27 Wardley mapping the Python Barcelona Association" + placed: true + - id: "GblxdxaZ5Gw" + title: "PyBCN Meetup 2019/02 - Pipenv: nuevo sistema de gestión de dependencias by A. Vallbona" + placed: true + - id: "GnQlVBIcunk" + title: "PyBCN Meetup 2020/01 - Using Pydantic for security static analysis of cloudformation by O. Blanco" + placed: true + - id: "Hnr7MH9Pd5s" + title: "PyDayBCN 2020 Track 1 - Lifebox a virtual ecosystem by F. Fábregas:" + placed: true + - id: "JYCcPr4QW_k" + title: "PyLadies Barcelona & Python Barcelona - Presentación comunidad local - PyConES 2020" + placed: false + unlisted: true + reason: "a presentation of the Barcelona community given at PyConES 2020, which is no event of the association" + - id: "JzX9WAv7PVM" + title: "PyBCN Meetup 2019/09 - Python for the management of IoT platforms at Worldsensing by T. Martínez" + placed: true + - id: "KOpW86J56CU" + title: "PyDayBCN 2020 Track 1 - Counting votes: analyzing a large dataset with Dask by A. Camara" + placed: true + - id: "LAQY4ucheQA" + title: "PyDayBCN 2020 Track 2 - Investigating Digital Crimes using Python by G. Deshpande" + placed: true + - id: "LvvwLYk9aIo" + title: "PyDayBCN 2020 Track 2 - Alice in Pythonland: Object oriented programming in [...] by M. T. Grifa" + placed: true + - id: "LwchtmM-d-s" + title: "PyMeetup 2026/09/16 Why LLMs Can't Make Your Code Simpler by Pol Alvarez" + placed: true + - id: "Nb4mJEn04rY" + title: "PyBCN Meetup 2015/10 - Data structures beyond dicts and lists by S. Sorribas" + placed: true + - id: "QIy-XGTP4WM" + title: "PyBCN Meetup 2016/04 - Introduction to testing and py.test by I. Fosch" + placed: true + - id: "QJ1YKtM0Kjw" + title: "PyBCN Meetup 2015/09 - Hacking the BCN housing market by T. Barbu" + placed: true + - id: "QNr8p1zVd54" + title: "PyBCN Meetup 2021/01 - Architecture Decision Records: documenta tu arquitectura [...] by H. Canto" + placed: true + - id: "QmqrBAKSB6s" + title: "PyBCN Meetup 2020/02 - Migracode: Creating a Migrant-Tech Community by V. van Grondelle" + placed: true + - id: "R3R9q5mf8Uw" + title: "PyBCN Meetup 2016/04 - Lightning Talk Session" + placed: true + - id: "RQc7KL-ne3A" + title: "PyBCN Meetup 2015/12 - IPython parallel by J. Deu-Pons" + placed: true + - id: "S-8tyE62unI" + title: "PyBCN Meetup 2016/07 - Kinto: A minimalist JSON storage service by M. Leplatre" + placed: true + - id: "S1fZAascs04" + title: "PyBCN Meetup 2019/04 - Does Django scale? Introducción a la escalabilidad by David Arcos" + placed: true + - id: "S3ebYJxXBRU" + title: "PyDayBCN 2020 Track 2 - Antifragile Software: Code that gains from disorder by A. Duran" + placed: true + - id: "SMXlwINeKyQ" + title: "PyBCN Meetup 2020/01 - Jazz chord generation using Deep Learning by M. Dorobek" + placed: true + - id: "Se3FmYvn6sM" + title: "PyDayBCN 2020 Track 2 - Network automation using Python by C. Adell" + placed: true + - id: "TLuqx4cwGPQ" + title: "PyBCN Meetup 2015/12 - Functional Programming by G. Blasco" + placed: true + - id: "TkrTM2Byj34" + title: "PyBCN Meetup 2019/02 - Repository templates with Cookiecutter by H. Cantó" + placed: true + - id: "Tppi9Fsiwp4" + title: "PyBCN Meetup 2016/03 - Computational complexity in Python by J. Soucheiron" + placed: true + - id: "UhNQRmAUJj0" + title: "PyBCN Meetup 2020/05 - Impact of the COVID-19 pandemic in the IT labor market by D. Martos" + placed: true + - id: "UtK-npeVsH0" + title: "PyDayBCN 2020 Track 1 - JINA AI: An Open Source Neural Search Framework by J. Fontanals" + placed: true + - id: "VE-JE4G53c8" + title: "PyMeetup 2023/04/27 Python Packaging 101 by Ferran Jovell" + placed: true + - id: "YFfnKTB362c" + title: "PyBCN Meetup 2016/06 - GeoDjango in Agroptima: Mapping Farmer Fields by D. Castillo & J. Powell" + placed: true + - id: "a8smnNogLQU" + title: "PyBCN Meetup 2022/03/04 Aprendizaje a través de grafos: Graph Neural Networks by @camilo_chacon_s" + placed: true + - id: "asdtq4WgbAw" + title: "PyBCN Meetup 2019/06 - Pytest: recomendaciones, paquetes básicos para testing [...] by A. Vallbona" + placed: true + - id: "b8s8a71AYd8" + title: "PyBCN Meetup 2019/09 - Data Quality and how we are trying to break the […] by A. Dorofei" + placed: true + - id: "bqphJQnp3Hw" + title: "PyBCN Meetup 2018/06 - Frozen Python by O. Sánchez" + placed: true + - id: "cmi4B41oOd8" + title: "PyDayBCN 2020 Track 2 - Efficiently share data on a [...] by F. Faraone" + placed: true + - id: "dvN0lMgQ9Pc" + title: "PyBCN Meetup 2019/05 - Damegender: gender detection with NLTK and Scikit by D. Arroyo" + placed: true + - id: "g2kggih_7-A" + title: "PyBCN Meetup 2018/11 - Time series regression with deep neural networks by S. Totaro" + placed: true + - id: "hFdOAUVAKM0" + title: "PyBCN Meetup 2021/03/18 Good to the last drop: Writing robust Flask and Django apps by I. Evans" + placed: true + - id: "h_LXliq1Wik" + title: "PyMeetup 2024/09/26 Ragtime. An Approach to Retrieval-Augmented Generation by Javier Martinez" + placed: true + - id: "ihK7TZeHakY" + title: "PyBCN Meetup 2019/07 - ML Against Fraud by G. Oliveira-Barra" + placed: true + - id: "j0z7GJW0EMA" + title: "PyBCN Meetup 2018/11 Python in metal additive manufacturing Industrial Robotics by H. Canales" + placed: true + - id: "j7pTZtDUeRc" + title: "PyBCN Meetup 2022/04/21 Shorter feedback loop by running impacted tests only by Mathieu Kniewallner" + placed: true + - id: "jUoJGYCWSC0" + title: "PyMeetup 2022/06/15 Creating Python Data Pipelines with Yaetos by Arthur Prevot" + placed: true + - id: "kwa58dEhPNY" + title: "PyDayBCN 2020 Track 2 - Retrying, a better way by C. Adell" + placed: true + - id: "nWVJ7HfFC5E" + title: "PyDayBCN 2020 Track 2 - Building My First Python IoT Device with Containers in 20 minutes by M. Pous" + placed: true + - id: "oLB0eo7tpj0" + title: "PyDayBCN 2020 - Welcome Session" + placed: true + unlisted: true + - id: "ousMvSsY0Eo" + title: "PyBCN Meetup 2015/10 - ofxPython: embedding Python into C++ by C. Julià" + placed: true + - id: "pOg3IbFEnlw" + title: "PyBCN Meetup 2022/03/24 Telegram bots - From idea to production by Ferran Jovell" + placed: true + - id: "pPMTC2XG4Gc" + title: "PyBCN Meetup 2015/10 - Web crawling with Notebook and Selenium by S. Puglisi" + placed: true + - id: "pQzlYyOKSTk" + title: "PyBCN Meetup 2019/06 - Don't talk, scheme! by T. Marković" + placed: true + - id: "pTFM5-ur8e8" + title: "PyBCN Meetup 2015/12 - Python for Porn by G. Gavilan" + placed: true + - id: "prWA_rqKtVo" + title: "PyBCN July 2018 - Building NLP Models with Python by Gabriel de Maeztu" + placed: true + - id: "qqse-zvnNn0" + title: "PyBCN Meetup 2019/05 - Mocking and Patching Pitfalls by E. Jung" + placed: true + - id: "rF3pLmxr3v8" + title: "PyMeetup 2022/05/19 Introduction to PyScript by David Arcos" + placed: true + - id: "r_upsuTDED4" + title: "Python Meetup 2026/09/16 What: Nothing has beaten our 14b classifier by Marta Rodriguez" + placed: true + - id: "t2Z2yscYaQA" + title: "PyBCN Meetup 2019/03 - Codificando átomos con Python by J. Sánchez" + placed: true + - id: "u-KDwDqMbCI" + title: "PyBCN Meetup 2020/01 - Inversión de control e inyección de dependencias - M. Gomez & D. Albarral" + placed: true + - id: "uUwmknHAIhU" + title: "PyDayBCN 2020 Track 1 - Kornia: differentiable Computer Vision with PyTorch by E. Riba" + placed: true + - id: "uzjlrbqq26M" + title: "PyDayBCN 2020 Track 1 - Working with Text Data in Pandas by D. Mesejo" + placed: true + - id: "v5AEK2ZEDyU" + title: "PyBCN Online: Taula Rodona sobre Python" + placed: true + - id: "v75bTfShH-M" + title: "PyDayBCN 2020 Track 1 - Performing Sentiment Analysis on Video with Serverless by E. Cespedes" + placed: true + - id: "vJMFYR1hF5E" + title: "PyBCN Meetup 2019/02 - Recursive generators by Joan Vilaltella" + placed: true + - id: "w9cYczex79M" + title: "PyDayBCN 2020 Track 1 - Ready, Set, Go with Numba by A. Mahato" + placed: true + - id: "xOT4pg5jqVU" + title: "PyBCN Meetup 2019/07 - Python on uControllers by J. Biondi" + placed: true + - id: "xlRek0SkGZ8" + title: "PyBCN Meetup 2016/06 - Efficient Django by David Arcos" + placed: true + +# Videos the event pages link that another channel hosts, so bin/list-channel +# never expects them in the tabs above. Today these are the recordings of +# PyData Barcelona 2017, on the PyData channel, which pyvideo kept and the +# archive import carried over. An entry takes the id, the title as that +# channel shows it, and the channel. +elsewhere: + - id: "-nTLS7BtcGA" + title: "Diego Hueltes - Data science for lazy people... genetics will work for you!" + channel: "PyData" + - id: "0XYRr6MLrVA" + title: "Jordi Deu-Pons - Running jupyter notebook remotely in a docker swarm cluster" + channel: "PyData" + - id: "0ni90h8EErQ" + title: "Miguel Zavala-Ake - Python for visualization of HPC applications" + channel: "PyData" + - id: "2Ot3gyGLVA0" + title: "Guillem Duran Ballester - Happiness inside a job: a social network analysis" + channel: "PyData" + - id: "4YqMpYqjqps" + title: "Jordi Torrents - Analyzing code contributions to the CPython project using NetworkX and Matplotlib" + channel: "PyData" + - id: "8h3uyQfiMNc" + title: "Gema Parreño - NASA Space APPS Challenge: Asteroid prediction impact" + channel: "PyData" + - id: "8kL71zk4KNk" + title: "Maciej Siwek - Despicable machines: how computers can be assholes" + channel: "PyData" + - id: "9g-DaHZZKDE" + title: "Claudia Millán - Using network community clustering algorithms [...]" + channel: "PyData" + - id: "G2GuL-xPhJA" + title: "Yang Liu - Increasing the trading prediction by mining aggregated human texting messages" + channel: "PyData" + - id: "IkIfxkI5qpY" + title: "Ramon Navarro Bosch - Guillotina - An Async REST Resource DB to manage millions of objects" + channel: "PyData" + - id: "IlofEE7Sswc" + title: "Claudia Guirao - Machine Learning to know if you R coming" + channel: "PyData" + - id: "IpZeg2siLVU" + title: "Óscar Gallardo Román - LympHOS2, Organizing and Sharing Biological Data" + channel: "PyData" + - id: "LAy8vD4PQLg" + title: "Camilo Cardona - Prototyping Interactive Dashboards with Jupyter Notebooks" + channel: "PyData" + - id: "NBliyFXnWeo" + title: "Travis Oliphant - Chief Data Scientist and co-founder of Continuum Analytics" + channel: "PyData" + - id: "PF0HCAmzz7U" + title: "Pascal van Kooten - DeepCare Chatbot - Generating answers to customers using Deep Learning and NLP" + channel: "PyData" + - id: "TI05I_8uS3U" + title: "Holden Karau - The Magic Behind PySpark, how it impacts perf & the \"future\"" + channel: "PyData" + - id: "U_Aq2cPxwss" + title: "Margriet Groenendijk - A Beginners Guide to Weather & Climate Data" + channel: "PyData" + - id: "WKgNNC0VLhM" + title: "Yufeng Guo - TensorFlow Wide & Deep: Advanced Classification the easy way" + channel: "PyData" + - id: "XM_r5La-1tA" + title: "Jaime Fernandez del Rio - The Secret Life Of Rolling Pandas" + channel: "PyData" + - id: "aEFR7_EzMJs" + title: "Massimo Domenico Sammito - How to map a protein structure into a network graph [...]" + channel: "PyData" + - id: "aTwvQZjEZhk" + title: "Carles Illa - Web Scraping with Python" + channel: "PyData" + - id: "aicyYd8MZWo" + title: "David Arcos - Security for Data Scientists" + channel: "PyData" + - id: "eSaLdLrXzO4" + title: "Guillem Borrell Nogueras - Blockchain and smart contracts explained (and simplified)" + channel: "PyData" + - id: "jzuQJg3bFy8" + title: "Joaquin Pais - Marketing Data Science" + channel: "PyData" + - id: "o9PC4JC74tU" + title: "Francesc Alted - Squeeze (gently) your data" + channel: "PyData" + - id: "pdrX1qdjvxE" + title: "Nicholas A. Del Grosso, Javier Martinez Alcantara - The Neuroscience Lab" + channel: "PyData" + - id: "qdEhJ0uT7wk" + title: "Constant Bridon - Feature Importance and Ensemble Methods : a new perspective" + channel: "PyData" + - id: "rPDZg2--5uM" + title: "Guillem Borrell Nogueras - How to manage complexity in distributed applications" + channel: "PyData" + - id: "uLC0t5JZBZs" + title: "Egor Bulychev - Extending Jupyter with Google Cloud Storage file system backend" + channel: "PyData" diff --git a/data/role_emoji.yaml b/data/role_emoji.yaml index 41eb4cbe1..28e44778e 100644 --- a/data/role_emoji.yaml +++ b/data/role_emoji.yaml @@ -4,10 +4,9 @@ # of the event page through roles.yaml. For a roles row it is the label of # the row, which is a level name of an organizers page through roles.yaml, # and a level name that is not a role ("Permanent Committee", -# "Collaborators", "Management Board (2026)") is not here and takes the -# "*" entry. Right side: one emoji. A role that is not here takes the "*" +# "Management Board (2026)") is not here and takes the "*" entry. Right side: one emoji. A role that is not here takes the "*" # entry, so a new role shows up with a neutral glyph rather than with -# none, and the row does not change shape when it is added. The four +# none, and the row does not change shape when it is added. The three # level names above are the live test of that fallback. # # Every emoji here has emoji presentation by default (Emoji_Presentation @@ -46,6 +45,5 @@ Events: 📅 # needs a row of its own, and until it has one its glyph is the neutral # one, not a wrong one. Permanent Committee: 🧭 -Collaborators: 🤝 Management Board (2026): 📋 -Management Board (2018 - 2025): 📋 +Former Management Board (2018 - 2025): 📋 diff --git a/data/roles.yaml b/data/roles.yaml index e8dc8c492..401edc274 100644 --- a/data/roles.yaml +++ b/data/roles.yaml @@ -14,8 +14,13 @@ # itself is not mapped: no level falls back to it, # and a new unnamed level under it would show the title as written, which # is the signal to name the level. +# +# Collaborators is a level name of the organizers page and of PyDay BCN +# 2016. Unmapped, it printed "Collaborators at PyBCN" on the page of one +# person, a plural for one (David Arcos, 2026-10-15). Speakers: Speaker Organizers: Organizer +Collaborators: Collaborator Mentors: Mentor Volunteers: Volunteer PyLadiesBCN Organizers: Organizer diff --git a/layouts/shortcodes/membership/membership-form-reminder.html b/layouts/shortcodes/membership/membership-form-reminder.html index a3f06feab..ca65ba1be 100644 --- a/layouts/shortcodes/membership/membership-form-reminder.html +++ b/layouts/shortcodes/membership/membership-form-reminder.html @@ -3,4 +3,4 @@ after a payment completes. */ -}}

If you haven't already, please remember to fill the -PyBCN Membership Form.

+{{ partial "link_mark.html" "https://forms.gle/" }}PyBCN Membership Form.

diff --git a/layouts/shortcodes/membership/membership-process.html b/layouts/shortcodes/membership/membership-process.html index 1417681f3..a605c65c8 100644 --- a/layouts/shortcodes/membership/membership-process.html +++ b/layouts/shortcodes/membership/membership-process.html @@ -1,6 +1,6 @@

To become a member you must follow two steps:

    -
  1. Fill the PyBCN Membership Form.
  2. +
  3. Fill the {{ partial "link_mark.html" "https://forms.gle/" }}PyBCN Membership Form.
  4. Pay through PayPal using the link below.

After completing steps 1 and 2, we'll contact you by email with you membership number and a big thank you :D

diff --git a/themes/pybcn_theme/assets/images/people/giorgio-polvara.jpg b/themes/pybcn_theme/assets/images/people/giorgio-polvara.jpg new file mode 100644 index 000000000..3a2e45eee Binary files /dev/null and b/themes/pybcn_theme/assets/images/people/giorgio-polvara.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/01-today-we-re-doing-the-hands-on-django-with-pyladie.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/01-today-we-re-doing-the-hands-on-django-with-pyladie.jpg new file mode 100644 index 000000000..5f8663880 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/01-today-we-re-doing-the-hands-on-django-with-pyladie.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/02-full-house-10-mentors-and-30-mentees-coding-their.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/02-full-house-10-mentors-and-30-mentees-coding-their.jpg new file mode 100644 index 000000000..6229d800f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/02-full-house-10-mentors-and-30-mentees-coding-their.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/03-we-re-doing-a-few-lightning-talks-before-lunch.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/03-we-re-doing-a-few-lightning-talks-before-lunch.jpg new file mode 100644 index 000000000..41f9fdfd9 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/03-we-re-doing-a-few-lightning-talks-before-lunch.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/04-cool-catalan-sign-language-recognition-by-roser-ro.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/04-cool-catalan-sign-language-recognition-by-roser-ro.jpg new file mode 100644 index 000000000..79bfbdce1 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/04-cool-catalan-sign-language-recognition-by-roser-ro.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/05-best-conference-lunch-ever.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/05-best-conference-lunch-ever.jpg new file mode 100644 index 000000000..255773010 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/05-best-conference-lunch-ever.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/06-no-siesta-only-coding.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/06-no-siesta-only-coding.jpg new file mode 100644 index 000000000..9c96e7568 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/06-no-siesta-only-coding.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/07-let-s-play-a-game.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/07-let-s-play-a-game.jpg new file mode 100644 index 000000000..4a58e30c0 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/07-let-s-play-a-game.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/08-kathrin-wins-the-prize.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/08-kathrin-wins-the-prize.jpg new file mode 100644 index 000000000..a74d52235 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/08-kathrin-wins-the-prize.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/09-thanks-for-attending-it-s-been-great.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/09-thanks-for-attending-it-s-been-great.jpg new file mode 100644 index 000000000..2e60fc4fa Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/09-thanks-for-attending-it-s-been-great.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/10-the-hands-on-django-with-pyladiesbcn-was-a-huge-su.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/10-the-hands-on-django-with-pyladiesbcn-was-a-huge-su.jpg new file mode 100644 index 000000000..508182c68 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/10-the-hands-on-django-with-pyladiesbcn-was-a-huge-su.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django-2022/11-finally-a-big-applause-to-all-our-organizers-mento.jpg b/themes/pybcn_theme/assets/images/photos/django-2022/11-finally-a-big-applause-to-all-our-organizers-mento.jpg new file mode 100644 index 000000000..8b1a5c091 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/django-2022/11-finally-a-big-applause-to-all-our-organizers-mento.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/django_pyladies_2022/header.jpg b/themes/pybcn_theme/assets/images/photos/django_pyladies_2022/header.jpg index 3424affec..d9e4e83e6 100644 Binary files a/themes/pybcn_theme/assets/images/photos/django_pyladies_2022/header.jpg and b/themes/pybcn_theme/assets/images/photos/django_pyladies_2022/header.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/01-first-day-of-pydatabcn-see-you-here.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/01-first-day-of-pydatabcn-see-you-here.jpg new file mode 100644 index 000000000..32c96eae8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/01-first-day-of-pydatabcn-see-you-here.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/02-about-to-start-the-workshops-pydatabcn.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/02-about-to-start-the-workshops-pydatabcn.jpg new file mode 100644 index 000000000..12a404cac Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/02-about-to-start-the-workshops-pydatabcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/03-taking-numpy-in-stride-by-jaime-fernandez-del-rio.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/03-taking-numpy-in-stride-by-jaime-fernandez-del-rio.jpg new file mode 100644 index 000000000..efda84331 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/03-taking-numpy-in-stride-by-jaime-fernandez-del-rio.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/04-introduction-to-data-analysis-with-pandas-is-full.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/04-introduction-to-data-analysis-with-pandas-is-full.jpg new file mode 100644 index 000000000..d2332a27f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/04-introduction-to-data-analysis-with-pandas-is-full.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/05-an-introduction-to-the-tidyverse-by-jorge-cimentad.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/05-an-introduction-to-the-tidyverse-by-jorge-cimentad.jpg new file mode 100644 index 000000000..f339ca1fc Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/05-an-introduction-to-the-tidyverse-by-jorge-cimentad.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/06-waves-hackaton-by-mcarricano-pydatabcn.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/06-waves-hackaton-by-mcarricano-pydatabcn.jpg new file mode 100644 index 000000000..ddb82e798 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/06-waves-hackaton-by-mcarricano-pydatabcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/07-high-performance-python-for-data-analysis-by-guill.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/07-high-performance-python-for-data-analysis-by-guill.jpg new file mode 100644 index 000000000..1df223882 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/07-high-performance-python-for-data-analysis-by-guill.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/08-hdf5-and-pandas-by-francescalted-pydatabcn.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/08-hdf5-and-pandas-by-francescalted-pydatabcn.jpg new file mode 100644 index 000000000..a7852f540 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/08-hdf5-and-pandas-by-francescalted-pydatabcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/09-social-network-analysis-with-python-and-networkx-b.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/09-social-network-analysis-with-python-and-networkx-b.jpg new file mode 100644 index 000000000..0867b9f85 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/09-social-network-analysis-with-python-and-networkx-b.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/10-good-morning-today-we-ll-have-lightning-talks-go-t.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/10-good-morning-today-we-ll-have-lightning-talks-go-t.jpg new file mode 100644 index 000000000..ab1595b00 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/10-good-morning-today-we-ll-have-lightning-talks-go-t.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/11-welcome-to-pydatabcn-2017.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/11-welcome-to-pydatabcn-2017.jpg new file mode 100644 index 000000000..e0a9ef900 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/11-welcome-to-pydatabcn-2017.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/12-ifosch-our-great-sponsors-made-pydatabcn-possible.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/12-ifosch-our-great-sponsors-made-pydatabcn-possible.jpg new file mode 100644 index 000000000..f1d7f766c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/12-ifosch-our-great-sponsors-made-pydatabcn-possible.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/13-first-keynote-data-science-and-machine-learning-wi.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/13-first-keynote-data-science-and-machine-learning-wi.jpg new file mode 100644 index 000000000..69f67332d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/13-first-keynote-data-science-and-machine-learning-wi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/14-pydatabcn-keynote-speaker-teoliphant-is-on-stage-t.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/14-pydatabcn-keynote-speaker-teoliphant-is-on-stage-t.jpg new file mode 100644 index 000000000..a510565f1 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/14-pydatabcn-keynote-speaker-teoliphant-is-on-stage-t.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/15-second-keynote-the-magic-behind-pyspark-how-it-imp.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/15-second-keynote-the-magic-behind-pyspark-how-it-imp.jpg new file mode 100644 index 000000000..86e7dfdd8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/15-second-keynote-the-magic-behind-pyspark-how-it-imp.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/16-third-keynote-nasa-space-apps-challenge-asteroid-p.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/16-third-keynote-nasa-space-apps-challenge-asteroid-p.jpg new file mode 100644 index 000000000..c9cceb35d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/16-third-keynote-nasa-space-apps-challenge-asteroid-p.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/17-fourth-keynote-squeeze-gently-your-big-data-by-fra.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/17-fourth-keynote-squeeze-gently-your-big-data-by-fra.jpg new file mode 100644 index 000000000..3648214ee Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/17-fourth-keynote-squeeze-gently-your-big-data-by-fra.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/18-lightning-talks-pydatabcn.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/18-lightning-talks-pydatabcn.jpg new file mode 100644 index 000000000..f78b05307 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/18-lightning-talks-pydatabcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2017/19-last-keynote-closing-act-security-for-data-scienti.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2017/19-last-keynote-closing-act-security-for-data-scienti.jpg new file mode 100644 index 000000000..52d1af2cc Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2017/19-last-keynote-closing-act-security-for-data-scienti.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/01-starting-the-day-our-president-lpmayos-is-introduc.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/01-starting-the-day-our-president-lpmayos-is-introduc.jpg new file mode 100644 index 000000000..245465a84 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/01-starting-the-day-our-president-lpmayos-is-introduc.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/02-this-event-is-only-possible-thanks-to-our-sponsors.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/02-this-event-is-only-possible-thanks-to-our-sponsors.jpg new file mode 100644 index 000000000..0a541925a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/02-this-event-is-only-possible-thanks-to-our-sponsors.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/03-data-orchestration-with-airflow-by-fiorella-piriz.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/03-data-orchestration-with-airflow-by-fiorella-piriz.jpg new file mode 100644 index 000000000..bc425dc9b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/03-data-orchestration-with-airflow-by-fiorella-piriz.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/04-jupyter-notebooks-101-by-amalia-vradi.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/04-jupyter-notebooks-101-by-amalia-vradi.jpg new file mode 100644 index 000000000..5a86ff3ed Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/04-jupyter-notebooks-101-by-amalia-vradi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/05-convierte-tus-notebooks-de-jupyter-en-codigo-mante.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/05-convierte-tus-notebooks-de-jupyter-en-codigo-mante.jpg new file mode 100644 index 000000000..b4ff064e0 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/05-convierte-tus-notebooks-de-jupyter-en-codigo-mante.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/06-de-los-datos-al-modelo-en-produccion-by-ricardo-an.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/06-de-los-datos-al-modelo-en-produccion-by-ricardo-an.jpg new file mode 100644 index 000000000..b8d321cc4 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/06-de-los-datos-al-modelo-en-produccion-by-ricardo-an.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/07-had-a-nice-coffee-break-let-s-do-more-workshops.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/07-had-a-nice-coffee-break-let-s-do-more-workshops.jpg new file mode 100644 index 000000000..3f440c730 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/07-had-a-nice-coffee-break-let-s-do-more-workshops.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/08-data-analytics-with-python-by-juan-bernardo-lince.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/08-data-analytics-with-python-by-juan-bernardo-lince.jpg new file mode 100644 index 000000000..234b002fa Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/08-data-analytics-with-python-by-juan-bernardo-lince.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/09-machine-learning-robustness-and-monitoring-by-dani.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/09-machine-learning-robustness-and-monitoring-by-dani.jpg new file mode 100644 index 000000000..e64b2421a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/09-machine-learning-robustness-and-monitoring-by-dani.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/10-indices-invertidos-desde-cero-by-ricardo-ander-egg.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/10-indices-invertidos-desde-cero-by-ricardo-ander-egg.jpg new file mode 100644 index 000000000..a0e4f977d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/10-indices-invertidos-desde-cero-by-ricardo-ander-egg.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/11-fine-tuning-of-llm-models-for-text-processing-by-r.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/11-fine-tuning-of-llm-models-for-text-processing-by-r.jpg new file mode 100644 index 000000000..d04d96f53 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/11-fine-tuning-of-llm-models-for-text-processing-by-r.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/12-ask-your-data-build-a-full-pipeline-to-get-generat.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/12-ask-your-data-build-a-full-pipeline-to-get-generat.jpg new file mode 100644 index 000000000..9de2eba97 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/12-ask-your-data-build-a-full-pipeline-to-get-generat.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/13-foundations-of-machine-learning-exploring-use-case.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/13-foundations-of-machine-learning-exploring-use-case.jpg new file mode 100644 index 000000000..7c44b6932 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/13-foundations-of-machine-learning-exploring-use-case.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/14-com-visualitzar-incertesa-i-models-probabilistics.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/14-com-visualitzar-incertesa-i-models-probabilistics.jpg new file mode 100644 index 000000000..a24758cef Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/14-com-visualitzar-incertesa-i-models-probabilistics.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/15-how-data-scientists-can-be-more-productive-with-th.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/15-how-data-scientists-can-be-more-productive-with-th.jpg new file mode 100644 index 000000000..93d072abd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/15-how-data-scientists-can-be-more-productive-with-th.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/16-python-models-and-alerts-within-dbt-with-dbt-fal-a.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/16-python-models-and-alerts-within-dbt-with-dbt-fal-a.jpg new file mode 100644 index 000000000..8008be42a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/16-python-models-and-alerts-within-dbt-with-dbt-fal-a.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/17-international-data-spaces-implementing-the-europea.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/17-international-data-spaces-implementing-the-europea.jpg new file mode 100644 index 000000000..086c036ee Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/17-international-data-spaces-implementing-the-europea.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/18-data-science-in-transport-modelling-by-monica-domi.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/18-data-science-in-transport-modelling-by-monica-domi.jpg new file mode 100644 index 000000000..b4ec9a9e7 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/18-data-science-in-transport-modelling-by-monica-domi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/19-serverless-machine-learning-streamlining-deploymen.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/19-serverless-machine-learning-streamlining-deploymen.jpg new file mode 100644 index 000000000..3d24ee2ae Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/19-serverless-machine-learning-streamlining-deploymen.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/20-bundling-a-python-app-in-a-single-file-ricardo-and.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/20-bundling-a-python-app-in-a-single-file-ricardo-and.jpg new file mode 100644 index 000000000..a064b3282 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/20-bundling-a-python-app-in-a-single-file-ricardo-and.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/21-the-workshops-and-talks-are-done-let-s-play-a-game.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/21-the-workshops-and-talks-are-done-let-s-play-a-game.jpg new file mode 100644 index 000000000..1b4368532 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/21-the-workshops-and-talks-are-done-let-s-play-a-game.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/22-the-best-programming-language-is.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/22-the-best-programming-language-is.jpg new file mode 100644 index 000000000..a88207051 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/22-the-best-programming-language-is.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/23-all-our-communications-are-written-by.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/23-all-our-communications-are-written-by.jpg new file mode 100644 index 000000000..f9108d09f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/23-all-our-communications-are-written-by.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/24-will-you-volunteer-at-the-next-event-sure-natalias.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/24-will-you-volunteer-at-the-next-event-sure-natalias.jpg new file mode 100644 index 000000000..b8441a1e4 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/24-will-you-volunteer-at-the-next-event-sure-natalias.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pydata-2023/25-nataliasirera-the-pydatabcn-2023-has-been-incredib.jpg b/themes/pybcn_theme/assets/images/photos/pydata-2023/25-nataliasirera-the-pydatabcn-2023-has-been-incredib.jpg new file mode 100644 index 000000000..fbc1c9e65 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pydata-2023/25-nataliasirera-the-pydatabcn-2023-has-been-incredib.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2016/01-we-are-starting-with-tensorflow.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2016/01-we-are-starting-with-tensorflow.jpg new file mode 100644 index 000000000..6ef151daa Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2016/01-we-are-starting-with-tensorflow.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2016/02-and-we-re-in-our-second-talk-already-radinamatic-i.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2016/02-and-we-re-in-our-second-talk-already-radinamatic-i.jpg new file mode 100644 index 000000000..79ce27bcb Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2016/02-and-we-re-in-our-second-talk-already-radinamatic-i.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2016/03-citybik-es-talk-at-pybcn-pydaybcn16-pydayes16.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2016/03-citybik-es-talk-at-pybcn-pydaybcn16-pydayes16.jpg new file mode 100644 index 000000000..958730b39 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2016/03-citybik-es-talk-at-pybcn-pydaybcn16-pydayes16.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2016/04-it-was-an-amazing-meetup-thanks-to-all-who-helped.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2016/04-it-was-an-amazing-meetup-thanks-to-all-who-helped.jpg new file mode 100644 index 000000000..e4ede45b7 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2016/04-it-was-an-amazing-meetup-thanks-to-all-who-helped.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/01-about-to-start-the-pydaybcn2018.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/01-about-to-start-the-pydaybcn2018.jpg new file mode 100644 index 000000000..d8db37393 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/01-about-to-start-the-pydaybcn2018.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/02-welcome-to-the-pydaybcn2018-lpmayos-is-explaining.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/02-welcome-to-the-pydaybcn2018-lpmayos-is-explaining.jpg new file mode 100644 index 000000000..fee234fdb Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/02-welcome-to-the-pydaybcn2018-lpmayos-is-explaining.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/03-full-room-the-100-tickets-were-over-in-less-than-t.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/03-full-room-the-100-tickets-were-over-in-less-than-t.jpg new file mode 100644 index 000000000..e6a629769 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/03-full-room-the-100-tickets-were-over-in-less-than-t.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/04-pybcn-went-from-17-to-3000-members-in-11-years-pyd.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/04-pybcn-went-from-17-to-3000-members-in-11-years-pyd.jpg new file mode 100644 index 000000000..cb325ee91 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/04-pybcn-went-from-17-to-3000-members-in-11-years-pyd.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/05-we-want-to-organize-more-activities-help-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/05-we-want-to-organize-more-activities-help-us.jpg new file mode 100644 index 000000000..8e7bc7cfd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/05-we-want-to-organize-more-activities-help-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/06-we-just-registered-an-association-seriousbusiness.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/06-we-just-registered-an-association-seriousbusiness.jpg new file mode 100644 index 000000000..1d16f942f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/06-we-just-registered-an-association-seriousbusiness.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/07-we-re-doing-a-code-tournament-with-prizes-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/07-we-re-doing-a-code-tournament-with-prizes-pydaybcn.jpg new file mode 100644 index 000000000..85372c5b2 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/07-we-re-doing-a-code-tournament-with-prizes-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/08-developing-a-small-application-with-git-ignasi-fos.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/08-developing-a-small-application-with-git-ignasi-fos.jpg new file mode 100644 index 000000000..5347af670 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/08-developing-a-small-application-with-git-ignasi-fos.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/09-introduction-to-pytorch-bartek-skorulski-pydaybcn2.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/09-introduction-to-pytorch-bartek-skorulski-pydaybcn2.jpg new file mode 100644 index 000000000..7e45de016 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/09-introduction-to-pytorch-bartek-skorulski-pydaybcn2.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/10-data-analysis-with-jupyter-notebook-pandas-and-plo.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/10-data-analysis-with-jupyter-notebook-pandas-and-plo.jpg new file mode 100644 index 000000000..100a4a86b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/10-data-analysis-with-jupyter-notebook-pandas-and-plo.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/11-mirror-mirror-on-the-wall-who-is-the-fairest-of-th.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/11-mirror-mirror-on-the-wall-who-is-the-fairest-of-th.jpg new file mode 100644 index 000000000..f0d349ddd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/11-mirror-mirror-on-the-wall-who-is-the-fairest-of-th.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/12-lunch-time-pydaybcn2018.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/12-lunch-time-pydaybcn2018.jpg new file mode 100644 index 000000000..7aaadfc8f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/12-lunch-time-pydaybcn2018.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/13-intro-to-nosql-db-with-pymongo-jordi-guix.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/13-intro-to-nosql-db-with-pymongo-jordi-guix.jpg new file mode 100644 index 000000000..5532a8d03 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/13-intro-to-nosql-db-with-pymongo-jordi-guix.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/14-python-and-elasticsearch-artur-mindiyarov.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/14-python-and-elasticsearch-artur-mindiyarov.jpg new file mode 100644 index 000000000..2d6ed7e0c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/14-python-and-elasticsearch-artur-mindiyarov.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/15-guillotina-data-framework-ramon-navarro-bosch-bloo.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/15-guillotina-data-framework-ramon-navarro-bosch-bloo.jpg new file mode 100644 index 000000000..da6b6e758 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/15-guillotina-data-framework-ramon-navarro-bosch-bloo.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2018/16-organizando-chistes-con-nlp-julio-martinez-liopic.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2018/16-organizando-chistes-con-nlp-julio-martinez-liopic.jpg new file mode 100644 index 000000000..194a6005a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2018/16-organizando-chistes-con-nlp-julio-martinez-liopic.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/01-the-pydaybcn-just-started-keynote-by-our-president.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/01-the-pydaybcn-just-started-keynote-by-our-president.jpg new file mode 100644 index 000000000..0e684d433 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/01-the-pydaybcn-just-started-keynote-by-our-president.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/03-python-barcelona-is-doing-lots-of-events.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/03-python-barcelona-is-doing-lots-of-events.jpg new file mode 100644 index 000000000..f012cf994 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/03-python-barcelona-is-doing-lots-of-events.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/04-this-is-us-the-social-media-guy.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/04-this-is-us-the-social-media-guy.jpg new file mode 100644 index 000000000..69fbf97de Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/04-this-is-us-the-social-media-guy.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/05-help-python-barcelona-send-a-proposal-become-a-mem.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/05-help-python-barcelona-send-a-proposal-become-a-mem.jpg new file mode 100644 index 000000000..3c0f3d1cb Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/05-help-python-barcelona-send-a-proposal-become-a-mem.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/06-introducing-the-djangogirlsbcn-event-by-ellaquimic.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/06-introducing-the-djangogirlsbcn-event-by-ellaquimic.jpg new file mode 100644 index 000000000..8991b0b44 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/06-introducing-the-djangogirlsbcn-event-by-ellaquimic.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/07-me-oh-no-a-g-balloon-is-broken-djangogirlsbcn-hold.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/07-me-oh-no-a-g-balloon-is-broken-djangogirlsbcn-hold.jpg new file mode 100644 index 000000000..29c9362a8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/07-me-oh-no-a-g-balloon-is-broken-djangogirlsbcn-hold.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/08-this-is-the-agenda-for-our-three-workshop-track.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/08-this-is-the-agenda-for-our-three-workshop-track.jpg new file mode 100644 index 000000000..299b31444 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/08-this-is-the-agenda-for-our-three-workshop-track.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/09-deep-learning-for-image-classification-using-tenso.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/09-deep-learning-for-image-classification-using-tenso.jpg new file mode 100644 index 000000000..8ff49498a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/09-deep-learning-for-image-classification-using-tenso.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/10-arquitectura-limpia-para-microservicios-un-caso-pr.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/10-arquitectura-limpia-para-microservicios-un-caso-pr.jpg new file mode 100644 index 000000000..5fa895a21 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/10-arquitectura-limpia-para-microservicios-un-caso-pr.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/11-keep-your-repo-clean-by-hectorcanto-dev-from-bluel.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/11-keep-your-repo-clean-by-hectorcanto-dev-from-bluel.jpg new file mode 100644 index 000000000..04c0939f5 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/11-keep-your-repo-clean-by-hectorcanto-dev-from-bluel.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/12-great-materials-on-our-djangogirls-track.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/12-great-materials-on-our-djangogirls-track.jpg new file mode 100644 index 000000000..707d5c26b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/12-great-materials-on-our-djangogirls-track.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/13-decoradores-en-evolucion.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/13-decoradores-en-evolucion.jpg new file mode 100644 index 000000000..26edebd12 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/13-decoradores-en-evolucion.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/14-refactoring-a-web-application-with-python.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/14-refactoring-a-web-application-with-python.jpg new file mode 100644 index 000000000..83e449dde Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/14-refactoring-a-web-application-with-python.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/15-thanks-codekiwicom-for-bringing-churros-con-chocol.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/15-thanks-codekiwicom-for-bringing-churros-con-chocol.jpg new file mode 100644 index 000000000..0b812586c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/15-thanks-codekiwicom-for-bringing-churros-con-chocol.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/16-building-interactive-data-visualizations-with-plot.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/16-building-interactive-data-visualizations-with-plot.jpg new file mode 100644 index 000000000..4dc4cbf1b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/16-building-interactive-data-visualizations-with-plot.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/17-sqlalchemy-from-0-to-proficient-by-bustawin.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/17-sqlalchemy-from-0-to-proficient-by-bustawin.jpg new file mode 100644 index 000000000..2a699fa06 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/17-sqlalchemy-from-0-to-proficient-by-bustawin.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/18-quick-data-exploration-with-jupyter-and-ipywidgets.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/18-quick-data-exploration-with-jupyter-and-ipywidgets.jpg new file mode 100644 index 000000000..49472e843 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/18-quick-data-exploration-with-jupyter-and-ipywidgets.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/19-thanks-codekiwicom-for-the-quiz-and-the-prizes-pyd.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/19-thanks-codekiwicom-for-the-quiz-and-the-prizes-pyd.jpg new file mode 100644 index 000000000..a2fb14198 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/19-thanks-codekiwicom-for-the-quiz-and-the-prizes-pyd.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/20-great-ending-keynote-from-dzpm-hey-is-that-a-napki.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/20-great-ending-keynote-from-dzpm-hey-is-that-a-napki.jpg new file mode 100644 index 000000000..698a12ffe Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/20-great-ending-keynote-from-dzpm-hey-is-that-a-napki.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2019/21-finally-our-gratitude-to-the-python-barcelona-comm.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2019/21-finally-our-gratitude-to-the-python-barcelona-comm.jpg new file mode 100644 index 000000000..a50cbb583 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2019/21-finally-our-gratitude-to-the-python-barcelona-comm.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/01-gooooood-morning-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/01-gooooood-morning-pydaybcn.jpg new file mode 100644 index 000000000..74334f024 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/01-gooooood-morning-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/02-kudos-to-our-organizing-team-lpmayos-nataliasirera.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/02-kudos-to-our-organizing-team-lpmayos-nataliasirera.jpg new file mode 100644 index 000000000..e14f5bba9 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/02-kudos-to-our-organizing-team-lpmayos-nataliasirera.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/03-thanks-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/03-thanks-for-sponsoring-us.jpg new file mode 100644 index 000000000..9898ecc03 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/03-thanks-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/04-build-a-chat-application-that-lets-you-speak-multi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/04-build-a-chat-application-that-lets-you-speak-multi.jpg new file mode 100644 index 000000000..af281ec10 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/04-build-a-chat-application-that-lets-you-speak-multi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/05-preplycom-building-the-cloud-with-python-getting-s.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/05-preplycom-building-the-cloud-with-python-getting-s.jpg new file mode 100644 index 000000000..f0332a391 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/05-preplycom-building-the-cloud-with-python-getting-s.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/06-implementing-your-api-with-fastapi-by-esperanza-bu.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/06-implementing-your-api-with-fastapi-by-esperanza-bu.jpg new file mode 100644 index 000000000..74faaad90 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/06-implementing-your-api-with-fastapi-by-esperanza-bu.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/07-how-to-create-data-apps-with-python-by-sergi-ortiz.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/07-how-to-create-data-apps-with-python-by-sergi-ortiz.jpg new file mode 100644 index 000000000..04bdbcb69 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/07-how-to-create-data-apps-with-python-by-sergi-ortiz.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/08-and-the-catering-for-the-coffee-break-is-ready.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/08-and-the-catering-for-the-coffee-break-is-ready.jpg new file mode 100644 index 000000000..5f078e0e7 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/08-and-the-catering-for-the-coffee-break-is-ready.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/09-yes-we-got-the-good-stuff.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/09-yes-we-got-the-good-stuff.jpg new file mode 100644 index 000000000..83f6ae093 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/09-yes-we-got-the-good-stuff.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/10-creating-cute-user-interfaces-in-python-with-qt-by.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/10-creating-cute-user-interfaces-in-python-with-qt-by.jpg new file mode 100644 index 000000000..1f2de0930 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/10-creating-cute-user-interfaces-in-python-with-qt-by.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/11-microservicios-en-la-vida-moderna-un-enfoque-pytho.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/11-microservicios-en-la-vida-moderna-un-enfoque-pytho.jpg new file mode 100644 index 000000000..9ee906051 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/11-microservicios-en-la-vida-moderna-un-enfoque-pytho.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/12-aydevosotros-qustodio-introduction-to-django-by-vi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/12-aydevosotros-qustodio-introduction-to-django-by-vi.jpg new file mode 100644 index 000000000..e0e9e4f93 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/12-aydevosotros-qustodio-introduction-to-django-by-vi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/13-vector-search-engines-with-python-from-embeddings.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/13-vector-search-engines-with-python-from-embeddings.jpg new file mode 100644 index 000000000..7e081aca3 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/13-vector-search-engines-with-python-from-embeddings.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/14-nice-limited-edition-pybcn-stickers.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/14-nice-limited-edition-pybcn-stickers.jpg new file mode 100644 index 000000000..d26be3172 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/14-nice-limited-edition-pybcn-stickers.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/15-remember-we-ll-take-the-group-photo-at-13h-in-the.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/15-remember-we-ll-take-the-group-photo-at-13h-in-the.jpg new file mode 100644 index 000000000..6887c77a8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/15-remember-we-ll-take-the-group-photo-at-13h-in-the.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/16-at-the-end-of-each-talk-please-use-the-post-its-to.png b/themes/pybcn_theme/assets/images/photos/pyday-2021/16-at-the-end-of-each-talk-please-use-the-post-its-to.png new file mode 100644 index 000000000..156811e18 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/16-at-the-end-of-each-talk-please-use-the-post-its-to.png differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/16-finally-thanks-to-everybody-who-helped-us-organize.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/16-finally-thanks-to-everybody-who-helped-us-organize.jpg new file mode 100644 index 000000000..b985d498e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/16-finally-thanks-to-everybody-who-helped-us-organize.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/17-warm-coffe.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/17-warm-coffe.jpg new file mode 100644 index 000000000..1f522a89e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/17-warm-coffe.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/18-save-some-pastries-for-our-guys-at-the-entrance.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/18-save-some-pastries-for-our-guys-at-the-entrance.jpg new file mode 100644 index 000000000..9dad9760e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/18-save-some-pastries-for-our-guys-at-the-entrance.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/19-causal-data-science-workshop-by-jordi-mur.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/19-causal-data-science-workshop-by-jordi-mur.jpg new file mode 100644 index 000000000..ce4774b96 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/19-causal-data-science-workshop-by-jordi-mur.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/20-making-mlops-uncool-again-by-david-de-la-iglesia-c.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/20-making-mlops-uncool-again-by-david-de-la-iglesia-c.jpg new file mode 100644 index 000000000..dddfd7a26 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/20-making-mlops-uncool-again-by-david-de-la-iglesia-c.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/21-daviddelachurch-how-to-beat-imposter-syndrome-conf.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/21-daviddelachurch-how-to-beat-imposter-syndrome-conf.jpg new file mode 100644 index 000000000..67cfbdef7 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/21-daviddelachurch-how-to-beat-imposter-syndrome-conf.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/22-daviddelachurch-onnahq-building-a-dag-factory-by-a.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/22-daviddelachurch-onnahq-building-a-dag-factory-by-a.jpg new file mode 100644 index 000000000..dc95f001e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/22-daviddelachurch-onnahq-building-a-dag-factory-by-a.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/23-burnout-paradise-buenas-practicas-para-evitar-el-b.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/23-burnout-paradise-buenas-practicas-para-evitar-el-b.jpg new file mode 100644 index 000000000..97a8df34f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/23-burnout-paradise-buenas-practicas-para-evitar-el-b.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/24-sander-pm-hybridtheory-gl-yes-the-lunch-was-delici.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/24-sander-pm-hybridtheory-gl-yes-the-lunch-was-delici.jpg new file mode 100644 index 000000000..78858dc0d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/24-sander-pm-hybridtheory-gl-yes-the-lunch-was-delici.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/25-say-cheese.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/25-say-cheese.jpg new file mode 100644 index 000000000..551de3efd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/25-say-cheese.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/26-build-a-machine-learning-iot-device-running-python.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/26-build-a-machine-learning-iot-device-running-python.jpg new file mode 100644 index 000000000..fbd0def5a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/26-build-a-machine-learning-iot-device-running-python.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/27-the-moons-of-jupyter-widgets-ecosystem-by-mariana.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/27-the-moons-of-jupyter-widgets-ecosystem-by-mariana.jpg new file mode 100644 index 000000000..435d42d12 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/27-the-moons-of-jupyter-widgets-ecosystem-by-mariana.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/28-signal-processing-from-neurons-to-mars-by-vivek-sh.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/28-signal-processing-from-neurons-to-mars-by-vivek-sh.jpg new file mode 100644 index 000000000..68cde7a89 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/28-signal-processing-from-neurons-to-mars-by-vivek-sh.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/29-keeping-sync-between-datasets-with-diffsync-by-chr.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/29-keeping-sync-between-datasets-with-diffsync-by-chr.jpg new file mode 100644 index 000000000..5a6888c65 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/29-keeping-sync-between-datasets-with-diffsync-by-chr.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2021/30-chadell0-hey-david-hurry-up-and-finish-doing-the-k.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2021/30-chadell0-hey-david-hurry-up-and-finish-doing-the-k.jpg new file mode 100644 index 000000000..145f8a0ef Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2021/30-chadell0-hey-david-hurry-up-and-finish-doing-the-k.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/01-welcome-to-the-pydaybcn-our-president-lpmayos-is-d.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/01-welcome-to-the-pydaybcn-our-president-lpmayos-is-d.jpg new file mode 100644 index 000000000..7e0549230 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/01-welcome-to-the-pydaybcn-our-president-lpmayos-is-d.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/02-our-association-is-run-by-volunteers-we-need-your.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/02-our-association-is-run-by-volunteers-we-need-your.jpg new file mode 100644 index 000000000..02295e7a4 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/02-our-association-is-run-by-volunteers-we-need-your.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/03-companies-are-welcome-too-we-need-your-venues-and.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/03-companies-are-welcome-too-we-need-your-venues-and.jpg new file mode 100644 index 000000000..14662b964 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/03-companies-are-welcome-too-we-need-your-venues-and.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/04-today-we-ll-have-3-tracks-pf-workshops-2-lightning.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/04-today-we-ll-have-3-tracks-pf-workshops-2-lightning.jpg new file mode 100644 index 000000000..2e133ebb3 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/04-today-we-ll-have-3-tracks-pf-workshops-2-lightning.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/05-machine-learning-en-produccion-experimentos-con-ve.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/05-machine-learning-en-produccion-experimentos-con-ve.jpg new file mode 100644 index 000000000..6f3e5413a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/05-machine-learning-en-produccion-experimentos-con-ve.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/06-friendly-fuzzing-for-your-python-saas-applications.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/06-friendly-fuzzing-for-your-python-saas-applications.jpg new file mode 100644 index 000000000..80fbcb171 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/06-friendly-fuzzing-for-your-python-saas-applications.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/07-how-many-ants-can-carry-an-elephant-pushing-the-li.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/07-how-many-ants-can-carry-an-elephant-pushing-the-li.jpg new file mode 100644 index 000000000..abcddee37 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/07-how-many-ants-can-carry-an-elephant-pushing-the-li.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/08-build-air-quality-sensors-with-python-and-choose-y.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/08-build-air-quality-sensors-with-python-and-choose-y.jpg new file mode 100644 index 000000000..12cdca156 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/08-build-air-quality-sensors-with-python-and-choose-y.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/09-build-a-full-stack-app-with-flask-and-vue-by-eva-m.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/09-build-a-full-stack-app-with-flask-and-vue-by-eva-m.jpg new file mode 100644 index 000000000..228b31113 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/09-build-a-full-stack-app-with-flask-and-vue-by-eva-m.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/10-python-as-a-gis-tools-howtos-and-gotchas-by-biel-s.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/10-python-as-a-gis-tools-howtos-and-gotchas-by-biel-s.jpg new file mode 100644 index 000000000..52b16a1c5 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/10-python-as-a-gis-tools-howtos-and-gotchas-by-biel-s.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/11-pyton-chupito.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/11-pyton-chupito.jpg new file mode 100644 index 000000000..3dc0d784e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/11-pyton-chupito.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/12-had-a-great-lunch.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/12-had-a-great-lunch.jpg new file mode 100644 index 000000000..98c71177b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/12-had-a-great-lunch.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/13-building-an-end-to-end-open-source-modern-data-pla.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/13-building-an-end-to-end-open-source-modern-data-pla.jpg new file mode 100644 index 000000000..8fd669342 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/13-building-an-end-to-end-open-source-modern-data-pla.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/14-cuando-los-precios-suben-scrapy-by-jimena-escobar.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/14-cuando-los-precios-suben-scrapy-by-jimena-escobar.jpg new file mode 100644 index 000000000..4a885b2fc Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/14-cuando-los-precios-suben-scrapy-by-jimena-escobar.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/15-inside-out-or-how-to-get-your-app-observable-by-an.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/15-inside-out-or-how-to-get-your-app-observable-by-an.jpg new file mode 100644 index 000000000..e4f0a6ffd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/15-inside-out-or-how-to-get-your-app-observable-by-an.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/16-lightning-talks-amp-coffee.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/16-lightning-talks-amp-coffee.jpg new file mode 100644 index 000000000..1c64cffb0 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/16-lightning-talks-amp-coffee.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/17-very-interesting-lightning-talks-we-astropy.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/17-very-interesting-lightning-talks-we-astropy.jpg new file mode 100644 index 000000000..aea2f4562 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/17-very-interesting-lightning-talks-we-astropy.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/18-making-sense-of-your-data-platform-with-openmetada.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/18-making-sense-of-your-data-platform-with-openmetada.jpg new file mode 100644 index 000000000..cf424856b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/18-making-sense-of-your-data-platform-with-openmetada.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/19-tdd-coding-dojo-by-ana-eliza-barbosa.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/19-tdd-coding-dojo-by-ana-eliza-barbosa.jpg new file mode 100644 index 000000000..98855bd34 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/19-tdd-coding-dojo-by-ana-eliza-barbosa.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/20-using-numba-effectively-today-by-cheuk-ting-ho-che.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/20-using-numba-effectively-today-by-cheuk-ting-ho-che.jpg new file mode 100644 index 000000000..aedb0866d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/20-using-numba-effectively-today-by-cheuk-ting-ho-che.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/21-thank-you-thisiscloudblue-for-sponsoring-the-pyday.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/21-thank-you-thisiscloudblue-for-sponsoring-the-pyday.jpg new file mode 100644 index 000000000..751f81c65 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/21-thank-you-thisiscloudblue-for-sponsoring-the-pyday.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/22-thank-you-qustodio-for-sponsoring-the-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/22-thank-you-qustodio-for-sponsoring-the-pydaybcn.jpg new file mode 100644 index 000000000..918da4485 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/22-thank-you-qustodio-for-sponsoring-the-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/23-thank-you-insideveriff-for-sponsoring-the-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/23-thank-you-insideveriff-for-sponsoring-the-pydaybcn.jpg new file mode 100644 index 000000000..6d0fe20f5 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/23-thank-you-insideveriff-for-sponsoring-the-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/24-thank-you-roverdotcom-es-for-sponsoring-the-pydayb.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/24-thank-you-roverdotcom-es-for-sponsoring-the-pydayb.jpg new file mode 100644 index 000000000..bedad2280 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/24-thank-you-roverdotcom-es-for-sponsoring-the-pydayb.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/25-thank-you-apsl-web-for-sponsoring-the-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/25-thank-you-apsl-web-for-sponsoring-the-pydaybcn.jpg new file mode 100644 index 000000000..bdc9a08e8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/25-thank-you-apsl-web-for-sponsoring-the-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/26-now-the-second-bunch-of-lightning-talks-and-the-fi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/26-now-the-second-bunch-of-lightning-talks-and-the-fi.jpg new file mode 100644 index 000000000..b4de96953 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/26-now-the-second-bunch-of-lightning-talks-and-the-fi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/27-let-s-trash-the-regular-expressions.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/27-let-s-trash-the-regular-expressions.jpg new file mode 100644 index 000000000..c68649a85 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/27-let-s-trash-the-regular-expressions.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/28-optimal-binning-using-python.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/28-optimal-binning-using-python.jpg new file mode 100644 index 000000000..d528012d6 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/28-optimal-binning-using-python.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/29-quiz.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/29-quiz.jpg new file mode 100644 index 000000000..eb526987b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/29-quiz.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/30-thank-you-lpmayos-nataliasirera-sianna-and-mochi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/30-thank-you-lpmayos-nataliasirera-sianna-and-mochi.jpg new file mode 100644 index 000000000..697b1c414 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/30-thank-you-lpmayos-nataliasirera-sianna-and-mochi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/31-the-winners.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/31-the-winners.jpg new file mode 100644 index 000000000..4deb8e812 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/31-the-winners.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2022/32-thank-you-all-for-attending-the-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2022/32-thank-you-all-for-attending-the-pydaybcn.jpg new file mode 100644 index 000000000..8c103191a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2022/32-thank-you-all-for-attending-the-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/01-welcome-to-the-pydaybcn-2023-https-pybcn-org-event.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/01-welcome-to-the-pydaybcn-2023-https-pybcn-org-event.jpg new file mode 100644 index 000000000..3e97d7aab Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/01-welcome-to-the-pydaybcn-2023-https-pybcn-org-event.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/02-pydaybcn-is-an-event-full-of-free-python-related-w.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/02-pydaybcn-is-an-event-full-of-free-python-related-w.jpg new file mode 100644 index 000000000..8b17ddbf5 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/02-pydaybcn-is-an-event-full-of-free-python-related-w.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/03-introduction-to-neural-networks-with-pytorch-by-no.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/03-introduction-to-neural-networks-with-pytorch-by-no.jpg new file mode 100644 index 000000000..b3e30a561 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/03-introduction-to-neural-networks-with-pytorch-by-no.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/04-quantum-computing-for-everyone-by-vyron-vasileiadi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/04-quantum-computing-for-everyone-by-vyron-vasileiadi.jpg new file mode 100644 index 000000000..a1c53f4f1 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/04-quantum-computing-for-everyone-by-vyron-vasileiadi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/05-automating-networks-with-nornir-by-christian-adell.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/05-automating-networks-with-nornir-by-christian-adell.jpg new file mode 100644 index 000000000..9c1ea208f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/05-automating-networks-with-nornir-by-christian-adell.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/06-introduction-to-artificial-emotional-intelligence.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/06-introduction-to-artificial-emotional-intelligence.jpg new file mode 100644 index 000000000..3e3dcfed8 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/06-introduction-to-artificial-emotional-intelligence.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/07-quantum-breakthrough-from-basic-quantum-algorithms.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/07-quantum-breakthrough-from-basic-quantum-algorithms.jpg new file mode 100644 index 000000000..42a09f5e2 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/07-quantum-breakthrough-from-basic-quantum-algorithms.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/08-python-packaging-101-by-ferran-jovell.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/08-python-packaging-101-by-ferran-jovell.jpg new file mode 100644 index 000000000..0741449cb Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/08-python-packaging-101-by-ferran-jovell.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/09-had-a-great-lunch-break-thanks-sponsors.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/09-had-a-great-lunch-break-thanks-sponsors.jpg new file mode 100644 index 000000000..e93d8bc73 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/09-had-a-great-lunch-break-thanks-sponsors.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/10-creating-virtual-worlds-generating-synthetic-data.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/10-creating-virtual-worlds-generating-synthetic-data.jpg new file mode 100644 index 000000000..1fdef30e1 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/10-creating-virtual-worlds-generating-synthetic-data.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/11-creacion-de-apis-con-python-y-manejo-de-datos-by-d.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/11-creacion-de-apis-con-python-y-manejo-de-datos-by-d.jpg new file mode 100644 index 000000000..d60bbe695 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/11-creacion-de-apis-con-python-y-manejo-de-datos-by-d.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/12-create-a-personal-website-with-sphinx-by-oriol-abr.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/12-create-a-personal-website-with-sphinx-by-oriol-abr.jpg new file mode 100644 index 000000000..790e7c060 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/12-create-a-personal-website-with-sphinx-by-oriol-abr.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/13-retrieval-augmented-generation-from-scratch-by-gab.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/13-retrieval-augmented-generation-from-scratch-by-gab.jpg new file mode 100644 index 000000000..c7d9e0688 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/13-retrieval-augmented-generation-from-scratch-by-gab.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/14-gabimaeztu-iomed-ehr-mojo-el-poderoso-aliado-de-py.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/14-gabimaeztu-iomed-ehr-mojo-el-poderoso-aliado-de-py.jpg new file mode 100644 index 000000000..5958760ad Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/14-gabimaeztu-iomed-ehr-mojo-el-poderoso-aliado-de-py.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/15-gabimaeztu-iomed-ehr-mob-programming-solving-codin.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/15-gabimaeztu-iomed-ehr-mob-programming-solving-codin.jpg new file mode 100644 index 000000000..ace621610 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/15-gabimaeztu-iomed-ehr-mob-programming-solving-codin.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/16-data-visualization-using-blender-by-muhammad-usman.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/16-data-visualization-using-blender-by-muhammad-usman.jpg new file mode 100644 index 000000000..aa1343905 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/16-data-visualization-using-blender-by-muhammad-usman.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/17-writing-code-is-not-your-job-thoughts-on-data-scie.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/17-writing-code-is-not-your-job-thoughts-on-data-scie.jpg new file mode 100644 index 000000000..ceebffc31 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/17-writing-code-is-not-your-job-thoughts-on-data-scie.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/18-pycamp-2024-by-israel-saeta.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/18-pycamp-2024-by-israel-saeta.jpg new file mode 100644 index 000000000..178631e3a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/18-pycamp-2024-by-israel-saeta.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/19-demystifying-llm-deployments-in-aws-sagemaker-by-g.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/19-demystifying-llm-deployments-in-aws-sagemaker-by-g.jpg new file mode 100644 index 000000000..c25d203c7 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/19-demystifying-llm-deployments-in-aws-sagemaker-by-g.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/20-step4ward-empowering-women-in-tech-by-susana-vazqu.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/20-step4ward-empowering-women-in-tech-by-susana-vazqu.jpg new file mode 100644 index 000000000..2f842d186 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/20-step4ward-empowering-women-in-tech-by-susana-vazqu.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/21-common-security-vulnerabilities-for-developers-by.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/21-common-security-vulnerabilities-for-developers-by.jpg new file mode 100644 index 000000000..2be6bf0b9 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/21-common-security-vulnerabilities-for-developers-by.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/22-machine-learning-for-time-series-analysis-in-the-c.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/22-machine-learning-for-time-series-analysis-in-the-c.jpg new file mode 100644 index 000000000..2d5b3232c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/22-machine-learning-for-time-series-analysis-in-the-c.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/23-how-to-support-the-python-open-source-ecosytem-by.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/23-how-to-support-the-python-open-source-ecosytem-by.jpg new file mode 100644 index 000000000..51d9edd0c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/23-how-to-support-the-python-open-source-ecosytem-by.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/24-tinymem-a-game-under-40-lines-and-under-30mm-by-is.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/24-tinymem-a-game-under-40-lines-and-under-30mm-by-is.jpg new file mode 100644 index 000000000..45bc02835 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/24-tinymem-a-game-under-40-lines-and-under-30mm-by-is.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/25-thank-you-all-for-sponsoring-speaking-organizing-a.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/25-thank-you-all-for-sponsoring-speaking-organizing-a.jpg new file mode 100644 index 000000000..5ee5ea9ce Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/25-thank-you-all-for-sponsoring-speaking-organizing-a.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/26-let-s-play-a-game.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/26-let-s-play-a-game.jpg new file mode 100644 index 000000000..11ea394a2 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/26-let-s-play-a-game.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/27-congratulations-to-the-winners.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/27-congratulations-to-the-winners.jpg new file mode 100644 index 000000000..43da4d88a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/27-congratulations-to-the-winners.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/28-thanks-qustodio-qustodio-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/28-thanks-qustodio-qustodio-for-sponsoring-us.jpg new file mode 100644 index 000000000..cf1aacc22 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/28-thanks-qustodio-qustodio-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/29-thanks-travelperk-travelperk-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/29-thanks-travelperk-travelperk-for-sponsoring-us.jpg new file mode 100644 index 000000000..db54aa8a0 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/29-thanks-travelperk-travelperk-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/30-thanks-iomed-iomed-ehr-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/30-thanks-iomed-iomed-ehr-for-sponsoring-us.jpg new file mode 100644 index 000000000..79f6c905d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/30-thanks-iomed-iomed-ehr-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/31-thanks-flanks-flanks-io-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/31-thanks-flanks-flanks-io-for-sponsoring-us.jpg new file mode 100644 index 000000000..f25e43557 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/31-thanks-flanks-flanks-io-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/32-thanks-preply-preplycom-for-sponsoring-us.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/32-thanks-preply-preplycom-for-sponsoring-us.jpg new file mode 100644 index 000000000..b9f70bd7a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/32-thanks-preply-preplycom-for-sponsoring-us.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2023/33-thank-you-for-the-pydaybcn.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2023/33-thank-you-for-the-pydaybcn.jpg new file mode 100644 index 000000000..6e7ad4590 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2023/33-thank-you-for-the-pydaybcn.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/01-thanks-for-attending-the-pydaybcn-2024-see-you-nex.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/01-thanks-for-attending-the-pydaybcn-2024-see-you-nex.jpg new file mode 100644 index 000000000..6dd02f517 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/01-thanks-for-attending-the-pydaybcn-2024-see-you-nex.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/01-today-we-re-celebrating-the-pydaybcn-welcome-pleas.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/01-today-we-re-celebrating-the-pydaybcn-welcome-pleas.jpg new file mode 100644 index 000000000..f4d2a5576 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/01-today-we-re-celebrating-the-pydaybcn-welcome-pleas.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/02-unboxing-machine-learning-models-predicting-with-n.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/02-unboxing-machine-learning-models-predicting-with-n.jpg new file mode 100644 index 000000000..69eab9069 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/02-unboxing-machine-learning-models-predicting-with-n.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/03-discovering-etl-testing-essential-for-your-ai-solu.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/03-discovering-etl-testing-essential-for-your-ai-solu.jpg new file mode 100644 index 000000000..cdf407e00 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/03-discovering-etl-testing-essential-for-your-ai-solu.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/04-izi-record-revolutionizing-the-camera-app-by-ferra.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/04-izi-record-revolutionizing-the-camera-app-by-ferra.jpg new file mode 100644 index 000000000..c8baecca9 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/04-izi-record-revolutionizing-the-camera-app-by-ferra.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/05-mrswats-a-solution-to-store-catalog-and-visualize.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/05-mrswats-a-solution-to-store-catalog-and-visualize.jpg new file mode 100644 index 000000000..370327e2d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/05-mrswats-a-solution-to-store-catalog-and-visualize.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/06-mrswats-image-generation-with-ai-gans-and-diffusio.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/06-mrswats-image-generation-with-ai-gans-and-diffusio.jpg new file mode 100644 index 000000000..cb01c1330 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/06-mrswats-image-generation-with-ai-gans-and-diffusio.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/07-introduccio-a-xarray-etiqueta-les-teves-dades-n-di.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/07-introduccio-a-xarray-etiqueta-les-teves-dades-n-di.jpg new file mode 100644 index 000000000..6e88ef41b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/07-introduccio-a-xarray-etiqueta-les-teves-dades-n-di.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/08-static-typing-in-python-by-alex-molas.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/08-static-typing-in-python-by-alex-molas.jpg new file mode 100644 index 000000000..a867fd5ee Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/08-static-typing-in-python-by-alex-molas.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/09-building-data-pipelines-with-sqlmesh-by-marc-ramir.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/09-building-data-pipelines-with-sqlmesh-by-marc-ramir.jpg new file mode 100644 index 000000000..1637c32a3 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/09-building-data-pipelines-with-sqlmesh-by-marc-ramir.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/10-la-rosalia-unveiled-decoding-her-lyrics-with-ai-by.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/10-la-rosalia-unveiled-decoding-her-lyrics-with-ai-by.jpg new file mode 100644 index 000000000..d5fc0d83e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/10-la-rosalia-unveiled-decoding-her-lyrics-with-ai-by.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/11-a-kingdom-above-the-clouds-how-far-can-you-go-on-a.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/11-a-kingdom-above-the-clouds-how-far-can-you-go-on-a.jpg new file mode 100644 index 000000000..e985d33ad Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/11-a-kingdom-above-the-clouds-how-far-can-you-go-on-a.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/12-a-deep-dive-into-the-arrow-columnar-format-with-py.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/12-a-deep-dive-into-the-arrow-columnar-format-with-py.jpg new file mode 100644 index 000000000..2a01a6cbc Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/12-a-deep-dive-into-the-arrow-columnar-format-with-py.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/13-polars-procesando-datos-a-la-velocidad-de-la-luz-c.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/13-polars-procesando-datos-a-la-velocidad-de-la-luz-c.jpg new file mode 100644 index 000000000..a12880ae5 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/13-polars-procesando-datos-a-la-velocidad-de-la-luz-c.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/14-evita-bugs-amb-pre-commit-by-carles-julia-chaosct.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/14-evita-bugs-amb-pre-commit-by-carles-julia-chaosct.jpg new file mode 100644 index 000000000..98218dd55 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/14-evita-bugs-amb-pre-commit-by-carles-julia-chaosct.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/15-chaosct-predict-gender-equality-with-your-own-mach.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/15-chaosct-predict-gender-equality-with-your-own-mach.jpg new file mode 100644 index 000000000..616696c89 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/15-chaosct-predict-gender-equality-with-your-own-mach.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/16-chaosct-l-embolic-videojuegos-hechos-en-el-fronten.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/16-chaosct-l-embolic-videojuegos-hechos-en-el-fronten.jpg new file mode 100644 index 000000000..9050665f1 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/16-chaosct-l-embolic-videojuegos-hechos-en-el-fronten.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/17-chaosct-jimena-y-yo-open-source-databases-python-d.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/17-chaosct-jimena-y-yo-open-source-databases-python-d.jpg new file mode 100644 index 000000000..c06b70a0c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/17-chaosct-jimena-y-yo-open-source-databases-python-d.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/18-automate-end-to-end-mlflow-with-kestra-and-mlflow.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/18-automate-end-to-end-mlflow-with-kestra-and-mlflow.jpg new file mode 100644 index 000000000..551ebbfec Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/18-automate-end-to-end-mlflow-with-kestra-and-mlflow.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/19-la-iniciativa-scientific-python-by-oriol-abril-pla.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/19-la-iniciativa-scientific-python-by-oriol-abril-pla.jpg new file mode 100644 index 000000000..4d6595882 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/19-la-iniciativa-scientific-python-by-oriol-abril-pla.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/20-drugscope-a-ml-based-platform-for-drug-discovery-b.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/20-drugscope-a-ml-based-platform-for-drug-discovery-b.jpg new file mode 100644 index 000000000..6f55490fe Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/20-drugscope-a-ml-based-platform-for-drug-discovery-b.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/21-can-llms-power-product-recommendations-by-babaniyi.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/21-can-llms-power-product-recommendations-by-babaniyi.jpg new file mode 100644 index 000000000..251e2b82d Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/21-can-llms-power-product-recommendations-by-babaniyi.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2024/22-pixel2mechanics-automated-biomechanical-simulation.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2024/22-pixel2mechanics-automated-biomechanical-simulation.jpg new file mode 100644 index 000000000..da328192e Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2024/22-pixel2mechanics-automated-biomechanical-simulation.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/01-18-years-since-our-first-meetup-https-www-meetup-c.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/01-18-years-since-our-first-meetup-https-www-meetup-c.jpg new file mode 100644 index 000000000..873e90ebf Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/01-18-years-since-our-first-meetup-https-www-meetup-c.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/02-the-pydaybcn-2025-was-a-success-140-attendants-16.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/02-the-pydaybcn-2025-was-a-success-140-attendants-16.jpg new file mode 100644 index 000000000..03ed3003c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/02-the-pydaybcn-2025-was-a-success-140-attendants-16.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/02-today-we-re-celebrating-the-pydaybcn-2025.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/02-today-we-re-celebrating-the-pydaybcn-2025.jpg new file mode 100644 index 000000000..de46cb8dd Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/02-today-we-re-celebrating-the-pydaybcn-2025.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/03-welcome-to-the-pyday-please-grab-your-lanyard.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/03-welcome-to-the-pyday-please-grab-your-lanyard.jpg new file mode 100644 index 000000000..1090a3f8f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/03-welcome-to-the-pyday-please-grab-your-lanyard.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/04-build-advanced-agentic-llm-apps-with-langgraph-and.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/04-build-advanced-agentic-llm-apps-with-langgraph-and.jpg new file mode 100644 index 000000000..9792d7116 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/04-build-advanced-agentic-llm-apps-with-langgraph-and.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/05-from-zero-to-chatbot-create-your-own-ai-assistant.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/05-from-zero-to-chatbot-create-your-own-ai-assistant.jpg new file mode 100644 index 000000000..82efef67a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/05-from-zero-to-chatbot-create-your-own-ai-assistant.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/06-introduction-to-analog-quantum-computing-by-natali.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/06-introduction-to-analog-quantum-computing-by-natali.jpg new file mode 100644 index 000000000..ece3d9950 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/06-introduction-to-analog-quantum-computing-by-natali.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/07-testeando-api-s-like-a-boss-con-bdd-javier-ramos-p.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/07-testeando-api-s-like-a-boss-con-bdd-javier-ramos-p.jpg new file mode 100644 index 000000000..e7e120d2f Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/07-testeando-api-s-like-a-boss-con-bdd-javier-ramos-p.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/08-del-texto-al-dato-como-entienden-las-maquinas-el-l.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/08-del-texto-al-dato-como-entienden-las-maquinas-el-l.jpg new file mode 100644 index 000000000..1f65031d4 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/08-del-texto-al-dato-como-entienden-las-maquinas-el-l.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/09-crea-un-agente-llm-desde-cero-sin-frameworks-by-ri.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/09-crea-un-agente-llm-desde-cero-sin-frameworks-by-ri.jpg new file mode 100644 index 000000000..ba5558f15 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/09-crea-un-agente-llm-desde-cero-sin-frameworks-by-ri.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/10-building-multi-agent-system-with-pydantic-ai-by-al.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/10-building-multi-agent-system-with-pydantic-ai-by-al.jpg new file mode 100644 index 000000000..ae6781aaa Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/10-building-multi-agent-system-with-pydantic-ai-by-al.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/11-mastering-word-automation-with-python-by-jordi-bos.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/11-mastering-word-automation-with-python-by-jordi-bos.jpg new file mode 100644 index 000000000..fb7adec96 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/11-mastering-word-automation-with-python-by-jordi-bos.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/12-lunch.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/12-lunch.jpg new file mode 100644 index 000000000..697d78f6a Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/12-lunch.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/13-keywords-bm25-y-vectores-construyendo-un-buscador.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/13-keywords-bm25-y-vectores-construyendo-un-buscador.jpg new file mode 100644 index 000000000..067d0e69b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/13-keywords-bm25-y-vectores-construyendo-un-buscador.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/14-del-desorden-visual-al-significado-una-aventura-co.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/14-del-desorden-visual-al-significado-una-aventura-co.jpg new file mode 100644 index 000000000..33fd92434 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/14-del-desorden-visual-al-significado-una-aventura-co.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/15-house-controlled-by-ai-what-could-go-wrong-by-kema.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/15-house-controlled-by-ai-what-could-go-wrong-by-kema.jpg new file mode 100644 index 000000000..697a1b5cc Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/15-house-controlled-by-ai-what-could-go-wrong-by-kema.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/16-models-de-regressio-bayesians-by-oriol-abril.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/16-models-de-regressio-bayesians-by-oriol-abril.jpg new file mode 100644 index 000000000..1a39004f3 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/16-models-de-regressio-bayesians-by-oriol-abril.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/17-agentes-inteligentes-que-evolucionan-software-auto.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/17-agentes-inteligentes-que-evolucionan-software-auto.jpg new file mode 100644 index 000000000..93d7dbe40 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/17-agentes-inteligentes-que-evolucionan-software-auto.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/18-fabric-en-accion-conectando-bloques-datos-y-magia.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/18-fabric-en-accion-conectando-bloques-datos-y-magia.jpg new file mode 100644 index 000000000..28879dc9b Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/18-fabric-en-accion-conectando-bloques-datos-y-magia.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/19-htmx-a-love-story-between-a-backend-dev-and-a-fron.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/19-htmx-a-love-story-between-a-backend-dev-and-a-fron.jpg new file mode 100644 index 000000000..bd0b8186c Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/19-htmx-a-love-story-between-a-backend-dev-and-a-fron.jpg differ diff --git a/themes/pybcn_theme/assets/images/photos/pyday-2025/20-causal-inference-a-brief-introduction-by-ubaldo-he.jpg b/themes/pybcn_theme/assets/images/photos/pyday-2025/20-causal-inference-a-brief-introduction-by-ubaldo-he.jpg new file mode 100644 index 000000000..79a36b715 Binary files /dev/null and b/themes/pybcn_theme/assets/images/photos/pyday-2025/20-causal-inference-a-brief-introduction-by-ubaldo-he.jpg differ diff --git a/themes/pybcn_theme/assets/scss/people_page.scss b/themes/pybcn_theme/assets/scss/people_page.scss index 78e77e1df..12828cf03 100644 --- a/themes/pybcn_theme/assets/scss/people_page.scss +++ b/themes/pybcn_theme/assets/scss/people_page.scss @@ -84,9 +84,16 @@ font-size: 5rem; } + // The Bio and the social links, each a block under its h2, beside + // the portrait. The last block drops its bottom margin: the header + // sets the gap to what follows. .person_page_facts { flex: 1 1 16rem; min-width: 0; + + .person_block:last-child { + margin-bottom: 0; + } } // The social links beside the portrait (partials/person_links.html): @@ -103,7 +110,7 @@ row-gap: 0.4rem; list-style: none; padding-left: 0; - margin: 0 0 0.8rem; + margin: 0; li { position: relative; @@ -148,22 +155,6 @@ } } - // The sentence under the links: the roles, "at", and the number of - // events, the words of the row of /people/, muted like the credit - // line of a talk page and one step larger than body text, because it - // carries most of what a reader came for on a page that may hold - // little else. The count is in the colour of the text, so the number - // stands out of the grey line. - .person_role_line { - font-size: 1.15rem; - color: #51616e; - margin-bottom: 0; - - strong { - color: #212529; - } - } - // Each block gets the same air under its heading, and the h2 is the // size of the h2 of the rest of the site, as on the talk and meetup // pages. Both kinds of block, the page's own and the three lists. diff --git a/themes/pybcn_theme/assets/scss/photo_gallery.scss b/themes/pybcn_theme/assets/scss/photo_gallery.scss new file mode 100644 index 000000000..0dc5f0b7d --- /dev/null +++ b/themes/pybcn_theme/assets/scss/photo_gallery.scss @@ -0,0 +1,270 @@ +// The photo gallery of an event day: see +// partials/photo_gallery.html. One column, the photos one after another at +// the width of the text column, each caption under its own photo. +// +// Nothing here is positioned, and no text sits on an image. The carousel +// does that (.carousel-caption over the slide, see carousel.scss), and it +// works there because a hero slide is chosen to carry a line of text over +// it. These photos were not: a caption is a sentence from the post, long +// enough to wrap, and over the picture it is unreadable and it covers the +// part of the photo it talks about. + +// The rule down the left of a caption. Light enough to stay in the +// background of the card, since it carries no information a reader needs to +// see: the blockquote is what says the caption is a quotation. +$quote-rule: #ced4da; + +// The cap on the height of a photograph, in the gallery and on the page of +// a talk. The column is 900px on a large window, and a portrait at 900px +// wide is 1600px tall, which is taller than any window. 675px is 900 times +// 3/4: the height of a 4:3 landscape at the width of the column, the most +// common frame of a camera, so a 4:3 landscape fills the column and nothing +// is taller than it. Measured over the 276 photographs of the archive on +// 2026-10-14: 228 of the 251 landscapes are 4:3 or wider and keep their +// size, the 23 taller ones, 6 of them square to the pixel, come down to +// 675px, and so do the 10 squares and the 15 portraits, which David Arcos +// asked for ("limite de alto, para que las fotos verticales no salgan +// demasiado grandes"). On a 390px phone the card is 358px wide and a +// portrait 636px tall, under the cap, so nothing changes there. Measured +// in Chromium on the first and the twenty-first photo of PyDay BCN 2022: +// 900x506 and 379x675 at 1280px, 358x201 and 358x636 at 390px. +$photo-max-height: 675px; + +// The rule above the gallery, and the air above that. The gallery is the last +// section of an event page, after the sponsors and the people of the day, and +// it holds what the association published once the day was over. The rule +// and the gap are what say so to a reader who is scrolling: three sections +// of a programme in a row, and then something that is not one. +// +// There is no band of colour behind the section any more. The gallery sat on +// a light grey band, with every card on it, until David Arcos asked for a box +// per item on 2026-10-14 ("ahora están todos en una caja gris"): each figure +// is its own card, the border and the white body of the Bootstrap 4 card, on +// the white of the page, and the air between the cards is what separates +// them. The gap above and below the thread link is in .photo_thread. +.gallery_rule { + margin-top: 4rem; + margin-bottom: 0; +} + +.photo_gallery { + // The gallery is the last section and it is set apart from the + // programme, so it does not have to sit inside the reading column the + // text uses. Breaking out of it gives a photograph 900px instead of + // 775px, measured at the 1140px container of this theme: the section is + // 902px, and the 1px border of the card on each side leaves 900 for the + // photograph. The section was 950px with 1.5rem of padding each side + // while it was a band; the padding went with the band, and the width + // came down by the same 48px so the photograph kept its 900. + // + // 900 and not the full 1100 the container allows, on purpose: the source + // of an imported photograph is capped at 1000px, and a column wider than + // that would make a normal screen scale the picture up, which looks + // worse than any saving is worth. + // 992px is the lg breakpoint of Bootstrap 4, written out because this + // file is compiled without the Bootstrap mixins in scope. + @media (min-width: 992px) { + width: 902px; + max-width: calc(100vw - 3rem); + margin-left: 50%; + transform: translateX(-50%); + } + + // The fixed navigation bar is 80px of the window at the top, and this + // section does not carry the link_anchor class the other sections use to + // clear it: see partials/photo_gallery.html. A browser older than + // scroll-margin-top ignores this and lands the reader under the bar, + // which is what every anchor of a single.html page does today. + scroll-margin-top: 80px; + + // Each card has a white body, so the caption and the credit inside it + // read on white: the credit is $icon-grey at 0.9rem, which is 4.68:1 on + // white, and the page around the card is white as well. + + .photo_item { + // The width of the text column. The figure holds no float and no + // grid, so a portrait photo and a landscape one sit in the same + // column and keep their own shape. + margin: 0 0 3rem; + // Every figure is a link target, #1 to #33, and the navigation bar + // is fixed over the top 80px of the window. + scroll-margin-top: 80px; + + img { + // .img-fluid in the markup caps the width at the column and + // keeps the ratio, which is what stops a photo overflowing on a + // narrow window. This repeats the cap so the gallery does not + // depend on that one class staying in Bootstrap. + max-width: 100%; + height: auto; + // The cap on the height: $photo-max-height, with the reason + // beside it. The box of the image keeps the width of the card + // (card-img-top sets width 100%), and the photograph is + // painted inside it at its own ratio, centred, so a portrait + // shows at 380x675 on a white card instead of 900x1600 and a + // landscape up to 4:3 is not touched. object-fit and not + // width auto: with width auto a landscape whose source is + // narrower than the card, 895px say, would sit 2px inside + // the rounded corners of the card and show a second corner. + max-height: $photo-max-height; + object-fit: contain; + } + } + + // .card-body in the markup carries the padding that holds the caption + // off the photo and off the border, so the gap above it is gone. + figcaption { + font-size: 0.9rem; + + p { + margin-bottom: 0.2rem; + } + } + + // The text of the post, as a quotation: see the blockquote in + // partials/photo_gallery.html. Softer than the body text around it, + // because it is a caption and not the page, and with the rule down its + // left side that a quotation takes, so that the words of somebody else + // read as somebody else's with the stylesheet as well as without it. + // + // Bootstrap 4 has a .blockquote class and this does not use it: it sets + // font-size 1.25rem, which would print the caption larger than the body + // text of the page instead of smaller. + // + // Italic, as a quotation is set in print, so the words of the post read + // as a quotation even where the rule down the left is easy to miss, on + // a narrow window with the border of the card beside it. David Arcos + // asked on 2026-10-14 ("el blockquote, tal vez en cursiva?"). The talk + // line under it went upright at the same time: two italic blocks one + // after the other read as one, and the line under the caption is this + // site's own credit, not part of the quotation. The abstract of a talk + // (.talk_abstract in talks.scss) is italic for the same reason. + .photo_caption { + color: $dark-grey; + font-style: italic; + margin: 0 0 0.2rem; + padding-left: 0.75rem; + border-left: 3px solid $quote-rule; + + p { + margin-bottom: 0; + } + + // The links of the post: a mention, a hashtag, or a URL the post + // wrote. Underlined, because they sit inside a run of text where a + // colour alone is the only thing that would mark them, and WCAG + // 1.4.1 asks for more than colour. A mention and a hashtag carry + // the X mark in front (partials/caption_links.html), smaller than + // the mark of a credit line because it sits inside a sentence, and + // the underline stops at it: .icon_x is an inline-block. + a { + color: $blue-pybcn; + text-decoration: underline; + + .icon_x { + width: 0.8em; + height: 0.8em; + margin-right: 0.15em; + } + } + } + + // The talk the photo belongs to, when it belongs to one. Upright, so + // it reads apart from the italic quotation above it. + .photo_talk { + color: $dark-grey; + + // The line goes to the page of the talk. Same treatment as the + // credit below it: the colour of the line at rest with an + // underline, and the PyBCN blue under the pointer. The underline + // is the second mark WCAG 1.4.1 asks for, and keeping the grey + // stops two links in one figcaption from shouting at each other. + a { + color: inherit; + transition: color 0.15s linear; + text-decoration: underline; + + &:hover, + &:focus { + color: $blue-pybcn; + } + } + } + + // Where the photo came from, and at the right end of the same line the + // link to the figure itself (.photo_number, see the markup). Grey at + // rest and the PyBCN blue under the pointer, which is the treatment + // every icon link on the site takes (see $icon-grey in main.scss and + // its use in people.scss). 4.68:1 on white, so the grey passes the + // 4.5:1 WCAG asks of this text size. + // + // A flex row and not a float: a photo with no source prints the number + // alone, and a floated number in an otherwise empty paragraph would + // hang out of it over the border of the card. + .photo_source { + color: $icon-grey; + display: flex; + justify-content: space-between; + align-items: baseline; + + // The link to this figure: #3 for the third photo of the day. It + // takes the same colour and underline as the credit, and the + // margin pushes it to the right edge when there is no credit to + // sit at the left. + .photo_number { + margin-left: auto; + } + + a { + color: $icon-grey; + transition: color 0.15s linear; + // Underlined, so the credit reads as a link before the pointer + // reaches it. Grey text in a grey line said nothing, and colour + // alone would not say it either: WCAG 1.4.1 asks for a second + // mark, and this is the mark a link takes everywhere else. + text-decoration: underline; + + &:hover, + &:focus { + color: $blue-pybcn; + } + } + + // The X mark in front of the credit, see .icon_x in main.scss, with + // the gap the icon of a social row takes in a person modal. The + // underline of the link does not reach it: .icon_x is an + // inline-block, and a propagated text decoration is not drawn + // through an atomic inline-level box. + .icon_x { + margin-right: 0.4rem; + } + } + + // The two subsections, Photos and Videos, under the heading of the + // gallery: what the day left behind, in two kinds. An edition with one + // kind prints one subsection (see partials/photo_gallery.html). The air + // above each is the air the thread link had above it while the gallery + // was the photographs alone, for the one day of 2026-10-14. + .gallery_photos, + .gallery_videos { + margin-top: 1.5rem; + } + + // The rows of the videos take .talk_rows of talks.scss unchanged; the + // list stands off its heading by the air a row leaves under itself. + .gallery_videos .talk_rows { + margin-top: 1.1rem; + } + + // The link to the whole thread, at the start of the Photos subsection + // and above the first card. + .photo_thread { + margin-top: 1rem; + margin-bottom: 1.5rem; + + // The X mark in front, the gap of the credit line (.photo_source). + .icon_x { + margin-right: 0.4rem; + } + } +} diff --git a/themes/pybcn_theme/assets/scss/style.scss b/themes/pybcn_theme/assets/scss/style.scss index ed81e1dab..11a47ea42 100644 --- a/themes/pybcn_theme/assets/scss/style.scss +++ b/themes/pybcn_theme/assets/scss/style.scss @@ -12,6 +12,7 @@ @import 'carousel'; @import 'options'; @import 'event'; +@import 'photo_gallery'; @import 'agenda'; @import 'home'; @import 'monthly_events'; diff --git a/themes/pybcn_theme/assets/scss/talks.scss b/themes/pybcn_theme/assets/scss/talks.scss index 7660da36c..7715aec3f 100644 --- a/themes/pybcn_theme/assets/scss/talks.scss +++ b/themes/pybcn_theme/assets/scss/talks.scss @@ -57,6 +57,30 @@ margin-right: 0.4rem; } } + + // The photos, each as the card the gallery of an event draws, so the + // same photo looks the same on both pages. See photo_gallery.scss, + // which holds the cap on the height and the reason for it. A talk + // with two photographs prints two figures, one under the other with + // a line of air between them, and the last one carries no margin: + // the section under it sets the gap. + .talk_photo { + margin-bottom: 1rem; + + &:last-child { + margin-bottom: 0; + } + + img { + display: block; + max-height: $photo-max-height; + object-fit: contain; + } + + figcaption { + color: #51616e; + } + } } // The rows of the talks of a meetup, on the page of the meetup (see diff --git a/themes/pybcn_theme/layouts/_default/event.html b/themes/pybcn_theme/layouts/_default/event.html index ab1e511cf..404cc3403 100644 --- a/themes/pybcn_theme/layouts/_default/event.html +++ b/themes/pybcn_theme/layouts/_default/event.html @@ -1,5 +1,28 @@ {{ define "main" }} +{{- /* How many talks of this page carry a video. The heading of the Talks + block and the entry of the section index both say "& Videos" when + there are any, so the count is made once, here, before either of + them: a variable declared further down is not in scope above it. */ -}} +{{- $nvideos := 0 -}} +{{- range .Params.talks -}} + {{- range .links -}} + {{- if eq (default "" .type) "video" }}{{ $nvideos = add $nvideos 1 }}{{ break }}{{ end -}} + {{- end -}} +{{- end -}} + +{{- /* What the gallery of this page holds, from the same partial + partials/photo_gallery.html renders, so the section index below and the + section itself cannot disagree. The gallery is what the day left + behind, the photographs and the videos, in two subsections; an + edition with neither has no gallery. PyDay BCN 2020 was held on + YouTube with 20 videos and no photograph, so its gallery is the + Talks & Videos subsection alone (the header of + partials/gallery_content.html says why the videos are there and + not under the programme, and why a page with a Talks block prints + them there instead). */ -}} +{{ $gallery := partialCached "gallery_content.html" . .RelPermalink }} +
@@ -13,12 +36,15 @@ {{ if .Params.call_for_proposals }}Call for proposals{{ end }} {{ if .Params.registration }}Registration{{ end }} {{ if and .Params.agenda .Params.eventTimes }}Schedule{{ end }} - {{ if and .Params.talks (not .Params.agenda) }}Talks{{ end }} + {{ if and .Params.talks (not .Params.agenda) }}Talks{{ with $nvideos }} & Videos{{ end }}{{ end }} + {{ if .Params.session_videos }}Recordings{{ end }} {{ if .Params.call_for_sponsors }}Call for sponsors{{ end }} {{ if .Params.sponsor_levels }}Sponsors{{ end }} {{ range $section := .Params.people_sections }} {{ $section.title }} {{ end }} + {{/* Last, as the gallery is last on the page. */}} + {{ if or $gallery.photos $gallery.videos }}Gallery{{ end }}
@@ -96,15 +122,48 @@

Schedule

eventTimes: PyDay BCN 2018 and 2019 carry an agenda with no eventTimes on purpose (see above) and publish the programme in their body, and a list of rows under it would print the - programme twice. */ -}} + programme twice. + + The heading carries both counts, "Talks (32) & Videos + (29)": each row prints the video of its talk, so this block + is the list of the recordings of the day as well, and the + gallery prints no Videos subsection on a page that has it + (partials/gallery_content.html). The page printed the same + 29 talks twice, here and under "Talks & Videos (29)" in the + gallery, until David Arcos asked for one list with both + counts (2026-10-15). The count is the talks with a link of + type video, the ones whose row prints the Watch line. */ -}} {{ if and .Params.talks (not .Params.agenda) }} {{ end }} + {{/* The videos of a day with a programme grid are not here: + they are the Talks & Videos subsection of the gallery at + the end of the page, with the photographs + (partials/photo_gallery.html). A Videos block sat here, + under the grid, for one day, 2026-10-14, on PyDay BCN 2020 + alone; the header of partials/gallery_content.html has the + decision that moved it, and the one that keeps it out of + the gallery of a page with the Talks block above. */}} + + {{/* The recordings of a whole session, which belong to the day and + to no talk, right after the programme: see + partials/session_videos.html. No edition carries the block + today (the three that do are meetups, on + layouts/_default/meetup.html); bin/import-videos may write + it on any event page, so the page is ready for it. */}} + {{ with .Params.session_videos }} + + {{ end }} + {{ if .Params.sponsor_levels }} {{ end }} + {{/* The gallery is last, after the sponsors and the people of the + day. It is what the day left behind, the photographs the + association published and the recordings, and the rest of + the page is the day itself: the programme, who paid for it, + and who ran it. It used to sit between the schedule and the + sponsors, which read as part of the programme. */}} + {{ partial "photo_gallery.html" . }} + diff --git a/themes/pybcn_theme/layouts/_default/meetup.html b/themes/pybcn_theme/layouts/_default/meetup.html index 9a14337da..a496017d9 100644 --- a/themes/pybcn_theme/layouts/_default/meetup.html +++ b/themes/pybcn_theme/layouts/_default/meetup.html @@ -68,6 +68,11 @@ */ -}} {{ define "main" }} +{{- /* The gallery of this page, from the partial partials/photo_gallery.html + renders, so the Photos heading and the gallery cannot disagree. The + same call layouts/_default/event.html makes. */ -}} +{{- $gallery := partialCached "gallery_content.html" . .RelPermalink -}} +
@@ -133,6 +138,26 @@

Talks ({{ len . }})

{{- end }} + {{- /* The recordings of a whole session, which belong to the day + and to no talk, after the talks and before the gallery: + see partials/session_videos.html. The heading is here, + as the heading of the talks is. */ -}} + {{- with .Params.session_videos }} +
+

Recordings ({{ len . }})

+ {{ partial "session_videos.html" $ }} +
+ {{- end }} + + {{- /* The photos of the day, the same gallery an edition page + draws. The heading is here and not in the partial, + because partials/photo_gallery.html writes its own + headings for the pages that already use it; the block + below only appears when the page has something to show. */ -}} + {{- with $gallery.photos }} + {{ partial "photo_gallery.html" $ }} + {{- end }} +
diff --git a/themes/pybcn_theme/layouts/_default/single.html b/themes/pybcn_theme/layouts/_default/single.html index 2ecb7b7d0..97fc3d0e7 100644 --- a/themes/pybcn_theme/layouts/_default/single.html +++ b/themes/pybcn_theme/layouts/_default/single.html @@ -14,6 +14,15 @@ {{ .Content }} + {{- /* + The archived event pages of 2016 to 2019 are raw HTML on this + layout, not on layouts/_default/event.html, so the gallery has + to be reachable from here too. It renders only when the page + declares photos, which is why the other pages on this layout + are unchanged. + */ -}} + {{ partial "photo_gallery.html" . }} + diff --git a/themes/pybcn_theme/layouts/partials/caption_links.html b/themes/pybcn_theme/layouts/partials/caption_links.html new file mode 100644 index 000000000..b391535af --- /dev/null +++ b/themes/pybcn_theme/layouts/partials/caption_links.html @@ -0,0 +1,87 @@ +{{- /* + The caption of a gallery photo with its mentions, its hashtags, and its + URLs as links. + + Argument: the caption, as the front matter holds it. Returns HTML, which + the caller prints through safeHTML: + + {{ partial "caption_links.html" $item.caption | safeHTML }} + + A caption is the text of a post, written by somebody else. It reaches + this partial as data and leaves it as markup, so the order of the two + steps is the whole point: + + 1. htmlEscape first. Everything the caption holds becomes text: a < + becomes < and cannot open a tag. AGENTS.md asks for no field that + reaches a template through safeHTML, and this is the one exception + the rule allows for, a field that is escaped before anything is + added to it. bin/check-html-safety and bin/check-rendered are what + hold the line, and both run on every pull request. + 2. Then the three patterns below add the links, and nothing else can + add markup, because the only < and > left in the string are the ones + this partial wrote. + + What becomes a link: + + @pybcn https://x.com/pybcn + #PyDayBCN https://x.com/hashtag/PyDayBCN + https://... itself + + A mention and a hashtag go to x.com, and they carry no mark. Every + other link to x.com on this site carries the X mark (David Arcos, + 2026-10-14), and this is the one exception, on purpose. The mark is + there to say where a link goes, and the figure already says it once: + the credit under the photograph reads "Via @PyBCN" with the mark. A + mark on each mention inside the quotation repeats that, and a caption + holds up to several mentions, so the marks read as clutter in a + sentence somebody wrote. Put them back by writing the i element of + .icon_x into the two replacements below, after the escape, which is + where markup this partial wrote belongs. A URL of the post keeps no + mark either, because it may go anywhere. + + Three rules keep a link from eating what is next to it. + + A token has to start the caption, or follow a space, a "(", or a + quotation mark. The quotation mark is written " or ' at this + point, which is why the pattern names the two entities: a caption like + "Keep your repo clean", by @hectorcanto_dev reaches here with every + quote escaped. The rule is what stops the "#" of a URL fragment and + the "@" of a URL with a user name from being read as a hashtag or a + mention, and it stops any of the three patterns from matching inside + the markup an earlier one wrote: a "(" or a space never follows the + href= of a link. + + A URL may not end on a full stop, a comma, a colon, a semicolon, an + exclamation mark, or a closing bracket, so the punctuation of the + sentence stays outside the link. It may end on a "/", because that is + part of the path: the 2022 caption carries + https://pybcn.org/events/pyday_bcn/pyday_bcn_2022/ and the trailing + slash belongs to it. A bracketed pair inside the URL is kept whole, + which is how a link to a page with a bracket in its name survives + while (https://pybcn.org) keeps its brackets outside the link. + + A URL may hold &, which is what a query string of two parameters + looks like after step 1, and may hold nothing else that starts with an + "&". So a URL followed by a quotation mark ends at the quotation mark, + rather than swallowing the " that stands for it. + + The alt text of the photo is not this string. It is the caption itself, + printed as text, because an alt attribute carries no markup: see the + img of partials/photo_gallery.html. + + Measured over the 231 captions of the archive: 149 links on 97 + captions, 5 of them URLs, with no link that holds the punctuation after + it and none that holds a closing bracket of the sentence around it. + + Three captions store "&" where the post wrote "&", so they print + "&" on the page. That is the stored text, and it printed that way + before this partial existed: the fix belongs in the content, not here. +*/ -}} +{{- $text := htmlEscape . -}} +{{- /* The three patterns run in this order. A URL first, so that a "#" or + an "@" inside one is already part of a link before the two patterns + that read those two characters run. */ -}} +{{- $text = replaceRE `(^|[\s(]|"|')(https?://(?:&|[-\w+@#/%?=~_|!:,.()\[\]])*(?:\([^\s()]*\)|[-\w+@#/%=~_|]))` `$1$2` $text -}} +{{- $text = replaceRE `(^|[\s(]|"|')@(\w+)` `$1@$2` $text -}} +{{- $text = replaceRE `(^|[\s(]|"|')#(\w+)` `$1#$2` $text -}} +{{- return $text -}} diff --git a/themes/pybcn_theme/layouts/partials/event_videos.html b/themes/pybcn_theme/layouts/partials/event_videos.html new file mode 100644 index 000000000..c7b68367f --- /dev/null +++ b/themes/pybcn_theme/layouts/partials/event_videos.html @@ -0,0 +1,107 @@ +{{- /* + The videos of one edition page, as rows for the Videos subsection of + its gallery, in the order of the programme. + + Argument: the event page. + + Returns a slice of rows, each a dict with: + + type the type token of the session (talk, workshop, group), + or "", for the icon of the row + title the title of the talk, or the label of a slot with no + talk (the Welcome Session of PyDay BCN 2020) + title_lang the language code of the title when it is not in + English, from partials/title_lang.html, or "" + url the RelPermalink of the page of the talk, or "" for a + slot with no talk, which has no page + speakers the names of the speakers, through + partials/speaker_names.html, an empty slice when the + session credits nobody + video the URL of the video + + Why rows of their own. A player belongs on a page about one talk and + a link belongs on a row (David Arcos, 2026-10-15). The grid of the + programme is neither: a block of the grid is a slot, at its hour and + in its room, and the grid of PyDay BCN 2020 was the one schedule of + the site that printed a video, 20 links on 20 blocks, while the page + of every other edition printed none. The links left the grid and + came here, one row per video, the row the Talks block of a meetup + page prints (partials/talk_rows.html): the icon of the type, the + title as the link to the page of the talk, where the player is, who + gave it, and the Watch line to YouTube. The modal behind a block of + the grid keeps its link: it is the detail of one session. The rows + were a Videos block under the grid for that one day; since + 2026-10-15 they are the Videos subsection of the gallery, with the + photographs, because a recording is material added after the day + (the header of partials/gallery_content.html has the decision). + + One row per video, in programme order. The agenda is walked first, + slot by slot: a slot with a talk takes the video of its talk, a slot + with none takes its own (the Welcome Session is the one case, see + partials/listing_counts.html), and a talk the grid places twice is + printed once. Then the talks the agenda does not place, in the order + of the talks block, so a video reaches the page whether or not the + programme has a slot for it; none is in that state today. A session + with no video has no row: this is the list of what was recorded, not + a second programme. The first link of type video is the one, the rule + of partials/agenda_entry.html; no session of the archive carries two. + + The one caller is partials/gallery_content.html, for every edition + page, with or without an agenda. PyData Barcelona 2017 has 32 talks + and no agenda, so its 29 videos come from the second walk, in the + order of its talks block; its Talks block prints the Watch line on + each row as well, and the Gallery lists the same 29 recordings + together, a mild redundancy David Arcos accepts (2026-10-15): the + row says this talk was filmed while you read the programme. +*/ -}} +{{- $page := . -}} +{{- $pages := partialCached "talk_pages_index.html" site "talk-pages-index" -}} +{{- $names := partialCached "people_names.html" site "people-names" -}} +{{- $here := $page.RelPermalink -}} +{{- $talks := dict -}} +{{- range $talk := $page.Params.talks -}} + {{- with $talk.id }}{{ $talks = merge $talks (dict . $talk) }}{{ end -}} +{{- end -}} +{{- $rows := slice -}} +{{- $seen := dict -}} +{{- range $slot := $page.Params.agenda -}} + {{- $source := $slot -}} + {{- $url := "" -}} + {{- with $slot.talk -}} + {{- if index $seen . }}{{ continue }}{{ end -}} + {{- $seen = merge $seen (dict . true) -}} + {{- $source = index $talks . -}} + {{- if not $source }}{{ continue }}{{ end -}} + {{- $url = default "" (index $pages (printf "%s|%s" $here .)) -}} + {{- end -}} + {{- $video := "" -}} + {{- range $link := $source.links -}} + {{- if and (not $video) (eq (default "" $link.type) "video") }}{{ $video = $link.url }}{{ end -}} + {{- end -}} + {{- if not $video }}{{ continue }}{{ end -}} + {{- $title := default $source.label $source.title -}} + {{- $rows = $rows | append (dict + "type" (lower (trim (printf "%v" (default "" $source.type)) " ")) + "title" $title + "title_lang" (partial "title_lang.html" (dict "title_lang" $source.title_lang "title" $title)) + "url" $url + "speakers" (partial "speaker_names.html" (dict "names" $names "ids" $source.speakers)) + "video" $video) -}} +{{- end -}} +{{- range $talk := $page.Params.talks -}} + {{- if not $talk.id }}{{ continue }}{{ end -}} + {{- if index $seen $talk.id }}{{ continue }}{{ end -}} + {{- $video := "" -}} + {{- range $link := $talk.links -}} + {{- if and (not $video) (eq (default "" $link.type) "video") }}{{ $video = $link.url }}{{ end -}} + {{- end -}} + {{- if not $video }}{{ continue }}{{ end -}} + {{- $rows = $rows | append (dict + "type" (lower (trim (printf "%v" (default "" $talk.type)) " ")) + "title" $talk.title + "title_lang" (partial "title_lang.html" (dict "title_lang" $talk.title_lang "title" $talk.title)) + "url" (default "" (index $pages (printf "%s|%s" $here $talk.id))) + "speakers" (partial "speaker_names.html" (dict "names" $names "ids" $talk.speakers)) + "video" $video) -}} +{{- end -}} +{{- return $rows -}} diff --git a/themes/pybcn_theme/layouts/partials/gallery_content.html b/themes/pybcn_theme/layouts/partials/gallery_content.html new file mode 100644 index 000000000..6af40511d --- /dev/null +++ b/themes/pybcn_theme/layouts/partials/gallery_content.html @@ -0,0 +1,134 @@ +{{- /* + What the gallery of one event holds: its photographs, and on an + edition page its videos. + + Argument: the event page. Returns a dict: + + thread the URL of the thread of the day, or "" + photos a slice of the photos the gallery renders, in page order + videos a slice of the recordings of the day, the rows of + partials/event_videos.html in programme order, on an + edition page (layouts/_default/event.html) whose + programme is a grid; an empty slice on every other page, + and on an edition page that prints its talks as rows + + Each photo is a dict: + + item the photos.items entry, as the front matter writes it + img the image resource, unprocessed + pos its place in the gallery, counted from 1 + talk the talk record it belongs to, or "" + + The names of the speakers are not here. The dict carried them, resolved + through partials/speaker_names.html, while the gallery printed a name + as text; since 2026-10-14 the gallery links each speaker through + partials/person_page_link.html, which takes the id and the dict of + partials/people_names.html, so the ids of the talk record are what it + reads. + + Three templates ask the same question, so the answer is built in one + place: + + - partials/photo_gallery.html renders the list. + - layouts/_default/event.html and layouts/_default/meetup.html need to + know whether the page has a gallery at all, to decide the Gallery item + of the section index and whether to print the section. + - partials/talk_record.html needs the place of a photo in the gallery, + because that place is the id of its figure (see + partials/photo_anchor.html). A second count of the rendered photos + would let the thumbnail on the page of a person or of a talk and the + figure it points at drift apart. + + pos counts the photos the gallery renders and no others. A photo whose + file does not resolve is skipped, and so is a photo with no caption: a + caption is the alt text, and an image with no accessible name is worse + on the page than one photo fewer. bin/check-content is what reports the + gap, not the build. + + Call it through partialCached, keyed by the page, so one page builds the + answer once: + + partialCached "gallery_content.html" $page $page.RelPermalink + + The videos of an edition are here, for the Videos subsection of the + gallery, since 2026-10-15. They were here until 2026-10-14, when David + Arcos took them out ("Gallery no tiene sentido aqui: cada video podria + ir junto a su Talk") and each video went to the row of its talk and to + the page of the talk (layouts/talks/single.html). Measured across the + thirteen edition pages the day after: only two have a video at all, + PyData Barcelona 2017 with 29 and PyDay BCN 2020 with 20, and the two + did not look alike. 2017 printed a link on each talk row and nothing + else; 2020, held on YouTube with no photograph, printed a Videos block + under the schedule that no other page had. David Arcos decided that a + recording is material added after the day, like a photograph, so it + belongs in the Gallery at the end of the page and not under the + schedule: the Gallery is what the day left behind, with Photos (N) and + Videos (N) subsections, and a page with neither has no gallery. The + rows come from partials/event_videos.html, which walks the agenda and + then the talks the agenda does not place. + + A page with talks and no agenda prints them as rows under a Talks + heading (layouts/_default/event.html, partials/talk_rows.html), and + each row carries the video of its talk, so that block is already the + list of the recordings of the day. PyData Barcelona 2017, the one + page in that state, printed its 29 talks twice, as the Talks block + and as the Talks & Videos subsection of the gallery, until David + Arcos asked for one list (2026-10-15): the Talks heading reads + "Talks (32) & Videos (29)" and the gallery of that page holds its + photographs alone. The Videos subsection stays for a page whose + programme is a grid, PyDay BCN 2020 today, where the video of a slot + is in the block and its modal and no list of recordings exists. The + link on the row of a slot stays as well, a mild redundancy David + accepts: the block says this talk was filmed while you read the + programme, and the Gallery lists the recordings of the day together. + + Edition pages only, the pages with layout event. A meetup page + (layouts/_default/meetup.html) prints its talks as rows with the Watch + line on each, and the recording of a whole session, which belongs to + no talk, under its own Recordings heading (partials/session_videos.html, + which an edition page prints under the programme too); its gallery is + its photographs. partials/listing_counts.html counts the videos of a + day from the front matter itself, not from here, so the row of /events/ + and this subsection agree by reading the same records. +*/ -}} +{{- $page := . -}} +{{- $thread := "" -}} +{{- $items := slice -}} +{{- /* with, not an index into .Params: a page with no photos block has no + map to read items from, and reading one is a build error. */ -}} +{{- with $page.Params.photos -}} + {{- with .thread }}{{ $thread = . }}{{ end -}} + {{- with .items }}{{ $items = . }}{{ end -}} +{{- end -}} +{{- /* The talks of this page by id, so a photo finds its own talk and + nothing else. */ -}} +{{- $talks := dict -}} +{{- range $talk := $page.Params.talks -}} + {{- with $talk.id }}{{ $talks = merge $talks (dict . $talk) }}{{ end -}} +{{- end -}} +{{- $photos := slice -}} +{{- $pos := 0 -}} +{{- range $item := $items -}} + {{- $img := "" -}} + {{- with $item.file -}} + {{- $img = resources.Get (printf "images/photos/%s" (strings.TrimPrefix "/" .)) -}} + {{- end -}} + {{- if and $img $item.caption -}} + {{- $pos = add $pos 1 -}} + {{- $talk := "" -}} + {{- with $item.talk }}{{ $talk = index $talks . }}{{ end -}} + {{- $photos = $photos | append (dict + "item" $item + "img" $img + "pos" $pos + "talk" $talk) -}} + {{- end -}} +{{- end -}} +{{- /* The videos, on an edition page with a programme grid and no other: + see the header. A page with talks and no agenda prints its Talks + block instead. The partial reads the talk pages and the person + names through partialCached, so a second edition pays for neither + again. */ -}} +{{- $videos := slice -}} +{{- if and (eq $page.Layout "event") (not (and $page.Params.talks (not $page.Params.agenda))) }}{{ $videos = partial "event_videos.html" $page }}{{ end -}} +{{- return (dict "thread" $thread "photos" $photos "videos" $videos) -}} diff --git a/themes/pybcn_theme/layouts/partials/link_mark.html b/themes/pybcn_theme/layouts/partials/link_mark.html index 89d38676a..f3ba5275d 100644 --- a/themes/pybcn_theme/layouts/partials/link_mark.html +++ b/themes/pybcn_theme/layouts/partials/link_mark.html @@ -2,7 +2,7 @@ The mark of a link that leaves the site: one glyph per destination, in front of the words of the link, grey like every other icon of the site. - [YouTube mark] Watch on YouTube + [YouTube mark] Watch [GitHub mark] Code on GitHub [arrow mark] Read more @@ -40,10 +40,13 @@ size writes a rule on that class, as the facts box does on dt i. The glyph is aria-hidden: the words of the link name the destination - ("Watch on YouTube", "Code on GitHub"), or the label beside it does - (the Source row of the facts box, the X row of a person page). A caller - whose words do not say where the link goes writes them; the mark never - stands in for them. + ("Code on GitHub", "edit that file on GitHub"), or the label beside it + does (the Source row of the facts box, the X row of a person page), or + the words around it do (the title of a talk right above its "Watch" + link: David Arcos asked for "on YouTube" out of the video links on + 2026-10-15, because the mark already says it). A caller whose words do + not say where the link goes writes them; the mark never stands in for + them. */ -}} {{- $host := "" -}} {{- with urls.Parse . }}{{ $host = strings.TrimPrefix "www." (lower .Host) }}{{ end -}} diff --git a/themes/pybcn_theme/layouts/partials/listing_counts.html b/themes/pybcn_theme/layouts/partials/listing_counts.html index 114e270d0..a08f3aae3 100644 --- a/themes/pybcn_theme/layouts/partials/listing_counts.html +++ b/themes/pybcn_theme/layouts/partials/listing_counts.html @@ -93,6 +93,9 @@ {{- $events_total = add $events_total 1 -}} {{- $type := partial "event_type.html" $pg -}} {{- $events = merge $events (dict $type (add 1 (int (default 0 (index $events $type))))) -}} + {{- /* The gallery with the key the page of the day uses, so this + is a cache hit and not a second walk of the photos. */ -}} + {{- $gallery := partialCached "gallery_content.html" $pg $pg.RelPermalink -}} {{- $day_talks := 0 -}} {{- with $pg.Params.talks }}{{ $day_talks = len . }}{{ end -}} {{- /* The video links of the day, as the page prints them: on each @@ -114,7 +117,7 @@ {{- end -}} {{- $event_rows = merge $event_rows (dict $pg.RelPermalink (dict "talks" $day_talks - "photos" 0 + "photos" (len $gallery.photos) "videos" $day_videos)) -}} {{- else if eq $pg.Section "talks" -}} {{- $record := partial "talk_record.html" $pg -}} @@ -130,6 +133,12 @@ {{- $photos := 0 -}} {{- $videos := 0 -}} {{- $links := 0 -}} + {{- with $record.event -}} + {{- $gallery := partialCached "gallery_content.html" . .RelPermalink -}} + {{- range $gallery.photos -}} + {{- with .talk }}{{ if eq .id $pg.Params.talk }}{{ $photos = add $photos 1 }}{{ end }}{{ end -}} + {{- end -}} + {{- end -}} {{- with $record.talk -}} {{- range .links -}} {{- if not .url }}{{ continue }}{{ end -}} diff --git a/themes/pybcn_theme/layouts/partials/meetup-events.html b/themes/pybcn_theme/layouts/partials/meetup-events.html index ac0fc5194..02f4cc727 100644 --- a/themes/pybcn_theme/layouts/partials/meetup-events.html +++ b/themes/pybcn_theme/layouts/partials/meetup-events.html @@ -24,6 +24,11 @@ So the text below no longer claims the past events as well. They are on this site now, and a card that sent a reader to Meetup for them would send them away from the better page. + + The link carries the Meetup mark of partials/link_mark.html, as every + link that leaves the site does. This anchor was written before that + partial existed and was one of the links with words and no mark that + David Arcos found on 2026-10-15. */}} {{ range .list }} diff --git a/themes/pybcn_theme/layouts/partials/person_appearances.html b/themes/pybcn_theme/layouts/partials/person_appearances.html index 738dd2da6..b7d566599 100644 --- a/themes/pybcn_theme/layouts/partials/person_appearances.html +++ b/themes/pybcn_theme/layouts/partials/person_appearances.html @@ -7,7 +7,7 @@ Permanent Committee at Organizers Organizer at PyLadies BCN - Events (14) + Organizer, Speaker, Mentor at 14 events Year Month Day Event Gallery 2025 Nov 29 [mic] Speaker at [snake] PyDay BCN (2025): [comment] Introduction to Analog Quantum Computing [camera] 1 @@ -24,7 +24,8 @@ Each list is a section of class person_section under an h2, the level under the h1 of the hero (bin/check-rendered fails a page that skips a level), and people_page.scss styles the rows. The heading carries the - count, as every heading over a list of things does on this page. + count, as every heading over a list of things does on this page; the + heading of the Events table carries the roles as well. The index comes from appearances_index.html, built once per build. The list includes the pages that link here, because this page has one @@ -77,9 +78,18 @@ can pick the role out of the line. The role glyph is hidden from a screen reader: the role is the text right after it. - The heading counts events, not rows: "Events (14)" is the sentence of - the row of /people/ and of the header of this page, and a row is an - appearance, which the caption says. + The heading of the table is a sentence, "Organizer, Speaker, Mentor at + 14 events": the roles held at an event, in the order of the + association (partials/role_order.html), "at", and the number of + events. It read "Events (14)" and the header of the page carried the + sentence; David Arcos asked for the sentence here and nothing in the + header (2026-10-15). The roles are the ones the rows of this table + print, the labels of the pages with a year, and no other: Permanent + Committee is held on the PyBCN page, which has no year, so it is a row + of the Roles list above and not of this table, and a heading that + named it would say the table holds a row it does not. The count is + the events, not the rows: a row is an appearance, which the caption + says, and one event may have two rows. A person with no appearance gets nothing: no heading, no empty list. */ -}} @@ -184,9 +194,17 @@

Roles ({{ len . }})

{{- end -}} +{{- /* The roles of the heading: every label of every event, once, in + the order of the association. */ -}} +{{- $event_labels := slice -}} +{{- range $url, $ev := $events -}} + {{- range $ev.labels -}} + {{- if not (in $event_labels .) }}{{ $event_labels = $event_labels | append . }}{{ end -}} + {{- end -}} +{{- end -}} {{- with $year_groups -}}
-

Events ({{ len $events }})

+

{{ delimit (partial "role_order.html" $event_labels) ", " }} at {{ len $events }} {{ if eq (len $events) 1 }}event{{ else }}events{{ end }}

diff --git a/themes/pybcn_theme/layouts/partials/person_links.html b/themes/pybcn_theme/layouts/partials/person_links.html index 1a36f83a4..011d9de81 100644 --- a/themes/pybcn_theme/layouts/partials/person_links.html +++ b/themes/pybcn_theme/layouts/partials/person_links.html @@ -1,16 +1,23 @@ {{- /* - The social links of one person, as a row beside the portrait of the - page of the person: the mark of the host and the handle, nothing else. + The social links of one person, a block beside the portrait of the + page of the person, under its heading: the mark of the host and the + handle, nothing else. - [in] /in/davidarcos [gh] @DZPM [X] @DZPM [arrow] https://davidarcos.net + Social links + [in] /in/davidarcos + [gh] @DZPM + [X] @DZPM + [arrow] https://davidarcos.net Argument: the person page. The one caller is layouts/people/single.html, - which prints the row in the header, beside the portrait. The row was a - list under a "Social Links" heading, each line the name of the network - in bold and the handle; David Arcos asked for the heading gone and the + which prints the block in the header, beside the portrait, after the + Bio. The list was under a "Social Links" heading, each line the name + of the network in bold and the handle; David Arcos asked for the handle itself printed beside the portrait (2026-10-15), so a reader - finds the links where the face is, as on a card, and the page gets no - block that holds four words. + finds the links where the face is, as on a card, and later the same + day for the heading back, as "Social links", so the block reads as + the Bio beside it does. The heading is an h2, the level of every + block of the page under the h1 of the hero. The text comes from the stored URL, not from a separate field. The person files carry one form per network, which bin/check-content @@ -29,15 +36,18 @@ carries the name of the network as its accessible name ("David Arcos on GitHub"), as the brand marks of the row of /people/ do (partials/person_social_icons.html), because the handle alone does - not say where the link goes. The row itself is named, so a reader who - moves by landmark hears what the four links are. + not say where the link goes. The block is a section named by its + heading, so a reader who moves by landmark hears what the four links + are. The links open in a new tab, as every outbound link of a person does on this site. A person with no link prints nothing, not an empty list. */ -}} {{- $p := .Params -}} {{- if or $p.linkedin $p.github $p.twitter $p.site -}} -
Newest first, one row per appearance: a talk given, or a role held at the event. The year, the month, and the day print once, on the first row of their group.