Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,26 @@ problem somebody else has to find.
the talk and meetup records. Writing them into a person's front matter guarantees
they will eventually contradict the data.

**A programme is two lists, not one.** An event page carries `agenda` (the grid:
`start`, `track_length`, `room`, and either a `talk` id or its own `label` and
`type`), `talks` (the content: `title`, `speaker`, `description`, `language`,
`topic`, `duration_minutes`, `links`), and `rooms` (`id` and `name`). They are
separate because one talk can take several slots, and because a photo of the
gallery links to a talk by id, which a row of a grid cannot give it. The colour
of a block and the end of a slot are computed, not stored: see
`partials/agenda_entry.html`. **A time is always a quoted string.** YAML 1.1
reads an unquoted `9:00` as the integer 540, sexagesimal, so Hugo renders it
right and every Python checker reads a number.

**`language` takes `en`, `es` or `ca`,** or a list of them for a session given in
two. It was free text and carried seven spellings of those three languages,
which is how one page printed both `Catalan` and `Català`. **A list is written
in that order, `en`, `es`, `ca`.** The archive held `[en, es]` once and
`[es, en]` three times for the same pair, and the page printed "English /
Spanish" and "Spanish / English", because `partials/agenda_entry.html` prints
the codes in the order the list gives them. `bin/check-content` rejects any
other order.

**A person attribution requires human verification.** Talk records carry
`source` and `confidence`. **Only a human-verified record may create a person page
or link a speaker name.** A record with `confidence: medium` or `low` renders the
Expand Down Expand Up @@ -184,7 +204,7 @@ The checks, which are what a pull request has to pass:

