Changeset - 5f01790f40fc
pinaxcon/middleware.py
Show inline comments
 
import re
 
import warnings
 

	
 
from django import http
 
from django.conf import settings
 
from django.utils.deprecation import MiddlewareMixin
 

	
 
class CanonicalHostMiddleware(MiddlewareMixin):
 
    """ Redirects to a canonical host if the current host is not the canonical
 
    host. """
 

	
 
    response_redirect_class = http.HttpResponsePermanentRedirect
 

	
 
    def process_request(self, request):
 

	
 
        canonical_host = getattr(settings, "CANONICAL_HOST", None)
 

	
 
        if not canonical_host:
 
            return
 

	
 
        host = request.get_host()
 

	
 
        if host == canonical_host:
 
            return
 

	
 
        path = request.get_full_path()
 
        redirect_url = ('%s://%s%s' % (request.scheme, canonical_host, path))
 
        return self.response_redirect_class(redirect_url)
 

	
 

	
 
class UnprependWWWMiddleware(MiddlewareMixin):
 
    """ Unprepends www if necessary. """
 

	
 
    response_redirect_class = http.HttpResponsePermanentRedirect
 

	
 
    def process_request(self, request):
 
        """
 
        Rewrite the URL based on settings.UNPREPEND_WWW
 
        """
 

	
 
        unprepend_www = getattr(settings, "UNPREPEND_WWW", False)
 

	
 
        if not unprepend_www:
 
            return
 

	
 
        # Check for a redirect based on settings.UNPREPEND_WWW
 
        host = request.get_host()
 
        must_unprepend = unprepend_www and host and host.lower().startswith('www.')
 
        wwwless_host = host[4:]
 
        redirect_url = ('%s://%s' % (request.scheme, wwwless_host)) if must_unprepend else ''
 

	
 
        path = request.get_full_path()
 

	
 
        # Return a redirect if necessary
 
        if redirect_url or path != request.get_full_path():
 
            redirect_url += path
 
            return self.response_redirect_class(redirect_url)
pinaxcon/settings.py
Show inline comments
 
import os
 
import dj_database_url
 

	
 

	
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
 
BASE_DIR = PACKAGE_ROOT
 

	
 
DEBUG = bool(int(os.environ.get("DEBUG", "1")))
 

	
 
DATABASES = {
 
    "default": {
 
        "ENGINE": "django.db.backends.sqlite3",
 
        "NAME": os.path.join(PROJECT_ROOT, "dev.db"),
 
    }
 
}
 

	
 
UNPREPEND_WWW = bool(os.environ.get("DJANGO_UNPREPEND_WWW", False))
 

	
 
# HEROKU: Update database configuration with $DATABASE_URL.
 
import dj_database_url
 
db_from_env = dj_database_url.config()
 
DATABASES['default'].update(db_from_env)
 

	
 
ALLOWED_HOSTS = [".localhost", ".herokuapp.com", ".northbaypython.org"]
 
CANONICAL_HOST = os.environ.get("DJANGO_CANONICAL_HOST", None)
 

	
 
# If DEFAULT_FROM_EMAIL is not set, email will most likely break in prod.
 
from_email = os.environ.get("DJANGO_DEFAULT_FROM_EMAIL", None)
 
if from_email is not None:
 
    DEFAULT_FROM_EMAIL = from_email
 

	
 
# Local time zone for this installation. Choices can be found here:
 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
 
# although not all choices may be available on all operating systems.
 
# On Unix systems, a value of None will cause Django to use the same
 
# timezone as the operating system.
 
# If running in a Windows environment this must be set to the same as your
 
# system time zone.
 
TIME_ZONE = os.environ.get("TZ", "America/Los_Angeles")
 

	
 

	
 
# Set the email address that will receive errors.
 
admin_email = os.environ.get("DJANGO_ADMIN_EMAIL", None)
 
if admin_email is not None:
 
    ADMINS = ("Webmaster", admin_email)
 

	
 

	
 
# Use SSLRedirectMiddleware
 
SSL_ON = os.environ.get("DJANGO_SSL_ON", True)
 
SSL_ALWAYS = os.environ.get("DJANGO_SSL_ALWAYS", False)
 

	
 
# Language code for this installation. All choices can be found here:
 
# http://www.i18nguy.com/unicode/language-identifiers.html
 
LANGUAGE_CODE = "en-us"
 

	
 
SITE_ID = int(os.environ.get("SITE_ID", 1))
 

	
 
# If you set this to False, Django will make some optimizations so as not
 
# to load the internationalization machinery.
 
USE_I18N = True
 

	
 
# If you set this to False, Django will not format dates, numbers and
 
# calendars according to the current locale.
 
USE_L10N = True
 

	
 
# If you set this to False, Django will not use timezone-aware datetimes.
 
USE_TZ = True
 

	
 
# Absolute filesystem path to the directory that will hold user-uploaded files.
 
# Example: "/home/media/media.lawrence.com/media/"
 
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
 

	
 
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
...
 
