From 7d734af7823634ee02135004b3038a1c40536fef Mon Sep 17 00:00:00 2001 From: David Arcos Date: Sun, 18 Oct 2026 11:58:38 +0200 Subject: [PATCH 01/16] Add the tools the archive needs, and take the external links out of CI bin/new-meetup writes the page of one meetup from its Meetup URL. The public page of an event carries the whole event as JSON in its __NEXT_DATA__ script: the title, the day, the venue, the group, and the number of people who said yes. No API key, no login. --discover names the meetups of both groups that have no page yet and prints the command for each; --dry-run prints the page without writing it; --description prints the announcement, which is what a model reads to extract the talks. bin/import-meetups records where a page came from, so a page written by hand and a page written from the export say so in the same words. The output of the importer is unchanged: verified byte for byte on all 266 files it writes. The links job of a pull request checks the internal links only. The site holds 139 distinct external URLs outside the frozen snapshots, and checking them took 25 minutes on the pull request that added the person pages: every pull request asked every host we have ever linked to whether it is still there, and reported rot that is not ours to fix. An internal link that does not resolve is a typo, is ours, and is found in seconds. The external ones move to .github/workflows/links.yml, which runs on request with a cache of a week and does not fail the build. The data of the association: the glyph of each role, the emoji of each event type, and the assemblies with their minutes. --- .github/workflows/links.yml | 60 +++++++ .github/workflows/pr.yml | 41 +++-- AGENTS.md | 44 ++++- CONTRIBUTING.md | 14 +- README.md | 71 ++++++++ bin/check-content | 35 ++++ bin/check-rendered | 9 + bin/import-meetups | 34 ++-- bin/new-meetup | 349 ++++++++++++++++++++++++++++++++++++ config.toml | 47 +++-- data/assemblies.yaml | 66 +++++++ data/channel_videos.yaml | 7 +- data/role_emoji.yaml | 7 + 13 files changed, 737 insertions(+), 47 deletions(-) create mode 100644 .github/workflows/links.yml create mode 100755 bin/new-meetup create mode 100644 data/assemblies.yaml diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml new file mode 100644 index 000000000..9588daee2 --- /dev/null +++ b/.github/workflows/links.yml @@ -0,0 +1,60 @@ +# Check the external links of the site. +# +# Not part of the pull request checks. A link to another site breaks when +# that site changes, which is not something a pull request of ours causes +# or can fix, and asking for 139 external URLs on every pull request is +# both slow and close to behaving like a crawler. Run this when you want +# to know, which in practice is before a round of archive work. +# +# It never turns anything red. Read the report in the job summary. +name: links + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + external: + name: Check the external links + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Read the Hugo version + run: echo "HUGO_VERSION=$(tr -d '[:space:]' < .hugo-version)" >> "$GITHUB_ENV" + + - name: Setup Hugo + uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3.2.1 + with: + hugo-version: ${{ env.HUGO_VERSION }} + extended: true + + - name: Build + run: hugo --minify -d public --baseURL / + + - name: Check links + uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 + with: + # --exclude-path: the frozen 2016-2019 snapshots under archives/ + # keep their dead links on purpose. + # --exclude: hosts that answer bots with 400, 403, or 999, and + # canary.invalid, the host the canary fixture names as text. + # lychee reads URLs out of text nodes too, and .invalid never + # resolves. + args: >- + --no-progress + --exclude-all-private + --max-concurrency 4 + --cache + --max-cache-age 1w + --root-dir "$GITHUB_WORKSPACE/public" + --exclude-path 'public/archives/' + --exclude 'twitter\.com' + --exclude '^https?://(www\.)?x\.com/' + --exclude 'linkedin\.com' + --exclude 'pybcn\.slack\.com' + --exclude 'canary\.invalid' + 'public/**/*.html' + fail: false diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 6d175291b..76ac69799 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -42,6 +42,14 @@ jobs: - name: Build run: hugo --minify + - name: Build the search index + # Pagefind reads the pages Hugo wrote and writes public/pagefind/: + # the engine, the word index in chunks, one fragment per page. It + # runs after Hugo because it indexes what is on disk, and it is + # pinned the way Hugo is: bin/install-pagefind fetches the release + # named in .pagefind-version and checks its SHA-256. + run: bin/install-pagefind && bin/search public + content: name: Check the content runs-on: ubuntu-latest @@ -117,29 +125,28 @@ jobs: # runner's python3 is enough. run: bin/check-rendered public - - name: Check links + - name: Check the internal links uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 with: - # --root-dir: where "/path/" links resolve. Without it lychee flags - # every absolute link in a local file as an error. + # --offline: only the links that point inside this build. The + # external ones are the job of .github/workflows/links.yml, + # which runs on request. The site holds 139 distinct external + # URLs outside the frozen snapshots, and checking them took 25 + # minutes on the pull request that added the person pages: with + # the concurrency low enough not to look like a crawler, every + # pull request asked every host we have ever linked to whether + # it is still there, and reported rot that is not ours to fix. + # An internal link that does not resolve is a typo, is ours, + # and is found in seconds. + # --root-dir: where "/path/" links resolve. Without it lychee + # flags every absolute link in a local file as an error. # --exclude-path: the frozen 2016-2019 snapshots under archives/ # keep their dead links on purpose. - # --exclude: hosts that answer bots with 400, 403, or 999, and - # canary.invalid, the host the canary fixture names as text. - # lychee reads URLs out of text nodes too, and .invalid never - # resolves. args: >- --no-progress - --exclude-all-private - --max-concurrency 4 + --offline --root-dir "$GITHUB_WORKSPACE/public" --exclude-path 'public/archives/' - --exclude 'twitter\.com' - --exclude '^https?://(www\.)?x\.com/' - --exclude 'linkedin\.com' - --exclude 'pybcn\.slack\.com' - --exclude 'canary\.invalid' 'public/**/*.html' - # External sites rate-limit. Keep the report in the job summary and - # do not turn the check red. - fail: false + # An internal link is ours, so this one does turn the check red. + fail: true diff --git a/AGENTS.md b/AGENTS.md index c8a3d74ec..fca2cd84a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,22 +14,35 @@ bin/install # downloads the pinned Hugo binary, verifies its SHA256 bin/serve # dev server, Hugo's default :1313 bin/build # writes to docs/ bin/hugo --quiet -d /tmp/out # the binary directly +bin/install-pagefind # the pinned Pagefind binary, verifies its SHA256 +bin/search /tmp/out # the search index of a built site, after the build ``` **The Hugo binary lives at `bin/hugo` and is gitignored.** `bin/helpers` prefers it over anything on `$PATH`, and checks the version from `.hugo-version`. +**The search index is not built by Hugo.** `bin/search ` runs +Pagefind (pinned in `.pagefind-version`, binary at the gitignored +`bin/pagefind`) over the pages Hugo wrote, and CI runs it right after +`hugo --minify`. The dev server has none, so `/search/` says so there. What +is indexed is what the templates mark `data-pagefind-body`: the record of +each talk, event and person, and the photo captions, not the whole page. +`partials/search_kind.html` says which pages, and `partials/hero_header.html` +and the layouts of the three kinds say what of each. + **Do not `pip install hugo`.** That PyPI package now requires a Go toolchain and fails. `bin/install` fetches the official release binary instead. -A clean build with `-D` produces **1369 HTML pages**: 1313 Hugo-generated and +A clean build with `-D` produces **1377 HTML pages**: 1321 Hugo-generated and 56 copied from `static/archives/`. Recount rather than trusting this line: the number moves with the content. It was 317 until #202 stopped publishing the 206 person and sponsor pages that nothing linked to, 109 until the archive -import added a page per meetup and per talk, and 991 until the person pages +import added a page per meetup and per talk, 991 until the person pages came back with the Archive (378 of them, one per record of `content/people/`, -the canary fixture included), which is how quickly a figure like this goes -stale. Recount with: +the canary fixture included), and 1363 until the tabs of `/talks/` and +`/people/` added a page per talk type and per role (the two content adapters +under `content/`), which is how quickly a figure like this goes stale. +Recount with: ```sh find -name '*.html' | wc -l @@ -45,6 +58,26 @@ and checking the output, not by reading the file. **`merge.ff = only`.** Any local merge needs `--no-ff`. A failed merge here reports "Not possible to fast-forward", which is not a conflict. +**A photograph belongs to the event its text names, not to the day it was +posted.** `bin/import-x-photos --ids FILE` takes the posts to import, and the +day stops deciding. Reading the export by date looks right and is wrong three +ways, each found the hard way on 2026-10-17: + +- The account replies to its own posts of years before, so following the chain + of replies builds threads that run from 2014 to 2021. Cut the chain at four + days from the photograph. +- A talk titled in two or three generic words matches any post that uses them: + a 2014 talk swallowed every post that said "machine learning" since. A title + has to be long and belong to one event before it can attribute on its own. +- Some titles repeat anyway. There are several "Introduction to Python", and + "Barcelona Python Meetup" is both the name of the event of 2007 and what + every monthly meetup is called. There the text says what the event is and + the day says which one of them, which is the rule a person would use. + +A post with photographs and no text at all is not imported: the caption is the +alt text of the image, and a gallery leaves a photograph out rather than +publish one nobody can read. + **The archive imports run in one order and only once.** `bin/import-meetups`, then `bin/import-talks`, then `bin/import-videos`. `bin/import-talks` replaces the whole `talks` block of a page and everything after it in the front matter, @@ -219,8 +252,9 @@ plausible but different result. | `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). 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 | +| `bin/` | Setup and build scripts, the checks, `bin/list-channel` (names a channel video the inventory lacks; needs `yt-dlp` and the network), `bin/new-meetup` (writes the page of one past meetup from its Meetup URL, and `--discover` names the ones with no page; needs the network), the one-time `bin/import-*` scripts, plus the gitignored Hugo binary | | `.hugo-version` | The pinned Hugo version, single source of truth | +| `.pagefind-version` | The pinned Pagefind version, same rule; `bin/install-pagefind` reads it | The checks, which are what a pull request has to pass: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b1c2ab52..f8482745b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,8 +97,18 @@ Edit the file on GitHub, or clone the repository and follow the steps below. [Person photos](README.md#person-photos). - **A sponsor**: run `bin/hugo new sponsors/my-sponsor.md` and fill the four fields listed in [How to add a new sponsor](README.md#how-to-add-a-new-sponsor). - The logo goes under `themes/pybcn_theme/assets/images/sponsors/`. Then list - the sponsor on the sponsors page, or on the event, that shows it. + The logo goes under `themes/pybcn_theme/assets/images/sponsors/`. The + [sponsors page](https://pybcn.org/sponsors/) reads the directory, so the + new file reaches it by existing; list the sponsor on its event as well, in + the `sponsor_levels` of that page, which is what gives it a level. +- **A monthly meetup**, after it happened: run `bin/new-meetup --discover` + to see which ones have no page yet, then + `bin/new-meetup `. It writes the page from the + public event page: the title, the day, the venue, the number of + registrations, the source URL, and the group. It writes no talk, because the + announcement says them in prose: pass `--description` to print that prose, + and see [Import a meetup](README.md#import-a-meetup) for the rest of the + path, which is the same one the 268 pages of the archive came through. - **An event**: copy the previous edition under `content/events/`, for example `content/events/pyday_bcn/pyday_bcn_2025.md`, and edit it. The sections, the agenda and the people grids are described in diff --git a/README.md b/README.md index 5856ed723..1544544c6 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,15 @@ do not need Python, Go, or npm. The version lives in `.hugo-version`, which is the single source of truth. To move to a new Hugo release, edit that file and run `bin/install` again. +The site search is built after Hugo, by [Pagefind](https://pagefind.app/), +over the pages Hugo wrote. `bin/install-pagefind` downloads the release +pinned in `.pagefind-version` the same way, checks its SHA256 and puts it at +`bin/pagefind`; `bin/search public` then writes the index to +`public/pagefind/`. CI does both after every build. `bin/serve` runs no +Pagefind, so `/search/` on the dev server says the search is not available +there: build with `bin/hugo --minify -d public && bin/search public` and +serve `public/` with any static server to try it. + ### Running local server @@ -93,6 +102,23 @@ and not two that drift apart. The two sections below are the detail of the checks it names. +### The sources of the archive + +The pages of the archive were written from the Meetup export of both groups, +the X exports of the association, the playlists of our channel, the records +pyvideo keeps of PyData Barcelona 2017, and the frozen copies of the old site +under `static/archives/`. Those sources, the tools that read them, and the +reports of the import live in a separate repository of this organisation, +`pybcn/pybcn-archive`, which is **private**: a copy of a public page is not a +secret, but 950 Meetup comments with the name of whoever wrote them, and the +email addresses, the phone numbers, and the personal profiles that the event +descriptions still carry, add up to something that is. Ask a member of the +board for access. + +Nothing in this repository needs it. It is the record of where each page came +from, and the insurance policy if a page has to be written again. + + ### Content safety check `bin/check-html-safety` scans `content/` and fails if it finds raw HTML that @@ -192,6 +218,8 @@ Currently, there are two sponsor pages implemented: The PyBCN sponsors and the P The template collects all the pages under sponsors content and iterates over the levels defined in the corresponding sponsors page, rendering the level name, if any, and then all the summaries for each sponsor defined in the level's sponsors list. +A page that defines no `sponsor_levels` gets one level with every sponsor under `content/sponsors/`, sorted by name, 4 to the line. `/sponsors/` is that page. It used to carry the list by hand and the list had drifted: 25 sponsors were on their edition page and not on it. The two association accounts, `pybcn` and `pyladiesbcn`, are left out of that automatic list, because an edition page lists them under an Organizers level and they are not sponsors of themselves. The PyLadies BCN page defines its own levels, so it keeps its own list. + The sponsor summary is defined in a separate partial `themes/pybcn_theme/layouts/partials/sponsor_summary.html`. This partial receives the sponsor page to render the summary from. About the creation of new sponsors, the `themes/pybcn_theme/archetypes/sponsors.md` file contains the template Hugo will use when the editor runs the command `hugo new sponsors/my-new-sponsor.md`. @@ -256,6 +284,49 @@ every page that lists the person and tell that party who viewed it, and `bin/check-content` reports it as an error. +### Import a meetup + +`bin/new-meetup ` writes +`content/events/meetups/-.md`. One command, one GET of the public +event page, no API key and no login: Meetup serves the whole event as JSON in +the `__NEXT_DATA__` script tag its own front end reads. The retired REST API +is why the archive needed an export at all; this page is what replaced it. + +It writes the fields that are a copy of one field each, which is the same set +and the same order the 268 pages of the archive carry, through the same +function in `bin/import-meetups`: `title`, `date`, `year`, `venue`, +`attendance`, `meetup_url`, and `group`. `attendance` is who said yes on +Meetup, not who came. + +It refuses an event that is not `PAST`, because the registrations are not +final and the archive records what happened, and an event whose title says +PyDay or PyData, because the large editions have their own pages. `--force` +overrides both. It refuses to overwrite a page that is already there. +`--dry-run` prints the file instead of writing it. + +What it does not write, and what to do about each: + +| Not written | Why, and the next step | +|---|---| +| The talks | The announcement says them in prose, which no parser reads. `--description` prints that prose; `bin/prompts/extract-talks.md` is the prompt a model reads it with; `bin/check-extraction` compares every extracted field against the source; `bin/import-talks` writes the block | +| The description | It is the logistics of signing up, and an archive records what happened and not how to register for something that is over | +| A video | It comes from the YouTube channel after the day, through `bin/import-videos`, and `data/channel_videos.yaml` is the inventory `bin/check-content` reads | +| A person page | A page publishes a named person. A speaker who just spoke is reachable, so ask that person first | +| A venue short name | The script reports a `venue` string that `data/venues.yaml` does not name. The short name is a choice somebody makes | + +`bin/new-meetup --discover` answers the other half: **which** meetups are +missing. It reads the past events page of both groups, which carries the ten +most recent as JSON in the same script tag, names the ones no page records, +and prints the command for each. It writes nothing. Ten is more than a year +of a group that meets monthly; a longer gap than that is what the +pybcn-archive export is for. + +So the whole path for the meetup of last Tuesday is: `bin/new-meetup +--discover` to see what is missing, `bin/new-meetup URL --description`, +extract the talks, `bin/check-extraction`, `bin/import-talks`, +`bin/check-content`, and `bin/import-videos` once the recording is up. + + ### Monthly event page implementation details The monthly event page uses the meetup component to show PyBCN and PyLadies BCN meetup events lists. The template embeds the `meetup.js` code without `defer` using the `requiredJS` block. Then, it invokes the `meetup-events` partial which processes the list of meetup events. diff --git a/bin/check-content b/bin/check-content index 5f8356e84..01253cf27 100755 --- a/bin/check-content +++ b/bin/check-content @@ -703,6 +703,40 @@ def check_sources(): SOURCE_SUFFIXES = {".jpg", ".jpeg", ".png", ".webp"} +def check_canonical_photo(): + """Every event names one photo, and the file behind it exists. + + canonical_photo is the one picture of a day: the group photo when the + day has one, and the picture that says most about it when it does not. + partials/canonical_photos.html collects them, newest first, and the + carousel of the home page is one slide per event that has one. + + The template resolves the file with resources.Get and renders nothing + when it fails, so a typo costs a slide and says nothing. + + An edition with a gallery and no canonical photo is a warning. A + monthly meetup is not: 64 of them gained a gallery when the posts of + their own day were imported, and the carousel of the home page shows + the editions, not every day the association has photographed. A meetup + that wants a slide names one and gets it. + """ + missing = [] + for path in sorted((CONTENT / "events").rglob("*.md")): + data = front_matter(path) + if data is None: + continue + name = data.get("canonical_photo") + if name: + gallery_file(path, f"canonical_photo '{name}'", str(name)) + elif data.get("photos") and "meetups" not in path.parts: + missing.append(path) + for path in missing: + warn(path, "has a photo gallery and no 'canonical_photo'. The " + "carousel of the home page shows one photo per event, " + "and this one has none to show. Name the group photo of " + "the day, or the picture that says most about it.") + + def check_logos(sponsors): """A sponsor whose declared logo file is missing renders a broken image, and the Hugo build does not notice. A sponsor with no logo_image at all is only @@ -1573,6 +1607,7 @@ def main(): sponsors = collect_ids("sponsors") check_photos(people) check_gallery(people) + check_canonical_photo() check_logos(sponsors) check_social(people, sponsors) check_sources() diff --git a/bin/check-rendered b/bin/check-rendered index 7c6b50199..a6e5c1903 100755 --- a/bin/check-rendered +++ b/bin/check-rendered @@ -511,6 +511,15 @@ ALLOWLIST = [ "partials/video_frame.html): a recording of a session has no page of " "its own, so the page of its day is the page about it. Three meetups " "carry one. A listing or a programme grid prints a link and no frame"}, + {"path": "index.html", + "kind": "iframe", + "prefix": "https://www.youtube-nocookie.com/embed/", + "why": "the player of the About PyBCN block of the home page " + "(layouts/_default/home.html, through partials/video_frame.html): the " + "presentation of the Barcelona community at PyConES 2020, the one video " + "of the channel that belongs to no event of the association, so no page " + "of the archive carries it and the home page does. The id is " + "about_video in content/_index.md; one frame on the page"}, {"path": "people/", "kind": "iframe", "prefix": "https://www.youtube-nocookie.com/embed/", diff --git a/bin/import-meetups b/bin/import-meetups index 8aebc0a91..ff0e82e29 100755 --- a/bin/import-meetups +++ b/bin/import-meetups @@ -140,21 +140,35 @@ def venue_of(event): return name, None -def front_matter(event): +def export_provenance(event): + """Return the comment lines that say this file comes from the export.""" + return [ + "# One monthly meetup, imported from data/raw/meetup/%s/events.json in" % event["group_id"], + "# the pybcn-archive export, which is not in this repository, event %s." % event["id"], + "# bin/import-meetups writes this file from that record: a correction goes", + "# to the export or to the script, never here. The Meetup description is", + "# the logistics of signing up and is not published, and the talks it", + "# announces arrive separately. See content/events/meetups/_index.md.", + ] + + +def front_matter(event, provenance=None, source="the export"): """Return the content file of one meetup record, front matter only. No body. The Meetup description is the only prose the export carries and it is not published, so a body would be invented text. + + provenance replaces the comment lines that name where the record came + from. bin/new-meetup passes its own, because it reads one event off the + public event page and not out of the export. Everything below those + lines is the same in both, which is the point of sharing this function: + a page written months later looks like the 266 the import wrote. + + source names what the fields were read from, for the one comment that + says so. It is "the export" here and "the event page" there. """ group_id = event["group_id"] - lines = [ - "---", - "# One monthly meetup, imported from data/raw/meetup/%s/events.json in" % group_id, - "# the pybcn-archive export, which is not in this repository, event %s." % event["id"], - "# bin/import-meetups writes this file from that record: a correction goes", - "# to the export or to the script, never here. The Meetup description is", - "# the logistics of signing up and is not published, and the talks it", - "# announces arrive separately. See content/events/meetups/_index.md.", + lines = ["---"] + (provenance or export_provenance(event)) + [ "title: %s" % yaml_string(canon(event["title"]).strip()), "date: %s" % event["dateTime"][:10], "year: %s" % event["dateTime"][:4], @@ -169,7 +183,7 @@ def front_matter(event): lines.append("# source gives it, so the page says nothing rather than a guess.") attendance = (event.get("rsvps") or {}).get("yesCount") or 0 lines.append("# Who said yes on Meetup, not who came: attendedCount is zero on almost") - lines.append("# every record, so this is the only figure the export gives. It names") + lines.append("# every record, so this is the only figure %s gives. It names" % source) lines.append("# nobody, which is what makes it publishable.") if attendance: lines.append("attendance: %d" % attendance) diff --git a/bin/new-meetup b/bin/new-meetup new file mode 100755 index 000000000..ee2fa0883 --- /dev/null +++ b/bin/new-meetup @@ -0,0 +1,349 @@ +#!/usr/bin/env python3 +"""Write the page of one meetup from its Meetup URL. + +bin/import-meetups built 266 of the meetup pages of the archive out of the pybcn-archive +export, which is a dump somebody has to take. That is the right tool for 19 +years of history and the wrong one for the meetup of last Tuesday: nobody +should have to re-export the whole group, and nobody should have to remember +the shape of the front matter either. + +Give this script the URL of a past meetup and it writes +content/events/meetups/-.md, with the same fields the import +wrote, through the same function. The page it writes is complete as a page: +the day, the venue, the registrations, the source, and the group. + +Where the fields come from. The public event page carries the whole event as +JSON, in the __NEXT_DATA__ script tag Meetup's own front end reads, so there +is no API key, no login, and one GET. The retired REST API is why the archive +needed an export at all (see partials/meetup-events.html); this page is what +replaced it. Every field is one field of that JSON, with canon() from +bin/canon.py as the only transform. + +What it does not write: + + The talks. The description announces them in prose, which no parser reads: + a model extracts them and bin/check-extraction compares every field against + the source. --description prints the description so that work can start, + and bin/prompts/extract-talks.md is the prompt. bin/import-talks writes the + block. + + The description itself. It is the logistics of signing up, and an archive + records what happened and not how to register for something that is over. + + A person page, or a venue in data/venues.yaml. The script reports a venue + it does not recognise and writes nothing else: a new venue is a short name + somebody chooses. + + Anything about who came. The RSVP count is who said yes, it names nobody, + and no host name or attendee leaves this script. + +Exit codes: + 0 the file was written, or --dry-run ran + 1 the event is one this script refuses to write, and nothing was written + 2 the script could not run: bad arguments, or the page did not answer + +--discover answers the other half of the question: which meetups are missing. +It reads the past events page of both groups, which carries the ten most +recent as JSON in the same script tag, and names the ones no page of +content/events/meetups/ already records. A meetup a month means ten covers +any gap worth catching; a longer gap is what the pybcn-archive export is +for. It writes nothing and prints the command for each one. + +Usage: + bin/new-meetup https://www.meetup.com/python-barcelona/events/316366469/ + bin/new-meetup URL --dry-run --description + bin/new-meetup --discover +""" + +import argparse +import importlib.util +import json +import pathlib +import re +import sys +import urllib.error +import urllib.request + +BIN = pathlib.Path(__file__).resolve().parent +sys.path.insert(0, str(BIN)) + +from canon import canon +from slug import slugify + + +def fail(message): + """Stop with exit 2: the script could not run. + + sys.exit with a string exits 1, which this script uses for an event it + refuses to write. The two cases are different: one means fix the + arguments, the other means the event is not one of these. + """ + print("new-meetup: %s" % message, file=sys.stderr) + sys.exit(2) + + +def load_import_meetups(): + """Return bin/import-meetups as a module. + + The file has a hyphen in its name and no extension, so it is not + importable by name. Loading it by path is worth the five lines: the front + matter of a new page then comes from the same function as the 266 of the + archive, and the two cannot drift. + """ + spec = importlib.util.spec_from_loader( + "import_meetups", + importlib.machinery.SourceFileLoader("import_meetups", str(BIN / "import-meetups")), + ) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +# https://www.meetup.com//events// +EVENT_URL = re.compile(r"^https://www\.meetup\.com/([^/]+)/events/(\d+)/?") + +NEXT_DATA = re.compile( + r'', re.S) + +# An honest agent. The request is one GET of a public page, and a host that +# wants to say no deserves to know who is asking. +USER_AGENT = "pybcn-site/1.0 bin/new-meetup (+https://pybcn.org/)" + + +def fetch(url): + """Return the event record and the group record of one event page.""" + request = urllib.request.Request( + url, headers={"User-Agent": USER_AGENT, "Accept": "text/html"}) + try: + with urllib.request.urlopen(request, timeout=30) as response: + html = response.read().decode("utf-8", "replace") + except (urllib.error.URLError, TimeoutError) as error: + fail("%s did not answer: %s" % (url, error)) + found = NEXT_DATA.search(html) + if not found: + fail("%s carries no __NEXT_DATA__, so the page changed shape" % url) + try: + state = json.loads(found.group(1))["props"]["pageProps"]["__APOLLO_STATE__"] + except (ValueError, KeyError) as error: + fail("the JSON of %s changed shape: %s" % (url, error)) + events = [value for key, value in state.items() if key.startswith("Event:")] + if len(events) != 1: + fail("%s carries %d events, expected 1" % (url, len(events))) + return events[0], state + + +def fetch_past(group_id): + """Return the past events of one group, newest first. + + The page of past events carries the same __NEXT_DATA__ as the page of + one event, with the ten most recent in it. Ten and not all of them: the + page loads the rest on scroll, which needs a browser, and ten is more + than a year of a group that meets monthly. + """ + url = "https://www.meetup.com/%s/events/?type=past" % group_id + request = urllib.request.Request( + url, headers={"User-Agent": USER_AGENT, "Accept": "text/html"}) + try: + with urllib.request.urlopen(request, timeout=30) as response: + html = response.read().decode("utf-8", "replace") + except (urllib.error.URLError, TimeoutError) as error: + fail("%s did not answer: %s" % (url, error)) + found = NEXT_DATA.search(html) + if not found: + fail("%s carries no __NEXT_DATA__, so the page changed shape" % url) + try: + state = json.loads(found.group(1))["props"]["pageProps"]["__APOLLO_STATE__"] + except (ValueError, KeyError) as error: + fail("the JSON of %s changed shape: %s" % (url, error)) + events = [v for k, v in state.items() if k.startswith("Event:")] + events.sort(key=lambda e: e.get("dateTime") or "", reverse=True) + return events + + +def recorded_ids(out): + """Return the Meetup event id of every page already written.""" + ids = set() + if not out.is_dir(): + return ids + for path in out.glob("*.md"): + for found in re.finditer(r"/events/(\d+)/", path.read_text(encoding="utf-8")): + ids.add(found.group(1)) + return ids + + +def discover(import_meetups, out): + """Name the past meetups that no page records. Writes nothing.""" + have = recorded_ids(out) + missing = [] + for group_id in sorted(import_meetups.GROUPS): + for event in fetch_past(group_id): + if event.get("status") != "PAST": + continue + if import_meetups.BIG_EDITION.search(event.get("title") or ""): + continue + if event["id"] in have: + continue + missing.append((event["dateTime"][:10], event["title"], event["eventUrl"])) + print("%d pages in %s, %d of them with a Meetup id" % ( + len(list(out.glob("*.md"))) if out.is_dir() else 0, out, len(have))) + if not missing: + print("nothing new: every past meetup of the last ten of each group has a page") + return 0 + missing.sort(reverse=True) + print("%d past meetups have no page, newest first:" % len(missing)) + for date, title, url in missing: + print(" %s %s" % (date, title)) + print(" bin/new-meetup %s --description" % url) + return 0 + + +def resolve(state, ref): + """Return the record a __ref points at, or an empty one.""" + return state.get((ref or {}).get("__ref"), {}) + + +def as_export_record(event, state, group_id): + """Return the event in the shape bin/import-meetups reads. + + The export and the page agree field for field, under different names: + the export nests the RSVP count as rsvps.yesCount and the page asks for + it by status. Translating here, once, means front_matter() stays the one + place that decides what a meetup page says. + """ + yes = 0 + for key, value in event.items(): + if key.startswith("rsvps(") and '"YES"' in key: + yes = value.get("totalCount") or 0 + return { + "id": event["id"], + "title": event["title"], + "dateTime": event["dateTime"], + "eventUrl": event.get("eventUrl") or "", + "eventType": event.get("eventType"), + "venue": {"name": resolve(state, event.get("venue")).get("name") or ""}, + "rsvps": {"yesCount": yes}, + "group_id": group_id, + } + + +def known_venues(root): + """Return the venue strings data/venues.yaml already names.""" + path = root / "data" / "venues.yaml" + if not path.is_file(): + return None + names = set() + for quoted, bare in re.findall(r'^(?:"([^"]+)"|([^"\s#][^:]*?))\s*:', path.read_text(encoding="utf-8"), re.M): + names.add(quoted or bare) + return names or None + + +def provenance(event, group_id): + """Return the comment lines of a page written from the live event page.""" + return [ + "# One monthly meetup, written by bin/new-meetup from the public Meetup", + "# event page of %s, event %s. Every field below is one" % (group_id, event["id"]), + "# field of that page: a correction goes to Meetup or to the script,", + "# never here.", + "# The Meetup description is the logistics of signing up and is not", + "# published, and the talks it announces arrive separately. See", + "# content/events/meetups/_index.md.", + ] + + +def main(): + parser = argparse.ArgumentParser( + description="Write the page of one past meetup from its Meetup URL.") + parser.add_argument("url", nargs="*", help="the URL of a past Meetup event") + parser.add_argument("--discover", action="store_true", + help="name the past meetups that have no page, and write nothing") + parser.add_argument("--out", type=pathlib.Path, default=None, + help="the directory to write in (default content/events/meetups)") + parser.add_argument("--dry-run", action="store_true", + help="print the file instead of writing it") + parser.add_argument("--description", action="store_true", + help="print the Meetup description, to extract the talks from") + parser.add_argument("--force", action="store_true", + help="write an upcoming event, or a large edition, anyway") + args = parser.parse_args() + + import_meetups = load_import_meetups() + root = BIN.parent + out = args.out or root / "content" / "events" / "meetups" + + if args.discover: + return discover(import_meetups, out) + if not args.url: + fail("give the URL of a past Meetup event, or --discover") + + venues = known_venues(root) + written = [] + # A URL that is skipped must not take the report of a URL already + # written with it: the loop goes on, and the exit code says at the end + # that one of them was skipped. + skipped = False + + for url in args.url: + match = EVENT_URL.match(url) + if not match: + fail("%s is not a Meetup event URL" % url) + group_id, event_id = match.group(1), match.group(2) + if group_id not in import_meetups.GROUPS: + fail("%s is not a group of the association" % group_id) + + event, state = fetch(url) + if event["id"] != event_id: + fail("%s answered with event %s" % (url, event["id"])) + if event.get("status") != "PAST" and not args.force: + print("SKIP %s is %s, not PAST. The archive records what happened: run" + % (url, (event.get("status") or "unknown").lower())) + print(" this after the day, when the registrations are final, or") + print(" pass --force.") + skipped = True + continue + if import_meetups.BIG_EDITION.search(event["title"]) and not args.force: + print("SKIP %s says PyDay or PyData. The large editions have their own" + % event["title"]) + print(" pages under content/events/, so this would be a second page") + print(" for the same day. Pass --force if it is really a meetup.") + skipped = True + continue + + record = as_export_record(event, state, group_id) + slug = slugify(record["title"]) + date = record["dateTime"][:10] + name = "%s-%s.md" % (date, slug) if slug else "%s.md" % date + text = import_meetups.front_matter( + record, provenance(event, group_id), source="the event page") + path = out / name + + if args.dry_run: + print("--- %s" % path) + print(text, end="") + else: + if path.exists(): + print("SKIP %s is already there. Delete it to write it again." % path) + skipped = True + continue + out.mkdir(parents=True, exist_ok=True) + path.write_text(text, encoding="utf-8") + written.append((path, record, event, state)) + + for path, record, event, state in written: + venue = record["venue"]["name"] + print("%s %s" % ("would write" if args.dry_run else "wrote", path)) + print(" %s, %s, %d registrations" + % (record["dateTime"][:10], venue or "no venue", record["rsvps"]["yesCount"])) + if venue and venues is not None and canon(venue) not in venues: + print(" NEW VENUE data/venues.yaml does not name %r. Add a short name" % venue) + print(" for it, or the listings print the whole string.") + if args.description: + print(" --- the description, to extract the talks from:") + print(canon(event.get("description") or "").strip()) + print(" Next: extract the talks with bin/prompts/extract-talks.md, check them") + print(" with bin/check-extraction, and write them with bin/import-talks.") + print(" A video of the day arrives later, through bin/import-videos.") + return 1 if skipped else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/config.toml b/config.toml index df748bb2f..9df87639c 100644 --- a/config.toml +++ b/config.toml @@ -41,8 +41,8 @@ timeout = "300s" # # The Archive met it, and the person pages are back: /people//, from # themes/pybcn_theme/layouts/people/single.html, one per record, the way -# the site has a page per event and a page per talk (David Arcos, -# 2026-10-13). Measured in this tree when the pages came back: 378 files +# the site has a page per event and a page per talk. Measured in this +# tree when the pages came back: 378 files # under content/people/, one of them the draft canary fixture of # bin/check-rendered, so 377 records. 353 are credited by at least one # talk, 124 are listed in at least one page block (the board, a committee, @@ -124,42 +124,67 @@ unsafe=true main_contact_name_pyladies = "PyLadiesBCN Organizers" main_contact_email_pyladies = "pyladies-bcn@googlegroups.com" + # The order of the row, by reach, measured on 2026-10-16 where the + # account publishes a number: Meetup 4,669 members of python-barcelona + # (plus 919 of pyladies-bcn), YouTube 351 subscribers, Bluesky 229 + # followers, GitHub 27. X and LinkedIn answer nothing without an + # account, so they sit on the judgement that X has the longest history + # of the set, 987 archived tweet ids and every photo thread of the + # archive, and that LinkedIn is the professional one. Slack is last + # because it is a workspace to join and not a feed to read. + # + # weight is what partials/footer.html sorts by. Without it Hugo ranges + # the map by key, which is alphabetical and put Bluesky first for no + # reason other than its name. [params.social_items] + [params.social_items.meetup] + weight = 1 + name = "Meetup" + link = "https://www.meetup.com/python-barcelona/" + icon = "fab fa-meetup fa-2x" [params.social_items.twitter] + weight = 3 name = "X" icon = "icon_x fa-2x" link = "https://x.com/PyBCN" + [params.social_items.linkedin] + weight = 2 + name = "LinkedIn" + link = "https://linkedin.com/company/pybcn" + icon = "fab fa-linkedin fa-2x" [params.social_items.youtube] + weight = 4 name = "YouTube" link = "https://www.youtube.com/c/PythonBarcelona" icon = "fab fa-youtube-square fa-2x" - [params.social_items.meetup] - name = "Meetup" - link = "https://www.meetup.com/python-barcelona/" - icon = "fab fa-meetup fa-2x" + [params.social_items.bluesky] + weight = 5 + name = "Bluesky" + link = "https://bsky.app/profile/pybcn.org" + icon = "icon_bluesky fa-2x" [params.social_items.github] + weight = 7 name = "GitHub" link = "https://github.com/pybcn" icon = "fab fa-github fa-2x" - [params.social_items.linkedin] - name = "LinkedIn" - link = "https://linkedin.com/company/pybcn" - icon = "fab fa-linkedin fa-2x" [params.social_items.slack] + weight = 6 name = "Slack" link = "https://pybcn.slack.com" icon = "fab fa-slack fa-2x" - [params.social_items_pyladies] [params.social_items_pyladies.twitter] + weight = 3 name = "X" icon = "icon_x fa-2x" link = "https://x.com/PyLadiesBCN" [params.social_items_pyladies.meetup] + weight = 1 name = "Meetup" link = "https://www.meetup.com/PyLadies-BCN" icon = "fab fa-meetup fa-2x" [params.social_items_pyladies.github] + weight = 7 name = "GitHub" link = "https://github.com/pyladies-bcn" icon = "fab fa-github fa-2x" diff --git a/data/assemblies.yaml b/data/assemblies.yaml new file mode 100644 index 000000000..f14454c6c --- /dev/null +++ b/data/assemblies.yaml @@ -0,0 +1,66 @@ +# The general assemblies of the association, newest first: the minutes of +# each one, and the photograph the association published of the act. +# +# The minutes are the record that the law asks for and they live on Google +# Drive, where the board writes them. The photograph is the only thing that +# says what the day looked like: there is no event page for an assembly, no +# gallery, and nothing else in this repository. +# +# caption is the text of the post, as published, less the t.co links. The +# one of 2022 is cut after the roles it announces: the rest of that post is +# a call to take part, which is four years old now. +# +# photo is a file under images/photos/assemblies/, stored as WebP at 600px +# on its long side, which is twice what the page draws. Five of the eight +# assemblies have one: 2020, 2024, and the extraordinary one of 2025 were +# never photographed, or the photograph was never published. +# +# source is the post. It is what the credit line links to, the way a photo +# of a gallery credits its own post. + +- year: 2026 + name: "Assamblea General Ordinària 2026" + minutes: "https://docs.google.com/document/d/1Yx_4OMf3TkUDrI4MT3FD4NWm0y-3mSh32krX5F1RqMY/edit?usp=sharing" + photo: "assemblies/2026.webp" + source: "https://x.com/PyBCN/status/2044492055120949648" + caption: "Avui he celebrat la Assemblea Ordinària Python Barcelona 2026. Ja som més de 100 socis!" + +- year: 2025 + name: "Assamblea Extraordinària 2025" + minutes: "https://docs.google.com/document/d/12BHpSCe7yOdgdm7JiuzKxT_RNKyxHN18R9p0_1rCWl4/edit?usp=share_link" + +- year: 2024 + name: "Assamblea General Ordinària 2024" + minutes: "https://docs.google.com/document/d/1IDYEQvStyM8YxQHIcmZbfE0SYePDGDavHssz3CG3d1E/edit?usp=share_link" + +- year: 2023 + name: "Assamblea General Ordinària 2023" + minutes: "https://docs.google.com/document/d/1CnJzGjz7COsc-45w5tEVu5gpDBv1mUozFh4eGXw8-GU/edit?usp=sharing" + photo: "assemblies/2023.webp" + source: "https://x.com/PyBCN/status/1730651989736820840" + caption: "Comença l'Assemblea General Ordinària de Python Barcelona" + +- year: 2022 + name: "Assamblea General Ordinària 2022" + minutes: "https://docs.google.com/document/d/13xiLuUGIzT8kyZWGTkA6T-dbUO7Y_Z6hlUjakkwlSGM/edit?usp=sharing" + photo: "assemblies/2022.webp" + source: "https://x.com/PyBCN/status/1604908237635059714" + caption: "Assemblea General Ordinària de Python Barcelona. Ja som 76 socis! Hem renovat els rols de Presidenta (@lpmayos), Secretària (@nataliasirera), i Tresorera (@sianna)" + +- year: 2021 + name: "Assamblea General Ordinària 2021" + minutes: "https://docs.google.com/document/d/1Qi0efxdC7T2bk2oVT2z6tTrrJ3UONwCK3Vnf3cL4KFA/edit?usp=sharing" + photo: "assemblies/2021.webp" + source: "https://x.com/PyBCN/status/1471191462176034816" + caption: "Celebrant la nostra Assamblea General Ordinària. Cada any, rendim comptes davant dels socis" + +- year: 2020 + name: "Assamblea General Ordinària 2020" + minutes: "https://docs.google.com/document/d/1yLR9p_vDKZPs0NlVMaKtrBMooqHdDyY0Lk5cPmcGs5I/edit?usp=sharing" + +- year: 2019 + name: "Assamblea General Ordinària 2019" + minutes: "https://docs.google.com/document/d/1mJuuoymGJe4ayO5y08yN0bHBSqrPPyRZW2QLQSXXuYg/edit?usp=sharing" + photo: "assemblies/2019.webp" + source: "https://x.com/PyBCN/status/1204854069837344769" + caption: "Good job, Board! 👏👏" diff --git a/data/channel_videos.yaml b/data/channel_videos.yaml index 9f112da92..566db152a 100644 --- a/data/channel_videos.yaml +++ b/data/channel_videos.yaml @@ -2,7 +2,10 @@ # 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. +# no event page. One unplaced video is on the site all the same: the +# presentation of the community at PyConES 2020, which the home page plays +# (about_video in content/_index.md); its reason says so. placed stays +# about the event pages, which is what bin/check-content reads. # # 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 @@ -131,7 +134,7 @@ videos: 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" + reason: "a presentation of the Barcelona community given at PyConES 2020, which is no event of the association; the home page plays it in its About PyBCN block (about_video in content/_index.md)" - id: "JzX9WAv7PVM" title: "PyBCN Meetup 2019/09 - Python for the management of IoT platforms at Worldsensing by T. Martínez" placed: true diff --git a/data/role_emoji.yaml b/data/role_emoji.yaml index 28e44778e..fa6470fe0 100644 --- a/data/role_emoji.yaml +++ b/data/role_emoji.yaml @@ -47,3 +47,10 @@ Events: 📅 Permanent Committee: 🧭 Management Board (2026): 📋 Former Management Board (2018 - 2025): 📋 + +# Not a role and not a level: the tab of /people/ that answers "who came" +# with the fact that the association never recorded it (see +# content/people/_content.gotmpl). An empty chair, for the audience the +# archive has no list of. U+1FA91 has emoji presentation by default, as +# the rule above asks. +Assistants: 🪑 From 4754abdbbfa198a0c3da25f0425f61090893028b Mon Sep 17 00:00:00 2001 From: David Arcos Date: Sun, 18 Oct 2026 11:58:38 +0200 Subject: [PATCH 02/16] Search the whole archive, with no account and no third party The site holds 607 talks, 371 people, and 281 events, and the only way to find one was to know which listing it was on. /search/ searches all of them. Pagefind reads the pages Hugo wrote, after the build, in CI and locally, and ships its index with them: no account, no third party, and no request that leaves this site. The binary is pinned the way Hugo is, with the version in .pagefind-version and the SHA-256 of the release checked by bin/install-pagefind. What is indexed is the record of each page and not the whole of it: the person pages repeat the title of every talk the person gave and the event pages repeat the programme, so a name or a technology would match three pages per talk. The h1 of an indexed page carries the kind, which is what a result is labelled by and what the kind filter passes. The box is in the bar of every page, and the page that runs the search is the only one that ships the script. A missing address searches the words of its own path, less the section names: an old link to /talks/2019/keep-your-repo-clean/ asks for "2019 keep your repo clean" and the first result is that talk on its new address. Measured on a production build: 1,258 pages indexed in about a second, 903 KB on disk under /pagefind/, and 209 KB downloaded by a first search, with the 30 fragments of the results drawn. The second query loads only the chunk of its word. --- .github/workflows/gh-pages.yml | 8 + .gitignore | 1 + .pagefind-version | 1 + bin/install-pagefind | 92 +++++ bin/search | 72 ++++ content/search.md | 11 + themes/pybcn_theme/assets/js/search.js | 313 ++++++++++++++++++ themes/pybcn_theme/assets/scss/search.scss | 174 ++++++++++ themes/pybcn_theme/layouts/404.html | 13 +- .../pybcn_theme/layouts/_default/search.html | 29 ++ themes/pybcn_theme/layouts/partials/js.html | 10 +- .../layouts/partials/search_form.html | 64 ++++ .../layouts/partials/search_kind.html | 40 +++ themes/pybcn_theme/layouts/robots.txt | 3 + 14 files changed, 828 insertions(+), 3 deletions(-) create mode 100644 .pagefind-version create mode 100755 bin/install-pagefind create mode 100755 bin/search create mode 100644 content/search.md create mode 100644 themes/pybcn_theme/assets/js/search.js create mode 100644 themes/pybcn_theme/assets/scss/search.scss create mode 100644 themes/pybcn_theme/layouts/_default/search.html create mode 100644 themes/pybcn_theme/layouts/partials/search_form.html create mode 100644 themes/pybcn_theme/layouts/partials/search_kind.html diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index e2f61ad0e..3bfa9bc1b 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -45,6 +45,14 @@ jobs: - name: Build run: hugo --minify + - name: Build the search index + # Pagefind reads the pages Hugo wrote and writes public/pagefind/: + # the engine, the word index in chunks, one fragment per page. It + # runs after Hugo because it indexes what is on disk, and it is + # pinned the way Hugo is: bin/install-pagefind fetches the release + # named in .pagefind-version and checks its SHA-256. + run: bin/install-pagefind && bin/search public + - name: Deploy uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4.1.0 with: diff --git a/.gitignore b/.gitignore index 7f4f2d853..cdd53cf88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea bin/hugo +bin/pagefind public/** # Hugo build output and caches. resources/ covers the SCSS cache and the diff --git a/.pagefind-version b/.pagefind-version new file mode 100644 index 000000000..4cda8f19e --- /dev/null +++ b/.pagefind-version @@ -0,0 +1 @@ +1.5.2 diff --git a/bin/install-pagefind b/bin/install-pagefind new file mode 100755 index 000000000..5495445a5 --- /dev/null +++ b/bin/install-pagefind @@ -0,0 +1,92 @@ +#!/bin/bash +# +# Install the pinned Pagefind binary into bin/pagefind. +# +# The version comes from .pagefind-version, which is the single source of +# truth, the way .hugo-version is for Hugo. bin/pagefind is ignored by git. +# +# Pagefind builds the search index of the site after Hugo has built the +# pages (see bin/search). It is the release binary from GitHub, not the npm +# wrapper: the wrapper adds Node and a second registry to the build job for +# the same file. The release publishes one SHA-256 per asset, in a file +# named after it, and the download is verified against it before it is +# unpacked. The plain build is enough: the extended build adds the Chinese, +# Japanese and Korean segmenters and weighs 52 MB against 5. + +set -euo pipefail + +ROOT=$(cd "$(dirname "$0")/.." && pwd -P) + +PAGEFIND_VERSION=$(tr -d '[:space:]' < "${ROOT}/.pagefind-version") +RELEASES="https://github.com/Pagefind/pagefind/releases/download" +PAGEFIND_BIN="${ROOT}/bin/pagefind" + +# The download goes to a temporary directory. The EXIT trap removes it on +# success and on failure, for the reason bin/install gives. +workdir="" +trap 'rm -rf "${workdir}"' EXIT + +function platform() { + local os arch + case "$(uname -s)" in + Linux) os="unknown-linux-musl" ;; + Darwin) os="apple-darwin" ;; + *) echo "Unsupported OS: $(uname -s)." >&2 + echo "Download Pagefind ${PAGEFIND_VERSION} yourself and put it at bin/pagefind." >&2 + exit 1 ;; + esac + case "$(uname -m)" in + x86_64|amd64) arch="x86_64" ;; + arm64|aarch64) arch="aarch64" ;; + *) echo "Unsupported architecture: $(uname -m)." >&2 + exit 1 ;; + esac + echo "${arch}-${os}" +} + +# Stock macOS ships shasum, not sha256sum. Both read the same checksum list. +function sha256_check() { + if command -v sha256sum >/dev/null; then + sha256sum -c - + else + shasum -a 256 -c - + fi +} + +function is_right_pagefind() { + [ -x "${PAGEFIND_BIN}" ] || return 1 + "${PAGEFIND_BIN}" --version 2>/dev/null | grep -q "${PAGEFIND_VERSION}\$" || return 1 +} + +function install_pagefind() { + local target archive url + target=$(platform) + archive="pagefind-v${PAGEFIND_VERSION}-${target}.tar.gz" + url="${RELEASES}/v${PAGEFIND_VERSION}/${archive}" + + workdir=$(mktemp -d) + + echo "Downloading Pagefind ${PAGEFIND_VERSION} (${target})..." + curl -sSfL -o "${workdir}/${archive}" "${url}" + curl -sSfL -o "${workdir}/${archive}.sha256" "${url}.sha256" + + # The published file holds the hash, with or without the file name after + # it. The first field is the hash either way, and the archive name is + # ours, so the line to check is built here. + echo -n "Verifying checksum... " + (cd "${workdir}" && printf '%s %s\n' "$(cut -d' ' -f1 "${archive}.sha256")" "${archive}" | sha256_check >/dev/null) + echo "OK" + + tar xzf "${workdir}/${archive}" -C "${workdir}" pagefind + mv "${workdir}/pagefind" "${PAGEFIND_BIN}" + chmod +x "${PAGEFIND_BIN}" +} + +if is_right_pagefind; then + echo "Pagefind ${PAGEFIND_VERSION} is already installed." + exit 0 +fi + +install_pagefind +is_right_pagefind || { echo "bin/pagefind does not report version ${PAGEFIND_VERSION}." >&2; exit 1; } +echo "Using ${PAGEFIND_BIN} ($("${PAGEFIND_BIN}" --version))" diff --git a/bin/search b/bin/search new file mode 100755 index 000000000..f1a8c2ca6 --- /dev/null +++ b/bin/search @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Build the search index of a built site with Pagefind. +# +# bin/search e.g. bin/search public +# +# Pagefind reads the pages Hugo wrote and writes /pagefind/: the +# engine (pagefind.js and the WebAssembly), the metadata, the word index in +# alphabetical chunks, one fragment per page, and the filter values. Run it +# after Hugo, never before: it indexes what is on disk. CI runs it right +# after "hugo --minify" (.github/workflows/pr.yml and gh-pages.yml). +# +# Only the pages under events/, talks/ and people/ are read. The frozen +# mirrors under archives/ are copies of retired sites and would add 56 old +# pages of dead links to the index; the association pages, the PyLadies +# pages and the home are out of this first version. Within the pages read, +# only the elements marked data-pagefind-body are indexed (the record of +# each talk, event and person, and the photo captions), which is what +# keeps the index near 400 KB instead of the 1.5 MB that whole pages would +# make. The decision and the figures: the proposal of 2026-10-16. +# +# The dev server (bin/serve) runs no Pagefind, so /search/ says there that +# the search is not available. To try it locally: +# +# bin/hugo --minify -d public && bin/search public +# +# then serve public/ with any static server (Hugo's server rebuilds from +# the sources and would not carry the index). + +set -euo pipefail + +ROOT=$(cd "$(dirname "$0")/.." && pwd -P) +PAGEFIND_BIN="${ROOT}/bin/pagefind" + +if [ $# -ne 1 ]; then + echo "Usage: bin/search " >&2 + exit 2 +fi +SITE=$1 + +if [ ! -d "${SITE}" ] || [ -z "$(find "${SITE}" -maxdepth 2 -name '*.html' -print -quit)" ]; then + echo "bin/search: ${SITE} holds no built site. Build first: bin/hugo --minify -d ${SITE}" >&2 + exit 2 +fi + +if [ ! -x "${PAGEFIND_BIN}" ]; then + echo "bin/search: bin/pagefind is missing. Run bin/install-pagefind." >&2 + exit 1 +fi + +"${PAGEFIND_BIN}" --site "${SITE}" --glob "{events,talks,people}/**/*.html" + +# Pagefind writes its three ready-made interfaces and a highlight script +# next to the index, 527 KB in nine files measured on 1.5.2, and this site +# uses none of them: assets/js/search.js talks to pagefind.js directly and +# draws its own results. They are removed so that what is deployed under +# /pagefind/ is what /search/ loads. wasm.unknown.pagefind is the engine +# for a page with no lang attribute, and every page of this site has one. +# pagefind-worker.js stays: pagefind.js loads it to search off the main +# thread. +rm -f "${SITE}"/pagefind/pagefind-component-ui.js "${SITE}"/pagefind/pagefind-component-ui.css \ + "${SITE}"/pagefind/pagefind-ui.js "${SITE}"/pagefind/pagefind-ui.css \ + "${SITE}"/pagefind/pagefind-modular-ui.js "${SITE}"/pagefind/pagefind-modular-ui.css \ + "${SITE}"/pagefind/pagefind-highlight.js "${SITE}"/pagefind/wasm.unknown.pagefind + +# Pagefind exits 0 after indexing nothing, which would deploy a site whose +# search answers every query with no result. The entry file is written only +# when an index was. +if [ ! -f "${SITE}/pagefind/pagefind-entry.json" ]; then + echo "bin/search: Pagefind wrote no index under ${SITE}/pagefind/." >&2 + exit 1 +fi diff --git a/content/search.md b/content/search.md new file mode 100644 index 000000000..ac2f0effd --- /dev/null +++ b/content/search.md @@ -0,0 +1,11 @@ +--- +title: "Search" +description: "Search the archive of Python Barcelona: the talks, the events, the people, and the photos." +layout: search +# Built and not listed: in no feed, no sitemap and no listing. The navbar +# form is how a reader reaches it. +_build: + list: never +--- + +Every talk, event, person, and photo caption of the archive, in one box. Type a technology, a name, a venue, or a year. diff --git a/themes/pybcn_theme/assets/js/search.js b/themes/pybcn_theme/assets/js/search.js new file mode 100644 index 000000000..5255156c3 --- /dev/null +++ b/themes/pybcn_theme/assets/js/search.js @@ -0,0 +1,313 @@ +/* The site search, on /search/ and on the 404 page. + * + * Reads the query and the filters from the form and from the address the + * page was opened with, loads the Pagefind engine the build wrote under + * /pagefind/ (bin/search, after Hugo), and draws the first 30 results. + * The engine downloads the index in pieces as it needs them: the + * alphabetical chunk the typed word falls in, one fragment per result + * drawn, never the whole index. + * + * Every result is drawn with textContent and never innerHTML. A talk + * description can carry raw HTML (unsafe=true in config.toml), and the + * excerpt Pagefind returns is parsed in an inert document so that only its + * text and its mark elements reach the page. + * + * A photo caption is indexed as part of the page of its event, at the + * figure that holds it (partials/photo_gallery.html). Pagefind records one + * result per page, so a caption is not a result of its own, but the + * fragment of a page records where each figure starts in its text and + * where each matched word is. A match inside a caption is drawn here as a + * Photo result that links to the figure; a match in the record of the day + * is drawn as the Event result. + * + * The dev server (bin/serve) has no index: the import fails, the page says + * so, and nothing is thrown. + */ +(function () { + "use strict"; + + var form = document.getElementById("search_form"); + if (!form) { + return; + } + var field = form.elements.q; + var kindSelect = form.elements.kind; + var yearSelect = form.elements.year; + var langSelect = form.elements.lang; + var newest = form.elements.newest; + var status = document.getElementById("search_status"); + var list = document.getElementById("search_results"); + var LIMIT = 30; + var LABELS = { talk: "Talk", event: "Event", person: "Person", photo: "Photo" }; + var onNotFound = form.hasAttribute("data-path-query"); + var pagefind = null; + + function setStatus(text) { + status.textContent = text; + } + + function el(tag, className, text) { + var node = document.createElement(tag); + if (className) { + node.className = className; + } + if (text !== undefined) { + node.textContent = text; + } + return node; + } + + /* The form from the address: a GET form does not refill itself on a + static page. On the 404 page the words of the missing address are the + query, less the section names and anything shorter than three + characters, which are the numbers of a date and the noise of a slug. */ + var params = new URLSearchParams(location.search); + if (params.has("q")) { + field.value = params.get("q"); + } else if (onNotFound) { + field.value = decodeURIComponent(location.pathname) + .replace(/\.html?$/, "") + .split(/[\/._\-+\s]+/) + .filter(function (word) { + return word.length > 2 && !/^(talks|events|people|meetups|index)$/.test(word); + }) + .join(" "); + } + kindSelect.value = params.get("kind") || ""; + newest.checked = params.has("newest"); + + function rememberAddress(term) { + if (onNotFound) { + return; + } + var next = new URLSearchParams(); + if (term) { + next.set("q", term); + } + [kindSelect, yearSelect, langSelect].forEach(function (select) { + if (select.value) { + next.set(select.name, select.value); + } + }); + if (newest.checked) { + next.set("newest", "1"); + } + var query = next.toString(); + history.replaceState(null, "", location.pathname + (query ? "?" + query : "")); + } + + function options() { + var wanted = { filters: {} }; + var kind = kindSelect.value; + if (kind === "photo") { + wanted.filters.kind = "event"; + } else if (kind) { + wanted.filters.kind = kind; + } + if (yearSelect.value) { + wanted.filters.year = yearSelect.value; + } + if (langSelect.value) { + wanted.filters.lang = langSelect.value; + } + if (newest.checked) { + wanted.sort = { date: "desc" }; + } + return wanted; + } + + /* The year and language selectors take their values from the index, so a + year with no page is not offered. The value the address asked for is + kept once the options exist. */ + function fillSelect(select, values, compare) { + var wanted = params.get(select.name) || ""; + Object.keys(values).sort(compare).forEach(function (value) { + var option = el("option", "", value); + option.value = value; + select.appendChild(option); + }); + select.value = wanted; + if (select.value !== wanted) { + select.value = ""; + } + } + + /* One page, one or more results. A page with figure anchors is an event + page with a gallery: a matched word at or after the position of a + figure, and before the next, is inside that caption. */ + function hits(page) { + var meta = page.meta || {}; + var figures = (page.anchors || []).filter(function (anchor) { + return anchor.element === "figure"; + }).sort(function (a, b) { + return a.location - b.location; + }); + var whole = { kind: meta.kind, url: page.url, title: meta.title, meta: meta, excerpt: page.excerpt }; + if (meta.kind !== "event" || figures.length === 0) { + return [whole]; + } + var words = (page.content || "").split(/\s+/); + var results = []; + var drawn = {}; + var inRecord = false; + (page.locations || []).forEach(function (location) { + var index = -1; + figures.forEach(function (figure, i) { + if (figure.location <= location) { + index = i; + } + }); + if (index < 0) { + inRecord = true; + return; + } + var figure = figures[index]; + if (drawn[figure.id]) { + return; + } + drawn[figure.id] = true; + var end = index + 1 < figures.length ? figures[index + 1].location : words.length; + var caption = words.slice(figure.location, end).join(" ").replace(/\.\s*$/, ""); + results.push({ kind: "photo", url: page.url + "#" + figure.id, title: caption, meta: meta, excerpt: "" }); + }); + if (inRecord || results.length === 0) { + results.unshift(whole); + } + return results; + } + + /* The excerpt comes as HTML with mark elements around the matched words. + It is parsed in an inert document and rebuilt as text nodes and marks, + so nothing else in it can reach the page. */ + function excerptNodes(html) { + var doc = new DOMParser().parseFromString(html, "text/html"); + var nodes = []; + Array.prototype.forEach.call(doc.body.childNodes, function (node) { + if (node.nodeName === "MARK") { + nodes.push(el("mark", "", node.textContent)); + } else { + nodes.push(document.createTextNode(node.textContent)); + } + }); + return nodes; + } + + function draw(hit) { + var item = el("li", "search_result search_result_" + hit.kind); + var title = el("p", "search_result_title"); + title.appendChild(el("span", "search_result_kind", LABELS[hit.kind] || hit.kind || "Page")); + var link = el("a", "", hit.title || hit.url); + link.href = hit.url; + title.appendChild(link); + item.appendChild(title); + var meta = hit.meta; + var facts = []; + if (hit.kind === "talk") { + if (meta.speakers) { facts.push("by " + meta.speakers); } + if (meta.event) { facts.push(meta.event); } + if (meta.date) { facts.push(meta.date); } + if (meta.lang) { facts.push(meta.lang); } + } else if (hit.kind === "event") { + if (meta.date) { facts.push(meta.date); } + if (meta.venue) { facts.push(meta.venue); } + } else if (hit.kind === "photo") { + facts.push("in the gallery of " + meta.title); + if (meta.date) { facts.push(meta.date); } + } else if (hit.kind === "person") { + if (meta.roles) { facts.push(meta.roles); } + } + if (facts.length) { + item.appendChild(el("p", "search_result_meta", facts.join(", "))); + } + if (hit.excerpt) { + var excerpt = el("p", "search_result_excerpt"); + excerptNodes(hit.excerpt).forEach(function (node) { + excerpt.appendChild(node); + }); + item.appendChild(excerpt); + } + return item; + } + + function show(items) { + list.replaceChildren(); + items.forEach(function (hit) { + list.appendChild(draw(hit)); + }); + } + + function run(now) { + var term = field.value.trim(); + rememberAddress(term); + if (!term) { + show([]); + setStatus("Type a word: a technology, a name, a venue, a year."); + return; + } + var wanted = options(); + var search = now ? pagefind.search(term, wanted) : pagefind.debouncedSearch(term, wanted); + search.then(function (found) { + if (found === null) { + return; /* a later keystroke replaced this search */ + } + var pages = found.results.slice(0, LIMIT); + return Promise.all(pages.map(function (result) { + return result.data(); + })).then(function (data) { + var items = []; + data.forEach(function (page) { + items = items.concat(hits(page)); + }); + if (kindSelect.value === "photo") { + items = items.filter(function (hit) { + return hit.kind === "photo"; + }); + } + show(items); + var total = found.results.length; + if (total === 0) { + setStatus("Nothing matches “" + term + "”."); + } else if (total > LIMIT) { + setStatus(total + " pages match “" + term + "”. The first " + LIMIT + " are shown: add a word to narrow them."); + } else { + setStatus(total + (total === 1 ? " page matches “" : " pages match “") + term + "”."); + } + }); + }); + } + + function start(engine) { + pagefind = engine; + return pagefind.filters().then(function (filters) { + fillSelect(yearSelect, filters.year || {}, function (a, b) { + return b.localeCompare(a); + }); + fillSelect(langSelect, filters.lang || {}, function (a, b) { + return a.localeCompare(b); + }); + field.addEventListener("focus", function () { + pagefind.preload(field.value); + }); + field.addEventListener("input", function () { + run(false); + }); + [kindSelect, yearSelect, langSelect, newest].forEach(function (control) { + control.addEventListener("change", function () { + run(true); + }); + }); + form.addEventListener("submit", function (event) { + event.preventDefault(); + run(true); + }); + run(true); + if (!onNotFound) { + field.focus(); + } + }); + } + + import("/pagefind/pagefind.js").then(start, function () { + setStatus("Search is not available on the dev server: the index is built after Hugo, by bin/search, and is on pybcn.org. Every talk is listed on /talks/ and every person on /people/."); + }); +})(); diff --git a/themes/pybcn_theme/assets/scss/search.scss b/themes/pybcn_theme/assets/scss/search.scss new file mode 100644 index 000000000..80b1a7d27 --- /dev/null +++ b/themes/pybcn_theme/assets/scss/search.scss @@ -0,0 +1,174 @@ +// The site search: the form of the navbar (partials/nav.html), and the box +// and the results of /search/ and the 404 page (partials/search_form.html, +// drawn by assets/js/search.js). + +.nav_search { + margin-left: 1rem; + // The form is one line. Without this the button dropped under the + // field as soon as the navigation was tight. + flex-wrap: nowrap; + // It takes the width the menu and the logo leave, and no more. Without + // the shrink the button ran off the right edge of a 1200px to 1500px + // window: 149px past it at 1200, which is every laptop. + flex: 0 1 auto; + min-width: 0; + + input { + width: 10rem; + } + + .nav_search_button { + color: $blue-pybcn; + border: 1px solid $blue-pybcn; + margin-left: 0.25rem; + + &:hover, + &:focus { + color: white; + background-color: $blue-pybcn; + } + } +} + +// The glyph that stands in for the box where the box does not fit. One of +// the two is shown and never both: the navigation collapses at 1200px, so +// under it the form rides inside the open menu, where there is room, and +// between 1200px and 1500px only the glyph is on the bar. +.nav_search_link { + display: none; + align-self: center; + margin-left: 1rem; + color: $blue-pybcn; + + &:hover, + &:focus { + color: $yellow-pybcn; + } +} + +@media (min-width: 1200px) and (max-width: 1499.98px) { + .nav_search { + display: none; + } + + .nav_search_link { + display: inline-block; + } +} + +// The menu asks for its natural width before the search box gets the rest. +// The box took 136px off it, and the items were still laid out on one row: +// what broke was the text inside each one, so "The Association" and +// "Contact us" each read on two lines. +.navbar .navbar-nav .nav-link { + white-space: nowrap; +} + +.search_form { + margin-bottom: 1.5rem; + + label { + margin: 0; + font-weight: bold; + } +} + +.search_query { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.5rem; + + input { + flex: 1 1 16rem; + } + + .search_button { + color: white; + background-color: $blue-pybcn; + border-color: $blue-pybcn; + } +} + +.search_filters { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1rem; + margin-top: 0.75rem; + + label { + display: flex; + align-items: center; + gap: 0.4rem; + font-weight: normal; + } + + select { + width: auto; + } +} + +// The count of the results, in the muted voice of every secondary line +// of the site; it was #555, a grey of this file alone. +.search_status { + color: $text-grey; +} + +// The results stand a block off the form, as the blocks of every page do; +// the heading over them is the section title of main.scss. +.search_results_section { + margin-top: $block-gap; +} + +.search_results { + list-style: none; + padding: 0; + margin: 0; +} + +// One result under the other, a rule between them in the grey of every +// rule of the site. +.search_result { + border-top: 1px solid $rule-grey; + padding: 0.75rem 0; + + p { + margin: 0; + } +} + +.search_result_title { + font-weight: bold; +} + +// The kind of the result, in front of its title: the one word that says +// whether the link opens a talk, a day, a person, or a photograph. The +// pill of the filter tabs and the count card (main.scss): the one border +// and the one radius, the muted grey. +.search_result_kind { + display: inline-block; + font-size: 0.75em; + font-weight: normal; + text-transform: uppercase; + letter-spacing: 0.05em; + color: $text-grey; + border: 1px solid $rule-grey; + border-radius: $card-radius; + padding: 0 0.4em; + margin-right: 0.5rem; + vertical-align: middle; +} + +.search_result_meta { + color: $text-grey; +} + +.search_result_excerpt { + margin-top: 0.25rem !important; + + mark { + padding: 0 0.1em; + background-color: #fff3a0; + } +} diff --git a/themes/pybcn_theme/layouts/404.html b/themes/pybcn_theme/layouts/404.html index c65c44ef1..e35061ddf 100644 --- a/themes/pybcn_theme/layouts/404.html +++ b/themes/pybcn_theme/layouts/404.html @@ -1,11 +1,20 @@ +{{- /* + The page GitHub Pages serves for an address that is not here. The words + of the address are the first query of the search box, so an old link to + a talk, a person, or a day finds the page that holds it now: the box and + the results are partials/search_form.html, which assets/js/search.js + drives (loaded by partials/js.html on this page and on /search/). The + list of the menu stays under it for a reader with no JavaScript. +*/ -}} {{ define "main" }}
-

