Nächstes Treffen

Pauline stellt Dokumentenautomatisierung mit Python vor, ein kleines Kundentool und die KI-Workflows, mit denen sie es entwickelt hat. Nach rund 20 Minuten zu Architektur und Entwicklungsprozess wollen wir gemeinsam diskutieren, wie man Agentic Engineering im Alltag gut aufsetzt. Bring Deine eigenen Erfahrungen mit.

Programm & Anfahrt

pycgnweb/events.py live
def meeting_dates(count: int = 12) -> Iterator[datetime]:
    """Return iterator yielding datetime instances for next meeting dates.

    Yields *count* items (defaults to twelve).
    """
    return iter(rrule(MONTHLY, byweekday=WE(+2), byhour=19, byminute=0, bysecond=0, count=count))

next(meeting_dates())
datetime.datetime(2026, 10, 14, 19, 0)

Vergangene Treffen

Aus dem Archiv

2026 2 Treffen
2024 1 Treffen
2020 4 Treffen
2019 12 Treffen
2018 12 Treffen
2017 12 Treffen
2016 12 Treffen
2015 12 Treffen
2014 11 Treffen
2013 3 Treffen

Terminvorschau

Die nächsten Termine

  • PyCologne Treffen
  • PyCologne #6
  • PyCologne Treffen
  • PyCologne Treffen
  • PyCologne Treffen
  • PyCologne Treffen
  • PyCologne Treffen
pycgnweb/webapp.py live
def upcoming_events(count: int = 7) -> list[UpcomingEvent]:
    """Die naechsten regulaeren Treffen, Sonderveranstaltungen dazwischen.

    Eine Sonderveranstaltung zaehlt nur bis zum letzten gezeigten Treffen,
    sonst wuerde die Liste beliebig weit in die Zukunft greifen.
    """
    meetings = [
        UpcomingEvent(start=day, title="PyCologne Treffen", url=f"/events/{day:%Y-%m-%d}")
        for day in meeting_dates(count=count)
    ]
    horizon = meetings[-1].start
    specials = [event for event in get_special_events(datetime.now()) if event.start <= horizon]
    return sorted(meetings + specials, key=lambda event: event.start)

[e.title for e in upcoming_events() if e.special]
['PyCologne #6']

Kalender-Abo

Alle Termine als iCalendar-Feed, zum Abonnieren in Apple Calendar, Google Calendar oder Thunderbird. Immer aktuell, inklusive Thema und Ort des jeweiligen Treffens.

Kalender abonnieren (.ics)

pycgnweb/webapp.py live
def _ics_fold(line: str) -> str:
    """Fold a content line to 75 octets per RFC 5545, section 3.1.

    Fortsetzungszeilen beginnen mit einem Leerzeichen, das selbst als
    Oktett zaehlt. Gefaltet wird an Zeichen-, nicht an Byte-Grenzen,
    damit Umlaute nicht mitten in der UTF-8-Sequenz zerreissen.
    """
    parts: list[str] = []
    current = ""
    used = 0
    for char in line:
        size = len(char.encode("utf-8"))
        if used + size > 75:
            parts.append(current)
            current = ""
            used = 1  # das fuehrende Leerzeichen der Fortsetzungszeile
        current += char
        used += size
    parts.append(current)
    return "\r\n ".join(parts)