| Script | What it rejects |
|---|---|
| `bin/check-content` | A broken reference, a photo that is not square, a source far larger than the build asks for, a field that no longer exists |
| `bin/check-content` | A broken reference, a photo that is not square, a source far larger than the build asks for, a field that no longer exists, an `end_date` that is not a date or not later than `date` |
| `bin/check-html-safety` | Dangerous raw HTML in content, with an allowlist for the legitimate embeds |
| `bin/check-rendered` | The same, on the built pages, plus any `http://` URL. Run it against a directory you built, never against `public/` while a dev server is writing there |

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ What each check is for:
| Check | Fails when |
|---|---|
| Build the site | Hugo cannot build, or emits a warning |
| `bin/check-content` | Front matter does not parse, a person `id` does not match its filename, an id is duplicated, a declared photo is missing, an event references a person or sponsor that does not exist, a social URL has the wrong shape, or a field is empty. It warns, without failing, about a photo that is too small or has no colour |
| `bin/check-content` | Front matter does not parse, a person `id` does not match its filename, an id is duplicated, a declared photo is missing, an event references a person or sponsor that does not exist, a social URL has the wrong shape, a field is empty, or an `end_date` is not later than `date`. It warns, without failing, about a photo that is too small or has no colour |
| `bin/check-html-safety` | Content carries raw HTML that turns a content change into script execution, a redirect, a credential prompt, or a page overlay. See [Content safety check](README.md#content-safety-check) |
| `bin/check-rendered` | The built pages carry that same markup, which catches a template that produces it even when no content file does, or they link to anything over `http`. See [Rendered page check](README.md#rendered-page-check) |
| `bin/canon.py --selftest` | The one normalization of imported text stops being idempotent, or changes what it strips |
Expand Down
441 changes: 407 additions & 34 deletions bin/check-content

Large diffs are not rendered by default.

187 changes: 91 additions & 96 deletions content/events/other_events/django_pyladies_2022.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
---
title: "Hands-on Django with PyLadiesBCN (2022)"
year: 2022
# The day of this edition. It is not in the Meetup export: the date comes
# from the X thread of the day, which the posts place on the 11th.
date: 2022-06-11
# The venue of this edition, from the prose of this page: this day was never a Meetup event of either group.
venue: "Canòdrom"
description: "From zero to hero 🤘 Learn how to code your own web application!"
menu:
main:
Expand Down Expand Up @@ -46,8 +51,7 @@ free_text_sections:

- title: Call for Sponsors
id: call_for_sponsors
content: "<center><h3>HELP US CREATE AN UNFORGETTABLE EXPERIENCE!!</h3><br/>
Contact us in pyladies-bcn@googlegroups.com</center>"
content: "<center><h3>HELP US CREATE AN UNFORGETTABLE EXPERIENCE!!</h3><br/></center>"

- title: Registration
id: registration
Expand Down Expand Up @@ -121,102 +125,93 @@ people_sections:
- mireia-alvarez-dominguez


previous_editions:
- name: DjangoGirls workshop in PyDay BCN 2019
url: https://djangogirls.org/en/barcelona/

spansDuration: 30
numTracks: 1
eventTimes: [9:00, 9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 12:30, 13:00, 13:30, 14:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30, 18:00]
events:
- start_time_slot: 9:00
end_time_slot: 9:00
track_length: 1
color: purple
title: "Registration & Welcome"
type: group
location: Room Actes
class: middle

- title: "Hands-on Django"
start_time_slot: 9:30
end_time_slot: 10:30
color: blue
track_length: 1
type: workshop
location: Room Actes


- start_time_slot: 11:00
end_time_slot: 11:00
track_length: 1
color: yellow
title: "Coffee Break"
type: coffee
location: Open-air terrace
class: middle

- title: "Hands-on Django"
start_time_slot: 11:30
end_time_slot: 12:30
color: blue
track_length: 1
type: workshop
location: Room Actes

- start_time_slot: 13:00
end_time_slot: 13:00
track_length: 1
color: red
title: "Lightning talks"
type: talk
location: Room Actes
class: middle

- start_time_slot: 13:30
end_time_slot: 14:00
track_length: 1
color: yellow
title: "Lunch"
type: lunch
location: Open-air terrace
class: middle

- title: "Hands-on Django"
start_time_slot: 14:30
end_time_slot: 15:30
color: blue
track_length: 1
type: workshop
location: Room Actes

- start_time_slot: 16:00
end_time_slot: 16:00
track_length: 1
color: yellow
title: "Coffee Break"
type: coffee
location: Open-air terrace
class: middle

- title: "Hands-on Django"
start_time_slot: 16:30
end_time_slot: 17:30
color: blue
track_length: 1
type: workshop
location: Room Actes

- start_time_slot: 18:00
end_time_slot: 18:00
track_length: 1
color: purple
title: "Closing session & Kahoot"
type: group
location: Room Actes
class: middle


eventTimes: ["9:00", "9:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00"]

# The rooms of this edition, in the order the grid first names them. A room is
# a record with an id because the colour of a block now comes from it: the
# template gives every room of an event one colour of the agenda palette and
# keeps it for the whole day. See partials/agenda_entry.html.
rooms:
- id: room-actes
name: "Room Actes"
- id: open-air-terrace
name: "Open-air terrace"

# The talks of this edition: what was said, by whom, in which language. A talk
# carries no time and no room, because it is the content and not the slot.
# agenda below is what places it on the grid, and one talk can take more than
# one slot. The id is derived from the title and is the anchor a photo of the
# gallery links to, so it must not change.
talks:
- id: hands-on-django
title: "Hands-on Django"
type: workshop
duration_minutes: 60
- id: lightning-talks
title: "Lightning talks"
type: talk
duration_minutes: 0

# The grid, one row per slot of the day, in the order it is printed. A slot
# names the talk it holds, or carries its own label and type when it holds
# none: a break, the group photo, the welcome. The level and the requirements
# sit here and not on the talk, because they are what the slot asks of whoever
# walks into it. A start is always quoted: YAML 1.1 reads an unquoted 9:00 as
# the integer 540.
agenda:
- start: "9:00"
track_length: 1
room: room-actes
type: group
label: "Registration & Welcome"
duration_minutes: 0
- start: "9:30"
track_length: 1
room: room-actes
talk: hands-on-django
- start: "11:00"
track_length: 1
room: open-air-terrace
type: coffee
label: "Coffee Break"
duration_minutes: 0
- start: "11:30"
track_length: 1
room: room-actes
talk: hands-on-django
- start: "13:00"
track_length: 1
room: room-actes
talk: lightning-talks
- start: "13:30"
track_length: 1
room: open-air-terrace
type: lunch
label: "Lunch"
duration_minutes: 30
- start: "14:30"
track_length: 1
room: room-actes
talk: hands-on-django
- start: "16:00"
track_length: 1
room: open-air-terrace
type: coffee
label: "Coffee Break"
duration_minutes: 0
- start: "16:30"
track_length: 1
room: room-actes
talk: hands-on-django
- start: "18:00"
track_length: 1
room: room-actes
type: group
label: "Closing session & Kahoot"
duration_minutes: 0

---

Do you want to learn how to code your own web application? In this workshop for non-experienced women and LGBTIQ+ people, organised by PyLadiesBCN, **we'll learn how to code our own blog with Django** using HTML, CSS and Python.
Expand Down
31 changes: 30 additions & 1 deletion content/events/other_events/hacktoberfest_2018.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,39 @@
---
title: "Hacktoberfest (2018)"
year: 2018
description: ""
# The day, the venue, and the organizers come from the frozen copy of the
# site of the day, static/archives/hacktoberfestbarcelona.com/, which the
# menu entry below already points at. Its title line reads "Hacktoberfest
# BCN | 21 October 2018, Barcelona", and the page names Kernel Analytics
# at Balmes 89 as the place and the four people below as the organizers.
# An earlier comment here said no source gave the day. It was wrong: the
# source was the page this one links to.
heroBackground: /archives/hacktoberfestbarcelona.com/images/backgrounds/bg7.jpg
layout: event
date: 2018-10-21
venue: "Kernel Analytics"
description: "Hacktoberfest is an annual event across the world to encourage developers to contribute to open source projects. Join us, give back to open source and meet fellow open source enthusiasts."

# No agenda, on purpose. The frozen page lists hours (a welcome talk and
# breakfast at 10.00, project pitches at 10.15, a tutorial for beginners
# at 10.30, and work from 10.45) but names no speaker and no talk. Writing
# that as a programme would invent a grid the day did not have, so the
# frozen page keeps it and this one links there.
people_sections:
- title: Organizers
id: organizers
levels:
- people_per_line: 4
people:
- giorgio-polvara
- ignasi-fosch
- israel-saeta-perez
- laura-perez-mayos
menu:
main:
parent: 'Other events'
url: https://pybcn.org/archives/hacktoberfestbarcelona.com/
weight: 2
---

The site of the day is kept frozen in this repository, with the full agenda, the sponsors, and the frequently asked questions as they were published: [Hacktoberfest BCN 2018](/archives/hacktoberfestbarcelona.com/).
Loading
Loading