Page not found

This page is not here. The link may be old, or the address may have a typo.

-

Try one of these:

+

The words of the address are searched below; change them if nothing matches.

+ {{ partial "search_form.html" (dict "path_query" true) }} +

Or try one of these:

{{ end }} + +{{ partial "sponsors-grid.html" (dict "levels" $levels "Site" .Site) }} {{ end }} diff --git a/themes/pybcn_theme/layouts/partials/sponsor_ids.html b/themes/pybcn_theme/layouts/partials/sponsor_ids.html new file mode 100644 index 000000000..16591a70a --- /dev/null +++ b/themes/pybcn_theme/layouts/partials/sponsor_ids.html @@ -0,0 +1,28 @@ +{{- /* + Every sponsor the site holds a record of, sorted by name. + + Argument: the site. Returns a slice of ids. + + Two callers read it and they have to agree: _default/sponsors.html + draws the grid from it, and partials/listing_total.html puts its length + in the h1. A heading that says a number the rows below do not add up to + is worse than no number, which is the rule the three listings of the + archive already follow. + + The two association accounts are left out. They appear on an edition + page under the Organizers level, which is what they are: both of them + are us, and we did not sponsor ourselves. +*/ -}} +{{- $exclude := slice "pybcn" "pyladiesbcn" -}} +{{- $keyed := slice -}} +{{- range where .RegularPages "Section" "sponsors" -}} + {{- $id := .Params.id -}} + {{- if and $id (not (in $exclude $id)) -}} + {{- $keyed = $keyed | append (dict "key" (lower (.Params.name | default $id)) "id" $id) -}} + {{- end -}} +{{- end -}} +{{- $ids := slice -}} +{{- range sort $keyed "key" -}} + {{- $ids = $ids | append .id -}} +{{- end -}} +{{- return $ids -}} diff --git a/themes/pybcn_theme/layouts/partials/sponsor_summary.html b/themes/pybcn_theme/layouts/partials/sponsor_summary.html index 0ca1cc0fe..534cf777e 100644 --- a/themes/pybcn_theme/layouts/partials/sponsor_summary.html +++ b/themes/pybcn_theme/layouts/partials/sponsor_summary.html @@ -21,6 +21,11 @@ web address is not wrapped in an empty link. A broken image reads as a mistake, and an organisation that supported the event deserves better than looking like a missing asset. + + The link carries the name of the sponsor as its title, so a reader who + does not recognise a logo can hover it and read who it is. It is the + same string as the alt of the image, which is + what a screen reader announces. */ -}} {{- $sponsor := $.sponsor -}} {{- $name := $sponsor.Params.name | default $sponsor.Params.id -}} @@ -58,7 +63,7 @@ {{- end -}} {{- $logo := dict "src" $src "srcset" $srcset "width" $width "height" $height "name" $name -}} {{- with $sponsor.Params.site -}} -{{- template "pybcn_sponsor_logo" $logo -}} +{{- template "pybcn_sponsor_logo" $logo -}} {{- else -}} {{- template "pybcn_sponsor_logo" $logo -}} {{- end -}} diff --git a/themes/pybcn_theme/layouts/partials/sponsors-grid.html b/themes/pybcn_theme/layouts/partials/sponsors-grid.html index 89e3ece01..09b50d046 100644 --- a/themes/pybcn_theme/layouts/partials/sponsors-grid.html +++ b/themes/pybcn_theme/layouts/partials/sponsors-grid.html @@ -1,26 +1,45 @@ {{- /* - A grid of sponsor logos, one row per level. + A grid of sponsor logos, one band per level. - The row ids carry the "sponsors" prefix so that they cannot collide with - the rows of a people grid on the same event page. + Every card is the same size and every logo sits in the same fixed box + inside it, so no sponsor reads as having paid for a bigger slot. What + responds to the width of the window is the number of cards on a line, + not the size of a logo: a logo that is scaled by the viewport is a logo + that is unreadable on a phone and enormous on a desktop. + + The columns were Bootstrap ones, col-md-{12 / sponsors_per_line}, and + with a fixed card height inside them the cells overlapped and left + holes. The row is a CSS grid now and the cards are its items, so the + browser lays them out and nothing can overlap. + + sponsors_per_line is the cap a named level asks for, which is what an + edition page uses to say that its two Gold sponsors are bigger news + than its eight Supporting ones. A level that asks for nothing, which is + /sponsors/, fills the line with as many cards as fit. The cap travels + as a class and not as an inline custom property, because + bin/check-rendered refuses an inline style the stylesheet could carry: + sponsors.scss writes one rule per value, and the data holds 2, 3 and 4. + + The row ids carry the "sponsors" prefix so that they cannot collide + with the rows of a people grid on the same event page. */ -}} -
+
{{ $pages := where .Site.Pages "Section" "sponsors" }} {{ range $idx, $level := .levels }} -
+
{{ if $level.name }} -
-