@@ -100,98 +101,98 @@ STATICFILES_FINDERS = [
 

	
 

	
 
# Amazon S3 setup
 
DEFAULT_FILE_STORAGE = os.environ.get("DJANGO_DEFAULT_FILE_STORAGE", 'django.core.files.storage.FileSystemStorage') # noqa
 
AWS_ACCESS_KEY_ID = os.environ.get("DJANGO_AWS_ACCESS_KEY_ID", None)
 
AWS_SECRET_ACCESS_KEY = os.environ.get("DJANGO_AWS_SECRET_ACCESS_KEY", None)
 
AWS_STORAGE_BUCKET_NAME = os.environ.get("DJANGO_AWS_STORAGE_BUCKET_NAME", None)
 

	
 

	
 
# Make this unique, and don't share it with anybody.
 
SECRET_KEY = "6r&z0i#!k-thu4nv^zzx!f$fbp(&#2i5mq_^%%@ihu_qxxotl_"
 

	
 
TEMPLATES = [
 
    {
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 
        "DIRS": [
 
            os.path.join(PACKAGE_ROOT, "templates"),
 
        ],
 
        "APP_DIRS": True,
 
        "OPTIONS": {
 
            "debug": DEBUG,
 
            "context_processors": [
 
                "django.contrib.auth.context_processors.auth",
 
                "django.template.context_processors.debug",
 
                "django.template.context_processors.i18n",
 
                "django.template.context_processors.media",
 
                "django.template.context_processors.static",
 
                "django.template.context_processors.tz",
 
                "django.template.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "account.context_processors.account",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
            ],
 
        },
 
    },
 
]
 

	
 
MIDDLEWARE_CLASSES = [
 
    "django.contrib.sessions.middleware.SessionMiddleware",
 
    "django.middleware.common.CommonMiddleware",
 
    "django.middleware.csrf.CsrfViewMiddleware",
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
 
    "reversion.middleware.RevisionMiddleware",
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
 
    "ssl_redirect.middleware.SSLRedirectMiddleware",
 
    "pinaxcon.middleware.CanonicalHostMiddleware",
 
    "pinaxcon.middleware.UnprependWWWMiddleware",
 

	
 
]
 

	
 
ROOT_URLCONF = "pinaxcon.urls"
 

	
 
# Python dotted path to the WSGI application used by Django's runserver.
 
WSGI_APPLICATION = "pinaxcon.wsgi.application"
 

	
 
INSTALLED_APPS = [
 
    "django.contrib.admin",
 
    "django.contrib.auth",
 
    "django.contrib.contenttypes",
 
    "django.contrib.messages",
 
    "django.contrib.sessions",
 
    "django.contrib.sites",
 
    "django.contrib.staticfiles",
 

	
 
    # theme
 
    "bootstrapform",
 
    "pinax_theme_bootstrap",
 

	
 
    # external
 
    "account",
 
    "easy_thumbnails",
 
    "taggit",
 
    "reversion",
 
    "metron",
 
    "sitetree",
 
    "pinax.boxes",
 
    "pinax.eventlog",
 
    "pinax.pages",
 
    "markdown_deux",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.sponsorship",
 
    "symposion.teams",
 

	
 
    # Registrasion
 
    "registrasion",
 
    "symposion_templates",
 

	
 
    # Registrasion-stipe
 
    "pinax.stripe",
pinaxcon/templates/_default_sidebar.html
Show inline comments
 
{% load sponsorship_tags %}
 
{% load thumbnail %}
 
{% load pinax_boxes_tags %}
 

	
 
{% sponsor_levels as levels %}
 

	
 
<h3>Sponsors</h3>
 

	
 
<div class="sponsor-list">
 
    {% for level in levels %}
 
        {% if level.sponsors %}
 

	
 
          <h4>{{ level.name }}</h4>
 

	
 
          {% for sponsor in level.sponsors %}
 
              <div>
 
                  {% if sponsor.website_logo %}
 
                      <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">
 
                      <a href="{{ sponsor.external_url }}">
 
                          <img src="{% thumbnail sponsor.website_logo '600x360' %}" alt="{{ sponsor.name }}">
 
                      </a>
 
                  {% else %}
 
                      <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">{{ sponsor.name }}</a>
 
                      <a href="{{ sponsor.external_url }}">{{ sponsor.name }}</a>
 
                  {% endif %}
 
              </div>
 

	
 
          {% endfor %}
 

	
 
        {% endif %}
 

	
 
    {% endfor %}
 
</div>
pinaxcon/templates/_footer.html
Show inline comments
 
{% load staticfiles %}
 
<div class="row">
 

	
 
  <div class="logo">
 
    <div class="circle">
 
      <div class="fill" style="background-image: url('{% static "images/logo.svg" %}');"></div>
 
    </div>
 
  </div>
 

	
 
  <div class="footer-copy">
 
    <p>&copy; 2017 North Bay Python, member project of <a href="https://sfconservancy.org" title="Software Freedom Conservancy">Software Freedom Conservancy</a>, a 501(c)(3) charity.</p>
 
    <p>&copy; 2017 North Bay Python, member project of <a href="https://sfconservancy.org" >Software Freedom Conservancy</a>, a 501(c)(3) charity.</p>
 

	
 
    <p>
 
      <a href="https://facebook.com/northbaypython" title="North Bay Python on Facebook">Facebook</a>
 
      | <a href="https://twitter.com/northbaypython" title="North Bay Python on Twitter">Twitter</a>
 
      | <a href="/code-of-conduct" title="North Bay Python Code of Conduct">Code of Conduct</a>
 
      | <a href="/about/colophon" title="North Bay Python Colophon">Colophon</a></p>
 
      <a href="https://facebook.com/northbaypython">Facebook</a>
 
      | <a href="https://twitter.com/northbaypython">Twitter</a>
 
      | <a href="/code-of-conduct">Code of Conduct</a>
 
      | <a href="/about/colophon">Colophon</a></p>
 

	
 
    <p>This site is <a href="https://github.com/northbaypython/website" title="North Bay Python Website Git Repository">free and open source software</a>, powered by <a href="https://github.com/chrisjrn/symposion/" title="Symposion Git Repository">Symposion</a> and <a href="https://github.com/chrisjrn/registrasion/" title="Registrasion Git Repository">Registrasion</a>.</p>
 
    <p>This site is <a href="https://github.com/northbaypython/website">free and open source software</a>, powered by <a href="https://github.com/chrisjrn/symposion/">Symposion</a> and <a href="https://github.com/chrisjrn/registrasion/">Registrasion</a>.</p>
 
  </div>
 
</div>
pinaxcon/templates/override_bootstrap_theme_base.html
Show inline comments
 
new file 100644
 
{% extends "theme_bootstrap/base.html" %}
 
{% comment %}
 
    Derived from pinax_theme_bootstrap's "theme_bootstrap/base.html".
 

	
 
    Pinax Bootstrap Theme
 
    Copyright (c) 2015 James Tauber and contributors.
 

	
 
    Permission is hereby granted, free of charge, to any person
 
    obtaining a copy of this software and associated documentation
 
    files (the "Software"), to deal in the Software without
 
    restriction, including without limitation the rights to use,
 
    copy, modify, merge, publish, distribute, sublicense, and/or sell
 
    copies of the Software, and to permit persons to whom the
 
    Software is furnished to do so, subject to the following
 
    conditions:
 

	
 
    The above copyright notice and this permission notice shall be
 
    included in all copies or substantial portions of the Software.
 

	
 
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 
    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 
    OTHER DEALINGS IN THE SOFTWARE.
 

	
 
{% endcomment %}
 

	
 

	
 
{% block topbar_base %}
 
  <header>
 
    <div class="navbar navbar-default {% block navbar_class %}navbar-fixed-top{% endblock %}">
 
      <div class="container">
 
        {% block topbar %}
 
          <div class="navbar-header">
 
            <button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
 
              <span class="fa fa-bars">
 
                <span class="hidden-accessible">Pages Menu</span>
 
              </span>
 
            </button>
 
            {% block site_brand %}<a class="navbar-brand" href="{% url "home" %}">{{ SITE_NAME }}</a>{% endblock %}
 
          </div>
 
          <div class="collapse navbar-collapse navbar-responsive-collapse">
 
            {% block nav %}
 
              {% comment %}
 
                <ul class="nav navbar-nav">
 
                  <li><a href="#tab_one">One</a></li>
 
                  <li><a href="#tab_two">Two</a></li>
 
                </ul>
 
              {% endcomment %}
 
            {% endblock %}
 
            {% block account_bar %}{% include "_account_bar.html" %}{% endblock %}
 
          </div>
 
        {% endblock %}
 
      </div>
 
    </div>
 
  </header>
 
{% endblock %}
pinaxcon/templates/site_base.html
Show inline comments
 
{% extends "theme_bootstrap/base.html" %}
 
{% extends "override_bootstrap_theme_base.html" %}
 

	
 
{% load staticfiles %}
 
{% load metron_tags %}
 
{% load i18n %}
 
{% load sitetree %}
 

	
 
{% block styles %}
 
    {% include "_styles.html" %}
 
{% endblock %}
 

	
 
{% block extra_head_base %}
 
    {% block extra_head %}
 
      <meta property="twitter:card" content="summary">
 
      <meta property="og:type" content="website">
 
      <meta property="og:title" content="{% block head_title %}{% endblock %} | {{ SITE_NAME }}">
 
      <meta property="twitter:title" content="{{ SITE_NAME }}">
 
      <meta property="og:site_name" content="North Bay Python">
 
      <meta property="og:image" content="http://{{ request.META.HTTP_HOST }}{% static "images/square_icon.png" %}">
 
      <meta property="og:url" content="{{ request.build_absolute_uri }}">
 
      <meta property="og:description" content="North Bay Python, a community-organized conference, comes to Petaluma, California on December 2 and 3, 2017.">
 
      <meta property="twitter:description" content="North Bay Python, a community-organized conference, comes to Petaluma, California on December 2 and 3, 2017.">
 
      <meta name="description" content="North Bay Python, a community-organized conference, comes to Petaluma, California on December 2 and 3, 2017.">
 
      <meta name="google-site-verification" content="sTU0G4IghY_jV9iPgCVD1WZuk4C_MSWY2QzxQUjDcC4">
 
    {% endblock %}
 
{% endblock %}
 

	
 
{% block nav %}
 
    {% sitetree_menu from "main" include "trunk" template "sitetree/menu_bootstrap3.html" %}
 
{% endblock %}
 

	
 
{% block body_base %}
 

	
 
  <div class="homepage-block-bg website-background"></div>
 

	
 
  <div id="background-filter">
 
    <section id="content_body">
 
        <div class="container">
 
            {% include "_messages.html" %}
 
            <div class="row">
 
                <div class="col-md-9">
 
                    {% block body %}
 
                    {% endblock %}
 
                </div>
 
                <div class="col-md-3">
 
                    {% block sidebar %}
 
                        {% include "_default_sidebar.html" %}
 
                    {% endblock %}
 
                </div>
pinaxcon/templates/static_pages/about/colophon.html
Show inline comments
 
{% extends "page_with_title_and_lede.html" %}
 

	
 
{% load i18n %}
 

	
 
{% block head_title %}Colophon{% endblock %}
 

	
 
{% block heading %}Colophon{% endblock %}
 

	
 
{% block body_class %}about{% endblock %}
 

	
 
{% block content %}
 

	
 
<h2>Call for Proposals</h2>
 

	
 
<p>Portions of our Call for Proposals page were drawn from ideas seen on <a href="https://djangocon.eu" title="DjangoCon Europe">DjangoCon EU</a>, <a href="https://seagl.org" title="Seattle GNU Linux">SeaGL</a>, <a href="http://www.fogcityruby.com/speak/" title="Fog City Ruby">Fog City Ruby</a>, and others. Thanks to all for their inspiration and permission to borrow!</p>
 
<p>Portions of our Call for Proposals page were drawn from ideas seen on <a href="https://djangocon.eu">DjangoCon EU</a>, <a href="https://seagl.org">SeaGL</a>, <a href="http://www.fogcityruby.com/speak/">Fog City Ruby</a>, and others. Thanks to all for their inspiration and permission to borrow!</p>
 

	
 
<h2>Code of Conduct</h2>
 

	
 
<p>Our <a href="/code-of-conduct" title="North Bay Python Code of Conduct">Code of Conduct</a> was forked from the <a href="https://github.com/python/pycon-code-of-conduct" title="PyCon United States Code of Conduct">PyCon US Code of Conduct</a>, including the staff and attendee guides, under a <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons Attribution 3.0 Unported License">Creative Commons Attribution 3.0 Unported</a> license, itself originally forked from the example policy from the <a href="http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy" title="Geek Feminism Wiki Conference Anti-harassment Policy">Geek Feminism wiki</a>, created by the <a href="https://adainitiative.org/" title="Ada Initiative">Ada Initiative</a> and other volunteers, which is under a <a href="https://creativecommons.org/publicdomain/zero/1.0/" title="Creative Commons Zero License">Creative Commons Zero</a> license.</p>
 
<p>Our <a href="/code-of-conduct">Code of Conduct</a> was forked from the <a href="https://github.com/python/pycon-code-of-conduct">PyCon US Code of Conduct</a>, including the staff and attendee guides, under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 Unported</a> license, itself originally forked from the example policy from the <a href="http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy">Geek Feminism wiki</a>, created by the <a href="https://adainitiative.org/">Ada Initiative</a> and other volunteers, which is under a <a href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons Zero</a> license.</p>
 

	
 
<h2>Fiscal Sponsor</h2>
 

	
 
<p>Our fiscal sponsor is <a href="https://sfconservancy.org" title="Software Freedom Conservancy">Software Freedom Conservancy</a>, a 501(c)(3) charity dedicated to the promotion and development of free and open source software. Conservancy allows us to work without managing our own corporate structure and administrative services. Our relationship with Conservancy goes beyond logistics, though, as we are also philosophically aligned as we work to advance software freedom and expand the Python developer community.</p>
 
<p>Our fiscal sponsor is <a href="https://sfconservancy.org">Software Freedom Conservancy</a>, a 501(c)(3) charity dedicated to the promotion and development of free and open source software. Conservancy allows us to work without managing our own corporate structure and administrative services. Our relationship with Conservancy goes beyond logistics, though, as we are also philosophically aligned as we work to advance software freedom and expand the Python developer community.</p>
 

	
 
<h2>Photography</h2>
 

	
 
<ul>
 
  <li>Photo of <a href="https://www.instagram.com/p/BU-G5dGAkHt" title="Photo of Mystic Theatre">Mystic Theatre</a> used on the home page by Christopher Neugebauer under the <a href="https://creativecommons.org/licenses/by-sa/2.0/" title="Creative Commons Attribution Share Alike 2.0 Generic License">Creative Commons Attribute Share Alike 2.0 Generic</a> license.</li>
 
  <li>Photo of <a href="https://www.flickr.com/photos/richard_jones/14638274749" title="Photo of DjangoGirls Brisbane 2014">DjangoGirls Brisbane 2014</a> used on the home page by Richard Jones under the <a href="https://creativecommons.org/licenses/by/2.0/" title="Creative Commons Attribution 2.0 Generic">Creative Commons Attribution 2.0 Generic</a> license.</li>
 
  <li>Photo of <a href="https://www.instagram.com/p/BU-G5dGAkHt">Mystic Theatre</a> used on the home page by Christopher Neugebauer under the <a href="https://creativecommons.org/licenses/by-sa/2.0/" >Creative Commons Attribute Share Alike 2.0 Generic</a> license.</li>
 
  <li>Photo of <a href="https://www.flickr.com/photos/richard_jones/14638274749">DjangoGirls Brisbane 2014</a> used on the home page by Richard Jones under the <a href="https://creativecommons.org/licenses/by/2.0/">Creative Commons Attribution 2.0 Generic</a> license.</li>
 
</ul>
 

	
 
<h2>Python</h2>
 

	
 
<p>"Python" and the Python logos are trademarks or registered trademarks of the <a href="https://python.org" title="Python Software Foundation">Python Software Foundation</a>, used by North Bay Python with permission from the Foundation.</p>
 
<p>"Python" and the Python logos are trademarks or registered trademarks of the <a href="https://python.org">Python Software Foundation</a>, used by North Bay Python with permission from the Foundation.</p>
 

	
 
<h2>Terms and Conditions</h2>
 

	
 
<p>
 
  Our Photography and Audio Video Recording policy is adapted from the <a href="https://evergreen-ils.org/conference/photography-policy/" title="Evergreen Event Photography Policy">Evergreen policy</a>, itself adapted from the <a href="https://adacamp.org/adacamp-toolkit/policies/#photo" title="AdaCamp Event Photography Policy">AdaCamp policy</a> under a <a href="http://creativecommons.org/licenses/by-sa/4.0/" title="Creative Commons Attribution Share Alike 4.0 International License">Creative Commons Attribution Share Alike 4.0 International</a> license.</p>
 
  Our Photography and Audio Video Recording policy is adapted from the <a href="https://evergreen-ils.org/conference/photography-policy/">Evergreen policy</a>, itself adapted from the <a href="https://adacamp.org/adacamp-toolkit/policies/#photo">AdaCamp policy</a> under a <a href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution Share Alike 4.0 International</a> license.</p>
 

	
 
<h2>Web Application</h2>
 

	
 
<p>Our website is powered by a heap of free and open source software, most notably:</p>
 

	
 
<ul>
 
  <li><a href="https://www.djangoproject.com/" title="Django Web Framework">Django</a> is the web framework that underpins everything else.</li>
 
  <li><a href="https://github.com/chrisjrn/symposion/" title="Symposion">Symposion</a> is used for the call for proposals and session scheduling.</li>
 
  <li><a href="http://github.com/chrisjrn/registrasion/" title="Registrasion">Registrasion</a> is used for ticket sales.</li>
 
  <li><a href="https://inkscape.org/" title="Inkscape">Inkscape</a> is used to create most of our graphics.</li>
 
  <li><a href="https://www.djangoproject.com/">Django</a> is the web framework that underpins everything else.</li>
 
  <li><a href="https://github.com/chrisjrn/symposion/">Symposion</a> is used for the call for proposals and session scheduling.</li>
 
  <li><a href="http://github.com/chrisjrn/registrasion/">Registrasion</a> is used for ticket sales.</li>
 
  <li><a href="https://inkscape.org/">Inkscape</a> is used to create most of our graphics.</li>
 
</ul>
 

	
 
{% endblock %}
pinaxcon/templates/static_pages/about/team.html
Show inline comments
 
{% extends "page_with_title_and_lede.html" %}
 

	
 
{% load i18n %}
 
{% load thumbnail %}
 
{% load staticfiles %}
 

	
 
{% block head_title %}About the Team{% endblock %}
 

	
 
{% block heading %}About the Team{% endblock %}
 

	
 
{% block body_class %}about{% endblock %}
 

	
 
{% block lede %}
 

	
 
Our team of North Bay and Bay Area locals has years of experience building communities, running events, and, of course, programming. We're also all-in on cultivating a more inclusive culture.
 

	
 
{% endblock %}
 

	
 
{% block content %}
 

	
 
<h2>Contact the Team</h2>
 

	
 
<p>Need to contact someone in a hurry? You can reach us all at <a href="mailto:spam@northbaypython.org" title="spam@northbaypython.org">spam@northbaypython.org</a>. Read on to learn about the organizing team.</p>
 
<p>Need to contact someone in a hurry? You can reach us all at <a href="mailto:spam@northbaypython.org">spam@northbaypython.org</a>. Read on to learn about the organizing team.</p>
 

	
 
<p>You can also find us all over the internet, including:</p>
 

	
 
<ul>
 
  <li><a href="https://facebook.com/northbaypython" title="North Bay Python on Facebook">Facebook</a></li>
 
  <li><a href="https://twitter.com/northbaypython" title="North Bay Python on Twitter">Twitter</a></li>
 
  <li><a href="https://webchat.freenode.net/?channels=%23nbpy" title="IRC Web Client for North Bay Python's #nbpy Channel on Freenode">IRC (#nbpy on Freenode)</a></li>
 
  <li><a href="https://facebook.com/northbaypython">Facebook</a></li>
 
  <li><a href="https://twitter.com/northbaypython">Twitter</a></li>
 
  <li><a href="https://webchat.freenode.net/?channels=%23nbpy">IRC (#nbpy on Freenode)</a></li>
 
</ul>
 

	
 

	
 
<h2>Meet the Team</h2>
 

	
 
<h4>Christopher Neugebauer, Conference Chair</h4>
 
<h3>Christopher Neugebauer, Conference Chair</h3>
 

	
 
<p><img src="{% static "images/team/chris.jpg" %}" alt="Christopher Neugebauer" class="team-headshot">Christopher is a Python developer who lives in glorious Petaluma, California, though he's originally from the the city of Hobart in Tasmania, Australia. A serial conference organizer, he has been a core organiser of PyCon Australia for a number of years, was director of linux.conf.au 2017, and a good number of his open source contributions help power the website this conference runs on. He was made a fellow of the Python Software Foundation in 2013 in recognition for his contributions to building the Australian Python community. (<a href="https://twitter.com/chrisjrn" title="Christopher Neugebauer on Twitter">@chrisjrn on Twitter</a>)</p>
 
<p><img src="{% static "images/team/chris.jpg" %}" alt="Christopher Neugebauer" class="team-headshot">Christopher is a Python developer who lives in glorious Petaluma, California, though he's originally from the the city of Hobart in Tasmania, Australia. A serial conference organizer, he has been a core organiser of PyCon Australia for a number of years, was director of linux.conf.au 2017, and a good number of his open source contributions help power the website this conference runs on. He was made a fellow of the Python Software Foundation in 2013 in recognition for his contributions to building the Australian Python community. (<a href="https://twitter.com/chrisjrn">@chrisjrn on Twitter</a>)</p>
 

	
 
<h4>Sam Kitajima-Kimbrel, Program Chair</h4>
 
<h3>Sam Kitajima-Kimbrel, Program Chair</h3>
 

	
 
<p><img src="{% static "images/team/sam.jpg" %}" alt="Sam Kitajima-Kimbrel" class="team-headshot">Sam is a Python developer and distributed-systems "enthusiast" hailing from Seattle by birth, New York by nurture, and the Bay Area by choice. Five years ago he attended his first PyCon US and hasn't been able to break the habit; after making the jump from audience to stage in 2014 and speaking regularly at events around the world, he was thrilled to join team when invited by Chris and Josh. Sam currently works at Nuna building healthcare data infrastructure for the U.S. Medicaid and Medicare programs and resides in Oakland with his husband Kameron. (<a href="https://twitter.com/skimbrel" title="Sam Kitajima-Kimbrel on Twitter">@skimbrel on Twitter</a>)</p>
 
<p><img src="{% static "images/team/sam.jpg" %}" alt="Sam Kitajima-Kimbrel" class="team-headshot">Sam is a Python developer and distributed-systems "enthusiast" hailing from Seattle by birth, New York by nurture, and the Bay Area by choice. Five years ago he attended his first PyCon US and hasn't been able to break the habit; after making the jump from audience to stage in 2014 and speaking regularly at events around the world, he was thrilled to join team when invited by Chris and Josh. Sam currently works at Nuna building healthcare data infrastructure for the U.S. Medicaid and Medicare programs and resides in Oakland with his husband Kameron. (<a href="https://twitter.com/skimbrel">@skimbrel on Twitter</a>)</p>
 

	
 
<h4>Andrew Godwin</h4>
 
<h3>Andrew Godwin</h3>
 

	
 
<p><img src="{% static "images/team/andrew.jpg" %}" alt="Andrew Godwin" class="team-headshot">Andrew is a Django and Python developer who originally hails from London but moved to the Bay Area four years ago. He's been writing open source software for over a decade as well as working in various different parts of the technology industry, and currently works at Eventbrite. He regularly speaks at Python (and other) events around the world, and has a keen interest in building communities and inclusivity. (<a href="https://twitter.com/andrewgodwin" title="Andrew Godwin on Twitter">@andrewgodwin on Twitter</a>)</p>
 
<p><img src="{% static "images/team/andrew.jpg" %}" alt="Andrew Godwin" class="team-headshot">Andrew is a Django and Python developer who originally hails from London but moved to the Bay Area four years ago. He's been writing open source software for over a decade as well as working in various different parts of the technology industry, and currently works at Eventbrite. He regularly speaks at Python (and other) events around the world, and has a keen interest in building communities and inclusivity. (<a href="https://twitter.com/andrewgodwin">@andrewgodwin on Twitter</a>)</p>
 

	
 
<h4>Josh Simmons</h4>
 
<p><img src="{% static "images/team/josh.jpg" %}" alt="Josh Simmons" class="team-headshot">Josh is a community organizer and web developer with a penchant for armchair philosophy who was born and raised in the North Bay. He spent 4.5 years building Web &amp; Interactive Media Professionals (WIMP), a local community with over 600 members, before moving on to do community management for O'Reilly Media. These days Josh works on the Google Open Source outreach team and serves as a board member and volunteer CFO for Open Source Initiative. (<a href="https://twitter.com/joshsimmons" title="Josh Simmons on Twitter">@joshsimmons on Twitter</a>)</p>
 
<h3>Josh Simmons</h3>
 
<p><img src="{% static "images/team/josh.jpg" %}" alt="Josh Simmons" class="team-headshot">Josh is a community organizer and web developer with a penchant for armchair philosophy who was born and raised in the North Bay. He spent 4.5 years building Web &amp; Interactive Media Professionals (WIMP), a local community with over 600 members, before moving on to do community management for O'Reilly Media. These days Josh works on the Google Open Source outreach team and serves as a board member and volunteer CFO for Open Source Initiative. (<a href="https://twitter.com/joshsimmons">@joshsimmons on Twitter</a>)</p>
 

	
 

	
 
<h2>Advisors</h2>
 

	
 
<p>We acknowledge that our small team has limited perspective, and that to build a truly inclusive event, we need to seek the perspectives of a diverse range of people. We thank the following people and organizations for providing us with advice along the way.</p>
 

	
 
<ul>
 
  <li><a href="https://twitter.com/vavroom" title="Nicolas Steenhout on Twitter">Nicolas Steenhout</a> is helping us with accessibility and inclusion of people with disabilities.</li>
 
  <li><a href="https://twitter.com/vmbrasseur" title="VM Brasseur on Twitter">VM (Vicky) Brasseur</a> is helping us run an excellent call for proposals, design our office hours program, and support new speakers with speaker training.</li>
 
  <li><a href="https://twitter.com/vavroom">Nicolas Steenhout</a> is helping us with accessibility and inclusion of people with disabilities.</li>
 
  <li><a href="https://twitter.com/vmbrasseur">VM (Vicky) Brasseur</a> is helping us run an excellent call for proposals, design our office hours program, and support new speakers with speaker training.</li>
 
</ul>
 

	
 

	
 
<h2>Supporting Organizations</h2>
 
<h4>Software Freedom Conservancy</h4>
 
<h3>Software Freedom Conservancy</h3>
 

	
 
<p><a href="https://twitter.com/conservancy" title="Software Freedom Conservancy on Twitter">Conservancy</a> is a public charity dedicated to the promotion and development of free and open source software, and is the fiscal sponsor of North Bay Python. Without Conservancy and the people behind it&mdash;namely <a href="https://twitter.com/o0karen0o" title="Karen Sandler on Twitter">Karen Sandler</a>, <a href="https://twitter.com/bkuhn_ebb_org" title="Bradley Kuhn on Twitter">Bradley Kuhn</a>, <a href="https://twitter.com/keynote2k" title="Tony Sebro on Twitter">Tony Sebro</a>, and <a href="https://twitter.com/Brett20XX" title="Brett Smith on Twitter">Brett Smith</a>&mdash;none of this would be possible!</p>
 
<p><a href="https://twitter.com/conservancy">Conservancy</a> is a public charity dedicated to the promotion and development of free and open source software, and is the fiscal sponsor of North Bay Python. Without Conservancy and the people behind it&mdash;namely <a href="https://twitter.com/o0karen0o">Karen Sandler</a>, <a href="https://twitter.com/bkuhn_ebb_org">Bradley Kuhn</a>, <a href="https://twitter.com/keynote2k">Tony Sebro</a>, and <a href="https://twitter.com/Brett20XX">Brett Smith</a>&mdash;none of this would be possible!</p>
 

	
 
{% endblock %}
pinaxcon/templates/static_pages/code_of_conduct/code_of_conduct.md
Show inline comments
 
North Bay Python is a community conference intended for networking and collaboration in the developer community.
 

	
 
We value the participation of each member of the Python community and want all attendees to have an enjoyable and fulfilling experience. Accordingly, all attendees are expected to show respect and courtesy to other attendees throughout the conference and at all conference events, whether officially sponsored by North Bay Python or not.
 

	
 
To make clear what is expected, all delegates/attendees, speakers, exhibitors, organizers and volunteers at any North Bay Python event are required to conform to the following Code of Conduct. Organizers will enforce this code throughout the event.
 

	
 
The Short Version
 
-----------------
 

	
 
North Bay Python is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, sexual orientation, disability, physical appearance, body size, race, or religion. We do not tolerate harassment of conference participants in any form.
 

	
 
All communication should be appropriate for a professional audience including people of many different backgrounds. Sexual language and imagery is not appropriate for any conference venue, including talks.
 

	
 
Be kind to others. Do not insult or put down other attendees. Behave professionally. Remember that harassment and sexist, racist, or exclusionary jokes are not appropriate for North Bay Python.
 

	
 
Attendees violating these rules may be asked to leave the conference without a refund at the sole discretion of the conference organizers.
 

	
 
Thank you for helping make this a welcoming, friendly event for all.
 

	
 
The Longer Version
 
------------------
 

	
 
Harassment includes offensive verbal comments related to gender, sexual orientation, disability, physical appearance, body size, race, religion, sexual images in public spaces, deliberate intimidation, stalking, following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention.
 

	
 
Participants asked to stop any harassing behavior are expected to comply immediately.
 

	
 
Exhibitors in the expo hall, sponsor or vendor booths, or similar activities are also subject to the anti-harassment policy. In particular, exhibitors should not use sexualized images, activities, or other material. Booth staff (including volunteers) should not use sexualized clothing/uniforms/costumes, or otherwise create a sexualized environment.
 

	
 
Be careful in the words that you choose. Remember that sexist, racist, and other exclusionary jokes can be offensive to those around you. Excessive swearing and offensive jokes are not appropriate for PyCon.
 

	
 
If a participant engages in behavior that violates this code of conduct, the conference organizers may take any action they deem appropriate, including warning the offender or expulsion from the conference with no refund.
 

	
 
Contact Information
 
-------------------
 

	
 
If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of conference staff. Conference staff will be wearing t-shirts and/or badges that clearly identify them as staff. You may also contact venue staff and ask to be put in touch with conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org "chrisjrn@northbaypython.org").
 
If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of conference staff. Conference staff will be wearing t-shirts and/or badges that clearly identify them as staff. You may also contact venue staff and ask to be put in touch with conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org).
 

	
 
If the matter is especially urgent, please call our Code of Conduct and safety incident hotline. **The phone number for this hotline will be released shortly before the conference begins.** This number will automatically route to a member of the conference staff who can render assistance.
 

	
 
Conference staff will be happy to help participants contact hotel/venue security or local law enforcement, provide escorts, or otherwise assist those experiencing harassment to feel safe for the duration of the conference. We value your attendance.
 

	
 
Procedure for Handling Harassment
 
------------------------------------------
 
- [Attendee procedure for incident handling](/code-of-conduct/harassment-incidents "North Bay Python attendee procedure for incident handling")
 
- [Staff procedure for incident handling](/code-of-conduct/harassment-staff-procedures "North Bay Python staff procedure for incident handling")
 
- [Attendee procedure for incident handling](/code-of-conduct/harassment-incidents)
 
- [Staff procedure for incident handling](/code-of-conduct/harassment-staff-procedures)
 

	
 
License
 
-------
 

	
 
This Code of Conduct was forked from the [PyCon US Code of Conduct](https://github.com/python/pycon-code-of-conduct "PyCon United States Code of Conduct") under a [Creative Commons Attribution 3.0 Unported](http://creativecommons.org/licenses/by/3.0/ "Creative Commons Attribution 3.0 Unported License") license, itself originally forked from the example policy in [Geek Feminism wiki](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy "Geek Feminism Wiki Example Anti-harassment Policy"), created by the Ada Initiative and other volunteers. which is under a [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/ "Creative Commons Zero License") license.
...
 
\ No newline at end of file
 
This Code of Conduct was forked from the [PyCon US Code of Conduct](https://github.com/python/pycon-code-of-conduct) under a [Creative Commons Attribution 3.0 Unported](http://creativecommons.org/licenses/by/3.0/) license, itself originally forked from the example policy in [Geek Feminism wiki](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy), created by the Ada Initiative and other volunteers. which is under a [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/) license.
pinaxcon/templates/static_pages/code_of_conduct/harassment_procedure_attendee.md
Show inline comments
 
*This procedure has been adopted from the Ada Initiative's guide titled "[Conference anti-harassment/Responding to Reports](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Responding_to_reports "Ada Initive Anti-harassment Guide on Responding to Reports")".*
 
*This procedure has been adopted from the Ada Initiative's guide titled "[Conference anti-harassment/Responding to Reports](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Responding_to_reports)".*
 

	
 
1\. Keep in mind that all conference staff will be wearing a conference t-shirt/button with the word "STAFF" on it (or otherwise clearly marked as staff). The staff will also be prepared to handle the incident. All of our staff are informed of the [code of conduct policy](/code-of-conduct "North Bay Python Code of Conduct") and guide for handling harassment at the conference. *There will be a mandatory staff meeting onsite at the conference when this will be reiterated.*
 
1\. Keep in mind that all conference staff will be wearing a conference t-shirt/button with the word "STAFF" on it (or otherwise clearly marked as staff). The staff will also be prepared to handle the incident. All of our staff are informed of the [code of conduct policy](/code-of-conduct) and guide for handling harassment at the conference. *There will be a mandatory staff meeting onsite at the conference when this will be reiterated.*
 

	
 
2\. Report the harassment incident (preferably in writing) to a conference staff member. All reports are confidential. Please do not disclose public information about the incident until the staff have had sufficient time in which to address the situation. This is as much for your safety and protection as it is the other attendees.
 

	
 
When reporting the event to staff, try to gather as much information as available but do not interview people about the incident. Staff will assist you in writing the report/collecting information.
 

	
 
The important information consists of:
 

	
 
- Identifying information (name/badge number) of the participant doing the harassing
 
- The behavior that was in violation
 
- The approximate time of the behavior (if different than the time the report was made)
 
- The circumstances surrounding the incident
 
- Other people involved in the incident
 

	
 
The staff is well informed on how to deal with the incident and how to further proceed with the situation.
 

	
 
3\. If everyone is presently physically safe, involve law enforcement or security only at a victim's request. If you do feel your safety in jeopardy please do not hesitate to contact local law enforcement by dialing 911. If you do not have a cell phone, you can use any hotel phone or simply ask a staff member.
 

	
 
**Note**: Incidents that violate the Code of Conduct are extremely damaging to the community, and they will not be tolerated. The silver lining is that, in many cases, these incidents present a chance for the offenders, and the community at large, to grow, learn, and become better. North Bay Python staff requests that they be your first resource when reporting a North Bay Python-related incident, so that they may enforce the Code of Conduct and take quick action toward a resolution.
 

	
 
A listing of [North Bay Python staff is located here](/about/team "About the North Bay Python team"), including contact phone numbers. If at all possible, all reports should be made directly to conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org "chrisjrn@northbaypython.org").
...
 
\ No newline at end of file
 
A listing of [North Bay Python staff is located here](/about/team), including contact phone numbers. If at all possible, all reports should be made directly to conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org).
...
 
\ No newline at end of file
pinaxcon/templates/static_pages/code_of_conduct/harassment_procedure_staff.md
Show inline comments
 
*This procedure has been adopted from the Ada Initiative's guide titled "[Conference anti-harassment/Responding to Reports](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Responding_to_reports "Ada Initive Anti-harassment Guide on Responding to Reports")".*
 
*This procedure has been adopted from the Ada Initiative's guide titled "[Conference anti-harassment/Responding to Reports](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Responding_to_reports)".*
 

	
 
Be sure to have a good understanding of our Code of Conduct policy, which can be found here: [https://northbaypython.org/code-of-conduct](/code-of-conduct "North Bay Python Code of Conduct")
 
Be sure to have a good understanding of our Code of Conduct policy, which can be found here: [https://northbaypython.org/code-of-conduct](/code-of-conduct)
 

	
 
Also have a good understanding of what is expected from an attendee that wants to report a harassment incident. These guidelines can be found here: [https://northbaypython.org/code-of-conduct/harassment-incidents](/code-of-conduct/harassment-incidents "North Bay Python attendee procedure for incident handling")
 
Also have a good understanding of what is expected from an attendee that wants to report a harassment incident. These guidelines can be found here: [https://northbaypython.org/code-of-conduct/harassment-incidents](/code-of-conduct/harassment-incidents)
 

	
 
Try to get as much of the incident in written form by the reporter. If you cannot, transcribe it yourself as it was told to you. The important information to gather include the following:
 

	
 
 - Identifying information (name/badge number) of the participant doing the harassing
 
 - The behavior that was in violation
 
 - The approximate time of the behavior (if different than the time the report was made)
 
 - The circumstances surrounding the incident
 
 - Other people involved in the incident
 

	
 
Prepare an initial response to the incident. This initial response is very important and will set the tone for North Bay Python. Depending on the severity/details of the incident, please follow these guidelines:
 

	
 
 - If there is any general threat to attendees or the safety of anyone including conference staff is in doubt, summon security or police
 
 - Offer the victim a private place to sit
 
 - Ask "is there a friend or trusted person who you would like to be with you?" (if so, arrange for someone to fetch this person)
 
 - Ask them "how can I help?"
 
 - Provide them with your list of emergency contacts if they need help later
 
 - If everyone is presently physically safe, involve law enforcement or security only at a victim's request
 

	
 
There are also some guidelines as to what not to do as an initial response:
 

	
 
 - Do not overtly invite them to withdraw the complaint or mention that withdrawal is OK. This suggests that you want them to do so, and is therefore coercive. "If you're OK with it [pursuing the complaint]" suggests that you are by default pursuing it and is not coercive.
 
 - Do not ask for their advice on how to deal with the complaint. This is a staff responsibility.
 
 - Do not offer them input into penalties. This is the staff's responsibility.
 

	
 
Once something is reported to a staff member, immediately meet with the conference chair and/or event coordinator. The main objectives of this meeting is to find out the following:
 

	
 
 - What happened?
 
 - Are we doing anything about it?
 
 - Who is doing those things?
 
 - When are they doing them?
 

	
 
After the staff meeting and discussion, have a staff member (preferably the conference chair or event coordinator if available) communicate with the alleged harasser. Make sure to inform them of what has been reported about them.
 

	
 
Allow the alleged harasser to give their side of the story to the staff. After this point, if the report stands, let the alleged harasser know what actions will be taken against them.
 

	
 
Some things for the staff to consider when dealing with Code of Conduct offenders:
 

	
 
- Warning the harasser to cease their behavior and that any further reports will result in sanctions
 
- Requiring that the harasser avoid any interaction with, and physical proximity to, their victim for the remainder of the event
 
- Ending a talk that violates the policy early
 
- Not publishing the video or slides of a talk that violated the policy
 
- Not allowing a speaker who violated the policy to give (further) talks at the event now or in the future
 
- Immediately ending any event volunteer responsibilities and privileges the harasser holds
 
- Requiring that the harasser not volunteer for future events your organization runs (either indefinitely or for a certain time period)
 
- Requiring that the harasser refund any travel grants and similar they received (this would need to be a condition of the grant at the time of being awarded)
 
- Requiring that the harasser immediately leave the event and not return
 
- Banning the harasser from future events (either indefinitely or for a certain time period)
 
- Removing a harasser from membership of relevant organizations
 
- Publishing an account of the harassment and calling for the resignation of the harasser from their responsibilities (usually pursued by people without formal authority: may be called for if the harasser is the event leader, or refuses to stand aside from the conflict of interest, or similar, typically event staff have sufficient governing rights over their space that this isn't as useful)
 

	
 
Give accused attendees a place to appeal to if there is one, but in the meantime the report stands. Keep in mind that it is not a good idea to encourage an apology from the harasser.
 

	
 
It is very important how we deal with the incident publicly. Our policy is to make sure that everyone aware of the initial incident is also made aware that it is not according to policy and that official action has been taken - while still respecting the privacy of individual attendees.  When speaking to individuals (those who are aware of the incident, but were not involved with the incident) about the incident it is a good idea to keep the details out.
 

	
 
Depending on the incident, the conference chair, or designate, may decide to make one or more public announcements. If necessary, this will be done with a short announcement either during the plenary and/or through other channels. No one other than the conference chair or someone delegated authority from the conference chair should make any announcements. No personal information about either party will be disclosed as part of this process.
 

	
 
If some attendees were angered by the incident, it is best to apologize to them that the incident occurred to begin with.  If there are residual hard feelings, suggest to them to write an email to the conference chair or to the event coordinator. It will be dealt with accordingly.
 

	
 
A listing of [North Bay Python staff is located here](/about/team "About the North Bay Python team"), including contact phone numbers. If at all possible, all reports should be made directly to conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org "chrisjrn@northbaypython.org").
...
 
\ No newline at end of file
 
A listing of [North Bay Python staff is located here](/about/team), including contact phone numbers. If at all possible, all reports should be made directly to conference chair [Christopher Neugebauer](mailto:chrisjrn@northbaypython.org).
...
 
\ No newline at end of file
pinaxcon/templates/static_pages/homepage.html
Show inline comments
 
{% extends "site_base_home.html" %}
 

	
 
{% load i18n %}
 
{% load staticfiles %}
 

	
 
{% block head_title %}Welcome{% endblock %}
 

	
 
{% block body_class %}home{% endblock %}
 

	
 
{% block body %}
 

	
 
  <div class="homepage-block-bg website-background"></div>
 
  <div class="jumbotron homepage-block light">
 
    <div class="homepage-block-bg website-background"></div>
 
    <div class="hills main"></div>
 
    <div class="container homepage-block-content">
 
      <div class="tight-headings">
 
        <h1>North Bay Python</h1>
 
        <h3>A Python conference north of the Golden Gate</h3>
 
        <h2 class="homepage-subtitle">A Python conference north of the Golden Gate</h2>
 
      </div>
 

	
 
      <div class="row">
 
        <div class="col-md-6">
 
          <h3>
 
            The Mystic Theatre</br>
 
            Petaluma, California
 
          </h3>
 

	
 
          <h4>
 
            December 2 &amp; 3, 2017<br/>
 
            Talk submissions open August 21
 
          </h4>
 
        </div>
 
        <div class="col-md-4 col-md-offset-2 email-signup-panel">
 
          <div class="panel panel-default">
 
            <div class="panel-heading">
 
              <h2 class="panel-title">Sign up for our low-volume announcements newsletter!</h4>
 
            </div>
 
            <div class="panel-body">
 
              <form
 
                class="form-inline"
 
                action="https://tinyletter.com/northbaypython" method="post" target="popupwindow" onsubmit="window.open('https://tinyletter.com/northbaypython', 'popupwindow', 'scrollbars=yes,width=800,height=600');return true">
 
                <div class="form-group">
 
                  <span>
 
                    <label style="display: none;" for="tlemail">Email address:</label>
 
                    <label class="hidden-accessible" for="tlemail">Email address:</label>
 
                  </span>
 
                  <span>
 
                    <input class="form-control" type="email" name="email" id="tlemail" placeholder="E-mail address"/>
 
                  </span>
 
                </div>
 
                <span>
 
                  <input class="btn btn-primary" type="submit" value="Subscribe" />
 
                </span>
 

	
 
                <input type="hidden" value="1" name="embed"/>
 
              </form>
 
            </div>
 
          </div>
 
        </div>
 

	
 
      </div>
 

	
 
    </div>
 

	
 
    <div class="container homepage-block-footer">
 
      <div>
 
        <a class="btn btn-default btn-lg " href="https://twitter.com/northbaypython" title="North Bay Python on Twitter">Twitter</a>
 
        <a class="btn btn-default btn-lg" href="https://facebook.com/northbaypython" title="North Bay Python on Facebook">Facebook</a>
 
        <a class="btn btn-default btn-lg " href="https://twitter.com/northbaypython">Twitter</a>
 
        <a class="btn btn-default btn-lg" href="https://facebook.com/northbaypython">Facebook</a>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block dark">
 
    <div class="homepage-block-bg mystic-background"></div>
 
    <div class="container homepage-block-content">
 
      <h1>Downtown Petaluma</h1>
 

	
 
      <p>North Bay Python's home is Petaluma, a delightfully quaint dairy town, nestled on a river at the edge of California's Wine Country. Here's what you can look forward to:</p>
 

	
 
      <ul>
 
        <li>An historic venue with countless restaurants and coffee shops in walking distance</li>
 
        <li>World-famous craft food and drink producers on your doorstep</li>
 
        <li>Charming small-town hotels, as close as one block away</li>
 
      </ul>
 

	
 
      <p>&hellip; and it's only an hour away from San Francisco (on a good day).</p>
 
    </div>
 

	
 
    <div class="homepage-block-footer full-width">
 
      <div class="container">
 
        <div class="row">
 
          <div class="btn-group col-md-4">
 
            <a class="btn btn-lg btn-primary btn-shadow" href="/about/north-bay-python" title="About North Bay Python">Learn More</a>
 
            <a class="btn btn-lg btn-primary btn-shadow" href="/about/north-bay-python">Learn More</a>
 
          </div>
 

	
 
          <div class="col-md-8 text-right photo-attribution">
 
            Image credit: <a href="https://www.instagram.com/p/BU-G5dGAkHt" title="Photo of the Mystic Theatre">Mystic Theatre</a>, &copy; 2017 Christopher Neugebauer (<a href="https://creativecommons.org/licenses/by-sa/2.0/" title="Creative Commons Attribute Share Alike 2.0 Generic License">CC BY-SA 2.0</a>)
 
            Image credit: <a href="https://www.instagram.com/p/BU-G5dGAkHt">Mystic Theatre</a>, &copy; 2017 Christopher Neugebauer (<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a>)
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block white">
 
    <div class="container homepage-block-content">
 
      <h1>Sponsors</h1>
 

	
 
      {% load sponsorship_tags %}
 
      {% load thumbnail %}
 

	
 
      {% sponsor_levels as levels %}
 

	
 
      <div class="row sponsor-list">
 
      {% for level in levels %}
 
          {% if level.sponsors %}
 
              {% for sponsor in level.sponsors %}
 
                  <div class="sponsor">
 
                      {% if sponsor.website_logo %}
 
                          <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">
 
                          <a href="{{ sponsor.external_url }}">
 
                              <img src="{% thumbnail sponsor.website_logo '600x360' %}" alt="{{ sponsor.name }}">
 
                          </a>
 
                      {% else %}
 
                          <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">{{ sponsor.name }}</a>
 
                          <a href="{{ sponsor.external_url }}">{{ sponsor.name }}</a>
 
                      {% endif %}
 
                  </div>
 
              {% endfor %}
 
          {% endif %}
 
      {% endfor %}
 
      </div>
 
    </div>
 

	
 
    <div class="container homepage-block-footer">
 
      <div class="btn-group">
 
        <a class="btn btn-lg btn-primary btn-shadow" href="/sponsors/become-a-sponsor" title="Become a Sponsor">Become a Sponsor</a>
 
        <a class="btn btn-lg btn-primary btn-shadow" href="/sponsors/become-a-sponsor">Become a Sponsor</a>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block dark">
 
    <div class="homepage-block-bg djangogirls-background"></div>
 
    <div class="container homepage-block-content">
 
      <h1>Inclusion and Diversity</h1>
 

	
 
      <p>North Bay Python is proud to be founded on a commitment to inclusion and diversity. Here's what we commit to:</p>
 

	
 
      <ul>
 
        <li>A strong Code of Conduct and enforcement policy built on the Python Software Foundation's PyCon US policy.</li>
 
        <li>Diversity targets for speakers and attendees.</li>
 
        <li>Financial assistance for speakers who need it.</li>
 
        <li>Low-cost tickets, with fees enthusiastically waived on request.</li>
 
      </ul>
 
    </div>
 

	
 
    <div class="homepage-block-footer full-width">
 
      <div class="container">
 
        <div class="row">
 
          <div class="btn-group col-md-4">
 
            <a class="btn btn-lg btn-primary btn-shadow" href="/code-of-conduct" title"North Bay Python Code of Conduct">Read the Code of Conduct</a>
 
          </div>
 

	
 
          <div class="col-md-8 text-right photo-attribution">
 
            Image credit: <a href="https://www.flickr.com/photos/richard_jones/14638274749" title="Photo from DjangoGirls Brisbane 2014">DjangoGirls Brisbane</a>, &copy; 2014 Richard Jones (<a href="https://creativecommons.org/licenses/by/2.0/" title="Creative Commons Attribute 2.0 Generic License">CC BY 2.0</a>)
 
            Image credit: <a href="https://www.flickr.com/photos/richard_jones/14638274749">DjangoGirls Brisbane</a>, &copy; 2014 Richard Jones (<a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a>)
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
  </div>
 

	
 
{% endblock %}
pinaxcon/templates/static_pages/program/call_for_proposals.md
Show inline comments
 
### The North Bay Python 2017 CFP is open!
 

	
 
We've got lots of good information and resources below that you should read, but in case you've already read it and want to dive in now:
 

	
 
<div class="btn-group">
 
  <a class="btn btn-lg btn-primary" href="/dashboard" title="Submit a Proposal to North Bay Python">Submit a Proposal</a>
 
  <a class="btn btn-lg btn-primary" href="/dashboard">Submit a Proposal</a>
 
</div>
 

	
 
If you've never presented at a conference before and think you might like to try it, we want to hear from you! The program committee is *very* much interested in encouraging and supporting new speakers, and we will be able to provide detailed feedback and work with you to develop your proposal and talk content so you can give the best talk possible.
 

	
 
In the interest of transparency, we have documented our [selection process](/program/selection-process "North Bay Python proposal selection process"). Portions of this page were drawn from ideas seen on [DjangoCon EU](https://djangocon.eu "DjangoCon Europe"), [SeaGL](https://seagl.org "Seattle GNU Linux"), [Fog City Ruby](http://www.fogcityruby.com/speak/ "Fog City Ruby"), and others. Thanks to all for their inspiration and permission to borrow!
 
In the interest of transparency, we have documented our [selection process](/program/selection-process). Portions of this page were drawn from ideas seen on [DjangoCon EU](https://djangocon.eu), [SeaGL](https://seagl.org), [Fog City Ruby](http://www.fogcityruby.com/speak/), and others. Thanks to all for their inspiration and permission to borrow!
 

	
 
## Dates
 

	
 
+ **August 21, 2017**: CFP opens
 
+ **September 29, 2017**: CFP closes
 
+ **Week of October 9**: Acceptance notifications sent
 
+ **Week of October 16**: Speaker confirmations due; program finalized and announced
 
+ **December 2–3, 2017**: Conference happens!
 

	
 
## Speakers
 

	
 
North Bay Python is dedicated to featuring a diverse and inclusive speaker lineup.
 

	
 
**All speakers will be expected to have read and adhere to the conference [Code of Conduct](/code-of-conduct "North Bay Python Code of Conduct"). In particular for speakers: slide contents and spoken material should be appropriate for a professional audience including people of many different backgrounds. Sexual language and imagery is not appropriate, and neither are language or imagery that denigrate or demean people based on race, gender, religion, sexual orientation, physical appearance, disability, or body size.**
 
**All speakers will be expected to have read and adhere to the conference [Code of Conduct](/code-of-conduct). In particular for speakers: slide contents and spoken material should be appropriate for a professional audience including people of many different backgrounds. Sexual language and imagery is not appropriate, and neither are language or imagery that denigrate or demean people based on race, gender, religion, sexual orientation, physical appearance, disability, or body size.**
 

	
 
We will make every effort to provide accommodations for speakers and attendees of all abilities&mdash;all we ask is that you let us know so we can prepare accordingly.
 

	
 
North Bay Python is a conference in support of the local programmer community outside of the core San Francisco Bay Area tech scene. We aim to feature a mix of local and non-local speakers to offer a program with broad appeal. **All speakers will receive complimentary registration to the conference, and requests for further financial compensation to assist with travel will be considered on a case-by-case basis independent of the proposal's merits.**
 

	
 
## Talk formats
 

	
 
**Most of the talk slots will be short**&mdash;approximately 25 to 30 minutes, including Q&A. If your ideas would benefit from a longer slot, please explain in your submission how you would use the additional time.
 

	
 
## Topics
 

	
 
**We are a single track conference. This means that your talk needs to hold the attention of beginners and experienced developers alike.**
 

	
 
This doesn't mean that every talk needs to be a beginner's talk. If you're talking about advanced concepts, people who are new to Python or your library should come away excited about the possibilities, and know what concepts they need to learn to get there.
 

	
 
This is a list of topics we think might go well in the North Bay Python program, but it is by no means exhaustive. If you have a talk idea on a subject not listed here and you think it fits well with our community and mission, we would love to <a href="mailto:program@northbaypython.org" title="program@northbaypython.org">hear about it</a>!
 
This is a list of topics we think might go well in the North Bay Python program, but it is by no means exhaustive. If you have a talk idea on a subject not listed here and you think it fits well with our community and mission, we would love to <a href="mailto:program@northbaypython.org">hear about it</a>!
 

	
 
+ The Python community
 
+ Python fundamentals
 
+ Useful libraries and tools
 
+ Testing in Python
 
+ Deploying, operating, or scaling Python
 
+ Organization and communication skills for software development
 
+ What Python can learn from other communities
 
+ Accessibility in Python (and other) software
 
+ Unexpected places Python gets used (Embedded systems! Health science!)
 
+ ... and anything else we might not have thought of!
 

	
 
## Resources
 

	
 
This [public speaking](https://github.com/vmbrasseur/Public_Speaking "Public Speaking Resource Repository by VM Brasseur") repository, maintained by [VM Brasseur](https://twitter.com/vmbrasseur "VM Brasseur on Twitter"), has many useful resources to help you polish your proposals and talks.
 
This [public speaking](https://github.com/vmbrasseur/Public_Speaking) repository, maintained by [VM Brasseur](https://twitter.com/vmbrasseur), has many useful resources to help you polish your proposals and talks.
 

	
 
### Office Hours and Mentorship
 

	
 
The program committee will be holding regularly-scheduled office hours during the CFP period to help you organize proposals. You are also welcome to <a href="mailto:program@northbaypython.org" title="program@northbaypython.org">email us</a> or drop by <a href="https://webchat.freenode.net/?channels=%23nbpy" title="IRC Web Client for #nbpy Channel on Freenode">#nbpy on the Freenode IRC network</a> anytime to ask questions.
 
The program committee will be holding regularly-scheduled office hours during the CFP period to help you organize proposals. You are also welcome to <a href="mailto:program@northbaypython.org">email us</a> or drop by <a href="https://webchat.freenode.net/?channels=%23nbpy">#nbpy on the Freenode IRC network</a> anytime to ask questions.
 

	
 
We're happy to help with any of the following:
 

	
 
+ Exploring and brainstorming your interests to help you identify hidden things that would make great talks
 
+ Connecting you with experienced speakers to help build your proposal and talk
 
+ Reviewing your outline, slide deck, or presenter notes
 
+ Connecting you with rehearsal audiences or even just watching you present over a video conference as practice
 
+ Anything else that'd help you be at ease and excited about bringing your ideas to our audience!
 

	
 
Our office hours are scheduled for every <strong>Wednesday at 7pm</strong> and <strong>Friday at 3pm</strong> Pacific Time. They will take place in <a href="https://webchat.freenode.net/?channels=%23nbpy" title="IRC Web Client for #nbpy Channel on Freenode">#nbpy on the Freenode IRC network</a>. IRC is a web chat protocol and you can use <a href="https://webchat.freenode.net/?channels=%23nbpy" title="IRC Web Client for #nbpy Channel on Freenode">this IRC web client</a> to connect.
 
Our office hours are scheduled for every <strong>Wednesday at 7pm</strong> and <strong>Friday at 3pm</strong> Pacific Time. They will take place in <a href="https://webchat.freenode.net/?channels=%23nbpy">#nbpy on the Freenode IRC network</a>. IRC is a web chat protocol and you can use <a href="https://webchat.freenode.net/?channels=%23nbpy">this IRC web client</a> to connect.
 

	
 
+ Wednesday, August 23 at 7pm
 
+ Friday, August 25 at 3pm
 
+ Wednesday, August 30 at 7pm
 
+ Friday, September 1 at 3pm
 
+ Wednesday, September 6 at 7pm 
 
+ Wednesday, September 6 at 7pm
 
+ Friday, September 8 at 3pm
 
+ Wednesday, September 13 at 7pm
 
+ Friday, September 15 at 3pm
 
+ Wednesday, September 20 at 7pm
 
+ Friday, September 22 at 3pm
 
+ Wednesday, September 27 at 7pm
 
+ Friday, September 29 at 3pm
 

	
 
## Submitting
 

	
 
To help us evaluate proposals and build our program, we would like as much detail as you can provide on your talk. At a minimum this should include: **a brief description (~400 characters) suitable for inclusion in a schedule page; a brief prose abstract (intended as the content for a talk detail page on the program site); and, if you'd like, a rough outline of the structure including estimated timings for each section of your talk.**
 

	
 
If you've given your talk before, links to video or slides would be excellent, or if you've blogged about this topic links to your blog posts would be of use as well.
 

	
 
Your speaker profile includes a space for you to describe your prior experience giving talks&mdash;this is your chance to talk yourself up and explain how you're qualified to share your ideas, so take advantage of it!
 

	
 
<div class="btn-group">
 
  <a class="btn btn-lg btn-primary" href="/dashboard" title="Submit a Proposal to North Bay Python">Submit a Proposal</a>
 
  <a class="btn btn-lg btn-primary" href="/dashboard">Submit a Proposal</a>
 
</div>
 

	
 
## Feedback and mentorship
 

	
 
**First time speakers are welcomed and encouraged; if you've never done this before but have an idea please <a href="mailto:program@northbaypython.org" title="program@northbaypython.org">contact the program committee</a> to be connected with a mentor and receive guidance structuring your proposal and talk. Above all we want you to be successful and have a good time telling other attendees about your amazing ideas!**
 
**First time speakers are welcomed and encouraged; if you've never done this before but have an idea please <a href="mailto:program@northbaypython.org">contact the program committee</a> to be connected with a mentor and receive guidance structuring your proposal and talk. Above all we want you to be successful and have a good time telling other attendees about your amazing ideas!**
 

	
 
If you have an idea (or don't!) and want to speak, here's a very rough process of what you should do next:
 

	
 
+ Brainstorm or [mind map](https://en.wikipedia.org/wiki/Mind_map "Wikipedia Entry on Mind Mapping") to expand upon your ideas or knowledge in search of a general topic
 
+ Brainstorm or [mind map](https://en.wikipedia.org/wiki/Mind_map) to expand upon your ideas or knowledge in search of a general topic
 
+ Write a paragraph or two, or some bullet points, to outline the core concepts you want to communicate and what people might learn from your talk
 
+ Get someone you trust to read your notes and tell you what they think they'd learn
 
+ Attend our office hours to get help building up your submission
 
+ Practice!
static/scss/custom.scss
Show inline comments
...
 
@@ -58,96 +58,109 @@ body.reviews.review-results .review-results {
 

	
 
body.reviews.voting-status {
 
    &.positive a.positive,
 
    &.negative a.negative,
 
    &.indifferent a.indifferent,
 
    &.controversial a.controversial,
 
    &.too_few a.too_few {
 
        z-index: 2;
 
        color: #333;
 
        background-color: #e6e6e6;
 
        border-color: #adadad;
 
        outline: 0;
 
        background-image: none;
 
        box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
 
    }
 
}
 

	
 
#accountLogOutForm {
 
    display: none;
 
}
 

	
 
.sponsor-list h3 {
 
    margin-top: 3em;
 
}
 

	
 
.sponsor-list > div {
 
    margin: 10px 0;
 
}
 

	
 
body.auth .panel-heading .panel-title span.pull-right {
 
    margin: 0 auto;
 
}
 

	
 
.home {
 
  margin: 0;
 
  padding-top: $navbar-height - $navbar-padding-vertical - 8;
 
}
 

	
 
.home#content_body {
 
  margin: 0;
 
  padding: 0;
 
}
 

	
 
#content_body {
 
  background-color: $background-filter-transparent;
 
  box-shadow: 0px 0px 2em $background-filter; //, inset 0px -5px 1em rgba(0, 0, 0, 0.8);
 
}
 

	
 

	
 
.hidden-accessible {
 
  border:0 none;
 
  clip:rect(0px,0px,0px,0px);
 
  height:1px;
 
  margin:-1px;
 
  overflow:hidden;
 
  padding:0;
 
  position:absolute;
 
  width:1px
 
}
 

	
 

	
 
$homepage-block-min-height: 480px;
 

	
 
.homepage-block {
 
  margin-top: 0;
 
  margin-bottom: 0;
 
  min-height: $homepage-block-min-height;
 
  position: relative;
 
  box-shadow: $box-shadow;
 
  z-index: 3;
 

	
 
  .sponsor {
 
    @include make-xs-column(6);
 
    @include make-sm-column(4);
 
    @include make-md-column(3);
 
    max-width: 600px;
 
  }
 
}
 

	
 

	
 
.homepage-block-content {
 
  min-height: ($homepage-block-min-height - 80px);
 
}
 

	
 
/* ??? */
 
.homepage-block-footer {
 

	
 
}
 

	
 
.homepage-block.light {
 
  background-color: $background-filter;
 
  z-index: 2;
 
}
 

	
 
.homepage-block.white {
 
  background-color: white;
 
  z-index: 1;
 
}
 

	
 
.homepage-block-bg {
 
  top: 0;
 
  bottom: 0;
 
  width: 100%;
 
  height: 100%;
 
  position: absolute;
 
  background-size: cover;
 
  background-position: center;
 
  opacity: 0.3;
 
  background-blend-mode: multiply;
...
 
@@ -317,48 +330,56 @@ span.date {
 
.logo {
 
  float: right !important;
 
  width: 80px;
 
  height: 80px;
 
  margin: 0 1em 2em 2em;
 

	
 
  .circle {
 
    width: 80px;
 
    height: 80px;
 
  }
 
}
 

	
 
footer .footer-copy {
 
  margin-left: 1em;
 
}
 

	
 
@media (max-width: 1200px) and (min-width: 992px) {
 
  .email-signup-panel input.btn {
 
    margin-top: 1em;
 
  }
 
}
 

	
 
@media (max-width: 992px) {
 
  .photo-attribution {
 
    margin-top: 1em;
 
    text-align: left;
 
  }
 

	
 
  .email-signup-panel {
 
    margin-top: 2em;
 
  }
 
}
 

	
 
@media (max-width: 768px) {
 
  .navbar-nav.pull-right {
 
    float: left !important;
 
  }
 
}
 

	
 
@media (max-width: 550px) {
 

	
 
}
 

	
 
@media (min-width: 992px) {
 
  .email-signup-panel {
 
    margin-top: 22px;
 
  }
 
}
 

	
 
.homepage-subtitle {
 
  font-size: $font-size-h3;
 
}
 

	
 
.navbar-toggle {
 
  background-color: $gray-lighter;
 
}
0 comments (0 inline, 0 general)