{{ $level.name }}

-
+

{{ $level.name }}

{{ end }} - {{ range $sponsor := $level.sponsors }} - {{ range $page := where $pages ".Params.id" "eq" $sponsor }} - +
+ {{ range $sponsor := $level.sponsors }} + {{ range $page := where $pages ".Params.id" "eq" $sponsor }} + + {{ end }} {{ end }} - {{ end }} +
{{ end }} From 25f361015f6d72b762056fddfe93e205117fc118 Mon Sep 17 00:00:00 2001 From: David Arcos Date: Sun, 18 Oct 2026 11:58:39 +0200 Subject: [PATCH 04/16] Name a PyLadies workshop after its day, and give each event one photo The name of the event and the name of the workshop were the same words twice, on 42 of the 72 PyLadies BCN days, because Meetup announced each day with the title of the one workshop it held: the page said "Selenium for WebScraping" in its heading and again in its programme, and the row of /events/ and the row of /talks/ said it twice as well. Those 42 are "PyLadies BCN Workshop, " now, and the workshop keeps its own title on its own page. The year is in the name because the month alone collides: six Januaries, six Mays, five Junes. canonical_photo is the one picture of a day, named in the front matter of its event. No rule can pick it: the gallery of PyDay BCN 2016 holds four pictures and three of them are a projector. heroBackground cannot stand in for it either, because thirteen events share seven of those images. Eleven events have a photo thread and all eleven now name one, nine of them the group photo of the day. The two oldest take a picture that lives loose in images/photos/, where the old site kept the few somebody chose by hand, and the one of 2016 is the full lecture hall picked out of a post of @PyLadiesBCN. An edition says how many people came when a source says it in words. PyDay BCN 2025 is the one page with a figure, 140, from the post that closes the thread of the day. It is not a registration: AGENTS.md keeps the two words apart, and an edition sells its tickets elsewhere. The minutes of the eight general assemblies have a section of their own on the page of the association, with the photograph of the day beside each. Five of the eight have one. The minutes are the record the law asks for; the photograph is the only thing that says what the day looked like, because an assembly has no event page and no gallery. Stored as WebP at 600px: 674 KiB of JPEG become 123 KiB. "Hands-on Django with PyLadiesBCN (2022)" carries its group, so it stops taking the "Other event" glyph on every listing. --- content/events/_index.md | 2 +- ...31-barcelona-python-meetup-january-2011.md | 2 +- ...4-barcelona-python-meetup-february-2011.md | 2 +- ...ets-start-again-with-the-proper-meetups.md | 2 +- .../2013-02-07-python-for-data-analysis.md | 2 +- ...tion-to-raspberry-pi-workshop-trial-run.md | 2 +- .../2015-01-29-python-tips-and-tricks.md | 2 +- ...ction-to-debugging-in-python-codefights.md | 2 +- ...g-test-driven-development-tdd-in-python.md | 2 +- .../meetups/2015-05-21-python-may-meetup.md | 28 +++++- ...or-data-analysis-introduction-to-pandas.md | 2 +- ...-django-1-introduction-to-django-models.md | 2 +- .../2016-03-01-django-2-views-templates.md | 2 +- ...chine-learning-in-r-and-python-with-h2o.md | 2 +- .../2018-01-25-gender-imbalance-in-science.md | 2 +- ...with-jupyter-notebook-pandas-and-plotly.md | 2 +- ...on-arduino-and-its-connection-to-python.md | 2 +- ...-graphic-user-interfaces-with-python-tk.md | 2 +- ...8-06-14-data-science-for-smarter-cities.md | 2 +- ...8-07-10-build-your-first-neural-network.md | 2 +- ...8-09-25-introduction-to-computer-vision.md | 2 +- ...10-23-introduccion-a-the-things-network.md | 2 +- ...with-jupyter-notebook-pandas-and-plotly.md | 2 +- ...computing-center-joining-generations-of.md | 2 +- .../2019-01-29-data-interactive-plots.md | 2 +- ...9-02-26-data-apis-intro-to-web-scraping.md | 2 +- ...us-threading-in-a-single-workstation-in.md | 2 +- ...duction-to-spacy-with-jupyter-notebooks.md | 2 +- .../2019-05-21-selenium-for-webscraping.md | 2 +- ...uction-to-django-a-python-web-framework.md | 2 +- ...elational-databases-with-sql-and-python.md | 2 +- ...introduction-to-programming-with-python.md | 2 +- ...oduction-to-tackling-networks-in-python.md | 13 ++- ...aybe-even-pass-big-technical-interviews.md | 2 +- ...-robomaker-programming-robots-in-python.md | 2 +- ...az-tu-primera-skill-de-alexa-con-python.md | 2 +- ...truggling-process-from-matlab-to-python.md | 2 +- ...ng-automation-with-microcontrollers-and.md | 2 +- ...29-build-your-first-webpage-with-django.md | 2 +- ...r-experimentation-framework-with-python.md | 2 +- ...che-airflow-author-schedule-and-monitor.md | 2 +- ...3-29-data-analysis-with-pandas-and-dash.md | 2 +- ...chy-internships-in-open-source-software.md | 2 +- ...ntum-computing-for-everyone-with-qiskit.md | 2 +- ...on-for-technical-interviews-tips-tricks.md | 2 +- ...-to-open-source-with-hacktoberfest-2022.md | 2 +- ...-python-for-new-and-intermediate-makers.md | 2 +- ...nd-fun-computer-vision-train-your-image.md | 2 +- .../other_events/django_pyladies_2022.md | 13 +++ .../other_events/pydata_2017_barcelona.md | 6 ++ content/events/pydatabcn/pydatabcn_2023.md | 6 ++ content/events/pyday_bcn/pyday_bcn_2016.md | 15 +++ content/events/pyday_bcn/pyday_bcn_2018.md | 30 ++++-- content/events/pyday_bcn/pyday_bcn_2019.md | 91 +++++++++--------- content/events/pyday_bcn/pyday_bcn_2021.md | 8 +- content/events/pyday_bcn/pyday_bcn_2022.md | 6 ++ content/events/pyday_bcn/pyday_bcn_2023.md | 6 ++ content/events/pyday_bcn/pyday_bcn_2024.md | 6 ++ content/events/pyday_bcn/pyday_bcn_2025.md | 13 +++ content/pybcn_association/information.md | 16 +-- content/pybcn_association/legal-notice.md | 2 +- content/pybcn_association/organizers.md | 8 +- content/pybcn_association/privacy-policy.md | 4 +- content/pyladies_bcn/sponsors.md | 2 +- .../assets/images/photos/assemblies/2019.webp | Bin 0 -> 29492 bytes .../assets/images/photos/assemblies/2021.webp | Bin 0 -> 30460 bytes .../assets/images/photos/assemblies/2022.webp | Bin 0 -> 33510 bytes .../assets/images/photos/assemblies/2023.webp | Bin 0 -> 23342 bytes .../assets/images/photos/assemblies/2026.webp | Bin 0 -> 12430 bytes .../assets/images/photos/group-pyday-2016.jpg | Bin 0 -> 212350 bytes 70 files changed, 249 insertions(+), 116 deletions(-) create mode 100644 themes/pybcn_theme/assets/images/photos/assemblies/2019.webp create mode 100644 themes/pybcn_theme/assets/images/photos/assemblies/2021.webp create mode 100644 themes/pybcn_theme/assets/images/photos/assemblies/2022.webp create mode 100644 themes/pybcn_theme/assets/images/photos/assemblies/2023.webp create mode 100644 themes/pybcn_theme/assets/images/photos/assemblies/2026.webp create mode 100644 themes/pybcn_theme/assets/images/photos/group-pyday-2016.jpg diff --git a/content/events/_index.md b/content/events/_index.md index c8350f358..094bb682c 100644 --- a/content/events/_index.md +++ b/content/events/_index.md @@ -1,6 +1,6 @@ --- title: "Events" -description: "" +description: "Every event the association has organized, the most recent first: the monthly meetups since 2007, and the larger days, PyDay BCN and PyDataBCN." menu: "main" weight: 4 layout: events_index diff --git a/content/events/meetups/2011-01-31-barcelona-python-meetup-january-2011.md b/content/events/meetups/2011-01-31-barcelona-python-meetup-january-2011.md index 0d726ca52..02123eb5a 100644 --- a/content/events/meetups/2011-01-31-barcelona-python-meetup-january-2011.md +++ b/content/events/meetups/2011-01-31-barcelona-python-meetup-january-2011.md @@ -38,6 +38,6 @@ talks: type: talk - id: the-basics-and-customization-of-the-satchmo-project-remarks title: "The basics and customization of the Satchmo project: Remarks and Personal Experience" - speakers: [juan-gonzalez-vallinas] + speakers: [juan-ramon-gonzalez-vallinas] type: talk --- diff --git a/content/events/meetups/2011-02-24-barcelona-python-meetup-february-2011.md b/content/events/meetups/2011-02-24-barcelona-python-meetup-february-2011.md index 0fce3082b..52b14512f 100644 --- a/content/events/meetups/2011-02-24-barcelona-python-meetup-february-2011.md +++ b/content/events/meetups/2011-02-24-barcelona-python-meetup-february-2011.md @@ -36,7 +36,7 @@ talks: duration_minutes: 15 - id: statistics-and-plotting-with-python title: "Statistics and Plotting with Python" - speakers: [juan-gonzalez-vallinas] + speakers: [juan-ramon-gonzalez-vallinas] type: talk duration_minutes: 30 --- diff --git a/content/events/meetups/2011-09-02-lets-start-again-with-the-proper-meetups.md b/content/events/meetups/2011-09-02-lets-start-again-with-the-proper-meetups.md index 8c8cd25e7..ccfe4f376 100644 --- a/content/events/meetups/2011-09-02-lets-start-again-with-the-proper-meetups.md +++ b/content/events/meetups/2011-09-02-lets-start-again-with-the-proper-meetups.md @@ -26,7 +26,7 @@ group: "PyBCN" talks: - id: launching-a-webstore-with-django-and-satchmo-a-personal title: "Launching a webstore with Django and Satchmo: A personal experience" - speakers: [juan-gonzalez-vallinas] + speakers: [juan-ramon-gonzalez-vallinas] type: talk - id: wok-title-pending title: "Wok (Title pending)" diff --git a/content/events/meetups/2013-02-07-python-for-data-analysis.md b/content/events/meetups/2013-02-07-python-for-data-analysis.md index a280d0f2a..ce9c81cb8 100644 --- a/content/events/meetups/2013-02-07-python-for-data-analysis.md +++ b/content/events/meetups/2013-02-07-python-for-data-analysis.md @@ -26,7 +26,7 @@ group: "PyBCN" talks: - id: matplotlib title: "Matplotlib" - speakers: [juan-gonzalez-vallinas] + speakers: [juan-ramon-gonzalez-vallinas] type: talk duration_minutes: 10 - id: quick-introduction-to-ipython diff --git a/content/events/meetups/2014-06-10-introduction-to-raspberry-pi-workshop-trial-run.md b/content/events/meetups/2014-06-10-introduction-to-raspberry-pi-workshop-trial-run.md index 5c564debd..0f37c16b7 100644 --- a/content/events/meetups/2014-06-10-introduction-to-raspberry-pi-workshop-trial-run.md +++ b/content/events/meetups/2014-06-10-introduction-to-raspberry-pi-workshop-trial-run.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to Raspberry Pi Workshop - trial run" +title: "PyLadies BCN Workshop, June 2014" date: 2014-06-10 year: 2014 venue: "UPF Music Technology Group" diff --git a/content/events/meetups/2015-01-29-python-tips-and-tricks.md b/content/events/meetups/2015-01-29-python-tips-and-tricks.md index 8affa68ad..580a7d7a9 100644 --- a/content/events/meetups/2015-01-29-python-tips-and-tricks.md +++ b/content/events/meetups/2015-01-29-python-tips-and-tricks.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Python Tips and Tricks" +title: "PyLadies BCN Workshop, January 2015" date: 2015-01-29 year: 2015 venue: "UPF, Campus de la Comunicación - Poblenou" diff --git a/content/events/meetups/2015-02-26-introduction-to-debugging-in-python-codefights.md b/content/events/meetups/2015-02-26-introduction-to-debugging-in-python-codefights.md index 73fa96baa..2d0154cd2 100644 --- a/content/events/meetups/2015-02-26-introduction-to-debugging-in-python-codefights.md +++ b/content/events/meetups/2015-02-26-introduction-to-debugging-in-python-codefights.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to debugging in Python (+ CodeFights!)" +title: "PyLadies BCN Workshop, February 2015" date: 2015-02-26 year: 2015 venue: "UPF, Campus de la Comunicación - Poblenou" diff --git a/content/events/meetups/2015-05-14-testing-test-driven-development-tdd-in-python.md b/content/events/meetups/2015-05-14-testing-test-driven-development-tdd-in-python.md index 3596a5827..79da58d72 100644 --- a/content/events/meetups/2015-05-14-testing-test-driven-development-tdd-in-python.md +++ b/content/events/meetups/2015-05-14-testing-test-driven-development-tdd-in-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Testing & Test-driven development (TDD) in Python" +title: "PyLadies BCN Workshop, May 2015" date: 2015-05-14 year: 2015 venue: "UPF, Campus de la Comunicación - Poblenou" diff --git a/content/events/meetups/2015-05-21-python-may-meetup.md b/content/events/meetups/2015-05-21-python-may-meetup.md index d74ee1a29..310459209 100644 --- a/content/events/meetups/2015-05-21-python-may-meetup.md +++ b/content/events/meetups/2015-05-21-python-may-meetup.md @@ -31,7 +31,7 @@ talks: duration_minutes: 40 - id: python-for-data-analysis title: "Python for Data Analysis" - speakers: [juan-gonzales-vallinas] + speakers: [juan-ramon-gonzalez-vallinas] type: talk duration_minutes: 40 - id: machine-learning-with-scikit-learn @@ -39,4 +39,30 @@ talks: speakers: [christopher-bonnett] type: talk duration_minutes: 30 +# The photographs the association published of this day, one per post +# so no two share a caption, which is also the alt text. The posts were +# read out of the X export by the text of their thread, and imported +# with bin/import-x-photos --ids. +photos: + thread: "https://x.com/PyBCN/status/601436263019782144" + items: + - file: 2015-05-21-python-may-meetup/04-empezando-el-barcelona-python-meetup-de-mayo-pybcn.webp + caption: "Empezando el Barcelona Python Meetup de Mayo #pybcn" + source: "https://x.com/PyBCN/status/601435871280177152" + time: "19:14" + - file: 2015-05-21-python-may-meetup/01-python-decorators-by-guillermo-blasco-theblackboxi.webp + caption: "Python Decorators, by Guillermo Blasco (@theblackboxio) #pybcn" + source: "https://x.com/PyBCN/status/601436263019782144" + time: "19:15" + talk: python-decorators + - file: 2015-05-21-python-may-meetup/02-python-for-data-analysis-by-juan-gonzales-vallinas.webp + caption: "Python for Data Analysis, by Juan Gonzales-Vallinas #pybcn" + source: "https://x.com/PyBCN/status/601447469210214401" + time: "20:00" + talk: python-for-data-analysis + - file: 2015-05-21-python-may-meetup/03-machine-learning-with-scikit-learn-by-christopher.webp + caption: "Machine Learning with scikit-learn, by Christopher Bonnett (@cbonnett) #pybcn" + source: "https://x.com/PyBCN/status/601453857508438016" + time: "20:25" + talk: machine-learning-with-scikit-learn --- diff --git a/content/events/meetups/2015-12-01-python-for-data-analysis-introduction-to-pandas.md b/content/events/meetups/2015-12-01-python-for-data-analysis-introduction-to-pandas.md index 9e7c39cb0..929bda58d 100644 --- a/content/events/meetups/2015-12-01-python-for-data-analysis-introduction-to-pandas.md +++ b/content/events/meetups/2015-12-01-python-for-data-analysis-introduction-to-pandas.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: 'Python for data analysis: introduction to Pandas' +title: "PyLadies BCN Workshop, December 2015" date: 2015-12-01 year: 2015 venue: UPF, Campus de la Comunicación - Poblenou diff --git a/content/events/meetups/2016-01-26-django-1-introduction-to-django-models.md b/content/events/meetups/2016-01-26-django-1-introduction-to-django-models.md index 060509766..1c7e47242 100644 --- a/content/events/meetups/2016-01-26-django-1-introduction-to-django-models.md +++ b/content/events/meetups/2016-01-26-django-1-introduction-to-django-models.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Django 1: Introduction to Django Models" +title: "PyLadies BCN Workshop, January 2016" date: 2016-01-26 year: 2016 venue: "UPF, Campus de la Comunicación - Poblenou" diff --git a/content/events/meetups/2016-03-01-django-2-views-templates.md b/content/events/meetups/2016-03-01-django-2-views-templates.md index 2c387bb19..6f3707f17 100644 --- a/content/events/meetups/2016-03-01-django-2-views-templates.md +++ b/content/events/meetups/2016-03-01-django-2-views-templates.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Django 2: Views & templates" +title: "PyLadies BCN Workshop, March 2016" date: 2016-03-01 year: 2016 venue: "UPF, Campus de la Comunicación - Poblenou" diff --git a/content/events/meetups/2016-12-05-scalable-machine-learning-in-r-and-python-with-h2o.md b/content/events/meetups/2016-12-05-scalable-machine-learning-in-r-and-python-with-h2o.md index 55e2bcf2b..cdbcc8224 100644 --- a/content/events/meetups/2016-12-05-scalable-machine-learning-in-r-and-python-with-h2o.md +++ b/content/events/meetups/2016-12-05-scalable-machine-learning-in-r-and-python-with-h2o.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Scalable Machine Learning in R and Python with H2O" +title: "PyLadies BCN Workshop, December 2016" date: 2016-12-05 year: 2016 venue: "Edifici Històric UB (Aula B7)" diff --git a/content/events/meetups/2018-01-25-gender-imbalance-in-science.md b/content/events/meetups/2018-01-25-gender-imbalance-in-science.md index 416f49685..4113bafd8 100644 --- a/content/events/meetups/2018-01-25-gender-imbalance-in-science.md +++ b/content/events/meetups/2018-01-25-gender-imbalance-in-science.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Gender Imbalance in Science" +title: "PyLadies BCN Workshop, January 2018" date: 2018-01-25 year: 2018 venue: "Skyscanner's offices" diff --git a/content/events/meetups/2018-03-06-data-analysis-with-jupyter-notebook-pandas-and-plotly.md b/content/events/meetups/2018-03-06-data-analysis-with-jupyter-notebook-pandas-and-plotly.md index df574f41b..1c7d178bb 100644 --- a/content/events/meetups/2018-03-06-data-analysis-with-jupyter-notebook-pandas-and-plotly.md +++ b/content/events/meetups/2018-03-06-data-analysis-with-jupyter-notebook-pandas-and-plotly.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Data analysis with Jupyter Notebook, Pandas and Plotly" +title: "PyLadies BCN Workshop, March 2018" date: 2018-03-06 year: 2018 venue: "Worldsensing" diff --git a/content/events/meetups/2018-04-10-very-first-hands-on-arduino-and-its-connection-to-python.md b/content/events/meetups/2018-04-10-very-first-hands-on-arduino-and-its-connection-to-python.md index af2e28461..dfdde5a3f 100644 --- a/content/events/meetups/2018-04-10-very-first-hands-on-arduino-and-its-connection-to-python.md +++ b/content/events/meetups/2018-04-10-very-first-hands-on-arduino-and-its-connection-to-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Very first hands on Arduino and its connection to Python through PySerial" +title: "PyLadies BCN Workshop, April 2018" date: 2018-04-10 year: 2018 venue: "espai30" diff --git a/content/events/meetups/2018-05-16-build-graphic-user-interfaces-with-python-tk.md b/content/events/meetups/2018-05-16-build-graphic-user-interfaces-with-python-tk.md index c946f8ae1..072c7456b 100644 --- a/content/events/meetups/2018-05-16-build-graphic-user-interfaces-with-python-tk.md +++ b/content/events/meetups/2018-05-16-build-graphic-user-interfaces-with-python-tk.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Build Graphic User Interfaces with Python Tk" +title: "PyLadies BCN Workshop, May 2018" date: 2018-05-16 year: 2018 venue: "Punt Multimedia" diff --git a/content/events/meetups/2018-06-14-data-science-for-smarter-cities.md b/content/events/meetups/2018-06-14-data-science-for-smarter-cities.md index aff9357b0..0bfe8d35b 100644 --- a/content/events/meetups/2018-06-14-data-science-for-smarter-cities.md +++ b/content/events/meetups/2018-06-14-data-science-for-smarter-cities.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Data science for smarter cities" +title: "PyLadies BCN Workshop, June 2018" date: 2018-06-14 year: 2018 venue: "Worldsensing" diff --git a/content/events/meetups/2018-07-10-build-your-first-neural-network.md b/content/events/meetups/2018-07-10-build-your-first-neural-network.md index 8072783aa..161de8a7e 100644 --- a/content/events/meetups/2018-07-10-build-your-first-neural-network.md +++ b/content/events/meetups/2018-07-10-build-your-first-neural-network.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Build your first neural network" +title: "PyLadies BCN Workshop, July 2018" date: 2018-07-10 year: 2018 venue: "Aticco" diff --git a/content/events/meetups/2018-09-25-introduction-to-computer-vision.md b/content/events/meetups/2018-09-25-introduction-to-computer-vision.md index 3479ca49b..7a2c9659b 100644 --- a/content/events/meetups/2018-09-25-introduction-to-computer-vision.md +++ b/content/events/meetups/2018-09-25-introduction-to-computer-vision.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Introduction to Computer Vision +title: "PyLadies BCN Workshop, September 2018" date: 2018-09-25 year: 2018 venue: Kiwi.com diff --git a/content/events/meetups/2018-10-23-introduccion-a-the-things-network.md b/content/events/meetups/2018-10-23-introduccion-a-the-things-network.md index f985ad5cb..18d3d4635 100644 --- a/content/events/meetups/2018-10-23-introduccion-a-the-things-network.md +++ b/content/events/meetups/2018-10-23-introduccion-a-the-things-network.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introducción a The Things Network" +title: "PyLadies BCN Workshop, October 2018" date: 2018-10-23 year: 2018 venue: "Travelperk" diff --git a/content/events/meetups/2018-11-20-data-analysis-with-jupyter-notebook-pandas-and-plotly.md b/content/events/meetups/2018-11-20-data-analysis-with-jupyter-notebook-pandas-and-plotly.md index 7e58970b6..e77e9de6c 100644 --- a/content/events/meetups/2018-11-20-data-analysis-with-jupyter-notebook-pandas-and-plotly.md +++ b/content/events/meetups/2018-11-20-data-analysis-with-jupyter-notebook-pandas-and-plotly.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Data analysis with Jupyter Notebook, Pandas and Plotly" +title: "PyLadies BCN Workshop, November 2018" date: 2018-11-20 year: 2018 venue: "Skyscanner's offices" diff --git a/content/events/meetups/2018-12-20-barcelona-supercomputing-center-joining-generations-of.md b/content/events/meetups/2018-12-20-barcelona-supercomputing-center-joining-generations-of.md index c1508297c..1b5577e8e 100644 --- a/content/events/meetups/2018-12-20-barcelona-supercomputing-center-joining-generations-of.md +++ b/content/events/meetups/2018-12-20-barcelona-supercomputing-center-joining-generations-of.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Barcelona Supercomputing Center + Joining Generations of Women in Tech" +title: "PyLadies BCN Workshop, December 2018" date: 2018-12-20 year: 2018 venue: "Barcelona Supercomputing Center - Centro Nacional de Supercomputación" diff --git a/content/events/meetups/2019-01-29-data-interactive-plots.md b/content/events/meetups/2019-01-29-data-interactive-plots.md index 37203c84b..745d43476 100644 --- a/content/events/meetups/2019-01-29-data-interactive-plots.md +++ b/content/events/meetups/2019-01-29-data-interactive-plots.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Data & interactive plots +title: "PyLadies BCN Workshop, January 2019" date: 2019-01-29 year: 2019 venue: Kiwi.com diff --git a/content/events/meetups/2019-02-26-data-apis-intro-to-web-scraping.md b/content/events/meetups/2019-02-26-data-apis-intro-to-web-scraping.md index 520115878..779d89c44 100644 --- a/content/events/meetups/2019-02-26-data-apis-intro-to-web-scraping.md +++ b/content/events/meetups/2019-02-26-data-apis-intro-to-web-scraping.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Data, APIs & intro to web scraping +title: "PyLadies BCN Workshop, February 2019" date: 2019-02-26 year: 2019 venue: Codely at Spaces22@ coworking, Carrer Pallars 193. diff --git a/content/events/meetups/2019-03-26-multiprocessing-versus-threading-in-a-single-workstation-in.md b/content/events/meetups/2019-03-26-multiprocessing-versus-threading-in-a-single-workstation-in.md index 148c97da0..377c801c1 100644 --- a/content/events/meetups/2019-03-26-multiprocessing-versus-threading-in-a-single-workstation-in.md +++ b/content/events/meetups/2019-03-26-multiprocessing-versus-threading-in-a-single-workstation-in.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Multiprocessing versus threading in a single workstation in Python 2.x" +title: "PyLadies BCN Workshop, March 2019" date: 2019-03-26 year: 2019 venue: "Universitat de Barcelona" diff --git a/content/events/meetups/2019-04-25-python-nlp-introduction-to-spacy-with-jupyter-notebooks.md b/content/events/meetups/2019-04-25-python-nlp-introduction-to-spacy-with-jupyter-notebooks.md index a8cef7b1e..516eb512d 100644 --- a/content/events/meetups/2019-04-25-python-nlp-introduction-to-spacy-with-jupyter-notebooks.md +++ b/content/events/meetups/2019-04-25-python-nlp-introduction-to-spacy-with-jupyter-notebooks.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Python & NLP. Introduction to spaCy with Jupyter notebooks" +title: "PyLadies BCN Workshop, April 2019" date: 2019-04-25 year: 2019 venue: "Holaluz" diff --git a/content/events/meetups/2019-05-21-selenium-for-webscraping.md b/content/events/meetups/2019-05-21-selenium-for-webscraping.md index 4fc0979d7..bdeec0490 100644 --- a/content/events/meetups/2019-05-21-selenium-for-webscraping.md +++ b/content/events/meetups/2019-05-21-selenium-for-webscraping.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Selenium for WebScraping" +title: "PyLadies BCN Workshop, May 2019" date: 2019-05-21 year: 2019 venue: "letgo" diff --git a/content/events/meetups/2019-06-25-introduction-to-django-a-python-web-framework.md b/content/events/meetups/2019-06-25-introduction-to-django-a-python-web-framework.md index 55b321257..e48a0ff92 100644 --- a/content/events/meetups/2019-06-25-introduction-to-django-a-python-web-framework.md +++ b/content/events/meetups/2019-06-25-introduction-to-django-a-python-web-framework.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to Django, a python web framework" +title: "PyLadies BCN Workshop, June 2019" date: 2019-06-25 year: 2019 venue: "Verse" diff --git a/content/events/meetups/2019-09-30-introduction-to-relational-databases-with-sql-and-python.md b/content/events/meetups/2019-09-30-introduction-to-relational-databases-with-sql-and-python.md index 49871bc1a..fd13d56d6 100644 --- a/content/events/meetups/2019-09-30-introduction-to-relational-databases-with-sql-and-python.md +++ b/content/events/meetups/2019-09-30-introduction-to-relational-databases-with-sql-and-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Introduction to Relational Databases with SQL and Python +title: "PyLadies BCN Workshop, September 2019" date: 2019-09-30 year: 2019 venue: TravelPerk diff --git a/content/events/meetups/2019-10-23-introduction-to-programming-with-python.md b/content/events/meetups/2019-10-23-introduction-to-programming-with-python.md index dc079202f..02284a9fc 100644 --- a/content/events/meetups/2019-10-23-introduction-to-programming-with-python.md +++ b/content/events/meetups/2019-10-23-introduction-to-programming-with-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to Programming with Python" +title: "PyLadies BCN Workshop, October 2019" date: 2019-10-23 year: 2019 venue: "Carrer de Tànger, 122" diff --git a/content/events/meetups/2019-11-20-introduction-to-tackling-networks-in-python.md b/content/events/meetups/2019-11-20-introduction-to-tackling-networks-in-python.md index 5e26f14b1..8b57df58c 100644 --- a/content/events/meetups/2019-11-20-introduction-to-tackling-networks-in-python.md +++ b/content/events/meetups/2019-11-20-introduction-to-tackling-networks-in-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to Tackling networks in Python" +title: "PyLadies BCN Workshop, November 2019" date: 2019-11-20 year: 2019 venue: "Holaluz" @@ -29,4 +29,15 @@ talks: speakers: [carolina-fernandez] type: workshop description: "Wondering how to create, manage and test a virtual network in your local environment? Different Python-based solutions allow you to do so in an easy way. During the workshop we will be able to define a network and its behaviour via Python, then play with it! Come, learn and practice how to access to remote computers from wherever you are and manage this kind of networks!" +# The photographs the association published of this day, one per post +# so no two share a caption, which is also the alt text. The posts were +# read out of the X export by the text of their thread, and imported +# with bin/import-x-photos --ids. +photos: + thread: "https://x.com/PyBCN/status/1197083775844438018" + items: + - file: 2019-11-20-introduction-to-tackling-networks-in-python/01-we-have-the-pictures-of-the-event-will-post-them-s.webp + caption: "We have the pictures of the event! Will post them soon. This was the traditional group photo with all the assistants. Also, big thanks to out great photographers, @Mevoyaverpatos and @jmartinezvila! 👏👏👏" + source: "https://x.com/PyBCN/status/1197083775844438018" + time: "10:26" --- diff --git a/content/events/meetups/2020-01-27-how-to-face-and-maybe-even-pass-big-technical-interviews.md b/content/events/meetups/2020-01-27-how-to-face-and-maybe-even-pass-big-technical-interviews.md index d1295bf5d..45ebaa479 100644 --- a/content/events/meetups/2020-01-27-how-to-face-and-maybe-even-pass-big-technical-interviews.md +++ b/content/events/meetups/2020-01-27-how-to-face-and-maybe-even-pass-big-technical-interviews.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "How to face (and maybe even pass) big technical interviews" +title: "PyLadies BCN Workshop, January 2020" date: 2020-01-27 year: 2020 venue: "C/ de Sardenya, 229" diff --git a/content/events/meetups/2020-02-24-ros-and-robomaker-programming-robots-in-python.md b/content/events/meetups/2020-02-24-ros-and-robomaker-programming-robots-in-python.md index a89c80d0c..d4e17bc36 100644 --- a/content/events/meetups/2020-02-24-ros-and-robomaker-programming-robots-in-python.md +++ b/content/events/meetups/2020-02-24-ros-and-robomaker-programming-robots-in-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "ROS and RoboMaker: programming robots in Python" +title: "PyLadies BCN Workshop, February 2020" date: 2020-02-24 year: 2020 venue: "Marfeel" diff --git a/content/events/meetups/2021-01-28-haz-tu-primera-skill-de-alexa-con-python.md b/content/events/meetups/2021-01-28-haz-tu-primera-skill-de-alexa-con-python.md index d45dc1cc2..3631175b8 100644 --- a/content/events/meetups/2021-01-28-haz-tu-primera-skill-de-alexa-con-python.md +++ b/content/events/meetups/2021-01-28-haz-tu-primera-skill-de-alexa-con-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Haz tu primera skill de Alexa con Python" +title: "PyLadies BCN Workshop, January 2021" date: 2021-01-28 year: 2021 # The export records this event as ONLINE, so it had no room. diff --git a/content/events/meetups/2021-04-27-get-rid-of-matlab-struggling-process-from-matlab-to-python.md b/content/events/meetups/2021-04-27-get-rid-of-matlab-struggling-process-from-matlab-to-python.md index 8599854bf..4bbcdb186 100644 --- a/content/events/meetups/2021-04-27-get-rid-of-matlab-struggling-process-from-matlab-to-python.md +++ b/content/events/meetups/2021-04-27-get-rid-of-matlab-struggling-process-from-matlab-to-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Get rid of Matlab! (struggling process from Matlab to Python)" +title: "PyLadies BCN Workshop, April 2021" date: 2021-04-27 year: 2021 # The export records this event as ONLINE, so it had no room. diff --git a/content/events/meetups/2021-05-25-home-and-cleaning-automation-with-microcontrollers-and.md b/content/events/meetups/2021-05-25-home-and-cleaning-automation-with-microcontrollers-and.md index ec54755e0..23eda8239 100644 --- a/content/events/meetups/2021-05-25-home-and-cleaning-automation-with-microcontrollers-and.md +++ b/content/events/meetups/2021-05-25-home-and-cleaning-automation-with-microcontrollers-and.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Home and cleaning automation with Microcontrollers and CircuitPython" +title: "PyLadies BCN Workshop, May 2021" date: 2021-05-25 year: 2021 # The export records this event as ONLINE, so it had no room. diff --git a/content/events/meetups/2021-06-29-build-your-first-webpage-with-django.md b/content/events/meetups/2021-06-29-build-your-first-webpage-with-django.md index 59e2b6942..0eb8e1236 100644 --- a/content/events/meetups/2021-06-29-build-your-first-webpage-with-django.md +++ b/content/events/meetups/2021-06-29-build-your-first-webpage-with-django.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Build your first webpage with Django" +title: "PyLadies BCN Workshop, June 2021" date: 2021-06-29 year: 2021 # The export records this event as ONLINE, so it had no room. diff --git a/content/events/meetups/2021-10-26-how-we-built-our-experimentation-framework-with-python.md b/content/events/meetups/2021-10-26-how-we-built-our-experimentation-framework-with-python.md index d68e35855..90c79d225 100644 --- a/content/events/meetups/2021-10-26-how-we-built-our-experimentation-framework-with-python.md +++ b/content/events/meetups/2021-10-26-how-we-built-our-experimentation-framework-with-python.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "How we built our experimentation framework with Python" +title: "PyLadies BCN Workshop, October 2021" date: 2021-10-26 year: 2021 # The export records this event as ONLINE, so it had no room. diff --git a/content/events/meetups/2022-02-22-introduction-to-apache-airflow-author-schedule-and-monitor.md b/content/events/meetups/2022-02-22-introduction-to-apache-airflow-author-schedule-and-monitor.md index c9e4c1268..dd4562e0a 100644 --- a/content/events/meetups/2022-02-22-introduction-to-apache-airflow-author-schedule-and-monitor.md +++ b/content/events/meetups/2022-02-22-introduction-to-apache-airflow-author-schedule-and-monitor.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Introduction to Apache Airflow: author, schedule and monitor workflows" +title: "PyLadies BCN Workshop, February 2022" date: 2022-02-22 year: 2022 venue: "Canòdrom - Ateneu d'Innovació Digital i Democràtica" diff --git a/content/events/meetups/2022-03-29-data-analysis-with-pandas-and-dash.md b/content/events/meetups/2022-03-29-data-analysis-with-pandas-and-dash.md index e36a5952b..397f5b9ec 100644 --- a/content/events/meetups/2022-03-29-data-analysis-with-pandas-and-dash.md +++ b/content/events/meetups/2022-03-29-data-analysis-with-pandas-and-dash.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Data Analysis with Pandas and Dash +title: "PyLadies BCN Workshop, March 2022" date: 2022-03-29 year: 2022 venue: Canòdrom - Ateneu d'Innovació Digital i Democràtica diff --git a/content/events/meetups/2022-05-05-outreachy-internships-in-open-source-software.md b/content/events/meetups/2022-05-05-outreachy-internships-in-open-source-software.md index 864a04a9e..676a5b3f1 100644 --- a/content/events/meetups/2022-05-05-outreachy-internships-in-open-source-software.md +++ b/content/events/meetups/2022-05-05-outreachy-internships-in-open-source-software.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Outreachy: internships in open source software" +title: "PyLadies BCN Workshop, May 2022" date: 2022-05-05 year: 2022 venue: "Canòdrom - Ateneu d'Innovació Digital i Democràtica" diff --git a/content/events/meetups/2022-06-17-quantum-computing-for-everyone-with-qiskit.md b/content/events/meetups/2022-06-17-quantum-computing-for-everyone-with-qiskit.md index 77af90827..f1f4a72ff 100644 --- a/content/events/meetups/2022-06-17-quantum-computing-for-everyone-with-qiskit.md +++ b/content/events/meetups/2022-06-17-quantum-computing-for-everyone-with-qiskit.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: Quantum computing for everyone with Qiskit +title: "PyLadies BCN Workshop, June 2022" date: 2022-06-17 year: 2022 venue: Mundimoto diff --git a/content/events/meetups/2022-09-28-python-for-technical-interviews-tips-tricks.md b/content/events/meetups/2022-09-28-python-for-technical-interviews-tips-tricks.md index ba2084b2b..eadc3ea87 100644 --- a/content/events/meetups/2022-09-28-python-for-technical-interviews-tips-tricks.md +++ b/content/events/meetups/2022-09-28-python-for-technical-interviews-tips-tricks.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Python for technical interviews. Tips & tricks" +title: "PyLadies BCN Workshop, September 2022" date: 2022-09-28 year: 2022 venue: "Happy Scribe - Servicios de transcripcion" diff --git a/content/events/meetups/2022-10-05-first-steps-to-open-source-with-hacktoberfest-2022.md b/content/events/meetups/2022-10-05-first-steps-to-open-source-with-hacktoberfest-2022.md index 85775e19b..0f68f89d3 100644 --- a/content/events/meetups/2022-10-05-first-steps-to-open-source-with-hacktoberfest-2022.md +++ b/content/events/meetups/2022-10-05-first-steps-to-open-source-with-hacktoberfest-2022.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: First steps to open source with Hacktoberfest 2022 +title: "PyLadies BCN Workshop, October 2022" date: 2022-10-05 year: 2022 venue: Canòdrom - Ateneu d'Innovació Digital i Democràtica diff --git a/content/events/meetups/2022-12-21-micropython-python-for-new-and-intermediate-makers.md b/content/events/meetups/2022-12-21-micropython-python-for-new-and-intermediate-makers.md index 872238788..8060bf392 100644 --- a/content/events/meetups/2022-12-21-micropython-python-for-new-and-intermediate-makers.md +++ b/content/events/meetups/2022-12-21-micropython-python-for-new-and-intermediate-makers.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: 'Micropython: Python for new and intermediate makers' +title: "PyLadies BCN Workshop, December 2022" date: 2022-12-21 year: 2022 venue: Canòdrom - Ateneu d'Innovació Digital i Democràtica diff --git a/content/events/meetups/2023-05-23-fast-and-fun-computer-vision-train-your-image.md b/content/events/meetups/2023-05-23-fast-and-fun-computer-vision-train-your-image.md index fe431d806..735b3e11b 100644 --- a/content/events/meetups/2023-05-23-fast-and-fun-computer-vision-train-your-image.md +++ b/content/events/meetups/2023-05-23-fast-and-fun-computer-vision-train-your-image.md @@ -5,7 +5,7 @@ # to the export or to the script, never here. The Meetup description is # the logistics of signing up and is not published, and the talks it # announces arrive separately. See content/events/meetups/_index.md. -title: "Fast and Fun Computer Vision: Train Your Image Classification Model in Minutes!" +title: "PyLadies BCN Workshop, May 2023" date: 2023-05-23 year: 2023 venue: "Canòdrom - Ateneu d'Innovació Digital i Democràtica" diff --git a/content/events/other_events/django_pyladies_2022.md b/content/events/other_events/django_pyladies_2022.md index ae80a5537..95ab8d366 100644 --- a/content/events/other_events/django_pyladies_2022.md +++ b/content/events/other_events/django_pyladies_2022.md @@ -15,6 +15,13 @@ heroBackground: /images/photos/django_pyladies_2022/header.jpg layout: event +# The group that ran the day, which is what decides the marker of its row +# on /events/ and on /talks/ (data/event_emoji.yaml through +# partials/event_type.html). Without it the page took the "Other event" +# glyph, because the rule reads this field and the title writes +# "PyLadiesBCN" with no space. +group: "PyLadies BCN" + content_columns: 5 carousel_columns: 7 @@ -219,6 +226,12 @@ agenda: # closing session of the 11th: the same room, the same screen, and the same # speaker as photo 1. The search ran to the 13th for them, and it found no # photo at all on the 12th, so no other event of that weekend is in this set. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: django-2022/09-thanks-for-attending-it-s-been-great.jpg + photos: thread: "https://x.com/PyBCN/status/1535567826257420288" items: diff --git a/content/events/other_events/pydata_2017_barcelona.md b/content/events/other_events/pydata_2017_barcelona.md index b81fc4ccc..633835522 100644 --- a/content/events/other_events/pydata_2017_barcelona.md +++ b/content/events/other_events/pydata_2017_barcelona.md @@ -741,6 +741,12 @@ talks: links: - type: slides url: https://github.com/jtorrents/pydata_bcn_NetworkX +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: group-pydata-2017.jpg + photos: thread: https://x.com/PyBCN/status/865470914107891717 items: diff --git a/content/events/pydatabcn/pydatabcn_2023.md b/content/events/pydatabcn/pydatabcn_2023.md index fe906d502..1fa25e933 100644 --- a/content/events/pydatabcn/pydatabcn_2023.md +++ b/content/events/pydatabcn/pydatabcn_2023.md @@ -366,6 +366,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pydata-2023/25-nataliasirera-the-pydatabcn-2023-has-been-incredib.jpg + photos: thread: "https://x.com/PyBCN/status/1667433149322735616" items: diff --git a/content/events/pyday_bcn/pyday_bcn_2016.md b/content/events/pyday_bcn/pyday_bcn_2016.md index 05f5ccefc..390ec23a4 100644 --- a/content/events/pyday_bcn/pyday_bcn_2016.md +++ b/content/events/pyday_bcn/pyday_bcn_2016.md @@ -76,6 +76,21 @@ sponsor_levels: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +# +# This one is the full lecture hall of the Universitat de Barcelona, facing +# the camera. It is not in the thread of @PyBCN: @PyLadiesBCN published it +# on 2016-09-15 at 17:20 UTC, "And this is happing now in Barcelona +# #PyDayBCN16 @pybcn", as the second of its two photographs, +# https://x.com/PyLadiesBCN/status/776470703289802752/photo/2. It is the +# canonical photo over people-pyday-2016.jpg, which is the cloister at +# the door. Stored at 1600px wide, the size the other chosen pictures of +# images/photos/ are kept at. +canonical_photo: group-pyday-2016.jpg + photos: thread: "https://x.com/PyBCN/status/776469200915337217" items: diff --git a/content/events/pyday_bcn/pyday_bcn_2018.md b/content/events/pyday_bcn/pyday_bcn_2018.md index e08de84b2..c44e1a9d8 100644 --- a/content/events/pyday_bcn/pyday_bcn_2018.md +++ b/content/events/pyday_bcn/pyday_bcn_2018.md @@ -217,6 +217,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2018/03-full-room-the-100-tickets-were-over-in-less-than-t.jpg + photos: date: 2018-11-24 thread: "https://x.com/PyBCN/status/1066253610957324288" @@ -296,6 +302,21 @@ photos: # The index of sections in the sidebar, like every other edition. layout: event + +# The sponsors of the day, with the two levels the site of 2018 published, +# static/archives/pybcn.org/pyday-bcn-2018/. The page used to carry them as +# the HTML of that frozen page pasted into its body: six img tags straight +# from the archive, each with its own height written in a style attribute, +# 150px for one logo and 80px for another. They read as a row of mismatched +# pictures next to the cards of every other edition. As levels they go through partials/sponsors-grid.html and +# take the same card as the rest. +sponsor_levels: + - sponsors_per_line: 2 + sponsors: [kiwi, onna] + name: Platinum + - sponsors_per_line: 4 + sponsors: [kernel-analytics, travelperk, kschool, psf] + name: Gold ---

We are excited and glad to announce that we are organizing the second edition of PyDay in Barcelona! @@ -496,12 +517,3 @@ Get the workshop materialsscikit-learn

  • spacy (with Spanish model installed)
  • -

    Sponsors

    -

    Platinum

    -

    Kiwicom logo -Onna logo

    -

    Gold

    -

    Kernel Analytics logo -TravelPerk logo -KSchool logo -Python Software Foundation logo

    diff --git a/content/events/pyday_bcn/pyday_bcn_2019.md b/content/events/pyday_bcn/pyday_bcn_2019.md index 55ddbcf8b..fd3c3f0d8 100644 --- a/content/events/pyday_bcn/pyday_bcn_2019.md +++ b/content/events/pyday_bcn/pyday_bcn_2019.md @@ -22,6 +22,31 @@ heroBackground: /images/photos/people-pyday-2019.jpg # are still on single.html and still have no index. layout: event +# The sponsors of the day, with the five levels the site of 2019 published, +# static/archives/pybcn.org/pyday-bcn-2019/. The page used to carry them as +# the HTML of that frozen page pasted into its body: nineteen img tags +# straight from the archive, each with its own width written in a style +# attribute, from 350px for one logo to 70px for another, inside
    +# tags. They read as a wall of mismatched pictures next to the cards of +# every other edition, as the page of 2018 did. As levels they go through +# partials/sponsors-grid.html and take the same card as the rest. +sponsor_levels: + - sponsors_per_line: 2 + sponsors: [ub, psf] + name: Venue + - sponsors_per_line: 3 + sponsors: [upcloud, kiwi, invisiblebits, chartboost, king, qustodio] + name: Platinum + - sponsors_per_line: 1 + sponsors: [affectv] + name: Coffee Sponsor + - sponsors_per_line: 4 + sponsors: [thoughtworks, bmat, holaluz, travelperk, elastic, verse, fundacion-ci] + name: Gold + - sponsors_per_line: 3 + sponsors: [kschool, satellogic, blueliv] + name: Silver + # The programme of this edition, read from the printed agenda that the live # thread on X photographed (tweet 1195637939285430272, the photo on this page). # The Google Calendar embed that held it is gone, and the Meetup description @@ -37,8 +62,9 @@ layout: event talks: # The two keynotes. The printed sheets announce the opening one in all three # tracks and give it no title, and the closing one is not on them at all: the - # thread tweeted it at 20:03, well after the 18:30 the sheets end at. David - # Arcos supplied both titles, which is why they are plain and not quoted. + # thread tweeted it at 20:03, well after the 18:30 the sheets end at. Both + # titles come from the thread and not from a printed source, which is + # why they are plain and not quoted. - id: opening-keynote title: "Opening keynote" speakers: [laura-perez-mayos] @@ -238,14 +264,18 @@ agenda: 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. +# caption, and the caption is also the alt text. PyBCN organisers took them. +# The page credits the account that published them, which is the part the +# post itself proves. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2019/21-finally-our-gratitude-to-the-python-barcelona-comm.jpg + 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. + date: 2019-11-16 album: "https://drive.google.com/drive/folders/1kODXtBARnTbZmQwVW1Qx2EvBCDSqhZjX?usp=sharing" items: - file: pyday-2019/01-the-pydaybcn-just-started-keynote-by-our-president.jpg @@ -310,6 +340,10 @@ photos: 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/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" - 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" @@ -334,10 +368,10 @@ photos: 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" + - file: pyday_bcn_2019/22-thanks-to-all-the-sponsors-speakers-volunteers-coa.webp + caption: "Thanks to all the sponsors, speakers, volunteers, coaches, organizers and assistants! Without you, the #PyDayBCN would not be possible 👏 Remember to send proposals: https://pybcn.org/call-for-proposals/ And become a member: https://pybcn.org/association/become-a-member/ And follow @PyBCN! Thanks 👏👏" + source: "https://x.com/PyBCN/status/1195780662810304512" + time: "20:08" ---

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

    Archived content

    @@ -357,36 +391,3 @@ photos: {{< google-embed kind="calendar" height="600" title="Agenda of PyDay BCN 2019" src="https://calendar.google.com/calendar/embed?height=600&wkst=1&bgcolor=%23ffffff&ctz=Europe%2FMadrid&mode=AGENDA&showNav=0&showDate=0&showTabs=0&showCalendars=0&showTz=1&src=eTEway53c19pdWMxYW00c2Y5c3V2NGtqcjV0YXZuYzEzY0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t&color=%23F09300&title=Agenda%20del%20evento&showTitle=0" >}} -

    Sponsors

    -

    Venue

    -
    -Universitat de Barcelona logo -Python Software Foundation logo -

    Platinum

    -
    -UpCloud logo -Kiwi.com logo -Invisible Bits logo -Chartboost logo -King logo -Qustodio logo -

    Coffee Sponsor

    -
    -Affectv logo -

    Gold

    -
    -ThoughtWorks logo -BMAT logo -Holaluz logo -
    -TravelPerk logo -Elastic logo -Verse logo -
    -Fundación Cibervoluntarios logo -

    Silver

    -
    -KSchool logo -Satellogic logo -Blueliv logo -
    diff --git a/content/events/pyday_bcn/pyday_bcn_2021.md b/content/events/pyday_bcn/pyday_bcn_2021.md index dd415da70..b8e262f3d 100644 --- a/content/events/pyday_bcn/pyday_bcn_2021.md +++ b/content/events/pyday_bcn/pyday_bcn_2021.md @@ -415,6 +415,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2021/25-say-cheese.jpg + photos: thread: "https://x.com/PyBCN/status/1464506413720420352" items: @@ -486,7 +492,7 @@ photos: 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 + - file: pyday-2021/16-at-the-end-of-each-talk-please-use-the-post-its-to.webp 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" diff --git a/content/events/pyday_bcn/pyday_bcn_2022.md b/content/events/pyday_bcn/pyday_bcn_2022.md index 0cc0800f5..faf8f8ba1 100644 --- a/content/events/pyday_bcn/pyday_bcn_2022.md +++ b/content/events/pyday_bcn/pyday_bcn_2022.md @@ -380,6 +380,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2022/32-thank-you-all-for-attending-the-pydaybcn.jpg + photos: thread: "https://x.com/PyBCN/status/1596420421569908741" items: diff --git a/content/events/pyday_bcn/pyday_bcn_2023.md b/content/events/pyday_bcn/pyday_bcn_2023.md index dc7626335..5797cebed 100644 --- a/content/events/pyday_bcn/pyday_bcn_2023.md +++ b/content/events/pyday_bcn/pyday_bcn_2023.md @@ -377,6 +377,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2023/33-thank-you-for-the-pydaybcn.jpg + photos: thread: "https://x.com/PyBCN/status/1723274179888230446" items: diff --git a/content/events/pyday_bcn/pyday_bcn_2024.md b/content/events/pyday_bcn/pyday_bcn_2024.md index 770e4be5f..e113d8567 100644 --- a/content/events/pyday_bcn/pyday_bcn_2024.md +++ b/content/events/pyday_bcn/pyday_bcn_2024.md @@ -420,6 +420,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2024/01-thanks-for-attending-the-pydaybcn-2024-see-you-nex.jpg + photos: thread: "https://x.com/PyBCN/status/1855180142240272592" items: diff --git a/content/events/pyday_bcn/pyday_bcn_2025.md b/content/events/pyday_bcn/pyday_bcn_2025.md index 50e8b9dfc..9f1c0635b 100644 --- a/content/events/pyday_bcn/pyday_bcn_2025.md +++ b/content/events/pyday_bcn/pyday_bcn_2025.md @@ -6,6 +6,13 @@ year: 2025 date: 2025-11-29 # The venue of this edition, from the room names and the hero image of this page: this edition sold tickets on Eventbrite and was never a Meetup event. venue: "Canòdrom" +# How many people came. Not a registration: this edition sold its tickets +# on Eventbrite, so there is no RSVP count, and the number is the one the +# association counted and published the day after, in the post that closes +# the thread of the day: "The #PyDayBCN 2025 was a success! 140 +# attendants, 16 workshops, many lightning talks, and hundreds of +# coffees!", https://x.com/PyBCN/status/1995426809425613242. +attendees: 140 description: "For the community, by the community!" menu: main: @@ -527,6 +534,12 @@ agenda: # 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. +# The one photo of this day: the group photo when the day has one, and the +# picture that says most about it when it does not. It is what the carousel +# of the home page shows, one slide per event. See +# partials/canonical_photos.html. +canonical_photo: pyday-2025/02-the-pydaybcn-2025-was-a-success-140-attendants-16.jpg + photos: thread: "https://x.com/PyBCN/status/1994662616132673581" items: diff --git a/content/pybcn_association/information.md b/content/pybcn_association/information.md index 95ba205cd..33d4f366b 100644 --- a/content/pybcn_association/information.md +++ b/content/pybcn_association/information.md @@ -56,14 +56,14 @@ All the work groups must follow some rules: * [Internal Regulations](https://docs.google.com/document/d/1xd36jkdcT3s3zGjNrSMnGuuk5xgodAos2fLDyJMLE30/edit?usp=sharing) * [Code of Conduct](/pybcn_association/coc/) * [Founding Act](https://docs.google.com/document/d/1_fTbgT-Bw25aaGLb9O9vCMi1Gkxhb3FiY-S7yeZLq6k/edit?usp=sharing) -* [Assamblea General Ordinària 2019](https://docs.google.com/document/d/1mJuuoymGJe4ayO5y08yN0bHBSqrPPyRZW2QLQSXXuYg/edit?usp=sharing) -* [Assamblea General Ordinària 2020](https://docs.google.com/document/d/1yLR9p_vDKZPs0NlVMaKtrBMooqHdDyY0Lk5cPmcGs5I/edit?usp=sharing) -* [Assamblea General Ordinària 2021](https://docs.google.com/document/d/1Qi0efxdC7T2bk2oVT2z6tTrrJ3UONwCK3Vnf3cL4KFA/edit?usp=sharing) -* [Assamblea General Ordinària 2022](https://docs.google.com/document/d/13xiLuUGIzT8kyZWGTkA6T-dbUO7Y_Z6hlUjakkwlSGM/edit?usp=sharing) -* [Assamblea General Ordinària 2023](https://docs.google.com/document/d/1CnJzGjz7COsc-45w5tEVu5gpDBv1mUozFh4eGXw8-GU/edit?usp=sharing) -* [Assamblea General Ordinària 2024](https://docs.google.com/document/d/1IDYEQvStyM8YxQHIcmZbfE0SYePDGDavHssz3CG3d1E/edit?usp=share_link) -* [Assamblea Extraordinària 2025](https://docs.google.com/document/d/12BHpSCe7yOdgdm7JiuzKxT_RNKyxHN18R9p0_1rCWl4/edit?usp=share_link) -* [Assamblea General Ordinària 2026](https://docs.google.com/document/d/1Yx_4OMf3TkUDrI4MT3FD4NWm0y-3mSh32krX5F1RqMY/edit?usp=sharing) + +## Assemblies + +Once a year the association meets its members, renders its accounts, and +writes down what was agreed. The minutes are below, newest first, with the +photograph of the day where the association published one. + +{{< assemblies >}} ## Past Management Boards * Management Board 2018 - 2025 diff --git a/content/pybcn_association/legal-notice.md b/content/pybcn_association/legal-notice.md index 6707346fa..f0eda4875 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, and the page of a recorded talk embeds its video in a YouTube player (youtube-nocookie.com); those frames 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, the page of a recorded session, the page of a speaker, and the home page embed 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. diff --git a/content/pybcn_association/organizers.md b/content/pybcn_association/organizers.md index 7bf2178e5..b636826dc 100644 --- a/content/pybcn_association/organizers.md +++ b/content/pybcn_association/organizers.md @@ -18,10 +18,16 @@ people_levels: - people_per_line: 5 people: [jordi-bosch, daniel-mesejo-leon, yago-tafalla, mauricio-volcanes, sergi-ramirez] name: Management Board (2026) + # The faces the home page shows, which are the two bodies that + # run the association. + home_faces: true - people_per_line: 6 people: [alberto-camara, david-arcos, ignasi-fosch, natalia-padilla, alicia-morales-carrasco, ferran-jovell] name: Permanent Committee - - people_per_line: 4 + home_faces: true + # Six on a line, so the eight read as the two rows of a group and not + # as two rows of four with a gap. + - people_per_line: 6 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 diff --git a/content/pybcn_association/privacy-policy.md b/content/pybcn_association/privacy-policy.md index 81089c399..d77b5b1be 100644 --- a/content/pybcn_association/privacy-policy.md +++ b/content/pybcn_association/privacy-policy.md @@ -63,9 +63,9 @@ Our contact addresses, such as pybcn@googlegroups.com and pyladies-bcn@googlegro 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: +Some pages embed a video in a frame from **youtube-nocookie.com**, the YouTube player Google serves for sites that do not want it to set cookies. Four kinds of page carry one: the page of a talk that was recorded, one frame per talk; the page of a meetup whose session was recorded as a whole, one frame per recording; the page of a person, one frame per recorded talk they gave; and the home page, which plays the presentation of the Barcelona community at PyConES 2020. No other page has one: the lists of events, talks, and people, and the programme of an event, 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. +- When you open one of those pages and scroll near a video, your browser asks Google for the player. Google then sees your IP address and browser details, and that you opened that 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. diff --git a/content/pyladies_bcn/sponsors.md b/content/pyladies_bcn/sponsors.md index 1e70cc795..c747921aa 100644 --- a/content/pyladies_bcn/sponsors.md +++ b/content/pyladies_bcn/sponsors.md @@ -13,4 +13,4 @@ sponsor_levels: sponsors: [backmarket, canodrom, codeop, digitalfems, europython_society, holaluz, kiwi, letgo, marfeel, mundimoto, orpheus, psf, rover, tecnologas, travelperk, verse, ub, upf] --- -Lorem ipsum +These organizations have sponsored a PyLadies BCN activity: a workshop, a meetup, or the PyLadies track of a PyDay BCN. The whole list of the association is on the [Sponsors](/sponsors/) page. diff --git a/themes/pybcn_theme/assets/images/photos/assemblies/2019.webp b/themes/pybcn_theme/assets/images/photos/assemblies/2019.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2a60af338db018d997476799dea41c111062435 GIT binary patch literal 29492 zcmV(lK=i*-Nk&F2a{vHWMM6+kP&gnUa{vI42Lhb|Dp&$x0X|_WkwzpUp{Jt8~*rMw6N?xfpm{H;v{8$v#*Hd&Qo^)OO=PIo@bJ4qaM4h5a-(o_x*4 z-%Ni+{u}(~tA1zwTl{}Azn%Vq$p1G!is~u(pZ7mS7?8M|;xEbgKWl~K|6r~xnh1F` zcsKno)NJu>Z1?N%b2#7aOGRTpGezcMpBirNqO;5JKWuV(hq%Eu?p!*zZb?|@Z-^YN z(rHv$m(J&8p|cAmOswumBdInlqb)TBt=#n>Mlx5uE4U1MLX31&HV0>JuX!Xy<|TN3 zOp^fI)eP#%HJ8v6KH_rn;5(%^Z7qZ>*;f+vrkyM42jJGBFI#L@s8&hU*az`$=HU!y zB$&bmx73T$g@Fnk;l7huH9|@Sd%_A)E73qr`mZrMK9;l2$A<>tBZj?Y z#UgG*!*UOrlXVhp0zZ0uORW+eFh`dadwnryMfinAsP{>g^-Zof4=p}0%?s0v$2c^) z5&vDr&pg$Hb)EjB-jasObobzcD+XU@u&u^xdZ!aTMx~uQezPvG&bOcgFy_J}cdF~E zq>IZ_l(btVoK9-m?hM@n?lZvzE>IH7GmUaO zBwi9z(`+BL1qtGI!dK1@cM|W7>XWZE?&X~7ax;rL#)#T-{!k#f5_R`%MP<76$OFc( z|48p`hK}jY{FSWt{TVJ48oLSy=ywme&)_+V~@bRK#h^?8MXZf1CV!vF*xT=r} zGR{x73M7MksadSKx<*)5?ME3#sFV#V`sJv}<^kHj8CNSLv8DPeh)Ikt+Y@jNrDd@7 zrDgN~#TGKR`?o&Zn58whyn8>XT|m{l>R}Wxxkei}m1X%pdc$;&|DBUvapKh3tDM+9 zL(036`%T*WgC#J2P$R+*?R6t)O<#*`B>$jPnRJqB@OsXEZ}c6VFwXufLlfQpcL&H^O!zt2?A04?epLH zYTb#q4SwAM-Rx#RI0(S{M*$M4Gla2d?ueJ|2XGg+nAfzXHX{16<&!oYv4L_EUU8bJ zc#3rn`eG?fsAo>&~chimcGOp z%OLtO!ZDU(kDEx{Ewop6zWaQz>z9mHuK+%3`u-05KOjQ0F*1P4CAE-}9JU^kjP;|f zlO!7@uli9Z1X8$a)iPYC%yCs={kB4^6HBfXZIKIVtAgs8?fWN3>cGQGpD!3H#e8vC z^=bb8J_FY8Vv|bDe=UL&jjT+ByYbq}ZA3DYL)Q@l<)d5)pNnfiRFQNjcS#1a`O#6p zX`Ex>;;W!bnk~Uii25$O8rqy?43a5`%-oY zxvsd?p_%NMw?QV*=Ek_;AkG%U?I445d-4``Cu?LK?OdTdc^V!M*@E6IwC&z8kQC;W z=MuGmx(9N-N{-wTqh)6Y{2wcB5$bH!eWV?)YUC7gVuaBA!eP<3A%&T-v(4ys+fZfk z6pd{+U20M>Hb+lPBeA)7pP9E0FBjn`TSP%@OY=G8@o4m7r|b~1t5=ei32$b@O)fup z?e*xr8g~6JVX*q~*tPD)bef8Pp_BgFgKpUPGv~j8W2x=P4+$)7?stoPUS~|tDbAIq zg}T1Y;FXbRv}=59%>!c+IZb(KXjEVumelOi5cAR-l=?jG!9YFjCe#G&+xS-@G$D4p z@-M^<2*wrrf1_eZZT93f?jX0vXj|%dk&S5y*GvRw?8c zjjZT#<|bEzSBp-R_!0y^%|p?slKK56w;Tv)9JN$+X3aOXCU?J7v=jpwSW1ZLq{X-f zw)Y~s2NZ^!kmr=v%*L8yXzo*YSheS)`R@65?HdQnlCFNWmqt{9g8k(1h5$*_j&c=X z^!wLJHOJ8~-WMt`O}>>q%pAzul#6_>>YyvsE%NDq1`{f*)^3TGjIQ2zV#-;($jxEV zB`cBb7BJMU3L`R;oqgJ^wVl6@2y8KA7bI)Yt_<1={7+ef(Scl#RKGcI!X*^!8vn2P z8AyeQ)#Io*>lDhZa6S1|3-18fwr4ectWueS>JpAqn+o6(Ao*w4(99CQJ1n6?3$1ulchbmh5`) z-dTMS)q9!?h;C$L^8ONXlel5HDO^s!)lYGHnqH2>AaX0hxA*{txxSx3Y)C8)I<=D_ z6f8*YKzWr;y05T8du2;%XVW%Q%se(U%3Ve+WY}bR>{w#W%3d6la^R zzgYQpe3UE(ScyNVx0z%4Ngv%IcqqwdN?I?7HOoEJ^#ha^2dhL5Kd{`Jj)RbDcWwhm zlN{#%fw$F%C?zMDZl@@9)vhAwdyK?Jb-S61Pd?ca24TjMg-}~2Rpr`gZx+B7E=4Y$ zQ6|%$pam$=Vev`D1NsAm;D#r6a12)@h_V#x$h3$^b=3?2FZR(>pji0sPd1y^>J^-; zRxH*)5UYETzQXc#j+)hZr>ODvocSaNJ-{muoJ~$svn<@19qf6>N!)y1a64Q9`*U-F zS`f@pH5L6HH0NL4i%Be1q($cVM73ydo3diXt88aTFD^zC%MozszDQ!~ReV9C+aWpF z-8NmZ=2~NdY9Y+;n%vty*Y!i&DI@I9|B)-=Wgiyh@$%cB6CBe2Na0?_=%^h(fcg?H^PiDe%>uOd~7((QuF>RY!~s&8(Q%qK{}~( z)V~M*J7`0j!`p^+<1I6#qqHryI~qzD8oL3DW`Ed}qHZ23d0FK!-%Jv(23z?mk&=$^ zj#cS@AdY9WzJuP7-oCxq{TtRfZC$)<8i0Doe!1ozQ4J;(Q_#yvCInTxV#Mihszhmc6#@@J)d=GzT z2DyYrtm|J0xB@J(=M5Xj3=DJ(xC$o?-(MueiRg%lvp&xb*d+%vy~c#KsuaeDV6+L1 zJCb6uNTlnx%X_9t^qwhJ%=yJ!;eNoDe+78i^zb69)+ugLG;$Ms^@il1rTdq)lu$&0 zjB$K*QSDCl-1Or4Y*&h0I|BjVQuv`g;{K+f?q!O_D2&BlR5h(BjokNHRcsi&Axc^geGgBvIZoL_Fputx2s$PJm( z;x$5I#b+O=9tgtyNtDt1H=Voy#v$=nUaB9MIRyX*F(=lGCIQ0XS z@1%E102}&rxDsk!?HDd*F8WVO8pN%?Kf08ea=po`@^4AZs2g2-`jwi(h3?sYss&r+9Y_a2Q1g}1 zkhhTjIOnVl%c`kgbB7P=QP+gwcv6^7a>htD;} zp}8LaKm9tYy&mtdfR0XBj;=?&8W>m)_A8=6~uUc&+o+%NX?V z`>vA}9MMu;N8B~D;jR)N;T+?w0et`$CF8Mq=S^>k3F7n0SHZu%qsQpH->O#c?x|c= z?Q<~*)f1Ay6qgA&Ak0p%L!X@GMP20tgvoEP@)<0+dN2px+U5cu_gQy$8wELEz$YV* zcK;gj8_YeOu{n7{K6PT|JqYb>BLW-7P^)5IbtsYzd$?y;^>~6lb+~X zwJtr{r@s8P-XSM*5L1*Uip=&s0 zNtcPGZ1St$Y2iL;O4+s(!7I6}Rjm0RByc5gDTr3K#*czH-2m8Nqpsa#Nh2&>n>7Vj z&Y8@rZ5t^p{8(t90Xy1lmNLK=GCF8kgH|xfkh*3l0RH*p6F2@S_hKRRZ%>A~_fWf|SSXnm0gZYnDRH+E-EkW+8nfD8XXB91B%!iA z$V9W3oH)dfqti!r(335_GrQv_#IMqvW3#fiuwD#EGT67v&JWNA3OWUD<4y} z5>AM5Xy)Ck5;6{QbQ#w`cH=Wyyqj(fF;P~bg`W3J!&xGYQjgj~*I2jNr9WYR4g2RZ z#WpdW$^Ut~ExZh^(%--@_uXVj#zcsD%F$Jj(s00>Lz)6&%H2UMoHV&!*+y|l8vyiV zJ_`u8$gBVoP-RX~QKGcbw!}l-NO}F}!G5Z+U9a{i3swqulZJV*$ujSPh%VxmxGWMZ z!!C}HCp`0f`C3qQCu`+$WO1QubxsGTCJA%In}un}CtI=N3|g?QsjHEUA&3L30fv?VS%n}btq!~{Yz)i&=B84a zmzl*w^56zB?h~p7>+Ivm^2*60+}}k3lKZtL}?_!ac-8SB6i zfJi8GSfykFP5t604Vu~BHOj9_V)KEctp%ilrwXmpb5PE@G#oX~_;#~oTc!O^dRG8r z0}VW%1b#OS_ZK@MU)(_>k4TZXHgihpenKA0*6n`4u{L1ldp`}WPn(M!iPV7Z**JTi>UH->k?;911NY4h6- z6GF_44zwbhF+a6(D(llNNKc(e2pUGA>+P;m%=FCG`<-$YyK2%msCPHFZyC0sJ;gnn z)fC?cTPm9!ZI7IJE5CXkvVpYd>6Jb78!8tqdq)WD(EZ;AVQjXR*#|DFR#l%0IvTGG zTPO_hYH0wUd^Ot6vMVQ153jUB zfORo<4ORd)b&>#W?#3xcNEuil3Q|CQU)6uq?^a7k4T(>N9c z8C!-m0u*R5&HAMoIjj@#(I%PT2Lzx`H(zo2oNEb7dffE{&g-zBqQ5H*=!^xd{PAgc zt>!k@6Jc5UeR>ephrXOCj-c>KL-*p=0OtnkF6$%@1n8zIp}TkcyO}ECO#nmMvsq~d zEJk*{I>&)>3%;$rdyM}R6u+tsLo^2B&KlloIRc6M>i|@q>}K zeB-cVuv3zNgZNU)Q!d@$ROZ0m5iu2Cl;{LDuwtWyak9FgND(3tI#S3;E^mkF4oBP% zQWrs&ZBHQ%*=bLNx{sn3g?jmxn@e8^Yj+*pe;g!}o?e&5?T-5n=oQQ27+hE5&P(}Y z-oAWOOlIrHIg8u(M{iIpgSMIyjzt}7>h$ zWq)qs=b}>`=}i(VeYOE35u()#h~E8@MjJ6P;*C+7aRIE_BW&lY037I$HAKw?pUO8E z$U9DuR6Z~h)PlY`VsSv?%=WJsiZx75*Lm*I*4;lEUmoEu!zkwPD+&1)1r(2;k5t_8 zG8k{$=+V=l!Y*b~KXAlwHSJ5?uy(oPJ$QS9chnOAvbi1|>4ATqM|98AJ==JFD1Bm1 z{7lR7eYo=G$Uj%%=FxCm`BPY;lDWWE?pNob2N#7 z&6FCD7I?m)lwGg!oyzbCpPL{j_GlgCezfK0^J6yXX=8y${PvR zCVGRHWP??j9+2Vu7N6X&GWACIMNg~Q#caaaX+_cU43Lp)c)p0_S{-%RURCg{U7c(1wScPqpFd;3H>R0h~hW z7IBr|mNGfuIzt#Roh=y6RXe(^78NEiT!8?$zZN1ACxjEp0#Ew7ol&AWcSckvn@FmD zcrj`n!SXaToo-38%8A>iwow^&<9;~4ibd7HJeP|?0Z*h!8TRHVWrC)BKg}8-+B-x- zOgvIRf&g0^DgRJfLE*FQRZlCWMoeLf*GhwGJ#$WUiphWU9LiztLoTJozF1rxnN}+u zK8;^&q(~YZj#jn2r<5GCr4|VE*`oEW#%#&+bMWmOJ@Ti|-5RJ+8$!-`ZO^0)HAe{K z_37Dykg4MwYyP|<;Xyuu5Mu`G4!77UcI_ytZrnf> z&=f77ljHMt+_J<%CSJfYf`}jM5@~m%nvj^u*)SPaYmSY5f3LRPFX)juK{V%RK z64?K<&7rnej8tMo=%QxLwZ=YqFs&b{*TzRi`+xc>ZpZ2$DX z9n@YhFD}T4HU<+iq3bLF+0n{JxfA5v2J0uK$LD*%X>RvgRhayLqFb zKBCw5 z!R`&IW9fa1ZQUcYH>)0txFUr4R){eiRv+2|%h?u7M4N~>PGFGE?|NkW!znip4OwrAd>EBru$H7x3Y}N; z;B%1L_cLnT_I>rQbMqAFmn3RqZox- zd&9YER>m`~o`TTpoW2MNxg1)R80gQXj=Y@fCL1zr`L4D7X&XIcTH2NC!547aZd2$+ zko`G`h#UTO2wCJ1K_bS4iC!j}WHCbUL{G0P%0u5jfL z?bE1ud%Z^U?*10R7UkuY4(ojY~xx z66)q-6T>|{3Q>gLr-V0bEm2YMzK$LoMbA3Cw8hlF&={f&nArzQFw%;^colD4Z2_cN z&G9`1kjznuMg;(BV2{=DpV@Oh!HSRUiJ%e8SF&+1mV|8zlOwO zFwPN^Q>8jW<{}SSJjxGUuKh*d8DF&MO#h$cI7>YRx0s*&wDAS}mIdLrQlfZC7%d># zG&x=V0s$u;fI6~L|BAEo;yZB2e(`W~>RV$SgrWz!moW0*RQ!Rpolk^qIeb#4X3MJU z?ib+&}vfsr>x6u%huh(RHb>C0D)MGDC%ur83a}FE;9_upX)_s;An*gd+?Jucd?vk#qkNxH0W93eT@$J}U3>DG- zGy~f?^-+2cPdQfvE0xz|C;WX@nqwG#*KoIB&^QWWpj|*zyr-RhJ-8=uroNxpl!8_Y zz=bYq!iP4GuAnBk^S(ael3&CcM1nq5kWauqj3YlHs-;&uI_@3icR)q+VALYGEOBWp3=8-TZ}u(_qA0Akuw>ObBZkpJ8A>s~r0I z|F&`B@SO!^4h#66>TWL5RaJEiSNCOQk)jQ)PG|IA0$}MW_}s)X1XZa;j=ikz%OZ;i zc;Na;gr93#LuLSbU1vz6QpVkLa&L4~+5!(Et*v;k=0^{0VUTsY_W{fD26V~D(LqGz zb}MYPrt18weQf`5Zc526Wv{u11mT@)nI-)$)T$vZvj) zmKi{=Uh+KgaEb@__ka8@p7l|d108C&Rx;r2tOc@ekj?NG3%Fk)M&BvJxOgUZHsVQ{ zydvi(1LJYG{Fc~pFRFW(s5W;zOXkZCw9NRDrfV{S9Z;?qKz>D!pP((ZnAW)3%qkD2h>1nW^#n->|3& z$(^#H->rZZXKNusmfFs4rRg?^@7g*nrBldI$6G9j;?HFqmEOhS;zpS$F%OPne|!#={sC? zRtes>N=2rO7)a$D60Yxli>d1oGpDg>n2P4LM`3FBWd4oCG=go+#3oFT!695n3vlmP zDVn5vqk>p1ifK-Rbe@1K0d~2vs_Hd;L8}?Dpuc^98V=l^m*jS>tFQ|>F5w5DomUB0 ziGy3ByepkaKUicT_#G1hZ|BMt#>vq4Uz2tsaX#;fX^t+f+`7Ykq<0HYZ{XlK7}buR zTGFm)e-3iDoj%0EP(*xgdY&^e-AC0p6w?JzrnS?UD5j8%+P8oWh6l=>_#}Iwjd9|; zh&k0bUJ~c8S?WcjL-opMwBBYMha3W>%(zW2qMMka;CLOV-TMc%F%O@>>$tA-J{ovV{_U?Wn8cBl-0IW z{>Gli9xFI@w%v3_L31;Mx)-)wl>Sq02Oqj$i_wCCkOac7yu{`XE`r+!%w@V|Lloo+ z85S2Ot$rK@!ejvGP>LdX-gRwrettz%y;n0ih#qRHba{@l;Zv0&07VU4*t%$2^p1YX z*~5z`Z?#@MV0=bU!PVca?qdfsfBASil0mI>|Htf zZI(kobmG1>%i#E&dUTW}p!U(nmRugmzD=hck|y}%n$#Quy<+~O2vjKlNBYbQzuqWO zCuy*-c9%m{Clk|q;A@dALggiKHLg9U=A!sVh^0r}jHu`68_Mkg%6$P%P^gFl1)!1r zV4MH>!BG;&TD00fY=`bPhAwZ{n-ijbBno*O7ZUP4ai{i4eVb|?M zcdz);pfg^Dyx$IbRM&H5iP2Q)tkm+63jA6gdED?QPwO#Ft#Z!E8jGvKWyW<+JOVQ( zMf2X8B7gh$F(}WFHhMxMJ3D`&jxFLZlbaT45;DumpBkT#Xt1S~znKsNKGND>FM3=T zRa8bs_~SqxhkyCtCqyC8JCii31PlaozOrafK#T^rIWqTg|5%?ly-F;c zXEy{W;Vp$6uX-_$i>xXLcmls%68eC90V3C+!C<}ogxD-4rNND=4Pt#X!~1XS$B~4c zJm?`;E^Ut+Ei_Gmqd*S5Vys>65Z5b))>)QWl%4 z2C(OD0)vlEAe->q-lVCl(p|z<@{}8|=Q2-W~j`K4}gVqB20!`M%08QG9}3&r2oQXx4+sfazEtce17ewRJg_1lfraC0E? ze#F-fwU)M=FB&cu0L#z)1DRLx>0;Ts02Q4k`RI;Y zmR{Q>?0NRwI6F5!G zWIm^%2HPzWx~o7U)kP#vd7&j6Z`3)_M&Emb?t^Z<7bT{COts1ZX%tk&JdFQY)uH5* zAomYa79Dw*A!1T(JX0`jqiq#=M9Nv#acb5gM*C)#CEc;3Sb>WVccUs+%V(u`6i;r5 zn=*L4J|s>!oybv*y0QDK$c0xU1Nq9BB*+K#@D=%BvO$@R3aaKEEo!p-EY`k26NpX8 z9HT=lWZrR&Z@Ccf$Xo}1RWqngnkY%TV^SJcOK%@JgSHIHH{|)4Zx%9Y(eH&0&D!~e zoIpA0&|2rQl3!QmP#y2%ZW>HpPT>a=gQ_<96+N(QY_D9>e+^sWc-}Y!n856yUElOB zv*&AGl-8`;oH$H(Pl#o%)acfdAiev$cTr_R+)#3P-IeK|lpiu%jN#Qa8f_euhd~`H zO1PnIH&~3a?W7lt19nLWB@njUH22QYg)-XC$Nzf^1W;%}(h}jPPM)ZYG#M_R(}_2( zg%m5$X(ZGs1et zm@xVm)}+sZfTK&Og96({OLP-~?(*BYVtvjo#h~aGgLd3&AV%oi3v9E=hLN?}Kau_7 z!&asNf21*H&d@nT%v7kAUZ_OqbfOnw@%IM75B=h z>JA}u51kSS)&eT}Zt(;@PTHw_od>$8_W8V}@?pj)QMUmB`GOGodzRn9_;G>uH3*q4 zUQKmLwM%7+7tjX~QA>xgVj5jj%UY_Kl%N@Ev-$yOnTm+sB?z^(S*+N&P+<$Ll%L&_ zz;0NMVY3RrP@74<%nrqZ5HiJwFlIfL$GFf3rLwVzMxS|B6591gVd(}NcB}-pz{!Yk zr3Bz@p!!ETUoMhgi?Y`J9cA8_?m|VbTbtB&6Og~RmiUQs80ESLpia@Yuw;olS2b#qZ$)Ou)jtIWW)tAM2*;JjJk2qqh?X~UYC{q^k1`P_@-;whha-WXD$bTm#KaI7lA z@mG}(=nh}|ipVJy%VUG6TdW96`|aW=+=VpDZs+WAiQ_&@le7Ku668>43zY0z5+Y_O z>!iQoAo{Sqz)EfMGgea=`geMn6uI*@n0Tea;HgK`XV+Ijtx*8W&`2bil{C@{*-1{A z>Ngc+RuW}JMl49qK-Ob~k3gN*gKu}fSwSfJ75)%%Kxvg$c@q$K*|3)B;X*>fHs@#e z;k9or^X5qflF{I>c8*mz7nFgOE}yb@md4l%VHyiI(H%m05F4o0B*l^@3zM-|H`+2t z6LG`|$8aAKYLeu|x;22v^=sw74KSVM2dlf`9~x5eE%3wb?wAUcx^0u)_a9M-rDG)) zfu$8KS;fTzzep_`&afR;X+(6aNN-nJfK?e&h zI!t}IIX3>P5P&l^Np7aLr(cpN-Z(ne=Dx!)>!n+_WNReeduh7=^C{eL?1S#IWqz*DV&UeR-JiDz`x_n7^wCAU_l|p&ZX412+- zPKU%ydavQH!>Z52p?s%DLvye3igb?&u|T7Uu2nsA;-`ZdJ~&277YOmGEN@KI3yD`q zG{lHAj3EItq?3SOpw3KT=bM3zD~JcxEMsxrtMV8^TX0Au6ap6^Ttjzjmzfg1wE2kPjYe;<-Dt&(O%k#oZ?5x%{cq#eedsJ>Y6;!v)Eg% zz4+lhd|IR3#xk_l6n>(w*_6cIaF_Z(dBGjOSVwUxTql_n8vPcR^^$= z!0P1>m}~lH)HSqd+fhrwzKAig(;p`on4`)CG0v{_n->f1mPrpHJvr#IfHxUU{NzA_ zlG_dh;IU?NmQOqD<@CQMtToQf=xevGVl>Z>=5^>jMSR9rmxn?R$fq%z1UdtVmZSpk z7sN-kkWxCQb-dJoI+vBBlHL=UEP*jw6qtshB>Fp6QExTBD!UY~^2+}H0m8Le0gtAh z6WzBuq9Xz$%RG^w&0{A7MXOten2TutpAY$2mY|g`QznYW7={!>fnVZqCqvs@BM5xO zybWL)(^zcM!|I9GlgfR(A|I%4MfafblDe)Ov|*ouu4ly4FisRJIci@Z|N2JHp`3-2 zJ0`S_P&cV;B66QWUaod~7o3|@$TX%@HUmU3?)B^;9Sdui%8p@K8!~+%=uBSvOXGIK z^*%+yA{zJN_#R`c3 zsXTbyMrFC=KcMl6RZpko-?FC%@qEya9ib*SNR};1-q6^;(pLdz?r=N!5o}M(&DB-YwtkUC85o`LF9{bi9_MsZVc2&u^TkBeBMeyD{~6?d-_Czt17o zx9hR&V7h&kQE~{dsl!=kfg>%!M#T*FoXptiXZO18lvum@L@Vmn_CMHWE-8(HSjidG zId+X_`P?N|WNw|uKNAFe%vO#pDOlz-&D1O4FK=~Y{;*S~*CsKgzL7vN?0(|n%aZYJ zZdQk`H@yAU+Gx(tpu5oyT{Je1za?%@XKYBrr3WZ9p%}l3>Wi|ske+LGyfptpAC*v+ zsc8ew>6iOxAVA*CnK+W9Zhdh=r&I@WSh_%#ahVyT5w)-PzQ@FHMa= zxk_K3--};~QJTVXe^}ce^7ROD`uB!1Gh$Ja?3&^7-!^HM!`Tq5qtjQJ%P`mdFkQ08 zOc8-tp|$!v0soI66wt+(3kiwdK!CqCzE)m(I>qMi_oto#K}o zc}p(X#{(&I&2oE2dwcHer6cyElScuu8;Nn60CUl_?~0zx)4p&hfhy1vUNS!vk#jab z;00KgpGlFlzdH}Xl%GJx`Qd>-6P~3ct;!~0>t^3=k-@e3`0?B=a-W#S}f9L>vn)L?3Qp9gL zD+a|^0vF2I-bMeGkpKjj_H_^(5z$y3B58yrwE-N=HF)3aTKb%>{L5|x2l`D+Q7UX& zRS%6-L-+HR%6>8U9*tr6dCWSZ1IJPYm2arik_gbGEa-al>M+m-(4V+rzcbX)*5jAT z5E=JRV9)8t#0}UEKyE=4O#830JVG?o5OaZRqB25TuT1t-K#@aOS3~I*I^3>+C#eY2O8TK_8OoxY%>bK_K`W zdYjB zosNy&^PcIBL=w-lCR&)Nw*Dn$xj$4uPsNXNL|Gv5!`3g!qbOe23WR5z?IQVxT>&7m z1UjoQQq`a3*yBI@PQWon*h(5u5#=v%^phWDw7`4&aJ{WOh~3HO96toAXG2tSQT_QGJ+( zkbY8lxGKmuYmLcmi$HtH03k7vEvh76DRT+;e4mVEHLmDPpLaqkNm7^DfI{8_zT^%^ zDR#vaXxOdqK4y1E9jkG&@7(kfSxYIO6hP~D_^A#|dJVeeJOV|Udd~{QfFzBeyy%6q^5#cZ(KL_K-e6IfUv=n*%}=a_6V(A$ql`7-O+7iOPf zM1yDP&*LS%Zf`?hm#xD-8nfO)6zP(~bKjN_PDXy}_QpEW(M6r_{vDN|GjhC*;VAu( z;a6x5r(48>6(lE3F?Vl?*a1@s%&P$B>VIHqFH1)Y14cOwVAGpmCON1lY2cki0qVh^ z1`(>Up!~3kd)hsuH9BaoDF$LP>cNR+;1o?P%;niE%H>b$q~tI;^Qt>X)FD$`TUM_8 z$fiyUE|cL?`gy#o9l_&yNBI;U!BjzE_uk=@=w=FA5-ZEXL&SDjq!O{lDqcm#TS*NN zDEDBv+z3&*@uUuO@N4$*&f0R(`?^la1UOIV=(6+^j@;!w?~87hf^-@vhJSEO##wNjpS%uutda<7+%XSo=(F9vJ_O;=*B9? zHJts|eU5n4bFMS(05agORT+*XpPlZ0V`O>2fL>5WEOu{+;bj-@?kM~&)t+K!LQ76d*4_LQ!TD;7+ZYY zVqudaz-O7f>e%2Gv}xs|7;rY)mzPX!EW0DP<7QSW8450Nmfx{BcKS#ko}(frQ!+f5N~$$-)7DiWf*9254~xLs|=|JX>1zj z#bAM3kN<)#zw?%%;DJPjpkz95BkJ!;SDT0Ub>9M6@TOasBnaqGBa+W9BFXD2t~`~B zZc{CA9dJbMUj&)MAVoSd)6wRz1~T)y{h2|gn%>r%vl3`vjb_f7g>KOE7qaky$QRFs zK1pZ+bL?Ig5JL%!XdO7L;c_(w17kY4HNQ;W(_dVqm0uC^{6hwIWY;D$^|T^$Zxz1< z?`9k*adm(#8l}XEC8{32l2uF5BtrRv56b~mx!Mg*TmyZ^o(^Coj6nNCjHmc?Q*JKN z?W>q4Q4(Rhiggwzk|h*5Zj!E zgN|oHxw6OlZSu;HlYgkPRk_#!gO<9mz*z~(p4g}5mTqr3d0}e7THjSahqY4_`m~g- z9vF#ojr-Gr{wm8UN@+HiJX4{+&M6nDWcj6B`+>sug8(;JsarNwsVHOyEe}FF6wlAz zZyjZM%mVyW^J08AA|+-@LRTmqVs{A&t#S}8(;JV$@5(y4w)uonLZ zp^nkkk9ud{^|#;FjsPlLnkeBN)_@B6hD*Sk>R3ol#+LQ|kU7%x`SbMx^$F2X@|r~@ z@%VqRIOo(L)wLEWxG2(RYEZx!+|x-1B;X3d8Wox_r@U7=n^-urETJ_-)udD&d83d) z{-kYeGow#3vx!YJ?v$Dpg=JR#A$%ywPh8kBTJ%hz`yyD-a6!f&ujZa{3lnj3y8^aI z8ze~DJ4Ms^806^Ez*SQdiDDT>nG5*(53pF+C|@;UD?$sZjBu;IkkikW_)9G3Sj=H9 z+|?PpZ5&4vE$>WXH<-2zY;p9OG0HcJXbhL5e-9QwNZu0PLDo2d~onXL&umR~H3}dAOl(g|)KL9`THV zAmDcrF6~Y~uYBAaO7TyKXhq&A%SAiAt3(oT`Sf9l2bupw3^8?~zL1DnNdkA8FY&=> z>Y+$CrEn!RGL^&IZ+%seqbP4MCgzK&iXNdfczDVlvj?^fA|-Kqd=9|POk(pPCNL?e zU8qAa%)j~TsRafL5ZH*2G8uc~oc|#%`oyXQKumw}*$XD4AcHBWX=8k~b-5BO&MO|N z#~(Gupg`gZf5+GF+EX8)R6M@7S-kr-i(znRR#D?{uuWwW&e2g-$FuetF#i5e2jy>- zGR~O|0N!B_2F&vpJnfBUCrBc-8!~}Ph`wi_OP`sWHwE{P)*vKYb6};Q{NEweoHh@G zDow^(>g(1PG6k042(&FCETha#bU%#D8!%6@-#eK}G|3rQV-y%G$7_)!he0n3>{j+# z%2gRPS(51_E;Upqgk1>t!fC`ZoVwz9S49WU^(KQ^;|~k(nQ7x*)pLOJBopd$^6+MP zB7tv{Sn|mw@UdiCp=&o!39Rr^o+>5mSvMfR9#)tvRF~h7-S}E?iCu2nV~x=fb0?LC z*{ZC6)R!v8Oof zLzaS0_@8on*3_86rE2Yo;g{Z!&gV(wG`j{1#dowv*V>l1L=viEt_5rY^vM}r%>@JC zw-2s94m^t2k-J~iA{&jIOF1uddxQZgGuF%p+oaS-aq_R>$cKjF(UBTEIK=MqYLW4R zgo1ARQMA+z_!8Hw+|~&Ux6h5PniE7JFl{RbfMg<2zZ|Ci)=8Vbayx?xKyB`ok^#V2 z<%o3(W9hJc5xl1%z_GbX*sYSlgWXy4e&3^zZbO6*V+{4QZ-Z)tmAmYiDp+;DDJ5vF z9S16xPMI{N_fYSa9DXubF%1gg%6*$)o>2(xYH#5;)7~pb2^K09H;tA3YogLiD9h^= zu9_FK6~~ry59ZUyqx|KKN4wOjV8K4)bN_-D`aHq3`9+IL=(;k%365Hq*z^i@A9mT| zlOGI-A1sGu&0-@6zS;CT;jLtPGx*-XFeyvO?Oq-ISc7;+Irn=b!LI=#lAyQUIS z2Nx1j%&KFeMbIKx`yWMxI%0GTSX_XayjYK?%!8gwCDRIl>qts&AWLxoEzKP2glGOw z9yJMIc9GnDGzoUDzQrTuo%6=8fM*f$Lr{5cQakC!4N)`Tmd7HPt_WY3N0gAO!oA* zjoDls9Z*tEj#b7jdUYuyCy&B}p zOTOIE29(6Y9+BxD3yB|)*)W>L6{cSSmA*Y&DHczBo7NzTk#%Y}x=p0d}8=*)0y&4JRP`@l!S z)W4I5g%}(ltNi282?dP9x*jEykmnSBppwAUU8d^wO|nV5(dXvsN|;dzF$&fU7e{eD1qPFQ9*|XS zZh1O^{)bBm7`P@mtJM3t;kI=>l#mN)(Z87K%USHxB8Q1o($3WtHaAT9)wJjajcQ53 zhp-|Ft%-9^wn%7%PPy9zBa<+SOya!(mgbgh64^GD8;x1(6kpPJ(7Y`wmdKN?)w6u) zk9Lr&35$^mWiKcX*~2?4Hl+KP-OXp~Q_jpVjBGf)Uy0kc@Df~9IX=I#>1HJpK_y%0 z=4houLbE-`baKC*_(6@nDb=GrDdk9EuqVcUgQg>Tjec+-qoS!#zTWb&YD4YKC>>7K zY}b%nC0h%g@E9K~nxUv@oI)dB;`#Xv-TX$tEzGokdAWDYmg%~8CQ4D2Ij@0STH^;qz z(abaJH}4x_{!nSCCZqz^*o2b16|)9GKMzl_Y6EoIz_%rzr#c9Xsfe8J<^W%K)9?*9 z^l_8^%eYu$SAxaDuq&P0BFY0D3g5E&ZA}hm%NLYu6)2<#YSZ@%4sB|s(wTd`M(1sb zd@?}aes-Enz}L^*cfrc){K~R~disMoElNrFjyzm-J^_Q;BlOgn>7CuoHiCaEmhjhh z3Kukku)~U$P=di!p!r_WJghCho>ifk5Nmj=9u4!K^b|pU8XjdbOyApKf8X9Os1{L* z<}xP2bYbnl;B=RlI#w_kb#ajcDH*J6+V_)L0o^(AZGMBh`-5B#uRHPUt++_~tGbIM z=QH1=@x~y5N5d$?q&U$i6vpn!K|8=V%s(r*0s_aXP>F2qpbIAa^y1fh2?U4kC@e-U zDfKIgYSfD;c=JL2|6CUo?-s5`T2(w2(7#v2WGY$2$x5- zTHuDo`L4;gzUaDP5O+WVi5G~G9BsmgslKG1g5>tb4hFLJy^Y%xgS6srwoL-xe{cTd z9_YEud|sb2!uNACY9qP=h-Bzd$wxq#M|O^gqhFjn^zQTY%$53qGF2fC(J@0AXp3O@ zy#wONP%{rNK=@ z&$rVZFWQs%xHJA4;sqg2>a_bW1cKSv>b48%H3&qjy+7px)Ax`Vrek+}ICsu0`T?St z@7Jm_5M|3y-a}VUnQy(g7xdsU@0TgtpkFA&NZ!Q0oa|JwRb4DjIu%UCIEN5|t8O^m z8I%wziPVO!$3vR?jR-hu3)f|yd}XmQ)Amy$0kO#WpA#Oq`9reI%hUo-{dQ@lhf#HA zDb5a>kLf4(V>QZFKd~*ZF<`{d==jvr1A_Acv1Jw?p%70%D?m+G;A1#7ko=qQqftV| zg?Y{N>HJX>Jy*U2`H3L9PDdm}Zg`8`M@`L}E*b`)!~bG%Xo3BVyp$b`X`OnhGsC|T zG$!X}Z55A$&1uX-HFmjBbJG5%V#0hBC$`902LS107ejfOTlobW!x~ExOyXxPNmI@~ zmWZV2dqK`z`kKzk!Xz#`zsYS_JXP`TwyCI;) z%!3(rV{s}e1%pycT0%7chG@u5Uwzr8plW98K~dLH2-Cyu+CF2~4$yeT%V5w{@IuiG zL$KshLnn0N;TQoDPaX@ht7OdeWA0%!1U=HhPPtjp3U;%r`CiHeQu8rj0REM3fk&+%2!oU!eRIO*$d?di5~l(m1= z!aS$!2W*`&NH?P!K+RH044ZpYx)5RYK5aKUAFyPp#0AoXrsYNs7@1jC$r2L<@V|*T z^=_8uZ(yvC+z#fOgYVFh{yLW}Wu`=B#ZQAJQ~PY8IuTZssfZJL<3Q&&I0J>MrP3tH zWG_KxWHcs;v{x*iiN7tn%z;2j1FSN*({A^JMvG?tbi*>-d*wq}7?#Q^a#OTIl}6bP z?I-+LZ!K{~(7M*7;MPT5Ts(lVbAW{AB;fC(eiVt}zLmr8$wp*9vqP+COv$7^s#vha zpJ#@=ElO)tM~XK|u`d0svyw`4q!$zOdCs3B=*@jTQ@+9@l;0ydg!xJ%LOF@HhWL&20+Q;avRj2jQD4zCa0=)Jmsyknh z*yc2FE`sr4OgMBdyKkJvCz2u#)#0m_WH9FalyD8YY&KkG_GECnVTDSRW#Y;?rHGQ( zi(s33pC9;)nzpA3>q)yQe^kYYNN3p`$`zgyPa}Sq++`fi-jXOn=@I|fcU<5PfH&*{ zBe^sH^3MQM5~iOM`}hJ;*?89?$|(9Zd&Be&dc*FEy9hLIkx5T7k8gJ1r%tVL-8gdt zDmO&9G);Pa)UC?0AWE{ZdV(?WhKr((%mzh}OVBz0T=u4z(EYLmG$=@@sfeVdW{;sK z2QBR6{#=fCNRvwm03zTbQMy_2l+d*C^Et|zfr2x4pUr(j+(@&huV)!oCTN`|YCP%?lMNyPF$ zrUu9i=nu-1YJ}ZSg`02?x3d;eaIXFnNSwb|yA!1w1AxGZJ8LOgIXfF*s_YN(68Akc zSK5i}11 z3(kw6l@#5d#)pauj*B!$V`Q0VJ3fuFecX*$UrpD+>2Sk7%J`DL;(KMAv$$6&OAWHq z`SsTYM&B{EH6IZj8(|2AG2BOG1qt6^p=1VKOnC7TY2e3x%P@8eL&`s1etm9xa{TZz8)jqKnV-m<0t^ zr&mrtRbi?3DaTpr9bk!qHf7|SI<1^0gD6!sxx8>6bF}jAg}8_~owOuVX(D)QrGVm>oxu>BSw zbvEVE_Suto@Q$3l5J;ivbl!7W0w%p>i)~f<9`3Kx@~aO&mZRJKed3BrPOZgmPUl?b$mu^xmsN-9g12KUS&efI6uu+F z+|K`Pm4#nU3ucPv>*-VkimKJkJswLV4TxQ#32ph^I!BA!I^bdW znP#mXE*O9UumXIk99o*EJMQ0{vAKz#Kyl!q4m_^NnYXQT{DW8g~EOy`%YJN{$4uTb?cb zcUeL#vd+pre|>@c9lM6-8D@ydaRq_(gNV0E#E@6VdC$^cE4h0yU?xC^uB9^j;CVmtBN@z3Id^Ac zX5Q6Yc6VpwlwvaErVY#?C;&<>??zt)Z=MEPyic{p=8lg1y zZGsY+DwJhvSuwaOofl(~5g&v-^zI0qK=ON--2EaT%v$fndRv65Po6BJb^1bRFg{7uT79dyr~xfV=f8PZ_czazfH*ZbzlX65QSm}Vt0?Bxy^pM5tNi>gO2 zcKNzr=vPJO1v zX^1VrYYoQ=YQzY50^%;uC&t>8r8M*R#yNodhMP{*a+F9>e}!UX8EypT3x%Lf{bixf1`Z20ih?5KPVBDkNzu$3;N7z5`9?8={u@G(BcMnyR0Cd~qU=PTE+UQb&{kmAIU z4O^85aykq!tLJ=frp@spI@0dwx-8?uV<{yfT(ld>k)Qm;H*iPO} zmtF!R`ZHt%W7MN%$UUW0tnG;S^j<5#?w=O;!wZp)T_heY*m6q~cOF z&gYZGPgpklCc;jPBBQ-dzOC3Ja^59*x874u_6V~n^-kYmbcAhFtsA1IhKH*)=Y08) z$BLYkrr<8nq8A?lHp`ku(9j#_%9Yq=j40YhnM`97lyCo=MnfBx4nv+NWaSAT;vf+N z=8z2cIxN<-4Ls-fMuU?wdPk{${|^J)EgXa`E3b&4&4+a5Xn%Pi#6U{>Q`i4LI-uE~TfzC*S3NpEt7XA^sv{ zGxkG2B>7Gbdgb<{3pSk*Q#?s4ICcC`H*H+>z-kOY?Isy7vBsdXHH{+0CA&Qc^W15Mq<=Bx}v{{1TDV2OtRA_QZ0M z(EJQ?kz#AQ+t6p{c;Ho(;h^OO<(ZtubA7dPNgR?Ch_$2a@7#LPXM^5FCuprK6PAF_ zLnCO=hSt;10ibr?FAXQf9>}6uGOE&YgG&VwP1j{Xxo6lp#DP9^Yz9Uw-=V80YX>lx1o8>3g;EseI*Y!tPxMV&&A=N4vc^9p~==46E$(FvpGsVVf{>Nn!oew7hdQ^HP8|*_FKbTD~fpL-Ew)98ldmfaOR9oq)7 zEt+^s8XM*C%nmzNCKZ~o{9C>!M=NcSn}TA6Rbr;|3a5ffub@g|w}a^Nosqrj-fO_- z`i?CxBDGFP9xmoPl{CAz;2;(1|S&kxoEIb+rw54){=Z2?Q z(T#(;ygMNVDDoz*=ptPsX1euv)<^_$(W47pK-mQKKBGD)@ouW+T+!c4f{EIkLHhus zF|tkNh1Cy`S_=q-a|A<^t3?tX|9#mvvCzx8XZC8qMK#8=JIR*Q;hy& z`y|nHMD!GkB`ZP|KT!;$KJ<*;$x1cVCVf>Ohxg+{Cli#*#-K}07K^2zcbqox8*A@i zeCVFVq+Avp8^b`pgBuZt=z&(pz}+ms)coY=CAx3<`C;qi9#*tyu=V4#P;)3QsJn7b z`uq4VFAHnQZxSd1iNjg)4$AJlQ&DVaOVn%a_Bq~FlVpGieRa4ev7o$6_?Q>Lddxua zO;}n@ICe$dU2PFln%1X2(Ik(qvFsx-l=iv)ZNf#wj!-{IQ=8NZJI#7~jzK#(zpODG zb6`?8utiU;r}u?!;(5*f+xu2_b02eZ(L4!|_y2xiK4X`;8ur1rz^~#*N!Nv~e&_!N z;OV|{Ym@7T)2yf^x!mUXt~Qe~5Z`~RJ1&bnboT?=gRoOS72pPJl+LIVI?#Ft2{?Jg zU-)#%H5|-RAA~4=DAq>Ei0?3mq9*_11fz16k@*1&Cm#Q1I3QM+mqUxotaM+wiLOYu zbpE#(i0AKU!zmjnNa3L; zP2_&Fizn&H^ma33=O=?+K(Twe-#&$Z3%17oP{@;m932kgszZW#aiN!_dF-z97Iy_Z z)hC>){s;x078bY!EKMz;cc76Fs?kb-?chd}({qYYB6285R47;aK#JfO%*$tX>%R+Wn{=TkBLrCgNayfSx_dzD}nZU5kg_jfZ`<`HW1O6qr;y($tuLbpbfwiD9bC} zEaqg6SZAu#Y!Z5NJEma=UbAl){`erLANSJRKQD-5;U%?hgNE5C+~brD`w$i1&nSh_ zimj$v$opgN^*o1KX=d09YOsK!>-A*P#?{L+F;4y#ZPV|nHbFwGNhbr1A{NO%fR)saq}_w1BHxiQ!1M4c01Vhr?lZ;MwR0Y zB{dts*x@4&SCEpT4Vz_iYJNtIo?8H|`4mZ5;K4M@j=c{{MMHIF9kfXuboXg+q1>sr zgdSPAu;}G&n#>~Nyj9hzv0AwSS^Sg~`E!ATaQ9p3^6~acQ3iQ=#-3rG5~RtnP)6}^ zmy~rYpqy>R7L*J4JBy9=D$=n@M@dB0Bgv{l`x8_fy{Y808(%8 z%x5d8O17A~sI%NBkozs+9P2X0Uu|->540jZ&vcy{wt`tJ&*<^DR?nu|MV7f2wwtdY z6_-eEpU&J&A0yV0e(Cf#;|+TeO58^VCCk~w6fl#rLGU9LLA`~Qgq=pp2HAb6?1iqWv9SEbpteQ+mm!IuF39m<&43Wl_-V^okizN4 z_B`l{*{X8f-}J#xMn<>iM=Lp-a6)DKY6)@N-&?kEyAEvQpOO*VF?sabz1K> zyX>+TD5Ks4yikJUcoZ@YP=RBdt$iQhoDaY;^JnE>$}~r>nMiA+1p|;!(s1TM=70U{ z@!3TFQfISoS$t1#0Y`JFr)LLYtv?#LQx%?1Ex$a8EVW^4tP>qccGI!^oTu%geRiy23N0jB^*vCN<4WyPvRzhy?u@KGW6K_&D((qfn$~*ix{UYU@}$ zAf`BCW%@H+K&A+K0=uR$LE@?{A&J;!Ae71V0&Ls_uBYEttfK#(a@~Io%1P=_q*N4x zVL5M{jtDe^fQ0|DIo%zXsuP*fYkXz7xEytz(6jFVM?WfgC#_(m>*yO52g~#PWiF!J zMJDwRf3cYZ{44hC94sAL+L~9^|@k~g_rn>)^wxy8GkHT{^tAFeqRPTPdP$Bvq zvz1{wO{p~^ntRmn3z0~?Ss#WZog1Fj63>4ae;qOUUr^8QF}2q_a4rB)CIlEnQ{x2I zs4byEjk)QL$1VE&dIJ<(*eZA`tj<%)HoO77EmM1JvxKq6v2UAnmgpDQdf|C?&GDB% z*5mmJeXx&+zPLTM+Oa#B)^EH59Q}+5z$oBQ`lHE`qv80rw)vd5C4ne2mh-J~*zCRU zWVbEznGs$llc8r2-DHnXhuQ3LGQxF{e1w{ERL+1Gr8Ox5cw z=r(F6bhuzxP}orZQw>ZfRI}bzTk**Er}>bEIm%xv`YK(M011>>Lo#1W7@%^WW@F?F zXJYZu7H7g!r1s#HRyS)F)sw6jAuk-jNHCmDU4N==O#HobD{8;TEJ=AzpHMC^^Ocy#TUQM zukXojoYYYW>kdDNJSL?Z3a^Eb+U~47X|(Q_#P~>_#?)NFNSBW@Oww0_eMViwVo1&5 z=$hrJaEmcJ<>~O!lV(F3!8nk>a$dLg6aes#K(M>py@5V?~0UMNSUR zD?WCs+AZR%X;7&Q`}*f1WhXrBiaV>-S2e9U}*t=d70#rHH zKu#r^OL8l_Pb)T*;nMG+v>Xs4r^D*itz9#v@e~2R*(vD-B&Xl`Hni-1B=f`^>_zFZ zH0fYBWHDFPTkKs$)}9l^!u98iLD_U$N|2MxIGql9Ylw z=*F0!6h?aZ;L{FTuh`DHy_Q0uTiOs3+_wWLI~2QzE5G`?MvD*m$zCjzWyvZ4->^q7 zE66K$(7ENhn#Klx)9SYhrMeimMT?cQ-h7@jv!Iw<9!!5}F41+-Sm|j+&O1=X=5X6z zW6a-q($buDBC#Vzk8i*%VAF9IAB@fb1iLmJFuTfR=|yY|gMK+{8CeQ_B*Bt(^393E z!<-bk(mX6oi!jdPZMT%GNJ)|kRuOHeP$(#*=km}^niac?#;x+{2pue*zXQ;OT_sJ^ z%aQA()3vr4K@>gR-qGVqtx$?KwCMN>;05&wbJdJc4)1k%ygF*2D5nv#%g#F&gv*Fa`xTWyGTWZBI8KlPFO1};Z(5G zws{yow`95Jq3C@rl{UhwCwMEAgeecn(f zL~EvZB^~R=%&!xy{q*w@8==tEjBtW-v1d0&Uz%#AAIDtoaUbxws_fZWRfv-eqVqDlcb#ErZWf+D>FTQh<5FBMA>&|CY zgR%_EAE@7<@z~IeGg(QdN&0=}Jo%_#>9~sCaqlT*!c6ZGn>z-^)n1mqkXS86ckWjg zXXCZSa#6@rVFUOJMKX#%r)B8K2b{kC*3#tov3!g=?&y3ZieM&IuxGJmCEQxFN{~F9N!-KT>_4Dmn$dESw`9un(QN z1ExWU$*R{nH5L?|$xd#vJM)xFZ-uuBxC_V;&8b#UnJOhU;sn}} zjMDT*Pk(xJI`R%|G!Jkwi0xIpJS0KeqY*{^l7cFb9gF7hhB;Nn>4N}ALZgqO^L!P~T7>v%YBsQYVr>6mUyy{X;Z zhy^ay0VPdhe5o!|hNUSvo3oMjk;S^W-1MpSuI#7%za$%py!N zjef@;z0I`kKP8-GWonFF_+9ZUu_;PCW8RHK!&-%}nOS^$2L!+!LR854_CtaLJK{k3 zFg?B&nt?ml3z`6194|RoE6J;^)SEYQfc1G$74Hg#yvF;ad8jIuG?~Ma*XHJ>;HQ^E z&clGB8G#Ia%F1o+?t&bI7V(7j;Zd-tC*K|qsp;r^BKWR7dESWnZ?20t*w!W3w%S{4 z^gxiN><5Z2gJ3?ejVDjjWz$vuhFJj|ZQs{4aEW=YzESv#)u_7zE}{ZPa{}w`kIM%_ zRlY@!lOc(R&bZD~@~h7)=C^6DkGk9474s*Qjpe*6CVBbR{@3isDo#ah<05Q6-E;>< zriktj+$j3KRiq>2qnQ$~fMHNy8e~~Dk{^r8(&W1faHms?CK7dM87H^v*$zs6L!fr77A1&A%C+ z&!j+6wVq%zvn^qdH!CqP?^x_Z&b_RCy=>o{N*r4LeG1Ry-DsA7jJ?CGj`!|E>*(Oqbhz=6)| zn>etQGN#?A0FG$_AqWh2%zohxIkKVV64F@Ld5IL2@4cJ^$son#x+7HL+mmZZzn_Uw zlJuC~THBO{H{oO{Y#^Yw9Z2TrumDB8{tgf3zglp=tLWksDUk0s2Z{>$eJioxH|*jS zXK#9$Kmn5l!&goRF)!p&Eq%Y5eaEnAq_vnJxYs7JSg=k5JlRQZh0>|=N0x~1(li-q9U;{8_NdAR`qJ}_56>L)0jFy+gO-=uWibJ`zX7D1qa!x(~EBW7iYIPf=?F-QF&{l64r zs)TzB#pjKhyZ}zE5pbS&m(I7krB#!>TDSe!O=cY*?Dx{0rH{A+7Y(<@2GAUy{ayh^ z(tq{#_aK=wVJZTo7Up08WS>}+lnj#hz&cv$L(EDz7LiXjJg!>A0&_L5rFf8SEN#ZH zt|`xSIS!rit!{3`l$l9rblaF2xLg4_FfVjaUR2$q{)M(-W=N${CEi^V4mc3%R~v8< zoDSEH(8QYh5gd+>mA$8Ag_oX>$AAYrFYI{dQ12!}Syb4H>AMnQXJ_sLB+-9J;ss)f z8x(+6Fp!3$>I9U^n4#!!Gh^hJiP2ueMee5#)n!fG6{mzJrbs0=4{Cw#k#qCFQE(L6AY};5*N%ltI7^pC!Ds)1-;jf?f=EPW^^JW^ z!4F~!0!TlF^1Wl%X0?xRw~|4D8i!=Ol2+dC zh!KOpgbAE+wq(szLut_9VR*Ca^d_6HgO;jMi!%#04^5mRt2l%v&j*$zH5 zMN9B7!Ns*yG0dby1G6mSjI}k>bsPn8*8XLoIi<^`T`C)Vt9hw=Lns3H(1iHzpL&(> zxJUgDAOIY{JHI}x_TFk4)2GoJ6lJaCN*%ZWy@_CH2G2n=rS@7Z0VKvL@Sw{_6y^0YfhO##=GBL*6+%$x8yG$8- zJurnHzvOHYK71o_kgia9KQBz^XPuZ>w0XohEDlfS`ugza$?22r(_Oak-P;H;+*e;{Nn{Kky{$JzAM}u5xDgLm zMR5>e^>13j=*!GyX+vSTx!lt;tEFdGMMi9|PwbX;5HbeZM=i)$qGNbM9#*|=myR#+ zPzXg4>=Qw*5KIduIeBg`X^ym9OQjYJ0E^mYsDCJjNVvX+Rh{F(tJ95E$Z$!YE<;sU z;m>*;Q=7d%pjOS{z%E-G3JskMV16Eh*`G=&fK1Pb00i|5Sb?u@^|b-*;F;U!qex?+ zo0>Ri#4yTm_w~@AgfQ1&W?F230&2LHY;vu>j1P&WkVDRN;JeIlM01qh0I-eypFe!H z`v`cC^I^}gaS}KlF>%w%Ext9`GM7}~!~8P8&1!KB`q&2&XW&RyrQZnwa2#`MNg+(Bou29UmfL*~z>ami z)QBqA7cEZ%co0ejkvg-#q#ad@OjmXg0sE+UFSCY@Zp-eyxIfV7&OdK~gAm?TGbzR} zBWiq)s+PE}+ literal 0 HcmV?d00001 diff --git a/themes/pybcn_theme/assets/images/photos/assemblies/2021.webp b/themes/pybcn_theme/assets/images/photos/assemblies/2021.webp new file mode 100644 index 0000000000000000000000000000000000000000..c38758a857e5ac52b2b1288006f1a4040856ac4a GIT binary patch literal 30460 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 literal 0 HcmV?d00001 diff --git a/themes/pybcn_theme/assets/images/photos/assemblies/2023.webp b/themes/pybcn_theme/assets/images/photos/assemblies/2023.webp new file mode 100644 index 0000000000000000000000000000000000000000..9e499f44866a165111dbd779f4d47ffe97837f97 GIT binary patch literal 23342 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 J3bwca003dfWQG6$ literal 0 HcmV?d00001 diff --git a/themes/pybcn_theme/assets/images/photos/assemblies/2026.webp b/themes/pybcn_theme/assets/images/photos/assemblies/2026.webp new file mode 100644 index 0000000000000000000000000000000000000000..bd0dc7e3f4340948264597993a3d11015c3c8697 GIT binary patch literal 12430 zcmcJ!<8vlZ^XGlVwryJz+qN^YZQC{`b~2gRwr$(CdF{Qwd!MIj|A6f`-F51`=>F8V zyX(|Zk(Q7MX9fT?#YL1fl(>k!{}U%R19CxVwLq0X1dN!|Buhw(NXSi@4YrS7BuUj=a&R}09k%MU&!{59`etL z?gBdee|$><41q@9*;|U29^Xj!y(j)c0qHBC96j5)nk115jZd=tF|j2dJCdjmSZ0v{8OiC%hB1OdGn z0klBw@6r3uWe>|lkZ-7u)9-`_LP4EOPr)^)_u7}<_q=9c=UvSg)?cE>-TVB{?#$k5 z;O@`roZ^|_rC+FEet_3yAfpDS_sFf*_9b4oiAR@=>N^gE!|;!)X~dVRT)v1%fzH~`|}z9 zMz40GGxAS{&^N&lzN^`OsU-E!CN=g-)qaQm^LCvN`mHZK=L~ue#qR`iiM6`}C*$)( zFSz>4?UmuGZjq5vcE{gYg&1??g~?j@+(-5nk_7%S)k>ebwITSk)86zBEw0naSyA*G zb?~p`RWNbHVX#3Xn*}L!bAy!d&Hu%tMHF}qagabcQW)30U+Ey(tuQ#1Lr8b3U>D0k z3@P|=bYUh8`fZ>ax(C~l3uT+z?kHn?7v(}l{ZnuDXZv~^!XMO~SYZfe4Q1DqhD8r) zeb*|AB&Y73dAz~}7&*9f*pPL>yX_@ooaV`?)|@i~%{RT){2)DLWN_<#XY!pPsA3<6qyekLs!u|^qvMHTsX!d4@*c0bB z;y|6ubhN#1me(`CQ=eLMi2a@24uWEz68=Q;v_t?th1C+1CBQOaaI#5m zA?-Gg6|ZbAr;fDYzwDGyFoD2l-fJTYWbo+m$rEYDCkWZ6;IZCRVnWfx-b(Z?B-;A9x$(b}qfBzkyc`rm|xEnwdw*{eSiD_fK#PW7_$gFzpI&IRzV$mTGj=$ZEW81$BP zo)qiMbyeyR|A8Q7U3FD{7eeAf93%biQCp!YA7+C_{!fLS{jHwAZXp|`ES>bwPvB+K zKJYb>!#|y@oBnUXGlUl){O^m~dz)Q&9wByurX#wyM(n?pPO&`Z$UAOC$cN7T%Jp&} zn?6Km8)*8PH4E?=aypo+Uod(GTGuo_VRxBbfTv#sj^gbn{o@the@Q-zu5t3%erXqD zNTQn#_&@9r<8i?P7<%4}UB2Ss{3F7b7f5hgUsqNNp=1947OcCyB5!cO`+;(lOYy*B z%H~;vfk&S@+EbdY$E>P!^hmsNb?@P)eDewf(Lm=WFX<-n9*Y=Jt~-$YZ=wH_zq^Ab zgn7!$ZA3u-D<4WLSWJe)wIX9Nj>F6Wg~YOVyESfW>ne*uFE_I+Q+78I4EjOtc0|TV zpn2ZK%sOkZ_SKWje?=O^i%ewpI#9d7`aQV76*4be8MGvN2GVD;Z|FS-$7N)u4;=oSo7`xTP5Xc4#6rKv8_ zge%-}d*xec&m&jdGtN0$Ux9~fpXS^i>s`^OhtR-f?#eTKuMZv#{0MWm)2s%>kMf*T zI{3705^KhPGlv|CJ$aA&e!)cNea2V$mmZipRh1Y8^_;%#gtQ3~Ag^ikDZBn2as*KD z*+7wYO{dGSaCWLy%$>a|IOq{L(;BWJ)EOmv7MeIK7M)L{PMyTVh%DnBt3%sii8oxC zXpJzPBzZ*0X#m)$dZxxs`+;(-Zq6TRBfikt1_W_|3|Rl`R!6~KL`=;*bd?H)GSsFe z8D9;wnHE5G*AIwyCr4^^H@}e|!7z&qEte_-MQphi5DzNNW|BX%mI?w(JcSd9$$v~* zuskT+)qD64m7T=#zI!rc>rZf+G~aBLD~DCdtC!K#OXnTu9+XATdj8W%SgNU8-DH2m z&aX)&wm&AQ6Lq_XZ<|N6E=0rs>;#2UXrONoL3My!nK2ET%Il56`>=2`<;6c|`OLFO zzO*WJQe>Gy=RfHSK~bzOJYRAm|B5ezWn2?!MnR=EspW>1fKYaUZa8J2<+2_<6ilMz zoGbm;(!=tGFMntC{g8Udaz%Od(ZJgjn)vO8z#jK+)6-(VyW=jAlKeR@X-SIJ)nt2? zr97V=>CixZFgw;P4!tyiFwmayj4eCsb3Q(HReT|vC47)$)J{}flOi{<2vJ}oWuP?- z-Ixl6gt+6)w+EEt?RKfk3;aB84c?+y-NOL#Zf{$HIdc|q*E0!#V&!t!9_gK$0PJ3( zPYDc<$M5lTEOm&fr zrM{)A<)7}GlFpgnuG#d%1EH=8nEr8gQfm5hc8Nj#`O2np)CXK!X=(ve1|L{2&3Fv) zpfT8^8=_G1P>gSC=XYERuljLM_qvqD)LLDXcfC+1@Ze$uStBBW$$(%tvQyAQ6vwin z9nco!Z88&iy*`H`y2iG_Q7}c?LnASToHRw+_TNfbpxAANlh^GqK|4x)`2^t8$>$cd zTfB?!Nncx z%9tiU&4?={UUhlDXhE6yvmvso#tuWpzs@4hfB5vPkmz<(~v(%dK1{ zZJ?HqNTuj#k?=_QB&C{r^=Lj^fP1mMqVh{$y-Dg4cO~P zvr?B+vK+-D_=bHdHzJ>l+nM4mMlVG$FZxd%X@2!AL0N7U&9`4- zFP@d1k5HHN1)SL{f^EKcxaQv=I`!$zjL^r~PlSO25m4a&j1+eKGhfM=@f< zCv0%YJOFN*iczBDZRd{x4a3O+Lz{G5t_L{avPX;6Q_i}(Ia^pV37yWEe>IQv$ByO zy1PtxVA@)g9ZsHmrd06dBDtdA`56U`NihJ>1k@iwor-Ei_jzmFB&57FYZPi+;GFO|}mrj>$C#9%bZ zq}EJ27@hHtO9K>ITgSSxZ3!f%wd#%(RBY+_Xv!ufouvyW-vSFkVppE;Iaywr6c zu=M^;VEOBoUwRiYipGF-tH>?t6n}U88t+xU&z42GX_-NmqAy`W)F&?d1+Bu2{06-t zJh-BZKQ9|{swCWSM`By;CqT#cV|g?soA{SmyvaqwBHYG+KY9n|>rppOM;xs7bh72X zOs7zlVUUZ65ihiPZ2Sm5a7f}F>w?t`i=ThMuW$%JFrOdhaI1c|C>{0IQG82!K06S} zN!^+P!ZBCb$qa(KeULb_bKESVwy^OSwr*rnoEYVw{F}^t^W(H5Q{eT{?3F@}!-I7u z~ww{9!gtTJBHAJIeu>$h}l%1Y`;85&td_3O2F&Hn3PPv|!Hcgt&0 z6H5CO#_a-jEWH`*(>_aw(`#&53k$80*AOqaafaor=ftA_y+Cf`fFW4Vzd;fFDs zKG&bZ$?wC0 zhTkXcV*i!G{OU(Fl>=haHM2Nc;MAXd)fsLRj@-F3#+GY+KkZe*9r3%qG4owj1Hz()X4_YG=jSY_ z(~`V9&o-^bY7e)4a3BohA7yl~esE$ewlTI#198k!UN{H#T4=>EGg&lzd&9#PD-h)AFW+?N81pWPe$1AC3 z4(-r$x2qxAPH4GKxGtpj)2*T`r*?l!{PBNP$xTaApTL$C>+&zKcj(4Jal@F&n2mPl z(Fr7u)BWR_4NMjLmuC*gfSxIdml(>|MflHN6BOr|^8Gp);;Bfg1Y^x*L1&HyADTUErM4PdHbiUkKC@^G(P&%Xt?a1C7{{nT{Lti{v%uR5V};c zv$dNZvo#jZ^@aVN>;dp@n0jpOaRBqI#hg<~{Hq1h{@&tGn>iTpUO_~3b%G-~2FA~= ztfUfQB1o20*-s*4ps&j#Bxpp$l+z_;N84nVy0}xos{RCyiZ}v>9HAM-5R~%x#q;?P zdHy5%U~>+GsqwkYpyIImW-eyp2)YBFZQM-E)m2|w@twS_D*D(KzW+&x#Orku`_j9QL%&!Q+~ zNF{paHd2oyS>cz5ZDKKBT7z)2b z)>-S(Pythkr>?QK^l%MtmxPAWl(T1tNGb)&bl;W)&qw#327?W^<@KZ{@SvR z$+=JWaQkXW#|seqi5btOC7s2(9RF(h@G)5Z7ee1O%mpIZ<1Qkek?TVbx8c{RO$nnA zGvV6M3lNCM4X$jP2Vb|RW(f&N#x&w(m_W|_e6UCSmGf^!8--aQmr9bP&6=Y?nDX2B zvEJaq1UqVF3@r)*Wo2Usv_nUpQ`FAlH2w2Bl-8@BT1#7)isf`0oVUTe`M>`7JjPuAiTYljt?x&X}__OX6z~yOhmHQ_AyOr;7vma-*3Q z;9*?}I^X5$4WvWf+98gIC`slOg0lx;dZHq>kEFG;0z(L=9Uq~D+>hzOkBb^{k62uD z@B$K%Q~u%h0tR?Bx8asQl}>*__fntw>+mkCa&b6fej3d=WL&W8MhL^;z!g7oUyApx z!NvVqA)qvuwj^}(jTVdV33qH#k=5z6bR_}PjG#Jv+!;QQtmF{9A$islGFM~B3!~~a zP?aTJxY`z2SUiMB`yJ`(VU74JIn?)_E$~dWogC>q%!J?a4%@~E! zsYrp9xvu$Fmi7u*Sv+o^U>&Uqw}arPAvg|}pU)o^uA^jpi1onoR{@>t3Q;Od)?>he zF1SlwFR|45#WBWcpnOH?{%-Z5B!8Nx@`Jv*l*j@5QY2CW#1OY-VF1SW#8#}!u!#$) z4V=s&OMig7#JCq@?At~6tA#$(MO zhsR7LP3XYGOzQK1IRzoLCY zA8fU>M6G~(vnTk+oV=Tu_fPbdPLI0YZGza|BH!6mER{w-GQLF(($Aj^C>Ox!)t|58 z!k2Wuqq+#(T)B-X=((BSWlcouO)5VY=5W#(HN$$yP$q2>>!>4*lXW2u!gE2tOGTvx zvIFQd%y>WM-6tUw--X8GK{xs`o|B@|U&z+}o9g3vUD|77rO{>MWKN&1yDFn&k6Lhg#?iFBJVDd3u0xm=3 z?M^ulf_-G?BB4p-pkf5qd0!%aUbZdP_#1=hjosrXbuZrDI(_sxepl!DAdE;)KmK4Y z|E2r;GJM>9&f^dLl*>8UTyv)V{WJ|OmL>sqF$l2Zd{ri&M6$h3ixD_uE`jo5@i4gN z#N4K|i&QKZcF*gvKt2d`F3egE{D-m~_C#pVRUD4Ze+bn$iSd?7Oz`((FIv@X!F^d6 zItPpEdGLc)d6uvDWwY)?m_x(DG!mUTCJ{z^L(y%Rs=)sQdvl{(>H^yQq!oJ-%bavt zVXL0yCPFb+D>R9vbR)*8xs1;uv=pA)eq)4g$}VJBsxg1J*5jzlG1$zA8`-r^5c#4= zaAMkZn}{0sRag*DIL|x@tdNA{#x@sZ2$TTVQyLT14GS%`x!bh&?+w%{>KL9(<<*+Q z8oK_`rE60DATqnA-I#&+9zZ`{uw5mWWVqr$Yr-&l_6xlQ85pZI6|z>*-#a+Cw^ zi!tD!WqwaC$)OIXNxDNVQQY%yz3aCs_xUbhnZ64St3-GQf12cUOTeG?+(g1qM2ipNm}YqRkb-nv7ZYwsC1`ZzP+ zy}tdXQ=yoSTmMq#D$3Goy+{wEYr?rUkV4|OP`m9?v6NNeQbW;wp67ZJ?GC#2ZwJr% zdD8>hm9w0Pp6EGdlNE@YzX6oHSvyZwjyuI5#SKnhiE*;~G{iT_?Wtkr_q+V~B31pT zv+_!d29GCm3f#|;7`g*jCU5dvT~r@gfq(t8mZ2)uB<~mFRgsjMotzUtIZ4YsNvn9> zL}EydLM6L6h8Quz;Hm7&9u1V}8eZH{_Nx9AxgFv)?os{Sp?WHJ3HgQgn?U9!X6I6s zFjUeaA7PeL4F%q}@ZUy`vyuN|cXNwl$Vwi&OI$PRW`o&^Vcud5!J3fM40)DZHG^xGWdXQjBMi|a+Zv{o`lU zAPV#H{&M1Lwd!X{u?XfyAU#Mg-F|;?u?YR16%{T))3029+3kh{5Ne|JL;fYUTcyOT z=A2W7Kx&;E`$fe9*>#>*+RhT7R=m_OtZr=1Ok zfqo|_wWgQ`ciRjJrAy`qG&HGe#W>0f*+EvGg*(c5H+~D`HVqB2eb)C> zLm<5&bUu>{m2pX~+2?{3eIw>r4`1C+nOnf_I(_ChY_7{*c;%Cxf8@xrKYG6Zg^55P zztMi2y^e;8!%~j6qDU8ix{u-|mo{4TKwibKXOTh&G(TdIjQ5LJ)7$c2bi~iIl_+p( z3xbH=M(AP2Kf{uV z=6?MntfBR|$oV)yP=%QFA#b1kIO?!(>$ZZ8x{W+KOxQCTcXPU#@GFAnEPI){zz#|P zwB?dok1T%r(%T_{$Cl0xl$nKJ#m1xRKTTyZwB%A9C^!E8OdH`6FyJ3pz}{VdQn-Tw zk)K6*i>f)X#L~vi+eS^jOJw_|m{Sv(VzO@T0oa1>c17aBF}Itxs7cw5?I~b9!P>hB z6DAXe`Yz7G!u)#F#xM=Qd>;u)*^H`iK6eJz>b{5qEco*hLHeiZb~2CM7H7Efy@;y> zP3u;%%h<5FCFiX3C~0f6kgq+zsI0B;OGlJVU=pnNja}z6-tZ$CgN4)(k&KsQCDVZ5 z3S{1sV}J$bc|L5F5GB9;n%U2_>ALL+kpxt2N3qdg_^VBe?OQWc#3Y6u)FxEbtJvvf zoA^z`G=vlf3yqx7UhyL|kTF&Ia8wq(YKV>rH2AmU)r=y_W)}R{o5KkHLoO$hVe%+$ zm9$_I7_3|z9=1-WIvT`GxrvJc-B@(qmu+zS+_A)CV5C4;(2zeuR+9~{?5@kRIQ8{Yjb2&4o zqv_t(o#Iz^$2~ZairPM^5wwYBp`80q^7Ao`VTt;Texvc7c$-N|G%=px1$keuGoAFH zO5l@SO!fTnhge0e^?M288mn@W<52C10X%*OxMu*1Z0z|&AQ&tX((8zRi7Rnkj382Q zNn7_MPT|X*bSj$pFM}V6Tb<7-7}-)o1e+k&<3R(!U>#h4X0}Yj{L7~N2TgSXuiCJD zmwc-G*u6`$p6)ATr<9|HY98VoEO7wQs5cjAlRZAcvovd0YjD*CyW7-KmCj$YVPliW z^lTn??iBFcZK9)-NvLq;&-<(>+OSw)SK{{7%+!+Pq-Ee)^5bs2ZTv5yI?e1V^Jp$g=rhDL6A zyXL8#SvDk~eI_|dVnGDPLGVXj5KL#BLE&?sj+WS79}&hKXQ+d##J-Z*hdcWsiF%`8 z7*&eo+hql_4c5#RUz$tb5>djd9wAdARDId=L#x1wcV;Iv{_OVU8^U<8(bV+A8?P{z zRvuQXyhT_fsuoZ1T}6Kzo_%v(&@6K8OY?vgtP zT^a9)XFaDhdPgp=MT;-|>+>j^Xa^wz?CU@OV_Cxdy4m8>(cC^zp3}cxt=9nH5L$q0!7p}9V zr{hQOkI$f7MpB!X;wU->aWmZHnE|Z41pz6BEA$OZcCQM5k36`>6Tg4rb=7HbTZg;z z-np0dcX}vE@>p**rd`NY&?musr41BXLnHkpt&htGx+lcKU-AU<0+NoKVF0+(NW@aF zFfZ5j_7!_ZFFc{v7HR7whDZ~**L4~}M4!#*Y3VCCzPmSMd_2tJpY_n4>KGGCi~B6V z?$~7H#l>3uv&XrG>!Ev8iXoNFY*V#N1QU>!4ehll6ohqf1yHPzH*Q|CP}-IMqkE?Y z`Yg?D?HMTxO6}Q477f~nRp#h*js6J}6aAdRb|#1E?qhF|6ha@! z-m5L(NK8Hql><*H{+oO&h|BWAk9;;zI7QH%RKR1X+f#{v8v4vqBW zKj5P55h+`7n)r?mf_R3-5fzk6>HmCG{>R-87YM3C~jSxs%IItvd?=98s2<**>^Nemx#03t_2 zs{9t1Fn~WV4{KOmwU{15^-~USb5*|&wPGa?H-tTL zC<)=vq8pNVtfW*>Nz!{)wJhnBuMx&Wc2ATVoR~K<9wR%g|LSJQ+%(1D*YdYRih5PEgS*^&*1Uodx8o} zCKauQN?JPBSAr$X5D$u@nry z_I{TgxRy>})Q=zUw0x?66BltCCkBaO4dp;wJ8-sI7+1Hgj@nkhE*028s}@n_liR2D zM?m5Hmble7#Bl#w&lWiC@Q$<%%26eYP8O#{RN%#4KgGc5`2L1`duE~k9c_u4m#23z z;7UMQ19ok&m}a|Dde3my!4bN4x;bwY45@Ix$wW_<_6?+tgx!*FOXg1`(pAF*soxOV@U1jsQgmc;m~w3&kMA>;>F9MmmX$~(D@Cn5SqmM@g6avw8F}C z44m+DUSanol5=u+3v0;paPN`?p86NIUjF>kdO!)|L*3?CtaF6D6>AJSe>LimX+ts<1It)|xSu`mbJzk%wyr)uIuDaZDXFCfuI-LQsK-f1d9^k;KE(6pvqWS znOvaXLL`t5mT$-lH3w)(OqZr*Tc6`cU$!atOU}g0_g|2#>!?qT&qD5YUb4>IS@1?^ zfuE_6jm#7i8x7Y&p2q})w5bx&zb+NXiXkJCYkcy;=wEuKlT!#^o7;VcqF?s$IVfTU zrvFKTI&9iS=ESH!>k3RZeukGlbRr7et>_^-Y@=4X2zAt&Ku<%iXRqAYx!+jr#)=}CaO>sO2>jrjG$A8{8XMNIp3E1zy;Tkm zdl5N~96>^;Em@RnO)xp@`*D1fw&S^p^_P1Aa(7nw&fveEzuH%HxzM-@k z=>9B1-aAK7*=4;idXlJp*>ft}9|5^c|CtMZ9AgfSUlacdZC(oSa*L*}^!{oC*Rs5r zJbwvydYuRa&~L2XD8y~fdJuOj7J5#DPRaYT#4CCbXql=I$VD)r3O)jb_ z-w|L8BNh$fJLuci8p*fNS}wi1^}nw8JA+e*#>it4P~Ub7ei?+-a+sX$5ex`TYY_VI znmq>}Yj6*&A>v_`JEd+$8pH{E2OS~O1ZSj8TSo>hA~ywtIB|x@rls|?r`JeSpr5LF zevE>wWs=WmNsQ#OV8-XqRzKSijn~1t|GkuNEC(FZU7z)QPWy$+_IX{WvpZvo#kIo` zsNP?y9lu+f>JBrW>>diD^_cee^CjUrV;LvPO;wf2{4Bc8@v+w?xiZ(IiWfWiP;;Ys zPK>=J9atZn5qWD6A=9BhTKtK;$`puaoHH%ReN2wl_~yu7MS_w4ytjVA|Ham-iC+K& z*7^C{8J}}hW;zB@f2%7;$E!^(j5b_U7{=z5Jp9qyonUQziZqZX;^%B!poOG21?PD= zckit&;tn~cgUz0*Cj2WewT}|ARip)%K{S{szLoFk&aDI3A>Q%1(>9Ytr1@ZAY*V1< z&)S>K4I$3~-Zuq4gmib=AV4m7)*vaiTfO%;Z2c~xy)p^jQ{PPmSs4O2F?~j*jTc>?9EPH_DfQN)e|8(czbQ&`$m% zzg6DtID7l83dx`BbA4^xBv;_EOap~LtUfiyVxth;017!E1(n@Y+{3NC4ppz27~+t+ zw*XEj7n_-it%#&uRFs2^*;hI2gmAL?HXa4Xf>nR`H1gWbPC5h|W%&k_Tl!*i7rN?2)^5)g!vy6Mt2y>z2;KPUIb1G(%^KdEh~0!HAVNViRa) z>2cW?jJ2D7;RWK57B_uy>nk8)Gx=&qClp#n<|nfLZ2?;M1JnoGB}8xm`Nd=yJH{}I zDMQQB9{vb>X3kimPY2~MJ9Ll;#M9nrg;4Ly^Au(sXki|Tx?>-e%d3SJ;Hc;g{Yp7-!Py=&Og8!Rl7)40+dI>$Zn4I60(BG2e4mVx znoCPG3WOyMy93g4YhH|?dZB%;RZaszo+4W_HN!@s&!|S%#e^*Rjc}r$nR=X^^(~rT z$aeYjBea~HlADA;cRg06@8pZV755*C>Rrs8t5f0YRSJJ2i6egGXw1y130odgeC0XZ zM~U)jVW^E%WTykeO?~zTZA3G>3Opve&nSlbpiW?Y2uFs#Qi>Uz0|3L z4wRc2nSSqC!#RBj%StTmcXxF`8dnSVF;nPMm0Ai8+lQRV4I*B5RwD;3`zCgj%#7O9 zFytcPLT%W2Tu>?Aa{iw(s}4X@EEAB3;J|Fw`U6AKAfvs95wnz$~tng6ek%@YXVzY+A zVXTL99j8+Rb8+#rrW#aqrXn{--W?z|V;}R->_oLJ=ceycv{@BS>w=PaydgpGn5n08 zsMowz;ucE64!^Lxe-w6!x3tp}wjwI&raYJH**8u^LvrlPThtIx?pxGcH|6{?KG;ib zLI)piZcwEfU{yhtNh#j6E3KmzAu_a!u1ig${vfhk7kFOHQRp}a+32)h{i}-S5>%|U zhzu_Ff^yKjXSwa~dA3uP}~HBOayp2mGr~1VC1) za)LCai{8Lur}&{@)jtYkv!T1-9(9}g>E!`!PJbPp{b1FgRs%(_`ed7}W3kRiAr&1D zGNU!jz%Z*DJ5P$Qdz!*PWlS|;x133!qYx|aGgmwGY}iYiGTfx&tu$Jx0Tb3C!xWb4 zr^hWxgow8v3^>5-ZRHhee^H;r2H8C*0f8xfSpzIxvz9UIN_r#*I-RWA!kCq-VtFPs z*P$A!VPre-7!WTX;G}aH!}ZJ7SlmQzztW&%P*-6S4=iHPi1zQz>EL8uHnsPN9$1v% zf5zye_f$c+9`5~(#2E(H-28IC%jZ#r`i{agzPQWaW5KK?#t{c=8V0)i?WVD^HpdI4 z%n&r0PoAJ!S1rZTDsBPf?4|n2Fu!`DFaWgzp$onM{>i%5QsB{%FbMgNbtr3MijwV% zO~F7t=HsSVDDKP31P@imI%v}CwVUF6_S(o0)OlTSBci&LFR#_V`Oo!-01;JPBX!S8 z@QJNvWTx_nVVGH}=$K;gD9Bq@@X^7MMYMUP$v(GL9gzLfX_5s+<|OV4 Omu9}l*!BN=`TZ|88*5$w literal 0 HcmV?d00001 diff --git a/themes/pybcn_theme/assets/images/photos/group-pyday-2016.jpg b/themes/pybcn_theme/assets/images/photos/group-pyday-2016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..891987029541fcea7eb17d084adc92b63f3bf938 GIT binary patch literal 212350 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 sMK45(u_f02OpP`KI1DxnlTs=N``3X9Pr{UoV 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 Date: Sun, 18 Oct 2026 11:58:39 +0200 Subject: [PATCH 05/16] Filter the listings, and read a row the same way on every page /talks/ and /people/ hold 607 and 371 rows, and the only thing above them was a legend that counted what was there. The legend is a filter now, one sub-page per type and per role, with no JavaScript: the pages come from a content adapter, the rows from the one cached walk the listings already do, and the tab of the page you are on says so with aria-current. 398 talks, 172 workshops, 27 lightning talks, 7 keynotes, and 3 panels; the board, the committee, 23 organizers, 356 speakers, 10 mentors, 8 collaborators, and 1 volunteer. The role tabs read biggest first, because the bar is a way into the list and not a hierarchy of the association. /people/role/assistants/ answers the question nobody had asked out loud: the association never recorded who came to an event, and the page says so. The archive holds the people a programme, a board page, or a credit names, and an attendee is on no such list. /organizers/ keeps its grid of faces, with the photograph in a circle and in colour, and the modal behind each face is gone: it repeated the page of the person, which is the one place that holds the detail. That was an open defect since 2026-10-06. Every role carries its glyph on /people/, as it already did on the page of a person. The event cell of /talks/ carries the emoji of its event, the one /events/ draws. The trail of a listing names its parent inside the h1, as in "People:" and then the name of the person, with the colon and no underline until the pointer is on it. A filter page prints no trail, so "Talks: Talks" cannot happen, and a title that ends in a parenthesis takes no second one. The venue of a row has no hover: it carried the string of the source whenever it said more than the short name, and what it said was the noise the short name exists to remove. The caption under each listing is gone as well, on every one of them: it said the order and the grouping, which the first columns say by themselves. The schedule of an event reads on a phone, which it did not: the grid was written into the page body by the template and could not reflow. The gallery stays inside the screen between 992px and 1,200px. The reading column follows the window instead of stepping out at every Bootstrap breakpoint. --- content/people/_content.gotmpl | 157 ++++++++ content/people/_index.md | 2 +- content/people/juan-gonzales-vallinas.md | 4 - content/people/juan-gonzalez-vallinas.md | 4 - content/talks/_content.gotmpl | 52 +++ layouts/partials/friends.html | 75 ++++ themes/pybcn_theme/assets/scss/agenda.scss | 54 +++ themes/pybcn_theme/assets/scss/event.scss | 40 +- .../assets/scss/listing_table.scss | 35 +- themes/pybcn_theme/assets/scss/people.scss | 65 +-- .../pybcn_theme/assets/scss/people_index.scss | 70 +++- .../assets/scss/photo_gallery.scss | 57 +-- .../pybcn_theme/layouts/_default/contact.html | 4 +- .../pybcn_theme/layouts/_default/event.html | 81 +++- .../layouts/_default/events_index.html | 242 ++--------- .../pybcn_theme/layouts/_default/meetup.html | 35 +- themes/pybcn_theme/layouts/index.llms.txt | 2 +- .../pybcn_theme/layouts/partials/agenda.html | 16 +- .../layouts/partials/canonical_photos.html | 71 ++++ .../layouts/partials/event_row.html | 132 ++++++ .../layouts/partials/event_table.html | 100 +++++ .../layouts/partials/event_types.html | 5 +- .../layouts/partials/facts_box.html | 47 ++- .../layouts/partials/filter_tabs.html | 56 +++ .../layouts/partials/listing_counts.html | 5 +- .../layouts/partials/listing_total.html | 27 ++ .../layouts/partials/marker_legend.html | 10 +- .../layouts/partials/people-grid.html | 13 +- .../layouts/partials/people_index.html | 169 ++++++++ .../layouts/partials/people_letters.html | 77 ++++ .../layouts/partials/people_tabs.html | 88 ++++ .../layouts/partials/person_appearances.html | 37 +- .../layouts/partials/person_row.html | 116 ++++++ .../layouts/partials/person_talks_index.html | 6 +- .../layouts/partials/photo_gallery.html | 68 ++-- .../layouts/partials/role_order.html | 18 +- .../layouts/partials/talk_pages_index.html | 6 + .../layouts/partials/talks_index.html | 148 +++++++ .../layouts/partials/talks_table.html | 187 +++++++++ .../layouts/partials/talks_tabs.html | 54 +++ .../layouts/partials/video_frame.html | 18 +- themes/pybcn_theme/layouts/people/list.html | 376 ++---------------- themes/pybcn_theme/layouts/people/role.html | 40 ++ themes/pybcn_theme/layouts/talks/list.html | 292 +------------- themes/pybcn_theme/layouts/talks/single.html | 61 ++- .../pybcn_theme/layouts/talks/talk_type.html | 32 ++ 46 files changed, 2211 insertions(+), 1043 deletions(-) create mode 100644 content/people/_content.gotmpl delete mode 100644 content/people/juan-gonzales-vallinas.md delete mode 100644 content/people/juan-gonzalez-vallinas.md create mode 100644 layouts/partials/friends.html create mode 100644 themes/pybcn_theme/layouts/partials/canonical_photos.html create mode 100644 themes/pybcn_theme/layouts/partials/event_row.html create mode 100644 themes/pybcn_theme/layouts/partials/event_table.html create mode 100644 themes/pybcn_theme/layouts/partials/filter_tabs.html create mode 100644 themes/pybcn_theme/layouts/partials/people_index.html create mode 100644 themes/pybcn_theme/layouts/partials/people_letters.html create mode 100644 themes/pybcn_theme/layouts/partials/people_tabs.html create mode 100644 themes/pybcn_theme/layouts/partials/person_row.html create mode 100644 themes/pybcn_theme/layouts/partials/talks_index.html create mode 100644 themes/pybcn_theme/layouts/partials/talks_table.html create mode 100644 themes/pybcn_theme/layouts/partials/talks_tabs.html create mode 100644 themes/pybcn_theme/layouts/people/role.html create mode 100644 themes/pybcn_theme/layouts/talks/talk_type.html diff --git a/content/people/_content.gotmpl b/content/people/_content.gotmpl new file mode 100644 index 000000000..41fcc3227 --- /dev/null +++ b/content/people/_content.gotmpl @@ -0,0 +1,157 @@ +{{- /* + One page per role, built from the pages that credit people. + + /people/ lists every person the archive credits and offers a tab per + role above the list (see partials/people_tabs.html), and each tab is a + page of its own that lists only the people who hold that role: + + /people/role/speaker/ + /people/role/permanent-committee/ + + The filter is sub-pages and not JavaScript, as on /talks/, and each + one carries its emoji. A role is not + in the front matter of a person: AGENTS.md says never to store one + that can be computed, and partials/appearances_index.html computes + them at render time from the pages that list the person under a + heading and from the talks that credit the person. A content adapter + runs before the pages exist and cannot read that index (site.Pages is + not available yet, see content/talks/_content.gotmpl), so this one + reads the same front matter from disk and resolves the same headings + the same way: the level name or the section title of a people_sections + block, the level name of a people_levels block, and "Speakers" for the + speakers of a talks block, each through data/roles.yaml, which turns + "Speakers" into "Speaker". The set of labels this gives is the set the + index gives, because both read one rule from one table; the layout then + picks the rows of a label from the index, so the pages this adapter + adds and the rows those pages hold cannot name a role differently. + + A page exists only for a label that at least one person holds: a + heading with no id under it, and a talks block with no speaker, add + nothing. A draft page is skipped as the index skips it, so a server + run with -D adds no role for the fixture of content/canary.md. + + The path segment is the label through urlize, "Permanent Committee" + to permanent-committee and "Former Management Board (2018 - 2025)" to + former-management-board-2018-2025, under one directory, role/, so a + segment can never collide with a person id, which is firstname-surname. + The page carries the label as params.filter, which is how every walker + of the people section tells a listing from a person (a person has an + id, a listing has a filter), and how layouts/people/role.html knows + which rows to keep. No page of this section is a record: the layouts + that read the records skip a page with no id already. + + The walk covers content/ and two levels of directories under it, which + is the shape of the tree: content/canary.md, content/ + {{- end }} + + {{- /* About us: the faces of the people who run the + association, linked to the page that lists them. The + home page had no link to /organizers/ at all: the page is the + present of the association and the four tiles above are + its past, so it reads here, over the ways of taking + part, and not inside the Archive. + The people and their order are the ones of + content/pybcn_association/organizers.md, read through + its own front matter so the two pages cannot disagree. + Only the two bodies that run the association, the board + and the committee, which that file marks with + home_faces: the collaborators and the former board are + on the page the line below leads to. The file says which groups and not this + layout, so the year in the name of the board can change + without a template edit. The photograph is the + square of partials/image_square.html at 64px, the one + /people/ draws at 48 and the card of the organizers + page at 400, so the pipeline writes one more size of a + file it already has. Every face is lazy, because the + block is far below the fold. A person with no + photograph takes the initials of the rows of /people/, + through partials/person_placeholder.html. */ -}} + {{- with site.GetPage "/pybcn_association/organizers" }} + {{- $organizers := slice -}} + {{- $seen := dict -}} + {{- range .Params.people_levels -}} + {{- if not .home_faces }}{{ continue }}{{ end -}} + {{- range .people -}} + {{- $id := . -}} + {{- if reflect.IsMap . }}{{ $id = .id }}{{ end -}} + {{- /* One face per person, in the order of the page. + Two of them sit in two groups there, the former + president among the collaborators, and a face + printed twice in one row reads as a mistake. */ -}} + {{- if index $seen $id }}{{ continue }}{{ end -}} + {{- $seen = merge $seen (dict $id true) -}} + {{- with site.GetPage (printf "/people/%s" $id) -}} + {{- $organizers = $organizers | append . -}} + {{- end -}} + {{- end -}} + {{- end -}} +
    +
    +

    About us

    +

    A non-profit run by volunteers. These are the people behind it.

    +
    + +
    + {{- end }} + + {{- /* The four calls to action, two to a row, the icon at the + left. What the membership box says is what + content/pybcn_association/membership.md says a member + gets: the fee, a voice and a vote in the general + assembly. The venues, the pizza, and the PyDay are paid + by the sponsors, so no box says the fee pays them. */ -}} + {{- $boxes := slice + (dict "path" "/pybcn_association/membership" "icon" "fa-sign-in-alt" "text" "Join the association: 20 euros a year, and a voice and a vote in the general assembly.") + (dict "path" "/pybcn_association/organize-with-us" "icon" "fa-calendar-day" "text" "Help us run a meetup, or ask us to help with yours.") + (dict "path" "/pybcn_association/propose-a-talk" "icon" "fa-comment" "text" "Twenty minutes on something you built, learnt, or broke.") + (dict "path" "/contact" "icon" "fa-envelope" "text" "A question, an idea, a venue to offer: write to us.") -}} +
    +
    +

    Take part

    +
    +
      + {{- range $boxes }} + {{- $box := . }} + {{- with site.GetPage .path }} +
    • + + + + {{ .Title }} + {{ $box.text }} + + +
    • + {{- else }}{{ errorf "home: the page %q is missing" $box.path }}{{ end }} + {{- end }} +
    +
    + + {{- /* The friends: the first four of partials/friends.html, so + the line is exactly four from xl (the second review). + The fifth, the Python Software Foundation, stays in the + data and is not drawn. The logo is the height of two + lines, 56px, with the name and the line under it at its + right, the whole card the link. The mark is drawn here + and not through a partial of its own: a raster is + resized to 56px tall, and to + 112px for a 2x screen when the file has the pixels; an + SVG goes through untouched. The four marks are square, + so the slot is square too. */ -}} + {{- $friends := first 4 (partial "friends.html") -}} +
    +
    +

    Our friends

    +
    + +
    {{ end }} diff --git a/themes/pybcn_theme/layouts/partials/footer.html b/themes/pybcn_theme/layouts/partials/footer.html index 654941cbc..8cc1acf66 100644 --- a/themes/pybcn_theme/layouts/partials/footer.html +++ b/themes/pybcn_theme/layouts/partials/footer.html @@ -1,37 +1,102 @@ -{{ block "footer" . }} -
    /.md, + and content/events//.md. A directory nested deeper + logs a warning rather than losing its headings in silence. The front + matter is read as the talks adapter reads it, through + resources.FromString with a name so that transform.Unmarshal knows the + format; the name here is the path of the file under content/, which is + unique, where two sections both hold a job-offers.md. + + One more page, Assistants, which no label gives: /people/role/assistants/ + answers the question a reader of the other tabs asks next, who came, + and the answer is that the association never recorded it. The tab + exists to say so. It is the data policy of the + archive told as a joke: a programme, a board page, or a credit names + the people who spoke, organized, mentored, or collaborated, and an + attendee is on no such list. The one figure that exists is the count + of Meetup RSVPs, which the page of a meetup prints as registrations + and never as attendance (AGENTS.md: RSVPs are not attendance). The + page carries its text as content and the same filter param as the + others, so partials/people_tabs.html lists it from the pages like any + other view, with no count because there is no number to print, and + layouts/people/role.html prints the text where /people/ prints its + intro and no empty bar of letters under it. +*/ -}} +{{- $root := "content" -}} + +{{- /* The files to read: every markdown file of content/ and of the + directories two levels under it. */ -}} +{{- $files := slice -}} +{{- range $entry := os.ReadDir $root -}} + {{- $here := path.Join $root $entry.Name -}} + {{- if not $entry.IsDir -}} + {{- $files = $files | append $here -}} + {{- continue -}} + {{- end -}} + {{- range $child := os.ReadDir $here -}} + {{- $there := path.Join $here $child.Name -}} + {{- if not $child.IsDir -}} + {{- $files = $files | append $there -}} + {{- continue -}} + {{- end -}} + {{- range $leaf := os.ReadDir $there -}} + {{- if $leaf.IsDir -}} + {{- warnf "people adapter: %q is nested deeper than this walk reads, so any role in it gets no page." (path.Join $there $leaf.Name) -}} + {{- else -}} + {{- $files = $files | append (path.Join $there $leaf.Name) -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- /* The labels at least one person holds, as a set. */ -}} +{{- $labels := dict -}} +{{- range $file := $files -}} + {{- if ne (path.Ext $file) ".md" }}{{ continue }}{{ end -}} + {{- $raw := os.ReadFile $file -}} + {{- if not (hasPrefix $raw "---") }}{{ continue }}{{ end -}} + {{- $front := strings.TrimPrefix "---" (index (split $raw "\n---") 0) -}} + {{- $name := printf "people-roles/%s.yaml" (strings.TrimSuffix ".md" (strings.TrimPrefix "content/" $file)) -}} + {{- $page := resources.FromString $name $front | transform.Unmarshal -}} + {{- if $page.draft }}{{ continue }}{{ end -}} + {{- /* The headings of the page that list at least one person. */ -}} + {{- $headings := slice -}} + {{- range $section := $page.people_sections -}} + {{- range $level := $section.levels -}} + {{- with $level.people }}{{ $headings = $headings | append (default $section.title $level.name) }}{{ end -}} + {{- end -}} + {{- end -}} + {{- range $level := $page.people_levels -}} + {{- with $level.people }}{{ $headings = $headings | append $level.name }}{{ end -}} + {{- end -}} + {{- range $talk := $page.talks -}} + {{- with $talk.speakers }}{{ $headings = $headings | append "Speakers" }}{{ end -}} + {{- end -}} + {{- range $heading := $headings -}} + {{- if not $heading }}{{ continue }}{{ end -}} + {{- $label := default $heading (index site.Data.roles $heading) -}} + {{- $labels = merge $labels (dict $label true) -}} + {{- end -}} +{{- end -}} + +{{- /* The page of each label, in the order of the labels, so two builds + add the pages in one order. The title is the label itself, the + words the row of a person prints and the tab reads. */ -}} +{{- range $label, $_ := $labels -}} + {{- /* "Organizers (23)" and not "Organizer (23)": the heading names + what the page holds, which is people. A label that is a group + and not a role ("Permanent Committee", "Management Board + (2026)") is already the name of the thing and is left alone. */ -}} + {{- $title := $label -}} + {{- if not (or (strings.Contains $label " ") (strings.Contains $label "(")) -}} + {{- $title = pluralize $label -}} + {{- end -}} + {{- $.AddPage (dict + "kind" "page" + "path" (printf "role/%s" (urlize $label)) + "title" $title + "layout" "role" + "params" (dict + "filter" $label + "description" (printf "Every person the archive credits as %s, with their roles, their events, and their links." $label))) -}} +{{- end -}} + +{{- $assistants := `## We don't track that! + +The association has never recorded who came to an event. The archive holds the people who spoke, organized, mentored, or collaborated, because a programme, a board page, or a credit names them, and an attendee is on no such list. The one figure that exists is how many people said yes on Meetup, which the page of a meetup prints as registrations: a promise to come, not a seat filled.` -}} +{{- $.AddPage (dict + "kind" "page" + "path" "role/assistants" + "title" "Assistants" + "layout" "role" + "content" (dict "mediaType" "text/markdown" "value" $assistants) + "params" (dict + "filter" "Assistants" + "description" "Who came to an event. The association never recorded it, so the archive holds the people who spoke, organized, mentored, or collaborated, and nobody else.")) -}} diff --git a/content/people/_index.md b/content/people/_index.md index d31a44a52..05ae3bad6 100644 --- a/content/people/_index.md +++ b/content/people/_index.md @@ -5,4 +5,4 @@ menu: "main" weight: 3 --- -Everyone the archive credits, by name. A row holds the roles the person has held, the years they were here, how many talks they gave, and the pages that say so: the programme of a day, its photos, and the page of the board or the committee they sat on. The board and the committee of today are on [the organizers page](/pybcn_association/organizers/), with a photo and a bio each. +Everyone the archive credits, by name. A row holds the roles the person has held, how many events credit them, and the pages that say so: the programme of a day, its photos, and the page of the board or the committee they sat on. The tabs above the list keep one role at a time. The board, the committee, and the collaborators of today are grouped on [the organizers page](/pybcn_association/organizers/). diff --git a/content/people/juan-gonzales-vallinas.md b/content/people/juan-gonzales-vallinas.md deleted file mode 100644 index c081f925c..000000000 --- a/content/people/juan-gonzales-vallinas.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -id: juan-gonzales-vallinas -name: "Juan Gonzales-Vallinas" ---- diff --git a/content/people/juan-gonzalez-vallinas.md b/content/people/juan-gonzalez-vallinas.md deleted file mode 100644 index d8e48e65a..000000000 --- a/content/people/juan-gonzalez-vallinas.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -id: juan-gonzalez-vallinas -name: "Juan González-Vallinas" ---- diff --git a/content/talks/_content.gotmpl b/content/talks/_content.gotmpl index 9c9a8528a..811641d0a 100644 --- a/content/talks/_content.gotmpl +++ b/content/talks/_content.gotmpl @@ -72,6 +72,29 @@ pydatabcn, other_events and meetups, each with its editions. A directory nested deeper logs a warning rather than losing its talks in silence. + + One more page per type of talk. /talks/ lists every row and offers a + tab per type above the table (see partials/talks_tabs.html), and each + tab is a page of its own that lists only the rows of that type: + + /talks/type/workshop/ + /talks/type/lightning/ + + The filter is sub-pages and not JavaScript, so a reader with no script, a crawler, and a link in a message all + reach the same list. A page exists only for a type that at least one + talk of the archive carries: the vocabulary of partials/event_types.html + holds eleven types, and a coffee break is one of them, but no talk is + a coffee break, so /talks/type/coffee/ is not built and no tab names + it. The type of a talk is read here the way partials/listing_counts.html + and partials/event_type_icon.html read it, lower case and trimmed, so + the pages this adapter adds are the types those partials count. The + path segment is the token of the vocabulary and not the noun, because + the token is what the front matter writes and the noun may be + reworded; one directory for all of them, type/, so the segment can + never collide with the base name of an event file. The page carries + the token as params.filter, which is how every walker of the talks + section tells a listing from a talk (they skip a page with a filter), + and how layouts/talks/talk_type.html knows which rows to keep. */ -}} {{- $root := "content/events" -}} @@ -94,6 +117,10 @@ {{- end -}} {{- end -}} +{{- /* The types the talks of the archive carry, as a set, filled by the + loop below and read after it for the pages per type. */ -}} +{{- $types := dict -}} + {{- range $file := $files -}} {{- if ne (path.Ext $file) ".md" }}{{ continue }}{{ end -}} {{- if eq (path.Base $file) "_index.md" }}{{ continue }}{{ end -}} @@ -119,6 +146,9 @@ {{- warnf "talks adapter: a talk of %q has no id, so it gets no page." $file -}} {{- continue -}} {{- end -}} + {{- with $talk.type -}} + {{- $types = merge $types (dict (lower (trim (printf "%v" .) " ")) true) -}} + {{- end -}} {{- $params := dict "talk" $talk.id "event" $path -}} {{- with $talk.title_lang -}} {{- $params = merge $params (dict "title_lang" .) -}} @@ -132,3 +162,25 @@ {{- end -}} {{- end -}} {{- end -}} + +{{- /* The page of each type that has a talk. The title is the plural noun + of the vocabulary with a capital, "Workshops", the words the tab + reads; a token the vocabulary does not hold gets no page, and a + warning, because no row would draw a marker for it either. The + tokens are sorted so that two builds add the pages in one order. */ -}} +{{- $vocabulary := partialCached "event_types.html" "event_types" -}} +{{- range $token, $_ := $types -}} + {{- $entry := index $vocabulary $token -}} + {{- if not $entry -}} + {{- warnf "talks adapter: type %q is not in partials/event_types.html, so it gets no page of its own." $token -}} + {{- continue -}} + {{- end -}} + {{- $.AddPage (dict + "kind" "page" + "path" (printf "type/%s" $token) + "title" (humanize $entry.many) + "layout" "talk_type" + "params" (dict + "filter" $token + "description" (printf "Every %s of every PyBCN event, with its speakers, its photo, its video, and its links." $entry.one))) -}} +{{- end -}} diff --git a/layouts/partials/friends.html b/layouts/partials/friends.html new file mode 100644 index 000000000..ab4fb46aa --- /dev/null +++ b/layouts/partials/friends.html @@ -0,0 +1,75 @@ +{{- /* + The communities this one links to as friends, with the mark of each. + + Argument: none. Returns a slice of dicts: + + name what the link says + url the home page of that community + text one line on what it is + icon the file under images/friends/, the mark of that site + + The mark is the icon of the site itself. Two of the three sites + publish no favicon at + all: bcneng.org and pythongirona.cat answer 404 on every usual path + and declare no icon link, so what is kept here is the logo each one + draws on its own page, which is the mark a reader recognises anyway. + Python España does publish one, and that is the file used. + + The file is in this repository and is never fetched from the other + site. A remote image on a page of ours would tell that site who read + the page, which is the same reason partials/sponsor_summary.html + refuses an external logo URL. + + bcn-engineering.svg their badge, from /images/bcneng_outline.svg + python-girona.webp the pyGi sticker of /pygi.jpeg, cropped to + the mark and scaled to 96px + python-espana.webp their favicon, 1000px scaled to 96px + europython-society.webp + the mark of the EuroPython Society, a copy of + images/sponsors/europython_society.png + (300px square), so the friends and the + sponsors stay two separate sets of files + python-software-foundation.webp + the wordmark of the Python Software + Foundation, a copy of images/sponsors/psf.png + (256x84). The wordmark and not the two-snake + mark, because python-espana.webp is that mark + already and two friends cannot share one + picture + + The two last ones are the EuroPython Society, and the Python + Software Foundation. The text of each is one + line of under fifty characters, so it is two lines at most on a card a + quarter of the container wide (the second review). + + The mark takes the place of the generic external-link glyph of + partials/link_mark.html, which is one glyph per destination: the icon + of the site is that glyph, said better. +*/ -}} +{{- return slice + (dict + "name" "BCN Engineering" + "url" "https://bcneng.org/" + "text" "The software engineers of Barcelona, on Slack." + "icon" "images/friends/bcn-engineering.svg") + (dict + "name" "Python Girona" + "url" "https://pythongirona.cat/" + "text" "The Python user group of Girona." + "icon" "images/friends/python-girona.webp") + (dict + "name" "Python España" + "url" "https://es.python.org/" + "text" "The Spanish Python association, behind PyConES." + "icon" "images/friends/python-espana.webp") + (dict + "name" "EuroPython Society" + "url" "https://www.europython-society.org/" + "text" "The non-profit behind EuroPython." + "icon" "images/friends/europython-society.webp") + (dict + "name" "Python Software Foundation" + "url" "https://www.python.org/psf/" + "text" "The foundation behind Python." + "icon" "images/friends/python-software-foundation.webp") +-}} diff --git a/themes/pybcn_theme/assets/scss/agenda.scss b/themes/pybcn_theme/assets/scss/agenda.scss index a70d5f4fd..3a6e0f76b 100644 --- a/themes/pybcn_theme/assets/scss/agenda.scss +++ b/themes/pybcn_theme/assets/scss/agenda.scss @@ -70,6 +70,10 @@ $blockTimes15: 700,715,730,745,800,815,830,845,900,915,930,945,1000,1015,1030,10 justify-content: start; flex-direction: column; padding: 0.5rem 1rem; + // The column can now be narrower than the longest word in the title + // (minmax(0, 1fr) in agenda.html), so a long one has to break + // rather than push the grid wider than the screen. Issue #212. + overflow-wrap: break-word; /* The fallback for an entry with no colour class. White text on the CSS orange was 1.97:1. #A15C00 is 5.19:1 on white, so an @@ -296,3 +300,53 @@ $blockTimes15: 700,715,730,745,800,815,830,845,900,915,930,945,1000,1015,1030,10 } i.gold { color: #FFD700 } + + +/* + The schedule on a phone. + + The grid has one column per track, each one wide enough for a title, so + on a 360px screen the page was 704px wide and the reader had to drag it + sideways to read anything, including the parts that are not the + schedule. That is issue #212, and it is the page most likely to be + opened on a phone: the schedule of the event you are standing at. + + display: block makes every grid property on the container and on its + children inert, including the grid-template-areas that agenda.html + writes into the page body, so the whole generated block stops applying + without the template having to know about this. What is left is the + source order, which is the order of the agenda in the front matter, + which is the order of the day. Two talks in parallel come one after the + other, which is what a reader on a phone wants anyway. + + The column of times is then wrong twice: it is all of the times before + any of the sessions, because the grid is what interleaved them, and it + is an empty 5rem column. It is hidden, and each session prints its own + hours instead, which agenda.html puts in .event_time for this. +*/ +@media (max-width: 991.98px) { + .scheduleContainer { + display: block; + + .time { + display: none; + } + + .event { + margin-bottom: 0.4rem; + } + } +} + +/* + The hours of a session, printed inside the block. The grid answers the + question with the row the block sits on, so this is for the phone only. +*/ +.event_time { + display: none; + + @media (max-width: 991.98px) { + display: block; + font-weight: 600; + } +} diff --git a/themes/pybcn_theme/assets/scss/event.scss b/themes/pybcn_theme/assets/scss/event.scss index 7ec152865..a4db7a9fb 100644 --- a/themes/pybcn_theme/assets/scss/event.scss +++ b/themes/pybcn_theme/assets/scss/event.scss @@ -7,7 +7,20 @@ // larger than the body text, because it is the first fact of the page. .event_when { font-size: 1.15rem; - color: #51616e; + color: $text-grey; + margin-bottom: 1.2rem; + } + + // How many people came, under the day and reading as part of the same + // first fact, so the two lines do not pull apart. The day keeps the + // gap below both. + .event_when + .event_attendance { + margin-top: -1rem; + } + + .event_attendance { + font-size: 1.15rem; + color: $text-grey; margin-bottom: 1.2rem; } @@ -15,16 +28,37 @@ top:100px; } + // The side index, in the frame of every box of the site: the one + // border and the one radius, which Bootstrap's list group draws in + // its own grey otherwise. .list-group-item { + border-color: $rule-grey; + &.active { background-color: $blue-pybcn; border-color: $blue-pybcn; } } + // A block of the page: the target of the side index, and one step of + // the rhythm. scroll-margin-top clears the fixed navigation when the + // index jumps to it, the way .photo_gallery does; it was 80px of + // padding over 80px of negative margin, which started every block + // above its own first line and left the air between two blocks to + // runs of br elements in the template. The air is $block-gap now, the + // air between two blocks of the home page. .link_anchor { - padding-top: 80px; - margin-top: -80px; + scroll-margin-top: 80px; + margin-bottom: $block-gap; + } + + // The sponsors of the edition sit in the container of their grid, + // which pads them 15px in from the column; the text of the block + // above them reads at the left edge of the column, so the padding + // goes. + #sponsors_grid { + padding-left: 0; + padding-right: 0; } } diff --git a/themes/pybcn_theme/assets/scss/listing_table.scss b/themes/pybcn_theme/assets/scss/listing_table.scss index 86a971fc6..f993f1591 100644 --- a/themes/pybcn_theme/assets/scss/listing_table.scss +++ b/themes/pybcn_theme/assets/scss/listing_table.scss @@ -39,7 +39,7 @@ .listing_caption { caption-side: top; padding: 0 0 0.6rem; - color: #51616e; + color: $text-grey; font-size: 0.9rem; text-align: left; } @@ -82,20 +82,13 @@ } } - // The venue, in italics, the way the columns were asked for, and the - // short name with the full string as its title. The dotted underline - // is the one a browser draws under an abbr with a title, and it says - // the same thing here: there is more on hover. Without it the hover is - // a secret. + // The venue, in italics, as the column is specified. The cell + // used to carry a hover with the string of the source and a dotted + // underline to announce it; both are gone, so there is nothing to + // mark. .event_venue_cell { font-style: italic; - color: #51616e; - } - - .event_venue { - text-decoration: underline dotted; - text-underline-offset: 0.15em; - cursor: help; + color: $text-grey; } // The marker of a talk: the icon of its type, in the box of the @@ -105,7 +98,7 @@ display: inline-block; width: 1.75rem; margin-right: 0.35rem; - color: #51616e; + color: $text-grey; text-align: center; text-indent: 0; vertical-align: middle; @@ -129,7 +122,7 @@ // (partials/person_page_link.html) and read as the title link beside // them does: the link blue at rest, underlined under the pointer. They // were underlined at rest in the grey of the line, so they did not read - // as links and the pointer changed nothing (David Arcos, 2026-10-15). + // as links and the pointer changed nothing. // The "by" is italic and a lighter grey, $icon-grey, 4.68:1 on white, // and the names are upright: the slant is the second mark WCAG 1.4.1 // asks of a link inside a line of text, in place of the underline, and @@ -150,7 +143,7 @@ } .listing_day { - color: #51616e; + color: $text-grey; white-space: nowrap; } @@ -159,7 +152,7 @@ .listing_year, .listing_month { font-weight: 600; - color: #51616e; + color: $text-grey; } } @@ -274,7 +267,7 @@ grid-area: year; margin: 0.6rem 0 0.6rem; padding-bottom: 0.3rem; - border-bottom: 1px solid #dde3e8; + border-bottom: 1px solid $rule-grey; font-size: 1.5rem; color: inherit; } @@ -362,8 +355,8 @@ // column. At 0.8rem and 0.02em it takes 48px. thead th { padding-bottom: 0.4rem; - border-bottom: 2px solid #dde3e8; - color: #51616e; + border-bottom: 2px solid $rule-grey; + color: $text-grey; font-size: 0.8rem; font-weight: 600; text-transform: uppercase; @@ -382,7 +375,7 @@ tbody + tbody tr:first-child th, tbody + tbody tr:first-child td { - border-top: 1px solid #dde3e8; + border-top: 1px solid $rule-grey; } // Three narrow columns take their content width and the title diff --git a/themes/pybcn_theme/assets/scss/people.scss b/themes/pybcn_theme/assets/scss/people.scss index 5920bb335..fdb546b26 100644 --- a/themes/pybcn_theme/assets/scss/people.scss +++ b/themes/pybcn_theme/assets/scss/people.scss @@ -53,11 +53,18 @@ // rule on .person_item still resolves. container-type: inline-size; container-name: person_card; - // One card a row on a phone, whatever the section asks for. This is - // what the old col-md-N classes did: md means the fraction applies - // from 768px up and the slot is full width below it. Four cards a - // row on a 390px screen is 63px of card. - width: 100%; + // Two cards a row on a phone, whatever the section asks for. One + // a row gives a 360px card with a 360px face on a 390px screen, + // which reads as a poster of one person and makes the board four + // screens long. Half of that is 175px, the size the card has on a + // tablet, and the whole board fits on one screen. Below 360px the + // slot goes full width, because two 140px cards leave no room for + // a name like "Alicia Morales Carrasco". + width: 50%; + + @media (max-width: 359.98px) { + width: 100%; + } } // Between the md and lg breakpoints the row is too narrow for the count @@ -104,11 +111,14 @@ width: 100%; - border: 1px solid black; - // No padding on the card itself: the photo has to reach the - // border. The text and the icons below set their own side - // padding. A padding here used to frame the photo in 10px of - // white, which on a card this narrow is a ninth of its width. + // No frame. The photograph is a circle, and a square box drawn + // around a circle is the worst of the two: the corner of a box + // against the arc of a face is what makes a grid of them read + // badly. What tells one card from the next is the space between + // them and the name under each. + border: 0; + // No padding either: the photo is the width of the card, and + // the text and the icons below set their own side padding. padding: 0; // A column, so every card in a row is as tall as the tallest and @@ -127,9 +137,9 @@ // keeps the colours of the card: the name is black at rest and // the PyBCN blue under the pointer or the keyboard, which the // rules of the card below set on the h3, and the link must not - // paint it the link blue over them or underline it. The border - // of the card and the colour photo are the hover and the focus - // signal, so the whole card reads as the target, as it did. + // paint it the link blue over them or underline it. The colour + // photograph and the blue name are the hover and the focus + // signal, so the whole card reads as the target. .person_card_link { display: block; color: inherit; @@ -146,6 +156,12 @@ position: relative; // Keeps the zoom on hover inside the frame. overflow: hidden; + // The circle of the rows of /people/ and of the page of a + // person, which this card borrows. It lives on the box that clips and not on + // the photograph: with the radius on the image, the square + // frame cuts the corners off the circle as it grows on + // hover. + border-radius: 50%; // The photo is cropped to a square by the image pipeline, so // the frame is square because its content is. This used to be @@ -162,11 +178,12 @@ display: block; width: 100%; - // Grey only where the pointer can hover. A touch screen - // has no hover, so the photos stayed grey for good. - @media (hover: hover) { - filter: grayscale(100%); - } + // In colour, at rest, as the rows of /people/ and the + // portrait of a person page are. The photographs used to be grey until + // the pointer was on them, which a touch screen never + // undid, and a grid of grey faces reads as an archive + // of people who left rather than as the board of this + // year. } } @@ -309,12 +326,11 @@ } } - // The border follows the hover and the focus, so the card that - // the pointer or the keyboard is on is obvious at a glance. - &:hover, - &:focus-within { - border-color: $blue-pybcn; - } + // With no border to colour, the hover and the focus are the + // photograph in colour and the name in blue, which the rules + // below and above set. The card has no outline of its own to + // give. + // Keyboard focus shows the colour photo too, because the card holds // two focusable triggers. @@ -325,7 +341,6 @@ transform: scale(1.2); -webkit-transition: -webkit-transform .2s linear; transition: transform .2s linear; - filter: none; } } h3 { diff --git a/themes/pybcn_theme/assets/scss/people_index.scss b/themes/pybcn_theme/assets/scss/people_index.scss index 3acc2a8b1..0dc8e970a 100644 --- a/themes/pybcn_theme/assets/scss/people_index.scss +++ b/themes/pybcn_theme/assets/scss/people_index.scss @@ -9,18 +9,18 @@ // The bar of letters above the list is .jump_bar in main.scss, which // /events/ draws as a bar of years from the same partial. -.people_letter_group { - margin-bottom: 2.5rem; +// A group of rows under its heading: a letter on /people/ and on the page +// of a role (partials/people_letters.html), a board or a committee on the +// organizers pages (layouts/_default/people.html). +.people_group { + margin-bottom: $block-gap; - // The letter is an h2 and reads as a divider, not as a page title, so - // it is smaller than the h2 of the rest of the site and carries a rule - // under it. The level is the outline and the size is the style: the two - // are set apart here the way event.html sets them apart with h2.h1. - .people_letter { - font-size: 1.5rem; - border-bottom: 1px solid #dde3e8; - padding-bottom: 0.3rem; - margin-bottom: 1.2rem; + // The heading is the section title of main.scss, the h2 of every block + // of the site, with its rule under it: a letter is a block of this page + // the way a year is a band of /events/. It was 1.5rem with a rule of its + // own until 2026-10-17. + .people_group_title { + @include section_title; } } @@ -49,7 +49,7 @@ // and the rows below stay where they are. The circle lives here, // on the box that clips, and not on the photograph: with the radius // on the image the square frame cut the corners off the circle as - // it grew, which is what David Arcos saw on 2026-10-15. + // it grew. overflow: hidden; border-radius: 50%; display: flex; @@ -91,9 +91,8 @@ // The zoom is the one the cards of /pybcn_association/organizers/ have // had for years (people.scss): the photograph grows inside its own // frame, which is clipped, so nothing moves on the page and no row - // below is covered. David Arcos asked for that one on 2026-10-15, - // after a first try that hung a 240px copy of the picture under the - // avatar: it read as a popup rather than as a zoom. + // below is covered. A first try hung a 240px copy of the picture + // under the avatar and read as a popup rather than as a zoom. // // The keyboard gets it through the name link of the row, because the // avatar repeats that link and is out of the tab order. prefers @@ -148,6 +147,20 @@ .person_name { font-size: 1.05rem; font-weight: 600; + // A name with no space in it breaks where it has to: a 390px + // window gives the name about 300px, and one row of a -D build + // (the canary of bin/check-rendered) carried a name wider than + // that, which pushed the page to 460px. + overflow-wrap: anywhere; + } + + // The post after the name on the organizers pages, "President", in the + // grey and the size of the sentence under it, so the name stays what + // the eye reads first (layouts/_default/people.html says when it is + // printed). + .person_position { + color: $text-grey; + font-size: 0.9rem; } // The sentence of the second line, "Speaker at 3 events:", in the grey @@ -155,8 +168,20 @@ // count are the markup of the row of the Events table of the person // page, so the two read alike; the count is in the colour of the text, // so the number stands out of the grey line. + // The glyph of a role, in front of the word it marks. Same box as the + // marker of a page below, so the two lines of a row hang alike. + .role_emoji { + display: inline-block; + margin-right: 0.25rem; + font-size: 1rem; + font-style: normal; + font-weight: normal; + line-height: 1; + vertical-align: -0.1em; + } + .person_meta { - color: #51616e; + color: $text-grey; font-size: 0.9rem; strong { @@ -224,12 +249,13 @@ } } -// The letter and the row are both link targets: /people/#M from the bar -// above the list, and /people/#marc-pous from anywhere. The navbar is fixed -// and 105px tall, so without this the target lands under it and the reader -// sees the row before the one they asked for. listing_table.scss does the -// same for a year. -.people_letter, +// The group heading and the row are both link targets: /people/#M from the +// bar above the list, /organizers/#permanent-committee, and +// /people/#marc-pous from anywhere. The navbar is fixed and 105px tall, so +// without this the target lands under it and the reader sees the row +// before the one they asked for. listing_table.scss does the same for a +// year. +.people_group_title, .person_row { scroll-margin-top: 65px; // the shrunk navigation, 61px, plus a little diff --git a/themes/pybcn_theme/assets/scss/photo_gallery.scss b/themes/pybcn_theme/assets/scss/photo_gallery.scss index 0dc5f0b7d..4a73a550f 100644 --- a/themes/pybcn_theme/assets/scss/photo_gallery.scss +++ b/themes/pybcn_theme/assets/scss/photo_gallery.scss @@ -22,30 +22,21 @@ $quote-rule: #ced4da; // 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 +// 675px, and so do the 10 squares and the 15 portraits, so a portrait +// does not come out far taller than the card beside it. 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; -} +// There is no band of colour behind the section, and no rule above it any +// more. The gallery sat on a light grey band, with every card on it, until +// 2026-10-14. Each figure is its own card, on the white of the page, +// and the air between the cards is what separates them. The hr above the +// section went on 2026-10-17: the title of the gallery is the section +// title of main.scss, which draws its own rule, as every block of the +// page does now, and a second rule over it read as a mistake. The gap +// above and below the thread link is in .photo_thread. .photo_gallery { // The gallery is the last section and it is set apart from the @@ -61,9 +52,19 @@ $photo-max-height: 675px; // 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) { + // 1200px is the xl breakpoint of Bootstrap 4, written out because this + // file is compiled without the Bootstrap mixins in scope. It was 992, + // the lg one, and that was too early: margin-left 50% centres the + // section on its containing block, which is the col-md-9 of the page + // and not the window, so between 992px and 1200px the 902px section + // landed off centre and ran past the right edge of the screen. Measured + // on the live site, the event page was 1067px wide on a 992px screen + // and 1083px on a 1024px one, which is the same sideways drag issue + // #212 reports for the schedule, on a different element and at a + // different size. At 1200px the container is 1140px and the breakout + // has the room it was designed for. Below it the gallery stays in the + // reading column, which is what it does on a phone already. + @media (min-width: 1200px) { width: 902px; max-width: calc(100vw - 3rem); margin-left: 50%; @@ -86,6 +87,9 @@ $photo-max-height: 675px; // grid, so a portrait photo and a landscape one sit in the same // column and keep their own shape. margin: 0 0 3rem; + // The frame of every card of the site over the one Bootstrap's + // .card draws: the rule grey and 4px, not rgba black and 0.25rem. + @include site_frame; // 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; @@ -133,7 +137,7 @@ $photo-max-height: 675px; // // 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 + // a narrow window with the border of the card beside it. The gallery // 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 @@ -247,7 +251,12 @@ $photo-max-height: 675px; // was the photographs alone, for the one day of 2026-10-14. .gallery_photos, .gallery_videos { - margin-top: 1.5rem; + margin-top: 0; + } + + // The second subsection stands a block off the first. + .gallery_photos + .gallery_videos { + margin-top: $block-gap; } // The rows of the videos take .talk_rows of talks.scss unchanged; the diff --git a/themes/pybcn_theme/layouts/_default/contact.html b/themes/pybcn_theme/layouts/_default/contact.html index 90734d483..b15a957f5 100644 --- a/themes/pybcn_theme/layouts/_default/contact.html +++ b/themes/pybcn_theme/layouts/_default/contact.html @@ -9,7 +9,7 @@

    PyBCN

    - {{ range $.Site.Params.social_items }} + {{ range sort $.Site.Params.social_items "weight" }} {{ end }}


    @@ -18,7 +18,7 @@

    PyBCN

    PyLadiesBCN

    - {{ range $.Site.Params.social_items_pyladies }} + {{ range sort $.Site.Params.social_items_pyladies "weight" }} {{ end }}

    diff --git a/themes/pybcn_theme/layouts/_default/event.html b/themes/pybcn_theme/layouts/_default/event.html index 404cc3403..e65e1d675 100644 --- a/themes/pybcn_theme/layouts/_default/event.html +++ b/themes/pybcn_theme/layouts/_default/event.html @@ -23,6 +23,15 @@ them there instead). */ -}} {{ $gallery := partialCached "gallery_content.html" . .RelPermalink }} +{{- /* Every block of the column is a link_anchor: the target of the + side index, which event.scss clears off the fixed navigation with + scroll-margin-top, and one block of the rhythm of the page, with + the air of $block-gap under it. The h2 of each block is the + section title of main.scss, the h2 of every other page; the blocks + were spaced by runs of br elements and their h2 took the blue band + of the h1 until 2026-10-17. The body of the page and the free text + sections are page_body, so an h2 or an h3 written in their markdown + takes the same scale. */ -}}
    @@ -59,17 +68,61 @@ PyDay BCN 2016 "15 to 17 September 2016". Hacktoberfest 2018 carries no date and prints no line. */ -}} {{- $when := partial "event_date.html" (dict "date" .Params.date "end_date" .Params.end_date) -}} + {{- /* The record of the edition is what the site search indexes + of this page: the day line below, marked + data-pagefind-body, plus the h1 of the hero + (partials/hero_header.html, which also writes the + kind), plus the captions of the gallery, each at its + figure (partials/photo_gallery.html). The sections of + the page, the programme grid, the sponsors, and the + people grids are out: a talk and a person have pages of + their own, and a name indexed here as well would match + twice. The venue is not printed on this page (the row of + /events/ prints it), so it goes to the search as meta + only, written inline from the front matter: a meta value + is searched and returned with the result, so "Canòdrom" + finds PyDay BCN 2025 with no line added to the page. The + first day is the sort value for "newest first" and gives + the year filter; an edition with no date (Hacktoberfest + 2018) has its year from the front matter and no sort + value, and the newest-first order leaves it out. */ -}} + {{- $sort_date := "" -}} + {{- $year := "" -}} + {{- with $when.start -}} + {{- $sort_date = time.Format "2006-01-02" . -}} + {{- $year = time.Format "2006" . -}} + {{- end -}} + {{- if not $year }}{{ with .Params.year }}{{ $year = printf "%v" . }}{{ end }}{{ end -}} +
    {{- with $when.html }} -

    {{ . }}

    +

    {{ . }}

    {{- end }} + {{- /* How many people came, which is a count and not a + registration: AGENTS.md keeps the two words apart, and + the meetup pages say "Registrations" because an RSVP of + Meetup is an intention. An edition sold its tickets + elsewhere, so the only number it has is the one the + association counted and published on the day. The front + matter carries the figure and, in a comment, where it + was read. A page with no attendees field prints no + line. */ -}} + {{- with .Params.attendees }} + {{- $people := int . }} + {{- if gt $people 0 }} +

    {{ $people }} {{ cond (eq $people 1) "person" "people" }} attended

    + {{- end }} + {{- end }} + {{- with .Params.venue }} + + {{- end }} +
    {{ if .Params.content_columns }}
    {{ end }} {{ if .Content }} - {{ range $section := .Params.free_text_sections }} -