From 3231cea2744cfe6230bcae224e8587a17da4ebe2 Mon Sep 17 00:00:00 2001 From: Alexandre Savio Date: Thu, 8 Aug 2019 10:50:31 +0200 Subject: [PATCH 1/2] chore: add boilerplate, add wip docker setup --- .editorconfig | 25 ++ .gitignore | 80 ++++- .pre-commit-config.yaml | 51 +++ Dockerfile | 62 ++++ Dockerfile.armhf | 19 + LICENSE | 201 +++++++++++ MANIFEST.in | 2 + Makefile | 101 ++++++ Pipfile | 31 ++ Pipfile.lock | 764 ++++++++++++++++++++++++++++++++++++++++ README.md | 21 +- 11 files changed, 1343 insertions(+), 14 deletions(-) create mode 100644 .editorconfig create mode 100644 .pre-commit-config.yaml create mode 100644 Dockerfile create mode 100644 Dockerfile.armhf create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 Makefile create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0fd8c7b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,25 @@ +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 4 +max_line_length = 80 + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml,json}] +indent_size = 2 + +[Makefile] +indent_style = tab + +[LICENSE] +insert_final_newline = none +trim_trailing_whitespace = none +indent_style = none +indent_size = none diff --git a/.gitignore b/.gitignore index f144262..4329ebb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,79 @@ -*.pyc -.idea/ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ +cc-test-reporter + +# pyenv +.python-version + +# Environments +.env +.venv env/ +venv/ +ENV/ +env.bak/ +venv.bak/ +.python-version +.envrc + +# Rope project settings +.ropeproject + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Serverless +node_modules +.serverless + +# IDEs +.vscode +.idea + +# Sphinx temp +docs/_build +docs/source + +*.ipynb_checkpoints/ +*.ipynb +.node-version diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..211de99 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,51 @@ +--- +fail_fast: true +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.2.1 + hooks: + - id: check-ast + - id: check-symlinks + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-json + - id: check-yaml + - id: detect-private-key + - id: double-quote-string-fixer + - id: trailing-whitespace + - id: no-commit-to-branch # No (direct) commits to master + - repo: https://github.com/asottile/add-trailing-comma + rev: v1.0.0 + hooks: + - id: add-trailing-comma + - repo: https://github.com/pre-commit/mirrors-isort + rev: v4.3.18 + hooks: + - id: isort + - repo: https://github.com/Lucas-C/pre-commit-hooks + rev: v1.1.6 + hooks: + - id: forbid-crlf + files: \.md$ + - id: remove-crlf + files: \.md$ + - repo: local + hooks: + - id: lint + name: tox lint + entry: tox -e lint + language: system + - id: doclint + name: tox doclint + entry: tox -e doclint + language: system + - id: mypy + name: tox mypy + entry: tox -e mypy + language: system + types: [python] + - id: tests + name: tox tests + entry: tox -e tests + language: system + types: [python, yaml] diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..559b02d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,62 @@ +FROM debian:buster + +WORKDIR /opt + +ADD . flask_nexttalk + +RUN apt update \ + && apt -y upgrade \ + && apt -y install build-essential python3-dev python3-pip \ + && python3 -m pip install -U pip setuptools pipenv \ + && touch /tmp/mysite.sock \ + && chown www-data /tmp/mysite.sock \ + && cd flask_nexttalk/; pipenv install \ + && rm -rf /var/lib/apt/lists/* \ + + +RUN ln -s /etc/uwsgi/apps-available/mysite.ini /etc/uwsgi/apps-enabled/mysite.ini \ + && service nginx restart \ + && service uwsgi restart + +# command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'" + +EXPOSE 80 + + +# Now all we have to do is add our configuration files for nginx and uwsgi. First delete the default configuration for nginx: +# ``` +# cd /etc/nginx/sites-available +# sudo rm default +# ``` +# Create a new configuration file mysite and add the following: + +# ``` +# server { +# listen 80; +# server_tokens off; +# server_name localhost; + +# location / { +# include uwsgi_params; +# uwsgi_pass unix:/tmp/mysite.sock; +# } + +# location /static { +# alias /home/pi/App/flask-nexttalk/ep2017/static; +# } + +# ## Only requests to our Host are allowed +# if ($host !~ ^(localhost)$ ) { +# return 444; +# } +# } +# ``` +# NOTE: change ep2017 for your theme folder + +# In order to enable the site, we must link our configuration file to /etc/nginx/sites-enabled/: + +# ``` +# sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite +# ``` + + diff --git a/Dockerfile.armhf b/Dockerfile.armhf new file mode 100644 index 0000000..db96132 --- /dev/null +++ b/Dockerfile.armhf @@ -0,0 +1,19 @@ +FROM balenalib/rpi-alpine:3.10 + +ENV TZ 'Europe/Berlin' + +ENV SICKRAGE_VERSION 9.4.132 + +RUN apk add --update --no-cache libffi-dev openssl-dev libxml2-dev libxslt-dev linux-headers build-base \ + git tzdata unrar \ + python3 python3-dev +RUN git clone https://github.com/SiCKRAGE/SiCKRAGE.git -b ${SICKRAGE_VERSION} --depth 1 /opt/sickrage \ + && cd /opt/sickrage; git checkout ${SICKRAGE_VERSION} \ + && python3 -m pip install -U pip setuptools \ + && python3 -m pip install -r /opt/sickrage/requirements.txt + +## Expose port +EXPOSE 8081 + +## Run +ENTRYPOINT ["python3", "/opt/sickrage/SiCKRAGE.py", "--datadir=/config"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..40e5300 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Enterat + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..a33db56 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +include README.md +include CHANGELOG.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4a2b74f --- /dev/null +++ b/Makefile @@ -0,0 +1,101 @@ +.PHONY: help clean clean-pyc clean-build list test test-dbg test-cov test-all coverage docs release sdist install install-dev install-ci lint mypy isort isort-check + +project-name = flask-nexttalk + +version-var := "__version__ = " +version-string := $(shell grep $(version-var) $(project-name)/version.py) +version := $(subst __version__ = ,,$(version-string)) + +help: + @echo "install - install" + @echo "install-dev - install also development dependencies" + @echo "clean - clean all below" + @echo "clean-build - remove build artifacts" + @echo "clean-pyc - remove Python file artifacts" + @echo "clean-tox - clean tox cache" + @echo "lint - check style with flake8" + @echo "test - run tests quickly with the default Python" + @echo "test-cov - run tests with the default Python and report coverage" + @echo "test-dbg - run tests and debug with pdb" + @echo "develop - run tests in loop mode" + @echo "deploy - deploy" + @echo "mypy - check type hinting with mypy" + @echo "isort - sort imports" + @echo "isort-check - check if your imports are correctly sorted" + @echo "build - create the distribution package" + @echo "release - package a release in wheel and tarball, requires twine" + +install: + python -m pip install pipenv + pipenv install + python -m pip install . + +install-ci: + python -m pip install pipenv + pipenv install --dev + python -m pip install -e . + +install-dev: install-ci + pre-commit install + +clean: clean-build clean-pyc clean-caches + +clean-build: + rm -fr build/ + rm -fr dist/ + rm -fr .eggs/ + rm -fr *.egg-info + rm -fr *.spec + +clean-pyc: + pyclean $(project-name) + find . -name '*~' -exec rm -f {} + + find . -name __pycache__ -exec rm -rf {} + + find . -name '*.log*' -delete + find . -name '*_cache' -exec rm -rf {} + + find . -name '*.egg-info' -exec rm -rf {} + + +clean-caches: + rm -rf .tox + rm -rf .pytest_cache + +serve: + gunicorn -w 1 --threads 3 --access-logfile access.log -b "0.0.0.0:8888" \ + "flask_nexttalk.app.run:__wsgi__" + +lint: + tox -e lint + +test: + tox -e tests + +mypy: + tox -e mypy + +isort-check: + tox -e isort + +isort: + isort -rc lambda_handlers/ + +test-cov: + py.test --cov-report term-missing --cov=$(project-name) + +test-dbg: + py.test --pdb + +develop: + py.test --color=yes -f + +coverage: + pytest --cov=hansel + coverage report -m + +build: + python -m pip install pep517 + python -m pep517.build -s -b . + +pypi: + twine upload dist/* + +release: clean build pypi diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..e60be39 --- /dev/null +++ b/Pipfile @@ -0,0 +1,31 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +flask = "*" +gunicorn = "*" +pytz = "*" + +[dev-packages] +flake8 = "*" +flake8-bugbear = "*" +autopep8 = "*" +pre-commit = "*" +pytest = "*" +pytest-cov = "*" +pytest-xdist = "*" +pytest-only = "*" +watchdog = "*" +mypy = "*" +isort = "*" +tox = ">=3.13.2" +coverage = "*" +jsonschema = "==3.0.1" +pyclean-py = "*" +pytest-mock = "*" +rope = "*" +twine = "*" +tox-pipenv-install = "*" +pep517 = "*" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..bda5a72 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,764 @@ +{ + "_meta": { + "hash": { + "sha256": "0942db3783e7cdfabb5b828c8bf88698e1b7d64321a7c1cc0bece504f1cae8dc" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "click": { + "hashes": [ + "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", + "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + ], + "version": "==7.0" + }, + "flask": { + "hashes": [ + "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52", + "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6" + ], + "index": "pypi", + "version": "==1.1.1" + }, + "gunicorn": { + "hashes": [ + "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471", + "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3" + ], + "index": "pypi", + "version": "==19.9.0" + }, + "itsdangerous": { + "hashes": [ + "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", + "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" + ], + "version": "==1.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" + ], + "version": "==2.10.1" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" + }, + "pytz": { + "hashes": [ + "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", + "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" + ], + "index": "pypi", + "version": "==2019.1" + }, + "werkzeug": { + "hashes": [ + "sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4", + "sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6" + ], + "version": "==0.15.5" + } + }, + "develop": { + "apipkg": { + "hashes": [ + "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6", + "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c" + ], + "version": "==1.5" + }, + "argh": { + "hashes": [ + "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", + "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65" + ], + "version": "==0.26.2" + }, + "aspy.yaml": { + "hashes": [ + "sha256:463372c043f70160a9ec950c3f1e4c3a82db5fca01d334b6bc89c7164d744bdc", + "sha256:e7c742382eff2caed61f87a39d13f99109088e5e93f04d76eb8d4b28aa143f45" + ], + "version": "==1.3.0" + }, + "atomicwrites": { + "hashes": [ + "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", + "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" + ], + "version": "==1.3.0" + }, + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "autopep8": { + "hashes": [ + "sha256:4d8eec30cc81bc5617dbf1218201d770dc35629363547f17577c61683ccfb3ee" + ], + "index": "pypi", + "version": "==1.4.4" + }, + "bleach": { + "hashes": [ + "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16", + "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa" + ], + "version": "==3.1.0" + }, + "certifi": { + "hashes": [ + "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939", + "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695" + ], + "version": "==2019.6.16" + }, + "cfgv": { + "hashes": [ + "sha256:edb387943b665bf9c434f717bf630fa78aecd53d5900d2e05da6ad6048553144", + "sha256:fbd93c9ab0a523bf7daec408f3be2ed99a980e20b2d19b50fc184ca6b820d289" + ], + "version": "==2.0.1" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "click": { + "hashes": [ + "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", + "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + ], + "version": "==7.0" + }, + "colorama": { + "hashes": [ + "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", + "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48" + ], + "version": "==0.4.1" + }, + "colorlog": { + "hashes": [ + "sha256:3cf31b25cbc8f86ec01fef582ef3b840950dea414084ed19ab922c8b493f9b42", + "sha256:450f52ea2a2b6ebb308f034ea9a9b15cea51e65650593dca1da3eb792e4e4981" + ], + "version": "==4.0.2" + }, + "coverage": { + "hashes": [ + "sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", + "sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", + "sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", + "sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", + "sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", + "sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", + "sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", + "sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", + "sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", + "sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", + "sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", + "sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", + "sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", + "sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", + "sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", + "sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", + "sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", + "sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", + "sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", + "sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", + "sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", + "sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", + "sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", + "sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", + "sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", + "sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", + "sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", + "sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", + "sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", + "sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", + "sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a" + ], + "index": "pypi", + "version": "==4.5.3" + }, + "docutils": { + "hashes": [ + "sha256:f33ddb723332c6d6b6d99731ee1fc0c35eb4044a2df5cca1c64c8aa78eaf22cb" + ], + "version": "==0.15.1.post1" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "execnet": { + "hashes": [ + "sha256:64dcdc248d007060f6f6500e7c79a4f87ee692063e3ec51e9bebf30ef2ea21d7", + "sha256:dfd10a5663f94d1235e6fbee86bc53e2f89b6f15e031e7e6d9e4bb345bcd7e52" + ], + "version": "==1.6.1" + }, + "filelock": { + "hashes": [ + "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", + "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" + ], + "version": "==3.0.12" + }, + "flake8": { + "hashes": [ + "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", + "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696" + ], + "index": "pypi", + "version": "==3.7.8" + }, + "flake8-bugbear": { + "hashes": [ + "sha256:5070774b668be92c4312e5ca82748ddf4ecaa7a24ff062662681bb745c7896eb", + "sha256:fef9c9826d14ec23187ae1edeb3c6513c4e46bf0e70d86bac38f7d9aabae113d" + ], + "index": "pypi", + "version": "==19.3.0" + }, + "flake8-polyfill": { + "hashes": [ + "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9", + "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda" + ], + "version": "==1.0.2" + }, + "future": { + "hashes": [ + "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" + ], + "version": "==0.17.1" + }, + "gitdb2": { + "hashes": [ + "sha256:83361131a1836661a155172932a13c08bda2db3674e4caa32368aa6eb02f38c2", + "sha256:e3a0141c5f2a3f635c7209d56c496ebe1ad35da82fe4d3ec4aaa36278d70648a" + ], + "version": "==2.0.5" + }, + "gitpython": { + "hashes": [ + "sha256:c15c55ff890cd3a6a8330059e80885410a328f645551b55a91d858bfb3eb2573", + "sha256:df752b6b6f06f11213e91c4925aea7eaf9e37e88fb71c8a7a1aa0a5c10852120" + ], + "version": "==2.1.13" + }, + "identify": { + "hashes": [ + "sha256:0a11379b46d06529795442742a043dc2fa14cd8c995ae81d1febbc5f1c014c87", + "sha256:43a5d24ffdb07bc7e21faf68b08e9f526a1f41f0056073f480291539ef961dfd" + ], + "version": "==1.4.5" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "importlib-metadata": { + "hashes": [ + "sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8", + "sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3" + ], + "version": "==0.19" + }, + "isort": { + "hashes": [ + "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", + "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" + ], + "index": "pypi", + "version": "==4.3.21" + }, + "jsonschema": { + "hashes": [ + "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d", + "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a" + ], + "index": "pypi", + "version": "==3.0.1" + }, + "mando": { + "hashes": [ + "sha256:4ce09faec7e5192ffc3c57830e26acba0fd6cd11e1ee81af0d4df0657463bd1c", + "sha256:79feb19dc0f097daa64a1243db578e7674909b75f88ac2220f1c065c10a0d960" + ], + "version": "==0.6.4" + }, + "marshmallow": { + "hashes": [ + "sha256:9cedfc5b6f568d57e8a2cf3d293fbd81b05e5ef557854008d03e25660a39ccfd", + "sha256:a4d99922116a76e5abd8f997ec0519086e24814b7e1e1344bebe2a312ba50235" + ], + "index": "pypi", + "version": "==2.19.5" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832", + "sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4" + ], + "version": "==7.2.0" + }, + "mypy": { + "hashes": [ + "sha256:0107bff4f46a289f0e4081d59b77cef1c48ea43da5a0dbf0005d54748b26df2a", + "sha256:07957f5471b3bb768c61f08690c96d8a09be0912185a27a68700f3ede99184e4", + "sha256:10af62f87b6921eac50271e667cc234162a194e742d8e02fc4ddc121e129a5b0", + "sha256:11fd60d2f69f0cefbe53ce551acf5b1cec1a89e7ce2d47b4e95a84eefb2899ae", + "sha256:15e43d3b1546813669bd1a6ec7e6a11d2888db938e0607f7b5eef6b976671339", + "sha256:352c24ba054a89bb9a35dd064ee95ab9b12903b56c72a8d3863d882e2632dc76", + "sha256:437020a39417e85e22ea8edcb709612903a9924209e10b3ec6d8c9f05b79f498", + "sha256:49925f9da7cee47eebf3420d7c0e00ec662ec6abb2780eb0a16260a7ba25f9c4", + "sha256:6724fcd5777aa6cebfa7e644c526888c9d639bd22edd26b2a8038c674a7c34bd", + "sha256:7a17613f7ea374ab64f39f03257f22b5755335b73251d0d253687a69029701ba", + "sha256:cdc1151ced496ca1496272da7fc356580e95f2682be1d32377c22ddebdf73c91" + ], + "index": "pypi", + "version": "==0.720" + }, + "mypy-extensions": { + "hashes": [ + "sha256:37e0e956f41369209a3d5f34580150bcacfabaa57b33a15c0b25f4b5725e0812", + "sha256:b16cabe759f55e3409a7d231ebd2841378fb0c27a5d1994719e340e4f429ac3e" + ], + "version": "==0.4.1" + }, + "nodeenv": { + "hashes": [ + "sha256:ad8259494cf1c9034539f6cced78a1da4840a4b157e23640bc4a0c0546b0cb7a" + ], + "version": "==1.3.3" + }, + "packaging": { + "hashes": [ + "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", + "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3" + ], + "version": "==19.0" + }, + "pathtools": { + "hashes": [ + "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" + ], + "version": "==0.1.2" + }, + "pep517": { + "hashes": [ + "sha256:43a7aa3902efd305a605c1028e4045968cd012831233ecab633a31d3ba4860a5", + "sha256:cb5ca55450b64e80744cd5c32f7d5b8928004042dfea50fdc3f96ad7f27cba96" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "pkginfo": { + "hashes": [ + "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", + "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32" + ], + "version": "==1.5.0.1" + }, + "plotly": { + "hashes": [ + "sha256:b4ae32398e5b862e6d65c8ae8579044df31fd989174f77e25ad91952f3aa5c78", + "sha256:bf4f7bac9d033818375d9985bb15c47c31bfa89419abdbd6b5f32fcaa5908047" + ], + "version": "==4.0.0" + }, + "pluggy": { + "hashes": [ + "sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", + "sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c" + ], + "version": "==0.12.0" + }, + "pre-commit": { + "hashes": [ + "sha256:92e406d556190503630fd801958379861c94884693a032ba66629d0351fdccd4", + "sha256:cccc39051bc2457b0c0f7152a411f8e05e3ba2fe1a5613e4ee0833c1c1985ce3" + ], + "index": "pypi", + "version": "==1.17.0" + }, + "progress": { + "hashes": [ + "sha256:5e2f9da88ed8236a76fffbee3ceefd259589cf42dfbc2cec2877102189fae58a" + ], + "version": "==1.4" + }, + "py": { + "hashes": [ + "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", + "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" + ], + "version": "==1.8.0" + }, + "pyclean-py": { + "hashes": [ + "sha256:9fe408486edc5d5f667390c025222339ca3e624f6cc7e7cdf550b6052704afab" + ], + "index": "pypi", + "version": "==0.0.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:58c421dd605eec0bce65df8b8e5371bb7ae421582cdf0ba8d9435ac5b0ffc36a" + ], + "index": "pypi", + "version": "==4.0.0" + }, + "pyflakes": { + "hashes": [ + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + ], + "version": "==2.1.1" + }, + "pygments": { + "hashes": [ + "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", + "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297" + ], + "version": "==2.4.2" + }, + "pyparsing": { + "hashes": [ + "sha256:43c5486cefefa536c9aab528881c992328f020eefe4f6d06332449c365218580", + "sha256:d6c5ffe9d0305b9b977f7a642d36b9370954d1da7ada4c62393382cbadad4265" + ], + "version": "==2.4.1.1" + }, + "pyrsistent": { + "hashes": [ + "sha256:34b47fa169d6006b32e99d4b3c4031f155e6e68ebcc107d6454852e8e0ee6533" + ], + "version": "==0.15.4" + }, + "pytest": { + "hashes": [ + "sha256:6ef6d06de77ce2961156013e9dff62f1b2688aa04d0dc244299fe7d67e09370d", + "sha256:a736fed91c12681a7b34617c8fcefe39ea04599ca72c608751c31d89579a3f77" + ], + "index": "pypi", + "version": "==5.0.1" + }, + "pytest-cov": { + "hashes": [ + "sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", + "sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a" + ], + "index": "pypi", + "version": "==2.7.1" + }, + "pytest-forked": { + "hashes": [ + "sha256:5fe33fbd07d7b1302c95310803a5e5726a4ff7f19d5a542b7ce57c76fed8135f", + "sha256:d352aaced2ebd54d42a65825722cb433004b4446ab5d2044851d9cc7a00c9e38" + ], + "version": "==1.0.2" + }, + "pytest-mock": { + "hashes": [ + "sha256:43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7", + "sha256:5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568" + ], + "index": "pypi", + "version": "==1.10.4" + }, + "pytest-only": { + "hashes": [ + "sha256:221d9c8094dde089d1c2dac6972ae2b47d95a8e13d5282e0289f8b27f06e3637" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "pytest-xdist": { + "hashes": [ + "sha256:3489d91516d7847db5eaecff7a2e623dba68984835dbe6cedb05ae126c4fb17f", + "sha256:501795cb99e567746f30fe78850533d4cd500c93794128e6ab9988e92a17b1f8" + ], + "index": "pypi", + "version": "==1.29.0" + }, + "pytoml": { + "hashes": [ + "sha256:57a21e6347049f73bfb62011ff34cd72774c031b9828cb628a752225136dfc33", + "sha256:8eecf7c8d0adcff3b375b09fe403407aa9b645c499e5ab8cac670ac4a35f61e7" + ], + "version": "==0.1.21" + }, + "pyyaml": { + "hashes": [ + "sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3", + "sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043", + "sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7", + "sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265", + "sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391", + "sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778", + "sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225", + "sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955", + "sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e", + "sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190", + "sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd" + ], + "version": "==5.1.1" + }, + "radon": { + "hashes": [ + "sha256:0cde1953547a164d24420ed6ccdfa18b61f1457b96a2b99ff0de76b22d504a0f", + "sha256:ee20308ce8bae7a89b067425b63b141a0077632ab318d5288da649c830882b3d" + ], + "version": "==3.0.3" + }, + "readme-renderer": { + "hashes": [ + "sha256:bb16f55b259f27f75f640acf5e00cf897845a8b3e4731b5c1a436e4b8529202f", + "sha256:c8532b79afc0375a85f10433eca157d6b50f7d6990f337fa498c96cd4bfc203d" + ], + "version": "==24.0" + }, + "requests": { + "hashes": [ + "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", + "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + ], + "version": "==2.22.0" + }, + "requests-toolbelt": { + "hashes": [ + "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f", + "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0" + ], + "version": "==0.9.1" + }, + "retrying": { + "hashes": [ + "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b" + ], + "version": "==1.3.3" + }, + "rope": { + "hashes": [ + "sha256:6b728fdc3e98a83446c27a91fc5d56808a004f8beab7a31ab1d7224cecc7d969", + "sha256:c5c5a6a87f7b1a2095fb311135e2a3d1f194f5ecb96900fdd0a9100881f48aaf", + "sha256:f0dcf719b63200d492b85535ebe5ea9b29e0d0b8aebeb87fe03fc1a65924fdaf" + ], + "index": "pypi", + "version": "==0.14.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "smmap2": { + "hashes": [ + "sha256:0555a7bf4df71d1ef4218e4807bbf9b201f910174e6e08af2e138d4e517b4dde", + "sha256:29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a" + ], + "version": "==2.0.5" + }, + "snowballstemmer": { + "hashes": [ + "sha256:9f3b9ffe0809d174f7047e121431acf99c89a7040f0ca84f94ba53a498e6d0c9" + ], + "version": "==1.9.0" + }, + "tabulate": { + "hashes": [ + "sha256:8af07a39377cee1103a5c8b3330a421c2d99b9141e9cc5ddd2e3263fea416943" + ], + "version": "==0.8.3" + }, + "toml": { + "hashes": [ + "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", + "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" + ], + "version": "==0.10.0" + }, + "tox": { + "hashes": [ + "sha256:dab0b0160dd187b654fc33d690ee1d7bf328bd5b8dc6ef3bb3cc468969c659ba", + "sha256:ee35ffce74933a6c6ac10c9a0182e41763140a5a5070e21b114feca56eaccdcd" + ], + "index": "pypi", + "version": "==3.13.2" + }, + "tox-pipenv-install": { + "hashes": [ + "sha256:6bea3c88622d2cfc94ef2a5a36b656d0c9ea82ad7a82213c0097f571b77d0863", + "sha256:b406939613526895e633acdb590fcd39c0cd1def722cec44f78d5c8d73f13197" + ], + "index": "pypi", + "version": "==0.1.1" + }, + "tqdm": { + "hashes": [ + "sha256:14a285392c32b6f8222ecfbcd217838f88e11630affe9006cd0e94c7eff3cb61", + "sha256:25d4c0ea02a305a688e7e9c2cdc8f862f989ef2a4701ab28ee963295f5b109ab" + ], + "version": "==4.32.2" + }, + "twine": { + "hashes": [ + "sha256:0fb0bfa3df4f62076cab5def36b1a71a2e4acb4d1fa5c97475b048117b1a6446", + "sha256:d6c29c933ecfc74e9b1d9fa13aa1f87c5d5770e119f5a4ce032092f0ff5b14dc" + ], + "index": "pypi", + "version": "==1.13.0" + }, + "typed-ast": { + "hashes": [ + "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", + "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", + "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", + "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", + "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", + "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", + "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", + "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", + "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", + "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", + "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", + "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", + "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", + "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", + "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" + ], + "version": "==1.4.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:2ed632b30bb54fc3941c382decfd0ee4148f5c591651c9272473fea2c6397d95", + "sha256:b1edbbf0652660e32ae780ac9433f4231e7339c7f9a8057d0f042fcbcea49b87", + "sha256:d8179012ec2c620d3791ca6fe2bf7979d979acdbef1fca0bc56b37411db682ed" + ], + "version": "==3.7.4" + }, + "urllib3": { + "hashes": [ + "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", + "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232" + ], + "version": "==1.25.3" + }, + "virtualenv": { + "hashes": [ + "sha256:6cb2e4c18d22dbbe283d0a0c31bb7d90771a606b2cb3415323eea008eaee6a9d", + "sha256:909fe0d3f7c9151b2df0a2cb53e55bdb7b0d61469353ff7a49fd47b0f0ab9285" + ], + "version": "==16.7.2" + }, + "watchdog": { + "hashes": [ + "sha256:965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d" + ], + "index": "pypi", + "version": "==0.9.0" + }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "version": "==0.1.7" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "wily": { + "hashes": [ + "sha256:4671cb486188ae84076a9e873815caf05f523479ccf1b513320fac6c99731377", + "sha256:fb027fbfc234660bc1e822b7d1b1c10329ba6098cea61fbc4f59505d0a437acb" + ], + "index": "pypi", + "version": "==1.12.3" + }, + "zipp": { + "hashes": [ + "sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a", + "sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec" + ], + "version": "==0.5.2" + } + } +} diff --git a/README.md b/README.md index 16b94e8..ca3780e 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,19 @@ - Working in python2 - Testing in python3 (fails gevent-socketio) -Instructions: ------- -``` -pip install -r requirements/dev_requirements.txt -``` -``` +Installation: +------------- + +```bash +make install python app.py ``` -Lazy mode: ------- +Development: +------------- -``` -python auto_app.py +```bash +make install-dev ``` THEMES: @@ -52,14 +51,12 @@ SOCIAL_IFRAME_SRC = "http://your_url.com" ``` - SETUP ------ [Follow this tutorial](https://github.com/PythonSanSebastian/flask-nexttalk/blob/ep2016/SETUP.md) TODO ------ -- Why is ep2016 main branch? should not be master? change it idiot! - Automatically sync static/data/talks.json with internet ACTIVE CONTRIBUTORS From 39ec180502c0e20f36942c97c4a4483ab6dbc2cb Mon Sep 17 00:00:00 2001 From: Alexandre Savio Date: Thu, 8 Aug 2019 10:50:57 +0200 Subject: [PATCH 2/2] refactor: code cleanup, organize code, remove themes --- app.py | 165 - auto_app.py | 26 - auto_rpi.py | 31 - config.py | 31 - ep2016/static/media/01-Standard logo.pdf | Bin 312949 -> 0 bytes ep2016/static/media/06-Secondary Logo C.pdf | Bin 313455 -> 0 bytes ep2016/static/media/ep_logo.png | Bin 50206 -> 0 bytes ep2016/static/media/sponsors/BW/bbva.png | Bin 413971 -> 0 bytes ep2016/static/media/sponsors/BW/bilbao.bmp | Bin 751082 -> 0 bytes ep2016/static/media/sponsors/BW/hired.png | Bin 10983 -> 0 bytes ep2016/static/media/sponsors/BW/intel.png | Bin 88056 -> 0 bytes ep2016/static/media/sponsors/BW/microsoft.png | Bin 17805 -> 0 bytes ep2016/static/media/sponsors/BW/psf.png | Bin 104764 -> 0 bytes ep2016/static/media/sponsors/BW/upv.png | Bin 14870 -> 0 bytes ep2016/static/media/sponsors/BW/winton.png | Bin 6080 -> 0 bytes ep2016/static/media/sponsors/bbva.png | Bin 415036 -> 0 bytes ep2016/static/media/sponsors/bilbao.png | Bin 28241 -> 0 bytes ep2016/static/media/sponsors/hired.png | Bin 10402 -> 0 bytes ep2016/static/media/sponsors/intel.png | Bin 91797 -> 0 bytes ep2016/static/media/sponsors/microsoft.png | Bin 16234 -> 0 bytes .../originals/PSF-Logo-Narrow-Shapes.png | Bin 136440 -> 0 bytes .../static/media/sponsors/originals/bbva.png | Bin 415036 -> 0 bytes .../media/sponsors/originals/bilbao.png | Bin 28241 -> 0 bytes .../static/media/sponsors/originals/ehu.png | Bin 18922 -> 0 bytes .../static/media/sponsors/originals/hired.png | Bin 10402 -> 0 bytes .../static/media/sponsors/originals/intel.png | Bin 91797 -> 0 bytes .../media/sponsors/originals/microsoft.png | Bin 16234 -> 0 bytes .../media/sponsors/originals/winton.png | Bin 25291 -> 0 bytes ep2016/static/media/sponsors/upv.png | Bin 18922 -> 0 bytes ep2016/static/media/sponsors/winton.png | Bin 25291 -> 0 bytes ep2016/static/talks.css | 353 - ep2016/templates/feeds.html | 196 - ep2016/templates/hall.html | 207 - ep2016/templates/index.html | 257 - ep2016/templates/menu.html | 20 - ep2016/templates/multi_index.html | 168 - ep2017/__init__.py | 0 ep2017/static/data/accepted_talks.json | 8195 ----------------- ep2017/static/data/clean-talks.json | 1 - ep2017/static/index.js | 30 - ep2017/static/jquery-2.1.4.min.js | 4 - ep2017/static/jquery-anyslider.css | 99 - ep2017/static/jquery.anyslider.js | 371 - ep2017/static/jquery.easing.1.3.js | 37 - ep2017/static/media/ep_logo.png | Bin 83537 -> 0 bytes .../static/media/fonts/lato-black-webfont.eot | Bin 34359 -> 0 bytes .../static/media/fonts/lato-black-webfont.svg | 2551 ----- .../static/media/fonts/lato-black-webfont.ttf | Bin 75288 -> 0 bytes .../media/fonts/lato-black-webfont.woff | Bin 37448 -> 0 bytes .../media/fonts/lato-black-webfont.woff2 | Bin 29636 -> 0 bytes .../static/media/fonts/lato-bold-webfont.eot | Bin 35345 -> 0 bytes .../static/media/fonts/lato-bold-webfont.svg | 2835 ------ .../static/media/fonts/lato-bold-webfont.ttf | Bin 76416 -> 0 bytes .../static/media/fonts/lato-bold-webfont.woff | Bin 38452 -> 0 bytes .../media/fonts/lato-bold-webfont.woff2 | Bin 30492 -> 0 bytes .../media/fonts/lato-regular-webfont.eot | Bin 35051 -> 0 bytes .../media/fonts/lato-regular-webfont.svg | 2836 ------ .../media/fonts/lato-regular-webfont.ttf | Bin 76504 -> 0 bytes .../media/fonts/lato-regular-webfont.woff | Bin 38288 -> 0 bytes .../media/fonts/lato-regular-webfont.woff2 | Bin 30356 -> 0 bytes ep2017/static/media/hour.png | Bin 7922 -> 0 bytes ep2017/static/media/room.png | Bin 3652 -> 0 bytes ep2017/static/media/speaker.png | Bin 7016 -> 0 bytes ep2017/static/media/sponsors/.DS_Store | Bin 6148 -> 0 bytes ep2017/static/media/sponsors/psf.png | Bin 136440 -> 0 bytes ep2017/static/moment.min.js | 6 - ep2017/static/talks.css | 363 - ep2017/static/time_handling.js | 26 - ep2017/templates/clock.html | 8 - ep2017/templates/feeds.html | 196 - ep2017/templates/hall.html | 207 - ep2017/templates/index.html | 255 - ep2017/templates/menu.html | 20 - ep2017/templates/multi_index.html | 177 - ep2018/__init__.py | 0 ep2018/static/data/accepted_talks.json | 8195 ----------------- ep2018/static/data/clean-talks.json | 1 - ep2018/static/index.js | 30 - ep2018/static/jquery-2.1.4.min.js | 4 - ep2018/static/jquery-anyslider.css | 99 - ep2018/static/jquery.anyslider.js | 371 - ep2018/static/jquery.easing.1.3.js | 37 - .../static/media/fonts/lato-black-webfont.eot | Bin 34359 -> 0 bytes .../static/media/fonts/lato-black-webfont.svg | 2551 ----- .../static/media/fonts/lato-black-webfont.ttf | Bin 75288 -> 0 bytes .../media/fonts/lato-black-webfont.woff | Bin 37448 -> 0 bytes .../media/fonts/lato-black-webfont.woff2 | Bin 29636 -> 0 bytes .../static/media/fonts/lato-bold-webfont.eot | Bin 35345 -> 0 bytes .../static/media/fonts/lato-bold-webfont.svg | 2835 ------ .../static/media/fonts/lato-bold-webfont.ttf | Bin 76416 -> 0 bytes .../static/media/fonts/lato-bold-webfont.woff | Bin 38452 -> 0 bytes .../media/fonts/lato-bold-webfont.woff2 | Bin 30492 -> 0 bytes .../media/fonts/lato-regular-webfont.eot | Bin 35051 -> 0 bytes .../media/fonts/lato-regular-webfont.svg | 2836 ------ .../media/fonts/lato-regular-webfont.ttf | Bin 76504 -> 0 bytes .../media/fonts/lato-regular-webfont.woff | Bin 38288 -> 0 bytes .../media/fonts/lato-regular-webfont.woff2 | Bin 30356 -> 0 bytes ep2018/static/media/hour.png | Bin 7922 -> 0 bytes ep2018/static/media/room.png | Bin 3652 -> 0 bytes ep2018/static/media/speaker.png | Bin 7016 -> 0 bytes ep2018/static/media/sponsors/.DS_Store | Bin 6148 -> 0 bytes ep2018/static/media/sponsors/2nd.png | Bin 49217 -> 0 bytes ep2018/static/media/sponsors/Criteo.png | Bin 6223 -> 0 bytes ep2018/static/media/sponsors/Microsoft.png | Bin 20012 -> 0 bytes ep2018/static/media/sponsors/Nexmo.png | Bin 18963 -> 0 bytes ep2018/static/media/sponsors/ONTRUCK.png | Bin 6296 -> 0 bytes ep2018/static/media/sponsors/adimian.png | Bin 16548 -> 0 bytes ep2018/static/media/sponsors/dd.png | Bin 67333 -> 0 bytes ep2018/static/media/sponsors/demonware.png | Bin 15698 -> 0 bytes ep2018/static/media/sponsors/facebook.png | Bin 20930 -> 0 bytes ep2018/static/media/sponsors/intel.png | Bin 32629 -> 0 bytes ep2018/static/media/sponsors/jetbrains.png | Bin 167813 -> 0 bytes ep2018/static/media/sponsors/kiwi.png | Bin 31218 -> 0 bytes ep2018/static/media/sponsors/numberly.png | Bin 30870 -> 0 bytes ep2018/static/media/sponsors/psf.png | Bin 136440 -> 0 bytes ep2018/static/media/sponsors/winton.jpg | Bin 733525 -> 0 bytes ep2018/static/media/sponsors/yelp.png | Bin 25288 -> 0 bytes ep2018/static/moment.min.js | 6 - ep2018/static/time_handling.js | 26 - ep2018/templates/clock.html | 8 - flask-nexttalk/app.py | 165 + flask-nexttalk/config.py | 19 + flask-nexttalk/momentjs.py | 29 + sponsors.py => flask-nexttalk/sponsors.py | 4 +- .../static/data/accepted_talks.json | 0 .../static/data/clean-talks.json | 0 {ep2016 => flask-nexttalk}/static/index.js | 0 .../static/jquery-2.1.4.min.js | 0 .../static/jquery-anyslider.css | 0 .../static/jquery.anyslider.js | 0 .../static/jquery.easing.1.3.js | 0 .../static/media/conference_logo.png | Bin .../static/media/fonts/lato-black-webfont.eot | Bin .../static/media/fonts/lato-black-webfont.svg | 0 .../static/media/fonts/lato-black-webfont.ttf | Bin .../media/fonts/lato-black-webfont.woff | Bin .../media/fonts/lato-black-webfont.woff2 | Bin .../static/media/fonts/lato-bold-webfont.eot | Bin .../static/media/fonts/lato-bold-webfont.svg | 0 .../static/media/fonts/lato-bold-webfont.ttf | Bin .../static/media/fonts/lato-bold-webfont.woff | Bin .../media/fonts/lato-bold-webfont.woff2 | Bin .../media/fonts/lato-regular-webfont.eot | Bin .../media/fonts/lato-regular-webfont.svg | 0 .../media/fonts/lato-regular-webfont.ttf | Bin .../media/fonts/lato-regular-webfont.woff | Bin .../media/fonts/lato-regular-webfont.woff2 | Bin .../static/media/hour.png | Bin .../static/media/room.png | Bin .../static/media/speaker.png | Bin .../static/media/sponsors/.DS_Store | Bin .../static/media/sponsors/2nd.png | Bin .../static/media/sponsors/Criteo.png | Bin .../static/media/sponsors/Microsoft.png | Bin .../static/media/sponsors/Nexmo.png | Bin .../static/media/sponsors/ONTRUCK.png | Bin .../static/media/sponsors/adimian.png | Bin .../static/media/sponsors/dd.png | Bin .../static/media/sponsors/demonware.png | Bin .../static/media/sponsors/facebook.png | Bin .../static/media/sponsors/intel.png | Bin .../static/media/sponsors/jetbrains.png | Bin .../static/media/sponsors/kiwi.png | Bin .../static/media/sponsors/numberly.png | Bin .../static/media/sponsors/psf.png | Bin .../static/media/sponsors/winton.jpg | Bin .../static/media/sponsors/yelp.png | Bin .../static/moment.min.js | 0 {ep2018 => flask-nexttalk}/static/talks.css | 0 .../static/time_handling.js | 0 talks.py => flask-nexttalk/talks.py | 9 +- .../templates/clock.html | 0 .../templates/multi_index.html | 0 flask-nexttalk/version.py | 1 + momentjs.py | 23 - package-lock.json | 31 + package.json | 25 + tasks.py | 120 + 178 files changed, 397 insertions(+), 36699 deletions(-) delete mode 100644 app.py delete mode 100644 auto_app.py delete mode 100644 auto_rpi.py delete mode 100644 config.py delete mode 100755 ep2016/static/media/01-Standard logo.pdf delete mode 100755 ep2016/static/media/06-Secondary Logo C.pdf delete mode 100755 ep2016/static/media/ep_logo.png delete mode 100644 ep2016/static/media/sponsors/BW/bbva.png delete mode 100644 ep2016/static/media/sponsors/BW/bilbao.bmp delete mode 100644 ep2016/static/media/sponsors/BW/hired.png delete mode 100644 ep2016/static/media/sponsors/BW/intel.png delete mode 100644 ep2016/static/media/sponsors/BW/microsoft.png delete mode 100644 ep2016/static/media/sponsors/BW/psf.png delete mode 100644 ep2016/static/media/sponsors/BW/upv.png delete mode 100644 ep2016/static/media/sponsors/BW/winton.png delete mode 100644 ep2016/static/media/sponsors/bbva.png delete mode 100644 ep2016/static/media/sponsors/bilbao.png delete mode 100644 ep2016/static/media/sponsors/hired.png delete mode 100755 ep2016/static/media/sponsors/intel.png delete mode 100644 ep2016/static/media/sponsors/microsoft.png delete mode 100755 ep2016/static/media/sponsors/originals/PSF-Logo-Narrow-Shapes.png delete mode 100644 ep2016/static/media/sponsors/originals/bbva.png delete mode 100644 ep2016/static/media/sponsors/originals/bilbao.png delete mode 100644 ep2016/static/media/sponsors/originals/ehu.png delete mode 100644 ep2016/static/media/sponsors/originals/hired.png delete mode 100755 ep2016/static/media/sponsors/originals/intel.png delete mode 100644 ep2016/static/media/sponsors/originals/microsoft.png delete mode 100644 ep2016/static/media/sponsors/originals/winton.png delete mode 100644 ep2016/static/media/sponsors/upv.png delete mode 100644 ep2016/static/media/sponsors/winton.png delete mode 100644 ep2016/static/talks.css delete mode 100644 ep2016/templates/feeds.html delete mode 100644 ep2016/templates/hall.html delete mode 100644 ep2016/templates/index.html delete mode 100644 ep2016/templates/menu.html delete mode 100644 ep2016/templates/multi_index.html delete mode 100644 ep2017/__init__.py delete mode 100644 ep2017/static/data/accepted_talks.json delete mode 100644 ep2017/static/data/clean-talks.json delete mode 100644 ep2017/static/index.js delete mode 100644 ep2017/static/jquery-2.1.4.min.js delete mode 100644 ep2017/static/jquery-anyslider.css delete mode 100644 ep2017/static/jquery.anyslider.js delete mode 100644 ep2017/static/jquery.easing.1.3.js delete mode 100644 ep2017/static/media/ep_logo.png delete mode 100755 ep2017/static/media/fonts/lato-black-webfont.eot delete mode 100755 ep2017/static/media/fonts/lato-black-webfont.svg delete mode 100755 ep2017/static/media/fonts/lato-black-webfont.ttf delete mode 100755 ep2017/static/media/fonts/lato-black-webfont.woff delete mode 100755 ep2017/static/media/fonts/lato-black-webfont.woff2 delete mode 100755 ep2017/static/media/fonts/lato-bold-webfont.eot delete mode 100755 ep2017/static/media/fonts/lato-bold-webfont.svg delete mode 100755 ep2017/static/media/fonts/lato-bold-webfont.ttf delete mode 100755 ep2017/static/media/fonts/lato-bold-webfont.woff delete mode 100755 ep2017/static/media/fonts/lato-bold-webfont.woff2 delete mode 100755 ep2017/static/media/fonts/lato-regular-webfont.eot delete mode 100755 ep2017/static/media/fonts/lato-regular-webfont.svg delete mode 100755 ep2017/static/media/fonts/lato-regular-webfont.ttf delete mode 100755 ep2017/static/media/fonts/lato-regular-webfont.woff delete mode 100755 ep2017/static/media/fonts/lato-regular-webfont.woff2 delete mode 100644 ep2017/static/media/hour.png delete mode 100644 ep2017/static/media/room.png delete mode 100644 ep2017/static/media/speaker.png delete mode 100644 ep2017/static/media/sponsors/.DS_Store delete mode 100755 ep2017/static/media/sponsors/psf.png delete mode 100644 ep2017/static/moment.min.js delete mode 100644 ep2017/static/talks.css delete mode 100644 ep2017/static/time_handling.js delete mode 100644 ep2017/templates/clock.html delete mode 100644 ep2017/templates/feeds.html delete mode 100644 ep2017/templates/hall.html delete mode 100644 ep2017/templates/index.html delete mode 100644 ep2017/templates/menu.html delete mode 100644 ep2017/templates/multi_index.html delete mode 100644 ep2018/__init__.py delete mode 100644 ep2018/static/data/accepted_talks.json delete mode 100644 ep2018/static/data/clean-talks.json delete mode 100644 ep2018/static/index.js delete mode 100644 ep2018/static/jquery-2.1.4.min.js delete mode 100644 ep2018/static/jquery-anyslider.css delete mode 100644 ep2018/static/jquery.anyslider.js delete mode 100644 ep2018/static/jquery.easing.1.3.js delete mode 100755 ep2018/static/media/fonts/lato-black-webfont.eot delete mode 100755 ep2018/static/media/fonts/lato-black-webfont.svg delete mode 100755 ep2018/static/media/fonts/lato-black-webfont.ttf delete mode 100755 ep2018/static/media/fonts/lato-black-webfont.woff delete mode 100755 ep2018/static/media/fonts/lato-black-webfont.woff2 delete mode 100755 ep2018/static/media/fonts/lato-bold-webfont.eot delete mode 100755 ep2018/static/media/fonts/lato-bold-webfont.svg delete mode 100755 ep2018/static/media/fonts/lato-bold-webfont.ttf delete mode 100755 ep2018/static/media/fonts/lato-bold-webfont.woff delete mode 100755 ep2018/static/media/fonts/lato-bold-webfont.woff2 delete mode 100755 ep2018/static/media/fonts/lato-regular-webfont.eot delete mode 100755 ep2018/static/media/fonts/lato-regular-webfont.svg delete mode 100755 ep2018/static/media/fonts/lato-regular-webfont.ttf delete mode 100755 ep2018/static/media/fonts/lato-regular-webfont.woff delete mode 100755 ep2018/static/media/fonts/lato-regular-webfont.woff2 delete mode 100644 ep2018/static/media/hour.png delete mode 100644 ep2018/static/media/room.png delete mode 100644 ep2018/static/media/speaker.png delete mode 100644 ep2018/static/media/sponsors/.DS_Store delete mode 100644 ep2018/static/media/sponsors/2nd.png delete mode 100644 ep2018/static/media/sponsors/Criteo.png delete mode 100644 ep2018/static/media/sponsors/Microsoft.png delete mode 100644 ep2018/static/media/sponsors/Nexmo.png delete mode 100644 ep2018/static/media/sponsors/ONTRUCK.png delete mode 100644 ep2018/static/media/sponsors/adimian.png delete mode 100644 ep2018/static/media/sponsors/dd.png delete mode 100644 ep2018/static/media/sponsors/demonware.png delete mode 100644 ep2018/static/media/sponsors/facebook.png delete mode 100644 ep2018/static/media/sponsors/intel.png delete mode 100644 ep2018/static/media/sponsors/jetbrains.png delete mode 100644 ep2018/static/media/sponsors/kiwi.png delete mode 100644 ep2018/static/media/sponsors/numberly.png delete mode 100755 ep2018/static/media/sponsors/psf.png delete mode 100644 ep2018/static/media/sponsors/winton.jpg delete mode 100644 ep2018/static/media/sponsors/yelp.png delete mode 100644 ep2018/static/moment.min.js delete mode 100644 ep2018/static/time_handling.js delete mode 100644 ep2018/templates/clock.html create mode 100644 flask-nexttalk/app.py create mode 100644 flask-nexttalk/config.py create mode 100644 flask-nexttalk/momentjs.py rename sponsors.py => flask-nexttalk/sponsors.py (95%) rename {ep2016 => flask-nexttalk}/static/data/accepted_talks.json (100%) rename {ep2016 => flask-nexttalk}/static/data/clean-talks.json (100%) rename {ep2016 => flask-nexttalk}/static/index.js (100%) rename {ep2016 => flask-nexttalk}/static/jquery-2.1.4.min.js (100%) rename {ep2016 => flask-nexttalk}/static/jquery-anyslider.css (100%) rename {ep2016 => flask-nexttalk}/static/jquery.anyslider.js (100%) rename {ep2016 => flask-nexttalk}/static/jquery.easing.1.3.js (100%) rename ep2018/static/media/ep_logo.png => flask-nexttalk/static/media/conference_logo.png (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-black-webfont.eot (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-black-webfont.svg (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-black-webfont.ttf (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-black-webfont.woff (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-black-webfont.woff2 (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-bold-webfont.eot (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-bold-webfont.svg (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-bold-webfont.ttf (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-bold-webfont.woff (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-bold-webfont.woff2 (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-regular-webfont.eot (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-regular-webfont.svg (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-regular-webfont.ttf (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-regular-webfont.woff (100%) rename {ep2016 => flask-nexttalk}/static/media/fonts/lato-regular-webfont.woff2 (100%) rename {ep2016 => flask-nexttalk}/static/media/hour.png (100%) rename {ep2016 => flask-nexttalk}/static/media/room.png (100%) rename {ep2016 => flask-nexttalk}/static/media/speaker.png (100%) rename {ep2016 => flask-nexttalk}/static/media/sponsors/.DS_Store (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/2nd.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/Criteo.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/Microsoft.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/Nexmo.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/ONTRUCK.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/adimian.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/dd.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/demonware.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/facebook.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/intel.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/jetbrains.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/kiwi.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/numberly.png (100%) rename {ep2016 => flask-nexttalk}/static/media/sponsors/psf.png (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/winton.jpg (100%) rename {ep2017 => flask-nexttalk}/static/media/sponsors/yelp.png (100%) rename {ep2016 => flask-nexttalk}/static/moment.min.js (100%) rename {ep2018 => flask-nexttalk}/static/talks.css (100%) rename {ep2016 => flask-nexttalk}/static/time_handling.js (100%) rename talks.py => flask-nexttalk/talks.py (92%) rename {ep2016 => flask-nexttalk}/templates/clock.html (100%) rename {ep2018 => flask-nexttalk}/templates/multi_index.html (100%) create mode 100644 flask-nexttalk/version.py delete mode 100644 momentjs.py create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 tasks.py diff --git a/app.py b/app.py deleted file mode 100644 index 980ab87..0000000 --- a/app.py +++ /dev/null @@ -1,165 +0,0 @@ -__author__ = 'oier' - -import pytz -from datetime import datetime -from threading import Thread, Event -from time import sleep - -from flask import Flask, render_template -from flask import send_from_directory, request -#from flask.ext.socketio import SocketIO -from momentjs import momentjs - -from talks import Talks -from sponsors import Sponsors -import config as cfg - -import os - -# Initialize the Flask application -print(cfg.TEMPLATES_PATH) -app = Flask(__name__, static_path="/" + cfg.STATIC_PATH, static_url_path="/" + cfg.STATIC_PATH, template_folder=cfg.TEMPLATES_PATH) -app.config['DEBUG'] = True - -#socket = SocketIO(app) -# Set jinja template global -app.jinja_env.globals['momentjs'] = momentjs - -thread = Thread() -thread_stop_event = Event() - -#ADD ONE ROUTE PER FOLDER IN STATIC FOLDER -@app.route('/'+ cfg.STATIC_PATH +'/media/fonts/') -@app.route('/'+ cfg.STATIC_PATH +'/') -@app.route('/'+ cfg.STATIC_PATH +'/media/sponsors/') -@app.route('/'+ cfg.STATIC_PATH +'/media/') -def serve_static(filename): - url = os.path.dirname(str(request.url_rule))[1:] - #root_dir = os.path.dirname(os.getcwd()) - return send_from_directory(url, filename) - -@app.route('/') -def index(): - pytz.timezone(cfg.LOCAL_TZ) - naive = datetime.now().replace(minute=50) - - talks = Talks() - #current, next_t = talks.filter_talks_by_time(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - #print current - #print next_t - - #rooms = talks.filter_talks_by_room(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - - rooms = talks.filter_talks_by_room(datetime.now()) - - empty = all([len(rooms[key]['current']) == 0 for key in rooms.keys()]) - - cur = talks.get_current(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - - sponsors = Sponsors() - sponsors_list = sponsors.sponsors_list() - print(sponsors_list) - # import pprint - # #pprint.pprint(rooms) - # pprint.pprint(cur) - # Render template with a test timestamp - # print(datetime.now().replace(minute=0)) - return render_template('multi_index.html', - timestamp=naive, - empty=empty, - talks_list=rooms, - sponsors=sponsors_list, - social_iframe_src=cfg.SOCIAL_IFRAME_SRC) - -@app.route('/feeds') -def feeds(): - temp = ' ' - temp = ''' - - ''' - - #return render_template('feeds.html', - # event='europython2016', - # feed_url='http://www.smartfeedz.com/', - # static_url="http://www.smartfeedz.com/static/", - # feed_source='http://www.smartfeedz.com/livepage/live-lite/europython2016/') - return temp - -@app.route('/menu/') -def menu(): - talks = Talks() - #rooms = talks.filter_talks_by_room(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - rooms = talks.filter_talks_by_room(datetime.now()) - - return render_template('menu.html', - options = rooms.keys() ) - - -@app.route('/room/') -def room_info(track): - if "Hall" in track: - return render_hall(track) - return render_room(track) - -@app.route('/hall') -def render_hall(): - pytz.timezone("Europe/Madrid") - naive = datetime.now().replace(minute=50) - - talks = Talks() - - #rooms = talks.filter_talks_by_room(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - - rooms = talks.filter_talks_by_room(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) - - print(rooms.keys()) - actual = rooms.pop("Exhibition Hall / Helpdesk ") - - other = random_talks(rooms) - - print(datetime.now().replace(minute=0)) - return render_template('hall.html', - now_happening=actual["current"], - will_happen=actual["next"], - talks_list=other) - -def random_talks(talks): - ts = [] - for k in talks.keys(): - actual = talks.pop(k) - ts.append(actual["current"]) - ts.append(actual["next"]) - import random - return random.sample(ts, 10) - - -def render_room(room): - pytz.timezone("Europe/Madrid") - naive = datetime.now().replace(minute=50) - - talks = Talks() - - #rooms = talks.filter_talks_by_room(datetime.strptime('2015-07-22 15:45:00', '%Y-%m-%d %H:%M:%S')) - rooms = talks.filter_talks_by_room(datetime.now()) - - actual = rooms.pop(room) - other = rooms - - #next_talks = sorted(actual["next"], key=getattr('start')) - print(datetime.now().replace(minute=0)) - return render_template('index.html', - room_name = room, - timestamp=naive, - next_talk=actual["current"], - talks= actual["next"], - talks_list=other) - - -# Run -if __name__ == '__main__': - app.run( - # debug=True, - host = "0.0.0.0", - port = 5000 - ) - # socket.run(app) diff --git a/auto_app.py b/auto_app.py deleted file mode 100644 index 2313ad0..0000000 --- a/auto_app.py +++ /dev/null @@ -1,26 +0,0 @@ -import subprocess - - -commands = [ - "fuser -k 5000/tcp", #kill process in port 5000 - "pip install virtualenv", - "virtualenv env -p /usr/bin/python2.7", - "env/bin/pip install -r requirements/dev_requirements.txt", - "env/bin/python app.py" - -] - -#run_app = "env/bin/python app.py" - -for i in commands: - print(i) - process = subprocess.Popen(i.split(), stdout=subprocess.PIPE) - process.wait() - -#process = subprocess.Popen(run_app.split(), stdout=subprocess.PIPE) - -#import git - -#g = git.cmd.Git(".") -#while T: -# print(git.pull()) diff --git a/auto_rpi.py b/auto_rpi.py deleted file mode 100644 index e044169..0000000 --- a/auto_rpi.py +++ /dev/null @@ -1,31 +0,0 @@ -import subprocess - - -commands = [ - "fuser -k 5000/tcp", #kill process in port 5000 - "pip install virtualenv", - "virtualenv env -p /usr/bin/python2.7", - "env/bin/pip install -r requirements/dev_requirements.txt", - "env/bin/python app.py", - "@xset s noblank", - "@xset s off", - "@xset -dpms", - "iceweasel http://0.0.0.0:5000 &", - "sleep 60", - "xdotool search --onlyvisible --name iceweasel key F11" -] - -#run_app = "env/bin/python app.py" - -for i in commands: - print(i) - process = subprocess.Popen(i.split(), stdout=subprocess.PIPE) - process.wait() - -#process = subprocess.Popen(run_app.split(), stdout=subprocess.PIPE) - -#import git - -#g = git.cmd.Git(".") -#while T: -# print(git.pull()) diff --git a/config.py b/config.py deleted file mode 100644 index 35f7187..0000000 --- a/config.py +++ /dev/null @@ -1,31 +0,0 @@ -__author__ = 'oier' - -import os - -DATA_PATH = "data" -DB_NAME = "p3_june_29.db" -DB_PATH = os.path.join(DATA_PATH, DB_NAME) -THEME = "ep2018" - -TALKS_JSON = "/static/data/accepted_talks.json" - -STATIC = "static" -TEMPLATES = "templates" - -LOCAL_TZ = "Europe/Madrid" - -#IF THE THEME ALLOWES: - -SPONSORS_IMAGES = 'media/sponsors' #in static folder!!!! - -SOCIAL_IFRAME_SRC = "http://ep.patrick.wtf/" - - -#Everything autogenerated from here. You should touch nothing. -#REMEMBER TO SET THE ROUTES IN APP.PY!!!!!!! -STATIC_PATH = os.path.join(THEME, STATIC) -TEMPLATES_PATH = os.path.join(THEME, TEMPLATES) -TALKS_PATH = "%s%s%s%s" % (os.path.dirname(os.path.abspath(__file__)),"/",THEME, TALKS_JSON) - -if SPONSORS_IMAGES: - SPONSORS_IMAGES_PATH = os.path.join(THEME, STATIC, SPONSORS_IMAGES) diff --git a/ep2016/static/media/01-Standard logo.pdf b/ep2016/static/media/01-Standard logo.pdf deleted file mode 100755 index 6f9f8d075c1f3e630790811cc517c1170cf189e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312949 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

0yG85 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 may6e%1 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�ZxO8JAQ4ONS?}yD*fbk{G zPEJXzpt8^C(1sr-)$`zpEjY|SPplaQfJ{N(!v-BK%YkmwVsUjMNHt1H2&K8c1X-R( zK?~k>*QGD!&Z&PsId41I>9{E|#htSquy}y^rS(OKDA|Y_jbGwt86RQt7T<(72TR17 zvR|<>>1N~1mS2192tougbw17k$lPii;l!wz)tF+U`ylURatqL+7!LKQW$PTLiQL#w z^I<{=&jE}&0fPQ$%E9lSrym<$X&nPQw9u�M13u<~xmD)2@%TzL>VdVA4&@77iOS zDWG>aXMMwc2ZMvoBgDcY{sP8CSfKSOz#*5F{Rlizdu=BzGr(qb*|FV7;ra&2d2bT`#B6C z<33Eh@TX!6(KJlI?hXaMh60l{Q1m1^5~4hT{FG?*MEPxL_&eZOsEtd;U>am7X9pZ( z`EReY#z+dTh+Qe0qd>T-Zgzxx$(t-IThR_uI0Er7LF3%wgXVo_j2?e1gG!Q)u%Kng z;VG}z@z&2Ex4l%;eRUQE^`;w-C67Xj8p0O)Q|)4-&CcFtY>Ly~MK5mS44d+s5050qu=pCrk}!p+s2D;D5v~X-U_FIy>*4L$z%d1EzNO^j&hZZ83Rv*M z0UMkHTmzU|F>IOz1SA^`MK6 zMI3{f>@x`>5pc|D@wx0;UQvo06Xbh*LAKOJc(FpaDAUo$qv1I`@8t?UQ*!5onkFNy zndLYs5#?-7H75M0lh9S++s@IHsbilUU#)?FlmBJ_Set9(P(Y+462A09A8;wT+u^W6AE&s6y7=^;#b+^TVEHFiqgGL20MU0C`O78 zAK1iLjmK?Pi4az_qpTo3W9_AcRv&MY11D58aZbvP8DYO`4w%A!J%gV zkb}~(fKN!v%cg8;G`FvAsK7<;@rmf$iEvciaC|Uam<4B!dcf@%I>gmYl}?ur9!G78 zWxg-<=8UL+w-)Nrk4xXnZ}O>2t1orsi5%IE+4ZJK_VF_b4(IKdK8GB*aGi33bVc8U z^M5Ad!*aa!N+({qKlA@z`rwV?mJ^^aU?Acg%*EsUZ<(aUnX2Bl%yalWF3zLo`8)1J zB}zCz?@?E>tl*n+#x=W^&CmTm;>hB#>@_SW%O?ipeRZ@FkModw^?pd6rd$c7Rq6TF z{}vJZV5nf)-OFv+=Y)H;MGu#=m5#{)JMb^R$sbd{t}QYeM$>oB{bQQujhp2w?Y>>) zvOQqb#IkQOhZ)id55;21@<$1Q&4K)Q{AmeMp&NRV%SGoyL`n?cDxTxNh!;k9xv!-0w|GqbvU;iDv zM{F_J%tqlcx5gDYC}D?mR2pKBNyKGmAuO+FH)*mGAxwP6C|F4*)|BP8%n*NU%{^;D z0*+v;9+9Q^s;BwNOQNPPLOD-?RL7%IwK^n1hoGnz_8HN|93 zWLuIXKn8`zTx~`&E$w{j*bJ{EpKAWwDg~?89#zpe(;4MB#aX?C9i{~Fk#T`?etn2_ zmcGLgb^{E_r~S&ANZOewNbor$@$@b)^Rk-q%cC6;D~z?%)2h0cMqin+RqXwRGq8kYdM=3bm+ERN4QG47m;64x`(9FKs4{4WTX zTFr-wol|@^ITo2PBqssE$U{-?0ThFDz!}|vZ>z$;U<`y>^WXFpyfQxv8kmw3ukRgZ z5qA6J^d-6bPbyt+;s82V)^i~%R1|oRVkLJOJVYDs+5v@_daE{q^uaucK z3L`h_y!`!FUaoZ|^*_7)AfzM(B|y-Wz3d1Vm4qT3!OMGpbFxs962domJ|&Ij>n-ay zaKTnSnjijY8iBn05>3m>5La`a01Yl%0Enu22qV+hRM`%9G(EC1Tiqb6unBcpAmRvo z55zb2B?5na(mmw*wP%inK+Dwt!VoF#EE*av00Mf1p)8#end|APq>nJl3zKV-c+Bo% zQG0}e2wY_FZR%1*o>@=e*S=hbm^bwszsB4#LWd{=CWi?V8NDgd)@Q}+77i;JAY{!o zvLN1cy~4_+Vrj+Cx0r7X;iAsxjgHZ zQ?&&=lcv+4GC{AH=c2tuUBo1t)nX?lxa`fSa(u=;5RrZ<;4m%NO!*L$_iHOYuC%ajI8mO$YFD=;n=RSL9{F9`3O^b#0XNRWmpfaEG>(JA{!v! zEZ-O{Smm*k{a;d87FNhK-kc&ds8{b$kRh%~&a zL%v6=yVe|@dM|L7N~O5~=$OwLC0sXWfOZW)pCsqt?Hp+;YncqfY(RMZ3LcXi4afhDcKECSqiGs{`NxyYvDO= z25(!4fjUcJS>&ni3=lVO>>vy4_EG+de>4d0oY0Re1p@ldj=$lrfD|j4<90)Zx3Y}V zIAaa4tV??e8`3bq0~^=_ZBs}Y34qU%L|TtN(Ylb{;NOiG|78K^-cOX1#t0-X($TM% zU=Lb(UJtMG>(V*FSYHpZx@+2DxtYKPWOw0i)>ccw-6y&@IQhr7VmwTlgn{@=vUl#0h8blnu1T58a zh9)EB8KaHE%l1+J9)O}igA&OMY+B8BQyIY55Ra30-G2Ty zs0HaLH$9{ofQ3N+-B?9xdPWtpuu#!YnTamI?ZV1-=lhyf9)vQ?D4`9%)4+t@t}0-` z&Ac*`qUL}{O^Tc`{gf_SfK^lg=+p>hmU>Y0x&f-Wc*PD3xs9Y07>YEI#bF1E+5~Ja zG3b~bJZj0ywzDD!%b;cRV^JV55;Fw<=HShU<^4J+R6yev>$$g44LNZ@IOnfn!V5FU zzOD$yQsWdbFr!#dRuCxaRoh*-I2StVJ)fD{s9 zJ#?tb0F!K;6ho|rl(3x-Fg!045sfz&Zi!ffgSYKFhnFJ9q(&|CTX|q~^>-ojdD)1j z$;tC7mSG&NOU{dJBlPR5K}Ei3KX)Dz2l12SZJK5*sT1Gs*-n(t^ytY#REXm8z@FBE9_o3(D=(~nNFn_fNS}3g*O2@0eRmm@4(*$}bKU8j7hx)nN-(19 z>5%t?vJr-b{LubM|E@i9D}%me8}pCmY$4sjxj5}cTlNcJJxjB5!QnZVff}_AP-{6_ zm?+3p9*%~chUSy=?K@?@4^{g|f|%RA^x{~UR22X0pU_IL)tNWtFK);!yP}T!SN)~Z z2q!4VZZ1f4ZDN+;Pc=8riPb}1)OwEhiR!00Fg2&{?aSD&PrH6lf57l8E5biW4BvuXeUV&@lVyE`950Pql{{ot)J0Ama`xUx+P zIDAve^Ei<1g!79xfVRP#UOKvh_{;yE^GHo=f=W_xotO~ksSNL%9 z2qYgVNc>qM&4{NN0MxAQ=H?~jE>uJFVMOXPD}{&UmvmJ4y*A(rT5&NW=gS2)(%hkh zJnt~=euEEz6p+27%V zUpXIqNf)8m=iTj`fS+_n0~}5t$0$=~3`ZwO8ISql;SvTian(4US#>1@uR!Ok4xLLx zHTQU=pj7NMO^zjA9lKW)H2+#|0o{mx`C@kx)efEyMl^p%eM1ODG=i~V6cL=D>6C4U zW7k;3Uv9ouksHX(^lQ5bO6!>Hk@Nk>>V%zqhQDo_F0h z^4iuj%56VqgV3EVR_XSwdJjJ=nU{kNzk@wEX)Tk$V>Tj}QY{e(P$I?(_0a;RK}nb> zjI$tNRv0XA?=6H6y)wPYglk`92g{O_NoJL=Btg?CG)xrnxZu6F(tAeGkxU;HZT=@ z=rReQBqIU2Z|Zk>^d#v>At?BPI|BJ+JqdB)_aL=uMaJ$3E&AqtA>|sWcjWPrIM{D- zFIQXgI+{iL1AMWJf)FOLlN^~bFkrl7(=jsRo;A;|eZOk$T7&rc4QG$VD>doWRn=~{ z`y@AI>O$5v6J);o{Ox;>$2xLinRNi{L_bn~UGwz&_f|T|Lr>V!LNa3x;a6F+8QjDi ztyTo+A+TZIK9hw-f3wIVs&mh$Tu=Ly>N9c*4f@Vlcl9Ld!lW3O3A(x3l5Q$K>F}Qd zP=56w5#BQueVWUO!yIB;{+$W84;I>4d#auz4w!+9yhNm%fH6-gj!%SM=t1tE*>8@9 z1#3Fln0-a_&sDYsHyDF6@&9P1G#05hYFeM}q05w==DS0Xl|{-#D-Eu)qJ_o6tBPG^ z7XQwDK&J^>`edJ!EF#a7e<4Ye>HSWE{uXP_v z`qGD1_@g_}mxlL3Da< z>7-1Yf_TL=|OEhyV;~j3>(r5`P88`h$vIO1?S8!Dop78H}En9kKZB9w+epm=)23 z&~=N^lObU-J`H+K-JcDc5ud-=H^$=FG$pz}=VSdht59@J`+SJ;j)2$yh0!ds%vi{0 zW3p>|l#t%{eE6hrbQ27DA!cH8w5nZqLW8`nelsk|+tn7tol3Z$s%LV}-M>a7v&)e$ z8-#8&($DlSJJ3e&h5E@g?r$bw{ErUF4!IxK80VwD zu!Ui)KIw>bGhy2GzCWFsV&gvJVsVF*Z-9=#mml`5y;)JuGGDC+n6g8^k7JC`4Y5J+ z#ysJw`vij^hJS6$JoWJ3-(d80mro}A<$sW)SRbj#CflN-+)%wCQzO1t|1UTK_D6C0 zGwQf6A|(BHhXmaOukp0~*pVT0NZqltN1_yzKB)`*`@&JzU*kakvgE&zY0<7MH+kyX z81Jo1Q^#rm-f9_R-bxVVJs?Aj8{4B64lyXpS2_9^sZB4+Oxe5v5#Ae?*p5YpZh@J{ zg@2%(Dj#`b#9OQ9sN;9o2)puw8L# znI5@Zf%~jk)UV*FHn+dOidsu9F&tS@jhnZ9zftHrB2muKm}G&ez9e@#qEU%;{=dOL|BS{Qn_lhZ==Ng0AW)k2eal z#Fpc>*;Fu+=yCVHK?d-Mbs_fys#uVr-bD+p1yWmpwLwU6Wg|5Q;Mkz!t4C0yXhi&+ z9DR7g4c#f?|-EXyK|e7s?o5gR!)4IpAfuJ02~;&nQd%ckBpAI(a-7|Ud!t??`8 zU!*sLiF!$Uh19QM13Gt1(|MPhC!F@kb zaQs#PmW2*|Lc|~P#)>uZD(&pEs$qGR`yR=bv)sZzfy$X5?9roQ`{J6bBF%3%n9LZj zXQmwx#Z_!j9&C`%EuSFf*2KoTSgl;-{B*nCe4b!ny z)l6Jj9m7UDrNo`T|0)XV~xAgTWIbU@<)DVz6+ zk;c6^&Ap07x0j*63GYm}W4AttMR35gCQ;VFO~xl5%>_jXV+eJgdb! zu*FMefIZ>VKWE$1g}hW7E@O~TF43QqU*9CP@tQ!qNjHWW5(E}U^UzA4r2s0vR8Xo$ zi_=I>fKSL2@PJuHrKlW|HKGs9O$%u=KPaiLG3_ot5E%&GE|j{p`1&j5=|WKpvDS_H zPB@hyp^@l%6u#-RjZwaS?(y3DIpB4S�YpvTxr>mkV<=|8}OkLATd7cK=2EA~dsq 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 z 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 diff --git a/ep2016/static/media/06-Secondary Logo C.pdf b/ep2016/static/media/06-Secondary Logo C.pdf deleted file mode 100755 index 2c48ef9c844a7dac1ef27613ee5d6f0e4740b2e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313455 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 UnbfTb{(%7fC@oU@LFdc=1LB^>k^lez diff --git a/ep2016/static/media/sponsors/BW/bbva.png b/ep2016/static/media/sponsors/BW/bbva.png deleted file mode 100644 index d3d1e7da210f7f8222a0d5ffc7fdf8451b85280d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413971 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

AQeIgs<}|@HuvI(F=BHn{6Yn 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 z?QO<0-Vg|Z5D0;2U#@`=2!Rj?fxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm z#xvd!2!Rj?foNZ@fe;9R5D0<25s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0 z-Vg|Z5D0;2U#@`=2!Rj?fxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd! z2!Rj?foNZ@fe;9R5D0<25s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z z5D0;2U#@`=2!Rj?fxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj? zfoNZ@fe;9R5D0<25s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2 zU#@`=2!Rj?fxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@ zfe;9R5D0<25s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`= z2!Rj?fxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@fe;9R z5D0<25s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`=2!Rj? zfxQuk_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@fe;9R5D0<2 z5s3EfZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`=2!Rj?fxQuk z_U&!PGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@fe;9R5D0<25s3Ef zZN@X+5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`=2!Rj?fxQuk_U&!P zGu{vgfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@fe;9R5D0<25s3EfZN@X+ z5D0+~2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`=2!Rj?fxQuk_U&!PGu{vg zfe;9RXkV^@5D0+~2!Xv3i1zJm#xvd!2!Rj?foNZ@fe;9R5D0<25s3EfZN@X+5D0+~ z2!Uu{u7MB;fe;9Ry%C7^?QO<0-Vg|Z5D0;2U#@`=2!Rj?fxQuk_U&!PGu{vgfe;9R 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 ANdN!< diff --git a/ep2016/static/media/sponsors/BW/hired.png b/ep2016/static/media/sponsors/BW/hired.png deleted file mode 100644 index 81666872b75eb6ec4e54ad8f7ce89286fbcfd98a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10983 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 diff --git a/ep2016/static/media/sponsors/BW/intel.png b/ep2016/static/media/sponsors/BW/intel.png deleted file mode 100644 index 12249781d1b412569c58e8710b044d130583f2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88056 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

Abf4)0UCc%?87?UvI+^f#TS??q) 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�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 diff --git a/ep2016/static/media/sponsors/BW/psf.png b/ep2016/static/media/sponsors/BW/psf.png deleted file mode 100644 index bd787419351bb9d971d067af4b27e57bdaafca68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104764 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

5lF)SXGi5~qpX4N=Muz-KD2j(*B` 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�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 T?@cKNt0W)GJ<5Ba=kxynHPd!g diff --git a/ep2016/static/media/sponsors/bilbao.png b/ep2016/static/media/sponsors/bilbao.png deleted file mode 100644 index fa35851dfbda81b5a739e9ee4eb27a5c5dc0d4d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28241 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

nBFnXK~4XrYS3en)4HhdB0h=D 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 G{Qm$bf+;-! diff --git a/ep2016/static/media/sponsors/hired.png b/ep2016/static/media/sponsors/hired.png deleted file mode 100644 index fb272f9d32e7fc31cfe2fc3aee9f28775ee4b7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10402 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 J=kU23{{!3c-E9B> diff --git a/ep2016/static/media/sponsors/intel.png b/ep2016/static/media/sponsors/intel.png deleted file mode 100755 index 991ca462f01c6a35dccfbd430a4cbf1821cdf863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91797 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/RxX?SLL?m6x4-dtdea61`Z)qdL~?Hp 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

i=`as7k`zm# zsSw4m3)xLt>Z^PF0atr^-er}cxm-eqX;o|N?i&95!ROCBkjxrTSrK4X>b#~gwFnPZ zzIcvjb7!tS)#P_g0z*LsjzXJi2%Kbiybf0WJgY05s-Uq><^{~;&dMd~rpk$hMRQgx z?40{J!geS9VzJ)~;YgZ$__3qEknc^Dc@K_Zi4 z@2zGyF{kSv|G|%6`O`N$MjM?j3H(J4ldtI*i?cwFXMJYD7W6v8E6mMXFdS^0F&^JA zC|IUz8uuAPF!@-ZS4i|TLjPe9ac&JGPg~`~n7Y6)Ljz>m*V1wy#M3!={n+4*9*^|p z(ju2MJQn$RS$RO;w51Kof&z38CEzPx{viCx7yo17xo4U8P4KMoSPV;NIRQ{XV*0n6 zW5ydRQIMN?B~VEwVx4ZoEN4kpp~7In9UJE!t=o*-xRq5eWYzuHcEMYfBFueiJ_u(D zP&yAfNJQivMC4b;#o)xTUf8*(c{Pts!_;k`KMtB^jOaR{O@DRMraJfVSggV!X?{ad z1Eqecyr!n8tfIEUM^9WK5z9H#$z&*}sdW1jm7w1n_XRv^Jetg(J=2#;XL6CM%D_Zk zg&19?$)aNaWG<`3Sv`8(3orI=vqAY9HG$BE$qtWN!uFMDgI!V!ke+9m^=z8 z@Wij){L)W<`r2>CqME0Kf^&hshpqvbx#fu|T|%LRnDuT<@H8#LhDL>EMWX_bN@R)G z1Af^El{j)vipVEsRQGfu$5S9Cs7~NykqW_7faJ)|6!+=XrpepSNZ?var*#if+~H zKYBgwv#L05U2B4PDpm4Dnns{I$DB-d1bcD z3cT~Dy)eHzbK~`TWJsj4j-NmB(x;08uBpwfRo|drnMG=bszF|z6Lv*eNVm1tywGxb z=sic1gpl|MlP(pQqc@vRgAJ|Jhr#9 zYi#@Ecv{pX2Pe>e7&-;8tc)5zkI(1E9YMTIKlgYXFcrzjPd?ZF?xKLZx8m+iU#EPT z;kd=4pBG|Hjw>hvI8oP)PyOiMpZUVcQxgp?w;Q}}8P2!Z8s}-8P}zpw94uUgU>J)8 z3SImvs*E(n&@~G5P;o*3LP0ApN<4=##tuZw7wl2YYk({Cm1EXuoKFekyD9(1>ArKk zV`LlA$>*CJ%dp79FHqBADgg;#4Ra2wKj_BADoFwYD$_6)S{F3>b_Ru@5`BPR&0S&0 zRsyOmFCKcm!1531mZE4C06GKBrXMylKofEWmU&Bg#G8sg=I%YOoE+h-eCL$;bXAkm z*_R&-u2E&LjBhY}NR_lOaTQuxP<%yMdwrK@;Q zFc&GXNn~@JlFpVBU8&S{c^KyT89x2o0Nneo#@TD~swt;TO=tN2f#Lu4XFq@QgJV(6 z?+JN<6AWfK<1XPgiWX*c-9-zUlGZ@aWuT;3)Hbx1ooQTG^I}D5NqcusPjot*G~WN7 zZN<}()RytdnR_};PpnHOaw6|WOVwi5Tymk11`hgVpVJK^Bgx8VUOf4mo43}ymd;3r zJ#O`)I}8mh=)EE)Q`z!JH0_fGkz-b+Wy)&UXPq~d7J8Nn@M?~PT)bXhQ5vtQ37!F7 zAE8KNN|t5H3WRq#oo<2W%i_^Qeed9O+sH)5kxEefhGn1}hN)gy2BEvPn}YmEOn3k1 zqep+I>c8K8Bvj;mj?VwA1;FDvk88Brx?soV*0Roy&Y>oi3buk%TC_&+f&wyA{s@rB z9DFzFvC@ptS z)KmqJlX)rMLq+0w{i9&-{-+O~egD{uD*KB(6kt%^wPM`)i{hOP27s^1^ziY-Ll5lcdVAykH&1j|R}{N%>FOT))QMA*n-o>z zogR@{U@xT$!FP1fbxT|x7zyV}4j%6Qz?MxF2W6Mz<;qf-EVkAMCi06dOJ39Thko#{ z&wuV@XQbKdc7p5@76tXQkeWBlPz~MzIhBrUHU%z^ptaVQq{_>K?M_LW!Ejs(vYqj4 zYD35A@!IJqC#V#uIUE{Df~n;q7b&St9Er*(&8lG?^1C3GG5FVxjqXTivwvJxwgmy$ zQ}Y-7|M-g!!y~_FzwkxXBxSDNfK7=oI7>08@BFfeLIfW^WuhBNQaK+l#!+9L!5a$7-oic zRPNX?{JJDm3?HWLMKI&YuawZz_Bk+fy4a=HY_jRvBh1oSN!#r(XE6`j!(s#UiwLdg zfAxhsmIh1a@Py&=$PvjwvYJjjrX#9)o;7y~cQXYuN#^3oY)yC1U;`D(E=s1>(oiu^ z&@W`SB|9E}{Me@k!|4*I*JCBt(Jk5b{CLOnL{C=3N`P20!-A$awG@XpZ7%(BS&8Ep z<>f`)4u>ZqOM(d;i70;hq0L2){_4ylL7(?i?Wcx5JTwyZ_yca3Gj3d3T16|Ln}W-T zrgJCHPPV;rr2B)7wKudUQ)1@A?;CmWD-9JtKRKNaOR^D(r_xEM)1|7q!4(DlPDvzQ0Hg{IXyfE~ zx-OH^Iafdc4dz=y7ec7O0A(VT2bbGJ*40<^6%~8?)x0_nkPGwq-1*}39Unb;X1bYp z+*p&EtvzBXJT6pJu$XI(Uau0!Wl~UCCCBc#v+ds+>MOr}ykn%_=XGe9IPedDe?RmO zq!19KC^#A`3VAy3x_jF>r>FZ1FCOaKmr*1h%YAW|1$Ttie$Hzmob8X*A3rsAZ{zx^ zlgB%w3)ZPCD)ubKCmaPPxBlD1Fa4iyc1^WN4mXG{VBnB9F3sg;R&fzh={#h#tkJf< zXnJE~#eW)vKiJS%F&y+c(wG-P79}Z`h?cdr*6i$PpM2kuHwShnQ#sM^b0qF(S;LTQ#S-c=RViAX~QU;jgDCis_L+P%eo8aCS@4vD~)x| zcfIst&sI@#6IpbcKpMSaD7a2%GJGbh3OYsG%LTtY$IU85eSViNOI{uGWw3k)EB1Oe z6M3RXg+|{gnal{Ps|M~Jy8uU1q zcy4ekQFX(fbqyjFreR(jI$D)f<$P&S)eQI1V*{T()iu*3IV8aH!7S#Km@dSGyD(sR zu51m*OAt?LkWFRCy|=DEd*8cvemk$GADI}Pm@=)PbJsZ}p30|Wj0%@y)#agnuS?+4 zY2{Z(n2{ zSSJVGJUM(ro&uwQ&&{mkg;y)g&3r35^Df}9DncHLy}W+&zJ{l_Zm#=IETQxi?q5~G zT;#dN1~=*Nj~AYsE-fv3{J#5k>jKYx<;fTOb{V`6+-R+5`4vnTbOf;%TJ2FO=A*ow zO{w0_&WYRKb%*j3`jrk?G)vxs0rrXZHcl%&&kJPJxbz-zP#etq89k9=ffjqT@>+eQ-Ovo6goIZm4rX|6pc5 zA893}o|j8YDn36pG`%J0EjL7`sAJqtG@e$8K$K#?b7ybg`1?A0Ch9RsA@b7_`4G%n z+Xl$IkZGtbf3>u%{1G5|jPns!8t#gF49{~U99Oc$;H!zIK5)8gV5g#D5=G9kdN1wX ztn`~^!1_(4?WLu~kMX=PV(Arl%ER1TEHw)a;sjaNTGo}HDJ>12n3;*&F}5~cFNE6n zS800&%#ul0EVhB^GLH(;zW_6w!X}$+T6=`?|RQS&uyY=g;E{yBsbGdxu;Uk^z z%~Ocr!J4%!?Gh_sH46yId7#$N-1YKqfbYk{Rlz5n$ zj1-TIOx+VG@gAoAn6;u8Yx;ZzknVR%?QI*%-s~6&uTLt5QxXIguygshCYGXx&LahJ zu|&o>Fh0GdWm_G(6pdZ#%2;?wn4siD$HWcMcq-@+QBt~mN-j(~n8xDlx(-b>MS~mH zSH4b%WOn{XXQJTt&IR#5|9sB_gKg1*$?|>~E;pvk-5&&vXuc`q;7II}D1peICS=rWXu<832g= zQdA1ivw3pwt&KfpE~xQ4NbmJ1WL-kOTUsYthL5^H}nr=%xlc?jZ+|c(CLs4 z219OMbU278IUpR(6G_rw>&E)NcqF}xXruKkKu2Cq5p#2Yqj*2-_sFjm7ngk3(2`*2 zS;`SBJBBdrqfTdFCZUj)b-}85BE9ZR7r#@-s2pi|_rfvFYX+$-51egnD*2a*h}Mr@ z4U)uh8uRa-1L)}WBFGM6B}cTS2%D}aLWUls?J+PdXC`^JduVKczC2EHx>s`9q|4<93s!Fh;8t`xperf5ktUNFzq2kR z&;RVXgGVj|e^S8b**-cNE|Z-iCs@ggcvG^R6$&pt9tCFMOr{f1SK~~*`|iy@-nOmj zr|E2NK{v|3|0bS$nsrw~5M)q!vSY`N`bS?o(z9zanhUtx%(ix!-ti#N_mMF{6b0$w zXv)_+ICjJ4t*t*l*FPFLA9Mf&J%6>H3+cLD+| zw2EC8s1qZ(b@Td%@4P)yJvfs7gIGN8lSJmSz>;)vmqF;507}Lg5OmP#HSK2x_mx%` zSMxkK3z#RT<8brdP4ljS>8;yqUp(45e0xW4qF&c2=w=!E;j(fFX6R?02C@kGi~_@> zv5oPW*e(j(FA31S!OO?JQvRwR9Gq#*Xhf2oJc}vE@_qcJ42yKEvk4VEE>YjGzOYDyz~^V124tJ z9i3wr3W^t5Xc45>*H!%TT?e-A8~^d4PidOQp+W>-Y$5CU+zjxHZ*@)Q@_AK2H}4B+ z=MD7>S%k&2J>$1N{Y?8qGbzpKbURp#K0a?L>OJJQd_;jAtrbJR`OzEx?v@)jJag!H zKMSL9Iz+fs{4(v%=+;g3-?}3lD}Lf&`$O?mN(%V>EKk7YperlcMb{3x$484P!*?7KML14*dG-d)>%7o6n8wWB7b?q)`JOuW+}w)yR5i_1LkcSerW{AI*(|+_ zUP$If$Q8)yc;!voEAZX)SX|c&Lt_A}z<Ya~nnsIxnFY!ZSO6V?xoi)Q4bWG%%LhCw zxh(DRIa3(>%^5PQ;c9S82kE9PMgV1LUJ@Z1j`_3cBDXP5rhWBrJ996cM{-F?pe0XH z17^;?yclY_1B*NbYH5vveHCul+xFVltquP{h1nTaGn;}ZLAX$$*UpnK+gj@j!sF{r zja3~Z;hz1vS>)=n(kY7xEVqjgpI14qi{<2tC!-%!D)&6|OAsA+PJC%1p-)OS>7A0S`t+njD?@don%{|u%u&$}{@P@|n?!Nv+jjAew zCP|l$^)3LZLUnBsOIryLo=Dc`qnXWj-n#LzOTA}z@7QI>b7U;iHZ_$fCcFfkgtg`W zfA-!3Opfb16FrqXr%63IM*xG&0Om}}v?W==ine9hmgFGsTYL4{>-QYK^?u%6uY>&A zdJZeek|;e(mSj^RDdq$cAOR2rFt=6ogROjc>Uta9d<4*Cj6K_fEffT zb~F?>9O%$cp}^EB_lW02spf@O&j0ej;CvHLo+-;vW{Ji! z)(zxSNJ-$eL-yVSo!{QIqyA|;$${OqaL4XC$n#Hp^LqoZ)}wDQdFw!XeBZ8)ug=Vc zyAHlRb|9Noz+q$7t~G0nR7P3>rnaDg%kC85ozpX&yZXmI)6rQwa?9?v$ja@v_fYV| zr!Q=5m?ZZcPwMtTyCN$rTv1JQ%}D7XS4QqtxOjE|+Pd0*>NNuonab$=2zFUkZ7OJ+ z35;4dQWRO`Gda~=Uq!?Ctc4#exhVx#H%#&P4j5kax~p_tWPSd$`I7i+Flw$_=^>U_ z^6m&_&OJM6`0_=y{~XIvp{kjYB&eo^koSL*t8aeQtGc>w%u_y)bmTuriH0JI^dvJ{WIqs2+ktgLf)s4RpG!`AZaB zJ!zX^=0d6JgNM%tN5&(VH?~S!{iP4@zq;Vu><@>XmwaB&tfpx4{=Kz&+JK@n2OHb{ z!GC^4e{BEj?_OC4W*VA}H71$MKt+Xnq`$lVjnnUpA6UxdSc>7y5NNgNbJw>}HN6y- zs8W#05p=66b+W3hDu3qjyVjON8tZDSA2@V$a^F-e=@$r&5h$Z_QE}6Zs)yAx`hDQo z%DN_|V;ux+;)6_XJQnFv{pmb6Ji9v*O*>gEM`n(9jVc7KjOUKGlfzPek_K%p)#GiQ zHJGQp9J!%L3gj}Y^r_Zd796rdU_ZOjvDX^AG@W#dqZu*_m0UcQT6MssFu-m5R$m($ zrFQP#q3@f`;C(p2?}5{M_jUZo+0n?a=5i9{un9(u^fmWI>443MQa}O30JqQ zs3n$IvPLBU!z+$nCd`MuWd$&|N~Ku<{pyL`c10?fY-4DdQw)%d;6^I})Cwts*chTs zMiLp<=+wN+#ZWHmdY#9ifruD(boy%!|Oe$r_QoaQ@4EFq_0AVOOgRls8S`VXw3kUwMD=-b}3a@S0IYvsXUga47SXx1-_8VG_?7EvB;hJ_2{{?j>$zBs+qdub-Vhk&LH z84+y(e^Fxx0WA%)A#rymBe{^!3!@|S{Q7mCb4vGYBB>o39CDcqxNWS`*Is|Fx;8MD z)Gp)aAASGO+6aznF{jutw4J3Go&3$HZ(kh1;ubkcqH?*M$K|lu*MdWuUa1QT@Zh8S z$a7x@l;(EtY5&g9*wTZ?j$CL_fTw6y!ypOr3=R96VKC4@Qe?>GH1yb~cW!GuQdj92 zmlS2){LZFVJ9DDZWc@3zp8e>h(NLw`#Tm9|wUmj=xObI2R5E|S&4P2UgM(`XpN*I)GJt9;Xqa47t%O-iZbrcu>es>WqVK#)(>}j^ zd=iZO_WuC}DV+tyQNu%P1uN% zs>m|PoKeSlQ-#(vLqA6llFnrL*>Kp#8BXbCP5%=gd1U1-q9jQJ$Ir~BlS>j$A$Wkx ztm7yM_VbFku1FIQC1oTCczAhtZ{48^2YabtAE=iJvD6iT0Jh59s!LWWSx1{_j-d49 zOuFbBQ!^RPDXf1h%D{6h)6-GIJDs+7Wi7!Fb-SH|S6)7@-`wXveH++pTtVF!fjSyR z!l5+0ID4|tCW_O}#{`!>N}gFI##QHQ8W-2hH50G`fqW{mo^z3K(l9qzjx5vH~>@m?;dfULj z*gl!8Id<|rrD;$qQN<{!M(Ip!$#e$#cQlW6w$+{_Gd6Sb>@4isR#)%<2+}cU9E}xD zr+wY`4xcdE*BN}{aMkdAvx_Ot<@D%l$GSogu$tLjHP<JP4mPOdxR}aU}M3=#Hb(PI5?Y8QLPia>Y;a&u!kBv=k3Z&~C7!LZXgL5MehtgJu z$Wzc%&B4T+Xx09<WUiY5bq=Ib{jxo_p-0O%c z>sawv*Y>p^&Gfd{oIZARclJ7*FluP&4t|uVe*;ly^q+{tdugCSor$2R9 z;@_V-`o*D%a9=c$bEvXRGbT6{$yjzc1ZDTO>XRRQwEyoKYW%O`ZA`AIH62f_?PjWC zaA@|f$+<`a%cDV0E(@7r1O}d$k||&n1$K7Ty|w?g-U|RZl`a85ckXTiBk#N*^o+GM zRiCJ>^NdU_M7w2G)}t2G4U8`9tX1Scua|@KLvzjJWb*2K)NM2qo7CR-@yop{Wx6Rl1r2c9R9{M0(^_K1*^*~ zv1HSNx*~??)sS|8v=5kb)@R~8#_A#qpkH%YSd3lCZgeu0B{;>%v!yA3E7P=$Jk~rB z(OSIH-CL~_m@O;osuq6ik>0-^8<}rCety1PB3N4B4K``x{F<&{V;LV=lmV%YdpauS zKJxy(U+rkGIXFI@Sm&}tukqYc2!@B|^uH(1FF@Olnu0l`sO;wX+smGvs%rR|845C) zEIU89WKXA3>vnH!bYAmkjZEL!tOOjtUTIIIa`496=Zosq^+CVr_PIrYa( z?g6Y{tNi{Js~(-4NmOPP4O|RWHqgOT1eyT!Oh)6TCu1!Wqtkul zG0^;Z*wb=D?csj0TK+1{Watm5(bM-lg-8LDXNw0n$ zf=~e6YxOXJ*|hGg7dApnXq>B$OZV) zf4Q$PfF&UP`02$}_fGm&9=N(5I8;%vtmvPTw#@|U zgI1SYVoBN3KpN_bs5m_e1{1pjEH-uvpugL)7|C6cew7ndRbXjIX3gC5E1>#S$g3os z%7WYBhpw(#aN1XE+CO^w4fxH^-nnWQmZ^F17e02^e{(%M@N0uZV|$Vb(I(0?rDDNo zM%7Wgz%yEf-zIjo`Uda6d*@esdYb-~W7&9DOJG^yM-d5#f9=Sy4sezU%7`+1?C?eC z*;Ws0dBf5fktpS~UTeE_X(sb~>b8(aDJH{Z~M3g>3HR5m5x>Diq7D>p)upu+~)PKfAprcwyk|%$`Ih$2(aDHd8Gc zS+{edLe0!2I%3JpUYe!~0(4p3ko*?82J5B?xFnkhj6fSCX+^x+SlACezZlBhSm#@8 zXl{5To?M-yjNDN%*j4i4W@>G%BRM}PjV zFuB)ZmSt4TH|IFIV7JZ9&O>!g_1fu+BleV(RRIjOr%fTwAVUp0`P<;AU5yikh5V?6^2G+pb8+4PX>z)Ta-bO_rK#YpFSN^tkn7;eYc)BiFnB{!X%Bke1s{V~4guEFu~ z{4MAfWQtBcbdoLLI<}SE;ToIO70DY4HeesGy+^I}T zVmXc_AcEHO$n~7-O?uI>voZwq`n(Qm|ITLc`BtYT_wNX&YMHrLYbJ6=_3doVhd ztCz9Vl|l4X7KFk)WSZ6>98OhUnq1toYft+(3hmtJ2ySRsI5{}dIX)lvq3fKYwW3Z| zN;62+va+b3yQiUgydmH{<#h0w0;6N?2ctZ1Pcv)^tDBS2!kPu#q>VcpYmw`@(=_;9 zHb})&{8P^ke1L#^?w&igA*=6^uYLQZ@++V0*C@({PGU-yRV|-yjUeu=w@!kmii5VM zmbKldDvCN!p2i`TNUx1duK5Q)Is#+EA#fBSYeOU&n#)0de~S*s8J1SP zt_79SL@Y2)?wc*Ib~CImRdu~NCDwvql&Y$d`hiyAcWOBqsrN)Me2g?~CO%b#%SG7= z?e(qi9)d4@@xfJ}%`axv`e5LlmWIH^iScMXlG(8WQ`TuIlg%BCD$!KVer|ZSw|`eF z5`A1;8#eB+^97$L!K2Rkx%j?NIAsIQ1`Jc`mJQ2=D2iaWXT(6}6K`4^PC#W+c5d9|9^3N?Stokb6Y~o@~!}oDfeWoliaY&if z`r$u(^YCI-RfY1wN4IG|etr-_p)5GP3{<)tI+(_GVQ37R8*8s5TV>TAi}7`y>%iD# zs3(;YIf3U_5Hyr|NV3RCxttbk@Q?TPHcgL?&8&gY>kZr-EtWGzM4n-11AbSCp3M3% zCZ1-OZ39I`(Mb= z5_DJX_*$_P7E3I-UV;^6uzqiX zcMo>9)D9d!Idyw7E%J6@Gc5R;&T=kFDm^`wXj_i6 zPYzG_Cvyr%+m$lPtgQwj2*BJP8>CY?;pKxDZ*2@NHtyJ2cc8hg;wb`BUj6+){r2MB zckWSGme#nn<=Du+FF$_{di$Hm+|$$HHw~5)S%pYq^}VW^78n~}YQtl3HhNRWJYO+SIulm}8^Ey~pV`(RrY(<$iK{|$T z-Fc0H$pa=J!BE~Gl7>}Htgv@W-s^&M3mr2^pt#qZ18rc0wX;_DSO9&?N?%XImF(sS zg<_s`CS&AdZz?NzjbcW$Cq=i|WR}P*g0F4Hh zhXaPC%6TK@-P|W=6F^oee0DG^A!%;HC9Ypb3tM=<+i>W<31KK+S zOVN&w+P4~N1CO6NKi!^FRN(3I(t^;8f@Fr8OhY7;tDG7M?b@@g;|CHJdS4+U7Z!lF zts6jGB9&~Pn2dB#6czzg^24Gi7!YM-Dx{#Nw_&)ur|x*b=ge+oJXka4)V;eqpFDJY z;+~~Tp;q3`kolzoqtRu976ieVMqzVu1fLjhh1m%L&MHWE6Aw*KINNI7$vpHWhodu`EiJ9S7 zKp6&l)iQ@&fK)OA=g!W6%T+ixyQ{qdc%i(mMSx<|GS+kt_mSgM(AD7wR-;RSacmsf z->#}^fc&h}Kn*IY7L*j#|J^5#?0aWm`YsQK1iuFdt|*pFyw!~z*HXb>!#8kQxhCgr zYpOii*IhMu`r<-+hQLa6fYbP_b-J+<$~leY)-;HxGWLn_(2iYw?HG!@v=S*IFjx#l z)+qI=ZE7mKdp?}D(?||SlM$Kc!Jv0KmyxtWqkp}T#07o5 z?w4=h)qHqlVxcLOmYIOtM*2mD2u^G4;gA00(c%iT9(D>a zJ-!Hg_q4;Q!7wnkIs!1J3vHfvN!p0=?7SfhudPi*h0J^tdGV-L+ml6E)n23vZG zH5Waw$jq(KG8tzIGdmyej;Axbyx6Y1E?RfL(%yx;fQJkFxQ5E&t z+bT^1SInqp2D7Nhw2yhxEDZr43+WUx3cA~zv%KK0>5()V2USgLPo#297tYVNh7*bI`T1m1JSx>LE{;}+iUgUQ0@<7d8po0yRp1#K z>~@Y^vH{MK5uUa}CaTxe-s~G*Sd8>b3QGVXW0vYFX0|bo zf}UV>EYB^(>q3#_-sXnu$z19XiRKwNDgpj;krGr!~5FaUi;jG_w3xZFrWJUsqsW51rA_rJUPAus{S8S+{>$j z%sf!nUFzV{Nf>PeNK24RCt-FmDlEK`++Q7V?Qd@JjWjg4-tzffZ;;pydu(JM=G9n@-#=3cE<2@0l;Rt+)?|NiDFw(=}Of%2U5n|D=eyF zP;$@C$WUGFBA~!ez>uu7Z;y_IptZfS5DPbAXw=9Ml=noV>5h0@ZJnQuY#X17^(LZH zQ#6ruCNdewVIgM)^KV(el2TYW&fy_|hE>6dpCK4j(3_`P!2BA?|Ne(p;lHk7aYy6J zLO7}a?)BQv_I1{rIx{%gk0JRs8*6yRHV!&Bi2TfwVk%3+QbMwiPtI@OvAw~udv9fK z<+jfsTw1xaeRd(TZE7}FMezn>zwVsgsM?u+8VY1d2CvheYwN5zA#2jy%uKZ4_8raZ ziSB}CrMJ0R&>9+QzwtAV?g&2r!oX)Qj->rI%}K^OOXiHcMz<^s?#FwYYu@tBMP8M2(lOS-pE4D+b@_>T^0=k3MW|@0 zg6XO8jm~ZlEuZEt&uM(8*ttRV>=CCo@;i1Kx&CZs!dtF^^xhIixSuRS` zV={SOz*BTtX%nlTJ*6|vr(y|TI23YQ0DWr;J|?T6ttDGrLZtm87|fEN1H&8mZb^gL z_LxBZ5NU6Mk)u9ut!tLN%UB9)kYji{=9A~WPMwV7p^zIYjy*PO+2@&Uu*t1BM4l zQ$a?Bog5#XtD34B=cg!3(YpqM%=&A+=;udcV80x$Jm1$-cf6{~_x_2ws9Uw=1Kg>i z<1A0>hR-pl($wVSVz-owcW7$Gaah4jhq>O%a9z^^r%#XUUx;QH3QL30WSpt10r4`y zIhJzMkTguerqxsjW_x>^UK4D#?4~-vI35+OC1*dUh5C24{jJKVOy)mMe0q918PHTa zZNqYKl%yL9@Orf63JS&NnrepkQo5Jluw1!ZJlI_v`CEYunTMk@DbK>v=)-5vP2Atr z8aUO`7<`@+gy%ed0rS)&P{@-)P8=GYhp~%uuz}r5NTxN+dBjqMn=0Xk1b-@-gDgg| zP>g!;&9e$cl~*d_qaVAg?9(`$_AEmK7Wl$ycoZ2Tu-SqX7@-l1i^9TU(qe_(!s4=J ztWL0GtII5De{a6nuts{tyL|pCvmsD_*aQa%)Q^#dNUZ5p70GnzgY<0P}iCSBbw!DFpOoE+-v}yX09Z1f(pj6VwEV1;HCr}y~+u0=&w3-Q4IE{JChMi7^)O~5sux4qRRVypw3vq3&U!2>es0{U;bXTVzpl2d z^`g_O+1k@>ZNXzL&6O9%r(^pts)D6Uc{^3}dwkYt&{62I$!J$9N$pFda%aJ)MXQsW z_4i)(y3S6AYUXA_yTz=^cm)bLpjHfAZPj4LYostkTvWk9Q&LAu#ZY~1)jKRpZ^(?R zm0-lj@un!sWM_Nr|9s#3=*7WP6Tfum_;jnJaJ=14?wg~`HJpLco^-PZ&?tolDTA>= z2lm)|0=aj=L4!=jdzM_+TsX&u6El0x42Ab>@2!3Kc3b^ZdqY@7UmX` zJbPiG;5#7Tby|~q3kVKB$s+8tWa|r(=X@DJ51IPHbpYuo7=5_YY*?ZV4YkNPkA`g| zl*3$g%d2k5l?r;ut4-jIoD1D%Yg_@!Z$`%TDbfyu!3psqY2(&Vxk&*!%Wi)BONv?> zi==9D1gv`KJOz6Bp{uI-FHQCjR=RSbaB6`l_ZtFqjsWW3-umLYyrww`P}&&^CExer zs}~+QIxxN?787~&v0}a`=D#{^v>vK{Sr0cn@G?Ov3~ex96GX0i*Chhf5tEDA9Hdie zO(Pq5ybj9lvQet;N!KhJ@--0jqOYugM)Rv9m|Q$H+1p)v=J-3KdsR`PG-UTL16SeW zLZb@9s#G|V@(hnG?8qn}kms)h^xZp}$y~Th>YhkTt#b>J7M6fl^fnvba&;{(HB^38 z0ZBE|AN)=})!iCAmX3)bf0g}8Mu@&oD7KKl^7+p8>MuX~K;MO`?;QH|*AETfH?@#v z1;IwU+;(8ekYzEIzQk}eu2o$&WogTuMlJ7%xzsKj1DZfXPF5jK0QaF2lY1_W&-Lxt z5xlLZC-~2#zh2B6HCD>kzy2HW8=w1n!LE;_L@JZYfy2RXdd{$D24fh=WMxW}MXLNx zEZ=yhC^D_+#m|eE(A#iqk@Z3$&pwuj)CfzG&wRnI0qAYkZy{ThuVZM3Nnm#2N}{zjGT zN03-B=$uPsC(v3r_P<9dH?CtGrftlY?COBLWdpCGdl35 z&`oXv@-^IXz%qIAD;1KdG~yWsOUW@hHnO*7GC5Iv^a3W#IL z)s@$eg;s!{^-4>%&vm4(#_|4%>6o7;0KHtkZknKU^v0%B3S1nS+0oci*^*8rFvl9+ zID86jxplb&t?&HBxxR(@gq!2I65-><$j6*)Rh2b=r8m^xU4Mj(4ymupQFK2orxXEw zmrtr{TH5V${P>H?dx1FZklJOEGD z2E6eUIp)NIWJ?~Ndu%b3>N;?M{U>LG<6mG+nYvs~g2x}d z3*_czjhctd1OUs@W;~zNrndcQ=W;rm!*b`|ngDCDkZtvsG)sYGIngb-F$7dx`qF4PWY3IQ3_Jz&sm958jQwn-j(DR2L@=DXNRBHnA9utta zfRSH*vy-2pii1R8Xz;>N_9wyem|FlH%PXfp@M8TFolR>dN9cuqJ?|e^N#q`-Tql0(f*|u=| zExji=-aY^P%cp*Q_y=!&!sQPb^NO-U+^>bS1ieIw-f$}A929l5xv~1f&~)rJ+=|6= zS0)!hsZvTtIX(_9jxP3WTUhFIyM(jk(=0~PCo|bRNUa(ko!b{rtBlJ@Z+Ik)GRsqH zXlzokgqTv-QaRh$QgybonU_sUxvLUqL9R)%+quD>?z+icyINms2|6Din@l`(VsNHw zd_2TD>>Ta)J9Q9@)b@(WEy0-H^3`RgN?#U|xgkJzG7Ml&b}p;X1E&`{W6|uF9=cm> z*t4tc%jDo=D-ZPe0h@ORksL1*;D%xnTss?%$ih_e)@qWo-o-9DW5@|1=mLKlA`1 zsoZ%JyrUr(J?r>#wajAgO)$O^kk^<-Bn)}Qu(58q>>;;|*DLf`b3S9*$TOt<7>pD` zODuqHNI0CmlHF<+7NfzOEQ8I-VOq8c%*$6n5unRhI*DM1>MHMIQ&Z)f%g(P`yb<2m z2vAei^~Y9KwSs{2&;00_6Q4bGA>1KmRTeQk&r<|9tS*(LgE#z7rH~g6IMxX3jm9#N zh$S_ro0I#xsxq}zm51&)(0PvI#SrEbGhuVc6QYbc6M_w)CN8GOwUDcAGx%2>&3}1s}d;e^Ekk1XY~AhTHlF) zTny94R1XZtRw=U*L1_aMM*XX3;KEm{$iV1Wvg+x~*FhZ{Yl~HcoP_&ar_%O6Bw)8)=AQAm>z@PrplsHQ)fDWO^=J`ETS!r8XNHk+Otw5B0onWoZe9wICa13#mBpK`+P1n}>W?ddf zSi!naYs5xx2+pgIAHVQlUViE9r_N8rgCYTDZaZxPG=qV8?Ow8~=$=HH<3Y+vuoQ{{ zOKI}{{jHO?-O}~4$H5%4+3jz&wp31La`6NUf@pvuQ;FkLfgFLw3ey^;7!d=OTkP6Q zB9?)8uGpJ`54ChQyxde9_|VAsVy&VYL}__e|5Ad4aF`dp7)os4)>U7VRmF$_2=!;p zM#Ay7+1Y3{mLvnlAXeK5L8=r(#-pMefP$6&`PRCs7s)l`3Wa)?D+qKk>0J-+rq_pG zljD;qpv`+d_Gh~~tKZ(YySXcsQSUx~Zu<7KL$h~{O~t(7Scah}n({k&;8~oZN*;{r zq5iP!RWD^sGm6#e91Q}e?>jb~bc?TE_^8__gxVUa{yRC&GBx(+fAwDYuYdH-RfkBY z6ww?X0yxmqF(iPRRoi&;yYchHEnyOvSLf`DuL!+J3&SqU6 zzF^&ZC2P&=ttLCSRgia}wTN4C!w3ReB#uG?IrOA|01U6?Ruf!C(SwRP#rJ^WLC1W0 zWTi$gA=XzPG=V!Z!pr8pNnnM=Zv_m)n2j|X8iLR(o-c9MY(C#S+dqb?+su8e0!Ia2 z|K=RPQiT}CjyyhC5g}xacMG6zC_8qwZK~`MF1#KtzSdnF@t8pfrHfD(8=nTu-)~)c6l?#FM!11FOzVy_yCx3NnChg?}J2>o=G0rsv z=Y?6l4gNQRB;px}$8uU-wI}h|!<|2QW{}W0>hU|k1~L+L;y8LU^g`dhTV48Kx8frZ_lLRt~>o3 z?!_Uy8-LlrEa%5M8Gp~dG6#zjX^5t?(9v4~b|lU#z&wpL!3YiwON#ndTXWSwu*UOr zu-0?Okz=C=qG@UW{6e&Iem+5?FW>9pz;34v54M_z-esWI<#U;KDnTP}Vg}|Gv;H^U z9QkBdOZD0AuKMp%lwkpoBn7&=>h%82W97-2L}q*@1L|f=m+9xH^z;-_lu=1=Xj*wb z_+&a-zR^*!u{4rtPzFyN8XY$qi;1L?)m83HXGcvzfPVhWyfvw}nBZD(1w&bKg9)yp z7#917CeZyn7@o|n=&i)rg)dRB*)TN!PSVhz8!-V&9<&dc_cLaGC!4@V1z09HvJ|hM z{(0nW(Da($1@jp-n&Tf(kpb5e~V3a~bWt|6$X|vQkMT1k;oUa(d{wf%0ACa;Z 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

R*dRCocpPC2jK;z=`U! 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 diff --git a/ep2016/static/media/sponsors/microsoft.png b/ep2016/static/media/sponsors/microsoft.png deleted file mode 100644 index 1f3d0778526bd4dbc8c16c0c0bd6ac99868008b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16234 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 diff --git a/ep2016/static/media/sponsors/originals/PSF-Logo-Narrow-Shapes.png b/ep2016/static/media/sponsors/originals/PSF-Logo-Narrow-Shapes.png deleted file mode 100755 index 7e295bb3c532e71de41e4a5911a7d0a85c095a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136440 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 XGC{lYHVeq_Pnh4Zx?c5%NBsW+g68FH diff --git a/ep2016/static/media/sponsors/originals/bbva.png b/ep2016/static/media/sponsors/originals/bbva.png deleted file mode 100644 index 3443b915fd0a4cfad800ff0a57f95dcd15b4d297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415036 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

Jj4E$80ykHb>W>2bi@#}8|Ic<^MMd>^ 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 z %f)UC0&*1N8-)vuG#iCv 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%0AG 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

+yVa61J3q=Lp`CnD>PZcc2i|GnHjULy)~;k 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

5lF)SXGi5~qpX4N=Muz-KD2j(*B` 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�~=2;I#!Wl^cNGR1Gy|Tv6<~A2k?475cwZ--(A^Aq(NlhB_ z-w9sDLm6{s6B=_WjFy_#6R%j${Bu*3r(d>jq7Q%zuW2{@pSVVvzd~2 zUWx=UeqywFno^M~u6D~u{-%oKdC#rJ48^SxLDK?(ZOgg@5QHG27SHJfiQZ_mO)zJ++KZF6e}Q zi{Pzy-irZhGGUGZF5Kj2rHhYBPe;4R9hyhR$|o2XnY%PkQ+Q}~1eC>UXYOi8HaqE% z!&+kcftZ6(H1=L2h?w4x|Y|@Uh=v9?k}6x;;f16 z(nVK8pMQLdTk(#XmqFls?4SoZi|muivxC~2Pv4}^JfQF)B3hk9BJ5Qx>R}t>>DgpR z9iCVhuJ<0Gui0ge8y5@JgVFmz#LiGKeFz#Xi2YRfexp96tdxFyL{}%}7P#zQRLv)K zIF%d}zX+t&_hGI4k|BGpA`~vUA;-&&o7}CgOchnjFLFyWRDM0(Ql3O>zddi zX0|-%4kvJ^w{X)>!@!<5Vv_B=$dn(&seiz92~o9A-zI)Fr0cok?MwS5K{grvHjOw* zbRH+E=}8?>G-l012NjtZW5Fg{SQYF4l8EcLSP1s}pp48037kFnlCN5PnKr*CdB*rk zLIkEjwZF2?b(vT8Fx79JkK#pFg#nbR6yrJw{uUbgM_`45bU^i%@1>A(G`3r-u1@lK zF_DXw9|h_Y1`Htq8*q9!Xj3guxzz4}p3)ITd#{=0DqIEY!FL4KpH~&K8<&m!@hPs{ zz7*BJtYotqKciup*R87Jek35ve6?!iB=5!Q&S|T(=wxq%N0{1&(KTXV^PV zA-rE{`0=nw4NGV9W3fR`FEU%MkCV=Ygy*l_3~L{kElMBES2|@(dGHBCiI#bpcIqN( zv;+|GurRY%*(^G{Nf$P){)3&DDy@g3Bd2sSq=I7)FeP&Wl4whYDkS?QuwqPtdMZ*U zuO#q?z9G4!;WNnVJ40VxPY&MeUL{pts?#-7UL^JSENK0c0?wd`2h|{3WalpVn^n&# z>Qw_WGR2je#X)|W9NtukHunKR<)pn+x}_cz;p1RxGUw7K($cO{anzKA&K-l|U#W#| zt2!C&M%jN&je2H$(EqCXXnyN`!loTWuklu~UGxzWVf88VazBP`6HRAC5_I)H5psd6ULguvmiZVQ^)?qXnr zy}8l1i|*gOypPv>@8Z&rR{ic81KMZ}4Mj{6%H5y*CxmSy$X{Fn%LmuIRe%b|$`^U~VCa6Z9 zLH-YGGM>O0sdRJiJzapMAi1%F?~Y6O6VH?Z`?C(60j1`pKP$a7>|EIxZU&m(QWTeD z#j0A;x!L%5$TcC2?HUxv+ypihu`z-{;)#bKb{BFfh)hcCWQ>_{O-R3=*s7M@ST1NF zCEt$kqbcY{NqbNN!itaY62(}IwA^vkOOho@MeO3eO&Z?a@x-EGczV&TC_ZrJGR4Ko zmye76bP~i-GjE`nr{aFFfRm93-k5eUH+ofP?Ih1dcnMMFi@@uTsjX6U5!xqPBU>0tufZON=goEER#DF1p!Ui+$e>?x+aToY;L6X6&wW6G`<; zmvIKNUHbg^wcp3mq`BEm3-88cD$Kax7ez)X3;(C2$u5dLCLDrJ+rzX4$3z4m@EXmC ztp#*bw(t7?Fo7~Z5suGXdacmUkTUkeM7-sQ3cY7F2MY68GHM9Ev4@4VigEqKP%$0j&KwLN z(@|7P@tKJtB^_5|84~16S|h$@-8D3Xm&g9mOoJf8Xh%CU^Y z#Ao!1#^8szwp}Z1N2y{6!q8M58^-*I(F=D@IRq}9U_qI@@CX;l?d6gtA!-xRTtv9j z5O-0;ZLdvDLG2P<4^5W5n{gcN`eTrwo!g$*r@4OD16v9-#R($xgFFX^vxstK?sN5C z;{*QUb?2UgF(SI{n6T0civey4^g1ehXox*r0v-?)!ca z2f8X&Etldf-ACI786|l0jZ}l34E_4diI|_&D-)())4PsZ{Oqrdbhs?5LVrG5HOW+1 zZn+Pt#&v7{+RJ~JApSdu2i4yyq#$AD5~sN-R>k~*;D-HgSeSQQ^QEk7bRWxVzOS+o zOI|7m$-<$7@Pd}zwO7(n{}d7{bXRdQlAi%udEf_$nh$f;CM> z1^N@{vsmv4`rhcG5VtYU1dg(cSvGI^{;Y0fg9^kw1{bmePY1sk`XkH9vC%oy9@*q4 zB~U*WtX0x?Yv~7;WRl~tkziZ%vp z8(d_FA+$-juzHfaRpfX%q1x_C)l$(OjoE>*41U}#yQf6i$HaD7hxT<)=1gu?qZRGX z=m;%6F2pcEXJ4``N2uF>k6Z|R2CfhCP(#qd%xm0a=;cuc*$Rsyk+C#CeNr9&qAF|( zE|{EDqj9k}fgk&5_r)iqfG?uyuF_o8U3@xdp>sN^pm~Dl=-sl5wku__*}Ou^6)g>_ zwG~G7uRjyFt+fc+s+Rs~?&q+(a6u&lQU{$^tKs&5BUdmFc$?2DdNyb>=mBEwtsXu? z=y)&rC4k^d2E@aghu3%3!cQpQ$~CuzsC*91r~Q7nEjfW9?)=K2VGMWd7=Ou;)s+tY zCm=y_<0DX3LyiR!^0@+e%<^7eY9=OfnWAV2B%SS4Sd!KeqxB>-byxsZA5>~k`s1!u z^x0vRZ>ftXf44c#_%C5%GE43kg(Rcu-#6TtyP6KPFcu6%=Le_({I5*b-H07|ZzDSP zlWJ-)({dJ0;w6L}RCb7>1#e1lwAH-zMi6bSppQ(pp1MX>zJu01uyy*g*Rwt_QcBI%(ip~+MHC4@nJZSWg0I8Ndqb`M*}Sn|*)7d@+Ox^vsx2J;#wW2XtgW?7xE9s=!%eS|`yR#^9Gv zRGwghQj7&uHtCYup;~2yIVENbK2LLzkkap7!=zrZ+hm@+TApm2Dq0D9ArV}mAh#JY z42uIO*C~TBAp+gQN`;ST$9z)U89V0n2BUL^0%1_5!6;P|8r`e8T~o)d!9NB@*|ZSM zlHzOwtq+V1F-trMIXHTf=stYv7TEAN7~f((xJa`4@~<01Kl%Z8{Av_i;>f?x5lj*P zJz}-~HUuNyZABmc*|M2VA5xCcOb%nL2b!=bJ9sl|z=TTg3HSYLjDnem^i-1j^FU9(>HAZei(3*cK7 z4in(K^2FG@WVqRa2XdL^)c75aI&}J9f6VL^jn|knH0UNTg1Yy~mKy~(B|;cjCcZDE zv6s)BSXhsdzN4pY&hQ3-yfgXr-VANZXh+WK!nP2CDPW3KVgezwslhjDLjNUaODR>cTx;>^A`+y zL11c8$~1f%E9TLaE9T@ykyJx3x0a1V9~rH~br5?qH}OdR-o|ks#vFi+RTsYh8q2RU zrSz8RZn*A^DkM>tD@k8GRn9mO-cm*d6T~uXrO}0>(}y)84l>+~Hr1}*d%1)=XfDgpI`KYhZeM5UxrVFeY9itzcQ9>(O%1Ic_;@;*Vey+=k z6v&&#&k)XV;tLs8ZupOm(Vy=w)LjA&qkKG(8UOII1Uza-Yrxv^+mjhpAx0nV^KG4? zX1(`HoJDxeI9nj$)O1E)UTNk;dCgwv^KkyGbhZkma25W6XBeLn=BHIu%fG z#F%NAbm)`8y^-6Lj#f%?u5m-6Zf+9e;eUgHaz+34T&aLHvS2BRll3NsZ#=zFM%S=+c-dn@Okwk@V@NyMNAPKj-T17gFa04 zo-+$}I^Ly^ZgDy?e78bzLV8x?^hnxr_=HPw`rPp&9T1J$-tY9!-NhZd{vVAp*2cl7 zMzk)yORbSbFOlS%j8Q!;7~NcsUN7U6gmM?}eS4~C+wTQCn%U}U)%6)o ztcje&?t)*0gjVgY9ES?A<1`7WNoP|TqRdksBRGIz+8(CT9ODH%Nn!3E4i6DY?C%0o z&l4jmAdA5Ffo{`04u7f2h=p5zHWJ`EHxV{SY#j3sN=l5FB+ABsbTpTfqWggakb7Kc z_cL0Ew@I@5_zne~F^e`FLH}X5 zjvxZj@$h^10n&O>ovuC7W5P$&F?NBSAEAxyM}73HP%HUmpV&kk%4FMfPWN?r)L~qW;u&vTWJNo1dzUcS?<~_mm-+_!ovo7nvS5?4=0Pp?0#1Xj94;k8G zBwl!A?I*G9Bjm%EBmrF^6dc!{6?e7I%^%oo^7E2Q*)9kt+ZG=cYU{=sItLeiWDIM-Qt zKh8YBfF0&Gw4eDlgWcr`|kjSMfMXO%^KO6aOu4Rm1B&TSqFTlL~mxm zvLS<^IMTfU=#Bk=y)-4_w1zNpV4kP?`-2jPJJ2wWZxYIfE!dldmM zg7nB+$)>WL<9yU^lJq4Qec_8MjL4?z&Tcr-4>cK^1sam)?JdCDUqsX2l#NFIcZA<_xq9z~y zQ{@8~?dpK-j-ds7Xn_Fp<_7Id&u)VOkLgPyRvaWYreo_nDYeCf-?;L)2T&ImmKQ-> z#C3Dz(t@7_l7^*%Wc|;yZ%!5Tm*#@42;P#9kAStJkNw%sDCg?*?pEbxBEQtdnX$~R zZ?iNXa)=x!CM}eO9NRymvv^oeFaj_P0PKWF$zk`j?4 T?@cKNt0W)GJ<5Ba=kxynHPd!g diff --git a/ep2016/static/media/sponsors/originals/bilbao.png b/ep2016/static/media/sponsors/originals/bilbao.png deleted file mode 100644 index fa35851dfbda81b5a739e9ee4eb27a5c5dc0d4d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28241 zcmeEuRX|%^vo`Jy#fw{Uch};@T}qG^ch}L?p z9}V1KV9@dZdBMWu2!-isA;QPl|byo_R}1 zr;Ge*tULR#b*%hLDAb;o(K;VV*}eeiicE5{&ucplyMoq^kB_b7X}{7=u_<;~5H5=lQ_K|OI%a-@#{~UU<^RvHc&z+CF{rru@DDZS!hcBqhX(&q2LETe z|4|12XS)9x3I3n;_zy|&|E$OV7w3Oy@yE(DB{c}-H1@Ti2Lc^&=;8l;kgom@743(J z4{#_jNNta3u|X!X$D2#u!FyuawB!e!|K6*cn&ul#vnHc#+6@248fP6dB3PBXUjfpO z&(Lj$A@N00>)AOBQPy-LDk?jkYqriXT6-ZmYBuQX1f4V!tJt;zdKv%b=$w1iuR~&* zr1{ikrUzMV$jawT#N!KX0yz>-gn`Q+zzuRx2Mvd(tSk(?bo7K4xXZ5Tp=;^3+DFGO zk+eta-}#F8pnVt&7IapL1|H%;Y&s?tUf&QRP>`q^2@&++NHo~~kj zQ0+AaNyrSeXtdB|czoxZ5YcVSyrt@$apju^43}Uc%rVV##&iEw1?EjE7IIh^84Ouj zNnNV6JnzO6dAg|g#VA8GroKLJC5b=|u>^{YGp- zt+2-`XE_ccfET%#ZH*5aH~K5_ihSj>hh85Mjgd1PM8Qt@5BD1TB6$1wxYSv6TKOnp zvVP>K1F-uj?4IKkemj1fu>wHhjwK%M1bFKK_U8FVqH^ugECYL-&<;0GC-KeInahKd zTFRHZ))L_R&sZVhTpNek$Axcg;_CmJ@X)GY8d;s(x?-C+*RTy!(U+STr$CXF7J4)G z=BTg+bh(dtun#{yX-?7`AHq3taPh84M{s&&k&;oBGL-nEh7%0jC;7HTHp6G$Gwn&r zo1@@_B;iEmSl$0)&a3=~%lyr8qH%f$VR**q?KfX%-?v`)UyY9LyV^Ba_R{fX7^i?X z-Z*XxamNCyjz{T^Fx@&04J{vUT3`EyowvhL-0BJWRm2+hv<`J1{?+dUm5t}Gw_mRx z#P}8ZqsU|A+Mmu9y4?;(T;~ZD+6BiHt=-@ zqCHfK^SY6x%>P+8?o2W%mFnXaO%!)V#lMbBfOrf!IIJ(OA}-*`?0J@`lQPKPzG3l+ z-|ke@MV2nEi7LBcaALkrRo*gtx8uDCE*Hb{0^pPVX@PX$#gAyc*CDg5yz8Xt0YmC5 z9e_6EUw)BP(eZOR5;RzMh7JqvBZI!IH&-_sPj%A84Jm7rI;9xeGb~fc=3gpg@0Ret z%JqT~CgLL0QL`Jl#EJrdzg-^~-%#{S!omDuMdB*|y<`rE+yg>4gbnVa9NqUrN0C@@ zteG%0u((nP&AD!sFUYvO)eYG?;v9aXEOeE?rM<@}VgRu}=fuSqhy0gXFLmIpE&&<} ze3m5Thkxu(H*IFeiZ*QRmy8bze~v)#*sPsrEe$|1HkULv|8MN6L?7{B{ht|Oxv~p5 zmohn2fIBgjly3;2cp35L=eR^!M5@=9oa^sU%P_XsbN?WbwXCn)AN4*4Xynubygro3 zouA`jPB;<%n~$=8ePAy45EUio`)#d2T0H37=lX54XJ82{tOy6!;Qk|daSU43KaoJi z)h%OyBFFNNKxKlWa=%r9?uPAh35rc4`)B|QhIq28#c@XyzAS>J3I;Q2XHO};=*8(n z(32Oj1Y!HP*6Xk&>ooz9vV%7$sXT;;wWgC$rP+KTyv(pB(MHQj^&svdeOr#q8oCfh zMu;K(HqWWNvuM?liSKr4P3vZe1^qyb*+d-WkntS)UOk!j27|dzu?siNhj>QYJHD2hz}{>{lB^Z zBk6Bo8{!hj)c=U7-1B z{Z3XY-TQZpGY#h9Kjux%3ToY=sA3vib_ZHF`Mb5pI=zWaKH-kWk}VjW`aT}*gkl#P z%bzwL*xzA0@i9X;L3zuh0)pqCBh$-;y7=g^a6x`nx`>E13WEi-G?lNs9A619za$jC zOp7#l*wIh@x4*Ho;0g)DO~34gU*`Y{(j;Jt{B>TT!^ee3i$>emJegV)SaT66<~GLA z7%ux~f@b*Z=CWLO7eS9b7dgM@-pgA7Fyc@ecv*x3uBJ1oJjyDltqJA-{MKN13OFWV zH4D)s5l6T9_=@(g%A_LmjP0w&60PRfwZX@3tek|=zlR2M@X`|h&-4Wtl7IExlLqLJi$y6Z zLZXr4p}tl_O>rN;m#g^C!rNn=3lNBSARv2--{9h-(hgbnJMZh0Avke_uGLuOPycK- zj>44)!TzcRqYMe2Msmc7Y`5{f+2s3IZv_VyzU6E?Pbmb^E%Yy>XFX$5Bj2vr%L4qc zo_D0u#+)(g@zqwhDJ~zB89w}eQ>U9#_y+qSR$+?5%xf(DbFF{c{GrOJ zuqP9t*?o_MJ%@r1kW#t_;nAci#yW#uMCKJ&Z)FEgGBuT_x5G(-P2rRXGSpw7NC#7+ zkTeQL95cpe7|7qD(12|+(J`M}${PU~`N?J`3YqXN$;zt6WBRTU zf;x7@FLS)e_4wi2@{f#;Cpf0Q{C3g&ekx$CB&ppa7@$G_Nl5csYTGB3j_3Md1oDfg z(Zpc_KUZ={sXmP~h?55+1TWX+cN~uyL6gPb2de{fkFXIT3LWN}=T~e(V;6c01u!=% zy{q3~zYRu6I1F*~-Ns0x0Kv}(i^`>i1v!$2OInMaJ;iYUZSPfoRqTy>hvU0X5%E_V z!d-n)B*=GlU2h>r`+}B8whrY=j0iMWRS1_)&ek}E-mo%p67*UI`nsK5H!mzdEK;nM zy)>le@EKM4V zO8?(kSt|A_%fvP#C|S<-Zv?npoJa_suu*yFm{bV~%g3}*C?C>Frs$OqS-WsR{dXre zgb}-CFKf|~G*s|-jr>AgzJ43dU{gmaB79m2RqWgs;dC)8 zeWpT1q;!EA{ZFi~2jvnZN5kniJkN^}MZmQNnSp?gCr+EGJazwP?8uWw`2fc9wn@f{A0ETF{El(_4pZ1a z8-G#4;A%K!1zp>`VNc~p8ncg*Nt6X~!`QDzoSW9~^5u)InyvorzZPkA7#GR(a@kPa z80wpm2NMInEyaJh-4U2JU)dW#;HWpcdk7-eVlG|Depisv9Qo~UBX$6B`SiEubQVP% zhGFwarf(;^qVaO<$abGu;12wxhuDuQ=ZBYR>+50R;3`k^QNVR(L2vMoLgW1sq|evt zuKY81_sgb7dOvber_^eV$FEI#0RNksAcU za8dcDk|YU>d}ZMdx5*Qj6$M`|&RBNxK7R_4(~V}xOldWRZ<1NSZBv0ouT^gn%peV1 zV6mW-7iUh~2CsIVRRbS1l>my`AjpG5US82jrZh8Qf-OK(3&Us+}?LBta}oA+Yp zwzWo&qWPqJ-rW4ceTG#J9?eujsAOLE4 zZ8({&KTY@`x9`7XOU-NF<6)ASu!B!N$!VcarK<*mVmN7{*0VG#fluaUq#0h0mO|eE z2>ee{WD2Preq|K4watF$J_<-02o9xwSH|CsKiH>{nwEz>+E~{{sii)Sh%7$kzGKRC`N5-?N_$PU z9xz)IN$v0uU8!=eI7wAF?Hf1uf-^le;psGmw8(qB_S@Y<7uXEu3^RYJq0_&eEMOj6 zw4X=KlOeb;YA^03|8^9X&>v!zj4z4AFWDU|4GS2~e;t1FJNMgo@l{qHMWTVDmAysG zcr^GWBY1cpPTwQ1JtmKd5%ReT@Hs0xSTMpDYhe7Kdi>{PLXQ2y*ah_|Hud_#1Z6iiVKksFE)tSb=AXCNdcHD@3vrF$veH2bW+x=A3VL{uA6GA*V zdM}*O6WPmgJZ_CAgEjkQ+e*efVr%vXv$w_b9W$;=sbPfe_UOLl`E{SrsYt!uZBBOc z^jMNnx0DJV(1Hm=>fk1Ez2iB1f4vTv5s9AU&HY3f5_n`A1((sHiLKl74Hf_9K`SAx z-R-cz1w?YhZB=g}64?|oZb6FX&CgdK@!iCf_G*F?8ui$lCoper)gI*#XYSbP)|spu zvS%+Xh|TfweQG@To)={ke*CI7i_(WjhC>pXOv~YY@l^0Km0uFGE;XSIkaRPPNTnW_ zC>mj6EX_0WS<^^?f3VhM=H_FBsDho(-jMb{ z%Avy;BskGrC^E*k2`25o5vh^LDO1S9OuCI%o@ZmD03RtSdCNp5&ZZ9`hu41Sw{L5O z;}8VcpF*gW9#w9Pe%xZ|CYA%^AFFit1il92$qvp(SXNJ8$J<_Km)#Zi;&x7Qh+bTi zRDkWcmZsrk5ZLXKP$fA7@yEfcf8s$ZS2#~RjJ?Ehq;3aRdZ$5K8!BD5!PfLFYsd9p zCt2KleL0KY!|Fi zyjgJ$3nqE8YYK*rjgo!XCE%0Z!cWS9m$r1r_kVb1hkYolFu&W|u)oDEhF zJ&}*dot{v^i?-d@@{Z<`1fPlUTv@J`-Int*k6=w{!D}Voby8r_C#BFbbH4Xh+t^Po-1?v+ItIHtctj zs*0?s-!a7{Kxp8&{-z47P%k6r#q-n%kJHmcsAtyvG3OTTkHElVnn3JR#|ljf^Bk^f z)Ur`@L|H&KW4-U~litsc_U^*SA9cUR0xhW+&313O7-|ASXzPZ>{_G^bu)%k+D!BZW zR}C0oG4o8fsj3^|5?(}fu?&|BOJoyjjiyfC5aP`8*{zm%nkdWzubznDk^r&{Fot9S zWhxR5eb1-@Yr)aw)S2bI(jS>aGWn*BAK5H%vbbyt-!ZoPV$%M=_KO|#-UXpu7`=@B zahnQp$e46wGhF>-{!ykTdruP7YO7@D!%Mb5d}Y6IVStysnN1&Zk)q-D3jya6?dujx zoIY&DY?MaW=wfG)xLAdFM8#EZ`xRwXOTJ=YRaE``zO+T{1A&thk+9NOF1E^Z6tP7L zrTN@k(Vic@!I5^NHIGcD90F(asyd^Qx3i{Bn-fnecQYAMR?=cyt!+156>#Qd&9Trp ztwtngLE}PC(t-9zcS5!a!Sjtqp|mj_A*_)6QP==+d+h>!R<#T9Gy>vlQ@)gsKh}Vry9cV%Vz)P| zZ?A5GyBPYr>xnPfVWq=B8tl8*q9T^D#Kj5a+}h6h_>tKU&b48YA0?HjEN(nDE<~LVm*Gk) z`pp*)1?MF9ldYP%^Z# za5XdE|0M4A)q|JC&!c>1VPV0DxyK#8)<<8vj#OS>Zc* zGrNSFS%=MTVEK}=EL|4wSIweNy)ZG;!0q&D-d1=Mf9GMfdYM_91lfd*(-L`?iZvP( z_|XFGtGzzKdTKaYP9&Fkjh%iwBg)s9eiV1y{P~h35Kr|$AMwWrB1~`Vl zYpen$-adc7iaV@eI2vy2&eR|`u_d9owkWB>Z2aVir$Hj(wS8+6EJ<#yG8~0F@-7Lz zk3Zh#x-$0+(p1FQox7vQHuxFc>ou1j4l4=6Fy}Nt09&&@?N)|RYHnz#$ zPjT5shK7W!`p$ibM0w(NAW8mb?x(fUXyF6llB$krJs<;LVaf`L44uK^?mKJli(w|44uS;}VP#9UIJu;l4SRcpzVof0&!RJ?IPojDeyYg^_USZLPw``5%g@$3J5*$@u-x z>{@x;_^o583tw-_)eD8HD;3z&2d4cGc$VoaD9harr+~L$qq)R1rP9LZJw|njmnQ9< z`e%Z$u_<)icd=8kXCnCEkU*u15^eaW9h|J5_Ii__B|yyumg4vZ`d z`T6-lSByc-gR*o9FL}Y%J{eFx7;PqV_J@w|>NaPVmyZ+xj}%fX!?eHlD4c^5-Q%B1 zIRYw2JEVRXv-dn-jh}#PPEJqPfPSstK|ZUAjGoXFFktsueh>j#_&7(;vqPq_ArnDF z)TLKr8g^9i`C^Cs<5xNVYcYyE;jU=#1A?2@QN+CeE~CSX6_phES%B4TmXA%SG{U6e zFu1wLOWN~=ROyHjCbw=w=Q=F-%LKgf_mPN zC(NiAyuMM;T5y(V%d1bf)UCH{&y=!h_{0EM>?QjX;#_FXdtWykOw>hhw*K%;=Rl&> zw*>yjn+6FQs(G-9O!Ii4dN$qffbEL+;O$gPx+zF9bvGP0^@j; zvY5fPZja&NKGA(Y>#}GTSvmI!1(uL2ttt2v@Z(`}aH&YYf1t-S;3A-|=SnHo4R-if zIHs~WhDatq4N($LRHno)ul<;OiAOGwr}5tn$WrxYbV9=jnYJf&y8FEb{Uan@&-9`0 z&DcKf-7ax0HwQjXYYTz+%aOWzo?ye&%6&TJ6 zMhJV)vd^CJAXbX|QaHPhm-+TD5I^9!r% zG<>Y%+nioXRL@v<8>g?I5@Zt+OOMR~Jg%x{2j0}ke2(^ROiS$R@>*@-dKb&s3_^0D zs6(*Qwpc6m)v5{Vwo~3h{(j5R?cDcNC)KDo4|z@EEdH{Yvk+kd4w~(`Uub&@ffFGY z{T(@Z$Z+RAE$aOJN^z9k3>!ge34E}6q;W1gsAM3&MLuR_zx=qA*|RpgEYxg_l@H%} zGvhV&z(-YN%#0XW5cFCk@i5`^_E4BTUMopK5Ef92g0e-NJkV`o=lJxPp%5t6&?*T1 zVYXtG#N|NAmhG-npB+|sYZ z2aX`0H+=OtmOHh0V(l&AA@|J}z1Ib^?NhhpY3llw zU#&C5(2Bfam$yq}#pM0Df}ZaG_5w%%XPn2`T2=A{xkQ9XA(5nSd{0w>ciUB1^0l>9 z&`kE}h4R(>EXN}fk_L`=iW%7%iiKr0tgkOzuM>V>gDxp2qkRmsF86}rTm}FdsG5CU zBRo5FFkmUJ^P~X+ffA21iQpPDzukC&mOXSv$Okb+cpYNDyD+?RTiyyTiEg~_uyJ&l zhN)?{O|@la%8ySuY^a3{dC7EyhLcOmT3`d5VLxyUHdUa+Cb7&>fhHw(Orh9IFk?nA zNp33^lLyyosZ`VmcZ$w07{T)fO;Ajea3s)gG2oR_{-+5~hjHUnGF?c*$dADXyZ2~` zObV&Kei^UVJzJy0xI?3Ib`y_8u;?_A`68zGxjm~-zeBY;{Z_~JlTI@4@;*G}>R%gY zKOsD1DG>RA&X-;XCEj*JM0&z2^3Juvs%4|=?pQbaDp3wRPlDEY+UST2F6LuiMwi zse#p*>MkEGMdZugfsweN(?(a>*vy41;foE`50RVbvyZa%r;_z#0*;T19R8!NzD|bd zO&s*f3`|QGuZt$tx;-?Jomd7s)moYEgrwd+O@T{q9oK&m4VBY-fQpZ0FwHOto zKlDp>UTwh5L`YD~h-3Y(Sw!ve@pO+(!|Mzspz?4fcu~r;gLtk&UeU?uFy$2$24m=Z zBiFAfab%G7uY?>U*NLT8r!&B~>%@kosQtpTHgO7*P0DYsj?TnwP=1>q5ohbL%gu#Z zhMqtIO9q;Yy`Abp2M!tDl*^hav)buV;MMqB!dV?Pb2-@I*5Yw(Oc2x^!0}u-oo?p+ z8H&RARi?S+HM`EOXRdtsUN+nCd2vj%ah|8W^RS)LpK?5tmU+P3?SZw#=w@UwE8|&)GV7Sz+O#=>L;W^lOMx3~mY2hp!wZ0qB9;hSx6LT7VFG+o!zUdUK*@H&IN5j zt+O+WpUp7(ldjZ$93p2p79{V-rx*K&L7j61=o(AWlxhd%}9&#YV`>=!UTP| zuRzS`yd8PSRIt`F?=l)aVv9UxC?B%s_Gdp6l;(?WT(givk&<1b&aYs5!XMp1=t-@j zX6#qlbxO7==_QaSlj3n$g(QZWrNP<_1<(W?{T8DH87iZ@X|v}0@60S&D$h9ySsC!l z2vM2^7d2Sf9*h^v-G4w6Ny3V3nM}d+H`hUp0Q|1Z{l7*H$98*}SmPQ+mxTkRX9|$uCleLa(xgzC))k&CX!qmqmA67wwb0ID}!U-{@E0FS;~JWRnmt>GLNsJnWi6s zmcg2z5O2?7si5~9+by=X2bRZ%28D$yKV_X>$(olEtu5#cee>z{k092LE6BVwWWqrF z58RG4T1)ri@r2Z0vG-PT6(N9d_~B6oeyR*51fnp678N8FJ_$A#h!Hn~r-R1V1&%#!62uN& z_#cW4S#SXy^l>kJQUwZ`?CPex6c7&c`1tJ_RdV^y*qnUEkID5GVy~+)RI|Yfy8q4be;jVfm05VH;q68OB>@P@(opt$(|*!B z+X=CwBm>3>dd;nAPRiT6+}=lGy$iaG?SFe@y7E!fdVWsctvDp=AzqwIjRjcFK0K3I z$P1y|9bSvN9n8z2uYwXWqrsw=gS9$!d0>_@V@@*rHvo(%Grdxs69F#ecv?1EO|u;SDKkMo3C~p9&1`+m?eD4l{PB$DizO~- z=@26~tKjP(QY1Tt(azyT&qWNG)8Nflm_dDvW4IPl&n)|eg?V=3j|q!gYRvJDK=`HQ_pDoHkv*ZD=)%llu}lU3R0u(;X0 zF8zCoHT5qjxh@*JP5zlFd2(g`vEn~twBb4>bU2ag zW&J{=@uD>H){{)DVC=L1F4Oc8yz1ELpnUMTVlXzFs353PpY^fHEAOv1BsF8fT#}Bn z+cUzP%E(Hgs9EuY4RzcXO1~L7THjdNy%MuL6ayZg{ zfQA$c>W-)0hfg{pqGv9v}kinrKX9#~i- zOMbvGn{G9}+TI*$UZkd^sdskl>)ecuCo_G0KE!rdUejgW=W*yvMR@1wfNL6X-j14V zw?mRZD|+>D{G^V^B61A5I`@J95B2Hf;U+Wy+{%H_W`;J?8jD`S3!JyVB*ZIIP-rnD zvQF@cFzE_9&r+n{iM80@G%pq?a`yUv+bAExXOU{7lZr5y-d0t>qs1D$Bc=}pEligHk z(%KVviQegTp%#d!N2JIByqPVQi$yy3mv$K2>UGF3adWYOT#xNv3G_TnmQ`n5Pl-6q z6eG?<9^y#(jyq0jJGZ`}U$y_Oms=-Q1xXkEjaK*HK{tDDUGMY~pm^TTG&61bqA{1X zArO3ZyC9|(C&{c4n^)=XjPcDD4}iK{g-J-4C3NyU9e_2Zqr0PB^NJyD9?*Vl%TqIk zOV@D6N?x)QYg1_On*NqGJ2!_nyv*leA}%jXP4B1sm(Lc#GE9n-ZUhx^BDCB;@8u34 zT4j0S`S?1MN5`O=20!K~`7JaTxa20Y-{;^x1 z()5Yu^g|Q-eeZ4Ct8Y_NzhPl+1n24f9;3j;`ob>@xgz4l+x*LE2erMS$iRmdFVlEV zD!^0aP0$3og4TyDz1%^*;OCl~un&{NW7GTtdtGdXL&^;;5m!7%2XFKvNo>o;$`beOiV0Z!0vRZfwJoo=|;m7 z+~YQp#g%F5+F(|G_l{LdY~LD{8md-R)wNfs)JL^dg@7JObGteC0&qjGH6_W8=qSv(74mCh~-~!HIx1!KUV- z8cc^8VlFtn=et$Mm-}wx?lo541S(j!jrMhxKzL6awT-P<%k#B&jl@I?@kZ46p}uZ? zS=DvY%CHY`{dxMaoRR)m4}^JKe&<#_I<^`1bTsmVG3JZ4?)-{n#Du3S4Q`Xi((MGA zlV{iT*2SD_S|gDcJ%ns*Dd>AqwjjZ5x+@&yjuhBc<0iB0V7EZbFJ_3FH0Prw5A5u~4_|}LZ+^WR`3mmCEG7#dsaSMty%5PU3nJ>e7Wj8lXvQrB13<3R*M>!dz z1GL0fL)5Uria1JZok2mH4f%`^U00JMHFzzoYofIqsW>upGMZ=~p1%RUo0nK#k8u{n zmMzG3wOt;KelJL}SemMwk#5MX_WT&!{PBA?K066G1|nb2Nr(m58}1r4q(QwAyK05+ ztvY5c+17uk+1=7JG(zk0$ENMvl*&oV+H^D_m-Jv?)I-w%K9GAaf^3VgjYAY?qMTC; zK$r%zTBDD&t_hYEs1=@p&wbbzfyYNS zFFVcbR%d0o2>?2qo`51d8oI-&e7{j64xyOc9w=K!Q59u0Fd{8ZPRCC*2QZdsXW&Wx z$sicagFsf;C&+o{;W=gb1KqM#z@kW)M7pU?mMSJxevjgGHH( zjUp+JlXN-6{a8i7`6qO*f^Y<3E6(Q{q>}5&1TEA>MqWW%`hJq!cXU(3tb`0uFmQ6|`^Er)MPfK% z$ZqX256^wZ=jQBQoD=WI4(}pi<0(R^aH^tdRQMO-qj@fOUP|c|_l1b0g*NVH$GgL% z=hA=vYLB)lj5VeJ@mI7;nNN4z?`-tSYi{<2XS0>?CEPi!p&TZxXOKoMd&OmZ+V8;Z zhYh+PpcKEI*ZMND!wp*Vzn+AK6TN>2%_>Gy85g|?xP@$G?(*;tuk*bKV~6a;_?@g( z@`Z0>SZW13%4^RRAZ8;BFMd$75z$<@&IQy zv3y;YCuB3mCIGlS&g^-6SuF7JERKpEkMMV*$b5%7@AOwE$hDNhk*XgY92PlrpBQ(9 z6>30a9NfaM4^M4o+0}@xH1dvNLc~kPaGwPqv7pUYaAUI>(}hISJem!Wit0NwC1Kuc z$Gc5X+VI72{Vdtu&uVvEg{D2I66ZX}7TLWAg|CbAPlOfdMKHCq-@>WH=T~u0C$don z4or&UzUK0E3XHT0f7)wAbdN**`JK-*vgLv}oX&JdP;@Gfi|YOlDBo?$FxMcLa^He! z{k=alcanIR=kZ8zd@~VPcb_W`zvjXiJqS%C6JWPnV>IyXjld*J8F?*|eOwZ|sg7*5 z4`3tvy!WPMWVa0wfBZalmnPV_YeO--VjcNnJmInnaw&^2b|pa`4Ux!8{7ALRptFIWp3O6+b&CG8pTkX4>M21 zAdqYW358Wcw#rPzVV)a%oSdpN1FWPu4*HaT>Msy-jHNJ-esH!B!u}4*YK!@v=6(^&*ef5i+ZCQt>@nM-LOcmhV&+=MGL8;+pzd}_5POF!k) ztf?SjWD4c&@8H+loX68?BBDP&3&OS zM&+@w$7CJGZR_ac5d@MVJq_Y}Wz=&?68AQJ?(1(2yfzw_fGmej*I@X@;!qp;C_U;^ z*;tG%6XW9(#piP$#(mb<&H6kBD)x}|Z6U!HhnJN6;t-EXPD0DRPH&|)rZ1D{ffd<7 zjltoEfdI>(2D(QTe*<=8skl^hC?o#*%U@V zdV@mrx%+-6mcxG>(ZgzjGyo&uRqSJGEXTrY?z`!Ak42Msk9yfX8Oq0`*1HJh6*URC zPvzk#zid!40Zv7BvNPH*SwJrAou z4si)?_QRdFN}J}Ri_g{#gP?>jltQfb;?%OTS>ls=HTIhMgq9!63dM(k^|MreuPr>5 zKUzrn;GVAJ%Nu@^v>Z$!p3~RvAk{xXP>Z6K+#)BZ_4K}(fi@92XgfKn86Qgv*>lOj z^~tfpRW^G+gC>-W8!1%weEpVG$nC4x4fnFp479(RwaY_nI#Zv z5Fel0ZM{hCvfG=RZ$V^Ekk_Z;+BuZM9jn0 zS3IXL^~8@i3(cSJ3N8xvcby|+wsfpLE}E5#g_4@0;Njfe^KRRrCFQqgpL$Q#?kfKU z6~WOqvFu%Yc?V5F=d31oK$Yda242?DbuY0+lC~P`a{ov&@`w5;)nk3-XK94w;Bc=q z?$Iw{(*jq;$dxBcJJ(y7c^CBB(geG`QeBNzH&<02>Y~d)D>pxF_BO#oyD=#QJmTEZ zm~HE7EYLwsQ7n9=;^$xBMnT+NlmsluUo^$pd#LLAl!8>bx0W}Zknu1~{}|%wZzCR{ zM3UZ~{1y?mGVBQidbxs64`N{2{uIZu1NU}5+wSoJNyUX}^BWVbhMeI

nBFnXK~4XrYS3en)4HhdB0h=D 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 G{Qm$bf+;-! diff --git a/ep2016/static/media/sponsors/originals/ehu.png b/ep2016/static/media/sponsors/originals/ehu.png deleted file mode 100644 index 55e880d1b9fef7c3799d9d74569c8577ed2739a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18922 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 diff --git a/ep2016/static/media/sponsors/originals/hired.png b/ep2016/static/media/sponsors/originals/hired.png deleted file mode 100644 index fb272f9d32e7fc31cfe2fc3aee9f28775ee4b7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10402 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 J=kU23{{!3c-E9B> diff --git a/ep2016/static/media/sponsors/originals/intel.png b/ep2016/static/media/sponsors/originals/intel.png deleted file mode 100755 index 991ca462f01c6a35dccfbd430a4cbf1821cdf863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91797 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/RxX?SLL?m6x4-dtdea61`Z)qdL~?Hp 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

i=`as7k`zm# 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%0ACa;Z zFiUPufR5lglgX{f^(|-Jqde0KvA$3^<>we$KSsF#-v~3;bnm&SDG0Qc*2d~f^+E4D z$w+)168AZrg%m2`)Zo}}|M15Hzdjerxp}8U4?)&+Zy5#D2EH$S6=E2OMlz7iirRtw z&7(j6{ypE=wg-M)9{ITgd2nRC7~VxmCX2fq1%?jo-P!i$8*g5^ zBc93;3|sy<#&T;mj)k%5SpC>+q`!ZA<7?#Os3>A-J*{!%;=j3s5#v*Mn4$c^{txB}`4u_-Vb=LK*9uP_|)ONX2Qtq9{B|v-*QmHk&1H zGW@$e?j?VqB2joN3!raB2@sVumazK4k{eDYNc%ez)FQ+Ce%SgYsVEcN*-XHP9$5_4 z$B?Xz-!&!x zuQs0v5-g!H93wNF=6;rxFRE!=!g2csX|I4mqBw4jT}v#0URr8uRQUSWeguy^e7gw- zitD`wOSQUvbaJsLBO$=ypd7NP<^46IWD>gEGqOxT3MV(W)(^I})DDVSag{c$=Xg8T z0ep6Nc=Bg|_~W;KdtyO$3mzL_1hS&aKx?#7jtR7NHa)#~63sw5nFB@2Y5Vsz4}In{ zcmB=22RgnvHaeSDi-3hc|6iZb*{Snh7Ck2xtQekmL(tocjO#@t-P}_9a(!*!W8n+a z-N=b%7>r7fNm|bt=3ptDVdobU-2uPXM}S|{W8-1?+>ciwX%g$GRgB(``=W7i@`RTVdZ#_Tu81nfuFAP9$Qw8u!mTZ4{sS#EXD4JpZ zGh|%KpM`O%8EdKmz>|5jFN|wlT<~Zfm*IiUyeBd zCmW`&h_Xg6E`Ly`co!oPnbWWCP-g2K|KB* zS<&*jy$Q3G3WD0oi*h;7k2ZmH9z^GVcbOm@e|k*N?K4}Y`7{4r9)vsL1}qW1)m|m$ zm_20z^EXL5W6n)0jNJn0o481p)=P?Eeev1pMX0W-fYz?!B{ruohN;u1FB}*dnd`*m zgC+ZJW{E?^oTgY%(0fh*eqF$w>S(V%%kz9#T9be7_j%STwe;*lvi%1?KKuvg$HEm3 zcK{e#1WlFnkah$XT7fkefs;)BNl7x~(iymQPu=LpKXLnC?A_h+O<7io5|p6#5`l&# z*GHat;Sl`XV|NzYM7BHVGhN+*Q^Vt-4oy)RhQ&DR!ee3W`wvsgb2$+bv1|)zb@esw zF;!Lh`DnajA(r;?G^;b9t3}?HD)}axQ-SArrKi2_;?8aLr%Q#`(=?QoCtq;hl8Z*; z6*hr)nm=jy`NwmD9Yu|zZ54a>_wnTb-h;0VU|LE!r?HWN<5d)i%^UkDJzl?@3pLo= zRh0s--IjB(%KXHo$@OdJbW%5lSh6+6qu&_CxLFoi>8stRsQ)AWc){60-&Wa-{ zK?gSHYIphMOlo%D)aG320H8g@y8$A z^R>M@n!cx~npA9E!f1k)t_sWZbsYuSx^r?#X02>jXT`yHjydj|nom>;EUkOTOMxrH z%TC}m0hrN+L~|mXXdQ>#A@XVUTqxX`$YwYUf#d_}+!o0}E46Soyl<`hQW_wm+bn;0wI{Ll*bRx94SWqKltm-mbTEoJUpP~!`Z#j`H zxnV&9F8&zuj`^;iA?+bBJf=6YPz8Rc;j+iQ64r;huWSguQ)WvR_?cb-)N^o|q)s%q zq0PTD=4aFzf!sDKo=;=`tgHxlk<76g)r+>c*a?uhb$|QYcii6lw5n-|eC4b{Vf}dj9bI)6IKR$eisLDR)m_{8 z7z!E7c2HEySE1WI@~ zblwQTR`M)#HX~%Sk|&c@bb|vD(&+%b=yS^7gAo-Z$r%XN`-dG~cev2j@kJ}bZL`7) z@2&&ziGMu`pZ&$#EPd9J8yPephJ>Z>%EScJ2G_h1z@|6&%#!OnztD4t{0JvWI|4?jv>~`0fnk9L3!q=&N=6h) zQIt#|zW)2+!5Q%T9pJBYuL9|)rz)!2cw%7mL*sMtR+^zf2e_N1e<%B3ra9&c2kTw4 z?VVLG5kM0wG!4YnDe3e=D6#9zxrJSo<2lL*h*<_^W|vxn zRlbI*Djy!9Xn4hulfz&W*56Q0T%~8xX$Aa=q*y1DrJKWia!NJwl1tq^c}|ML=wpp1 zPb*O4xfD)Q5o_jN9r^UfcD(E7%qb}l7^el&ExC~eJs!9Qe-#YR9)`SQIkvW&cwnyt zx>jv&OEx2@XCU7}KDYcW(lGouZt7tc8@mP2e>y?HO@IU}h*HsQ5X7IpFamAuje3v< zmQtGviOiYPL!US{FtInMX^db)?N!+%12pDp(vZpJ&@+ z(YyZI!Sic(u321+-x*JUx<18hXQ zuG|hVJ~j#aZfVvH7?xar`Qqp9fD#5tDp>8+6h+fIyBc1v92k8pnF=-QzHy2v9brL( z&cQ&DF*!9kU!kg+t+Bb%|Kp#WsAh18Gc?EqeKH#y2))->TC2+Eo9<`{z5}Wn-pIsF zb2RMT?kUTAKE1dgRC)vVr*qO6p5Ar(&*C zNXPV-YyX))6!??hy&wMRTkk9%7n$S#ug~q!!7j?Z_Xo&4^8MK3@>R~yzw+PDPQ+?? zmV?biXHljXSyF&Xq$Fo5D%lw3^0oM?mU|>zQ{@@lL}CPiE8D)8cU>stu;Fl` zG7^o~yB&J{yX?l=7zLmI)GY2Fj^y< zRlwu1gU#U?7F?c!9&|CaWKHO@-cz)0@W9jv@w%+Tlm*f)d9MhDXyXe2qm7;=?UzY= z9~h)zmRMp*akV320`XT(P>xY4$aRneD}>zw=vNb*H`fFp5>J)4J+&&(l~PsZ-opb! zAD*5~RN6VaUZP6VpM%A9f9BZ z*LQRxtTo~bN7FlHO#&O9TcttLiLy)O83Q@C0s_T>Ct$xIQ_2guoV2*n_8)w7Ck#z5 zSR;6g$e;bi%kW2EdZ6edp17oYtmXPj&+8pEzLDA4NPP}dmP_i^DhMh?#xe`3TpUD= zsU>KAHvz(p@mQR(BLfbHEj3Twbw_9a#Qd?}$;sq~*z!2cmjO08 z1*cL}Hkoq8A`yXE5x?GAyBskP_qnw*bv6E}snAk$meEN6OTehSPU^Su`6#181DWpv zM?oT^!i95ly;Xj%i=1Ucn)Xaa-0&UBbL5=L^7-71qp~}ex!|X;GKEI^T6aL@Iea#{ zDh61Mg&dV8L&O1z8D+#FBSg(0YG~w4)|4$MAK;3~>vTTLAs43+l?vwUwYM zS2VULSynsVK6K(YM=maGV;P=7zm-ZEJ~*m~2R#qWS;p{WqOUuflE6W+;*PGCmv;5H z{;;rWBtwBqwaKzriDXRZg=Z*650@|Hfm4x`j-Z)JzY`*{Ed28muc|D^7TxO$zjmKB zg13kuxXcm6Cv3+tb2DuP1>)^fxt=vBwO;~a*!Gg@nV^>Af{>r%0M89pC_P&8TGVnA-^ z-0{`g0SKRZ61uHF(JiAODSM|nAW83GKQk>sL0GX!f#zkCbiW?`4 z+<45vm(>jPcK5#R^SUM_(aMdvGDu9uki_c!iV;j`%rbZtuHO||Al;Jpkl;#-xwGE~ zBYzeNeN=3}MH-a;$_9GJ(1EKDPk+wGjj_E!CAeP`#4fWkqRv z{-uH6f9|DokIGqE;CPyVbBQQXh@eZS@zA;#UDMr}nXF6zy$U^Dbz^&Xw?C<<>fGAP z!u_Q-Od8fkg=d4 z86mQusVlS`GNv`7B7u^Xpta63)7e`6w#V-&8hUYIXkxiq!bX=wa7q6&&kuZTa!#sd zY<57BI-E0k(sP_o2-tCfQFs<|35Gd%XnK#&cl>v}ZqHn8t?z`kCg&qdPAPLbU80^o zveKiDlCPgmG1_!6=o)0s&)tg&B%2|N(^TW66idl0%PA}8Pjzj}ioknqzNe%9_~D~N z_oOls<#Gt1(WSig)Ut6xLasQw9nM{x-!n6{xFZl~K0*3)mB$(h^YEDpJXaL-d!0IY z92JSj>%t3>E;IyDF3?FOF?FZp-BYAL$vUXW4A=!x+rF*w*-S*6O^2gfeokpyOy$6^ zc7d@&O4@2AEmwkcODuU$2!r0{G18M z5tv(^atoke6;*3P6oSB|wWdN>p07X{qUiR$`0}aW`M0M}e=HtX?OrEOj%ko)(O4Bi zqe_+{GMr;r-bsUGDhKs7?(97Wx}NFkZg@6F6zS~J>Y&_jeB*fnN(uviRZ%H}F_|{# zHOtU4_4?H`t$XBohEakw0hQwld&ZEIt}fUBL+7K=)#I~3`WBH=Ui7L~*UCTNYOb#y z9v+T$Wo3dBd8P#rIiZK{zkwb(El$`?=ffoUUtVZcE=WE9}=C)I`0d^4rcD2?F zH#AnCP}Sn>?dOI{miwY@9R0}TLb6UJ=isqi+%hs>S(XhA3yhwlYx7XB7}wy7pnb$B2np`1%ub@XMd{sezawo;m4|DqTpvF-ny6Lv5{a5_gebPg>GPPZAvD8~ zdv?L4nI+-U*!+DxJ&i9pD;*=0*)J&Xyfq37(?%M2IxT|3!LLVMpqG8eKJ^ToT)cH^ zD%FKm9$1Fb&qkHOt$_rU=sizFW!T*tTxe{rI^5mu-!RAF+{M|g13Sxqwt8jEp9avY z#`)BZY9TP>nYPw9!_@5j7F~f1kZzDcTVlz3MlhV~hzZt_iTZBRFnn+yX%$xYSn?hd zOotmK4GFGJo8ulqI)=1I!19z^0R3tx3n&Ve_W+`zs9^XwMer+8gA8{f=E%0!dO=f4 zxDgA01Xa~IQBm&u@iRw%>*=RYKM+f5Hn)d>bIPDd_N<^q%FGX2P z!Da=$=zsXT_ZJ3A%Bs%HZ0l-%^Z1FW+owX&DvXt2D0-R9kX{AQ^8*k||0%#ys_wDI z6l{HBsm3;ItE{QZV@862!>;yp)eTkzgppXXxaV|ct|YlP#nN;SnHvNts>|eST0uh? zZOlbh2A7kCnZ*?M`r8*C>DwNBsiQsccHVG@xAE*xhQStKjH0U?4PW`Ecfdvq%j1*d z^1qV<(vk+ilvT?`PamQ3V;sHCs%EqENr%TJvJAa^!ADMw!fm_S^M6WyziXg>d)tZg z%v8gY#2S*RPqzy;5fAyS8kUkT9Zw{C4~P z?x%xQu1gzLevqWCWsrBd$_ASf>6a8uUTJ85qBp&C8GR;6B9}^~$Qxk2hkW0@+aZ(A zZ1EL{0zt?TpibUV<(D6@#F869(E5aAqv%C^ku+pxy^FMd(%QjdJh$Y=6s&KLR^K@j zlp`R=d~yt5pEAFVc?vkpZLpHZ?kjoh2MMv{`#*zg6oHV zy?Fn_!&wYUaGg9g{_vUe6Z^4rz1?mvnhLZwJpqk$$+QgJ4gSP|y&d1FuM;90d8VIw zZfHx*C!R06oNktkpRmC3kW6KavX+}zwy-}idMcgDRY;=jvI`8o!p5bK9aX)tDrV#q zarqT*v#}6QSnIPT?-`(ujPDroi;VC4!N^bF14enaN~?=3*}{SgGlr*Qs^PRbj`78d z6%5c*j^XP$tD7vjh5+3RN7cZ9=|sU1CCs1&pn@IhDqWz`S>1brWLl_{QWQWrTAERFodz|j!j7)M(qoVG z{-4&iiWfFA9H5uU<=W6YA?IW%lP}eViZp{BeT^#FS1iqeop-|6M5N)BgBR}dS2^FV z@;MemksO>pKMqs#i#qw#dQiy1-~RRY;J1F~lRD6+7zUMkK@=51Wh8=~WK*FpMUz56QH%d-(A+W6BFWKb8GeKfpZIc<0+BT5jU;qkr%Ln_=`3yO^^?d z)*p+O2ft=$dx5xIj0yn>pQ#GXZN8yko$s`&6|aLSNix`-r5UeSnwGH+cUCpL_~@n8 zD7CQB$IOpMH1Bq@5R0Uphu#|h+1_pKhifVWuUt4cqYa&(fvUQVE9!VWG&DEYk#Q}+ z*!Wz_%*@<2MpJagc&d!~4W{t`#p~dd3cvkqh2IfQq(p7?o0D02>6xm^z;g$7H$DFR z!r()qL{ThXB2|XUKQqH}foTs|6aDbvk^A@TuKjq>=l?Rz(h-JL*F7(rjf21ZtCyf> zTRYfYEIe{|lNOIem{1~f|Eq_FKN^WhP7H%bLxr+I#1XBB7hE>nV9vB8DqvGI?ao^} zf7H_AMa5S3dJFg3ul~|@_{XoE-ZJwklgXC5siaX#!tSJHbxCA3n%DUd%7ym`$0hQB z6Dhg1s;;5J<>Z$Ex-3Z`CdC_aJz{vn;PiW6*a?67zYkjrv?cE)$*ll3FOk**hF2YP z)VoQmBh4aZuw*NYQ%vW>@+h9SvjM7;lK>*E;m{pHxmiqPNqd@3OeGC-P`-ko!c9~BZ*pu+CaN|klu{UaRHLLG8hK2JmMBv)aC%o$MLP@Y6uay^EG{K&&%Jc|{d;!Ry-~Tl^(Umy zWc1i`?8XsXJkP~pL_=BSp;aV3{UgaHJT+qmY4$!QuK%l}N-nqTu zgvaAb1lL?|Zp~HjEL^r1bl`of{pGyPtd4?HeTH=-2pD`N~{^h{2c zA(xY2TYL5NefM?$zk*#$_>MdZ@Q@6+&EV9dpaka~?6bv&53? z1JHG^l^$Yk)GK!gJQWE?s}CPK|5=BfzmK5xh(tj`OiMYe)2oxY>CSeQN~JT-L_Fhv z{*^OTk)>oqIGU^urP2-aQ%S%yz=}#AG}m)F>v={@=!98}?){?62j^tF98uV_85wHp zT=6?^Z~J~%Z^Pdzin_S5?}dVv*2ZFoUD9aoZKps#rZa0ZRQaKnssucz5~Y-bfm74n zPd|O^*Me2F8)IYorn|bI|2+{=z~u?S?$hgsK(2Zo_;=gWb(TG@fD) zy*2p3h8p*b$6@<>FmkYp&J}Sqi`oK%Co%wJyu0f?6iSm>Z0NIQ#z$h6V*fMfQ zOa1BIo~H8)3yF2(T9Ve6cdM@tJbTA&-4BjTz4I{wc6rXhff312)!Xh<0uO#a2Z~&JDq?kX zngDzk#_oBqi zh8{|+r;e7jy(VDChA%h_+qCMcTXHo7Uzq42&zgW7fjD}_Crm(&;2cBNF|{yhb(bYu z2%wu`=9q$x?|)`y`!0Y*uS6l( zJ1L4*7iCMbTx3a>Yn&I$FHSx$c_~uzl2787#8O@y=e;CPaY^zV7fJR%wiDZtZcS^tjCr8_rXH2fx_O^J#w@{%R^n(Z2)p;3uAWN1`rB8n zZ1*+QRD1(0_pc;rd1qbyqVAP@kDPetGtX`N-6Q)4+N#14aY7ZKNH{RFEoIEkprf}x zwA5FPtzEP58BLW=0i5sdA5zk}Y8Nf_?hDKOb^|s@OPv7+73%l+) zaA5dqBN&CQT3l$$ngJ)xeJ3;Cvth>iP-PhsLTvkex_--bOSWEj&9Z+K*Gd*L{^PH{ z{>?owQ}&39fd_9ABNX%z67CF#mCRYNZXa?5hD+J%2d&_hWMD)8o82X0@nY|%^g z)z#lr6lM5wdOu|}9qzcj1KxLg7kugKJ4Ijf{w3zJ#kQ)yPQn~r;Ma<>f=UNiF7P1$ zkh!^-Vt*#UazoFMC`U{9Q4-_FNSq&~c??>}Ik+1$p9Q)-DYxd^xDPcL4uc#J!Z@qJ z_~1CYYl<1YrC>E_dQyfdZEzxA6^lTiTCqg9sj&^vvr}hh&vt6*X`_&lqk<%gaBZ0T z46#D0j(g5=Z=tStHdmgx8cKXdh&o{78iZoSkZ@%TL$gchL%^Go9jMsV(8>@O*{$;NRH@gB|dlP-Yf)KAQaHs z7u4*IgnUD37yEfJn4pVTSccGlQ}4R5>)#I^I+O-RpZiq*pP*cW^K+tzajOCOllBOF0AuK!h?LGPKm*3p?Yuk4Y zbOhv>XlLAOjgNu9NIRIzgpf%Y;FBeN&62u(3%hEc6*Zak5?i4r9((zYcdh;B(TRya zJ9zX=TS^L8;zrj^uYkhHfKCy0l>wNTNW&ZZdYg|8CjPLyd-%3^D7ep1e7)j6C$p*^ z9T=RfKYVgW_racl^@mR-0Z^RFfYj&(Stw?7__u13i}U? z#GZO;>+fy8VXZ2D_5;yYXpvLR+#_d~ZLHl<`4)NRJF14+AawZMUtcZ$i0JU+r}(|i zT-M-RsfP*%m1`4a6$y3}>PzWobtKq18a!i*37j-dP{9e?2@>Qd>8mZ!2f4|ZOHQDh z^F=G6nmGZ&??ZkeK?2IzfMheHn`wqjE4iM3T6&Ij%romW18hkW#oW?CQ#F`OXThfg z)RjwXj(_OAtH0K~pyBI6kPdXTR-5Nbn{lJWJ6$_J9aSh&TzCayk-_V(TlST0JCEET z#7m_S3W8rMo{RnLJz+#^MTW-43K$ugf@fbky76T1=;D>jo9+}%w@Z?ICskGJ%c|;F zHmik18@1rx{(+&fb^G@XZhZUT>5eI(2&yV#rrR;5Z*yThwb}^(ml2{vPwEY|@x)En zEg9Il{kX=DihIzC{+U0#t?1|4yV~q;UvKZKJ+N)xiRD^W^nFmCwfiYP2^g!ev!$kg z$>OG8W;3cQOJGxjA5Qlbk5$sq;fJoSh2Pq9@Z=4BKiKoJbW#oaDty-8v?95=tyFS` z5b1t%oKK~)p;vYuzUSER(DhA?6?6R)j0T z9|?h`C&7(n6rVa(JkM&p|bk?{mmmo>I{o=1}s|E^6h)H ztGd4R?XACgqIaSisul2KU_Y(+BBd#eR2{-MCG7Yf zqmx4T#*Fihop082q`RxZOO}r@-O%4`TM!!FeJD{EjmE)?CknQaA}df;T?endcC2e^ zBK2q83u`x4gnciI_iaxmqmHJts!zOgYs9~Oq8!k5bApzFOE4*ATC>&`(A_A%zu=1;8iEwjW5#Y-Z7hG{M7AO8=^nDMBaNL4-ivEq(a^64A z%oBkwox4YQ)=N`{ZOxs_`3%|AW!udj1Hq-tRBCl~vCMVr7HqxwmZkr+tgGcGLy6>= zJqbU5%9}e;cV#fi`u)n5+iza==)e8&&EGmTmh#8LelrN1?rO3rV|786Gf-C(gj6~L z$4_LdPMhmipad*D4M5Zd6nF>v$G8JQ^;*OOtRK_q^o@ToC z%92KIu`^BUrz5yyny*wg15v+}S-HG*&)O9or&cUmaNeQALz6QMlnXO(WtStMOmd^R zFSB!jCg6jEM~Z(g8acZSuD@ep)Ast>%G=KjOoruv-$hEi!elhf4A{1IdGmp`w(33L z($a^+Qv?3tJ9s8Xec;r_{J zyfO+gpER8Xp~&8JGk}|9biHLzTp$a9mAAEULTJGk?RB@&yNRkFU3n9qoj7}x>G!e=mz);Zjy(}_ zEE#AxwjEWk?|2yXH9wd9UGoWk_-4Wl%xBs^1s4uf2p=?DjN2Yi7A?rJDE`^*4T_t7 z?V^*2Pp=$KE5{!W{ehGO4=dHe%j2v60N}Bi^Rx-mB zx4|XzE*MqaRqQUhlCQB?StU_BqMx=g?ad6J?3rl~umnEB!8=6edj?}W$j>g}9#9$| z{1KYeQnR@MvATpO$|u3!%0wAC=7aE_p3w8<5}L`{z_8WYG&Chqm8<`>TcF!-*WQg;~y80 zwQ55l#R3xLX|*tvYrIu-P~m8)pVTY7W1(K3zoC=<>fCt}Z^w`-c`#r!^rK_qm&>7DsdTyi{B5lTTP!YN zHk*_9xA*nRnd7i(SE0)kE8fyy_P*4sn{c3s+GC5ug0k$IL!vW%E6+q%v?MWbZTtT z9Uxu0j)q?qcM<88tt+r#rp+~|fE`HPuhKr{vOmiS>>7h}_E~e@Ao!lA26g@P+Kd%+ z-l9zv+Fu`sGZauF!+N_@m!oOxRl9+48wr|U5Id^q2Sh%gORaM{Ips?&NDw$qBjzyV zluM@P^_~a$Mm&WLtn%{g!WxfSH*`^CP*NfKU7I&{zxZ8|TV(pCG&^+z-BGbV1`V^v z8R(0f!fU9xW1bmS-TiqA09Q?Ny3pPa5^q{HJ#sv$UXotU9*YWa@ zM7PpOg78g`+iCCOa;9?kmH$+Eui)&A!SA6XSMaGl=j`$DVo2;W{!bz5Jt)}>v*t`K zK+%jQ#4e^ig717^pKh4N$2TH$49RIIk)~X@_{&f%mSvm-@3mI?ycHIO{$hifaA28aj%p`L>O!1M$O|<^xZ&C#I6d>;2wtn54;jFYo6wSa35Kc>OM_b*e;H%n9tf;M_4J38b!O?&}%;` z+|SXT(`GE9@Z!skm!nWxjFb-cAB77i zSAIqwMr)ekYIQO3Z^y|zm#D!eaE$B6j(=PhrvtKvMtEY*_Uc5k$T9`&X&?+J;raH4 z4|K<@w;qjVW!>r%kl+$I%!ZkjLw1%`TS?Z!NBi$!Gvoe#T7OeSsyVuDb$8}8FuL7Y zC;~Mb&)2_!R+;=vOz0WZ)q?w$rYw-8q18z+=`24VkOcVKFys~=+;V|*zx{Gk%R=449c9P} z5umq8c$vk+dXPgXC#p)16pmVys|DD0&-=(dUi@9`VVd}N#PDq5r@a;!8U{Mb=5(}M z*!lfYfXRReM)pnIQXDOPQrpx2$fA!c51ckKolcF9;BV{5S=7-|q2?0yW27_J z5WCmBurwom?ESq3Li&5DFRz{MU9B7e4nQ;RH-N8+1#r$$ULAMogJI^}4|AJ>D!m$Q z36E0l>BvABj_K|_j)3;(-o&?s(XOC?;J{?ViGbsc6i?G0bd|&Rz_<32r@fA-JC3Wn zq}$n^$8y)5&~BVmZ4lDPk$Bp^o?4**m6PAQ(~tagTxRstPT9D?zAihvFZ|1#hZjGm z?YfUkB`o`Q|#S+=am6w9nu1Ag`MTfFseJaiI7X(G#s52d`)0jazcU zg!JZ5R5HTlP~?=924ufQoK=~<$LAy5>^cCK>S`4l7ccLrdbCFHRh0dCK<=ih4*9IP zFs-5Dg40=w@WA~S;x{W<`NGfWjyYH~gvi7jRUPlE9=TWQT}BZH7a~#Vq{|n~1u&YT zq`ro)``0%G`Vl(H(y&b~1bo%?PjVE!g#Jt~Bds)N|9zGz;+JUz4o7crgh4!#Gj!l2 zR}1fM>n+2RE0mglGha4-L5sKU}<1$xTrX@ z(61ol5ij-5#tD=^%$yP~1kzhe#3fdU3f-&Y;K@{d-u^5}N)(8zqpM!t-cfi$LM!la z%4z~jL96PYv)<41B1o6c0v+8Ok7gt`ju22*x`iY7BbZD}-8xH68HeXRTzec}IA}>( zV6XQ3oZgXR}w0DI%>R2;XcvM`~8v*G$48YV~{1lYw%jIbB$B$9g z=@UB6bc)L=X zjf0ak6AxnngLp-olG@@k#G49N#c^WGSj`gl+IWO({_5zDktYYAl5~A`Bn1d83h{t# z)`IMT;lPH+MKwmd4Z!K)l-yEZc$na(1-FEpEgVEjmQo(&v3e^nzP_@nu>;#SL$;KW z3Brn6ohQ+5TG?X#n~9=xe@TiS-^EWHzh!4o$8G^)yrpj1SmAFAYB*sZLpaj2FOzY2 z7$JDgeg&i;oq@ZZt~2_haunqQ7$;~jz4ba>DU4kcU>l=M-QB04kn%2Bp#5060muK- zknfpoz5dIPt~wD$)H9u+_x1%Zn201iigH$(nec=D=MSVgsIovrU$=;~_#~orzOZD) z&)i8IK_5bmYZj)pcxxUW&x<(A&pgTtTXrZEnHHl*@Q|c`1RSoZPNWQ%zS?N5$vQlG z(k>J?3SG6>@O{pR)ZGO&(2(AaYMF?amjv04 z%A!L)qa*m2OCG2(^im7pW`a~TYwi@bdL(HnUJrhC9qP?{9ETF5bYe$@QZl7TK?tb- zl-h`yV1^DZXg7*kSb;LoG<#7ABp+d+^?^#lro97?lW+BUzBWmzYiJ)lX~y@lhdUrm zg`&;D9z6+bkyqo$IOHdhkya{A7gyn$Guj8}X)C)L7@EJZW^l0C^Z9t#tb1sonAO!K zrl!aDgzBTy4z1}?2S+{(5{Xl3jWLg4X!T5aP)fzBy983~PXd@`uTo>MaaDC$E9?rH zF%zVm^&1q>ccj=|@^X8&a}^cQ<{;y?Osr*e^_AtysfeRG(8`d`ZFF@SMUxW?MD8tH z0FJfWKcv=wn#!zn(3Z9_=wY?*YJd(aU=?nd2=MU#3{kpLaOVv*0kLto1BG+AfBw>K z%SU#6>#V0*ufvlb(46+E94!>XFzh8Qb$qK!RVfYqv`2fGe(O$AV2(UYMSzurWu>gz zzcoU^&TH3^_e5oji0|iAWA8B#b@!w|DTESoMPDo#s*q4y5{ZqUHIi<5)mPV8GEM_&~<`Pi55cu5lk_786y8UfJC!*x?) z5Y07T1*Yeg4n6Iae2weX74Pn@C@Qr5E+6v%f`XK80gdQ1#yc)MZZYVeigKmbkd$ttLz;eU*EaMY5hqPt}7x zRAuSfg)2b^kl{%ZagP#T*O#W1EN!V8Pb;|^q^JTI2kI=St_d~eSZV3Vv|Lrmt4$Pd z8we`TJlg8(&%=x{j%kA0NDs^|kq1^*tvfsOTLA7|z}7Nj{aYf~7}QE`Ze|tsWZV=g z%p6Sk$BHiF8Xq^sk(-HJ(;?@lrHxL;X=fzz_i_XCueoU(Xb}A9@W)v5)vTO4>+Q7_ zB?l6SJXV0raVv>x5EiOtV76Bw&dQ3_I>3hy8?h)vl2b)D#i0zvt7I#gtUdOm$%F}} z`0x=Fqbkl{BDe;Zjs^yqj>4h*3?I2bwf6;%*c5-g*v#=en>y&;C~@FPiWAKj?AxSg zdG(pYacdKhkMcgPrx){_>vkyx23<;T#rr5+1`36Yh7D8-VB^NfyMS;rn7sJM!u8NtYx90U**0OB&Zto zlpVH^$`!KWl1lgFI>nQ$o6grh&6sZ9m@FlB??KwY==FJX$=B*umzQ)qUzMm3;I5=ClEBCGNl26nUkuCY*0I`LS!{@nT6dC5CJg} zgA|v>(ZetF!Day!UFFO1k<#$Repa8^@$uV?J0h++yL;Id+e6tJGrlCXLdy7>qbtG- zDFDmBOKOJZS{cm{*6MWDSH$A<=1Hxqr}642BRLGg3z~36G=w88G|T)vmYKyFrPe=` zdbdutQCDj_;>fFmRC9<|5(Mjo;=Xr3y#;Elr0)Ae3m>)7cg^ht9Bmw?kMc?$FCE$A zQzbL>UZlUXfN-YDpm2~)`!Ub&lV?m=(_1|jD%ww$1ZdCHP-$xvX~aCasACov)iU+k z>RkOy(`oBn;B{n`*tGn5agj-3_kOq!h$6rdSahywY;R;zB!H*W6h|~Zi4gT_Oo>Let`jDPaQ?OoF+o6h*{waO$Gb!^|7vMRi&66P>qd^&U}_4xeJ z*ERf#hG*l|CmfKRpR)?dw@9>ZKsr$+l;c^GfQ|veS*Xywk+znrvUXrznVQ*Hak=Po z5ZxJbu;s|Aj1uduPoSx=b0ODEk~Qy1lU<Fvr6WFc ztcYg}L7eFq43t3Xyz&F(8N*INRc#F7pZEJ4Hfkrfww9;1w&i?r*?i9V4LnZywwE&- zi|!;)a?{<+2VhqE6+@-9bHps7ai%#2`!k)XxmGV1+EybYzIqn}hdN^}7R8M85j8n^ zQ)5e2RQ&YwNi(DzyF;_gM;EnPk)5CKDNpg~PvIlL1Z2!)SM+QnP+5r>u+)1u<&{@GQm@sSs%$PL}4Ke7zpg-2Q>;R7>(M#OJu> z*0%M}%F@M{LC!Xh2rI&MK%XO*s|zM}!$3F5O)D{h+~uLR3=T*8^T^#R>P`dr14mAK z>i5qAI0!Cl5m|CF-*xfi8FiPR z+r-D95$i@@>yC>hSXyO>IT7Y~E8qYbg^!#=Sj54SIx<8TN^z)`bHJ@z?Z zyxlkZ#qsaJ`>}hUc(fau(xy!l>W{{k9u~h^3obp}&1c~UaG9@HmP6q zknOdL!Z`HiZo3H#cjcNNSZgS9Dkz_51+e zQRFKtW5lUA(Go_971+KHSro`YPs_ypLr9YGL((Gq;$dRIfAGCu6EAjI=?lV;7d^53 zPz?{M*uq{l#!oS7bVB>$n8*=?OgsWPWKK2?c~eTtv6F(|qO*+c{*lyVD)WcKR$dA+ z&d(CJW%+Vps5w^nf*7`THZ~S=rcuyO-tu!%F>(W0Q#E}pf5v!jQU71~KbOP)HMViaF+ z>%CwCqW$bu_{qhM(Ny7j>&VWHdspxmUmol2`B9_f=8b;PUG$XkJAm33TSpk=32n8R zue`jSZzlRQRzNW{`5bEg6-G43{=^U^7Mx`UbZ62=2&MmYLo%wFj}35Vdn1( zVkhe=|5!q{H_w_M5@94PFNnfEX~kq6+C%97;z19Gsef+-w&X9B(PSZ*9uv3;6B(8i zLaH1dc61zwqd?5?*3Kx6iIJBhnumJrjk;x*2!omU#U@9sd)D(Dg?f+WOov)Xi9v=^ zxiLj5UBtdBZCb1F>f+)~o3!pb&K^OB?KbBYg`&V99a+TV{RF%E_&C8P6|aPW6ii1| z7?0(p#+uL}(}L9TfgH+k(}Vmt1ATJB!IaHOBHa}ZkpQl)B@@ES2 zr+r}^@ON*CmlOr?t$4h0`k${ld0G)P51XA_$E<2=2vTjkUrS53?Sc_sE3t0nOEq7P zOzBqiPtWbNIC$9VdD6xi&q$=}Vxo(zCe-`D4t> zhmHe4<o zM;I8WR4Ey?=azP+Ip(p8{X-=>%p}r0ZHHf9%g>iQhw9eyf3Sr#nVrekPgLlu5e1;- z^piIz)amDx60AC28t;ah=E_*jccrmnjbE;$DuAKUOWxDS2QlKJfE&pw9e;M+(vnK0 zFbPVkzQ&b4Nh30Tc8-MwP2LWGF1XLyo`_|2A~JjLQ&+L0q6Oc@>SB0K39v1KQ&-n- z!h1ndq}#U*kHiim{uj8dY~ACO*Zw45p$Lf?!J8FVO~8hCOFs=d%+v4&=F=4fe(8%c zpfje@w5V~Ei5lYc5!V5nMb}kxi2wZ*Re{I0KCfKX`*W^D&-ScuRn_llmsPjz^*A&m zgTdqT!rsZZovE*1@L8`-=)|LyU977qaAWJl*Il0o(rHnnsAi5&Gpc+rTxLrvk9Uy=Wf67u(`zQ{V`*J?6+pKW0Jd6s%+x8TVHPHEL04p%NE0TDQ3F^vn zy-oTQAu`8gY6aE(UEEvSdWj^N_M60jNDZk>IMWZs87j*98x!(lg$Gm9ax!!xA8TL$ z+vCJmZCNSKTYHiA6bW%DyEF_Ql5jDH{*{hEeuOwL!d zs~ws0YszlWvCVM83)(N#NPS@p8rH^7HKZ0%hWrZH{UprP#2g$E{}5c-6edM`z%N;9 zA~33Uj<_C)Y1e>Q*fMJhK%F>y!s<24UQl_d<9_Y(`eXD-KGH6xn|Dmy&HglA@Qug%L#QEcXmdF<4{PWByng$Hi*X$h9^>S2;rS=|{Y{uS^quEzKd+53;f;pe z0T<x>26k^P6CNP-GXL`#W8k~)2o!eAF1T6J*@38Q@I52=Bg(wRD#PON z=W0%6;R-#inY!e3?kdaMi{tSbLU~ChG%i7Y@~25*P4A8Nb`?{*llVy`^x6262_6Qe zB=hRmHO?`j@&Ax#rk}zy14LYB@rGS}Yh!w^H?XHNaiyE}H#-Dk^-dWVJ)w`H# zv=?=(^gzuG6@GZH!y&0#cdSGiV-f3rNh7+1rseGDC`!lJMaQjgt~o;rTycAJYSfnVIyXM8(y8?n-8T?-^ zcr)oAD^%n9X7*i~!UAVL;_mLZI}#ZvMPGg}!2K&RhPc>=NY0K9_<5r=6Si(=0+1cK zNDRn@ye)~i8BOO~-O8Nr^Hk6lr=y;qCgciQj_w!((x1et>a)>c(D7y13W%bIl;QQ>f4vqJ({L1c#wnc);T+&E;E#vubA(HL9{UKsb?Vjff-lDabY7 zC%MBJN+El)J9StfuV-$PCJdoM+s-LsA#ojk-k)ISNOmJ)g_1Ubr zY{vC113^(0unk;(;IW9O@s8D6_YWQ5Uj2=o?YaqpoXe)p*IDm-RP4W+0GVaT=x#`i z04+58a`6hT2nx`tq^u!Xt8aa~`^iE?TLuM<`gOM- zKA^HBw73YRf?<9znbGPYjWl-Ty)z!v*tsH=k9_p7;qGToDeO1_WX!z~imQ(5SV?$b zxOVVxjb#q<)ao20x?R;V;vJCE=qCamkwI8QfX68iv{H8)TED;4E|Us?CM|O!mVq8` zsN>z&jh@(NeScL;ojlVl%Fqy?mii>;2mrM=c1Z~M5Si4r+y-O%NeAY$A#}G%kK<>| zm%rMn&T}5MOfv%XphIwao9t+2+ptG8H`neID_ku{;rk~TtTjc3N?~c=5c)XRrmgqV^?;XwzU&=<9S#*b& zc5mmBo`GquHik>)&Wo9H~5Hq@` zr7O*mC5vXNstOA2*F(i8k3(6ULhSfAA(LC#5TNVC1O^IP_S{^;>u{vG2HlRKw5uq# z2;Ysx0Ptn*+v@g?m+~{zJoE#kpx-}w`S;{`s3&AT9TdthxV8g)$XqwGUtT(0_wFr# zY1`x`l&*PQ$QQ%3a|1yc@A%U|XWS-2UA4nR@G(IWTEN>G`Vl@${puI`MJk8m|f}ffm?D$+khbtSk7x6 zaBd12VfEQ`|8g^I*3+(zSC^BuJ}i!3SuYfMF$Qxh1I_dEKW5~waUueAPSzQ3`hss` z<;${TQpiiLw(?$M_`xF`f_}d0`t;a{!u0t<%w)zbY|Ottle6-i^7DN3Mnx_E^8;pq zb77vmrew^}4~}v$e)s^`K&Z7Qm>J;Eg<6duNGT7sd_&80s{E%EM)p^s!P!j9ET>NG zjfBV)nBKCTIi`lJwD9Prn64UPF;j3Qb_4VLi*?hP82l?oj zJI_Rm6<<3Ay_|{@l_lq~;^vub*57_|x`X@i%L+ar;F-O$&c5g*2TP_1Biw(+{J<*R znyt94vgz=AbHu7{8jO&FDFtT>AIKs|EpW+iB0PObh@fkz1-+Vmk_>Dm@AE{U6{&Gs z=S}8ov>6V}iQ{U7njNRfLWUtcr&~_hKtXT7rkAlr)mT^&A%hTf=hP4`w<+62;o=;* z_r38pDI8k5^K^)@$$W2UH@8K+U`dU(vn7de^@s-uB-AsX-?#bZWHGJ`3fM8|7KNSH zPt`ktF5?IAQwyvFw7~NfOAs616UPyUZmpa2R0XYyC0A4@Yw$Ic9Sg;@Ye%qyPz)S!GpKVxu7igxkdQL<5Ah!j0)cJsXsPRo>S#yGt z`i)b~#KUMy8As`jduV14mHQ1*#A(}2lkroGlme$A{_=x?l9fX44M2?O$Ia6wkWOA0 z&=U~avd_rJ^<*Ryz_aTp;XL8VndIH&n%-C&x4XEniR2Z0UPhP=v45DecA2D*D|mPx znN`Es7?la0+tt|e=ZjE(XDD|&f!##&Ml#=73Mg$HYr8*N(43!mjFp(=c1dE1IHva@ z;OrbDkO;@e4oxIW_w27P{OeR{s?LuonAvy)R%iR7NkAZCysRJMy#mTr_#z%B;fCSP ziA$-2Yi=r>wp+APQ2vE4ZA zr(K~iLr}83dH!rX?~g-&T$FtlkkxLsnf7ipzIuD|{P=k70Pw0%%GX=%8Np_aQPKq! z}aaDFkPrMu=E!H^8P&u7rnQ8nQa?fOF+qro<`@Tl;03QYy!;8&! z`nZq4z{#iA6DT@et+M4FDruX5X#c$22vtYb&7ChnYq*a~e z3s9eEcjH+p8WiQ_>ThPf-?Yh}5Y*TLwB5ux3m;5piif+hQQATLg$m7L+iccjSfaE^ zA#vRwBV!^b8-g*u6tGiAoA#rYenVfmu!~928M0E|90jD}<^*d=j zHQZ_zU^D6fl~U}8>@mq}*P}V8{kqi8#TN3+l^$n1iXA0H?2j<4VGpZw8^m zkNn&@u5|Raj_B_6=v?CCcaVr5a z_akAp{kkc@4G!QB3eLTSRkuw)Ofz$q4M?CCcO&mPhUUo*Va^!$d&#KZCNSTxJu=Vf zCPv%F5Q!UdwPP?E?{RIT_EjufJWUB(d0{{Ek2y9t@nqmNwjk!T1;<&gbMoOCfwZGp zD91Tm@ULjRL&z~IHn}hxx5rJnao2sGTN88Z*%HZ%ss-L`HCn9o$S%7hXHPYe_1N;4 zllZ*d1D7eGfH@CrrD6E9!V~QCM<$Zia}bUjdpkRKHjj6t%l1`HfskjpzedZSq4!yO z?O|@t0h2B~l-spvA31?=qiH|9KNZ_m-u?>X*-+hUBIe>8S~H_2RykqeTEyzam~fqh zbpUN-)7@X{#7vQmh<@+*Y{SpJ=x7YFp7~|%oG#Cg>Dyak4KpP1ypi#8#&g1Z! zA^OfY6L9xw%&yEoLts;B?`8Vv{`4AJK)c@$;=eY6b#kfs1QS}nwm9P2+maV||Rzeal;`jpj*h3t;*x z^R}&e-@W1HMh+DD@Q$2Q6><+UGz5`=TDac19#hrJFkZ)FXhhC$ z5pchGJ;Wd6_}p)lk!(~oSn7BEDVmp6`(cf&k~ddtM(o0R&215XJ5L*`dEst0Ehmhk ziRJvu`qR~DT4Cr=$w{T%>tu|t$xF_r$IFP|6x&PeZo`#UmSWwc_^>-sZ^oBEWfuxU zjO#)3dml1$vR9AjE+>L*UiGRqR3ONE(AgJzVzOQjfoTse)s@?52Y}-`#*gCJBxacP zwA@N02&P>SII-v)_Y9u1fIq9Bm?l~3oCHQfaAI!`I*HxyM)TMeHt-_UM(hZv|CPg# zCe|Kbn(l2U9QKab>$ODMA@fzY3CGK!zi@^d*q7^=&o}A!@(yNFW$@e_%~R3QdbsNi zgs&IReL#h?hz+2Jn^&k80@%=mc_~!{Q)EryFn948iZuF@P|{z`zk(u3w_Jvi;EMb= z;b8V`$c@OY%U*sKrXTCdF(AJwZejw+66VoMOZAV(_b{EC%$FyA+DX_>lcd5Dl*J|nv8d}h=VL68qa3ZKcgME^t#rB0N$#Md)n<_ru8Egx|=KOPOj)bw|y`4u7|ST zUuX{NTkT~$@z5tG)si--q}qP&^3j&YoMmO`ScBR}#=ZN{w8>-(EcR>bB9qKVdg1+h zx_oKMok}>!rvjUqz-4;ZH}1RX7uLG06le@!D`|F7bPVL*@VZLKJe4lPMoo?m@K9vE z$Ote#syR59{aQ;FH$;z*NBoCHWghde#qb_USCM@Adq#RGtdCQb9~-xi&24(6Z?8G! zV@)Ur9^69>BFJt@nE)Ei)ow8k7gGG+$!-JtUK&wDo> za57)S2W_)YAov!6Y#<}oq7}FY$>^dR61=>7|5DAjlNa%EMyurxr3I(WZXW5(V$qRx z-jPUFq6C00joK9oUWl8OuzO@m@f)fYGHTS#7t$vjt@W=?TN$uCs}sK|VEwTMi?|k) z#k6+5*%a}5%QG>$E{K}U+^{APp|F?vHjNH?=qB8@-n8xj)=yn8iUW^^xHpr@Y}F6( zTsjEONAN@yo^NwDW_$hO{v-aw%t&_7e?`JD6@9th8VBGgUpz)lT&Dh~gE^sD;l-c# z9rc@K8}T{)DVlVS<@)EZ@BhXPO@n=B@;~4HUi}xt{$>1sKL7u}EIFjJ|CdG@$-OxI z6d@6^B|6p^damN|_jf|?{`|jGOd-WRG!kQ}=kr}6W@w}tUigIab+JrU644Z+Bb;Ot z^%MuB%AGe%LJb2Z{&R^=PY<(x8a#iI1wDd!h!~_#H8tnYn(ScDg1`M50<;a#L?IsG z!H>*8Z|r|ug;Oi9{rV>n^Up&xyL==?a1c*KP)rvqDN>Tl|KvwZ&O$w_&c`U1e}M$w z3!(TZj)zHc^y!R#X+6Mpm25;p%<~U*nYg8cqfT%K$MmALxYUoDn8$$CoWD`he|T}N zlPW|0Atk&wrSE0oBDk1SU6(lS3tc;}p=jL$gO6|x=J(x6- zo%(~QnL=&T2CwzLj8G~HFpOyDKZj9I`kU&iH`7f7B7Pyk+BY`+1pG(0{&Vb%5Iy80 zZ(-Dw3CiX1<#0E(|M)Y@XhPAREpL5O%Hp_ZtjPFX4c6Ou8$kNx-W zXW&nLh9lfXLq5kDWZExCF+zNfJ!|wTUv>AEQl@a4>o-FKg2uY*LQQ8i=31 z3+unqwTq7QG3=>}_dv?`yO7fdRvB3)7!WbCZ+_e75ymQ|^@sO-xnMTNmt#S?kxw3t zPE5Hxu2bOk8~$%e64ri^9e1-2ekg6K0smuVrO+r942d?h^X`=nLZ;KW2ql^hD9;`x z{Hlst5Q45hOCDGqGx!Iu>T1^8(m3u4m#%1^rtdpIp0B|z0FEiq zy&Y+rw}4P<{DrvR94niipK&#Wmk*348&PJfA-Kc|{`Wj1WAz5&GGHTqiMYFP>P=`m zb?$Iymx=|+wj&frOB~Ep0Q#9nJGNqacg-3TgtdY*2E0dITUl2?|A)e$mgau{X2eR) z6rkDv9pV@ks@5bOADl~)*aJ|^lL(>cXr`D;n2z^6Y6Ctwgs|TO8U9Y(K=USL2BhEs z&cqt9i?fVo>|Se1ks%fwh1mH&N=Uo$DCom>+_WQ$-3VeF+FwqU2 zMIVAPb;CVw$)`%>Zn;Zk28?x;x&r>+%Mr$O&lW=P8ETp~pMP_gB5JKFC^p9~shPLt z(g|pRDF(>`zlkVkKy_Od39(+)HOelsb!D-yROak)0VpqZiUl47?5B(Zw(|sQ**XyB z^_lW)*NFXSaxt3(;U~Z%X=fVBg!;bGpdgp_I^(g`UCR#onk8+4Q}0;kSEAfMmV?*n zfme1ZaYsbkK}Qw5fJcFS3#NHR*ne$uHBpR&}{_cUNjG+I14!@5S&(2J*dH@kG*Vk?}-q9Xhfz8E>n_2*a4 z(-Es-OCkS8b>!5o!fYx@`hF^yHt?(oOZCQQfao?_vHc6%H=mn!*k zDKr*l;5hjQvv9(go}uViK;*~S)qI;G&}8Cw9L$4G(vj9HIF}%?iX5>dZN*6NrM1ED z3D(1VA4sB;S7^lzvdf4?zZ~kE+`A#HL%c`XvanZ)%PShi^U&u7pH=+uo@aPP;yjLl zNkhWGP4s;pbVF8nmvRg*o#zPZH;5E@17S=L@J}aov;ezC)Pwprj;Kx}GTnfqCX}TV z+||5w#ZsvYwU#Moc=R+XLgUv8&B%we*kXBAl}<{0Yh>=<6QolG(c&Q@TRY>M)Av`> znHxA|VwzC15DWxI?$QD7zt`QuEFlnftxj`6gPQ-kr&{R#?*wwWgG|*e1>eO_E^hPJ zXh$epQj|XSk)h99Wc3PpPDWhO%XLxljTKC{JhPyG*@s+DYPZcs+bAh~q)lAZj^ys|AZ*;@ zk*NibH+4_UL&f6)_i0~a?*%U|y+VO9QpGo7uL*##EjW|f+Ykji@n83=vy#hOs9nYd zFoTkFo6a}WAp`$FMBw~+r7x8!G4ejaU2da#jdH{|{~4D)#hUZ_5KgD z`?K%B|NpQ{ zYHq5{ub+(sQ}`i_a~7Wc?O7{)9h};5FQwFeANK22fPsOgL<|Pc{2JbEhztfx5Q~gv z7Zr)d0bM8-uGQGOnE^vpx>F1u{$d#fJLEG=&=;Cz*H!nqv)69rUDu%^ILaiIo&Ml} z2qlZlS3!g3O$86Wj%;j90S}1dV>6vyNOCQZpG2ZUP`y7p4t3oJe^7+qM>@KJ5C6Ir z7)iLi!-g+ht!aH7DFRQN`8Gk%Pv*cNuEF8Em;7hS#7QeXxHTMa5{-pXLDy=3mYl2L z(d%MHP4t2$kGhe47Dx24cZzloM(-umZzcn=a6bD$R4z-~hP~W*9`9;0#a92G5{zM@{G$vehopkc|{#uQms?gbU ztC?o1k(_L2Jf{Icff>Q|8lIPIUA8HE#9$Z~`R`=KJSW1hnF^S!*JBOP(c&S9<*)s^z|sIlc;tKXgF@^bNXrU4ElZ-+KS6 zY&y#Zv9-M22qSyq^gDbG1=OekSVBhx2IABU!0unIp_J`8O z?8#hJOz@?#%K5kV)C(X_tR{;UpIbTtK0}hN3%U}uAO_Hi_Y|j488n0Spnf;&6hOmWt1`jRN#Y+A49poD<7@-eg0L{{rs*dPfuALwYcY?S-iVxk z3qk{7g9!>7ykO`fN*TuJjy4Y)+G9WZq>NhU-=2Mf=LtGEdAQ0o_9{2u*0Ej(@H9jR zdlJD9e=D6d!vA7-k{`cySYUmi#bRppMQ5s;?~uwln*W>ao|`@U0uGcnve)4kq`BK@ zbezvsw#@Mleu1X!ZitNJ9`K*s)1^rR&P}~V;<3$U<|gh{3p(Hw*J-<3fgcxhj?$mxB@2@n69I_I+1z;l&jO}xiMdh9mEy$V z(y2!7RFhD|y<$`;MYluXF#aHvAFwZyYE%*7B_xdt-!bZ`zV`>u!!HQT7Y|U^j_I-c}elN;>u8N;k@A=P_QN?hbp6J1R$+(CxnEClY?e@p)c&Ge?GRqx$NcZZUxw3|REYLz_Bf6FlgSPG1 zO?SGzG4%wAa{_?d;KN&s{aw8*bKBU?SQXh*$N57!H>~(2d(>Irc|GiqI0^kY5QK1Z z#U*a6TjydD-x*-+P^_L%kwt+SHz(M$nYw&)ms+6OT1)dSJkzl;-C}cxxq=la;7!)l0jP5M?RCSjlAj5~(!dgvCboPi z=U1hxvNJ|qD1*1=$JZkHQ$xyBm}5{|8!y-~o9_XZc=Yi5h^Nn_mWaxn5g1Df^~5+X z*uqDZ<6nPPyP*zl1;(VnohOhpM=&@=O_3=?3dBI7*210s4k^+@ufZUvWS0;GdT9)~ z5bMN>*e9ZTYutA|c~NQTk?vz3dg#9)sX25g^1PArmuY3QkaG`s38Xw(9}>N~X?}cEv}BdVo_|bGh6MWr+rPhUh(B(*hjj

R*dRCocpPC2jK;z=`U! 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 diff --git a/ep2016/static/media/sponsors/originals/microsoft.png b/ep2016/static/media/sponsors/originals/microsoft.png deleted file mode 100644 index 1f3d0778526bd4dbc8c16c0c0bd6ac99868008b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16234 zcmeIZ`8$+v_&+?x7RFADC0nJ)GR97nEh=P}y+(xW`%a6k$zGxvS_avv6xpW45RDpS zvWv(*vhU9|-k;C+`3Ig~p5yr5$5F}LbKlo>Ugve5uk-afujFecmsptvm?01dtC69e zIRrwd3x1wG#sL2A$=(hJ|Ih{M7+D?zSJW}rB=CPGKf~*R5C|KF`iF)w+hPR#5+0;) z8)V_@78H6T;1(n_G*s5Z$14zZ!|#@?Z-D!=B~1YcL=63KtJPb83U~ZH04an87}&hC2^vn z7f&%|2AX8%v=q8y|(cwANh4e)XS7$jq0~)6aVsVzROJc&m+XeWv0+0C$?aeqPsV2pigA@ zt2qDPXWU1IC{$}uJV?j+J1_jNTVx#fYj0*#h4Nl}^M6K$yGSIT#oNT~msE))b;ln) zTxJ68$P`9jEmW;a5%m-C18+_}9mvhenW2fPc?Kn9G}9W29lcAj1KyxjEkZf&vaYr_ zT#JX}Gqe)Qm5ut)Bcf z1K(^ci4adcRS|WYw0+^{%_QVTOPpMve4jX;iAa{);%~NV4Flgdk3();usr60`Pi3| z1anhyU+62!;twH`D?FMxGO@@F$lTfc-SSLZDM)L2H84A|ar8dK!waoQeP70>t76{Q z(?9Lm_cBdQqetks+=?bz=F#3=KM`Q6xvcIB);Oy+5|nC2*ix&pqn%{9pAzMzTT`kFV_V_Rx8Nb}$~@U#v(HPnZTW4!j4 zj_zt4gKHGdo=o^|A8+-{MEvalP1o_1+B{^)l;DpPFhUmhg}eC8XGC4M!kbA+hUbf* z4NBNA90J?zCAhn$MjAY+RGUu@F^1jhHR>p*hMbbLC)yie!4#@dz2Q8Rl+P<`53cCx z;pj0nS@EVSSVqbjO6d6M@!W(!k4K%xlA_`YI?BQAm6NEgE4|6EWRDAcCfa9f_1zM3 zc#od`_Jc~kQQ1KS|Y?}4WW5{Qd=D*nb9m=4r>%5A0zYHR`}&l2DDewEzn^W zP<7{Rgs6dVPKmYJSn@|mKQ=S^8Sz!R{w2+PV1sU)lzLR9O9!9frOlX61i$$(?J3k# zwqdLDvNSO?QKRq%8cP10S);spTP$NWvg87-ALny0{f_jl=g5t>S_#E@Cb&PNH09re zxE>5^|6Tzh*VVd;_NNrje29y?Nb8?{wsBM)v<|BJ9p1o1adGVYmWm9~a`7UCehy8y zF5x*cX44Z<8Kph{-sE=r(41Dn>Rpti9V_fE*shnNT1W8>STJD8uR7bsq8+U6St@z80pmyR|5SPq5>FS_fBgOGm z`kRfAs23N6sJrCtqv-<)+Fj3h{=g}8bOmz51~SLX^;9nPbg_RvW zF+1WSt=qU)^8xB40%fL~8hKrpes*adEJwoz+)@#oz9*x{u%saI{cGT}lLa2elHX4g z$-#yqd5-IxqBbJAS7>rP?oeMV>b~ImZ<9q$e02*;U2j7z-;nm^H?t@0a9L$KZWM&3 zp}NUZeqLfTC;10~683EpY!SodpOE7nLX#@Fgk?Ia)BVe(TNn!B@*YQHp;6Vdnt9Wx zEk+8%_`kdaO-6E~H+D*2Pfz{MdiUg5Y0rKHbyH^!jP?g~Rt^b21;Nhy8n2!*?Ezod z`<@&5kY>6&GpN^*g~?!L)_hmGC!I6H_lV#5f;cl8pGXQLLT>gZD=xgEP73%X%_RCf z&sHpcH(pi$i|PIAhX5DD(f{*=Aq|wx24eVUkT~mX z&}3gSun!By<~(%)!v4r6Xkx%Xul0afv^V|Y)gw!6%|qH{FLidRf9M?V)I5*?7K2eO z_LWS454CL$v(vDsVDE#88j58pq#fR#UeS2<(79V*FRxmmI-2Sw5>)2_K~N{(S3TbB zXd-I8c_zJGGsLN0eCRui8|L7`@bgBCB`UZFWEScq1%4-X>YuQ=Lrh~%l@}+oGw4+5ONfL z5NmC%7I;b?AVW^LFu8b`uP!piB}T(~1&zz^mBv17Gdw)OLSvflw41igpYNgY!E6eR zWw&Lv4{gW17w^!A`3J8GsI0rg=rf(x$p&EdeZG zDyKWAF})&0xwalwx3eB0(n@Rm=a-!OLRnm`p?+#jTA|y{*cJKt%kwkX8g}SrR*J-C z&)P0yTv>dV73P_$`@(Phe4MdS)&41?*uyK3hgr;GZ=)AAPz7R5OTH3KOI1}dP4Qw) z27#}&2m=gG-?j$!(1*S?zcdd$NbBcEgJVVflG7#7^$C%S08pvzCsPCMdx@xSoC@nu0dB2-W~ zlws03n2_A^vseRl2*c>_>}mo--pN0=JBfDWBBK?5jN&5BDdE#spLyl$*JQGB0+iO(J81qwJS%S#&uhzX`u}5NS}h>g~mM#Ze-zi6<80Srrl_`isG}1RvUwp>B*V@#;l%Ho$xI?*o-EU0}Z)7T|DdB~C?4Y@Yai%+xMq85IVso8@BL}r?JP7QlC2B}$VB|{zLq9m z@h2zuo0=QG&RRQ3ea3>}6~|))td#i15`(bi=JIPP_{cIwJU5a2FupggU?yTjWn; z_dT54%-i8wZ?Xd3r+;$WbJu}_z&HnDYCA%s*Sg^iynY;%qP)bVP2vF_Q*$L_M_|z; zFbl61u2vnoj)zC`mc;f0+)K#2dJe!uH#{NE(Ws0iPx-++sHfmKhx-CO-XFixT9*Rm z#W1_P>4;nO_Etz{vB4~{qSrJ)v!xX;`k!Q3mOB0cv@ zP-lkeF2w^ygXjD@ga0fxPhNUtaS4MAp(T07Z+`E_ZaaNrY2*$oMs6^RLbTTrnj?4Y z)~N|s2*xjP&Y`ap-f&{JXO+gBGs3o52Z1GX0lMHPliZtjgyFiv8z0Lf)*F9kQP^9 z>=%CSd<#|skWDXo(tQSvEtoTL`$k+x?456|Bgq4#OC%tztzC6aQtI@Gt5TJwY&run?ZXh(OVsbV(XDBzu z)8K?2Z=31SGu0xV81$$9T%PFC33!RQ6HN$up*Drdyaq@1OI~cbXBj z?;3xn05;tc@sw~&PFEzh#sZmIFw}C3e>LV`Wk<$cfbi8(u?(26w|R98?jl1>$88fD zIew!ZhvAWDC^iOF911@_;})L{sG>sesOKhwAj<9lixTG5@dTT#5V^sJPxSJmM_%jb_r1=F1FwcUxbVp+TqQXwM)|rEflARQ=h$$<> znG(q!xC-XhI;&ZIB3UNB%#f9T##a?@-l+e**I9r z>{265-52<7MiF<$M3J|GxHxy9B4uo9K0upw%c-a)@aww%)NXG3V;vCpvMOhV^N9Lx zJ@5urieo}pnQ86f?<@FtSolSE$Z_&#c!Ry*?m0D-wyqtkxKcp7?8Tk(1#?c<@&|Ft zpkjnwT}8mwOFT)i3XrCA<4Obf6-6W_2rgNZ9sVYaMWpFQwBV+6>3N)%kMI0~|Q+j(=l3L#iru#)}vc zu$SMQp-8(gEE!8eLAl3HO1WH;f!v4&VgKJNs8??&4>d7%+{>S!C*uI!`u)D1_ zPB7jy_iK-#SAE?nWMI}G`A0ISSk6T52@SDgR7CHz9yJ?}PB{p_Ia6)lzT#!!Jsa+w z@FETV{*^eWu~^cr1r|WHsNmk;(jRX;^8+MPBK|u5H<-=M)%1w7Lf`fL+!reGGtZLF zf5p@|(?g|{dpd98bFD-G#4`uk1E-=54KVqcc&qGcs+HLD_7ZAAuIk57?bTb~asR4> zu&G*5sZIyeU)!I_J8rWwNGpq;LmBv6;Fx1{2hP3Wu;d4ZLv263)HywloHSw_6~>{e zg-SBU*37#J#kvs5Z5@F;lm}V~EpGfa3MJNX4D?Pv7<4F+Ob;h9Jw|S<;}&TgeX|E2 z8sW{X-hMN0W@;>VY0Q{GkBDqpf>-3~$6J&c{1Bf!8gZzjFK*|e%LHt))PIhmc2{ia z{Ev$wH;(Pzp@Iy|)%;DY*$0T<&EzcQ(h8>Csnp(6{hqIVm9T_#J0{gOc$wR%f-H4E zMNFaUAX``3IU+4X{f49n$8#^m6}VH!nA$!3YF5(~gb@~+0x$J6CpAl3CC1Czz zk{$02^4atTo%=!~J_1(}?OPt>?S-6ZjmuHNe&HX;s64D0*dM{`;>{a_zV*}{IMX-2 z%(&{ltU)BNM#DChu}SY9Qc-j?s3sQB`|#?}A`W|1)BpwHkmIqJ4{XjbioNmoN)*fn zc#h{Z+L3PSREd3TZ$7Oo)P&w-9kJFJT#+Z_4ZB0zn5(EZx8C#fN%9h=d^iZ&RJwCt zaYXutIz`gFB{OR`ya0qD_Jv~$ba$@24c(EXxuk&_09n*};5kS>hE=b)Dxn90s-FlH z9XT*jP4>O|2q6ZrV)WIgN}j$Imbv}izT)QX2$tWy_VwAd2w z7JBj=YZQB!%{?_k7HaKGYH97XfyMV3u8$#8$I6`J290Poc)qdB=_v{ z=XWX|+*bpHjmgW`LnvJI2q}O_UZ?4GVUC4rEuvJlZ6G48y&yDL-V+5Twiy6^39n~0KQDWD}DVn`1##z0J{Di*Nypu+CsIjNR~_e zn?9GY_nF|QU-`)jBouh}1U^*ZQIq1V$=4o*M`I5cJ9>qdB~g;rBoiydLWAPl`+KLy zFO0hfk8~=8^?C`$Ct*G6<+rRPTc9?UGot7(LsDZ z-i#h~`61O&6`rEvb>q(Fwig&^q=>1d_R=ev2p``yi@AOnM7qB?e%j{JHvb9wW>60@ zZ%NJ8%6}bl&xf#45U_XA-w1x}6f5_IPxuYo<69ag<0XeCzbt%DFotX(Fc$KsDZek{ zd_mwiU14ZfooKq`7o5r_%CoD?XRtZ(-do6_b>mz)K zR>JQgnbOTfb`4a|$>_Aa7MCqK4OFaMMPFvB;2-ut&Wwf9WRfWW4Mld9V^2Lr)=l6E z&BFx0>k0ma21N2L!>;Ws5e!>#X%k)EXGl-X^_)nn60Xsn7@Lpb>hm3X0a6IT#V8c+v65dV>vY&^B{-*>pd;S6kRKbW4>C@TYz9spX^n?W>cfUt*@N8@&eMVInYlr1juf^_8MYZAR;L z=0Scx++*oizx~E1tt@_>Yge=s>WR;um+%vrtqhYkdGil3ynr5os&d%Nc^1*;uBSYx$6v z%o`3RX2ID@&GfpX3=7|T5cQ|5s@ilhH7zHVV8S6S3|c>@gu~nyUg9h?FV}I01+v=f zdHzAw4N;4&6V*=f>8n{g6H(D|h=Aj|`7bt~#ZsXMoHD30AqyRyMup+7H8QOr9R8w5 z^4`gm>b1_*Vr!o5^2?s#xMFv8$Q4k&{$cGk&IbA3Qrs&c|AY!7FliGtu*u6!8z+Se z>^^(r1qYpu!Mg~4uhJ&gidOl*>*JSX$SIVIU(1=pX~KMmn8lD={3oCrqP)<{TZX~e z{w-iAJ{|t0rYzAfuVHqL_WkXwj^)0vD_k$RD;9`Jm()GtM{z0QY z==4jv59my2A;zD)UWkH?6+5sbZUP1A49^w2%hb>+0EQ+Rtk?6Wf=JGB7m7U&3hww1 zZu~o?b7UQl4ivCK6l}$=8N^Xj@p@;ymD>r@=u)PZ zPCn|OPc>MTtmALOz$U|U#VG&~jC(~{uNNH85Mw}<&fF$o*q`Gj_w`QBuhIfZEBmql z-%tnX)h%P`mHGq7A8RMpayv2GxmEXh9e-TmkzfD_80PUzwAe<4K%N`5j@0DNj?E0E zf7AzL1oc}>Pe-5&v#6&|qE8y9&W`sQOVY?Gd&ES>U(>$5b8N)PYCo{qMzk-lpL1}( zqiOM`>q9ZX@5Wm(-`~Nd-FR&x38<>1#<60zzhxX}Ug=Wp81VL61ziKj$ z!1CqCTsj+-*ufb98^@y*639Q`4N>hY{_T}U`Erc0Ub|=6pa4}HhRz4>8pQJ}lyTer zRC%R`a3$~ZJnm>2+uY+S&WZvl-zi?T&9aQsDMzh)70<3f=qU2M8tV{$O)4Si>CtL; zZMOw0Y(Hb2w&PV;;LfZJW0_U&nq?UO(v5K4h#?0-kyJUaQ7Z81Zk+S2)Qq8(DQ!p8 zh*lc>TayAEY4-<^(~McZNZr!-r+7wW-cqC$n~R#VzNs|(lm4dR6>5GlM~bxe;~&6v z7iQ4k{+;>?Z{VQ3faz-MkMbhT3%KlE*@S-=4z(^Ee=Z~00cm`H0sSf(cFM%Hvz!j-rdSGKo5A*}arbr|Qb zbtT63QX?))af{aqz;cNN8j%yeS%*sx`4V2$t<(JRz@wLCY?v`i&1z*T3P8)?B(hv5v|=f zWKX>44?R`6Utxy8WxX>t&^vk0^UdZfv{*<<}?h{Qj|pavr0dr{%GLNk{!bFhr! zBz%0XDC_A9y9e*grsZ>L@0_|iRyxWadW-FCL_yDdu#%DE23=)vd;VXv%yl%pFAx7Y z7qxeGb?cO)ov1;}Kr>8@x*z^^);ou4xm4v5`bs&jmt8=Q@g|AA-SO&*aBmc_RSZO5 zQAl&PTQZt>NhELYhK+XCx-0mvrkkAH0ir9H`@$}!re5#@yHqGAhr#?{3r*O`K=dhO znw-p$mDe~-L+(KU%Mna@eBt%Vp?eHtXFE+vdRN8PGhj)gD$xw>e72c#5Hw~9}_CvP~Dz3w( z|KMNXy@_OBb(HgHkPh;?`s$WSs!Qv?;enXsO$iUNBh#qUgo#dW^?C|ivUgP{!W-nP zFHg%$B`D7H0D(AbI4i9o8ur0G)ok!F{mr%A<$#lm_K)Oww|G1XJ4`V(f-2Z+r$P~~ zeJOG2hl2&`bVFq)X{pau_=nJB6~ZFEG+=9JWtM~5eb~zFEwoT0$1qtp96BeJ@VIV- zY`11Jy2|@O{BT>k@|~gA_QcOSu;~2;OMCbR;~=@3+ECzEg51z_Uof$v9V?n@-bkDa z!ZJzKd{!KojV0Zr@~%^xv2cPD$JTfp%GI7%K}u3BNH2N1B=k5~;+zJW8&v_O$3%#l zG5-B$Z`D5=-`HRNjoOk3H#IA3wZ`@ORsuzT7VUjgHaqf`;gHjO@R^l}pVql-M^*>H zVjW)(*IjF}0`ZH7k}nXLJ8}JAWm3k@AD`RXVO=K3*-XATLY~RZ(^3g*Ge5c~+11Ss zg|-9BTLo}Eue&fcLp-S!U{NkN=J)H>-a8V4B-|zX0eJBJyILPf%hH#7_0LJHfI?7! zNTA)#d zV!}A8s0MF=E`3vt=_%7KJ>M%rOlNuRKPUgy5eBdAWlb;=l)MCnSKQym0jeEeBl?UR zc1-Uj{A!UKLqxKE0DVbbkn9t$y~~2m%lAmi@c)V_Xz3!&CBU*iLxy;!^@JmHlxE2jz{i@hp)lqJEdyVJXK^BBOjisMcAz+kjZMY}W;v^>_uw<0F(S&Ovc2Te7Qa)6;`^yrH#`3Bxc4%319f@7^ZXCT z*Ol>6uoi|oq-6^q9v|09Ua763~?GC@mDdCamt0O4BYVMLxo{sis-mFW&QI=Kv!%fzn zEgOaVM_w>LFx8~1Jdp4j^jpBkRY&WuP4-PZj?66FCqscjnMf-`YBKrZdqq=DpB~@R z0laDlfg)z^e}l|CEeLI?C=oTkxof@j@}j@h{&v#-JFZTt})nYF0r3`zxPOf&Ab;5sI<^wZw|}I z0~i^%i2M>ovvm;^OBfK%DqtBk0jA8CYPXbw&g-^MqEveb)k@W;!nL{Q*9^wr(rO;w z_*YPgOleE!lGe3^{iko{tu&!gEuev7RP}JNbt-&WdxYR;4;~5HF>og@OEtwH~scVF4UI``cph6$9QX?~Ipb@qyrJmab8 z$(}drU*H-d)uu&ZfU(^R;L|-G(k`2>mH=bt)s6UYM*eIdx_#&L7QgHYVnJ^(H2}Ju z#G))9%_2)l3(*ojFhZ)NU#l65DHy& zC4y%|exBpdP0(HHB+TU!d_Q|Jf4LoH{ufpEnNTfV%{Hq#IwN4>5%Lqdv9MZSf0%01 zr5VHhvqQ7_eaC-~|E6{~Dl(CeF$6n%xO=23n$!<_1<4Gm4$%ZY3^x3Y>WO(24VM^CRjtB#po5tM^oMp9kZ z!>}JEF=O^l&gU`U!x_lxx@bN_ePMV^tQ-gGAr#@Nn*B5iJ&3EW(&9aT#(%-9Ckh6N zJuRk2A=RXfs}2LuQ4(P_VCL|$`vNH!mHniFgZ#wnGV>A2yq@ST6#2097?hH66+tXD zA!JO1TE+8AC3L_}Jt=IdynxOG29gC`78d|xwZq>GYlMgs=?AzQ8@J!cUsCvv^U z;0>bNA37cK!lV8}#CgF2>8m_XJgk<}V>Xq09tjkurap@&C=hIkaE+8EAzWxEUlKw= z8q|xc&`B(pbxt5M&6!1{HA^d@)vyVn1#$T0qVDV8z7c_5b-b>yZ6gu5Nb5zLg(Rp- zu5OXck6fjLkRJK0Gck@G+7xsBS<;c>Db4yiHLCIBg){4{oQB-w;q#)(l_|$wxv;uS z7mB7aO7W^3`0rzkF|dhO(QgH8&}0em6E3LgeT#v_hU9^hqsCtUYj=8f*z+Yh_X zNSVQY{em}m#;cNI+<|?(m$VglMhn9CUXaC+Dq0Bz8L3m>wsY0r=BJ4Dr+god9eYT# z+$kiX;l8kkZ$Ku(OL@)A<*0CAPz>ZeAtK0SGzMPx_f^Qqk zmrjsjxhO^5Hw<3#LqQMI5P`xrF8x5q$I^H(((L!(;Rh%pAX1~+bs9LsJ9}+{jpv-{C5z3MkA<6poe8(X++BJn*UpGUxpf66- zcCBq;xVS0bz`f6wrl0KAMiS(G+2@nW33^lolmzX6^XtZ0`C<0G(%F-^nEvKjE@OW_ z1}$sR)OWV)&7n^5*IHu|H8<~5jsr?97o`XYIf$P@{I&DOWS|v6L*2gKDu2%FAs}3_re>j;#F${ z+kK$rxoX|7O^>xWi5h5!R$Xz}1>quajaB+as7rG<;+=lcQ6`y%inNZv2xhgdZ|>^v z1jEBUDomyhsmSr&}(mYE*E#Ewza!SV1oA1nzVmFI% z3;N%EV9g}9O-W(Qs!D-qMhVc;v+CzY=SY^iDx zdh+7Gc+4?s@weXKf_Rb@s$bgF$7oK^kNT;-nJja4FKvQi@!2%jP29Hcf zh6G@ZSW7f^qDC|DS;40j7z_N`eg3$(I;FyB+k$r&~Cj&hCKY#+v(YcMrmJB4`_A=O>}Vueb0z>r)ebBQ6J=Zsw9bI zY}_)>v2`eA1nU1$96)_7mmG(qE&-BB;gd(Eee^&{Q^MZQ1{T5mi!2SLI{+O{C4R$9 zfk2Mf%eNGAcsUVd(Ag6g$TsUXKvwa2>^Zj7p+-6O(xb=?=< zC_TFVVZc>rx6<>WSIgz*9$DDlAbdCfE@B3h>e3#9OHlgH`yGVu)1!AHK~B)1p3yvQjw(t;Rwy(T2xp)-mthai|2_+D*F&HvQoen@ zp}mOSj}d(Du7(?7`Va=uN{~Ji zdY2CuBScU`ZOQ=Zl1OGx-wExu5goR`^RaxH&E#rJUkp&P^Zh3H7&Ldilo>KVQPixF zq@WiC+k{?HGr2(udU!@CP@9DP_n3tc4K&_G zAnhnT(8*s$sh;X3Kg_aLcL40Ff(6=X(O}fdA$YA}J9NBWpgs3>xS?ctw2ZrUf|`Fj zaR$8)qewirw3q}@wCP&83BVec4y>ZHj0Wa$9~qCV)s)JR@1xE%ZmT3P|4!})p(aDg zmS2@;s{y&uTKG&+9c2^LexNdIiG3Akb)|jzrDt%5yWp|?5K>CQp_CdTsJ(I)z0c~W zQ0@Anx;NgGFKN|oJj#9HasT{>5~j_67dnL8#-9Pt@VY(C&@mGSNRr4Lhi?|^GWE<` z>VKwRu|u4tdCI(G&vKwxJhcKqk}0PK1sMP#AzPsR`g=aF6e+IsQ-O#4174%^L7>K8 z%GhNAeRW9p1%LcEe0+9;y&QnaVdHlhbmZuwXzIi^zkrt4`$*-?)AxM8@wy8Eq2Rz$ zel!9%uq+I!U@O*}4_{mFVhl!gdWHK!n@-San)li^*~SNzek&xBRsO)H(2n2WkqUn5 z;k$L+MBod?d;1}u+8+ECau~t!Cm}=p-4|MDV}F?0g76ih3KzU&jBf+Y=K^RsnQ_!s zJ#yn7PUEj}IIka!670T^3wqOiqhZn5-}3j6A!aUuE|H`!meLpUK4{N&1#{bHK9Mwr zu?Mv0Lov)4jlVU&sY1a3ITb$?S90(4U}7w!;Et#){$?CK8o6|@lwvd zD^UCuCPMq3Ax~>3gr3Bg+Z4x#smaM=mdJr_TBYsAC$^iImul>HS@t;R_q|@Pz`MO> zH!R!YKUhGYKepw0&!Z8#6}BEmf=9B=`fQ9D?M^P!FM)`zv0+3cKZw6Y&{RHY3{`pY zYjIW%A_8icpDt|asi7n9BS5!y!Ekp}JyUh&cKBS1&unp-Mf_cs4gzn1c% zM)~y#M(C!EeLYd!8; zjLI5=2-H=)SktJ!jO*fDjkX-GiX80{-4er6>4{L> z1a-zW#MLSRWoOoNjx*$FI|1^m2=qEQz7byBNank-I8uEU7?~ zWyD?hC(lGLVg?oV3BD^fe);RjpJf8q)cFz|8(*e?*oP5J$}{gELq~hpcA)MoqDR|6I^sP9pLr8ce2zt~s z?W!u|q&j*_i@`YT7HBJ%jK{_eJtOKH6r@e)nYU`pj?m)S?kU5cT-Rh-P`Qoz!L$|n z&Z^d#k2aELOC>WUZ6b=qbX}KvN(mg6K-HzcORVEjGI{I|_RL9My?2i;zga~HF+_px ziiGZ79Iu#)BDUk$PD0v*T>U*ud%um7N;!{{8<@fp(rTBehqrR7aoK z)M|HEHo7GB;t1?^&}Y#R5KCpN&)a3t%^G$YzdJAbkPx>R4QugL=M3`??o)J$HP0HB zjeHXHo2U^5OH;w38@~|zm^q#iQQ}AQ)~dHo+{^0A(Zk7s%>j7yo>y{nnYn2b=Uk$n zm+d3+AscIm1xMj+pdo{Cq z?H1n25i%ooKh%V`#HwGsUwd!ge>*JndH+z((Kr?QjpWo)o2@1-OCF_7sJpO`0+!62 zKJQ)aWeUQk-T0XHiPnooQW0zF77B^n;#b~81O;1NFiE2kVSEpoQig&Q0s-iH<0;ih z@8{9G?Ha;FVGwC`>X*{k|hhhMfl{OW9-XJ!O{HJgWi zZy;;2WpSBdXj5~4ka#BOxBZ7$V7|lT@H0qDDUx}Mxf*N)a#0rCtQg|8&EJf?V=o61 zhN$mm!wkWS2(NjI=7xjFg>oEX-i$@zSING^MQ~4f1 zi_nxa2pPkYa#=oxR)`r>3GMg`Fc>4~3W;R!)}j)grIk`!wj2&8Xbv1`F$}D$)sBc@+HK zAVV0(ui)ne4JYZxRq!_exzQoNL%Y2c@a}-Wnz|;S3*VKZF<;?*M@cXzeUr_GSac^b zqxtEye0Gy+sm4=n`j|POrmp!mu*~{QGqd7?wEYCYsSbn3&Swkgj`t{Tyvl7CmIB>F z@gfjyzjhOGY}h+tkGpmB)z>Dn511TGq&{NDQT%y51!^mZJ^C#c$}Q@7Fu}MAqpIZr z+Eu=*Giu{ijf%gtUOluQDm8dA06ny58fcEssoWoct{yj;r6J91`^Gr~*OL~~{%}Z> z+NF9hrjY7*pGsCMQrjf@uh`Q*bcJp6cs!f`g$K#;5c2d36FaMM|Mi2mDym-RczUO` z2irv9#j!`jWj|bvSj z{((Dk*IFQZ_be4Z-nH~=emxhs2Esqw38<>~sF)hG+E|i073FA;Kbu9=?yO%YT~1m# zaR@p1(bmvP0#pqTDI~AZeRZCM>(@-9nAe~dCY{C)enr#d#9CE|UZ)MC_o$ux-H&Qt zE>2Im3}6iz6^mWj9V&e_Q^;VI;c7B)@EON@;%&pmvV`LWGgn(pf5{c61pQ uQ#)J#yRa|+=WF0x%>TXl|3B8)i`5S5XsQ;f@BruHAx8QpdX+jZcmE%qUTUQP diff --git a/ep2016/static/media/sponsors/originals/winton.png b/ep2016/static/media/sponsors/originals/winton.png deleted file mode 100644 index f52156f0bc47e6469886021ac5dbc1d0b37bb566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25291 zcmXt=1zc3m_xE=JK^h5Z0qF+m?v!rnkj|w$1VI|5Te`cuK|nx2q&t@Gu6-`w|MT

BoXZAP_l7PEt(6GvjdCBST$tMdWm%MXu1pn8;wSBRm2fHKNkMdsgPtS2-H^ zec_4Y){EcAtrN=HsZ<_xn-NWn-p=`cK?cJI2dEu&^abp-R$CB1I+GjF#&gMl5)5ueGTODDuaK?=Q$c zsmBIkiNi@*?StbQi=Kj;O0dK9Y>k;)O68fvUsHs{{R^eJrz++j&x|Uj2-Xa52xu2e z-QQH6h<&t%@Rj%?Enp|aV$;;yc`SLu%s$%T0 zmwWOXa>Ip@)3SC%%CL(Lq40FeekzGN|JNMeOLLMKyI+dMo;1Q6V90I^*Dv>k)LU>) z(uz$w-W`fcFoUeKt{qI4fz=K4kFpq-sq+*_kCQwMQQ!XSyZuj~?N+&iXHjiO%*RUy*3cXVNvoBt-l0GNoOE!&DE0H%@WU2grql^K% zRg+JDLwO(iCSp_Huao#K6$?!ig%HJw^6UW< zPGVkPNsn_{C5_m0vPEYJki_v5e_c}NwBGC9XtNj`b@tHxNt?|TE)L;mAh?LvDGk1j zO13OodJ|$~%Iak=XWCHM>hFTLc^K!P<=>=hhL8U(IHyNKe}e}FEtB`p8??!|ILuHE zG~V$Z;f9{ZVJptJchg}5rY(5fuBARquiG;q{^1aRIXzM@>uWL#{IaVPi23A~SDDn& z?q&`S$5(Zh6D&78Oxm7b?GUko`e ziDf9kB@%%?9_+!6h~5pd@Q_16QUfjh3WN~7hG8itW%E{-S2v$V|NgB|RwP`$FyfCU z{zPUt-b@&n8}6^Ar6t>z(%h24PKn?OMk0Xs^rHn4w8HO>2Q7kx)!};>(wNgzsoE2g zzBl$IKc|F1droEjJjc6jyR;hr$bX~xC>*E>myhQXJ!l~RY+pHtQ1OOjIB`1>_Db}U zCq}F6s5>x}M+}(^1X#K1tAb-JDSknI=|tWlBfZL(8MQ8XYi@Z1^z()<-;t0FF>o*} zd9^z*BV;Z_$fEAP3NvGEU7bKFZ#gdL zg6g%vfZZtT+sJLL2Do&ELSE1W2n4^gy}f;R-tnHw3Rp3ZZv$?etTu6Qhg#bGDa!}& z{#&-XG?P>-W@c&GfuVRdsm@MzCfy$byWou3yLrI8JHGTMtWMX7Rv%cA2e&wQc(iHL zm?8=KY(UEyEXKUCwq?_{;7;7Nbb@Lm(df;@D6@zpYj<6yB-K*PgdDQ?(*o+n4|35? zx-5dIDH}=~HRfEOdL@x>USOs}J%6^ROObt&=u+Dgz7whlS=2 z^mF#$*LtK_MjBGSK>yIt%A=mB!a zDN9JkC!;KpUlhH2lAB{vs1)I4YW*0=ENXO)wXl=pL;-6&8@+<@7$x!!J%?#sAXC`K z4}acA9n|iA?(ig|;+`_*e9UHLJd@5l^Gus$O9KadZ*p0)val%3|Ce&Gl|2?fx^^Dk zjGh4#;(UK-kvDl;)&%*$!9ndOeSe_e{Tg&`Hp!JyH^Wy2y;S`$ezrNZm>Zc#8@z5T z!I++qn25JwDLdGc<#87hg8vjHC)=&EuY|=O9XL*?T>AFpudQS0+fjV+Z;0$X=-MPj z{4kOc%q$HPNx(`r*wAsb0%xIK@ZG{zbLifAE31ncf@4;t~SSHx<_eh2& zeHxPyT=BynEMj8fMdUzbYB_NC4|}f^c23`0<6;CEoufRTfma*GPl8W|vsE-yw^q4i zlFQFGg!#fk5)Gbrjuq01VyQM~?TPmfLmJ^O*2@-}8^HeeF+Sct6)iNUmWC1kG+*rG zhN{aDm}ASj`NvP*tv&3CGBxGpOcWH{&s>!bqK^H5ONBG-p&8+)ZThNNo=go1L-$t@-OCclErR^dO2j2WH9a6~1A0KID-8d#Fm(OtdxFWVaJo+Mp;*#qS3GwJ`n$y5gYwXD7e_OT07 z^;&kWqo!Un@YJ_oU9RJn%|h)uQ0N7M8n+s#!$EB=IbSomKNBRCEGr+;Y$b2obB7C+ zQqjamr@Q!~les*PS-3a`j*jyhuND;*!9XDGh=>*VIqP{BWmdy>Uc+HeWK~qf%V2V^ zgU7_ZLK?wj4y{u8*jBF-uv6Zj?hPklFHIHY-iJWCcSW+MVN882X?=sTKn58VGU z^~EU7PPEf_*Aj-+20xQHY4wOM`n|lVf7U3Vqob(`SRUB@c4ruqpYQN_VS0TWzKIll zYtubik8Xosm&j6Y1WLfDqN{EkrfAW!+I-KT%@dcE`tWhVwb)_S&jAY zAI3fy4fMijDcOmMS0|z*I?~^otfWK&H%{8=>7GK|(H^t1PmePNjkdlN9)L?qcL+g{+QI_qyqaG#4KC0zA+$BKPwG{-DYr8E1|Mas|4536Zk)V}>6eR$ zK=5RSOqu-|4E5>!qf9{$k@fPf-QZP|;!FHX6;f}lrE_tlmvWvV%gQ!5nmD+&X1N_p zEhn!^RHypmi4=jjF4N6}9u#<%iZ+#r*1HTM#;oQ;!vgcZ>sb-|QqA?E%gWf?YHMrj zGmy{KQZrDk>b1D>-ot;)G8OXim+CFcy2YGAMmotE)Ce?;MJJbcbO0Q>t@pKWQ(ceN=o-38rURr)Rg$>rM?>kP=4}%t%a3eEV&zP*=C`O;r?m!wI>%=?mcBMvX}<|pP3ZzyWVcp$&yOjYm$f`KZ3v~(;fz>-0& zuq#Zl6OQ(wt1Q-YiKgVN3*YbfF~5DJ{!?^Qa#4$#)N9?os<<;Ho*;5sT3Woo$2r&G zk%}0`N8yjk%3Yv4D#Bd?GGa#!qS?t@smNUN8d!tv)}bGlX;ER}F-V2ZmS}gMf83z5 zm)7ep+pHs?FzB?s_B+l7S=w$Hll6HD&4EC!Wi2$)H-YmCd4QckIWt5ois}JAvD>=aAGe{{!q7ZKW&x-18+2z zCHz@GdamK>Bp``vz{1jUaR%C?!_)_MPbPXAR^Uig2wHAe_=d_ksXgz;%45J_IF&G@ z5slB08^!=(*|z^L@Tx~lO-;on2pH~66v;5-W;Fc7o~l5fv3_#SO>;URzxj`zj=>X0 zv@cX6hOP2@lBKzM$qy9$^bZ$4ZPJ6a7Utun8kEA7GtEtU1F_{X^#V&@<*r-qX0HWK zd3>K^Hw8Y$VWI1^%EJ)F+ok#L86w*J=t7*j$sBrsB8o%coA@OPGz(UO`1YsCLr*50!%H;&A(Fh4^+X+*hnx6q$Q-)%I|r; zC=gwj-#a3Z@qfS49KXdz!%#s|jzk{~^?tl&cKMwwqVcdUj+aY!{VI;!mLcmYY<|EE z)7ja%6<*)arm{J=)$}ovwNq!`)`*XfZ@ER2|I2-b-}PZxRp))JNX_dr{EFSO;s+yi z#f2_z;hqbrmB9#fZR!))lux>ffBxCj5FqyuA?QttU~&;(dMS95CM#^R8!jC~!z>yK z?qhT(-mJg3A`N>CrE(vYCpJk=ek~H5s>RILIt<%>#C{4-HRBdh&8t|M0DBQBe(k@# zdDG7H0kk{T*4DJ3My-Fi#FeO-N6Jj%k5V{( zi6K;j#cG+-CBHiN525l|IZE32EJs~ZPw*pYOv;?zm0;tr@d zZs-6p5D=%Fz|Apv3BXHssCNAu8^txzy{?zALE#-T<677^Vwz7vUK#w<>}1kLQfH0_ zwPOy%a9`)OC;${j{-CD|;P@23MH{_hy9=Wm?{?lc18*u1XH{9~Mr)h9FPUU?SgdwO zwY0SGQ?nzV0kLH?=!6`B%?Cm_o?r9q-`XOwO)CKGP&0j$N7ZQ z+(4iezjn9^BBBY5D(VScl#I7RsX#GcRb~Z)RBYRucqTku(=fZ0k7Vw;1VTjcwPD zAW(PiD^&hPgk|)MGh%|F_-3sV>G8oJSBX#)bl)7Yn~Yh25^61Q0mR}GoO+!ILzxYVnG980O5p0> z%eDkqCj&Qd_g?o$S(Ow33SkKEvb9pj1cUyp*ZANmUs58us+u!tb5E|4i@!dT%+Bgu zs_k}8L)JkeSGxXd90)67sCN#x`fvgt;sRnt)Cma0#O>CvL~{v+;l9NePEY;5C(*(o z{05H3yLp%DbJ6-fpiy(_RuI$c`_CNUx{r~dHyjvNse=q@Oi0~M7$g!DR`DQ=L4#|^ zSFx0zJlqQ19nbip_suMO((qtok~K6CQpSVsPvu!y-LaUvyL)qz_0-ln=Z_;dqoFmF z&0Z0{e1QWp4na&~KKPIx4gfkcvMQwNU9Qv%9pGaPbv^JuJg;q zXw4$Y-9%-Ll2B=YK4zI@t$!@U3kCaTMixncx#89@;Zrb9P2#Gad79y>`9fX$)Bz_o z6GVE(<=xRK@2C*)1EOHw4dF?)2BX0Z>F`#q%&upcP~)>Pjm64!V#WkPI##Tz%WSKH zPpJ+MRs#fiC?(D)%s_D#3J(a~{-35nqi~~7HvKgHIDl^^cmM08xuNgrfx}X@TFk3t zMGK>S07AMWvKEOm0+w?9u(Ahb`WOH#+Dqx`E+BWXKOwu@UwLqV9C>mK*U@0C^$dsJ z9jaA^dt7As<^)=yk|9?nBojSN>Yk(E@0E{H4|FX|cx;$F>{jb6k1 z%S)19TGJQj=bRZeUhY*JhuJEaP!ji+dj%(^bvapMmHilTljZn7&+9(8L*E%jRNL)Y zO&tNCsr7(#(mzjqa(A;ZbgWjeptLs*A7S>wFB2>{9bQ#)2?z*?!H-Eqt!n{{OokRT z31Wfcogj=s(O-!BTeHd2sr9c0&ZoZC72DBCZrY0ZVZP3C7Ni4bET^QT3`!+djq=5bn~G{n;i!3ufr$yt zJT9v;c9e_TFZ7u>U~o%G=kwgi{`q-)t+1z-R#IGQD*XW7P$p|6^ZA~S*te#+rr|t& z%i%Xwu3pbwf4rX6vsf?JqO6gXI?uV)vb=F;JIW7({fBQBYfd0lH^%cV$Bx!7@-O!p zZ0s}9X3SWoMluwijTZZ)W>t1fb{YfNliI&*n5@@$NSs!rng?zK;k(5xz^^(AYi89(L}Z=kINJH%9)uPAW8aFR+=SUnp&tv6~al)bYYmjaj??%2p?` zYPqGH*BxBY=FSka7n@K-BR<y2cEL@YBeBeFSrydmqhXM3HM)%5a%R&#Ab%~6?#$QltCNr(3NJd5RYf)FI3C^ z{~+Vb07m{ut}2s4>8cdqLCOF8_Wo*}Z-VFKKjIFcAFT8g9ke}r#pFH*+IrC1pp4)S zQ824pS;s{_<(pKu}cBb}e4&&f;gsSSEhvA;J(r z8USTBCOYZt02axMz}v?Jjk9>^LC`jsgoP_h!q)IIl_FE83&~kn8cV{a-b=|y<=7^( z5X^OnIJE3ZN0GW<9(THMO2-hy2zU78nAxDX@@t3X+{YrrStw+FxjtGbAxZ{}`QlGG z#_#>}jp^Ntv-}MJMH+omuc`p(N~IL~9%7;9bEw{B!NWek_D!~Uuix{~zd>5^>m+}= zd+)9xTXoCWi!RDkmlk4;@ad%jDq54n6n2aX65D?rv1Qs-r3>123TW?IVg5`;CI0e% zyPu!fOy}6z8Y3c5$_*b3pT2)rR?4=xX&@cR+zHTrA9JoodFUr&BT$cIIYptPq$SHW(>a&o)VWwiH~$6pgZPo%HgmTQrS zK;V!tNe9;{WmF4$C-go`B3LN4T?;WXF{zPE5F;a>d2V@h)!7OJtiy5pU3;nA(*pT| z+K9?R@tX zD*D$eQjp)oD8C%Y; zyr7jrrTvbpm836rbz04)xzX@eE<8L%*bCc2Df94xYW0m7ngk+xh{?E1Gqh6RP3dW{ zg1$bJg;M&L;$m4T2(bP*$;M1`SJ%%bzY*n+BiFeButw_qw~R(KGUzNXtP~r%|4bPz zY}8tI2JLvWFnKX3%f*f70^}?@Z@zEvG7nb@`E!6ogJE5^gW^2&dk0o1mSlE|Eo9a>kQE`bl>AMIdV&eMBz@ZW{n(Iu}!_rUKA!i zv(C>IVhYvrVRerXCsOY;7!P@kdUk4HuA_VI3Ktbu4>1;XOu2DRJG zOmj1*Y9c<$3m$V77Z+PydPS431=ZY`^t0VWBFxOp@OmHe#=H}W>CH7wNJ`2rFGtg@ zcsn_%`Yk3#+B6K~#n$-U6x{A|SXo%!DvR*p90<<^8ezV(aaD+xJNyHlE>ak*_0alR zTRL*W+uyOYwDhgCw)B3{mB^w)ke0IVE?-P6jnyLEW0zyfNZSW3m(DPj=x?$mYBb7| z*Y)B2HcdRe6s2|RzXp!+h!=jXv0&ujP+3`8ZqwXe@w47o+rq-)>c?yn)xXzV5yIdw z>95BbLO$+!0iOXtWjKE8g!m6>%@1VQM<6iPWb08#DfXjR1OsKNe10V+)_Sy*D(tY_jT+3Qg)&z0Z4(4!`k%cG|GhNpTn+RnRi z7$<+GQrKQRZLTf;?1>1JRlgfwuWPVob7nvPYT|I+>G-F3d*$zgmC^T{}hanzN}jce>-O(=`KuL;LlcmSYE| zz6RntU$t-2H%%n*)XBDUsNNkb$C%BVvm=h&zORhymzyj8QAC+(xw~I~BqSt!74ZQ2 z3FeRw^hggw=zJ%t9Xs37Q!zyh%5t+hww|8nX4P*#jcIX#8lLeqQl^h3y@z$IcNc*M z;XpR|gjlBm@(*$3`k=Lz58|j(`6U8xI@BgjmL$MOlwO0pfVkkE!1ty&z7G1<_VjiD zGIH(3lfy9g*s#%weN23G-O?XEqMrVeE$(X2f@CD^{`#IrN8hlDu;7-=NYk|N~M1va8iJyuNZ z+(kd@_5P?VCpeSm+J=h=jp(P{`HllwkZ!sY@pPNEvf$ZnU+FQI)%bDCfzsvCkuMS( z?D19m*^b^^$Bku?Tr2AcBSZDx^hAx#n68Glwtx_9SE5UzD2DVY1{1X0=GK=FQ5KyJ z75>Sk9>v}cP=Z)YH4pc)gABfkxqB+;RfaI=IF3tmSKJMzialNCU&p-Xl!@(vOtK2* zg>JO0SD)QDySTu|+pGn0xZ8`5d+7oid_#Fgf5QcA)x%EC$XFK6BYS3|nWOoi|Cy=Z zv|3EFE1@wtRFw77&73wDvWET9A^F#i<`9oNplW97OYaytJNwpgF{fF?BNx$CtH4`j z3{Ufzvrz}wiF-(!R!n)k6y=n}ZR9_UZ$BhwrOf5P^A{F2`#Q|U_1v!0!U9-A(a|4i zmIl#wXEC|Bw0uw3WrB=GY{lUpZiXuI9NcY0e7ES%|5a#nk?#EYPU-0~znH@9^*%R` zXhpd}m$^`ZAWW(SrlsN7Wf^>Fz6&_fQam>P9gx~kdWkP6H_R01c5qjunbl4+zk6ku%1f>YU?IR~lMs3Ti&&JE-64WBD5dG~}t5$srYd z&BetvcRO4pcEqFO%1?US26ZU9e!PIz+;_Nv<-YR+5>>0>Q)H2aQkd4XiWcvO57-_n z5CP#w&-mQir~AvEJWP?0D`H^{SNtz@h4H+4jA{KySJE9GO`%V0j4oOQR&QbO+Y;@i>qZ7ETL!idUR%Bzkm?%!{k#6*Rfd4$ zu?YxOGCl?K)C2T4ux3`GPXhn1K|H`)FuR4dpLA-OA#uz3xKt!cqimjB*N2CPPR!Gn z_5>Up;ysdGrMWizM8X+8h$aNS>AN2hS%;2sVgx>#Mb4U=n+v6-rtbMZsJ?0-{$k)@ z3P4l|&RR!o`0;)CvlF|*v@L(Tjs6ELpHXzNBMyg4IxDlM3CEZ=2`>j>5H7bfkpsCT zCfUZhU{FeWBJ{g9i4bB*t2MVaH*F=&NH8McJ)sYoM$rJ#hbMxq+@=%#ZPR9zlwO#X z#oVG)51sOwkazqv$$HqQq}D4?LdAbmLcSULDqJA%4zq@ zxZZJg{D7BBt87$2Fc=A=JNPD6lT$i3LM1T37)TMITd~5u?PCecQaodP)fWl@eHIDy zl>wN(a>NicsGCjx`cEnPjG}YK*63dJy(WmbYP}JB@A{OT;2?Y*nq-S4@oW;ZNmDm} zXw4cV5CzF{SpBl@P-zc$_#86Vtm)gY5Ggtt-ux@QWP{`^t7JXstXV_Z4_ zl-&FGL{%Z2PND%_+_D%R-y3mu6`M6@W^}H{<&$ZfR=h713HPnJeivt;mdmbHaedeQc!C*Kcw)<293Ci!aEoNWx8k;K8kE6bjxf4IE!{4+;C z6oGqR9do{!)z_Q3`2^$~Sds2W76}~p(OY8XHUWgnIyy3vt0*Fdd&%k!)Uip%s@x;?I=H+Ig-h!a zej@r~GkdLHzg{zLtecpy@OW|4aC0Nh8qF@32oa<^p+-hj+YQL;yM3qihmtm#{Z-t5 z6y!z%lsJT+{BWb-J6f7*9;U zLEeee83Q)LxgIlnhFtc}XDAw)hGmo-M!fTbTpKM-dxP}quST`XoxPg>`rRx=6NmEDeWew- zI$9nrIf|_6#IP}ZxI@K`BeA}I6O)=m{K3RY0u~sM&EGXZZlIk+lZvD9YxOdwY`rbM2VJvHf zKfX@<>ty{qw{&OH7Wrg|B@n=4kq!mlA8030OzuDrWu^GBxBT~!`I zpr1c~VvTB-i+i=Ww4MujEQhB%ygoK8Yg8(JGyWmdi6@W)y@E-#Z$2p_g9NJQjuK5K zvVu6iT5bDzrDC6TOqU3e&Fd(jvc~#L%a6rs%s@(o!0N)iQAKVnDfR?-mIG>+wVV0* zc|%8rEuvx2g8;!5m8@cCgee=*+rXOSEqgRs{IQKuMXtg|s$!g{=d!eCc>R%hoHs6c zjt#%!X;!P6SJkUJ*YDormk$6T+{ow`=~xv@N2PWAo=mDngi4z6U?lVq>CI&%siB2C zlJ4UUpC0hxf^9ZYKM0Lo6!V+dy^#1ze9Z7gW)RdkYNLKS^t z1;YoL}}@h(=8GoPE%szt9gq?l%O%mdeBXpHWzr!C`C;hUcaamCFOktbe8 zB1ZO;eZ*Rci$Xu!y;UZYR~cd^iDv9aqQhe<9V4T@iDnyioJK}!ptMvPw31Ww2#4MG zhleIU3i$*KW;U%_B>QuGJ|(w%+R=-(rl8b6#G7k#3=rj6=id3dH?5P{^j4ilshaT> zJzFU4J0AqDe?&#-1Z)*!k80p)jS8 z(DKcFn}guPV;#O!{GCwX45=@UDxMZQsi=}!mDyTXGV2GI${VU^>L);;~TzU_2tgt=!rF#-hg zS0Dlz{y=?Yh@B?a1gN-bt-HtYmFHU(JxI~9D9Z_(QRguT3!Bt=WD!LQ$V8;9t@ z=%^^kDnp^nh2YG_&E2^(9GyCMQoA31cns0x#v9GFP6i$`by#pp&)}-@fse^)##C;8 z0w-NgT+)u2!Y*$aXSewLL_bHZ*MyOsdtri9X_zVP$u@iaKwAQZKByUfS(%xcYsYTS zYhNS^NXCg2S3jj>E|VEwmC2*=rccqE2hTo%VSQXvRV&X(#Lq_zF~XEjuih2B*fM@h+`JWb`}F_{7A5ZDZ@&!anc3 zXS2Z3GEcO#oDs!utVSM{-~B6CSZ}O<04a=o7mPMJ1WUG;Ld(v6iWSra$<@^eo*0H0 zMx(vR-DT9_x_1}*3o&&=^v5TU&e<5ZE^6%tpTfuZ!*Tx7M{2h+-trAGe=SpNdErsb zIyWAz5)$GW@(?Wzt&LfUu)_uSV@PG(CcV8W;8p*;zV6!TSqfQ9k&uZoUVb3X=rq)g zMpUPXl1LuUOt<>{93BqIk~HcdI#pY8Xeo8ZtuO`_Cau3fxW{ZKQu^5QBbpc%+xpqi zpFR@~KIHQHsCrVgUU<;f>S2&BjW0ulX;jW&;<)M~!1j=k77Vb6%E?{MkK`ZQ z!0|-P4TNMkFy8J1n97IoF%U0Od_Yz1f>eX8Qg*MGiQKwfU{$T7`A5n4IbW?1z3)F2 zE(HXIbzf?<9}$4Xtd^)l5x$}+5#I92%N)5x?NdZZgNoPpFQ*6mKc|=Ifr{;w)0z!} zid5hw9&`8oBmC2qJ-x0g(k5HM=X(2Xy6_jk?kNSAp0b#=J#f;zxr`iOLGZV0dC^MS zgxfH(MF;K)&*k zqtJd6?j1NjIqoy1@g}j0iwm(xLLbs^imOlw=a$m!%uG^@!7WA~E#ju9j}?&HKHzN@ z@eqYN#SDRWeASp_2m)KQ?5|i}A!&Ir0|kRf)%W}G8AcCSA3Tni7|}f2*5$byYa-;M z<`e%ip@pLvp@4`6j}Dws6}u?3SvWY<8R%Hjz-)I6#h_F3Tse)R-xMYI3E`bYd+$Li zwSHvHioG*_BetVOf?OElo}0AE``Es#%{wF8nB1k!H-B3njx2P`WXv3W&*rQsuf{m1IA;8hKP7u5NjOt2`s zqNAe^MA65`B@on0aZ4eD3DA-_-GguxDz6=QVPvi0N`LwENgE;wri)1BSA56mPXLedI?n#T)FM-?IMBqCz0Jm z$4NRAsh>AZ;Vk!@)^$_WS@goUTHIRB%XKYzM%cIMsshFLU-@!4060z zXK-7(Tdl5Gt0e?H!<|pGJ!hRP)Zz22T4iJN0m0Ja=`==>twF^O&o&U?J~o@tzC^Vh z4=iohr>9N;L??7)4nRt-;>~KC0_y0K7W}GBLGLLkRdo0D!-NTP-{)m4$bZaKrn{b9 z@q5Ub-aGvRe|<7cK|uke6W%9v*7Y7uu&b^vU0%ilCC?=pb()}k?wsYm3SWERyuc=~ zc&`KU2m<+Bb`n1QPHG|?A_0M9QZRZIK=bDZ1jgBolxG9}u1$+^Ca>pubb+G;0-)9K z`Hcf(wt3~0H@$?;iZs(6Kov}r=w+3;UGpPHZ9nl;L=;fulskV;&pY^!drYU@^DH|< z>Dv5ONOm^NmLI=cWW3*6Tn_j3*e`{m5#d8mPJVVHGHVH_Z zC47G9_-tZgvO5cWF76_~2&q4MIGVeUc9AOj^-K152KTEo$k=f^u|OrwWhKpG4>sPm zuguiUy0-k`Tmx~oZ|8i85Rho*C{&ORyFSu9isfWs781gY5_vT*&t>LW4WL>npzvk` z-h}hVn6O{iyyHlN4ikJgTWP1`+U$d7Q0fny0-nPSM*5V*}6&yh^wjL-Kat~LICp} z;Prn4aP|QRZtNyO!I9@E5C*RZ`7F$^<0F89K)$+d(5AsOJM6>PO5xXN#HKI`(?5aF zf2@xj=eUv;o1^c}%c{VJDR2vP{I3?%lfm!4qbX&2-q8}B>jNgo53ARjxucMy}79{hB7agX+7xmK(k zzTT~Whs0I!GZWqm-JgY*OpR)Odv7RJq0pjD-G4lT&zzfOc>;8ou9tvdGA$lo^67}x zDjbe~67wJ{f+z1?ECvQ*5h{BaD^doA1QG8~ zk^0(jKbKWtcUR_d>`@lTycr!B8Zg?oFjEybqqN4tzPB!5(8NRd<{AqnToT{h*t?tz(o7 zp!E`(UNZjvFI1E1Ed7w~P#O1CoH4ZEGrC8#< zc!N!BKdQBK-zw-i!hjNbF<|GC)WvQ&k!1iMK8jh45)@L@-E6QB6Fm=?w0Rs29K`4` ztwC!}nm8tv!#X^t;Y+#iYUiG-D0dlBOKEr^$q3Mo`@{s&z&0Z5Bxd*(`q_DC>#EYw z$h_?S)p-XI$(TQ&W2N)hvr!)%KhN>CtUvjbe)gB8Dr2TeHuJVbv&m z7Em6cjdD26*6MK*gK@Oj#?&;gHs!uWHGZ~okLh$eW`haCuTfD^Z+T_mfoiO-o=-6b zlx6|zfvYn#oJ&clKTWQ}FYvn|>Jq+oJVepQWhe+LG4#-9lKAbikhxn^8k1~{w7o1N zw`g)?_ZD}!;QcPn-#KtGTNYAeAWp4ianKAp>&__H5H>mnj%*A5l@;)OR|eW@TG#8B zBm?~8vIn1EH60yY|K7CaQoFc8hD-Uwnnbb(mfDYaHotSp5Z-*e@7+_DyXc@5XRGTr zs;LaG3nlnNiBIv%$O%j9P8G%*8Oe|}caSQmo6x0mVDGpgYO$)ZjbHyGy+yKkpRJ9} zbz7V3i?V=MFg#ZCCs4B1(VRz>U*}S~9c4-RJ+Zu-W$_kj-O8rr8iT0hu+LZYV$Fs! z%VOO2=ibDMls`JKo*}c+vG^jcja(SmA}cuaq;~akD$I-Vpx`Fp+QE~La&2R>jErA5 zGYa1%F6lUB(Ky!i6z)rkFfx7wk;B#??e5#lLdfHIZXl;MW@R68-oxoHDAHP!h``65R_>1!g2Xf6UEyHtm?~td7POQR55_UbW%|vxyO~~VWyMj(dgc-H- zK4rxzN89x=$;EWV=9rO@%2oy2@3z+IPRk{gB|Q-y+MD{F7bk6-VTFZ_caarJWZi&n zW%ugkE&5Spv%gdlKfSIAa=KpPD;ituF>aWzwo!bil;te^F~7xcV&MxQ)JuLgTOoF@ zXj85L`gIHx!zan8|?a|Lgbf1kkS&Zpj6Nu|?nVYeqIu7t3H=-^`TdUxMc&i1}a|Xx>6A#4>DfO3w5I>jv6EqF^g0QM=QZ|i;mh{ zl{^uhXUqj5b1rUbmHJ*%Uss8#J&sl)g*&`k{5lKld+im>HStyqTTqn8Q$qVOMtJU# zMz$HXtIcK|qDV}P##pHN2!WjR>wlF2WLoL1=?4P!j7)bv?q6eZbuJCwFqCS4eX_jU%W?MI( zLFHsZ2)diiBf?HEJTzL5vOQD}?xwC<(dU!lHjCRPs6#jOdtGC5Ek>#5dYao`SY_m) zmr|i$HH+kmrv|)Ip`p*--z07cY9plj1(^M%R<*RgMwW@FkkDG6H(X{GgEQawXPz(2 zx{(q6%^#$1>twhaE)irs``)J5;^x27M8+*b>n{^SYI|8fos`wMS=^or2herbg>Oqs zzKz?cTiG6+4}Y4J9R>N!T1yLPe6DtbEVDB9&V7R_i~=^DrG!#SOUur#M?4_UU(TI> zNw)m{{o97INf;5TX_{@_E1m>bY-P2cU0j1Q9@Mqq`p?(s`2cH@qUQJtsCKaIndbzd z*Xf7)lT7jC$_c(tWAe%!ZkOczxZ?)i0%?cW($bmfjC#4_H4RCLsC zDFW|FRKn$0KHBih@BeT`Ks&#LQ)ax+>GWSVi8s8mV3IE&jMn2D+Kh8lqA|2S!|?+Z z3s*h%eLjyG0{-I%vqZ8}%{}vQNu&8nL>TnpugEjrrLZ0);ERc~E?`fRKd6$gc7l>R zkek@e&9!R|GZX0;96G660qy@V3h8WSc9m{lf*CI{QK!??T=d`;=fwQ;XAKPvZQ*_p)U4R=bjf7`&p9-7ELY!( zn|6Jl<1!nvh8d@g1V_;A10q1GUWIQ42MQL11=nRT4*b8;zWc3-=6gGIP!I$Gk*@S0 zAkw6ZfYOx~B~)orBhqUCL8Pj5i4+OF_t3#cZ=n}M@1YY~DEY3>=lu`fA97ur-PxJ5 zXJ_V|bI-YF!=nc7yd7*!ZsDRbFI~5{v(sb~o9LKK%E;Jh)r{;r-CuH<*A4<1MU{h( z`y;u3?NP0zk~T5KMDmxu&bFvGIzxPwQX~qNJvtOEC8z>6JKM*9B(rPgPW^P^b)RZ*a(ZY-c-F`i!7-=0@f3jv$9)6ft!UMW?JjUFvrUl-8M5WAr_m=@`3 z76_&(9dmSBqPb`J?VQcE?T9HQS8i}6v$K(g)6c9-@^)EriuIHn_{Ga-=bLHonJoe; zN3S^uliV_jqvQGRYOvEC8c*!$Zpq6ra(g%Q|8-_cT9mDV7m&i(BD{V41D*Y~M*uG#%T=PAUZYNsllr2UR62xt0LX%=gm zkBM|MWWxbSd=yoi3Zzm7{U9?F%BP{^C%vqKk{dS-G|0$EOl^8jW=xSuIaMx zFXIXYghV=iJc)4I+p{ul&=0OEhG3;}n;x>NPoI7_a1_EH@5FK_ls$cRZ;gUY-sASa z1hurZwBXC83nP7#s9dn|e4AaLvUUts0qhc@n=jX2>@ql}uu8qd7eKIMgJL;eN*b?> z@!J3kP+tV1PQ+PH-%jX0YTFwV5R%e#XZkfsk_tFcGwFtaUWRA>3O{u z(b!40jW+l(16%ePN+E@D3OAyW4jH^|sJSLD z?dWhtD9-0{!GdvZ_9e^cm5E%ZPJ^T|_;}k}@nsh$kWo^LSV!dnFQUQYOgy>#WjKGn zo=Y9@9(t8NNzVpcXUOpB+ujT`bryEL<4f}I7wlBKUY?u+;A4J)#9|bCD-eq%EUeYV z75^`*<5TmyYV7z5~+9SA}4h^fUK-fbg}0eUp!x6O{K zCnd6Nkb0coB@u|IDbUovV6ZYg_BIgWv>zHB z4~q|bfhHGrd;v0zN_Q$7OKitofeUZHUjS8Ij$f{`xar00Rcozr>0M6>P)RN$KuF7S zeNsjrA{_Fn5nKV$>Hc8fKJ?QL+tH`F(#CziqUe zUDSBCgKji2kFy0ETOFoATkshVJLni$Hja1*KmSAna}Hyx<7&c%Eacj?ihw^thK2%! zCY{8GcVf=~0#Q);^M9-UgNg)at!WnweUQ#aidxRsA1O-hvdh&UX>psLZ4-J~6%E*a zu{*i(77dWC?G@z}P0dYrORp4tsWSj*Z{+7e4Ru`OCjSklVkB4Bmcl)mHH4}u%t?%z!=517~?5du=&J!{iO)0Gpe zah)qPnG_O1XQC80)20Qp0zt}GP+y{5&6X8^bUH7vypEZmmuv(=*gy#Vg zv2(_>aUo8&_kT5dI}Ja$71*Mbwcksd`Q#!s*oz1xlQLt&pNjI6^V(L|kGN4ZC#UEy z!U;%|yUF(#Zii@TJ$CeM(3_z6iMH;nw8QvObBMLCO}Nfnk<__B3|)r!0Xwt56qkPL z)~UPhA?tyiCIeRPKgLC=7#iNnMrH$Pb}vkfKMYri0~-@?1F2-oYiq^F)z-CBX&3%p zn>dFO(`qKvUk~eqxc30r5@{@nZmYRs@W?oEHlV$imDAIn&j)O#;&?3$HuW=k2gvM` zabI;-eqC-x2trH(0LlA^8(@)FcbtLDADQ6~#ir~)x_Y=;xQ+rqL~!sl(TP)}tFKC) z6}s|5tVNpygE`5hE(=N%9Kl7TD%SbSb-aefEi2!5S%5uW%8dYOs?qo`6d>OPWY<5{ zr*pK1uo=`EJ_KGjP#bZnV>YdXOKobXPDtju#pP5nLp7t|#XG0=bFTlG7$IYue0Ycy zInMcux{<}TfN9mUg*oCogv~+!7md~1tJfI*kt1rDN?o(z3uY@vxJ#@1!jzgyM)o9# zPLsW}f#44Q|0?={1}d^``Xr&z7LI6hhz}Yw_Qe|-&;q+9O|zkG(2;!6MM-K_Y7f=-zh*fGfBc)N1g+F1RABLxo=|DFfap+BB98ngobDrIA$6!ok=15ocgR9WAyG~waKG8XI7`iTaVK)Po1 z=+3F(4|f={X}27`W@9ivzD!;sKHG>|D`U_9z&5#ZQh8A3EMWKA&`Ai zG|_5nnT*k*j$CUl_=M3q0Z58JrI~7^stOKGjf;j@Jsj9>Xz{8GadxV~#mj?>Bow`Td&~M*1S*8yiQfO0uPS zK^Fg$pr6-)8_E}P?t=}=iV6B2eKpP}kEfXIgQBX${oGJX+RFwIT~d+4g58$j=w?p} zFfzqx)P5q~Fn2pUkG;hc3Py6SXAho`z=;(z{2i#?vb??j*6EvQMu4uO>a)y8w@%;S zTD^&weX!#O>V%Scu{_XP3LE~?#az#Rc7p7fA_!7NXkJ3L!Ja(p7hJlPrLFs}3BQ<0 zR<=JLsKe5dv;4BBp5oLzVPYHg?ND!>_Z!Tgk2%@+Ram!@y&K3G|d^8?d@&2lV7!pr&kV0fnJR^1efc1s?9HsNXkfk3S zhH4CBCfG8M@X!g!}9 z-^iy25BnK9GpcXNY>SIb&w&Uc?ZHS|A`$JhD%X{EtYtWJED1-7P;lhqx;K4bSMd-h6)JM6YpZ0Pcm95vS+GGimsg{KVf z-W!}5h6vdm0kE;)Y@>nDI_lnR{iaiaP1FlAX!pRZ)u-5px|%V~NL^||RYffTvW z=W&P8J?j%f>*WlwiuV2<2g@YS!w`j&5ecjV3yFjnj)5Wg^?RCgO%;h@agvG4;%OLK~15!-;ZJWg~Gm_Am+8{ z4qt51Xc=JTwn zzRQZW4KR{GajI5!W&^_%{u29EhnE_%xcI5fq;RgiJ>h#8yYRK&LVRhg2cJfGrr>!N zPN!0nL~EL-3ZI*TLIjjypGV|*y)~Z_>BlR2ydJGd{qgFAHQ1*P3rNx=*Pts@SmS>C zdtHDdnPn(yr@dph=+BGxG<2nbx~LZMVRiO#Z3v8c9R}el1H%i&8(~EsczDg`I3@o) z>fhxe-BrW;vSuOk)n7{sI!(of&%^v8f zVUvFOA7S6KTunT%y&d|C3}!(`C71=ARu@0$p!i{nTq|9~=0b=&R=~4R+>czCwrA;L zxvEf@hS!#dmee&SZBD(QvJHZ|L?z@1{UMrho)29=Wvi;4(i3j8!BJ^X1@NQ)^MTj>Jl>Vh9 z9sd+J2vHx5?l?|E?RZn?9Xo4JZefd<0#^y20xcLxwud=p8^!$@g^ksvwG4XTtsGpW z8}>Y%tRxoPIZCzkbC&%S1NU-ba|s-Zi=|M7tH7EEy->)WA?U_)bqn)lRa+cFLvyOA zJqWF}=7VJtK#JaXUueV~#RQ4=Ws1u?h+fZ!R2N+3QbCM|KLL|o-0$e?oVr&r?sJgu zzOQ;mQQfN&`MYo##~GoiSG7P_;SbS!s)GU}mlQR6WHMMK8Fg$Ov{+gwPw$8cI+|0} zPeV@{gv!25a2YuS(^ag#`pJ+ws^QWYHz6a;ecrS|v9EpZY>RVmhXu=U!OlE-peVAb zVI(sj!t9Syv0d~;gxUda17QQR9M0GCryVS)!pjb2D%H+ivD28~`V5kAhaG(j0=3{U zx}Q+g&Aowwjql5Y2+Eo1{5Th5Nq#ErrEjYa$|joI-wOhb=8?P+skG*Zq?;FvQxf0r z77B;+NYgicNhh)(tN#H-1u{-_P0>sW%eES`D3t!F=OA0e1QV*K`kz+0at{o`>j#+@ zRJ_#T*OcjV2vUx752#iVkucI^q7B0U#Z=atzIZ`f9BX^4vMHY@_1mwgGPIqO!q`Ni z9HF&%Hnt>rAnlbCp|r2{oI67%55YccHI=Q#7z?oRRVfaLdVf{O^IFQk^%}lXRN>k` zClB1xE%=*o&@H@laP@A&Kc}m`*^`sIFE2lX2l24&n>d~fhDi#e2?HroZ|QhFcIiw+ zSGRb|k$BU2g@!*be3OmZx!$u5mkMoB8i)La zxcBtV1sK*dZzNKA9YjxFf1xgVJie_Va1*gZ-c0{C3FRtni(^m6LBm^b09NF_-PIG? zs_A6t*f3#B;}^>ED)#H)>4ap9Ah!^}v}QUB=FJGvbDtX#lKRjQ67+3EKIO9rx}Xi` zmvW13CekJo|4EN&PU>OY4`t4uBf*-)|K=0yY@;ZNx44h>q3%2r46_!`a$M$vts_}{ zb=KXpo)>MGghu&b^Tba{Eu~=?yPoyJ1_OKG!Ar^7g!V${*HHeBdoT5cs-QHmmqdwZ zJzuP=unDG?GEQt2V$X*>Wd(Un-%i>4`21ka{C3! z!OZL)+sBhvT90~!i2Lb|c6wOq;{3jUeGbFOwsXHQP$aXaw8gd9fV-U`o*XUWc*dV6 zate;-to8lSlZ9&{U-XO|B@vlXBVP~BE|n=kR7w8&yGP?KN^oM&(I}w#D=YL0`sB8B=i~EUKA)8M5{5|LSV3-Q$zO)KgVsUf9p9!UR zYY^0euG1OI@kQviTvu|JJRfS+23{4N#EP-}6BtLdsWDcdTqU=k(p^@qk*Vle?Pm5A zFYB4_dRYN31C%mXP+%o^_UPdz`K% zGUrSoEMG6vNF8GEA~(1-6K!#^cvyRMx!PVejb{QZ;e^S`TIb?a|AVmDN>E&$hORpz zXeM_zAmT^bX`xvNjPVrD_x`b>gobUQN_;{a19z!FE!A76DU5FdBJX0L6!Cn^|BC5- zi0S4t7)I`$%fw3Dr#&DBvHM20l_=NRvUnA-H=Zl~snBlahA2PjzF zUG&GY=8=!$c(tD+`OMj?N0ibztjCUQft>4u>3_G{(t)`3cZEaB1hsJHpIC510Ds{- z`ZbBU{Fv6_ZqI8J&t@AdsdZ>K$3t}VUo|Eh&P*jammc?1*@_;9c!4`_GU*uG>U`LF zEB|#XA+a{(VR2&?%GJQ~eSyP+@0u?#b$tHr6I<@hq%vSfyej>2XZ2Y$Wz!Am1Bofj z$EU+L8gzJbUwQK&)N8pH_?$83G2eGdF3I#-^|e^~8csfi>1+douUU;T9UZadd?`mI z$myo*UX4F~?#kx@SD}kfd-C$s-41Q!^Fxv+!Qy%Vmb&BkmQypD}hOulUOB4(Z>jRZH_pu4h_{1;ZHE*A9D54AfI@s5g7Ef(GeA z1A>vwo=QgQgRc8^ae~O*XI|VbaX(@U74`SFBk14d8^E8da}I4S8#jASh~2I)(|h^E z&B~+4w!Pa%dRev;iZar-Ed)IEB}zfnLR;#V!UC<{@cIX~IH%c0t=lEYwkJD@#?mDY za~pS88AI+<>S?OW+u{;!L_aDqWSlDR559rmgVZ@K_Yc{(b?h@Q0W{dfBLZBN!lEnJY5kLAxu-TspDKFf(5bSes}k1 z(wsL(KcZZzt!}z*#fW_P0^f~vOF}N6_>fNFj}aiao<2-dOEYzK!rl~}l?*pqWbMqg z0ryJ`3#Yc#wr6jnOf!PCSpqq&)>iO6kEO(fh%ZCV#&#tX&dY8#O+tbG+GXs+B=L@W zDmo)fh5`iP!?74rvpsto)P^doTKL#m}Lv zs|S{^LrxeQtl0Mx(I}Gh&zO5iDdgR!Z3FZOV0f!)*fNQA$bT0ac&WlQBb?4(j?sP- zBsItMj6!IUx{8-m4>xX>Dy&@^D~^}$c6J~61_LZ{x2uVy8cU!7SxQ^nb2EOLaiyiw z8FQBOsXk4Xz#`O+?>r=|s<7}f__EnEAp}Z=uxZikTAP(R!&|<`wvulZ#sp>ke(8NO zE?ML|*JIVQUYyY8jepe2;&bcSNKyy$nYIAZ;%NLb`iH{xI$$!JT&RF%Z+WFWhxR)e^7kRtA-(GlMw@}tduw_U5+74Ywj3UJ( z*_#^Q;kvN!CVLVHgV5;KlO-;~W6N`%`#CX{Vd6Qqt&6x~UHzfqYpNSMo7(e>^wx3Z zmEu$3{jnt)4ZE;fdh3lSar~#SKl8P-r*Tor@P&t^Q7j(A7K2g}0LqGf8sGnI@lS=G zAhLHE8`pa|l`QTjXhkkr8;24xqrM2NdKk4Pgj`F!ttWS8dimioj2#GEt=~jZ17H=^ z(TRa5QCs=mFf)d^f0NyLP3giX_mT<-`X$G?5bq3%WC58uXB!U_(XmVtb>bP$ zM(JbmQDW}zmK-396(wNGhQAJl{n9O-yFd)>_;x$HkTaZDP`vm{Iu!vlpS{#p2URsW zNW0$R*%^PIv*G3xP4(ho3aAY?ewp@pvqsda|97JezfB5#=y_y&CS`O)Z;Tw_a7UF5 zgwYmYrV`7F$uO@;ShmN3dz2I!)3(UX&Kl2CNHB(4-SAk7pBcdC2YCK{BY-?5{_?91 zHhcF&BAOxolI@1zY4TaagW7;9)K5a`d7%j>OUx~~X4B(HWA_obVhD3bitjMb=DYG) zr_GWO-fa#H6#zmiU7-cRHA+r4`{S`M)M=?tWM+lpS<}h|k>#vAm5E;x38oRB^$+gs znP9N2ej19MuVxz+lF$>znB4*@9Lj&s(b#WSHVG%`NkE>Sq;L1MM45k9wxC4EqF!f- zhS90TMzIA3lNoRpmX-5o6qkqsofH^$n__;%mz@?RCFQ*3h7Gzv$obEY+>A{FI!U$o zb>K#zkou<=4C{j}0QvGC8uG7*!b3;mOSO?h##GsA594yLWWa#{PG`F#`Gz=CQT6db ztGcai@j?IH9#${{h*(^;w*mR!Px)U#l^WiVAPtg3@Ql3P|C*eRVc#Lb4IkQ@4|#G{ z^J{Fz{nyg%Gj*dZ!e7w=&K>Um3Q__(ZoKzjy{eq?zytm#up&=L>;EJRd`2Aj?-V6B z{xd25e~sa|sc--&0Tf+-Lcf0fzsu+do+0M{E@#tf{8JEc{Qp^D$Bh$E*m}pyRElQV izf1qMciZ8L(}{mcOSXc&0r>C)NJC9mwM@k_^#1@^C*UIh diff --git a/ep2016/static/media/sponsors/upv.png b/ep2016/static/media/sponsors/upv.png deleted file mode 100644 index 55e880d1b9fef7c3799d9d74569c8577ed2739a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18922 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 diff --git a/ep2016/static/media/sponsors/winton.png b/ep2016/static/media/sponsors/winton.png deleted file mode 100644 index f52156f0bc47e6469886021ac5dbc1d0b37bb566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25291 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 diff --git a/ep2016/static/talks.css b/ep2016/static/talks.css deleted file mode 100644 index ee3670b..0000000 --- a/ep2016/static/talks.css +++ /dev/null @@ -1,353 +0,0 @@ -@font-face { - font-family: 'Lato'; - src: url('media/fonts/lato-regular-webfont.eot'); - src: url('media/fonts/lato-regular-webfont.eot?#iefix') format('embedded-opentype'), - url('media/fonts/lato-regular-webfont.woff2') format('woff2'), - url('media/fonts/lato-regular-webfont.woff') format('woff'), - url('media/fonts/lato-regular-webfont.ttf') format('truetype'), - url('media/fonts/lato-regular-webfont.svg#latoregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Lato'; - src: url('media/fonts/lato-bold-webfont.eot'); - src: url('media/fonts/lato-bold-webfont.eot?#iefix') format('embedded-opentype'), - url('media/fonts/lato-bold-webfont.woff2') format('woff2'), - url('media/fonts/lato-bold-webfont.woff') format('woff'), - url('media/fonts/lato-bold-webfont.ttf') format('truetype'), - url('media/fonts/lato-bold-webfont.svg#latobold') format('svg'); - font-weight: bold; - font-style: normal; -} -@font-face { - font-family: 'Lato'; - src: url('media/fonts/lato-black-webfont.eot'); - src: url('media/fonts/lato-black-webfont.eot?#iefix') format('embedded-opentype'), - url('media/fonts/lato-black-webfont.woff2') format('woff2'), - url('media/fonts/lato-black-webfont.woff') format('woff'), - url('media/fonts/lato-black-webfont.ttf') format('truetype'), - url('media/fonts/lato-black-webfont.svg#latoblack') format('svg'); - font-weight: 900; - font-style: normal; -} - -* { - margin: 0; - padding: 0; -} - -html, body { - height: 100%; -} - -html { - font-size: 10px; - box-sizing: border-box; -} - -*, *:before, *:after { - box-sizing: inherit; -} - -body { - background: #8bd6f5; - color: white; - - font-family: 'Lato'; - - font-size: 1.6rem; -} - -header { - height: 15vh; - - position: relative; -} - -header h1 { - width: 70%; - background: white; - - position: absolute; - top: 0; - bottom: 0; - - white-space: nowrap; - text-indent: 100%; - overflow: hidden; - - background: white url(media/ep_logo.png) no-repeat 5% center; - background-size: auto 60%; -} - -header #time-container { - position: absolute; - right: 0; - top: 0; - bottom: 0; - - width: 30%; - - font-size: 4rem; - - height: 100%; - text-align: center; -} - -header #time-container .wrapper { - display: table; - width: 100%; - height: 100%; -} - -header #time-container time { - display: table-cell; - vertical-align: middle; -} - -header time:before { - content: ''; - display: inline-block; - - height: 5vh; - width: 5vh; - - background: url(media/hour.png) no-repeat center; - background-size: contain; - vertical-align: baseline; - - position: relative; - top: 1vh; - - margin-right: .5vh; -} - -section { - height: 75vh; - - padding: 10vh 3%; - - position: relative; -} - -section h2 { - font-size: 1.5rem; - font-weight: bold; - color: #3f9183; - - text-transform: uppercase; - letter-spacing: 0.3em; - - margin-bottom: 2vh; -} - -section .wrap { - width: 80%; -} - -section footer { - width: 100%; - - position: absolute; - bottom: 3vh; - height: 10vh; - - display: table; -} - -section footer > div { - display: table-cell; - vertical-align: middle; - text-align: center; -} - -section footer > div > div { - display: inline-block; - text-align: left; - vertical-align: top; -} - -section dl { - display: inline-block; - - vertical-align: top; -} - -section dt { - display: block; - letter-spacing: .3em; - text-transform: uppercase; - color: #3f9183; - font-weight: bold; - - margin-bottom: 0.5rem; -} - -section dd { - display: block; - font-weight: bold; - opacity: 0.5; - - font-size: 2rem; -} - -section .room:before { - content: ''; - display: inline-block; - - height: 5rem; - width: 6rem; - - background: url(media/room.png) no-repeat center; - background-size: contain; -} - -section .speaker:before { - content: ''; - display: inline-block; - - height: 5rem; - width: 6rem; - - background: url(media/speaker.png) no-repeat center; - background-size: contain; -} - -section h1 { - font-weight: 900; - font-size: 6rem; - - display: inline; - - background: rgba(0, 0, 0, 0); - background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 10%, #dd3524 10.1%, #dd3524 89.9%, rgba(0, 0, 0, 0) 90%, rgba(231,56,39,0) 100%); - background: -webkit-gradient(left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(10%, rgba(0, 0, 0, 0)), color-stop(10.1%, #dd3524), color-stop(71%, rgba(240,47,23,1)), color-stop(89%, rgba(234,53,33,1)), color-stop(90%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(231,56,39,0))); - background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 10%, #dd3524 10.1%, #dd3524 89.9%, rgba(0, 0, 0, 0) 90%, rgba(231,56,39,0) 100%); - background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 10%, #dd3524 10.1%, #dd3524 89.9%, rgba(0, 0, 0, 0) 90%, rgba(231,56,39,0) 100%); - background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 10%, #dd3524 10.1%, #dd3524 89.9%, rgba(0, 0, 0, 0) 90%, rgba(231,56,39,0) 100%); - background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 10%, #dd3524 10.1%, #dd3524 89.9%, rgba(0, 0, 0, 0) 90%, rgba(231,56,39,0) 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f85032', endColorstr='#e73827', GradientType=0 ); - - color: white; - padding: 0.5rem; - padding-left: 0; - padding-right: 0; -} - -body > footer { - height: 10vh; - - position: relative; - - background: #2e9bdd; -} - -footer .next-talk { - height: 100%; - width: 60%; - overflow: hidden; -} - -footer .next-talk p, footer .next-talk h2 { - padding: 0 0 0 4vh; -} - -#next-talk-container { - display: table; - height: 100%; - width: 100%; -} - -#next-talk-container > div { - display: table-cell; - vertical-align: middle; - width: 100%; -} - -.next-talks-slides { - width: 100%; -} - -footer .next-talk h2 { - letter-spacing: .3em; - text-transform: uppercase; - opacity: 0.5; - font-weight: bold; - font-size: 1.4rem; - - margin-bottom: 0.5rem; -} - -footer .next-talk h1 { - font-weight: bold; - font-size: 1.4rem; -} - -footer #sponsors-container { - width: 40%; - height: 100%; - - position: absolute; - top: 0; - bottom: 0; - right: 0; - - background: #ffffff; - -} - -footer #sponsors-container .wrapper { - display: table; - width: 100%; - height: 100%; -} - -footer ul { - text-align: center; - - list-style: none; - - overflow: scroll; - height: 10vh; -} - -footer ul li { - display: inline-block; - width: 100%; - height: 100%; -} - -footer ul img { - height: 80%; - width: auto; - margin: 0.6rem 1rem; - vertical-align: middle; -} - -footer ul .datarobot img { - max-height: 1.7vh; -} - -footer ul .cloudmas img { - max-height: 3.4vh; -} - -footer ul .google img { - position: relative; - top: .3vh; -} - - -.slides button { - display: none!important; -} - -.container{ - width: 50%; - float:left; -} -.clear{ - clear: both; -} diff --git a/ep2016/templates/feeds.html b/ep2016/templates/feeds.html deleted file mode 100644 index a1121d1..0000000 --- a/ep2016/templates/feeds.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - SmartFeedz | {{event}} - - - - - - -

- - - - - - - diff --git a/ep2016/templates/hall.html b/ep2016/templates/hall.html deleted file mode 100644 index 67f03a9..0000000 --- a/ep2016/templates/hall.html +++ /dev/null @@ -1,207 +0,0 @@ - Talk Schedule - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ep2016/templates/index.html b/ep2016/templates/index.html deleted file mode 100644 index a45687f..0000000 --- a/ep2016/templates/index.html +++ /dev/null @@ -1,257 +0,0 @@ - Talk Schedule - - - - - - - - - - - - - - - - - - - - - - - -
-

Logo

- - {# {{momentjs(timestamp).format('YYYY-MM-DD')}} #} -
- - -
- -

Current Talk:

- {% if next_talk[0] %} -

{{ next_talk[0].start }}

- {% endif %} -
- {% if next_talk[0] %} -

{{ next_talk[0].title }}

- {% else %} -

There is no actual talk, see when its going to be the next one...

- {% endif %} -
- -
-
-
-
Room
-
{{ room_name }}
-
-
-
-
-
Speaker
- {% if next_talk[0] %} -
{{ next_talk[0].speakers }}
- {% else %} -
No Speaker
- {% endif %} -
-
-
- -
- -
-
-
-

Upcoming talk

- {% if talks %} - {% for t in talks %} -

{{ t.end }}

-

: {{ t.title }} by {{ t.speakers }} ( {{ t.talk_type }} )

-
- {% endfor %} - {% else %} -

No next talks in the next hours... come tomorrow.

- {% endif %} -
-
- -
    -
  • -
  • -
  • -
  • -
-
- - - {#
-
- - -

INFORMATION

-
- - - - {% if talks_list %} -

WHATS HAPPENING IN EUROPYTHON 2015

- - - - - - - - - - - - - {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} - - - - - - - - - {% endfor %} - {% endfor %} - -
TrackTalk titleSpeakersTalk typeFinish
{{ t.track_title }}{{ t.title }}{{ t.speakers }}{{ t.talk_type }}{{ t.end }}
- {% endif %} - - -
-#} - - - - - - - - diff --git a/ep2016/templates/menu.html b/ep2016/templates/menu.html deleted file mode 100644 index a46b480..0000000 --- a/ep2016/templates/menu.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -

Available rooms:

-{% for i in options %} - -{% if "Hall" in i %} - {{ i }}
-{% else %} - {{ i }}
-{% endif %} - -{% endfor %} - - \ No newline at end of file diff --git a/ep2016/templates/multi_index.html b/ep2016/templates/multi_index.html deleted file mode 100644 index 79c758a..0000000 --- a/ep2016/templates/multi_index.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - Talk Schedule - - - - - - - - - - - - - - - - - - - -
-

Logo

-
-
- -
-
- {# {{momentjs(timestamp).format('YYYY-MM-DD')}} #} -
-
-
- {% if not empty %} - {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} -
-
-
-

{{t.start_hour}}

: {{ t.title }} ({{ t.talk_type }})

-
- -
-
-
-
-
Room
-
{{ t.track_title }}
-
-
- -
-
-
Speaker
-
{{ t.speakers }}
-
-
-
-
-
-
- {% endfor %} - {% endfor %} - {% else %} -
-
-
-

No talks at this time

-
-
-
- {% endif %} -
-
- -
- -
-
-
-
-
-
- {% if not empty %} -

Upcoming talk

- -
- {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} -

{{ t.title }}

- {% endfor %} - {% endfor %} -
- {% endif %} -
-
-
- -
-
-
    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
-
-
-
- - - - diff --git a/ep2017/__init__.py b/ep2017/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ep2017/static/data/accepted_talks.json b/ep2017/static/data/accepted_talks.json deleted file mode 100644 index ae18508..0000000 --- a/ep2017/static/data/accepted_talks.json +++ /dev/null @@ -1,8195 +0,0 @@ -{ - "Closing session": { - "699": { - "abstract_short": "Closing Session", - "sub_title": "", - "timerange": "2016-07-22 17:30:00, 2016-07-22 18:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 699, - "speakers": "To be announced", - "title": "Closing Session", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS" - ], - "abstract_long": [ - "Closing Session", - "", - "", - "" - ], - "abstract_extra": "Closing Session", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/closing-session", - "admin_type": "Closing session", - "companies": "" - } - }, - "Keynote": { - "711": { - "abstract_short": "Have you ever wondered how you could be your own boss? or how you could make money from your side project? or build the next Facebook or Uber.\r\n\r\nTo be a coder in today's world of work is to have amazing opportunities to design the business life you want.\r\n\r\nI've enjoyed the last 20 years without a 'real job', as company founder, freelancer and side-project-hacker.\r\n\r\nNow I am bootstrapping my current company to profitability. Listen to my stories and learn from my mistakes and successes.", - "sub_title": "How I used my technical skills to design the business life I want; and how you can too", - "timerange": "2016-07-18 09:15:00, 2016-07-18 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@rwillmer", - "id": 711, - "speakers": "Rachel Willmer", - "title": "20 years without a 'proper job'", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Track", - "Business" - ], - "abstract_long": [ - "Have you ever wondered how you could be your own boss? If so, then this talk is for you.\r\n\r\nMaybe you're working on a sideproject and wonder how you could make some money from it? Or maybe you have the idea for the next Facebook or Uber?\r\n\r\nTo be a coder in today's world of work is to have amazing opportunities to design the business life you want. You can work remotely; you can write books, or teach, or consult, with anyone anywhere. \r\n\r\nYou can have a crazy idea on Friday and have it running by Monday. Design your architecture to use cloud computing, so your tiny team can scale up your huge ideas. \r\n\r\nOr keep it small, and just earn some extra money with a Wordpress plugin, or a training course.\r\n\r\nIt has been 21 years since I last had a 'real job' and a regular income. \r\n\r\nI survived creating and running a company through the madness of the dotcom years. I made money from sideprojects, that I had started just for fun and for learning. I have freelanced without needing to use an agency to find the work.\r\n\r\nAnd now I'm bootstrapping my current business to profitability. Listen to my stories and learn from my mistakes and successes.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "rachel@willmer.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-20-years-without-a-proper-job", - "admin_type": "Keynote", - "companies": "Luzme" - }, - "714": { - "abstract_short": "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython runs on the device.\r\n\r\nMy talk will tell the story of the project, describe Python's role in it and explain how the wider Python community can become involved. It may involve demonstrations, live coding and audience participation.", - "sub_title": "A million UK kids have been given a device that runs MicroPython. What could possibly go wrong?", - "timerange": "2016-07-18 13:45:00, 2016-07-18 14:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ntoll", - "id": 714, - "speakers": "Nicholas Tollervey", - "title": "A Million Children (and MicroPython)", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "MicroPython", - "Fun and Humor", - "Internet of Things (IoT)", - "python" - ], - "abstract_long": [ - "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython (a full reimplementation of Python 3) runs on the device.\r\n\r\nMy talk will tell the story of the project, describe Python's role in it and explain how the wider Python community can become involved. It may involve demonstrations, live coding and audience participation.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Educational", - "Python", - "Everything Else", - "Hardware", - "" - ], - "emails": "ntollervey@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-a-million-children-and-micropython", - "admin_type": "Keynote", - "companies": "" - }, - "702": { - "abstract_short": "While Python the language is wonderful, the Python community and the personal, social, and professional benefits that flow from involvement in a community like ours are often more compelling. \r\n\r\nLearn about the goals of the Python Software Foundation and how everyone can take part to help build even better Python communities locally, regionally, and globally. I will also discuss some of our strengths as a community, and also look at some of the challenges we face going forward.\r\n", - "sub_title": "From Community Import Python", - "timerange": "2016-07-21 09:15:00, 2016-07-21 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@NaomiCeder", - "id": 702, - "speakers": "Naomi Ceder", - "title": "Come for the Language, Stay for the Community", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "python", - "Community" - ], - "abstract_long": [ - "Python is a powerful and flexible tool that many of us love and use in many ways. And yet, as wonderful as the language is, many would say that the community is even more attractive. This talk will focus on involvement in the Python community and what that means - in particular the many personal, social, and professional benefits that flow from involvement in a community like ours.\r\n\r\nI will also discuss what the Python Software Foundation does, what its goals and purpose are, and how everyone in the community can take part in the PSF to help build even better Python communities. This will include specific explanations of the membership model and how active contributors (both in terms of code and community organisation) can and should become full voting members of the PSF.\r\n\r\nI will also touch on our strengths, like our commitment to safe and inclusive spaces and our devotion to education, and also look at some of the challenges we face as a community going forward.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "", - "Community" - ], - "emails": "naomi.ceder@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-stay-for-the-community", - "admin_type": "Keynote", - "companies": "Trans*Code" - }, - "710": { - "abstract_short": "Paul will take you through the process of making of a Disney movie. He will use examples from Zootopia to explain and illustrate the steps in making a movie and explain where technology, specifically Python, is involved. This is an updated talk from one given years ago with more information. \r\n\r\n*This talk won't be recorded.*", - "sub_title": "", - "timerange": "2016-07-19 09:15:00, 2016-07-19 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@paulhildebrandt", - "id": 710, - "speakers": "Paul Hildebrandt", - "title": "Inside the Hat: Python @ Walt Disney Animation Studios", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Case Study" - ], - "abstract_long": [ - "The Walt Disney Animation Studios has a long history of creating acclaimed animated films and continues to be an industry leader with regards to artistic achievements, storytelling excellence, and cutting-edge innovations. Since the 1923 release of Snow White they\u2019ve been pushing forward technology in the art of movie making. This push continues in the modern day with classics such as Oscar winning box office hits \"Big Hero 6\" and \u201cFrozen\u201d and Oscar nominated hits \u201cWreck-It Ralph\u201d, \u201cTangled\u201d, \u201cBolt\u201d, \u201cTreasure Planet\u201d, and \u201cDinosaur\u201d.\r\n\r\nOne of the most common questions we get when attending PyCon is \u201cWhy are you here?\u201d People seem confused that technology, especially Python is used in the making of animated films. \r\n\r\nTo dive into exactly where Python is used without context would be confusing so Paul will give the audience some background on the Walt Disney Animation Studios. He will talk about what we\u2019ve done and what we are currently working on.\r\n\r\nThe main part of the talk is describing the production process whilst imparting this information he will interject where technology and specifically Python comes into play. He will describe the tools in each area and the tech stack used to create them.\r\n\r\nHe will then dive more deeply into the products he owns and discuss python in general at Disney.\r\n\r\n*This talk won't be recorded.*", - "", - "", - "" - ], - "abstract_extra": "The Walt Disney Animation Studios has a long history of creating acclaimed animated films and continues to be an industry leader with regards to artistic achievements, storytelling excellence, and cutting-edge innovations. Since the 1923 release of Snow White they\u2019ve been pushing forward technology in the art of movie making. This push continues in the modern day with classics such as Oscar winning box office hits \"Big Hero 6\" and \u201cFrozen\u201d and Oscar nominated hits \u201cWreck-It Ralph\u201d, \u201cTangled\u201d, \u201cBolt\u201d, \u201cTreasure Planet\u201d, and \u201cDinosaur\u201d.\r\n\r\nOne of the most common questions we get when attending PyCon is \u201cWhy are you here?\u201d People seem confused that technology, especially Python is used in the making of animated films. \r\n\r\nTo dive into exactly where Python is used without context would be confusing so Paul will give the audience some background on the Walt Disney Animation Studios. He will talk about what we\u2019ve done and what we are currently working on.\r\n\r\nThe main part of the talk is describing the production process whilst imparting this information he will interject where technology and specifically Python comes into play. He will describe the tools in each area and the tech stack used to create them.\r\n\r\nHe will then dive more deeply into the products he owns and discuss python in general at Disney.\r\n\r\n*This talk won't be recorded.*", - "tag_categories": [ - "Case Study" - ], - "emails": "paul.hildebrandt@disney.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-inside-the-hat-python-at-alt-disney-animation", - "admin_type": "Keynote", - "companies": "Walt Disney Animation Studios" - }, - "705": { - "abstract_short": "Scientists have been searching for the elusive gravitational wave for more than half a century. Hear how they finally found them, and the role that Python played in the discovery.\r\n\r\n", - "sub_title": "The epic hunt for the elusive gravitational-wave, and Python's pivital role in the discovery", - "timerange": "2016-07-20 09:15:00, 2016-07-20 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 705, - "speakers": "Jameson Rollins", - "title": "LIGO: The Dawn of Gravitational Wave Astronomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Science", - "The Answer to Life the Universe and Everything Else", - "Machine-Learning", - "Human-Machine-Interaction", - "Analytics" - ], - "abstract_long": [ - "Scientists have been searching for the elusive gravitational wave for more than half a century. On September 14, 2015, the Laser Interferometer Gravitational-wave Observatory (LIGO) finally observed the gravitational wave signature from the merger of two black holes. This detection marks the dawn of a new age of _gravitational wave astronomy_, where we routinely hear the sounds emanating from deep within the most energetic events in the Universe. This talk will cover the events leading up to one of the most important discoveries of the last century, and the myriad of ways in which Python enabled the effort.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Sciences", - "Everything Else", - "Data Science", - "Hardware", - "Data Science" - ], - "emails": "jrollins@finestructure.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-ligo", - "admin_type": "Keynote", - "companies": "LIGO Caltech" - }, - "709": { - "abstract_short": "Data science is a hot topic and Python has emerged as an ideal language for it.\r\nIts strength for data analysis come from the cultural mix between the scientific Python community, and more conventional software usage, such as web development or system administration. I'll show how and why Python is a easy and powerful tool for data science.", - "sub_title": "", - "timerange": "2016-07-22 09:15:00, 2016-07-22 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@GaelVaroquaux", - "id": 709, - "speakers": "Ga\u00ebl Varoquaux", - "title": "Scientist meets web dev: how Python became the language of data", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Science", - "Data" - ], - "abstract_long": [ - "Python started as a scripting language, but now it is the new trend everywhere and in particular for data science, the latest rage of computing. It didn't get there by chance: tools and concepts built by nerdy scientists and geek sysadmins provide foundations for what is said to be the sexiest job: data scientist.\r\n\r\nIn my talk I'll give a personal perspective, historical and technical, on the progress of the scientific Python ecosystem, from numerical physics to data mining. What made Python suitable for science; How could scipy grow to challenge commercial giants such as Matlab; Why the cultural gap between scientific Python and the broader Python community turned out to be a gold mine; How scikit-learn was born, what technical decisions enabled it to grow; And last but not least, how we are addressing a wider and wider public, lowering the bar and empowering people.\r\n\r\nThe talk will discuss low-level technical aspects, such as how the Python world makes it easy to move large chunks of number across code. It will touch upon current exciting developments in scikit-learn and joblib. But it will also talk about softer topics, such as project dynamics or documentation, as software's success is determined by people.", - "", - "", - "" - ], - "abstract_extra": ".", - "tag_categories": [ - "Sciences", - "" - ], - "emails": "gael.varoquaux@normalesup.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-science-web-dev", - "admin_type": "Keynote", - "companies": "INRIA" - } - }, - "EPS session": { - "695": { - "abstract_short": "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:30:00", - "sub_community": "", - "duration": 60, - "twitters": "@b_smoke, @malemburg", - "id": 695, - "speakers": "Fabio Pliger, Marc-Andre Lemburg", - "title": "EPS General Assembly", - "have_tickets": [ - true, - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS", - "Community" - ], - "abstract_long": [ - "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "", - "", - "" - ], - "abstract_extra": "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "tag_categories": [ - "Community", - "Community", - "Community", - "Community" - ], - "emails": "fabio.pliger@gmail.com, mal@europython.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/eps-general-assembly", - "admin_type": "EPS session", - "companies": "Continuum Analytics, eGenix.com Software GmbH" - }, - "696": { - "abstract_short": "We need help with organizing and running EuroPython 2017.\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@b_smoke, @malemburg", - "id": 696, - "speakers": "Fabio Pliger, Marc-Andre Lemburg", - "title": "EuroPython 2017: Help us build the next edition!", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS" - ], - "abstract_long": [ - "We need help with organizing and running EuroPython 2017\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "fabio.pliger@gmail.com, mal@europython.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/europython-2017-help-us-build-the-next-edition", - "admin_type": "EPS session", - "companies": "Continuum Analytics, eGenix.com Software GmbH" - } - }, - "Lightning talk": { - "469": { - "abstract_short": "The LightingTalkShow is the time for new and exceptional ideas to shine.", - "sub_title": "", - "timerange": "2016-07-18 17:15:00, 2016-07-18 18:15:00", - "sub_community": "", - "duration": 60, - "twitters": "@mcltm", - "id": 469, - "speakers": "Harald Armin Massa", - "title": "The LightningTalkShow", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Best Practice" - ], - "abstract_long": [ - "At the LightningTalkShow, there is script, there are no trained actors. Just the regular attendants, delivering interesting, diverse or crazy presentation about all things Python and computer.\r\n\r\nTo encourage the delivery, the LightningTalkMan shall conduct this ceromny, finding words when Laptops do not find the projector; allways honouring the motto of the original Python: the show must go on.\r\n", - "", - "", - "" - ], - "abstract_extra": "of course those 60 or whatever amount of minutes are allocated will be filled by participants who give LightningTalks.", - "tag_categories": [ - "Community", - "Community", - "Best Practice and Use Cases" - ], - "emails": "chef@ghum.de", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-lightningtalkshow", - "admin_type": "Lightning talk", - "companies": "2ndQuadrant Deutschland GmbH" - } - }, - "Recruiting session": { - "717": { - "abstract_short": "The recruiting sponsors will present their companies and their job offers in short talks.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@b_smoke", - "id": 717, - "speakers": "Fabio Pliger", - "title": "Recruiting session", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "workforce" - ], - "abstract_long": [ - "The recruiting sponsors will present their companies and their job offers in short talks.", - "", - "", - "" - ], - "abstract_extra": "The recruiting sponsors will present their companies and their job offers in short talks.", - "tag_categories": [ - "Business" - ], - "emails": "fabio.pliger@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/recruiting-session", - "admin_type": "Recruiting session", - "companies": "Continuum Analytics" - } - }, - "Reserved slot": { - "706": { - "abstract_short": "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "sub_title": "reserved for hot topics", - "timerange": "", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 706, - "speakers": "To be announced", - "title": "Reserved for 2nd Call for Proposals", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "", - "tags": [ - "General", - "python" - ], - "abstract_long": [ - "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/reserved-for-2nd-call-for-proposals", - "admin_type": "Reserved slot", - "companies": "" - }, - "707": { - "abstract_short": "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "sub_title": "reserved for hot topics", - "timerange": "", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 707, - "speakers": "To be announced", - "title": "Reserved for 2nd Call for Proposals", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "", - "tags": [ - "General", - "python" - ], - "abstract_long": [ - "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/reserved-for-2nd-call-for-proposals-1", - "admin_type": "Reserved slot", - "companies": "" - } - }, - "training": { - "490": { - "abstract_short": "Chinese is a fascinating but also dauntingly complex language. So let's use Python to make learning it easier! In this tutorial, we will use Python's powerful data analysis capabilities to accelerate our understanding of the Chinese language, boosting both our Chinese and our Python skills:\r\n\r\nSpeech analysis will help us to cut through our pronunciation problems, image recognition will make Chinese characters look less foreign to us and statistics will tell us what to learn, and what not.", - "sub_title": "Using Python to become better at language learning.", - "timerange": "2016-07-21 14:00:00, 2016-07-21 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@japh44", - "id": 490, - "speakers": "Andreas Dewes", - "title": "(Machine-)Learning Chinese, with Python!", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4 [PyData Track]", - "tags": [ - "Visualization", - "Natural Language Processing", - "Educational Track", - "Algorithms", - "Machine-Learning" - ], - "abstract_long": [ - "#(Machine-)Learning Chinese, with Python!\r\n\r\nLearning a new language is hard work. Especially if it is Chinese, which is a tonal language that is written using more than 10.000 different characters. Finding our way around in this linguistic labyrinth is a daunting task. But do not fear, for we have the power of Python at our side, and with its help we will **machine-learn Chinese**!\r\n\r\n## Mom scolds the horse \r\n\r\nChinese is a tonal language, which means that pronouncing a syllable differently will usually change its meaning. And while this can be very funny, it can also be rather embarrassing for language learners. So, to keep us from getting into linguistic trouble, we'll write a little Python tool that helps us to improve our pronunciation.\r\n\r\n## Seeing the trees and the forest, but still being lost\r\n\r\nReading the morning newspaper while having a nice cup of tea doesn't sound so complicated, does it? Well, if that newspaper is printed in Chinese we will have to know about 2.500 characters just to make it through the first pages. Again, machine-learning will come to our rescue!\r\n\r\n## Low-hanging fruits, high-flying dragons\r\n\r\nPronunciation and characters mastered, we'll still have to learn a large amount of words and phrases, so where to begin? To answer this, we'll make use of Bayesian techniques to identify the low-hanging fruits of the Chinese language.\r\n\r\nCongratulations, you should now be fluent in Chinese (or at least Machine-Learning)." - ], - "abstract_extra": "After speaking about a fairly scientific topic at the last EuroPython, I want to do something more applied this year! \r\n\r\nAs I'm currently learning Chinese, I thought applying machine-learning to this could be a very good use case for showing off some Python libraries for data analysis and visualization. Also, Chinese is a fascinating topic by itself and something that many people can relate to as Chinese culture becomes more pervasive around the world.\r\n\r\nMy idea is therefore to do a tutorial in which people can apply different machine learning methods to problems that we encounter in language learning. I selected three specific problems (voice recognition, image classification, text processing) for this, which in my opinion are very well suited to a machine-learning approach and produce interesting and relevant results while being easy to explain and understand on a basic level.\r\n\r\nI also would like to give a talk about the material that we cover in the tutorial such that a wider audience can enjoy it, I therefore also submitted a proposal for a summary talk (with the same title). \r\n\r\nI already spoke at many IT & scientific conferences and usually received very good audience feedback for my talks (but maybe people are just very polite :D ), a selection of my talks and publications can be found on my website: http://www.andreas-dewes.de/talks.html\r\n\r\nI also have more than 7 years of experience in using Python for data analysis and I really enjoy teaching, which I have done both at University and professionally in my job.", - "tag_categories": [ - "Data Science", - "Data Science", - ">>> Suggested Track", - "Data Science", - "Data Science" - ], - "emails": "andreas.dewes@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-chinese-with-python", - "admin_type": "", - "companies": "7scientists UG" - }, - "396": { - "abstract_short": "In this short tutorial session you'll learn how easy it is to build 3d objects with python code in blender. We begin with constructing 3d objects with cubes and we finish by rendering a small video/gif with mini explosions! It is meant to be very beginner friendly and will be a fun exercise to show how flexible python can be. ", - "sub_title": "From python code to 3d GIF animations.", - "timerange": "2016-07-22 10:15:00, 2016-07-22 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@fishnets88", - "id": 396, - "speakers": "vincent warmerdam", - "title": "Blender: much visual, very 3d, many python.", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Visualization", - "Blender" - ], - "abstract_long": [ - "In this short tutorial session you'll learn how easy it is to build 3d objects with python code in blender. We begin with constructing 3d objects with cubes and we finish by rendering a small video/gif with mini explosions! It is meant to be very beginner friendly and will be a fun exercise to show how flexible python can be. \r\n\r\nThese two blogposts of mine will give an impression of what people can do at the end of the day. \r\n- http://koaning.io/python-blender-gif.html\r\n- http://koaning.io/python-cubes-in-blender.html\r\n\r\nIf customs allow it: I'll consider bringing an oculus rift such that people can walk in their own creations." - ], - "abstract_extra": "This is my blog: http://koaning.io/. \r\n\r\nI've done many talks in the past. Both at PyData events and EuroPython. If you type my name into youtube, you should find example videos of me. ", - "tag_categories": [ - "Data Science", - "Everything Else" - ], - "emails": "vincentwarmerdam@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/blender-much-visual-very-3d-many-python", - "admin_type": "", - "companies": "GoDataDriven" - }, - "573": { - "abstract_short": "This tutorial is targeted at the intermediate-to-advanced Python user who wants to extend Python into High-Performance Computing. The tutorial will provide hands-on examples and essential performance tips every developer should know for writing effective parallel Python. The result will be a clear sense of possibilities and best practices using Python in HPC environments.\r\n", - "sub_title": "", - "timerange": "2016-07-19 10:15:00, 2016-07-19 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 573, - "speakers": "Michael McKerns", - "title": "Efficient Python for High-Performance Parallel Computing", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Multi-Threading", - "Python general", - "Abstractions", - "Multi-Processing", - "Performance" - ], - "abstract_long": [ - "Many of the examples you often find on parallel Python focus on the mechanics of getting the parallel infrastructure working with your code, and not on actually building good portable parallel Python. This tutorial is intended to be a broad introduction to writing high-performance parallel Python that is well suited to both the beginner and the veteran developer. Parallel efficiency starts with the speed of the target code itself, so we will start with how to evolve code from for-loops to Python looping constructs and vector programming. We will also discuss tools and techniques to optimize your code for speed and memory performance.\r\n\r\nThe tutorial will overview working with the common parallel communication technologies (threading, multiprocessing, MPI) and introduce the use of parallel programming models such as blocking and non-blocking pipes, asynchronous and iterative conditional maps, and map-reduce. We will discuss strategies for extending parallel workflow to utilize hierarchical and heterogeneous computing, distributed parallel computing, and job schedulers. We then return our focus to the speeding up our target code by leveraging parallelism within compiled code using Cython.\r\n\r\nAt the end of the tutorial, participants should be able to write simple parallel Python scripts, make use of effective parallel programming techniques, and have a framework in place to leverage the power of Python in High-Performance Computing.", - "", - "", - "" - ], - "abstract_extra": "An earlier version of the tutorial is available at: http://www.pyvideo.org/video/1345/efficient-parallel-python-for-high-performance-co while a preliminary version of the tutorial is at https://github.com/mmckerns/tuthpc.\r\n", - "tag_categories": [ - "Programming", - "Python", - "Everything Else", - "Programming", - "Programming" - ], - "emails": "mmckerns@uqfoundation.org", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/efficient-python-for-high-performance-parallel-computing", - "admin_type": "", - "companies": "the UQ Foundation" - }, - "592": { - "abstract_short": "Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.", - "sub_title": "", - "timerange": "2016-07-20 10:15:00, 2016-07-20 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@pyacademy", - "id": 592, - "speakers": "Mike M\u00fcller", - "title": "Faster Python Programs - Measure, don't Guess", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Algorithms", - "Tooling", - "Data Structures", - "Best Practice", - "Performance" - ], - "abstract_long": [ - "Python is a great language. But it can be slow compared to other languages\r\nfor certain types of tasks. If applied appropriately, optimization may reduce\r\nprogram runtime or memory consumption considerably. But this often comes at a\r\nprice. Optimization can be time consuming and the optimized program may be more\r\ncomplicated. This, in turn, means more maintenance effort. How do you find\r\nout if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how\r\nto find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n" - ], - "abstract_extra": "## Outline\r\n\r\n* How Fast is Fast Enough? (5 min)\r\n* Optimization Guidelines and Strategy (10 min)\r\n* Measuring run time\r\n * ``time``, ``timeit``, decorators for timing (5 min)\r\n * Wall Clock vs. CPU Time (2 min)\r\n* Profiling CPU Usage\r\n * cProfile (10 min)\r\n * A Picture is Worth a Thousand Words\r\n * SnakeViz (10 min)\r\n * Going Line-by-Line (5 min)\r\n * Exercise (15 min)\r\n* Profiling Memory Usage\r\n * Pympler (5 min)\r\n * Memory Usage Line-by-Line with memory_profiler (5 min)\r\n * Roll your own (5 min)\r\n * Exercise (10 min)\r\n* Algorithms and Anti-patterns\r\n * String Concatenation (3 min)\r\n * List and Generator Comprehensions (5 min)\r\n * Think Global buy Local (5 min)\r\n * Exercise (5 min)\r\n* The Right Data Structure\r\n * Use built-in Data Types (2 min)\r\n * ``list`` vs. ``set`` (3 min)\r\n * ``list`` vs. ``deque`` (5 min)\r\n * ``dict`` vs. ``defaultdict`` (5 min)\r\n * Big-O notation and Data Structures (5 min)\r\n * O(1) vs. O(n) vs. O(n) (5 min)\r\n * Exercise (15 min)\r\n* Caching\r\n * Reuse before You Recalculate (5 min)\r\n * Deterministic caching (5 min)\r\n * Non-deterministic caching (5 min)\r\n * Least Recently Used Cache (5 min)\r\n * Memcached (5 min)\r\n * Exercise (10 min)\r\n\r\n## Software Requirements\r\n\r\nYou will need Python 2.7 or 3.5 installed on your laptop. Python 2.6 or 3.3/3.4\r\nshould also work. Python 3.x is strongly preferred.\r\n\r\n\r\n### IPython Notebook\r\n\r\nI will use an IPython Notebook for the tutorial because it makes a very good\r\nteaching tool. You are welcome to use the setup you prefer, i.e editor, IDE,\r\nREPL. If you also like to use an IPython Notebook, I recommend `conda` for\r\neasy installation. Similarly to `virtualenv`, `conda` allows creating isolated\r\nenvironments but allows binary installs for all platforms.\r\n\r\nThere are two ways to install`IPython` via `conda`:\r\n\r\n1. Use [Minconda][1]. This is a small install and (after you installed it)\r\n you can use the command `conda` to create an environment:\r\n `conda create -n pycon2016 python=3.5`\r\n Now you can change into this environment:\r\n `source activate pycon2016`. The prompt should change to `(pycon2016)`.\r\n Now you can install IPython: `conda install IPython`.\r\n\r\n2. Install [Anaconda][2] and you are ready to go if you don't mind installing\r\n lots of packages from the scientific field.\r\n\r\n\r\nThe second option also gives you `conda` and you can create more environments\r\njust as with Miniconda (see 1.).\r\n\r\n### Working witch ``conda`` environments\r\n\r\nAfter creating a new environment, the system might still work with some\r\nstale settings. Even when the command ``which`` tells you that you are using an\r\nexecutable from your environment, this might actually not be the case.\r\nIf you see strange behavior using a command line tool in your environment,\r\nuse ``hash -r`` and try again. Please install ``pip`` inside this environment:\r\n\r\n conda install pip\r\n\r\n\r\n### Tools\r\n\r\nYou can install these with ``pip`` (in the active ``conda`` environment):\r\n\r\n* [SnakeViz][3]\r\n* [line_profiler][4]\r\n* [Pympler][6]\r\n* [memory_profiler][7]\r\n* [pyprof2calltree][9]\r\n\r\n\r\n\r\n#### Linux\r\n\r\nUsing the package manager of your OS should be the best option.\r\n\r\n\r\n[1]: http://conda.pydata.org/miniconda.html\r\n[2]: http://continuum.io/downloads\r\n[3]: http://jiffyclub.github.io/snakeviz/\r\n[4]: https://pypi.python.org/pypi/line_profiler/\r\n[6]: https://pypi.python.org/pypi/Pympler\r\n[7]: https://pypi.python.org/pypi/memory_profiler\r\n[8]: http://kcachegrind.sourceforge.net/html/Home.html\r\n[9]: https://github.com/pwaller/pyprof2calltree/\r\n\r\n## About the trainer\r\n\r\nI've been teaching Python courses since 2004. According to my statistics,\r\nI taught about 250 Python courses totaling over 600 teaching day.\r\nThis includes 16 tutorials at PyCon as well as numerous tutorials at\r\nEuroPython, EuroSciPy, PyCon DE, PyCon PL, PyCon IE, PyCon AsiaPacific\r\nas well as at PyData London and Berlin.\r\n\r\nI've been teaching tutorials about this topic every year at PyCon US from 2007\r\nthrough 2014 as well at PyData Berlin 2015 and at EuroPython 2015 in Bilbao.\r\nThis version has been revised **based on the feedback from the last tutorial\r\ndeliveries**.\r\n\r\nFirst, the tutorial covers fewer topics. I cut out tools that do not support\r\nPython 3 such as SnakeRunSnake and Heapy.\r\n\r\nSecond, I added more exercises. This should allow more focus on the core of the\r\ntutorial and also include more hands-on work by the participants. This \u201eLess is\r\nMore\u201c approach is additionally justified because the content of the tutorial\r\ngrew over time as more very useful tools became available. I think more\r\ndepths and less range makes sense for this topic.\r\n\r\nThere is a 60-page PDF handout that is rather comprehensive and can serve for\r\nself-study after the tutorial.\r\n", - "tag_categories": [ - "Data Science", - "Programming", - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "mmueller@python-academy.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/faster-python-programs-measure-dont-guess-1", - "admin_type": "", - "companies": "Python Academy GmbH & Co. KG" - }, - "556": { - "abstract_short": "During this workshop, you will be guided to make an open source contribution to the [coala][1] project. You will learn about quality restrictions and code review as well as the necessary tools to rework your patches to get them accepted. With the knowledge from this course you should easily be able to go out and help any open source project!\r\n\r\n [1]: http://coala-analyzer.org\r\n", - "sub_title": "Qualifies attendees for contribution to coala and other open source projects.", - "timerange": "2016-07-22 14:00:00, 2016-07-22 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@tushar_rishav", - "id": 556, - "speakers": "Tushar Gautam", - "title": "Guide to make a real contribution to an open source project for novice", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Python 3", - "Beginners", - "Git", - "Open-Source", - "Development" - ], - "abstract_long": [ - "Goal\r\n----\r\nYou will be guided to make a real contribution to an open source project ([_coala_][1]). The skills you learn are generally applicable. \r\n\r\nPrerequisite\r\n------------\r\n1. Eager to contribute to open source.\r\n2. Willingness to do great things in python\r\n3. GitHub account\r\n4. Git and Python installed\r\n5. A laptop\r\n\r\n\r\nOverview\r\n--------\r\n- Talk about version control (specifically Git). Basic stuffs like setup git and commands like `fork/clone, pull/fetch, push, commit/ammend, squash` etc. We'll be following **learning by doing** paradigm. Approx 15 minutes.\r\n- Introduce people to [_coala_][1] in general, brief about its codebase and how to use Github to contribute to coala. Approx 15 minutes.\r\n- Get started to write some code. We'll have bunch of unassigned issues, specifically created for \r\nthe purpose of workshop, show people how developers collaborate, cover git commands in more detail and the pull requests from attendees. Approx 1.30 hrs.\r\nWe'll also talk in brief about quality/testing tools like Travis Ci, CircleCi, Gitmate etc. In the meantime we'll start reviewing the PRs. Approx 20 minutes.\r\n- Finally, reworking the code phase and get every attendees merge their contributions to master branch.\r\n\r\n \r\n[1]: http://coala-analyzer.org/" - ], - "abstract_extra": "We've been using git and programming in Python since a fair amount of time. We've also conducted workshops regarding the contribution to open source in University. We'll be glad to share what we've learnt so far with the community. We also look forward to learn a lot from this conference. \r\nThe workshop shall be conducted by [_Tushar Gautam_][1] and [_Vishal Agarwal_][2] ,the two contributors to coala :\r\n [1]: https://github.com/tushar-rishav\r\n [2]: https://github.com/charizard42", - "tag_categories": [ - "Python", - "Educational", - "DevOps", - "Open Source", - "Programming" - ], - "emails": "tushar.rishav@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/guid-to-make-a-real-contribution-to-an-open-source-project-for-novice", - "admin_type": "", - "companies": "" - }, - "407": { - "abstract_short": "Want to learn how to clean, investigate, explore and analyze your data using Python? This workshop will take you from using Python as a developer into the basics of using Python as a data wrangler. We will cover an introduction to several data science libraries including Pandas, as well as some basic charting and reporting libraries.", - "sub_title": "Solving problems through data cleaning, analysis and reporting", - "timerange": "2016-07-21 10:15:00, 2016-07-21 13:15:00", - "sub_community": "pydata", - "duration": 180, - "twitters": "@kjam", - "id": 407, - "speakers": "Katharine Jarmul", - "title": "Introduction to Data Wrangling", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4 [PyData Track]", - "tags": [ - "Visualization", - "Jupyter/iPython Notebook", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "APIs" - ], - "abstract_long": [ - "Overview \r\n------------------ \r\nIn this tutorial, we'll be taking an exploratory look at how to perform data wrangling using Python. It's assumed the audience has a working understanding of Python and some basic data analysis exposure. Participants will leave the class with a better understanding of useful Python libraries for data analysis, as well as some hands-on scripts built throughout the tutorial. With these initial first steps, they should feel comfortable integrating data analysis into their current Python projects. \r\n\r\nOutline \r\n------------------ \r\n* Introduction to Data Wrangling with Python \r\n** How to ask questions \r\n** Where to find data \r\n** Why Python? \r\n\r\n* Initial setup\r\n** IPython Notebook \r\n** Getting the data \r\n\r\n* Importing data\r\n** Working with easy formats \r\n** Working with hard formats \r\n** APIs \r\n\r\n* Exploring data \r\n** Using pandas \r\n** Asking simple questions \r\n** Joining datasets \r\n\r\n* Analysing data \r\n** What is the data saying \r\n** Standardization and normalization \r\n** Making conlusion \r\n\r\n* Reporting your findings \r\n** Who is your audience \r\n** Charting data \r\n** Interactive charts and graphs \r\n\r\n* Next steps \r\n** Where to go from here \r\n** Q&A \r\n** \"Homework\" " - ], - "abstract_extra": "This tutorial will be based on work for my recently completed O'Reilly book, (Data Wrangling with Python)[http://shop.oreilly.com/product/0636920032861.do]. I've spoken at several US PyCon and other Python conferences and led classes for PyLadies in Los Angeles and Berlin. \r\n\r\nI've presented a version of this tutorial at EuroPycon last year, and, despite WiFi issues, received some great feedback and reviews. I've modified it and updated it to be more on-point with the audience in mind. ", - "tag_categories": [ - "Data Science", - "Python", - "Data Science", - "Web" - ], - "emails": "kjarmul@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-data-wrangling", - "admin_type": "", - "companies": "kjamistan" - }, - "629": { - "abstract_short": "**Objectives:**\r\n\r\n1) What is deep learning and why is it the current rage? \r\n2) How to implement a deep learning algorithm from scratch? \r\n3) Python library for deep learning - Keras\r\n4) Leverage deep learning for natural language processing \r\n5) Impact of GPU for deep learning \r\n\r\nThis workshop covers some of the common deep learning architectures for NLP with hands-on implementation of them using the latest deep learning libraries. The main topics would be MLP, RNN and word2vec.\r\n\r\n", - "sub_title": "A single neuron to a civilization", - "timerange": "2016-07-20 10:15:00, 2016-07-20 13:15:00", - "sub_community": "pydata", - "duration": 180, - "twitters": "@bargava, @nischalhp, @raghothams", - "id": 629, - "speakers": "Bargava Subramanian, Nischal HP, Raghotham Sripadraj", - "title": "Introduction to Deep Learning for Natural Language Processing", - "have_tickets": [ - true, - false, - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Natural Language Processing", - "Machine-Learning", - "Deep Learning", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "Ever wondered how Google Translate works so well? Do you know how the auto-captioning works on Youtube? How to mine the sentiments of tweets on twitter? And there's a host of successful natural language processing examples out there. What's the underlying theme? They all use Deep Learning.\r\n\r\nThis workshop introduces artificial neural networks and deep learning. The building blocks of neural networks are discussed in detail. Attendees are introduced to learning using ANN with backpropagation algorithm.\r\n\r\nA preliminary model using multi-layer perceptron is implemented to get a feel for deep learning model structure and the library keras.\r\n\r\nThe state-of-art recurrent neural networks is introduced. Two approaches are shown - 0ne using Long Short-Term Memory models and another one leveraging Word2Vec. Some ways to overcome overfitting are explored. \r\n\r\nWe'll also show how GPU's affect the computation.\r\n\r\nWe'll also implement a RNN to do text-generation.\r\n\r\n\r\n**Ideal Background of the attendee**\r\n\r\nSome knowledge of machine learning. \r\n - Bias and Variance\r\n - Train, Validation, and Test sets\r\n - Cross-validation\r\n - hyperparameter optimization\r\n - Measuring model accuracy \r\n - Supervised and Unsupervised learning\r\n - Overfitting \r\n - Basic Python constructs\r\n\r\nThe repository for the tutorial is [here][1]\r\n\r\nThe repository has instructions on what packages to install and the data we would be using for the workshop.\r\n\r\n [1]: https://github.com/rouseguy/intro2deeplearning\r\n", - "", - "", - "" - ], - "abstract_extra": "This tutorial will be conducted along with Raghotham S(raghotham.s@gmail.com) and Nischal HP(nischalhp@gmail.com)\r\n\r\nWe have conducted this workshop at the following places\r\n[PyCon Ireland 2015][5]\r\n[PyCon Poland 2015][4]\r\n[Fifth Elephant 2015(India's largest Data Science Conference)][3]\r\n[IEEE Conference on Cloud Computing for Emerging Markets][2]\r\n[PyCon Czech 2015][1]\r\n\r\n [1]: https://cz.pycon.org/2015/workshops/\r\n [2]: http://conferences.computer.org/ccem/program.html\r\n [3]: https://fifthelephant.talkfunnel.com/2015/10-introduction-to-deep-learning\r\n [4]: http://pl.pycon.org/2015/agenda_en.html\r\n [5]: http://lanyrd.com/2015/pyconie/sdrpqd/\r\n\r\nIn addition to this, the speakers have organized workshops at the following places\r\nPyCon India 2015 - Introduction to Statistics\r\nBangalore Python User Group: \r\n- Machine Learning (June 2015)\r\n- Data Analysis(August 2015)\r\n- Optimization (February 2016) ", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "bargava@gmail.com, nischal.hp@gmail.com, raghotham.s@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-deep-learning-for-natural-language-processing", - "admin_type": "", - "companies": "Cisco, Unnati Data Labs" - }, - "425": { - "abstract_short": "We will run through a fork of the publicly available ipython-in-depth tutorial \r\n [https://github.com/mjbright/ipython-in-depth][1]\r\nto discover many of the capabilities of Jupyter and IPython.\r\n\r\n [1]: https://github.com/mjbright/ipython-in-depth\r\n", - "sub_title": "Discover IPython/Jupyter through hands-on exercises with this time tested (evolving) tutorial", - "timerange": "2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@mjbright", - "id": 425, - "speakers": "Mike BRIGHT", - "title": "IPython in Depth", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Notebook", - "Jupyter/iPython" - ], - "abstract_long": [ - "We will run through a fork of the publicly available ipython-in-depth tutorial \r\n - [https://github.com/mjbright/ipython-in-depth][1]\r\n\r\nto discover many of the capabilities of Jupyter and IPython.\r\n\r\nPlease bring your own PC with Jupyter already installed.\r\nI recommend to have the Anaconda distribution, see here for suggested installation methods:\r\n - [http://jupyter.readthedocs.org/en/latest/install.html][2]\r\n\r\nI will work through at least the following tutorial sections:\r\n\r\n - Notebook Basics + beyond plain python\r\n - Markdown Cells\r\n - Rich Display System\r\n - Introduction to Interactive Javascript Widgets\r\n\r\nWe will spend roughly 45 mins on each section\r\n\r\nThis is a beginners Jupyter/IPython session.\r\nNevertheless, there's no problem for people to jump ahead, or to perform other exercises container within that repo.\r\n\r\nI've created a gitter channel for dissemination of information and to allow participants to chat and help each other. Feel free to post before/after the session.\r\nYou can join the channel here:\r\n[https://gitter.im/mjbright/ipython-in-depth][3]\r\n\r\n [1]: https://github.com/mjbright/ipython-in-depth\r\n [2]: http://jupyter.readthedocs.org/en/latest/install.html\r\n [3]: https://gitter.im/mjbright/ipython-in-depth\r\n", - "", - "", - "" - ], - "abstract_extra": "The tutorial will be run on attendee PCs.\r\n\r\nTutorial will be based on the publicly available tutorials on the github IPython and Jupyter repositories.\r\n\r\nCan be adapted if particular requirements are suggested.\r\n\r\nI am more than open to participating with other speakers on this lab.\r\n", - "tag_categories": [ - "", - "" - ], - "emails": "europython@mjbright.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/ipython-in-depth", - "admin_type": "", - "companies": "HPE" - }, - "615": { - "abstract_short": "The open source devpi private packaging system is used in many organisations and in this course you learn how to make the best use of it. Devpi helps with packaging and uploading python packages, documentation and test results to private indexes. In this course you'll also learn how to setup the server and client-side of devpi and how to implement staging and custom work flows. ", - "sub_title": "", - "timerange": "2016-07-20 14:00:00, 2016-07-20 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 615, - "speakers": "holger krekel", - "title": "Manage your Python packages professionally with devpi", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Infrastructure", - "Testing", - "Packaging" - ], - "abstract_long": [ - "The devpi server can manage all your private python packages and documentation and you can use well-known python tools like pip, tox, twine and sphinx to work with it. It also serves as a caching proxy for pypi.python.org and indexes can be configured to work as an \"overlay\" where your private packages appear in addition to public python ones. The server provides a web interface which integrates search and sphinx-generated documentation. All of this will be demonstrated and learned through little exercises during the course.\r\n\r\nThe devpi client side provides help for creating users, indexes, uploading packages, documentation and performing package-defined tests. In the course you'll learn the basics of command line usage with devpi and how to use it to implement custom work flows.\r\n\r\nMore info on the devpi system at doc.devpi.net" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Testing", - "Python" - ], - "emails": "holger@merlinux.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/manage-your-python-packages-professionally-with-devpi", - "admin_type": "", - "companies": "merlinux GmbH" - }, - "650": { - "abstract_short": "Learn how to use the [Cython][1] compiler to bring complex array computations to the speed of C without resorting to low level languages.\r\n\r\n [1]: http://cython.org/\r\n", - "sub_title": "Learn how to speed up complex array computations with Cython", - "timerange": "2016-07-20 14:00:00, 2016-07-20 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 650, - "speakers": "Stefan Behnel", - "title": "NumPy with Cython", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Cython", - "Big Data", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Compiler and Interpreters" - ], - "abstract_long": [ - "The [Cython][1] compiler is an excellent and widely used tool for speeding up computational code and talking to native libraries. It translates Python code to C or C++ code and supports static type annotations to allow direct use of C/C++ data types, native functions and complex array types. The tight integration of all three languages makes it possible to freely mix Python features like generators and comprehensions with C/C++ features like native data types, pointer arithmetic or manually tuned memory management in the same code. Cython has direct support for NumPy arrays and other buffer objects, which allows for efficient and even parallel (OpenMP) processing of large arrays.\r\n\r\nThis tutorial by a Cython core developer introduces the Cython programming language and its compiler and leads the participants all the way from their first Python extension to an efficient integration with NumPy arrays.\r\n\r\nNote that participants are expected to have a good understanding of the Python language, at least some basic knowledge about NumPy and C or C++, and are able to use a C compiler on their computers to build native CPython modules from sources (e.g. install source packages from PyPI that contain C extensions). No deep C programming knowledge is required, nor is any prior knowledge needed about writing extension modules for the CPython runtime. The Cython compiler handles most of these low-level issues itself.\r\n\r\n [1]: http://cython.org/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Data Science", - "Data Science", - "Data Science", - "Python" - ], - "emails": "pycon@behnel.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/numpy-with-cython", - "admin_type": "", - "companies": "Skoobe" - }, - "549": { - "abstract_short": "Learn the use of python SDKs to deploy your first cloud native application atop OpenStack. Deploying applications in a cloud environment can be very different from deploying them in a traditional IT environment. This workshop will teach you how to deploy applications on OpenStack and some best practices for cloud application development. ", - "sub_title": "Using Python SDKs to Deploy your first Cloud Native Application atop OpenStack", - "timerange": "2016-07-21 14:00:00, 2016-07-21 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 549, - "speakers": "David Flanders", - "title": "OpenStack Cloud Native Deployment for Application Developers", - "have_tickets": [ - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Visualization", - "Education", - "OpenStack", - "DevOps general", - "Deep Learning" - ], - "abstract_long": [ - "Did you miss the first wave of job opportunities to be an OpenStack operator? Fear not, the second wave commeth! Learn the latest in Application Development atop OpenStack. Both DevOpps and AppDev are invited to this hands-on training. This training will provide an overview of the most popular Python SDKs and their use with OpenStack (and other clouds: why be locked in?). \r\n\r\nBy the end of the workshop you will have learned: \r\na.) The basic componets of an open collaborative cloud infrastructure, \r\nb.) Simple architectures for building an application to scale accross several cloud compute nodes\r\nc.) Cloud data storage techniques and how to auto-orchestrate your data and compute\r\nd.) About the future upcoming application development paradigms: containers, 12 factor and mobile/IoT and much more. \r\n\r\nThe future is open, might as well get started. \r\n\r\nThe OpenStack foundation is now a not-for-profit organisation which is now 5 years of age and still innovatively growing. If you've not been to an OpenStack summit you are missing one of the best open events of the year. The OpenStack summit will be in Barcelona late October, hope to see you there. " - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Educational", - "DevOps", - "DevOps", - "Data Science" - ], - "emails": "denise@openstack.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/openstack-cloud-native-deployment-for-application-developers", - "admin_type": "", - "companies": "OpenStack Foundation" - }, - "475": { - "abstract_short": "_Try major async web frameworks in playful use-cases, learn which tool works best for which task_\r\n\r\nWorkshop reveals Python capabilities for async web development, focusing on production-ready tools for the time being. It contains an overview and sample tasks for most established Python solutions:\r\n\r\n- AsyncIO\r\n- Tornado\r\n- Twisted\r\n\r\nWorkshop does not promote any particular framework; we try each option to build the personal preference mapping of project requirements and corresponding tools.", - "sub_title": "Try major async web frameworks in playful use-cases, learn which tool works best for which task", - "timerange": "2016-07-19 10:15:00, 2016-07-19 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@PyMunich", - "id": 475, - "speakers": "Anton Caceres", - "title": "Present-day Async Web development training: from Twisted to Tornado and AsyncIO", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Use Case", - "Web Track", - "Best Practice", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "**Objective**\r\n\r\nGet hands-on experience with async Python frameworks, learn which tool works best for which task.\r\n\r\n**Description**\r\n\r\nThis beginner-friendly workshop contains an overview, code tasks and a benchmark for production-ready Python async tools for the time being:\r\n\r\n- AsyncIO\r\n- Tornado\r\n- Twisted\r\n\r\nWorkshop does not promote any particular framework; we practically try each option and develop personal preferences.\r\n\r\n**Plan**\r\n\r\n 1. Introduction to async web servers and frameworks (15 min)\r\n 2. Formulating typical web tasks that need async design (10 min)\r\n 3. for task in tasks: (1 h)\r\n - implement with Twisted\r\n - Tornado\r\n - AsyncIO\r\n 4. Take a realistic parallel requests use-case and use LAN to experiment (30 min)\r\n 4. Discuss peculiarities of implementations (10 min)\r\n 5. Run same task on different platforms with a benchmark (10 min)\r\n 6. Integrate frameworks: (15 min)\r\n - run Tornado on AsyncIO loop\r\n - convert Future objects\r\n7. Q & A (10 min)\r\n\r\n**Practical part**\r\n\r\nWe try different frameworks to implement typical web tasks: handling requests, fetching data from external APIs and proxying connections. In case of reliable LAN we will use laptops of each other as services to call asynchronously. This part is interactive, everyone is a creator of own service. Then we will put some service down and do error handling, try to integrate future objects of different frameworks, run a benchmark.\r\n\r\n**Pre-requirements**\r\n\r\n- Laptop with Python 3.4+" - ], - "abstract_extra": " - This workshop is an evolution of my talk series, eg last _[EuroPython talk][1]_\r\n - I also had similar but more AsyncIO-focused workshops at _[PyCon.es][2]_ and _[PyCon Sette][3]_.\r\n - Current workshop will be presented for the first time\r\n - I'm the organiser and tutor of _[PyMunich][4]_\r\n\r\n [1]: https://www.youtube.com/watch?v=NKPHP5p0WXA\r\n [2]: http://2015.es.pycon.org/en/schedule/\r\n [3]: https://www.pycon.it/conference/talks/beautiful-async-code-in-python-3\r\n [4]: http://www.pymunich.com", - "tag_categories": [ - "Best Practice and Use Cases", - ">>> Suggested Track", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "anton@caceres.me", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/present-day-async-web-development-training-from-twisted-to-tornado-and-asyncio", - "admin_type": "", - "companies": "Skoobe" - }, - "631": { - "abstract_short": "Modern Python development is sophisticated: large code bases with many libraries, multiple developers, and rich frontend stacks for web development. Better tooling can be a big help, including an integrated development environment (IDE). This tutorial introduces PyCharm, covers its major features, and shows a web development workflow in a hands-on environment.", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@paulweveritt", - "id": 631, - "speakers": "Paul Everitt", - "title": "Productive Coding with PyCharm", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Programming" - ], - "abstract_long": [ - "PyCharm is a powerful development environment for Python and web programming, with many tools and features to boost productivity. This tutorial covers a broad selection of these features, in the context of hands-on development. The outline focuses on Python, but includes a treatment of the HTML/JS/CSS features PyCharm inherits from its IntelliJ/WebStorm foundation.\r\n\r\nDuring this tutorial we'll also take a look on how good code practices can help the IDE to assist you on Python coding: writing docstrings, type hints with Python 3.5 latest standards, etc.\r\n\r\nAfter this tutorial, attendees should part with a basic understanding of the myriad of PyCharm features: what they are, why they help, how to use them, and how to find more information.\r\n\r\nAttendees should arrive at the tutorial with an installation of Python and and installation of the latest PyCharm. A list of required packages will be provide the week before, to help minimize the network impact of PyPI access. (An attempt will be made to run a local mirror.)" - ], - "abstract_extra": "##Tutorial format\r\n\r\nHands-on environment with multiple people from the PyCharm team to walk around and help. The approach is based on how I taught my \u201cPython 3 Web Development with Pyramid\u201d at two previous PyCons, a format that received strong feedback scores. The tutorial is broken into 10-12 sections. Each section begins with some talking, then has the students do hands-on work, then finishes with a wrap-up.\r\n\r\n## Class Size\r\n\r\nWe can handle a large class (I have a lot of experience over the years teaching Python in larger settings.)\r\n\r\n## Previous Experience\r\n\r\nI have conducted two PyCon tutorials in the past 3 years, plus a tutorial at PyCon Brasil. Before that, my tutorial work goes back to teaching CGI at the Python workshop in 1995.", - "tag_categories": [ - "Programming" - ], - "emails": "pauleveritt@me.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/productive-coding-with-pycharm", - "admin_type": "", - "companies": "JetBrains s.r.o." - }, - "587": { - "abstract_short": "Learn to test your code more effectively with Hypothesis.", - "sub_title": "Let your testing do more of your work for you", - "timerange": "2016-07-18 10:15:00, 2016-07-18 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@DRMacIver", - "id": 587, - "speakers": "David MacIver", - "title": "Property-based testing with Hypothesis", - "have_tickets": [ - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "Hypothesis is a library for writing smarter tests.\r\n\r\nInstead of hand-writing every example in your tests, you describe what sorts of examples you need and let it fill in the blanks. It uses this to actively go looking for bugs in your code.\r\n\r\nIt's proven very effective, and is being used by an ever growing number of open source projects (including pypy, cryptography, and mercurial), but people sometimes struggle to get started.\r\n\r\nIn this session we'll help you overcome that by going through a number of illustrative examples that will help you understand this style of testing better.\r\n\r\nThe first two hours will be spent on these, start with a discussion of the problem, a sample test to start you off, and then people will work through it at their own pace, with me there to answer questions and help people when they get stuck. After people have had some time on a given problem, I'll go over some possible tests for the example and why they are useful, and give people time to try anything they like out before moving on to the next problem.\r\n\r\nFor the final hour, people will work on testing some more substantial code. You should feel free to bring your own, but I will provide some interesting projects for people to work on for anyone who doesn't have anything specific.\r\n\r\nAt the end of this you should feel much more comfortable with the general concepts of property based testing, and be able to use Hypothesis effectively to test your own code." - ], - "abstract_extra": "I'm the primary author of Hypothesis.\r\n\r\nI've previously given a few talks about it, including this one at PyCon UK (https://www.youtube.com/watch?v=62ubHXzD8tM) and a more recent one at PyCon Namibia (No video, unfortunately, but here are the slides: https://bit.ly/how-do-i-know-1).\r\n\r\nI've run similar trainings before, both at PyCon Namibia and for companies.\r\n\r\nLast year's EuroPython had a number of talks about Hypothesis ( https://ep2015.europython.eu/conference/talks/whats-the-fuzz-all-about-randomized-data-generation-for-robust-unit-testing, https://ep2015.europython.eu/conference/talks/testing-with-two-failure-seeking-missiles-fuzzing-and-property-based-testing and somewhat https://ep2015.europython.eu/conference/talks/static-type-checking-is-dead-long-live-static-type-checking-in-python) , although I wasn't able to attend myself.", - "tag_categories": [ - "Testing", - "Testing" - ], - "emails": "david.maciver@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/property-based-testing-with-hypothesis", - "admin_type": "", - "companies": "" - }, - "622": { - "abstract_short": "The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We\u2019ll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We\u2019ll finish with discussing topics and questions of participants related to their own test suites and usages.", - "sub_title": "", - "timerange": "2016-07-22 10:15:00, 2016-07-22 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@the_compiler", - "id": 622, - "speakers": "Florian Bruhin", - "title": "pytest - simple, rapid and fun testing with Python", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Test Driven Development (TDD)", - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We\u2019ll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We\u2019ll finish with discussing topics and questions of participants related to their own test suites and usages.\r\n\r\nThis is the planned outline:\r\n\r\n- (30 minutes) pytest feature walkthrough: automatic test discovery, assert statement, modular parametrizable fixtures, 150 plugins\r\n\r\n- (60 minutes) pytest fixture mechanism: dependency injection, declaring and using function/module/session scoped fixtures, using fixtures from fixture functions, parametrizing fixtures. Exercises.\r\n\r\n- (30 minutes): running nose/unittest/trial/Django suites with pytest. Discussing advantages and limitations. Exercise with a select existing real-life open source project.\r\n\r\n- (30 minutes): Strategies for a) migrating to pytest b) using \u201cautouse\u201d fixtures in conjunction with XUnit-based setup/tearodwn methods. Exercise.\r\n\r\n- (30 minutes): open space for questions and interactively solving pytest/unittest integration problems on real-life problems as time permits." - ], - "abstract_extra": "I did the pytest training at EuroPython last year and it was quite popular with good feedback, so I thought I'd submit it again.", - "tag_categories": [ - "Testing", - "Testing", - "Testing" - ], - "emails": "europython.eu@the-compiler.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/pytest-simple-rapid-and-fun-testing-with-python-1", - "admin_type": "", - "companies": "" - }, - "439": { - "abstract_short": "Python allows system administrators to replace a wide set of tools like awk, perl and gnuplot.\r\n\r\nThe students will learn - thru various examples presented in ipython notebook - to speed up their everyday work and trasform their scripts in reusable libraries. Moreover they will see a large showcase of libraries and their usage.\r\n\r\nA Test Driven Deployment approach using Ansible will be shown.\r\n", - "sub_title": "One language to rule them all.", - "timerange": "2016-07-19 14:00:00, 2016-07-19 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@ioggstream", - "id": 439, - "speakers": "Roberto Polli", - "title": "Python for System Administrators", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "DevOps general", - "System Administration" - ], - "abstract_long": [ - "##Goal\r\nUse python to replace sysadmin tools like awk, perl and gnuplot and:\r\n\r\n - gather system data on different platforms (Linux, Windows, Mac);\r\n - parse them efficiently (\u00b5-benchmarks, defaultdict, re.compile, dstat plugins); \r\n - basic statistics and data visualization (distributions, correlation, scatter);\r\n - showcase of useful libraries (smtplib, ansible, mysql-utilities);\r\n - plan test driven deployments with Ansible\r\n\r\nTimings are [in the **draft** slides][2] \r\n\r\n## Methodology\r\nThe training is interactive, [jupyter notebooks stubs here][6] with [sources][1] and a [Docker image][4].\r\nStudents will be driven performing the exercises and sharing their results. A couple of volunteers will be prepared to support the students.\r\n\r\n## Prerequisites\r\nThe training is multi-platform, though focused on Linux + Python2.7:\r\n\r\n - Linux, Windows, Mac\r\n\r\nFeel free to contact me for any issue or question!\r\n\r\n \r\n [1]: https://github.com/ioggstream/python-course/tree/master/python-for-sysadmin\r\n \u00a0\r\n [2]: http://www.slideshare.net/ioggstream/python-for-system-administrators-59499282\r\n \u00a0\r\n [3]: https://github.com/ioggstream/python-course/tree/master/python-for-sysadmin/requirements.txt\r\n \u00a0\r\n [4]: https://registry.hub.docker.com/u/ioggstream/python-course/\r\n \u00a0\r\n [5]: https://github.com/ioggstream/python-course/tree/master/python-basic\r\n\r\n [6]: http://nbviewer.jupyter.org/github/ioggstream/python-course/tree/corso-interno/python-for-sysadmin/notebooks/" - ], - "abstract_extra": "EuroPython speaker since 2012.\r\nRed Hat Opensource Days Italy: 2011, 2015", - "tag_categories": [ - "DevOps", - "DevOps" - ], - "emails": "robipolli@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-for-system-administrators", - "admin_type": "", - "companies": "Par-Tec Spa" - }, - "643": { - "abstract_short": "Our cloud platform, Aldryn, is probably the world\u2019s biggest host of Docker-powered Django websites. \r\n\r\nWe work with Docker every day, and also with less-technical users of the platform, so we have built up a good understanding of how to introduce and explain the technology for practical purposes, and of the numerous and multiple difficulties that users of it can stumble across.\r\n\r\nWe want to share that experience, and help people take advantage of Docker from a Python/Django perspective.\r\n", - "sub_title": "A hands-on workshop to familiarise Django developers with key Docker concepts and techniques", - "timerange": "2016-07-22 14:00:00, 2016-07-22 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@EvilDMP, @stefanfoulis", - "id": 643, - "speakers": "Daniele Procida, Stefan Foulis", - "title": "So, what's all the fuss about Docker?", - "have_tickets": [ - false, - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Django", - "Docker" - ], - "abstract_long": [ - "Ou cloud platform, Aldryn, is probably the world\u2019s biggest host of Docker-powered Django websites. \r\n\r\nWe work with Docker every day, and also with less-technical users of the platform, so we have built up a good understanding of how to introduce and explain the technology for practical purposes, and of the numerous and multiple difficulties that users of it can stumble across.\r\n\r\nWe want to share that experience, and help people take advantage of Docker from a Python/Django perspective.\r\n\r\nWhat does Docker offer you, the Django developer? Even if you already know a bit about Docker, you\u2019re probably more familiar with it as a deployment tool, but in fact it offers some powerful advantages for the Python/Django developer too.\r\n\r\nThis is a hands-on workshop that also aims to clarify some key questions for the Django developer:\r\n\r\n- Why is Docker such a big deal?\r\n- What problems can Docker solve for me?\r\n- How does it work?\r\n- How can it enhance my development experience?\r\n\r\nIn the workshop we\u2019ll help install and configure Docker on your laptop (Linux/OS X/Windows), to have it working in a clear and manageable way.\r\n\r\nThen we\u2019ll step through setting up a Django project with Docker.\r\n\r\nIf we have time, we\u2019ll go on to show how Docker can help you move your project from development to deployment with minimum friction.\r\n", - "", - "", - "" - ], - "abstract_extra": "I will be running this training workshop together with a colleague or two from Divio.", - "tag_categories": [ - "Application Frameworks", - "DevOps" - ], - "emails": "daniele.procida@divio.ch, stefan@foulis.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/so-whats-all-the-fuss-about-docker", - "admin_type": "", - "companies": "Divio" - }, - "616": { - "abstract_short": "Practice writing implementation-agnostic tests and using the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), with [pytest-nodev][2] an Open Source test-driven search engine for Python code.\r\n\r\n[2]: http://pytest-nodev.readthedocs.org/en/stable/quickstart.html\r\n\r\nIncluding:\r\n\r\n- test-driven code search of functions and classes\r\n- test-suite validation, identification of weak tests\r\n- implementation-agnostic tests resilient to code refactoring", - "sub_title": "Writing good tests is more challenging and more rewarding than writing good code.", - "timerange": "2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@alexamici", - "id": 616, - "speakers": "Alessandro Amici", - "title": "Test-driven code search and the art of writing implementation-agnostic tests", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Test Driven Development (TDD)", - "Educational Track", - "Test Libraries (pyTest/node/...)", - "Testing", - "Best Practice" - ], - "abstract_long": [ - "This is the hands-on counterpart of the regular talk \"Test-driven code search and reuse coming to Python with pytest-nodev\", it is suggested to attend it first.\r\n\r\nWe will practice writing implementation-agnostic tests and using the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), with [pytest-nodev][2] an Open Source test-driven search engine for Python code.\r\n\r\n[2]: http://pytest-nodev.readthedocs.org/en/stable/quickstart.html\r\n\r\nTDR aims to address the limits of usual keyword-based search by focusing on code behaviour and semantics instead. Developing a new feature in TDR starts with the developer writing the tests that will validate candidate implementations of the desired functionality. Before writing any functional code the tests are run against all functions and classes of all available projects. Any code passing the tests is presented to the developer as a candidate implementation for the feature.\r\n\r\nApplications will include:\r\n\r\n- test-driven code search of auxiliary functions and classes\r\n - full code reuse by adding dependencies\r\n - full code reuse by forking code samples\r\n - partial code reuse by integrating features and identifying problem corner cases\r\n- test-suite validation, identification of weak tests\r\n- using implementation-agnostic tests to make regular test-suites more resilient to code refactoring." - ], - "abstract_extra": "This is the hands-on counterpart of the regular talk [\"Test-driven code search and reuse coming to Python with pytest-nodev\"][1], it is suggested to attend it first, but it is not strictly needed.\r\n\r\n[1]: http://ep2016.europython.eu/conference/talks/test-driven-source-code-search-for-python-with-pytest-nodev\r\n", - "tag_categories": [ - "Testing", - ">>> Suggested Track", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "a.amici@bopen.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/test-driven-code-search-and-the-art-of-writing-implementation-agnostic-tests", - "admin_type": "", - "companies": "B-Open Solutions srl" - }, - "397": { - "abstract_short": "Spend time using and abusing advanced features of Python for fun, with little\r\nconsideration of what is a good or bad idea.\r\n\r\nPython has fun and powerful language features: operator overriding, decorators,\r\nmagic methods, and metaclasses. Developers steer away\r\nfrom using these features to avoid creating code that is difficult to\r\nunderstand. *Don't be one of those developers!* Come on an adventure to push\r\nPython syntax to its limits. (We will also cover what each feature is *really* for.)", - "sub_title": "Learn advanced Python features by writing code that would get you fired.", - "timerange": "2016-07-21 10:15:00, 2016-07-21 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@judy2k", - "id": 397, - "speakers": "Mark Smith", - "title": "The Stupid Python Workshop", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Meta Classes", - "Python general", - "Educational Track", - "Mind Bending", - "Fun and Humor" - ], - "abstract_long": [ - "Spend time using and abusing advanced features of Python, for\r\nfun, with little consideration of what is a good or bad idea.\r\n\r\nDevelopers avoid using advanced language features because they don't want to\r\nwrite code that is difficult to understand. *Don't be one of those developers!*\r\nCome on an adventure to push Python syntax to its limits.\r\n\r\nThis workshop is aimed at intermediate Python developers. Attendees should be\r\ncomfortable with Python's syntax and should be intrigued or confused by:\r\nmagic methods; how `@property` works; and *what on Earth* a metaclass is.\r\nAttendees will learn how these things work, starting with the more\r\nstraightforward features. I'll introduce each concept assuming the attendees\r\nhave never used them before.\r\n\r\nWe'll be writing *silly* and *bad* things. We aim to understand how they work,\r\nnot whether they are a good idea, but in each case there will be a brief\r\ndiscussion of what each feature was really designed for. The exact contents are\r\nnot confirmed, but should include some or all of the following:\r\n\r\n* Override operators for more flexible syntax.\r\n* Using `__new__` for fun and profit.\r\n* Functions that behave differently depending on the values in the\r\n caller's scope.\r\n* Tacking extra methods on to classes we don't own.\r\n* Abuse of the descriptor protocol.\r\n* Messing with imports.\r\n* Decorators that do things decorators were never meant to do.\r\n* Write a metaclass and see if the world ends." - ], - "abstract_extra": "This workshop is based on a bunch of experiments I've partly published in my\r\n[GitHub Repo][stupid-python-tricks-repo]. It's basically a ridiculously\r\nexpanded, hands-on version of my [Lightning Talk][stupid-python-tricks-lightning-talk]\r\nat last year's EuroPython.\r\n\r\nI'm an experienced trainer and speaker. Two years ago I gave a talk on\r\n[command line programming][command-line-talk] at EuroPython, which has now been\r\nviewed 20000 times and seems to have been well received.\r\n\r\n[command-line-talk]: https://youtu.be/gR73nLbbgqY\r\n[stupid-python-tricks-repo]: https://github.com/judy2k/stupid-python-tricks\r\n[stupid-python-tricks-lightning-talk]: https://youtu.be/LQSWi3QJV8s?t=55m10s", - "tag_categories": [ - "Programming", - "Python", - ">>> Suggested Track", - "Everything Else", - "Everything Else" - ], - "emails": "pornbypost@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/the-stupid-python-workshop", - "admin_type": "", - "companies": "FanDuel" - }, - "511": { - "abstract_short": "uWSGI application server training from a simple web application hosting to an asynchronous task runner.", - "sub_title": "Learn to use and leverage the uWSGI power", - "timerange": "2016-07-18 10:15:00, 2016-07-18 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@ultrabug", - "id": 511, - "speakers": "Alexys Jacob", - "title": "uWSGI: the full stack application server", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "System Architecture", - "Infrastructure", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "ASYNC / Concurreny", - "System Administration" - ], - "abstract_long": [ - "Come and **learn how to use the uWSGI application server stack** with us.\r\n\r\nWe'll start from the basics to some more advanced usages :\r\n\r\n- what is uWSGI and why it can help you\r\n- what is the dynamic emperor mode and how it works\r\n- 1: run a simple Flask web application\r\n- 2: run a gevent based Flask web application\r\n- 3: run an external daemon using uWSGI\r\n- 4: create and run a task deferral application\r\n\r\nNote : we will provide and open source the Flask web application code we'll start from and iterate from there" - ], - "abstract_extra": "We at Numberly propose this training and propose that 2 of us run it.", - "tag_categories": [ - "DevOps", - "DevOps", - "Web", - "Programming", - "DevOps" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/uwsgi-the-full-stack-application-server", - "admin_type": "", - "companies": "Numberly" - } - }, - "poster": { - "555": { - "abstract_short": "The EDARA code, currently in FORTRAN 77, is used at CERN to assess the environmental impact of airborne releases of radioactivity and will be significantly upgraded in the next years. Therefore a python prototype has been developed using the numba just-in-time compiler for the Monte Carlo simulation core routines and the pandas library for data analysis. This prototype lead to a much cleaner code base with comparable performance and increased flexibility, ensuring its long-term maintainability.", - "sub_title": "Leveraging powerful data analysis libraries with just-in-time compilation techniques", - "timerange": "2016-07-19 11:30:00, 2016-07-19 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 555, - "speakers": "Robert Froeschl", - "title": "A case study of porting a Fortran77 Monte Carlo simulation code to python&numba", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "All Other Programming Languages", - "Science Track", - "Case Study", - "Physics" - ], - "abstract_long": [ - "The EDARA code is used at CERN (European Council for Nuclear Research) to assess the environmental impact of airborne releases of radioactivity. Its development has started in the 1990ies and the code is written in FORTRAN 77.\r\nThe EDARA code will be significantly upgraded in the next years to meet the future legal requirement of including additional age groups in the impact assessments, to have the capability of choosing among several different atmospheric dispersion models and to be interfaced from other software packages.\r\nTherefore it has been decided to port the EDARA code to python and a prototype has been developed with the following characteristics:\r\n - The numba just-in-time compiler has been used for the computationally demanding Monte Carlo simulation core routines. Closures over just-in-time compiled functions have been used to implement function pointer like features for the atmospheric dispersion model selection.\r\n - The data analysis and reporting features have been implemented using the pandas library.\r\n - implementation.\r\n - An API is provided for scripting and interfacing from other codes.\r\nThis prototype demonstrates that the python/numba/pandas implementation leads to a much smaller and cleaner code base that the FORTRAN 77 implementation without incurring a significant performance penalty for the computationally demanding parts. It has substantially increased the flexibility and extensibility of the code and will ensure its long-term maintainability.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Other Programming Languages", - ">>> Suggested Track", - "Case Study", - "Sciences" - ], - "emails": "robert.froeschl@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-case-study-of-porting-a-fortran77-monte-carlo-simulation-code-to-pythonnumba", - "admin_type": "", - "companies": "CERN, Geneva, Switzerland" - }, - "725": { - "abstract_short": "Shiv is Facebook layer 4 load balancer control plane built in Python, it is responsible for handling healthchecks, and configuration changes amongst other things and configure Linux IPVS to properly handle IP traffic.", - "sub_title": "", - "timerange": "2016-07-18 11:30:00, 2016-07-18 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@chantr4", - "id": 725, - "speakers": "Emmanuel Bretelle", - "title": "Building a billion user load balancer", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "System Architecture", - "Distributed Systems", - "Infrastructure", - "Open-Source", - "Scaling" - ], - "abstract_long": [ - "At Facebook, we make intensive use of Python in our infrastructure. Back in mid-2012, our engineers started to work on replacing the hardware load balancers that were powering Facebook with an in-house brew that would leverage Linux IPVS. Python was naturally chosen as the language to control, configure and manage the load balancers. By mid-2013, the whole of Facebook layer 4 load balancers in our datacenters had been replaced with Shiv and have been handling traffic ever since.\r\n\r\nAt the core of Shiv, we use libraries open-sourced by Facebook like Sparts [0], to set up a Thrift service, run and manage tasks, and gnlpy [1], to control IPVS via netlink. Add some python-fu to the mix and you can get a layer 4 load balancer that serves traffic for 1.65 billion people.\r\n\r\nIn this poster I will explain how our L4 load balancers are architected and how we use Python to leverage IPVS, setup individual VIPs and manage their backends, and make those load balancers operate in a fully automated way.\r\n\r\n\r\n[0] https://github.com/facebook/sparts\r\n\r\n[1] https://github.com/facebook/gnlpy\r\n\r\n[2] https://www.youtube.com/watch?v=MKgJeqF1DHw\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "Open Source", - "DevOps" - ], - "emails": "chantra@fb.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-a-billion-user-load-balancer", - "admin_type": "", - "companies": "Facebook" - }, - "732": { - "abstract_short": "TBD", - "sub_title": "An EEG-Based Control of a simulated four-wheeled Rover using ROS and Gazebo", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 732, - "speakers": "Enrico Carbognani", - "title": "Driving a Rover on the Moon with the Power of your Mind", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Robotics", - "Human-Machine-Interaction" - ], - "abstract_long": [ - "Humans have been dreaming for centuries about controlling their surroundings solely by the power of their minds. Nowadays, these dreams are slowly becoming reality due to a variety of inexpensive brain-computer interfaces (BCI) that detect neural activation patterns and support the control of devices by brain signals.\r\nIn this experimental setup, we intend to evaluate the performance of a commercial electroencephalographic (EEG) headset (Emotiv EPOC) in combination with a robotic simulation environment based on the Robot Operating System (ROS) and the Gazebo 3D simulator, and highlight the advantages and limitations of this approach. \r\nThe user will able to control one degree of freedom (yaw) of a four-wheeled rover (the CLEARPATH Robotics Husky) via the EPOC EEG and drive it trough simulated Moon terrains constructed using images and topographic (elevation) satellite data and integrated into Gazebo. \r\nWe are also planning to extend the experimental setup to include the use of Virtual Reality for the 3D visualization (this is subject to the successful integration of the Oculus Rift DK2 headset support in Gazebo which we are currently testing).\r\n" - ], - "abstract_extra": "In this simulation we will evaluate the performance of a commercial electroencephalographic (EEG) headset (Emotiv EPOC) in combination with a robotic simulation environment based on ROS and the Gazebo 3D simulator, and highlight the advantages and limitations of this approach. \r\nThe user will able to control one degree of freedom (yaw) of a four-wheeled rover via the EEG and drive it trough simulated Moon terrains.\r\nWe are also planning to possibly extend the experimental setup to include the use of Virtual Reality for the 3D visualization.", - "tag_categories": [ - "Hardware", - "Hardware" - ], - "emails": "enrico.carbognani@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/driving-a-rover-on-the-moon-with-the-power-of-your-mind", - "admin_type": "", - "companies": "" - }, - "550": { - "abstract_short": "Plone has, for the last 15 years, pushed the boundaries of Python-based CMSs. \r\nNow, in a world where JS frontends and delivery to multiple devices is key, we use the knowledge gained to get the **good** parts of this in a sensible, secure, developer- and integrator friendly, reliable Python backend.\r\n\r\n", - "sub_title": "Secure, social, responsive and scalable.", - "timerange": "2016-07-20 11:30:00, 2016-07-20 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@polyester", - "id": 550, - "speakers": "Paul Roeland", - "title": "Plone, the premier Python CMS and intranet", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Web General", - "Plone", - "Open-Source", - "CMS", - "Community" - ], - "abstract_long": [ - "Plone 5.1 brings more ways to integrate all that is needed for a modern website and intranet:\r\n\r\n - rapid theming independent of the backend, so designers can do what they do best\r\n - testable, standard ways of integrating JavaScript widgets and frameworks\r\n - integrate best-of-breed search\r\n - all with a solid, secure, Python backend\r\n - flexibility and TTW rapid prototyping, combined with CI and controlled development techniques\r\n\r\nPlone, now in its 15th year, has evolved together with Python. As shown in one of this year's [keynotes at PyCon][1], the relationship is still going strong, and there is much we can learn from one another.\r\n\r\n [1]: https://us.pycon.org/2016/events/keynotes/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Application Frameworks", - "Open Source", - "Web", - "Community" - ], - "emails": "paul.roeland@plone.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/plone-the-premier-python-cms-and-intranet", - "admin_type": "", - "companies": "Plone" - }, - "720": { - "abstract_short": "Many problems in statistics, finance, biology, pharmacology, physics, mathematics, economics, and chemistry involve the determination of the global minimum of multidimensional functions. The PyGenSA python module has been developed for generalized simulated annealing to process complicated non-linear objective functions with a large number of local minima.\r\n\r\n", - "sub_title": "An Efficient Global Optimization Python Module based on Generalized Simulated Annealing", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 720, - "speakers": "St\u00e9phane Cano", - "title": "PyGenSA: An Efficient Global Optimization for Generalized Simulated Annealing", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Science", - "Algorithms", - "Science Track", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Many problems in statistics, finance, biology, pharmacology, physics, mathematics, economics, and chemistry involve the determination of the global minimum of multidimensional functions. Python modules from SciPy and PyPI for the implementation of different stochastic methods (i.e.: pyEvolve, SciPy optimize) have been developed and successfully used in the Python scientific community. Based on Tsallis statistics, the PyGenSA python module has been developed for generalized simulated annealing to process complicated non-linear objective functions with a large number of local minima. Testing PyGenSA, basinhopping and differential evolution (SciPy) on many standard test functions used in optimization problems shows that PyGenSA is more reliable in general and very efficient in particular for high dimension problems." - ], - "abstract_extra": "Pull request submitted to SciPy: \r\nhttps://github.com/scipy/scipy/pull/6197\r\n\r\nBranch corresponding to the pull request:\r\nhttps://github.com/sgubianpm/scipy.git\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - ">>> Suggested Track", - "Open Source", - "Data Science" - ], - "emails": "stephane.john.cano@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pygensa-an-efficient-global-optimization-for-generalized-simulated-annealing", - "admin_type": "", - "companies": "Philip Morris R&D" - }, - "713": { - "abstract_short": "The IntelliCage\u2122 is a system for long-term behavioural experiments on cohorts of mice in social context. The robustness of IntelliCage data analysis may be improved with computer programs analysing the data in batch mode.\r\n\r\nTo simplify development of such programs, we developed the PyMICE library (RRID:nlx_158570). The library provides an user-friendly and intuitive API to access IntelliCage data, encouraging programming according to object-oriented and functional programming paradigms.", - "sub_title": "Facilitating reproducible research on mice behaviour.", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 713, - "speakers": "Jakub Kowalski", - "title": "PyMICE - a library for analysis of IntelliCage\u2122 data", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Science", - "Python general", - "Science Track", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Life sciences are suffering badly from a \"research reproducibility crisis\". One of possible countermeasures is automation of data acquisition and analysis. \r\n\r\nAutomated data acquisition systems facilitate standardization of conditions and measurements by minimization of human disturbance. One of such systems is IntelliCage\u2122, dedicated for long-term behavioural experiments on cohorts of mice in social context.\r\n\r\nThe robustness of data analysis may be improved with automated data analysis workflows (ADAWs): computer programs analysing the data in batch mode. Also, the source code of such program is an unequivocal, formal specification of the performed analysis. The only drawback of such approach is a significant effort and technical knowledge necessary to define an ADAW.\r\n\r\nOur goal was to simplify development of ADAWs and to shift the developer's focus from technical details (like data format) to the analysis itself. To meet the goal, we developed the PyMICE library (resource identifier: RRID:nlx_158570). The library provides an user-friendly and intuitive API to access IntelliCage data, encouraging development of ADAWs according to object-oriented and functional programming paradigms.\r\n\r\n**Acknowledgements**\r\nProject sponsored by Symfonia NCN grant: UMO-2013/08/W/NZ4/00691\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "My experience is mostly from presenting posters at neuroscientific conferences.", - "tag_categories": [ - "Sciences", - "Python", - ">>> Suggested Track", - "Open Source", - "Data Science" - ], - "emails": "j.kowalski@nencki.gov.pl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pymice-library", - "admin_type": "", - "companies": "" - }, - "733": { - "abstract_short": "Python is the most used language by production engineers , and the second most used by Facebook infrastructure teams. We use it in domains such as infrastructure management (network/server provisioning, service turnup, auto-remediation of server and services failures), platform services (package deployment, job scheduling, TFTP and kernel upgrades), service configuration management or operational tooling.\r\n", - "sub_title": "", - "timerange": "2016-07-19 14:45:00, 2016-07-19 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@chantr4", - "id": 733, - "speakers": "Emmanuel Bretelle", - "title": "Python in Production Engineering", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Operations", - "Infrastructure", - "Distributed Systems", - "Scaling" - ], - "abstract_long": [ - "Python is the most used language by production engineers [0], and the second most used by Facebook infrastructure teams. We use it in domains such as infrastructure management (network/server provisioning, service turnup, auto-remediation [1] of server and services failures), platform services (package deployment, job scheduling, TFTP [2] and kernel upgrades), service configuration management [3] or operational tooling.\r\n\r\nProduction engineers working on those services will be attending Europython 16 and happy to answer your questions on how Python helps us build service quickly and enables us to move fast and scale.\r\n\r\n\r\n[0] https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/\r\n\r\n[1] https://www.facebook.com/notes/facebook-engineering/making-facebook-self-healing/10150275248698920/\r\n\r\n[2] https://ep2016.europython.eu/conference/talks/fbtftp-facebooks-python3-framework-for-tftp-servers\r\n\r\n[3] https://us.pycon.org/2016/schedule/presentation/2059/" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "chantra@fb.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-in-production-engineering", - "admin_type": "", - "companies": "Facebook" - }, - "694": { - "abstract_short": "Juju is a devops tool for automated deployments, with full stack\r\nservice modelling and orchestration, in the cloud. Fully\r\ncontrollable with Python through \"charms\".", - "sub_title": "Devops distilled: deploy and orchestrate your services with Juju and Python", - "timerange": "2016-07-20 14:45:00, 2016-07-20 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 694, - "speakers": "Michael Foord", - "title": "To the Clouds: Service Orchestration and Cloud Deployment with Juju", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Public Cloud (AWS/Google/...)", - "Go-Lang", - "Linux", - "DevOps general", - "OpenStack" - ], - "abstract_long": [ - "Juju is a devops tool for automated deployments, with full stack\r\nservice modelling and orchestration, in the cloud. Fully\r\ncontrollable with Python through \"charms\".\r\n\r\nAbstract\r\n\r\nDo you deploy your Python services to Amazon EC2, or to Openstack,\r\nor even to HP cloud, joyent or Azure? Do you want to - without being\r\ntied into any one of them? What about local full stack deployments\r\nwith lxc or kvm containers?\r\n\r\nEven if you're convinced you don't need \"the cloud\" because you\r\nmanage your own servers, amazing technologies like Private clouds\r\nand MaaS, for dynamic server management on bare metal, may change\r\nyour mind.\r\n\r\nFed up with the cloud hype? Let me rehabilitate the buzzword! (A bit\r\nanyway.)\r\n\r\nA fully automated cloud deployment system is essential for rapid\r\nscaling, but it's also invaluable for full stack testing on\r\ncontinuous integration systems. Even better, your service deployment\r\nand infrastructure can be managed with Python code? (Devops distilled)\r\n\r\nTreat your servers as cattle not as pets, for service oriented\r\nrepeatable deployments on your choice of back-end. Learn how service\r\norchestration is a powerful new approach to deployment management,\r\nand do it with Python! If any of this sounds interesting then Juju\r\nmaybe for you!\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Other Programming Languages", - "Operating Systems", - "DevOps", - "DevOps" - ], - "emails": "fuzzyman@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/juju", - "admin_type": "", - "companies": "Canonical" - }, - "627": { - "abstract_short": "The BBC micro:bit is a small programmable device. It is being given, this year, to every 11 to 12-year-old child in the UK. One of the programming languages available for the micro:bit is Python. This poster will look at using Python, on the micro:bit, in informal learning environments. It is based on a six-month, in residence, project at a library.", - "sub_title": "Introducing Python and the Internet of Things, to the next generation, through libraries and clubs.", - "timerange": "2016-07-18 14:45:00, 2016-07-18 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@corinnewelsh", - "id": 627, - "speakers": "Corinne Welsh", - "title": "Using Python on the BBC micro:bit in informal learning environments", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Education", - "Teaching", - "MicroPython", - "Internet of Things (IoT)", - "Community" - ], - "abstract_long": [ - "This year, in an aspirational project led by the BBC, every 11 to 12-year-old child in the UK is being given a small programmable device. The BBC micro:bit has LEDs, input buttons, an accelerometer, a compass, input/output pins, power supply pins, and Bluetooth connectivity. It is supported by four different programming languages, one of which is Python.\r\n\r\nSchools are central in delivering the project: the micro:bits are being distributed, through schools, to Year 7 pupils. However, the vision of the micro:bit project is that the devices are given directly to children. They are owned by the children themselves to do with as they wish.\r\n\r\nI am involved in a six-month project based in a London borough library. The project's aim is to develop support to use Python, on the micro:bit, in the context of informal learning spaces. These include extra-curricular STEM clubs, libraries, and Saturday coding clubs.\r\n\r\nMy poster will be a reportage of the project. It will cover the challenges of introducing Python for the micro:bit and the benefits Python brings. I will also consider some wider issues, such as the role of gender, in the roll-out of the micro:bit." - ], - "abstract_extra": "I will bring a couple of micro:bits, with me, to accompany the poster presentation and discussion with a demonstration.", - "tag_categories": [ - "Educational", - "Everything Else", - "Python", - "Hardware", - "Community" - ], - "emails": "corinne@lilycat.co.uk", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/using-python-on-the-bbc-microbit-in-informal-learning-environments", - "admin_type": "", - "companies": "JustOutsource.it" - } - }, - "helpdesk": { - "731": { - "abstract_short": "We'll try to help everybody, especially new comers in Python, to understand better the asynchronous pattern, and AsyncIO in general.\r\n\r\nDon't hesitate to ask us any question, especially if you think it's a stupid question: No stupid questions, only stupid answers.", - "sub_title": "If you're curious to write code with AsyncIO but you don't know how to start or you have issues", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:00:00, 2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@GMLudo", - "id": 731, - "speakers": "Ludovic Gasc", - "title": "AsyncIO support for new comers", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Python 3", - "Databases", - "Architecture", - "APIs", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "We'll try to help everybody, especially new comers in Python, to understand better the asynchronous pattern, and AsyncIO in general.\r\n\r\nDon't hesitate to ask us any question, especially if you think it's a stupid question: No stupid questions, only stupid answers.\r\n\r\nExample of questions we'll try to answer, it's a compilation of questions we'll already received:\r\n\r\n- Where is the 101 of AsyncIO ?\r\n- When I can use AsyncIO ?\r\n- Why to add async/await keywords ? It's only aliases of @asyncio.coroutine/yield from ?\r\n- I don't understand the difference between a task and a coroutine, could you explain me ?\r\n- When I need to add await before a call function ?\r\n- How to spot quickly the code can be asynchronous with synchronous code ?\r\n- How I can use synchronous libraries in my asynchronous code ?\r\n- How to architecture my source code with AsyncIO ?\r\n- I don't understand the internals of AsyncIO with event loop and how yield from works internally. (Spoiler alert: To start to code with Python itself, did you understand before the CPython's internals ?)\r\n - Why another asynchronous network framework ? Need already covered by Twisted/Tornado/Gevent/...\r\n- Why some libraries need to be reimplemented, like aiohttp or aiopg ?\r\n- Now that Django channels exist, AsyncIO is useless, isn't it ?\r\n- What's the difference between AsyncIO and curio ?" - ], - "abstract_extra": "We'll try to be the most pedagogical as possible with some concrete examples of source code with a laptop.", - "tag_categories": [ - "Python", - "Databases", - "Programming", - "Web", - "Programming" - ], - "emails": "gmludo@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/asyncio-support-for-new-comers", - "admin_type": "", - "companies": "Eyepea/ALLOcloud" - }, - "721": { - "abstract_short": "Helpdesk will help people to know more about code analysis tools that they should be using in their projects for better, clean code. The aim is to get people familiar with static code analysis tool and how to use coala to make linting and other analysis super easy in their projects. ", - "sub_title": "Our goal is to make code analysis easy while remaining completely modular, extensible and language i", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:00:00, 2016-07-20 14:00:00, 2016-07-20 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@karansharma1295", - "id": 721, - "speakers": "Karan Sharma", - "title": "Code analysis made super easy.", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Beginners", - "Clean Code", - "Open-Source", - "Static Analysis", - "Python Software Foundation (PSF)" - ], - "abstract_long": [ - "The helpdesk will get the audience acquainted with code analysis tools and how coala helps to make this whole process of static code analysis easier. The goal of the helpdesk will be to get the user setup coala and demonstrate live on how to use it on projects etc, configure it, how to be able to customise it. coala helps to manage a lot of different tools together in one single configuration file. Also, as coala is an ever growing community of happy developers, I will assist them to get acquainted with how to contribute to coala and solve baby issues at Github to mark their first Open source contribution if they are interested in doing that. \r\n" - ], - "abstract_extra": "I've been contributing to coala since March 2016 and I am a Google Summer of Code student, working with them this year. \r\n\r\nMy code commits which have been accepted at upstream repo at coala are https://github.com/coala-analyzer/coala-bears/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Amr-karan+", - "tag_categories": [ - "Educational", - "Educational", - "Open Source", - "Everything Else", - "Community" - ], - "emails": "karansharma1295@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/code-analysis-made-super-easy", - "admin_type": "", - "companies": "coala" - }, - "668": { - "abstract_short": "Chat with the core developers about how to extend django CMS, integrate your own apps seamlessly or brainstorm a hard-to-solve problem.", - "sub_title": "Talk about your django CMS project with the core devs", - "timerange": "2016-07-21 10:30:00, 2016-07-21 12:00:00, 2016-07-21 14:00:00, 2016-07-21 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@stefanfoulis", - "id": 668, - "speakers": "Stefan Foulis", - "title": "django CMS", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Web General", - "Django", - "CMS" - ], - "abstract_long": [ - "Chat with the core developers about how to extend django CMS or how to integrate your own apps seamlessly. Lets talk about your plugins, apphooks, toolbar extensions, content-creation wizards, menu extensions or anything else django CMS related.\r\nWe can brainstorm a hard-to-solve problem you've encountered. Maybe you have the nagging feeling there ought to be simpler way to solve something you've done in a project. We're also happy to discuss feedback or ideas for something that could be added to django CMS.\r\nBring your code. Lets chat!" - ], - "abstract_extra": "My colleague has also submitted a matching training which I'll be part of: https://ep2016.europython.eu/conference/talks/application-integration-with-django-cms\r\n\r\nStefan Foulis' previous talk stuff:\r\n- various talks at local meetups in Z\u00fcrich, Switzerland\r\n- \"Local development with docker\" talk at DjangoCon 2015 (http://2015.djangocon.eu/talks/ https://vimeo.com/133154447 )\r\n- \"Advanced django CMS\" workshop at DjangoCon 2015 (http://2015.djangocon.eu/event/advanced-django-cms/)\r\n", - "tag_categories": [ - "Web", - "Application Frameworks", - "Web" - ], - "emails": "stefan@foulis.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/django-cms", - "admin_type": "", - "companies": "Divio" - }, - "553": { - "abstract_short": "Tips, best practices, health check and a general good workout for your documentation. There is both science, and art, to writing and maintaining good docs. And, as your docs are your first point of contact for new community members, there is every reason to make it the best you can.\r\n\r\nWhile this helpdesk won't *write* docs for you, we will give you a solid headstart in making them better. ", - "sub_title": "A health-check and excercise session for your docs", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:00:00, 2016-07-18 14:15:00, 2016-07-18 15:45:00", - "sub_community": "", - "duration": 180, - "twitters": "@polyester", - "id": 553, - "speakers": "Paul Roeland", - "title": "DOCtors are in!", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Communication", - "Teaching", - "Documentation", - "DevOps general", - "Community" - ], - "abstract_long": [ - "There's a whole community, and a wealth of experience, that aim to bring the science, the art, and the fun of documentation to a higher level. Come learn some best practices on how to keep your docs maintainable, testable, deployable and up to date.\r\n\r\n\"Give me your tired, your poor,\r\nYour huddled docs yearning to breathe free,\r\nThe wretched refuse of your teeming shore.\r\nSend these, the homeless, tempest-tost to me,\r\nI lift my lamp beside the golden door!\"" - ], - "abstract_extra": "We (Mikey Ariel, Maciej Szlosarczyk and me) held a similar session last year in Bilbao, which was well visited and fun to do.\r\n\r\nAs I'm traveling I haven't had time to contact them to see if they had already submitted a Helpdesk proposal. So there may be a double proposal; just wanted to get it in before the deadline.", - "tag_categories": [ - "Community", - "Everything Else", - "Programming", - "DevOps", - "Community" - ], - "emails": "paul.roeland@plone.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/doctors-are-in", - "admin_type": "", - "companies": "Plone" - }, - "594": { - "abstract_short": "Come ask me anything about Elasticsearch or associated technologies. We can talk design/use cases/integrations and/or try and debug your problems.", - "sub_title": "Ask Me Anything about deploying/architecting/scaling", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:00:00, 2016-07-20 14:00:00, 2016-07-20 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@honzakral", - "id": 594, - "speakers": "Honza Kr\u00e1l", - "title": "Elasticsearch and the Elastic Stack", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Debugging", - "Architecture", - "Best Practice", - "Scaling", - "Elastic Search" - ], - "abstract_long": [ - "Elasticsearch and other parts of the Elastic stac (beats, logstash and kibana) are becoming more popular for many different use cases - from pure search all the way to log storage and analysis.\r\n\r\nIn case you have any questions, problems or suggestions, come talk to me." - ], - "abstract_extra": "I have been working for the company behind elasticsearch for over three years, mostly developing the Python client but also doing support, training and consulting for our paying customers. I would love to help the members of the Python community to be successful when using elasticsearch.", - "tag_categories": [ - "Testing", - "Programming", - "Best Practice and Use Cases", - "DevOps", - "Databases" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/elasticsearch-and-the-elastic-stack", - "admin_type": "", - "companies": "Elastic" - }, - "740": { - "abstract_short": "> \u201cMake things as simple as possible, but not simpler.\u201d \u2014 Albert Einstein\r\n> \u201cPremature optimization is the root of all evil.\u201d \u2014 Donald E. Knuth\r\n\r\nWe've all heard that Python is slow and that we have to use a compiled language to get the maximum performance. While this is true to a certain extent, it is also true that we can work out certain bits of our Python code and gain some microseconds. Bring your code and let's try to make it as fast as possible together!", - "sub_title": "Use profiling techniques and certain Python libraries to optimize your code", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:00:00, 2016-07-19 14:00:00, 2016-07-19 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@astrojuanlu", - "id": 740, - "speakers": "Juan Luis Cano", - "title": "Make Python as fast as possible, but not faster", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Performance", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Code Analysis" - ], - "abstract_long": [ - "> \u201cMake things as simple as possible, but not simpler.\u201d \u2014 Albert Einstein\r\n> \u201cPremature optimization is the root of all evil.\u201d \u2014 Donald E. Knuth\r\n\r\nIt's often said that Python is necessarily slow and that we have to write the critical parts of our program in a compiled language to get the maximum performance. While this is true to a certain extent, it is also true that we can work out certain bits of our Python code and gain some microseconds, leaving the rewriting of our program in C++ or Fortran as a last resource.\r\n\r\nBring your slow Python algorithm and we will use profiling, memory profiling, numba and a bit of common sense to try and make it run as fast as possible! Sometimes we will be able to make some suggestions of new algorithms or architectures, other times we will be able to spot the single line that consumes 90 % of our running time, but either way we will both learn about software performance a lot.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Data Science", - "Programming" - ], - "emails": "juanlu001@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/make-python-as-fast-as-possible-but-not-faster", - "admin_type": "", - "companies": "Indizen" - }, - "514": { - "abstract_short": "Design or usage questions of mongoDB from python ? Come over and ask !", - "sub_title": "Use cases and pymongo helpdesk", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:00:00, 2016-07-19 14:00:00, 2016-07-19 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@ultrabug", - "id": 514, - "speakers": "Alexys Jacob", - "title": "Python and mongoDB", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "NoSQL", - "Use Case", - "MongoDB", - "Best Practice" - ], - "abstract_long": [ - "The Numberly DevOps team members will help and share their experience in using mongoDB on python applications.\r\n\r\nCome with your code or design questions and we'll do our best to help you find the best answers and test them live !\r\n\r\n_The Numberly team has been running mongoDB in production for more than 5 years now and used it on various use cases, from simple web applications to real time analytics serving thousands transactions per second._\r\n\r\n" - ], - "abstract_extra": "This is not a personal proposal but a team one from Numberly, at least 2 of us will be made available for this helpdesk (myself not included).", - "tag_categories": [ - "Databases", - "Best Practice and Use Cases", - "Databases", - "Best Practice and Use Cases" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-and-mongodb", - "admin_type": "", - "companies": "Numberly" - }, - "416": { - "abstract_short": "I", - "sub_title": "YAML libraries are not always the most developer friendly, stop by if you have any questions.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 12:00:00, 2016-07-22 14:00:00, 2016-07-22 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 416, - "speakers": "Anthon van der Neut", - "title": "YAML is one of the more human friendly data serialisation formats", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Data", - "Structures" - ], - "abstract_long": [ - "There are several human parsable data serialisation possibilities but there are only a handful that are human friendly. Arbitrarily human friendly means that:\r\n - you can include comments in your format to explain things to other readers\r\n - it means what you think that it means\r\n - no need to quote things that are clear without\r\n - visual nesting through indentation, not through lisp like ( (( (()()))) or \r\n- easy to edit without breaking things (trailing comma's anyone).\r\n\r\nYAML supports most of the above, but the \"standard\" YAML library would \r\n- rearrange mapping (dictionary) entries on dumping making comparison using diff difficult\r\n- drop comments when reading data to YAML, so dumping leads to data loss for humans\r\n- was not updated for YAML 1.2 published in 2009\r\nby upgrading the standard library to deal with these issues in the increasingly often used ruamel.yaml round-trip library, in-dept knowledge was built up both on how to effectively use YAML as well on how to do some unplanned for things in YAML. \r\nPlease stop by with any questions you have beginner, or advanced on how to make the use of YAML in you project not only more human-friendly, but also more developer friendly. \r\n(You're also welcome if you don't understand how someone can like to work with JSON)\r\n\r\n" - ], - "abstract_extra": "I have professionally supported many developers that worked (in)directly for me or for other departments in the organisation I was employed.\r\n\r\nI like helping out people and online I do so both on StackOverflow (primarily\r\nanswering [YAML related questions][1], on [Unix&Linux][2] and [Ebooks][3] StackExchange\r\n\r\n [1]: http://stackoverflow.com/search?q=user%3A1307905+[yaml]+is%3Aanswer\r\n [2]: http://unix.stackexchange.com/users?tab=Reputation&filter=all\r\n [3]: http://ebooks.stackexchange.com/users?tab=Reputation&filter=all\r\n", - "tag_categories": [ - "", - "" - ], - "emails": "a.van.der.neut@ruamel.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/yaml-is-one-of-the-more-human-friendly-data-serialisation-format", - "admin_type": "", - "companies": "RUAMEL bvba" - } - }, - "interactive": { - "572": { - "abstract_short": "Technical debt lives among us regardless if we are in the services business or building products. \r\nWe discuss about it, we try to fix it or live with it, but can we actually prevent it? \r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay.\r\nWhat qualifies as debt? What qualifies as interest? How do we manage it? Is it really unavoidable?", - "sub_title": "", - "timerange": "2016-07-18 14:15:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 60, - "twitters": "@mircea_zetea", - "id": 572, - "speakers": "Mircea Zetea", - "title": "Managing technical debt", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Management", - "Best Practice", - "Business Track" - ], - "abstract_long": [ - "Technical debt lives among us regardless if we are in the services business or building products. \r\nWe discuss about it, we try to fix it or live with it, but can we actually prevent it? \r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay.\r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay. Comparing the two, probably the highest cost that we see is with the interest.\r\n As our code base grows and our deadlines get tougher we tend to forget about the cost our project will have to pay for every functionality that we implement in a hurry, for which we \u201cforget\u201d about tests or for which we write in a comment \u201cthis needs to be refactored\u201d or \u201cthis is a temporary solution. refactor later\u201d.\r\nWhat qualifies as debt? What qualifies as interest? How do we manage it? At what levels in our projects can we see the debt and the interest? Is it really unavoidable? " - ], - "abstract_extra": "", - "tag_categories": [ - "Development Methods", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "mircea@zetea.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-technical-debt", - "admin_type": "", - "companies": "Spyhce" - }, - "510": { - "abstract_short": "Sharing our worst production experiences and the tricks, good practices and code we developed to address them.", - "sub_title": "Let's share our worst experiences and tricks we used to avoid them", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@ultrabug, @r4mnes", - "id": 510, - "speakers": "Alexys Jacob, Guillaume Gelin", - "title": "Planning for the worst", - "have_tickets": [ - true, - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "The Answer to Life the Universe and Everything Else", - "Use Case", - "Best Practice", - "Mind Bending", - "failures/mistakes" - ], - "abstract_long": [ - "This talk is about sharing our experience about how we handled production problems on all levels of our applications.\r\n\r\nWe'll begin with common problems, errors and failures and dig on to more obscure ones while sharing concrete tips, good practices and code to address them !\r\n\r\nThis talk will make you feel the warmth of not being alone facing a problem :)", - "", - "", - "" - ], - "abstract_extra": "Can also be a \"standard\" talk, I just wanted to try the idea of having it more interactive with the audience because a lot of people can relate to quick a lot of problems.\r\n\r\nThere will be slides to guide the conversation but it will be open to everyone to share their experience.", - "tag_categories": [ - "Everything Else", - "Best Practice and Use Cases", - "Best Practice and Use Cases", - "Everything Else", - "Best Practice and Use Cases" - ], - "emails": "ultrabug@ultrabug.net, ramnes@1000mercis.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/planning-for-the-worst", - "admin_type": "", - "companies": "Numberly" - }, - "712": { - "abstract_short": "First we will talk about coding interviews: How to prepare and\r\nwhat to expect. Then, we will cover software engineering resumes, typical coding\r\nquestions and tasks that companies usually give to candidates.\r\n\r\nWe end with a discussion on long-term career paths\r\nof software engineers. The hypothesis is that true engineering careers\r\nexist at maybe Google but normal firms unfortunately only allow growth by\r\nforcing engineers into management.", - "sub_title": "Going from junior to senior and from interviewee to interviewer", - "timerange": "2016-07-19 14:00:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@", - "id": 712, - "speakers": "Iwan Gulenko", - "title": "Programming interviews and careers", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "General", - "Use Case", - "Business", - "Best Practice", - "failures/mistakes" - ], - "abstract_long": [ - "First we will talk about coding interviews: How to prepare and\r\nwhat to expect. Then, we will cover software engineering resumes, typical coding\r\nquestions and tasks that companies usually give to candidates.\r\n\r\nWe end with a discussion on long-term career paths\r\nof software engineers. The hypothesis is that true engineering careers\r\nexist at maybe Google but normal firms unfortunately only allow growth by\r\nforcing engineers into management." - ], - "abstract_extra": "", - "tag_categories": [ - "", - "Best Practice and Use Cases", - "", - "Best Practice and Use Cases", - "Best Practice and Use Cases" - ], - "emails": "iwan@gulenko.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/coding-interviews-what-to-expect-and-how-to-prepare", - "admin_type": "", - "companies": "" - }, - "697": { - "abstract_short": "EuroPython Meeting of the Python Software Foundation\r\n\r\nMembers and non-members are invited to this EuroPython meeting of the PSF! Please join us for some updates from the PSF board.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@NaomiCeder", - "id": 697, - "speakers": "Naomi Ceder", - "title": "PSF Meeting", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Conferences and Meet-Ups", - "Python Software Foundation (PSF)", - "Community" - ], - "abstract_long": [ - "EuroPython Meeting of the Python Software Foundation\r\n\r\nMembers and non-members are invited to this EuroPython meeting of the PSF! Please join us for some updates from the PSF board.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "naomi.ceder@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/psf-meeting-2016", - "admin_type": "", - "companies": "Trans*Code" - }, - "639": { - "abstract_short": "This interactive game teaches the basic of ip and ethernet protocol using just paper and pens, and become very popular with our interns and in our LUG meetings. \r\n\r\nParticipants are divided in teams, simulating simple network infrastructures (eg. computers connected by an hub and a switch).\r\n", - "sub_title": "Learn IP protocol basics with an interactive game.", - "timerange": "2016-07-18 16:00:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@ioggstream", - "id": 639, - "speakers": "Roberto Polli", - "title": "The Router Game", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Internet of Things (IoT)" - ], - "abstract_long": [ - "This interactive game teaches the basic of ip and ethernet protocol using just paper and pens, and become very popular with our interns and LUG meetings. \r\n\r\nParticipants are divided in teams, simulating simple network infrastructures (eg. computers connected by an hub and a switch).\r\n\r\nEvery player has a role: a PC or mobile phone, an HUB, a Switch, a Router, and must communicate with the others following the associate specification (eg. an hub should broadcast message to every neighbour, a switch should populate the mac address table, ...)\r\n\r\nThe team which is faster in exchanging messages wins.\r\n\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Hardware" - ], - "emails": "robipolli@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-router-game", - "admin_type": "", - "companies": "Par-Tec Spa" - } - }, - "talk": { - "729": { - "abstract_short": "Creating 3D model for 3D printing is pretty hard for non 3D CG designer or non 3D CAD engineer. But recently, so many 3D software (like Maya, Blender, Fusion360 and so on) provides Python API to manipulate 3D data in those software. So in this session, I will introduce Python API of Blender and Autodesk Fusion 360 and share some basic knowledge and tips when you use these API. I will also introduce my past projects with those APIs.", - "sub_title": "Generate 3D model for 3D printing using Python API proveded by 3D softwares", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@taxpon", - "id": 729, - "speakers": "Takuro Wada", - "title": "3D Modeling and Printing by Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Developing with Python", - "3D", - "Blender" - ], - "abstract_long": [ - "### Abstract\r\n\r\n- Creating 3D model for 3D printing is pretty hard for **non 3D CG designer or non 3D CAD \r\nengineer**.\r\n\r\n- Recently, so many 3D software (like Maya, Blender, Fusion360 and so on) provides Python API to manipulate 3D data in those software. Once you learn these Python API, you can generate 3D model by Python and 3D print those generated model.\r\n\r\n- In this session, I will introduce Python API of some softwares and share some basic knowledges and tips when you use these API. I will also introduce my past projects with those APIs and my products.\r\n\r\n![][1]\r\n\r\n### Goal\r\n- Introduce 3D model generation and 3D printing with Python to audience\r\n\r\n### After this session, you will\r\n- Acquire the basic knowledge of 3D data structure\r\n- Understand basic concepts of Python API provided by 3D softwares\r\n- Acquire knowledge to start your 3D model generation project by Python\r\n- Know past 3D model generation projects by Python\r\n\r\n### Prerequisite\r\n- Basic knowledge of Python\r\n- Interests for 3D modeling and 3D printing by Python\r\n\r\n [1]: http://takuro.ws/img/euro_python.jpg\r\n" - ], - "abstract_extra": "### Blog articles about 3D manipulation by Python\r\n- Articles about 3D modeling for 3D printing by Python (only Japanese)\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-1][1]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-2][2]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-3][3]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-4][4]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-5][5]\r\n - Sample codes\r\n - [https://github.com/kabuku/blender-python][6]\r\n\r\n- 3D model and Minecraft (only Japanese)\r\n - [http://www.kabuku.co.jp/developers/blender2minecraft-by-python][7]\r\n - Source code\r\n - [https://github.com/taxpon/b2mine][8]\r\n\r\n### Created library to manipulate 3D model\r\n- [Pymesh][9]\r\n- [Openpyscad][10]\r\n\r\n### Presentation Slides\r\n- Past talks\r\n - [http://www.slideshare.net/TakuroWada/3d-modeling-by-python-scripts][11]\r\n - [http://www.slideshare.net/TakuroWada/3d-printing-by-python-scripts-and-blender-54557221][12]\r\n\r\n [1]: https://www.rinkak.com/jp/blog/blender-python-modeling-1\r\n [2]: https://www.rinkak.com/jp/blog/blender-python-modeling-2\r\n [3]: https://www.rinkak.com/jp/blog/blender-python-modeling-3\r\n [4]: https://www.rinkak.com/jp/blog/blender-python-modeling-4\r\n [5]: https://www.rinkak.com/jp/blog/blender-python-modeling-5\r\n [6]: https://github.com/kabuku/blender-python\r\n [7]: http://www.kabuku.co.jp/developers/blender2minecraft-by-python\r\n [8]: https://github.com/taxpon/b2mine\r\n [9]: https://github.com/taxpon/pymesh\r\n [10]: https://github.com/taxpon/openpyscad\r\n [11]: http://www.slideshare.net/TakuroWada/3d-modeling-by-python-scripts\r\n [12]: http://www.slideshare.net/TakuroWada/3d-printing-by-python-scripts-and-blender-54557221", - "tag_categories": [ - ">>> Suggested Track", - "Everything Else", - "Everything Else" - ], - "emails": "taxpon@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/3d-modeling-and-printing-by-python", - "admin_type": "", - "companies": "Kabuku Inc." - }, - "509": { - "abstract_short": "The Pymongo driver is one of MongoDB\u2019s most popular driver interfaces for\r\nconnecting to MongoDB. But developers rarely look under the cover to see\r\nwhat\u2019s happening inside the driver.\r\nBy having a deeper insight into how the driver constructs server requests\r\nand responds, developers will be able to write more effective MongoDB\r\napplications in Python.", - "sub_title": "What work does the driver do before sending requests to the MongoDB server", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@jdrumgoole", - "id": 509, - "speakers": "Joe Drumgoole", - "title": "A deep dive into the Pymongo MongoDB driver", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Educational Track", - "MongoDB", - "Open-Source" - ], - "abstract_long": [ - "*The Pymongo driver is one of MongoDB\u2019s most popular driver interfaces for\r\nconnecting to MongoDB. But developers rarely look under the cover to see\r\nwhat\u2019s happening inside the driver. *\r\n\r\n*By having a deeper insight into how the driver constructs server requests\r\nand responds, developers will be able to write more effective MongoDB\r\napplications in Python.*\r\n\r\n*We will look at :*\r\n\r\n-\r\n\r\n*Initial connection*\r\n-\r\n\r\n*A query*\r\n-\r\n\r\n*A simple write operation*\r\n-\r\n\r\n*A bulk write operation*\r\n-\r\n\r\n*How the driver responds when we have a node failure*\r\n\r\n*We will also give insight into the driver\u2019s approach to server selection\r\nwhen connecting to a replicas set (a multi-node instance of MongoDB).*", - "", - "", - "" - ], - "abstract_extra": "I've been doing public presentations for over twenty years. I'm a regular speaker at MongoDB technical events .\r\n\r\n", - "tag_categories": [ - ">>> Suggested Track", - "Databases", - "Open Source" - ], - "emails": "joe.drumgoole@10gen.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-deep-dive-into-the-pymongo-mongodb-driver", - "admin_type": "", - "companies": "MongoDB" - }, - "409": { - "abstract_short": "A gentle introduction to neural networks, and making your own with Python.\r\n\r\nThis session is deliberately designed to be accessible to everyone, including anyone with no expertise in mathematics, computer science or Python.\r\n\r\nFrom this session you will have an intuitive understanding of what neural networks are and how they work. If you are more technically capable, you will see how you could make your own with Python and numpy.", - "sub_title": "Gain an understanding of the ideas behind simple neural networks, and make your own with Python.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@postenterprise", - "id": 409, - "speakers": "Tariq Rashid", - "title": "A Gentle Introduction to Neural Networks (with Python)", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Python 3", - "Beginners", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Algorithms", - "Machine-Learning" - ], - "abstract_long": [ - "A gentle introduction to neural networks, and making your own with Python.\r\n\r\nThis session is deliberately designed to be accessible to everyone, including anyone with no expertise in mathematics, computer science or Python.\r\n\r\nFrom this session you will have an intuitive understanding of what neural networks are and how they work. If you are more technically capable, you will see how you could make your own with Python and numpy.\r\n\r\nPart 1 - Ideas:\r\n - the search for AI, hard problems for computers easy fro humans\r\n - learning from examples (simple classifier)\r\n - biologically inspired neurons and networks\r\n - training a neural network - the back propagation breakthrough\r\n - matrix ways of working (good for computers)\r\n\r\nPart 2 - Python:\r\n - Python is easy, and everywhere\r\n - Python notebooks\r\n - the MNIST data set\r\n - a very simple neural network class\r\n - focus on concise and efficient matrix calculations with bumpy\r\n - 97.5% accuracy recognising handwritten numbers - with just a few lines of code!\r\n\r\nPart 3 - Q&A\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "The core reason for my proposal is to open access to interesting ideas to as many people as possible - especially those with no technical background, and no university level expertise in maths or computer science.\r\n\r\nI seem to have a talent for this - and enjoy this immensely. \r\n\r\nI have started teaching Python in London (eg Meetups) for complete beginners, and they are well received and over subscribed. \r\n\r\nI have a book published, introducing complete beginners or students of approx age 15, to fractals using complex numbers, and introducing them to Python to make their own. The book is well reviewed and sells approx 3 a week, and was serialised in Linux Voice magazine.\r\nhttp://www.amazon.com/dp/B00JFIEC2A\r\nhttp://makeyourownmandelbrot.blogspot.com\r\n\r\nMy latest book (almost published) applies the same idea of making complex and sometimes scary concepts accessible and easy to as many people as possible. \r\nhttp://makeyourownneuralnetwork.blogspot.co.uk\r\n\r\nQualifications? Why should anyone believe me?\r\nI have a degree in Physics from Cambridge University, and a second Masters degree in Machine Leaning and Data Mining.\r\nI have worked in tech in some serious organisations like civil nuclear, international finance and media, and most recently in the UK government. If you search google, you'll find talks on open source, digital and security reform by myself - eg http://www.embecosm.com/2015/11/17/how-to-start-your-own-open-source-business/", - "tag_categories": [ - "Python", - "Educational", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "tariq.rashid50@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-gentle-introduction-to-neural-networks-with-python", - "admin_type": "", - "companies": "Digital Dynamics" - }, - "561": { - "abstract_short": "At the LEAP Encryption Access Project we aim to make secure communications both easy to use and easy to provide.\r\n\r\nWe bring some tales (and some, hopefully, tools) from the quest for user-friendly crypto software. How to make people love the email experience in the 21st century, without risking their privacy. How to encrypt data locally, sync it to servers that you can lose, and still be sexy.", - "sub_title": "tales and tools for applications that need encrypted, synchronized data, with minimal-trust servers", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 561, - "speakers": "Kali Kaneko", - "title": "Against the silos: usable encrypted email & the quest for privacy-aware services", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Fun and Humor", - "clients", - "Distributed Systems", - "Cryptography", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "Technologies that allow for privacy in the communications, allowing the escape from the pervasive massive surveillance, have been there for some years now, but yet its use by the general public is far from widespread. The challenge, in our view, can be defined by one of making usable crypto. Usable for the end user, usable for the sysadmin and for the fellow application developer. In the quest for massive adoption of encryption technologies, we've been forging several python packages to solve different problems, always standing in the shoulders of giants. \r\nWe bring some tales from the trenches to share, from our humble experience trying to deploy clients and servers to provide Secured Encrypted Internet Tunnels and Encrypted Email. This includes interesting challenges dealing with key management, automatic and secure software updates, and processing of email while using stock cloud providers, while still being resistant to hostile environments.\r\nWe'll show a webmail email user agent based on this architecture, a promising future for decentralization and privacy.\r\nWe'll also talk about how to store locally encrypted data, and will present Soledad (Synchronization of Locally Encrypted Data Across Devices). Soledad is a library with server and client components that allows the development of different applications based on client-side, end-to-end and cloud-syncable encryption of private data. We'll play with some toy apps to showcase its features and potential." - ], - "abstract_extra": "https://github.com/leapcode/\r\nhttps://leap.se/docs/\r\nsome previous presentations at (random order):\r\nHOPE, IFF, hackmeeting, squatconf", - "tag_categories": [ - "Everything Else", - "Business", - "DevOps", - "Security", - "Programming" - ], - "emails": "bennomadic@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/against-the-silos-usable-encrypted-email-the-quest-for-privacy-aware-services", - "admin_type": "", - "companies": "LEAP Encrypted Access Project" - }, - "715": { - "abstract_short": "This is a look behind the scenes at Winton Capital Management- one of Europe\u2019s most successful systematic investment managers. The talk will mainly focus on how Python gives researchers fine-grained control over the data and trading systems, without requiring them to interact directly with the underlying, highly-optimised technology.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@, @", - "id": 715, - "speakers": "iztok kucan, Joris Peeters", - "title": "Algorithmic Trading with Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Algorithms" - ], - "abstract_long": [ - "Have you ever wondered what technologies are used in a systematic trading system that utilises computer models and accounts for the majority of trading on the stock market? This is a look behind the scenes at Winton Capital Management- one of Europe\u2019s most successful systematic investment managers. In this talk, we\u2019ll run through an overview of Winton\u2019s trading infrastructure, including data management, signal generation and execution of orders on global exchanges. The talk will mainly focus on how Python gives researchers fine-grained control over the data and trading systems, without requiring them to interact directly with the underlying, highly-optimised technology.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science" - ], - "emails": "i.kucan@wintoncapital.com, j.peeters@wintoncapital.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/algorithmic-trading-with-python", - "admin_type": "", - "companies": "" - }, - "584": { - "abstract_short": "Deep learning: how it works, how to train a deep neural network, the theory behind deep learning, recent developments and applications.", - "sub_title": "", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:15:00", - "sub_community": "pydata", - "duration": 60, - "twitters": "@Brittix1023", - "id": 584, - "speakers": "Geoff French", - "title": "An Introduction to Deep Learning", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Deep Learning", - "Science Track", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "In the last few years, deep neural networks have been used to generate state of the art results in image classification, segmentation and object detection. They have also successfully been used for speech recognition and textual analysis. In this talk, I will give an introduction to deep neural networks. I will cover how they work, how they are trained, and a little bit on how to get going. I will briefly discuss some of the recent exciting and amusing applications of deep learning. The talk will primarily focus on image processing." - ], - "abstract_extra": "I have given this talk previously at PyData London and at the Cambridge Python User Group where it was well received:\r\nSlides are here:\r\nhttps://speakerdeck.com/britefury/introduction-to-deep-learning-cambridge-python-user-group\r\n", - "tag_categories": [ - "Data Science", - ">>> Suggested Track", - "Data Science", - "Data Science" - ], - "emails": "britefury@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/an-introduction-to-deep-learning", - "admin_type": "", - "companies": "" - }, - "670": { - "abstract_short": "Docker is a powerful tool for packaging software and services in containers and running them on a virtual infrastructure. Python is a very powerful language for data analysis. What happens if we combine the two? We get a very versatile and robust system for analyzing data at small and large scale!\r\n\r\nI will show how we can make use of Python and Docker to build repeatable, robust data analysis workflows which can be used in many different contexts (possibly with a live demo).", - "sub_title": "Creating reproducible and robust data analysis workflows with containers", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@japh44", - "id": 670, - "speakers": "Andreas Dewes", - "title": "Analyzing Data with Python & Docker", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Deployment/Continuous Integration and Delivery", - "Docker", - "Data Science" - ], - "abstract_long": [ - "Docker is a powerful tool for packaging software and services in containers and running them on a virtual infrastructure. Python is a very powerful language for data analysis. What happens if we combine the two? We get a very versatile and robust system for analyzing data at small and large scale!\r\n\r\nI will show how we can make use of Python and Docker to build repeatable, robust data analysis workflows that can be used in many different contexts. I will explain the core ideas behind Docker and show how they can be useful in data analysis. I will then discuss an open-source Python library (Rouster) which uses the Python Docker-API to analyze data in containers and show several interesting use cases (possibly even a live-demo).\r\n\r\nOutline:\r\n\r\n1. Why data analysis can be frustrating: Managing software, dependencies, data versions, workflows\r\n2. How Docker can help us to make data analysis easier & more reproducible\r\n3. Introducing Rouster: Building data analysis workflows with Python and Docker\r\n4. Examples of data analysis workflows: Business Intelligence, Scientific Data Analysis, Interactive Exploration of Data\r\n5. Future Directions & Outlook" - ], - "abstract_extra": "This is a technical talk about data analysis & Python intended for the PyData conference. I have started using Docker and Python for data analysis recently and I think the topic could be very interesting to the Python & data analysis community. I also work on an open-source library for data analysis using Python & Docker called *Rouster* (http://rouster.7scientists.com), which makes it very easy to build data analysis workflows with Python and Docker. I want to use the talk to introduce the tool to a wider audience and get feedback and ideas for the further development (currently the tool is still in its alpha stage).\r\n\r\n", - "tag_categories": [ - "DevOps", - "DevOps", - "Data Science" - ], - "emails": "andreas.dewes@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/analyzing-data-with-python-docker", - "admin_type": "", - "companies": "7scientists UG" - }, - "585": { - "abstract_short": "Many of us have been taught to code, but we know that software engineering jobs are so much more than that.\r\nProgrammers can spend 5-6 hours per week on code review, but doing that is almost ignored as a skill.\r\nHow many of us have seen poor reviews, which don't catch bugs, make people feel bad or block important features being merged?\r\nAn introduction to what code review is alongside guidelines, tips, tricks and anecdotes to help make your code reviews be as productive as possible.", - "sub_title": "Improve your code and your team by reviewing code (well)", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@adamdangoor", - "id": 585, - "speakers": "Adam Dangoor", - "title": "Another pair of eyes: Reviewing code well", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Clean Code", - "Tooling", - "Best Practice", - "Development" - ], - "abstract_long": [ - "Many of us have been taught to code, but we know that software engineering is so much more than that. Programmers can spend 5-6 hours per week on code review, but doing that is almost ignored as a skill, and instead it is often treated as a rote chore.\r\n\r\nHow many of us have seen poor reviews - those which upset people, don't catch bugs or block important features being merged? This talk explores the social and technical impacts of various code review practices as well as helpful tooling. The goal is to provide a structure to help improve how teams review code, and to introduce the costs and benefits of code review to anyone unfamiliar with the practice.\r\n\r\nThere are always trade-offs to be made - e.g. think how costly a security flaw in this code could be to your organisation - perhaps intense scrutiny is not necessary for prototypes soon to be thrown away. It is useful to consider the trade-offs in order to optimise for a particular problem domain. Perhaps right now it is more important to look for issues with maintainability, functionality or performance.\r\n\r\nI talk about how some fantastic code reviews from mentors, colleagues and strangers have helped me become a better programmer and team member, as well as occasions where code review has been detrimental by slowing things down and causing arguments.\r\n\r\nThis is aimed at everyone from beginner to advanced programmers." - ], - "abstract_extra": "I gave my first conference talk last year at Write the Docs Prague - I was nervous but it went down well. The video is at https://www.youtube.com/watch?v=PoVwyPipHzc. The talk was on the topic of how to keep instructions in software documentation working as the code changes.", - "tag_categories": [ - "Educational", - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "adamdangoor@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/another-pair-of-eyes-reviewing-code-well", - "admin_type": "", - "companies": "" - }, - "562": { - "abstract_short": "In this talk we show how the Go language helped us get a high performance in a concise and simple API. Everything will be exemplified using the backdrop of a real case of Globo.com: API registrations. We will see how we went from 200 to 19,000 records per second to the impacts of this rapid growth and the consequences of Go of use. We also show how our microservices architecture was used in the project.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@ViniciusPach", - "id": 562, - "speakers": "Vinicius Pacheco", - "title": "APIs and Microservices With Go", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Architecture", - "Go-Lang", - "Microservices" - ], - "abstract_long": [ - "This talk is about Go, software architecture and parallelism. How we went from legacy, complex and slow software to new, speed, resilient and maintainable software.\r\nI'll start the talk showing the problemas and the challenges that my team had received. After that, I'll show the tests, tests of performance and the options that we did considering technologies and strategies of development. The difficulties and problems also will be show. Also I talk about:\r\n\r\n- Goroutines\r\n- Resilient patterns\r\n- Go tools\r\n- Architecture\r\n- Web performance\r\n\r\nHow we leave of the Java ecosystem to new free ecosystem with microservices and how Go help us." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Other Programming Languages", - "Programming" - ], - "emails": "vfpweb@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/apis-and-microservices-with-go", - "admin_type": "", - "companies": "globo.com" - }, - "547": { - "abstract_short": "async/await is here, everybody can use it in Python 3.5. It's great and awesome, yet only a few understand it. As a PEP 492 author, I'd really like to have a chance to better explain the topic, show why async/await is important and how it will affect Python. I'll also tell a story on how I worked on the PEP -- starting from an idea that I discussed with Guido on PyCon US 2015, and landing to CPython source code one and a half moths later!", - "sub_title": "What and why is async/await in Python, and where it's headed", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@1st1", - "id": 547, - "speakers": "Yury Selivanov", - "title": "async/await in Python 3.5 and why it is awesome", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python 3", - "Educational Track", - "Architecture", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "The talk will start with a brief coverage of the story of asynchronous programming in Python -- Twisted, Tornado, Stackless Python & greenlets, eventlet, Tornado, asyncio & curio. We've come a really long road, and it's important to understand how we ended up with async/await.\r\n\r\nThen I'll go over asyncio and curio, showing async/await by example, explaining that in reality it's a very easy to use language feature. You don't need to know all the details to be able to successfully use the new syntax, and even build new frameworks on top of it.\r\n\r\nI'll then explain the async/await machinery in CPython, starting with generators and 'yield' expression, showing what is 'yield from' and finally, demonstrating how async/await is implemented in CPython. This will ensure that those who want to invent some new crazy ways of using async/await will have a starting point!\r\n\r\nI'll end the talk with a story of how I came up with the idea. How I shared it with Guido van Rossum, Victor Stinner, and Andrew Svetlow. How the first version of the PEP was born, and how we managed to push it to Python 3.5 in under two months period. The goal is to make people understand that it's possible to change your programming language -- in fact, Python, as any other programming language, wants new features and capabilities to be relevant." - ], - "abstract_extra": "I'm the author and implementor of PEP 492 -- async/await syntax in Python 3.5. I'm also working on a new PEP to add asynchronous generators in CPython 3.6. If it's accepted before the EuroPython (there chances are high!) I'll have a unique opportunity to be the first one to present it to the EuroPython crowd!", - "tag_categories": [ - "Python", - ">>> Suggested Track", - "Programming", - "Programming" - ], - "emails": "yury@magic.io", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/asyncawait-in-python-35-an-why-it-is-awesome", - "admin_type": "", - "companies": "MagicStack" - }, - "687": { - "abstract_short": "Introducing asynchronous calls from within an endpoint in a web app can be desirable but hard to achieve.\r\nThis talk will explore different solutions for this (running Twisted event loop, Co-Routines, Asyncio, \u2026) and how well they play with the different parallelization models of common WSGI web servers.", - "sub_title": "", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@laucia_julljen", - "id": 687, - "speakers": "Lauris Jullien", - "title": "Asynchronous network requests in a web application", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "In the more and more popular SOA paradigm, it\u2019s common for services to have to compose responses with resources from many different services. Everyone\u2019s first idea will probably be to call each service synchronously with your favorite python HTTP library. This unfortunately doesn\u2019t scale well and tens of successive network calls will make your endpoints painfully slow. \r\n\r\nOne solution is to parallelize these network calls. If you are already using an asynchronous web app (such as Tornado or Twisted), more asynchronous in your asynchronous shouldn\u2019t be much of a challenge. But if you chose not to dive into the madness of chained Deferred calls, and used a standard prefork/threaded WSGI web server (such as Gunicorn or uWSGI) to run your Django/Flask/Pyramid application, you might find yourself wondering how to manage these asynchronous calls.\r\n\r\nThis talk will explore different solutions (running Twisted event loop, Co-Routines, Asyncio, \u2026) and how well they play with the different parallelization models of WSGI web servers." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Web", - "Programming" - ], - "emails": "lauris@yelp.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/asynchronous-network-requests-in-a-web-application", - "admin_type": "", - "companies": "Yelp" - }, - "467": { - "abstract_short": "At Ableton we love music and we love open-source. Ansible is an amazing tool which allows us to free more time for music by automating boring and repetitive tasks, and to contribute back to the open-source community with ease. Here's an opportunity to share our love for it, our experience with it, and our contributions to it with you. ", - "sub_title": "Automate everything and contribute back to the community with ansible", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@oleiade", - "id": 467, - "speakers": "Theo Crevon", - "title": "Automate, contribute, repeat.", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Infrastructure", - "Open-Source", - "Development", - "DevOps general" - ], - "abstract_long": [ - "Computers are never as convenient as when they work for us. If you agree with this motto, then Ansible, a deployment and automation tool written in Python, might come in handy.\r\n\r\nAt Ableton, Ansible is involved in every aspect of deployment and automation. From local machine setup, to vm creation and deployment in our self-hosted datacenter, to our services in the immensity of the cloud.\r\n\r\nBecause it is dead simple to use, can deal with any number of hosts in parallel and has robust compatibility with Unix as well as Windows systems, you will probably never have to write a shell script again.\r\n\r\nBecause it is written in Python and exposes a clean, extensible and easy to adapt design and architecture; contributing features to the project and fixing the bugs you might encounter during the journey is extremely easy. \r\n\r\nAt Ableton we love music and we love open-source. Ansible is an amazing tool which allows us to free more time for music by automating boring and repetitive tasks, and to contribute back to the open-source community with ease. Here's an opportunity to share our love for it, our experience with it, and our contributions to it with you. \r\n\r\nAutomate, contribute, repeat. " - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Open Source", - "Programming", - "DevOps" - ], - "emails": "tcr@ableton.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/automate-contribute-repeat", - "admin_type": "", - "companies": "Ableton" - }, - "476": { - "abstract_short": "A modern application has a lot of passwords and keys floating around. Encryptions keys, database passwords, and API credentials; often typed in to text files and forgotten. Fortunately a new wave of tools are emerging to help manage, update, and audit these secrets. Come learn how to avoid being the next TechCrunch headline. ", - "sub_title": "", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 476, - "speakers": "Noah Kantrowitz", - "title": "Behind Closed Doors: Managing Passwords in a Dangerous World", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Configuration Management (Ansible/Fabric/Chef/...)", - "DevOps general" - ], - "abstract_long": [ - "Secrets come in many forms, passwords, keys, tokens. All crucial for the operation of an application, but each dangerous in its own way. In the past, many of us have pasted those secrets in to a text file and moved on, but in a world of config automation and ephemeral microservices these patterns are leaving our data at greater risk than ever before.\r\n\r\nNew tools, products, and libraries are being released all the time to try to cope with this massive rise in threats, both new and old-but-ignored. This talk will cover the major types of secrets in a normal web application, how to model their security properties, what tools are best for each situation, and how to use them with major web frameworks." - ], - "abstract_extra": "## Outline\r\n\r\n* Intros\r\n* Types of secrets\r\n * Passwords (internal control)\r\n * Key files (TLS, whole files)\r\n * Tokens (external control)\r\n * Other (PCI, etc)\r\n * Hot vs. cold access\r\n* Properties of a secrets management system\r\n * Audit trail\r\n * Least access\r\n * Integrations\r\n * Pre-encryption systems\r\n* The usual solutions, and why they are dangerous\r\n* Attack surfaces and threat modelling\r\n * Code leak\r\n * Backup leak\r\n * Directory traversal/transclude\r\n * RCE\r\n * Laptop theft\r\n * Higher power (gov, etc)\r\n* Identity Management\r\n * Tokens\r\n * Cloud Systems\r\n * HSMs\r\n* Tools\r\n * Text files\r\n * Chef encrypted bags\r\n * Ansible Vault\r\n * Chef Vault\r\n * Hashicorp Vault\r\n * KeyWhiz\r\n * AWS KMS\r\n * Sneaker\r\n * Confidant\r\n * Trousseau\r\n * Sops\r\n * Red October\r\n * Barbican\r\n * Conjur\r\n* Framework Integration\r\n * HVAC\r\n * KeywhizFS\r\n * Consul Template\r\n * botocore\r\n", - "tag_categories": [ - "Security", - "DevOps", - "DevOps" - ], - "emails": "coderanger@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/behind-closed-doors-managing-passwords-in-a-dangerous-world", - "admin_type": "", - "companies": "" - }, - "487": { - "abstract_short": "\r\nl\r\nThis talk show how a to create a simple, evolving, client server architecture combining zeromq, selenium and beautifulsoup, which allows you to scrape data even from variable dynamic sites like Sporcle and KhanAcademy. Once the page analysis has been implemented regular \"downloads\" can easily be deployed without cluttering your desktop, your headless server and/or anonymously.\r\n", - "sub_title": "Choosing the right combination of tools for getting data from the web can make your life easier", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 487, - "speakers": "Anthon van der Neut", - "title": "Beyond scraping, getting data from dynamic, heavily javascript driven, websites", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Tooling", - "Web Crawling", - "Web Track" - ], - "abstract_long": [ - "Scraping static websites can be done with `urllib2` from the standard library, or with some slightly more sophisticated packages like `requests`. \r\nHowever as soon as JavaScript comes into play on the website you want to download information from, for things like logging in via openid or constructing the pages content, you almost always have to fall back to driving a real browser.\r\nFor web sites with variable content this is can be time consuming and cumbersome process.\r\n\r\nThis talk show how a to create a simple, evolving, client server architecture combining zeromq, selenium and beautifulsoup, which allows you to scrape data from sites like Sporcle, StackOverflow and KhanAcademy. Once the page analysis has been implemented regular \"downloads\" can easily be deployed without cluttering your desktop, your headless server and/or anonymously.\r\n\r\nThe described client server setup allows you to restart your changed analysis program without having to redo all the previous steps of logging in and stepping through instructions to get back to the page where you got \"stuck\" earlier on. This often decreases the time between entering a possible fix in your HTML analysis code en testing it, down to less than a second from a few tens of seconds in case you have to restart a browser.\r\n\r\nUsing such a setup you have time to focus on writing robust code instead of code that breaks with every little change the sites designers make." - ], - "abstract_extra": "I have previously spoken at PyCon 2006 in Dallas and at other conferences, non-python related, in the Netherlands, when I still lived there.\r\nI will prepare some new and update some existing packages on PyPI so that attendees can easily reproduce the presented talk on their own.", - "tag_categories": [ - "Programming", - "Web", - ">>> Suggested Track" - ], - "emails": "a.van.der.neut@ruamel.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/beyond-scraping-getting-data-from-dynamic-heavily-javascript-driven-websites", - "admin_type": "", - "companies": "RUAMEL bvba" - }, - "392": { - "abstract_short": "This talk is about using our **Python** skills to explore the **secrets of our brains**. Using the Neurosky Mindwave as a bluetooth connected EEG device, I'll talk about new experiments I have performed inside the Jupyter notebook, for example \"Evoked Response Potentials\" and more about \"Neuro Feedback\" training. \r\n\r\n", - "sub_title": "Hacking the brain", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@BayesianHorse ", - "id": 392, - "speakers": "Andreas Klostermann", - "title": "Brainwaves for Hackers 3.0", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Beginners", - "Other Hardware", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "Electroencephalography **(EEG)** measures potential waves originating within the brain. Billions of brain cells fire inside your brain, each sending out a minuscule wave. The summed potential waves can be measured, even with quite cheap and **portable devices**.\r\n\r\nBeing the third major version of this talk, I'll talk briefly about the Neurosky Mindwave and the Muse headset. I have also developed more interactive Jupyter experiments, which I'll demonstrate in the talk. For example **Evoked Response Potentials (ERP)** can be demonstrated with relatively simple means. Also I'll talk some more about experiments with **Neuro Feedback**.\r\n\r\n" - ], - "abstract_extra": "This is the third \"version\" and contains new and updated content. It requires no knowledge from the previous two major versions, but also contains mostly new material. So those who haven't seen the other talks yet will still understand it, those who have won't be bored. That's the plan, anyway.", - "tag_categories": [ - "Data Science", - "Educational", - "Hardware", - "Programming" - ], - "emails": "andreasklostermann@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/brainwaves-for-hackers-3", - "admin_type": "", - "companies": "" - }, - "735": { - "abstract_short": "During this talk you will see how to make a robot able to recognize people with a Raspberry Pi as main board and Python as language. The talk will cover the hardware and modules, discuss briefly the alternatives, and finally show a live demo.", - "sub_title": "", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ilovelinux02", - "id": 735, - "speakers": "Antonio Spadaro", - "title": "Build and control a Python-powered robot.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Raspberry PI", - "Robotics", - "OpenCV" - ], - "abstract_long": [ - "During this talk you will see how to make a robot able to recognize people with a Raspberry Pi as main board and Python as language. The talk will cover the hardware and modules, discuss briefly the alternatives, and finally show a live demo.\r\n\r\nThe robot uses two main modules:\r\n\r\n - **OpenCV** (_Open Source Computer Vision Library_), an open-source library that includes several hundreds of computer vision algorithms. Usage ranges from interactive art, to mines inspection, stitching maps on the web or through advanced robotics.\r\n\r\n - **gpiozero**, a simple interface to everyday GPIO components used with Raspberry Pi.\r\n\r\nThe first is used to recognize the people and the object; the second to control the robot.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Hardware", - "Hardware", - "Hardware" - ], - "emails": "antoniospadaro45@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/build-and-control-a-python-powered-robot", - "admin_type": "", - "companies": "" - }, - "618": { - "abstract_short": "Join this talk to learn about the OpenStack Python SDK and how to deploy your web app step by step using different components in OpenStack.", - "sub_title": "", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@vkmc", - "id": 618, - "speakers": "Victoria Martinez de la Cruz", - "title": "Build your first OpenStack application with OpenStack PythonSDK", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Open-Source" - ], - "abstract_long": [ - "How many times you heard about OpenStack and all the cool things it is being used for? Most of the use cases are big players that need to handle huge amounts of data and automate complex infrastructures. But what about actually using it, for you as a developer, to deploy a simple app? In my case, at least, that has not be an usual topic of discussion when talking about OpenStack. In this talk I'll introduce the OpenStack Python SDK, a project relatively new in the OpenStack ecosystem, and show you step by step how to deploy your own web app using different components in OpenStack." - ], - "abstract_extra": "", - "tag_categories": [ - "Open Source" - ], - "emails": "victoria@vmartinezdelacruz.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/build-your-first-openstack-application-with-openstack-pythonsdk", - "admin_type": "", - "companies": "Red Hat" - }, - "596": { - "abstract_short": "While microservices are rather commonly implemented using JSON over\r\nHTTP this is merely an implementation choice. This talk will cover\r\nthe reasons why you might want to choose ZeroMQ as communication\r\ntransport between your microservices instead. It will show how ZeroMQ\r\nis used from within Python and the common patterns which can simplify\r\nthe overal architecture while at the same time providing reliable and\r\nlow-latency communications between your services.", - "sub_title": "Low-latency communications for your backend architecture", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@flubdevork", - "id": 596, - "speakers": "Floris Bruynooghe", - "title": "Build your Microservices with ZeroMQ", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Software Design", - "System Architecture", - "Microservices" - ], - "abstract_long": [ - "Microservices is the popular term for the trend to build backend\r\narchitectures as a number of smaller independent processes. As an\r\nevolution from the Service Oriented Architecture the core aims are to\r\ncreate independent services which are easy to operate and even replace\r\nwhile all of them together compose into providing the business logic\r\nrequired for your application.\r\n\r\nWhile it is rather common for microservices to choose JSON over HTTP\r\nto communicate with each other, this is purely an implementation\r\nchoice. HTTP is a protocol using a strict request-response format,\r\nthis can become a little burdensome when needing to deal with\r\nasynchronous requests and forces some architectural descisions to be\r\nnot as ideal as they could be. ZeroMQ has more flexible communication\r\npatterns allowing for easier mapping of real-life interactions between\r\nservices. Coupled with an easy to use asynchronous user-level API and\r\nvery fast underlying communication on persistent TCP connections\r\nZeroMQ is a rather attractive transport to build your microservices\r\nbased applications in.\r\n\r\nThis talk will show how to use ZeroMQ within Python to build your\r\nmicroservices. It will show the benefits of ZeroMQ's asynchronous\r\nAPI, common usage patterns and how to handle backpressure.\r\nFurthermore different communication patterns will be explored and the\r\nimpact this has on how to simplify the overall architecture using\r\nthese patterns." - ], - "abstract_extra": "Previous talks I have given:\r\n- EuroPython 2011 - Exploring CPython's bytecode\r\n- PyConUK 2011 - Exploring CPython's bytecode\r\n- EuroPython 2012 - Using Sockets in Python\r\n- EuroPython 2013 - Taming greenlets using eventlet\r\n- FOSDEM 2014 - Introduction to py.test Fixtures\r\n- FOSDEM 2014 - Integrating Python and C using CFFI\r\n- EuroPython 2014 - Advanced Uses of py.test Fixtures\r\n- PyConUK 2014 - Advanced Uses of py.test Fixtures\r\n- EuroPython 2015 - The hook-based plugin architecture of py.test\r\n- PyConUK 2015 - Shipping your application using Conda", - "tag_categories": [ - "Programming", - "DevOps", - "Programming" - ], - "emails": "flub@devork.be", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/build-your-microservices-with-zeromq", - "admin_type": "", - "companies": "Cobe.io" - }, - "612": { - "abstract_short": "These are the lessons learned when scaling a SaaS web application which grew much faster than any one us could have ever expected.\r\n\r\n - Log and monitor from day one.\r\n - Things will fail, be sure you know when they do.\r\n - Choose components which allow language interoperability.\r\n - Horizontally scalable everything.\r\n - Plan for database downtime.\r\n - Have a way to share settings between backend and frontend.\r\n - Have a way to enter maintenance mode.\r\n - And more...\r\n\r\n", - "sub_title": "The things you knew you'd have to deal with, and some that you probably didn't.", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@eriknhj", - "id": 612, - "speakers": "Erik N\u00e4slund", - "title": "Building a reasonably popular web application for the first time.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web Track", - "Case Study", - "RESTful", - "APIs", - "failures/mistakes" - ], - "abstract_long": [ - "My name is Erik N\u00e4slund - I\u2019m the co-founder and Head of Engineering at Hotjar.\r\n\r\nI'd love to share the lessons learned when scaling a SaaS web application which grew much faster than any one us could have ever expected.\r\n\r\nWords like \u201cbig\u201d and \u201cpopular\u201d carry very little meaning, so let me define how big Hotjar is right now using some numbers.\r\n\r\nWe onboard about 500 new users on a daily basis.\r\nWe process around 250 000 API requests every minute.\r\nOur CDN delivers about 10 TB of data per day.\r\nWe have roughly 3 TB of data in our primary data store (PostgreSQL), another 1 TB in our Elasticsearch cluster, and a LOT more on Amazon S3.\r\n\r\nThese are the key things we wish we knew when we started. They would have made our life so much easier!\r\n\r\n - Log and monitor from day one.\r\n - Have a way to profile your API calls.\r\n - Things will fail, be sure you know when they do.\r\n - Have a way to keep secrets.\r\n - Everything needs a limit (even if it's really big).\r\n - Be wary of hitting data type limits.\r\n - Don't get too attached to a framework.\r\n - Choose components which allow language interoperability.\r\n - Horizontally scalable everything.\r\n - Plan for database downtime.\r\n - Features are a great way to test things out before launching them to the public.\r\n - Have a way to share settings between back end and front end.\r\n - Have a way to enter maintenance mode.\r\n - Require different quality of code for different parts of your application." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Case Study", - "Web", - "Web", - "Best Practice and Use Cases" - ], - "emails": "erik@hotjar.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-a-reasonably-popular-web-application-for-the-first-time", - "admin_type": "", - "companies": "Hotjar Ltd" - }, - "606": { - "abstract_short": "This talk demonstrates a technique for developing RESTful APIs using Flask and Flask-Restplus. These tools automate common API tasks such as: validating input, serializing output, routing requests to methods, and turning Python exceptions into HTTP responses.\r\n\r\nThe final API comes with a Swagger interactive UI, which documents all endpoints and makes testing easy. The described tools tools provide just enough syntactic sugar to make your code readable, scalable and easy to maintain.", - "sub_title": "Using Flask-Restplus to easily develop an API documented by Swagger", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@postrational", - "id": 606, - "speakers": "Micha\u0142 Karzy\u0144ski", - "title": "Building beautiful RESTful APIs using Flask", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Open-Source", - "Web Track", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "Documentation", - "Development" - ], - "abstract_long": [ - "Modern software is powered by APIs. User facing apps may run in the browser or on mobile platforms, but they almost universally rely on data stored in the cloud. More often then not apps use a RESTful API to exchange data with the server.\r\n\r\nIn my talk I will demonstrate a technique for developing RESTful APIs using the [Flask][1] micro-framework and [Flask-Restplus][2]. These powerful tools automate most common tasks associated with API development: validating input, serializing output, routing requests to methods, and turning Python exceptions into machine-readable HTTP responses.\r\n\r\nA Flask-Restplus API is fully documented by [Swagger][3] which lists all defined endpoints, their query parameters and the format of input and output JSON objects. Swagger generates an [interactive UI][4] for selecting options and easily testing queries. Flask and Flask-Restplus provide just enough syntactic sugar to make your code readable, scalable and easy to maintain.\r\n\r\nMy presentation will give an overview of the features of Flask and Flask-Restplus; I will describe how easy it is to get started and discuss some best practices for building complex APIs using this approach. I will wrap up by briefly mentioning other components of the Flask ecosystem, which give this micro-framework power to match fully-loaded systems such as Django.\r\n\r\n [1]: http://flask.pocoo.org/\r\n [2]: http://flask-restplus.readthedocs.org/en/latest/\r\n [3]: http://swagger.io/\r\n [4]: http://petstore.swagger.io/#/pet\r\n" - ], - "abstract_extra": "Hi there, my name is Michal. I write a [blog][1], which you may have come across Googling for Django how-tos. I'm also an author of a [book on Linux server administration using Webmin][2]. I have spoken at a number of conferences, including a lightning talk at DjangoCon 2013, a talk at a Python users' group in Warsaw ([PyWaw][3]) and a talk at a DevCon meeting in Warsaw.\r\n\r\nI want to give a presentation about creating RESTful APIs using Flask. As a companion to this talk, I am in the process of writing a blog article which will describe the technique with code samples and working boilerplate code. Attendees who are interested in the topic will be able to use the article as a practical way to get started building APIs in this way.\r\n\r\nI don't have a YouTube video with a talk in English, but you can hear me speak if you take a look at this [short demo][4] for a proof-of-concept I was working on a few years ago.\r\n\r\n [1]: http://michal.karzynski.pl/\r\n [2]: https://www.packtpub.com/networking-and-servers/webmin-administrators-cookbook\r\n [3]: http://pywaw.org/27/\r\n [4]: https://youtu.be/5dxLyt6cfAA?t=47s\r\n", - "tag_categories": [ - "Open Source", - ">>> Suggested Track", - "Web", - "Programming", - "Programming" - ], - "emails": "europython@karzyn.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-beautiful-restful-apis-using-flask-1", - "admin_type": "", - "companies": "Intel Corporation" - }, - "682": { - "abstract_short": "Ever wondered how to keep track of all of your services and their APIs? I'm going to explore how to build your Python services with OpenAPI/Swagger and how it helps you solve problems like communication between services, request and response validation, and documentation of your API. I'll also discuss some challenges you might face, gathered from over a year of heavy usage at Yelp.", - "sub_title": "Document, validate and connect your Python services", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@s_jaensch", - "id": 682, - "speakers": "Stephan Jaensch", - "title": "Building Service interfaces with OpenAPI / Swagger", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Microservices", - "Best Practice", - "python", - "Pyramid" - ], - "abstract_long": [ - "Implementing a service-oriented architecture (SOA) is a proven way to split up large monolithic codebases and to scale development when your organization grows to hundreds or thousands of engineers. I'm going to explore how to build and document your services with OpenAPI (formerly known as Swagger). I\u2019ll discuss the benefits and why you should standardize on the API and protocols, but not on SDKs or client libraries. Find out how to make sure the caller as well as your service is conforming to the specification by using request and response validation, how to generate a beautiful HTML documentation for your API, and how you can effortlessly make calls to your services. I'll also discuss and tell you how to overcome challenges you might face, gathered from over a year of heavy usage at Yelp for hundreds of services. I'll present the OpenAPI tools and libraries available for the Python ecosystem for client and server development.\r\n\r\nThe OpenAPI initiative is a cross-vendor consortium focused on creating, evolving and promoting a vendor neutral description format. As an open governance structure under the Linux Foundation, its members include Google, IBM, Atlassian and PayPal.", - "", - "", - "" - ], - "abstract_extra": "I'm a tech lead at Yelp, working on the backend for our Business Owner apps amongst other things. I'm a long-time user of Swagger and recently started contributing to the Python tools for it like bravado. I gave a talk at last year's EuroPython and I had a blast doing it. This is the video: https://youtu.be/UUkyzCwgqPw\r\n\r\nIf possible (and if I'm accepted), I'd prefer a slot during the first half of EuroPython.", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "", - "Application Frameworks" - ], - "emails": "sjaensch@yelp.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-service-interfaces-using-OpenAPI", - "admin_type": "", - "companies": "Yelp" - }, - "517": { - "abstract_short": "Hainbat zerbitzaritan dauden eta plataforma bakar batean oinarrituta dagoen plataforma baten mantentzea Buildout Django Fabric eta erabiliz. Kasu praktikoa euskarazko tokiko hedabideak.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@jatsu", - "id": 517, - "speakers": "Jatsu Argarate", - "title": "Buildout Django eta Fabric. Kasu praktikoa euskarazko tokiko hedabideetan", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Django" - ], - "abstract_long": [ - "Hainbat bezerorentzako neurrira egindako edukiak kudeatzeko plataforma bat garatu dugu Django Frameworka erabiliz. Guztia kudeatzeko eta erabilitako bertsioak kontrolatzeko zc.buildout erabiltzen dugu, baina plataforma hazten doa eta iada dozena bat instalazio ditugu hainbat zerbitzaritan zehar banatuta. Plataformaren oinarria berbera denez, instalazio guztietan eguneraketak argitaratzeko buildout eta fabric-en oinarritutako sistema erabiltzen dugu.\r\nHitzaldi honetan azalduko duguna.", - "", - "", - "" - ], - "abstract_extra": "Hainbat zerbitzaritan dauden eta plataforma bakar batean oinarrituta dagoen plataforma baten mantentzea Buildout Django Fabric eta erabiliz. Kasu praktikoa euskarazko tokiko hedabideak.", - "tag_categories": [ - "Application Frameworks" - ], - "emails": "jargarate@codesyntax.com", - "language": "Basque", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/buildout-django-eta-fabric-kasu-praktikoa-euskarazko-tokiko-hedabideetan", - "admin_type": "", - "companies": "CodeSyntax" - }, - "667": { - "abstract_short": "In this talk, we will see an intro to CFFI, an alternative to using the standard C API to extend Python. CFFI works on CPython and on PyPy. It\r\nis a possible solution to a problem that hits notably PyPy --- the\r\nCPython C API.\r\n\r\nThe CPython C API was great and contributed to the present-day success\r\nof Python, together with tools built on top of it like Cython and SWIG.\r\nI will argue that it may be time to look beyond it, and present CFFI as\r\nsuch an example.\r\n", - "sub_title": "CFFI, on CPython and PyPy, as a potentially better way to call C code", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 667, - "speakers": "Armin Rigo", - "title": "CFFI: calling C from Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "PyPy", - "C-Languages", - "CPython" - ], - "abstract_long": [ - "I will introduce CFFI, a way to call C libraries from Python.\r\n\r\n http://cffi.readthedocs.org/\r\n\r\nCFFI was designed in 2012 to get away from Python's C extension modules,\r\nwhich require hand-written CPython-specific C code. CFFI is arguably\r\nsimpler to use: you call C from Python directly, instead of going\r\nthrough an intermediate layer. It is not tied to CPython's internals,\r\nand works natively on two different Python implementations: CPython and\r\nPyPy. It could be ported to more implementations.\r\n\r\nIt is also a big success, according to the download statistics. Some\r\nhigh-visibility projects like Cryptography have switched to it.\r\n\r\nPart of the motivation for developing CFFI is that it is a minimal layer\r\nthat allows direct access to C from Python, with no fixed intermediate C\r\nAPI. It shares ideas from Cython, ctypes, and LuaJIT's ffi, but the\r\nnon-dependence on any fixed C API is a central point. \r\n\r\nIt is a possible solution to a problem that hits notably PyPy --- the CPython C API. The CPython C API was great and, we can argue, it contributed a lot to\r\nthe present-day success of Python, together with tools built on top of\r\nit like Cython and SWIG. However, it may be time to look\r\nbeyond it. This talk will thus present CFFI as such an example.\r\nThis independence is what lets CFFI work equally well on CPython and\r\non PyPy (and be very fast on the latter thanks to the JIT compiler).\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Other Programming Languages", - "Python" - ], - "emails": "armin.rigo@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/cffi-calling-c-from-python", - "admin_type": "", - "companies": "" - }, - "400": { - "abstract_short": "Introduction to the clean code principles applied to Python code. Let's honor the readable nature of the Python syntax so anyone can maintain our code: \"readability counts\".\r\n\r\nThis talk introduces general concepts of code quality and how they apply for Python. We analyse technical debt, refactoring, and unit testing in the context of a project striving for a better code base.", - "sub_title": "Achieving quality code in Python projects", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@rmarianoa", - "id": 400, - "speakers": "Mariano Anaya", - "title": "Clean code in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Education", - "Best Practice", - "Clean Code", - "Agile", - "Development" - ], - "abstract_long": [ - "Introduction to the clean code principles tailored for Python projects. The goal is to achieve better code quality and a more maintainable code base. Python has a nature of being clear, and easy to follow, so let's take advantage of it in our own code, in order to enforce the principle \"readability counts\" by writing pythonic code.\r\n\r\nThis talk introduces general concepts of code quality for Python developers, analyzing technical debt, with examples on how to achieve a more legible, maintainable and clean code base, by refactoring, writing unit tests and having good coding guidelines for the project. If you are giving your first steps with Python, you will gain insight on best practices for writing good software from the start. If you are a experienced developer, the ideas should work as food for thought, helping with recommendations for code reviews, best practices, etc." - ], - "abstract_extra": "", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Educational", - "Development Methods", - "Programming" - ], - "emails": "marianoanaya@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/clean-code-in-python", - "admin_type": "", - "companies": "Onapsis" - }, - "420": { - "abstract_short": "Take POSIX, add capability-based security, then remove anything that conflicts. The result is CloudABI, available for BSD, Linux, OSX et al. \r\n\r\nA CloudABI process is incapable of any action that has a global impact It can only affect the file descriptors you provide. As a result even unknown binaries can safely be executed - without the need for containers, virtual machines, or other sandboxes. \r\n\r\nThis talk will introduce CloudABI, how to use it with Python, the benefits, and the trade-offs.", - "sub_title": "Why is my webapp doing `rm -rf $HOME`, and how can I prevent it?", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@moreati", - "id": 420, - "speakers": "Alex Willmer", - "title": "CloudABI: Capability based security on Linux/Unix", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Unix", - "Security", - "Web Track", - "System Architecture", - "Microservices" - ], - "abstract_long": [ - "[CloudABI](https://nuxi.nl/) is a new POSIX based computing environment that brings [capability-based security](https://en.wikipedia.org/wiki/Capability-based_security) to BSD, Linux, OSX et al.\r\n\r\nUnlike traditional Unix, if a CloudABI process goes rogue it _cannot_ execute random binaries, or read arbitrary files. This is achieved by removing `open()` & any other API able to acquire global resources. Instead a CloudABI process must be granted _capabilities_ to specific resources (e.g. directories, files, sockets) in the form of file descriptors. If a process only has a descriptor for `/var/www` then it's _incapable_ of affecting any file or folder outside that directory.\r\n\r\nThis talk will\r\n\r\n - Review the security & reusability problems of Linux & Unix processes\r\n - Introduce capability-based security\r\n - Summarize the design of CloudABI - its benefits & trade-offs\r\n - Demonstrate how to write Python software for CloudABI & run it\r\n - Point out the pitfalls & gotchas to be aware of\r\n - Discuss the current & future status of CloudABI\r\n \r\nCloudABI began life on FreeBSD. It also runs DragonFly BSD, NetBSD, PC-BSD, Arch Linux, Debian, Ubuntu, & OS X. The API & ABI are kernel agnostic - a CloudABI binary can run on any supported kernel. The design is evolved from [Capsicum](https://www.cl.cam.ac.uk/research/security/capsicum/), a library that allows processes to drop access to undesired syscalls at runtime. CloudABI applies this at build time to make testing & lock-down easier.", - "", - "", - "" - ], - "abstract_extra": "I can contract this talk to 30 minutes, or expand it to 60 minutes if you prefer.", - "tag_categories": [ - "Operating Systems", - "Security", - ">>> Suggested Track", - "DevOps", - "Programming" - ], - "emails": "alex@moreati.org.uk", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/capability-based-security-on-unix-with-cloudabi", - "admin_type": "", - "companies": "" - }, - "597": { - "abstract_short": "Learn about `conda`, the package installer from the scientific community. It offers very interesting features that can improve your installation experience considerably. The talk gives an overview of the basic usage of `conda`. It covers the topics installation and building of packages.\r\n`conda` can be combined with `pip` to use all PyPi packages. Its cross-platform and multi-languages features combined with power environments can help to improve your productivity. \r\n", - "sub_title": "A better solution to the packing problem!?", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@pyacademy", - "id": 597, - "speakers": "Mike M\u00fcller", - "title": "Conda - Easier Installs and Simpler Builds", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python general", - "Packaging", - "Cross-Platform-Development" - ], - "abstract_long": [ - "The BSD license `conda` is a package installer for Python and other languages.\r\nWhile it originates form the scientific Python community, it can be really useful for\r\nall Python programmers.\r\n\r\nInstallation of Python packages has become much simpler over the last years.\r\nThe use of `pip` and `virtualenv` simplify the installation of Python packages a lot.\r\nHowever, they are specific to Python. The Python-agnostic `conda` has advantages\r\nfor packages with C or Fortran extension that are very common for scientific libraries. \r\n`conda` is cross-platform. According to different statistics, the most Python users work on Windows. Often is especially complicate to get extensions with many dependencies installer on this platform. `conda` facilities the installation for Windows considerably.\r\n\r\nThis talk introduces the basic usage of `conda` to install packages. This includes the basic commands for searching and installing of packages. Furthermore, the talk demonstrates the creation of environments for different Python versions and combinations of packages.\r\n\r\nThe building of a packages is simple. The talk shows how to build recipes that contain declarations of dependencies .\r\n\r\n`conda` can work together with `pip`. This allows to use all packages from the Python Package Index ( PyPI). The talk explains the concept of channels that allow to get packages from different sources.\r\n", - "", - "", - "" - ], - "abstract_extra": "This hands-on talk introduces a very useful tool to a new audience. While very well know in the scientific Python community, `conda` might not that well know outside this community. This talk can help to change this situation.", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "mmueller@python-academy.de", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/conda-easier-installs-and-simpler-builds", - "admin_type": "", - "companies": "Python Academy GmbH & Co. KG" - }, - "610": { - "abstract_short": "The purpose of this talk if pointing out that using Docker in production is perfectly valid, not just for develop and CI environments.\r\n\r\n", - "sub_title": "Security considerations and best practices", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@musghost", - "id": 610, - "speakers": "Andr\u00e9s Cidel", - "title": "Create secure production environment using Docker", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Virtualization", - "Security", - "Best Practice", - "Docker" - ], - "abstract_long": [ - "Docker is a relatively new technology platform that helps teams develop, deploy and scale applications with greater ease and speed. However, there are doubts about using Docker in production environments. One important reason is that containers don't provide the same security layer as hypervisors do.\r\n\r\nThe purpose of this talk is pointing out that using Docker in production is perfectly valid, not just for develop and CI environments.\r\n\r\nWe'll learn:\r\n\r\n - How Docker works.\r\n - Main risks.\r\n - How create and maintain secure images.\r\n - How defend containers.\r\n - How delimit security risks in containers.\r\n - Best practices for running containers.\r\n\r\n" - ], - "abstract_extra": "I'm the organizer of a Meetup about Docker and I've held some talks about it.\r\nThis is the meetup website: http://www.meetup.com/Mexico-City-Docker-friends/\r\nThese are my blogs, English and Spanish versions http://blog.cidel.com.mx/ and http://dockerfriends.mx/\r\n", - "tag_categories": [ - "DevOps", - "Security", - "Best Practice and Use Cases", - "DevOps" - ], - "emails": "andres@cidel.com.mx", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/create-secure-production-environment-using-docker", - "admin_type": "", - "companies": "Vinco Orbis" - }, - "746": { - "abstract_short": "please fill here", - "sub_title": "", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 746, - "speakers": "Miguel Reguero", - "title": "Cybersecurity in the financial sector with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security" - ], - "abstract_long": [ - "please fill here" - ], - "abstract_extra": "", - "tag_categories": [ - "Security" - ], - "emails": "miguel.reguero@i4s.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/ciberseguridad-en-el-sector-financiero-con-python", - "admin_type": "", - "companies": "Innovation 4 Security" - }, - "666": { - "abstract_short": "The CSV is the most widely adopted data format. It used to \r\nstore and share *not-so-big* scientific data. However, this format is not particularly \r\nsuited in case data require any sort of internal\r\nhierarchical structure, or if data are too big. To this end, other data formats must be considered. \r\nIn this talk, the different data formats will be presented and compared w.r.t. their\r\nusage for scientific computations along with corresponding Python libraries.", - "sub_title": "Different format solutions for tiny and big data, beyond CSV and HDFS", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@leriomaggio", - "id": 666, - "speakers": "Valerio Maggio", - "title": "Data Formats for Data Science", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Physics", - "Big Data", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Databases" - ], - "abstract_long": [ - "The *plain text* is one of the simplest yet most intuitive format in which data could be stored. \r\nIt is easy to create, human and machine readable, \r\n*storage-friendly* (i.e. highly compressible), and quite fast to process.\r\nTextual data can also be easily *structured*; in fact to date the \r\nCSV (*Comma Separated Values*) is the most common data format among data scientists.\r\n\r\nHowever, this format is not properly suited in case data require any sort of internal\r\nhierarchical structure, or if data are too big to fit in a single disk. \r\n\r\nIn these cases other formats must be considered, according to the shape of data, and the \r\nspecific constraints imposed by the context. \r\nThese formats may leverage *general purpose* solutions, e.g. [No]SQL databases, HDFS (Hadoop File System); \r\nor may be specifically designed for scientific data, e.g. hdf5, ROOT, NetCDF.\r\n\r\nIn this talk, the strength and flaws of each solution will be discussed, focusing on their usage for scientific computations. The goal is to provide some practical guidelines for data scientists, derived from the the comparison of the different Pythonic solutions presented for the case study analysed. These will include\r\n`xarray`, \r\n`pyROOT` *vs* `rootpy`, `h5py` *vs* `PyTables`, `bcolz`, and `blaze`.\r\nFinally, few notes about the new trends for **columnar databases** (e.g. *MonetDB*) will be also presented, for very fast\r\nin-memory analytics." - ], - "abstract_extra": "", - "tag_categories": [ - "Sciences", - "Data Science", - "Data Science", - "Data Science", - "Databases" - ], - "emails": "valerio.maggio@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/data-science-formats-beyond-csv-and-hdfs", - "admin_type": "", - "companies": "" - }, - "693": { - "abstract_short": "Laburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.", - "sub_title": "", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 693, - "speakers": "Iker Martinez de Agirre Mendia", - "title": "Datu bistaratze soluzioen garapena Smartcity proiektuetan", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Web", - "General" - ], - "abstract_long": [ - "Mondragon Unibertsitateko inbestigazio taldea Smartcity-en aplikazio eta monitorizazioen inguruko proiektuetan lanean ari da, non herrialde ezberdinetako gune konkretuetan bizi diren pertsonen kontsumo energetikoa jaso eta aztertzen den. Proiektu hauetako bi CITyFiED eta ARROWHEAD dira. \r\n\r\nKontsumo hori eta horren harira ondorioztatutako aholku energetikoak erabiltzailearengana heltzeko, bistaratze soluzio bat garatu da, web orrialde bat alegia. \r\n\r\nErabiltzailean oinarritutako diseinua (User Centered Design) aplikatuz, gailu ezberdinetara moldatzen den (Responsive Web Design, Mobile-First) web bat sortu da, Django Web Framework tresnaren bitartez. REST API (Django Rest Framework) baten bidez, informazioa gordetzen den datu basea atzitzen da, kontsumoak eta beraien bilakaera bistaratze libreriak (D3.js) erabiliz irudikatuz. Horrez gain, Djangok eskaintzen dituen aukerak baliatuz, web orrialdea hizkuntza ezberdinetan bistaratu daiteke.\r\n\r\nLaburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.\"\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Mondragon Unibertsitateko inbestigazio taldea Smartcity-en aplikazio eta monitorizazioen inguruko proiektuetan lanean ari da, non herrialde ezberdinetako gune konkretuetan bizi diren pertsonen kontsumo energetikoa jaso eta aztertzen den. Proiektu hauetako bi CITyFiED eta ARROWHEAD dira. \r\n\r\nKontsumo hori eta horren harira ondorioztatutako aholku energetikoak erabiltzailearengana heltzeko, bistaratze soluzio bat garatu da, web orrialde bat alegia. \r\n\r\nErabiltzailean oinarritutako diseinua (User Centered Design) aplikatuz, gailu ezberdinetara moldatzen den (Responsive Web Design, Mobile-First) web bat sortu da, Django Web Framework tresnaren bitartez. REST API (Django Rest Framework) baten bidez, informazioa gordetzen den datu basea atzitzen da, kontsumoak eta beraien bilakaera bistaratze libreriak (D3.js) erabiliz irudikatuz. Horrez gain, Djangok eskaintzen dituen aukerak baliatuz, web orrialdea hizkuntza ezberdinetan bistaratu daiteke.\r\n\r\nLaburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.\"", - "tag_categories": [ - "", - "" - ], - "emails": "iker.martinezm@alumni.mondragon.edu", - "language": "Basque", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/datu-bistaratze-soluzioen-garapena-smartcity-proiektuetan-1", - "admin_type": "", - "companies": "" - }, - "418": { - "abstract_short": "Python has lots of scientific, data analysis, and machine learning libraries. But there are many problems when starting out on a machine learning project. Which library do you use? How do they compare to each other? How can you use a model that has been trained in your production app? In this talk I will discuss how you can use TensorFlow to create Deep Learning applications. I will discuss how it compares to other Python machine learning libraries, and how to deploy into production.", - "sub_title": "Find out how TensorFlow compares to other Machine Learning libraries", - "timerange": "2016-07-22 14:00:00, 2016-07-22 15:00:00", - "sub_community": "pydata", - "duration": 60, - "twitters": "@IanMLewis", - "id": 418, - "speakers": "Ian Lewis", - "title": "Deep Learning with Python & TensorFlow", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Deep Learning", - "Science Track", - "Machine-Learning" - ], - "abstract_long": [ - "Python has lots of scientific, data analysis, and machine learning libraries. But there are many problems when starting out on a machine learning project. Which library do you use? How do they compare to each other? How can you use a model that has been trained in your production application?\r\n\r\nTensorFlow is a new Open-Source framework created at Google for building Deep Learning applications. Tensorflow allows you to construct easy to understand data flow graphs in Python which form a mathematical and logical pipeline. Creating data flow graphs allow easier visualization of complicated algorithms as well as running the training operations over multiple hardware GPUs in parallel.\r\n\r\nIn this talk I will discuss how you can use TensorFlow to create Deep Learning applications. I will discuss how it compares to other Python machine learning libraries like Theano or Chainer. Finally, I will discuss how trained TensorFlow models could be deployed into a production system using TensorFlow Serve.", - "", - "", - "" - ], - "abstract_extra": "Here is a high level outline of the talk:\r\n\r\nOutline\r\n\r\n - Overview of Machine Learning Problems\r\n - What is TensorFlow and How Does it Work?\r\n - Creating a Deep Learning Model with Tensorflow\r\n - Comparing Tensorflow to Theano & Chainer\r\n - Productionizing Deep Learning Models", - "tag_categories": [ - "Data Science", - ">>> Suggested Track", - "Data Science" - ], - "emails": "ianlewis@google.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/deep-learning-with-python-tensorflow", - "admin_type": "", - "companies": "Google" - }, - "388": { - "abstract_short": "This talk shares some insights into Aldryn, a platform used daily to execute hundreds of Django based website-deployments, and the various components that intervene to deploy a Django project from its git repository to the cloud.\r\n\r\nWe will discuss some of the problems we faced, and the solutions we adopted, to deploy Django projects at scale to the cloud, including topics like PyPI wheel proxies, dynamic traffic-rerouting, live data-center migrations, etc.", - "sub_title": "A journey through various challenges and solutions we adopted to deploy Django at scale on Aldryn", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@garet_jax", - "id": 388, - "speakers": "Jonathan Stoppani", - "title": "Deploying Django at scale: what happens inside the cloud", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Django Track", - "Configuration Management (Ansible/Fabric/Chef/...)", - "Django", - "Distributed Systems", - "Deployment/Continuous Integration and Delivery" - ], - "abstract_long": [ - "Aldryn is used daily to execute hundreds of Django based website-deployments. It consists of a control panel to help backend developers, frontend developers, project managers and content-editors collaborate to successfully build and maintain web apps, coupled to a scalable and highly available Docker-based build and deployment infrastructure currently used to host more than 6000 django-cms based websites.\r\n\r\nWhile the control panel is oriented mainly towards the Django/django-CMS match, the structure of the single projects and the deployment infrastructure allow to continuously deploy, upgrade and scale any type of HTTP service.\r\n\r\nThe goal of this talk is to share some insights into the various components that intervene to deploy a Django project from its git repository to the cloud.\r\n\r\nThis talk will discuss some of the problems we faced, and the solutions we adopted, to deploy Django projects at scale to the cloud. I'll share the lessons we learned and present the tools we built to reach our goal. I\u2019ll be covering topics like:\r\n - Using a PyPI proxy to both build platform-specific wheels, on order to both to withstand PyPI downtimes and cut on deployment times;\r\n - Dynamic traffic re-routing for zero-downtime deployments and horizontal scaling;\r\n - Massive TLS termination on a custom built Twisted/PyPy reverse proxy;\r\n - Live server and datacenter migrations for both apps and their data." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "DevOps", - "Application Frameworks", - "DevOps", - "DevOps" - ], - "emails": "jonathan.stoppani@divio.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/deploying-django-at-scale-what-happens-inside-the-cloud", - "admin_type": "", - "companies": "Divio" - }, - "593": { - "abstract_short": "When designing an abstraction for a complex system (an ORM-like library in our case) you face a lot of design decisions and challenges. This talk details how we chose to tackle those when designing elasticsearch-dsl.", - "sub_title": "Lessons learned while bulding elasticsearch-dsl", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@honzakral", - "id": 593, - "speakers": "Honza Kr\u00e1l", - "title": "Designing a Pythonic Interface", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Software Design", - "Best Practice", - "failures/mistakes" - ], - "abstract_long": [ - "The json query language for elasticsearch, as well as its other APIs, can be very daunting to new users and can be a bit cumbersome when working with python. That is why we created elasticsearch-dsl - a sort of ORM for elasticsearch.\r\n\r\nWe will go through the design philosophy and obstacles found during the development - trying to make a more pythonic interface for elasticsearch while maintaining access to all of the features of the underlying query language.\r\n\r\nThe focus of the talk is more on the library and interface design than on elasticsearch and its query language itself, that is used only to demonstrate the principles." - ], - "abstract_extra": "I just want to stress that this is not a talk about elasticsearch, but about designing a pythonic API, using elasticsearch-dsl as an example (since it's a practical \"lessons learned\" talk).", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "Best Practice and Use Cases" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/designing-a-pythonic-interface", - "admin_type": "", - "companies": "Elastic" - }, - "505": { - "abstract_short": "Nowadays Python is the perfect environment for developing a real-time automated trading tool. In this talk we will discuss the development of: a general-purpose multiagent-system module using Pyro and ZeroMQ; a platform, based on it, for developing automated trading strategies using Numpy, Numba, Theano, etc.; and a GUI for visualizing real-time market data using PyQtGraph and Qt.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 505, - "speakers": "Miguel S\u00e1nchez de Le\u00f3n Peque", - "title": "Developing a real-time automated trading platform with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Distributed Systems", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "In OpenSistemas we have developed a general-purpose multi-agent system which is written in pure Python: *osBrain*. Agents communicate with each other using ZeroMQ, allowing the user to define different communication patterns based on their needs.\r\n\r\nBased on this multi-agent system, we have also developed a broker-independent platform for real-time automated trading: *osMarkets*. This platform implements specialized agents:\r\n\r\n- **Feeder** is an agent which receives real-time data from the broker.\r\n- **Router** is an agent which receives data from feeders. It manages the historical data and distributes updates to all the subscribed agents in the network.\r\n- **Brain** is the most common agent. It receives data from router or from other brains and processes them, sending the results to other brains or sending orders to be executed. Brains can make use of many useful packages avilable in the Python ecosystem: NumPy, SciPy, Numba, Theano...\r\n- **Trader** is an agent which is designed to interact with the broker, just as the feeder, but to execute market orders.\r\n\r\n![system](http://i.imgur.com/A9vsWee.png)\r\n\r\nWhile it is still in its earliest stages, we are developing a tool for real-time visualization of trading strategies using PyQtGraph. This tool acts as an agent in the multi-agent system.\r\n\r\n![chart](http://i.imgur.com/5XS7oBQ.png)" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "msanchez@opensistemas.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/developing-a-real-time-automated-trading-platform-with-python", - "admin_type": "", - "companies": "OpenSistemas" - }, - "565": { - "abstract_short": "Nowadays, there is a lot of buzz about Go. In this talk we'll learn the basics and most important concepts of the language, we'll further discuss differences and similarities in Go and Python and dive into the cool features of Go. Finally we'll talk about why popularity of Go is raising so fast and try to answer the most important question: Do I need to switch to Go ?", - "sub_title": "An opinion on the topic after working with Go for 6 months", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 565, - "speakers": "Max Tepkeev", - "title": "Do I need to switch to Go(lang) ?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Educational Track", - "Go-Lang" - ], - "abstract_long": [ - "Nowadays, there is a lot of buzz about Go. It happened so that for the last 6 months I've been mostly programming Go, and frankly speaking I fell in love with this language.\r\n\r\nWe'll first do a quick review of the language. Go doesn't have some language constructs, for example classes and exceptions and at first it may seem hard to write proper Go code, but in practice the language is so easy that I will try to teach you the basics and most important concepts of the language. We'll further discuss differences and similarities in Go and Python and dive into the cool features of Go.\r\n\r\nFinally we'll talk about why popularity of Go is raising so fast and try to answer the most important question: Do I need to switch to Go ?" - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Other Programming Languages" - ], - "emails": "tepkeev@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/do-i-need-to-switch-to-golang", - "admin_type": "", - "companies": "Aidata" - }, - "563": { - "abstract_short": "This talk is about dynamic class generation in python: the practice of writing code that generates classes and their functionality at runtime. It will use boto3, the AWS SDK for Python, as a basis to dive into the basics, the benefits, and the drawbacks to dynamically generating classes.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 563, - "speakers": "Kyle Knapp", - "title": "Dynamic Class Generation in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Python general", - "Use Case", - "APIs", - "Educational Track" - ], - "abstract_long": [ - "This talk is about the concept of dynamic class generation in python. The whole idea is writing code that generates classes and their functionality at runtime. You now may be asking yourself, \u201cThat sounds like a neat trick. Why would I ever generate my classes at runtime?\u201d Here are a few reasons why:\r\n\r\n\u2022\tIt can decrease the physical size of your code.\r\n\r\n\u2022\tIt can improve the workflow in adding new functionality.\r\n\r\n\u2022\tIt can improve reliability of your code.\r\n\r\nOne example where the power of this concept has really been leveraged is in boto3, the AWS SDK for Python. Dynamic class generation has allowed boto3 to become heavily data driven such that most of its classes and methods are generated based off JSON models representing aspects of an AWS service\u2019s API. For example, to add support for a new AWS service API in boto3, just plop in a JSON file into the library with no additional Python code required.\r\n\r\nUsing lessons and techniques drawn from developing boto3, this talk will dive into the following topics related to dynamic class generation:\r\n\r\n\u2022\tThe basics of dynamic class generation such as how to effectively dynamically generate classes.\r\n\r\n\u2022\tHow to overcome some of the challenges of dynamic class generation.\r\n\r\n\u2022\tThe tradeoffs in dynamically generating classes and discussion on when it is appropriate.\r\n\r\nBy the end of this talk, the hope is that you will have a better understanding of dynamic class generation and come away with helpful ideas for your next big project." - ], - "abstract_extra": "Talk from last EuroPython: https://ep2015.europython.eu/conference/talks/it-works-on-my-machine-writing-python-code-for-any-environment", - "tag_categories": [ - "Programming", - "Python", - "Best Practice and Use Cases", - "Web", - ">>> Suggested Track" - ], - "emails": "kyknapp1@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/dynamic-class-generation-in-python", - "admin_type": "", - "companies": "Amazon" - }, - "532": { - "abstract_short": "Developers usually state that finding defects is the primary motivation for doing code reviews. However, research has shown that the main benefits of code reviews are; knowledge transfer, team awareness and finding alternative solutions.\r\n\r\nCode reviews when done well are more than just finding defects; it should be a discussion and conversation with other developers about finding the best solutions. We will talk about re-framing code review to encourage open discussions.", - "sub_title": "Get the most out of code review. Learn best practices and avoid common pitfalls.", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@d0ugal", - "id": 532, - "speakers": "Dougal Matthews", - "title": "Effective Code Review", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Communication", - "Best Practice", - "Clean Code", - "Open-Source" - ], - "abstract_long": [ - "Developers usually state that finding defects is the primary motivation for doing code reviews. However, research has shown that the main benefits of code reviews are; knowledge transfer, team awareness and finding alternative solutions.\r\n\r\nCode reviews when done well are more than just finding defects; it should be a discussion and conversation with other developers about finding the best solutions. We will talk about re-framing code review to encourage open discussions.\r\n\r\nThis talk is for everyone that is already involved in regular code review and those hoping to start. I will talk through the code review process with the aim of making it a better and more useful experience for both the authors and the reviewers.\r\n\r\nThe talk will follow the following rough outline:\r\n\r\n- Introduction\r\n - Why do code reviews\r\n - What are we aiming to get out of it\r\n- Submitting code for review\r\n - How can you help reviewers?\r\n - What should you avoid doing?\r\n - Removing ownership of the code\r\n- Reviewing code\r\n - How should you give feedback?\r\n - What should you look for?\r\n - How can you encourage people to review more?\r\n - How to avoid and remove bike-shedding\r\n- Code review tools and how they impact on the process.\r\n- Wrap up and conclusion" - ], - "abstract_extra": "As a developer on the OpenStack project and the maintainer of multiple open source projects, doing code review is a big part of my day. I've been lucky enough to have worked in a strong code review culture for a number of years and given the subject a lot of thought.\r\n\r\nI have spoken at EuroPython previously a few times, last year I spoke about the MkDocs project which was well received albeit a somewhat niched topic.", - "tag_categories": [ - "Community", - "Best Practice and Use Cases", - "Educational", - "Open Source" - ], - "emails": "dougal@dougalmatthews.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/effective-code-review", - "admin_type": "", - "companies": "Red Hat" - }, - "611": { - "abstract_short": "We will explore the lessons learned on maintaining a Selenium test suite against a webapplication and how to leverage python tools to make this process easy and transparent.", - "sub_title": "Lessons learned from testing a webapplication with Selenium and python tools", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@festerc", - "id": 611, - "speakers": "Andrei Coman", - "title": "Effectively test your webapp with Python and Selenium", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Case Study", - "Test Libraries (pyTest/node/...)", - "Testing", - "failures/mistakes" - ], - "abstract_long": [ - "How often do you run your Selenium test suite? How fast do you get a result from it?\r\nWould you like to answer with: \"Whenever I feel like it\" and \"Well, about the time it takes me to finish a coffee\" ? This talk will try to get you closer to these answers.\r\n\r\nWe will have a look at the lessons learned and the challenges my team faced maintaining a Selenium test suite against a long-lived Django web application.\r\n\r\nWe will go over the pros and cons of:\r\n - test design approaches\r\n - technologies we used (nose, py.test, LiveServerTestCase)\r\n - reporting tools ", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Case Study", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "comandrei@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/effectively-test-your-webapp-with-python-and-selenium", - "admin_type": "", - "companies": "3Pillar Global" - }, - "675": { - "abstract_short": "Does Django scale? How to manage traffic peaks? What happens when the database grows too big? How to find the bottlenecks?\r\n\r\nWe will overview the basics concepts on scalability and performance, and then see some tips and tricks. These statements will be backed up with experiments and numbers, to show the timing improvements.", - "sub_title": "Tips and best practices for avoiding scalability issues and performance bottlenecks in Django", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@DZPM", - "id": 675, - "speakers": "David Arcos", - "title": "Efficient Django", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Django Track", - "System Architecture", - "Performance", - "Django", - "Best Practice" - ], - "abstract_long": [ - "**Does Django scale?** How to manage traffic peaks? What happens when the database grows too big? How to find the bottlenecks?\r\n\r\nWe will overview the basics concepts on scalability and performance, and then see some tips and tricks. These statements will be backed up with experiments and numbers, to show the timing improvements.\r\n\r\nMain topics:\r\n\r\n- System architecture\r\n- Database performance\r\n- Queues and workers\r\n- Profiling with django-debug-toolbar\r\n- Caching queries and templates\r\n- Dealing with a slow admin\r\n- Optimizing the models\r\n- Faster tests\r\n\r\n" - ], - "abstract_extra": "I've given talks at EuroPython 2015, PySS, PyConES, PyBCN.", - "tag_categories": [ - ">>> Suggested Track", - "DevOps", - "Programming", - "Application Frameworks", - "Best Practice and Use Cases" - ], - "emails": "david.arcos@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/efficient-django", - "admin_type": "", - "companies": "Lead Ratings" - }, - "484": { - "abstract_short": "EITB Nahieran zerbitzuaren informazioa era erabilgarrian erakusteko APIaren nondik norakoak erakutsiko ditut hitzaldian.", - "sub_title": "EITB Nahieran datuak erabiltzeko API erabilterraz bat nola egin dudan azalduko dut", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@erralin", - "id": 484, - "speakers": "Mikel Larreategi", - "title": "EITB Nahieran: askatu bideoak API honen bidez", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "RESTful", - "APIs", - "Pyramid" - ], - "abstract_long": [ - "Iaz Raspberry PI bat erosi nuen eta ez nekien zer egin berarekin... Aurten Kodi softwarea erabiliz media-center bihurtu dut Raspberrya.\r\n\r\nKodirako 'tvalacarta' izeneko plugin bat zegoen berarekin EITB Nahieran ikusteko, baina ez zebilen. Saiatu nintzen EITB Nahieranen kodea funtzionarazten, eta asko kostata informazioa hiru era ezberdinetan ateratzea lortu nuen. Azkenean, funtzionamendua errazteko API bat prestatu dut EITB Nahieranen dagoen informazioa atzitzeko eta edozeinek erabili ahal dezan." - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Web", - "Application Frameworks" - ], - "emails": "mlarreategi@codesyntax.com", - "language": "Basque", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/eitb-nahieran-askatu-bideoak-api-honen-bidez", - "admin_type": "", - "companies": "CodeSyntax" - }, - "604": { - "abstract_short": "Aurkezpen honetan Nao robotaren Choreographe programazio ingurumenaren sarrera bat egiten da, pythonek errobotikan duen erabilpena erakutsiz. Aurkezpen guztia aurkezleak orain arte egindako lanean oinarritzen da. Lehenik eta behin, programa baten estruktura erakutsiko da. Ondoren, liburutegi bat nola gehitu erakutsiko da, liburutegiaren instalazioak ekar ditzakeen arazoak aztertuz. Azkenik, Naoaren gorputz jarreran zein diskurtsoaren naturaltasunean egindako aurrerapenak azalduko dira. ", - "sub_title": "Pertsona-robot interakzioan lehenego pausuak Choreographe erabilita.", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 604, - "speakers": "Leire Ozaeta", - "title": "Endor, ipuinak kontatzen zituen Nao robota.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Beginners", - "Robotics", - "Human-Machine-Interaction" - ], - "abstract_long": [ - "Aurkezpen honetan Nao robotaren Choreographe programazio ingurumenaren sarrera bat egiten da, pythonek errobotikan duen erabilpena erakutsiz. Aurkezpen guztia aurkezleak orain arte egindako lanean oinarritzen da. Lehenik eta behin, programa baten estruktura erakutsiko da. Ondoren, liburutegi bat nola gehitu erakutsiko da, liburutegiaren instalazioak ekar ditzakeen arazoak aztertuz. Azkenik, Naoaren gorputz jarreran zein diskurtsoaren naturaltasunean egindako aurrerapenak azalduko dira. \r\nHonekin lortu nahi diren helburuak honako hauek dira: \r\n - Choreographeko proiektu baten estruktura ezagutzea.\r\n - Nao robot baten oinarrizko programa bat ikustea.\r\n - Chorepgraphek ematen dituen programazio blokeak eraldatzen jakitea, python erabiliz.\r\n - Choreographen eskaintzen diren tresnen bitartez, programan python liburutegi bat gehitzen ikastea.\r\nAurkezpen hau ulertzeko ez dago eskakizunik. Python pixka bat dakien edonork (\u201chello world\u201d bat egiten jakitearekin balio du) ulertzeko mailan emango da eta ez da konplexutasun tekniko handiko azalpenik emango. Printzipioz python ezagutzen ez duen edonor ere aurkezpen ia osoa ulertzeko gai izango da, programazio ingurumen bezala ez baita kodean gehiegi sartzen, pythonekin hasteko aukera ona izanez.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Educational", - "Hardware", - "Hardware" - ], - "emails": "lozaeta001@gmail.com", - "language": "Basque", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/endor-ipuinak-kontatzen-zituen-nao-robota", - "admin_type": "", - "companies": "" - }, - "531": { - "abstract_short": "Charla que explica qu\u00e9 es Unicode y otros conceptos relacionados para poder usar esta tecnolog\u00eda", - "sub_title": "Cansados de los UnicodeDecodeEncodeErrors? Frenen ese desastre! Vengan y entiendan Unicode :)", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@facundobatista", - "id": 531, - "speakers": "Facundo Batista", - "title": "Entendiendo Unicode", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Python 3", - "Python general", - "Python 2" - ], - "abstract_long": [ - "La charla muestra de forma te\u00f3rica/pr\u00e1ctica qu\u00e9 son Unicode, las planillas de c\u00f3digos, los caracteres, y las codificaciones, entra en detalle en las distintas codificaciones, para saber c\u00f3mo usarlas, ejemplifica las reglas de oro para utilizar Unicode en nuestros programa, y termina mostrando algunas funciones \u00fatiles para el manejo de esa tecnolog\u00eda." - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "facundobatista@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/entendiendo-unicode", - "admin_type": "", - "companies": "Canonical" - }, - "442": { - "abstract_short": "Python, as well as offering an ecosystem of tools for testing security and application pentesting.Python offers a tool ecosystem for developing our own tools security for testing applications and the servers security,identifying information about servers and potential vulnerabilities.\r\n\r\nThe ultimate objective is show a pentesting tool integrating some of the modules commented and try a demo showing info about our domain target and find vulnerabilities in it,\r\n", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@jmortegac", - "id": 442, - "speakers": "Jose Manuel Ortega", - "title": "Ethical hacking with Python tools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Security", - "Tooling", - "Science Track", - "Development" - ], - "abstract_long": [ - "Nowdays, Python is the language more used for developing tools within the field of security. Many of the tools can be found today as port scanner, vulnerability analysis, brute force attacks and hacking of passwords are written in python. The goal of the talk would show the tools available within the Python API and third-party modules for developing our own pentesting and security tools and finally show a pentesting tool integrating some of the modules.\r\n\r\nThe main topics of the talk could include:\r\n\r\n**1.Enter Python language as platform for developing security tools**\r\n\r\nIntroduction about the main libraries we can use for introducing in development of security tools such as socket and requests.\r\n\r\n**2.Libraries for obtain servers information such as Shodan, pygeocoder,pythonwhois**\r\n\r\nShodan is a search engine that lets you find specific computers (routers, servers, etc.) and get information about ports and services that are opened.\r\n\r\n**3.Analysis and metadata extraction in Python for images and documents**\r\n\r\nShow tools for scraping web data and obtain metadata information in documents and images\r\n\r\n**4.Port scanning with tools like python-nmap**\r\n\r\nWith python-nmap module we can check ports open for a target ip or domain.\r\n\r\n**5.Check vulnerabilities in FTP and SSH servers**\r\n\r\nWith libraries like ftplib and paramiko we can check if the server is vulnerable to ftp and ssh anonymous connections.\r\n\r\n" - ], - "abstract_extra": "I will discuss some of the tools that can be found in\r\n\r\nhttp://www.pythonsecurity.org/libs\r\n\r\nand i will show a practice pentesting tool where we can found integrated all tools mentioned,this tool is available in my github repository \r\n\r\nhttps://github.com/jmortega/python-pentesting\r\n\r\nI have been speaker in some python conferences like europython and pycones in 2015.\r\n\r\nIn my speakerdeck space you can see my presentations,some relationed with python https://speakerdeck.com/jmortega", - "tag_categories": [ - "Security", - "Programming", - ">>> Suggested Track", - "Programming" - ], - "emails": "jmoc25@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/ethical-hacking-with-python-tools", - "admin_type": "", - "companies": "" - }, - "652": { - "abstract_short": "During the last CPython sprints at PyCon US (Montreal), I started to contribute to the CPython project and I\r\nwanted to understand the beast.\r\nIn this case, there is only one solution, trace the code from the beginning.\r\nFrom the command line to the interpreter, we will take part to an adventure. The idea behind is just to show how CPython works for a new contributor.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@matrixise", - "id": 652, - "speakers": "Stephane Wirtel", - "title": "Exploring our Python Interpreter", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "During my last CPython sprint, I started to contribute to the CPython code and I\r\nwanted to understand the beast.\r\n\r\nIn this case, there is only one solution, trace the code from the beginning.\r\nFrom the command line to the interpreter, we will take part to an adventure\r\n\r\n* Overview of the structure of the project and the directories.\r\n* From the Py_Main function to the interpreter.\r\n* The used technics for the Lexer, Parser and the generation of the AST and of\r\ncourse of the Bytecodes.\r\n* We will see some bytecodes with the dis module.\r\n* How does VM works, it's a stack machine.\r\n* The interpreter and its main loop of the Virtual Machine.\r\n\r\nThe idea behind is just to show how CPython works for a new contributor to\r\nCPython.\r\n\r\nFrom the command line, we will learn that Python is a library and that we can\r\nembed it in a C project. In fact we will see the Py_Main function to the ceval.c\r\nfile of the interpreter.\r\n\r\nBut there is no magic in the CPython code, we will travel in the lexer and the\r\nparser of CPython, and why not, by the AST for one Python expression.\r\n\r\nAfter the AST, we will visit the Compiler and the Bytecodes for the\r\ninterpreter.\r\nOf course, we will learn there is the peepholer where some basic instructions\r\nare optimised by the this component.\r\n\r\nAnd of course, the interpreter, this virtual machine is really interesting for\r\nthe newbiew, because it's a big stack where the bytecodes are executed one by\r\none on the stack and the ceval.c file." - ], - "abstract_extra": "1. Intro (2 min)\r\n 1. Who am I?\r\n 2. Why we will visit the interpreter\r\n2. How to start ? (5 min)\r\n 1. The DevGuide\r\n 2. The Core Mentorship\r\n 3. Directories of Python \r\n3. What's the result of python -c \"x = 2 + 2\"? (20 min)\r\n 1. Command line \r\n 2. Lexer, Parser\r\n 3. Compiler \r\n 4. Bytecodes\r\n 5. Peepholer\r\n 4. Interpreter\r\n4. How to contribute (3min)\r\n\r\nAlready presented at PyCon Ireland 2015 and PyCon Canada 2015 at Toronto and PythonFOSDEM 2016 in Brussels.\r\nYou can find the slides at this address:\r\n\r\nhttps://speakerdeck.com/matrixise/exploring-our-python-interpreter", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "stephane@wirtel.be", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/exploring-our-python-interpreter", - "admin_type": "", - "companies": "Mgx.IO" - }, - "433": { - "abstract_short": "Do you ever wonder how your Python code looks to the interpreter? What those `.pyc` files are? Why one program outperforms another, even if the code is similar? Then let\u2019s dive into Python bytecode! Bytecode is the \"intermediate language\" that expresses your source code as machine instructions the interpreter can understand. In this talk we\u2019ll see what role it plays in executing Python programs, learn to read it with the `dis` module, and analyze it to better understand a program\u2019s performance.", - "sub_title": "What it is, how to read it, and why you should care", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@AnjanaVakil", - "id": 433, - "speakers": "Anjana Vakil", - "title": "Exploring Python Bytecode", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Do you ever wonder what your simple, beautiful Python code looks like to the interpreter? Are you starting to get curious about those `.pyc` files that always pop up in your project, and you always ignore? Would you like to start investigating your Python code's performance, and learn why some programs you write run faster than others, even if the code looks more or less the same? Have you simply fallen so completely in love with Python that you're ready to peer deep inside its soul?\r\n\r\nIf you, like me, answered \"yes\" to any of these questions, join me in an illuminating adventure into the world of Python bytecode! Bytecode is the \"intermediate language\" that expresses your Python source code as machine instructions the interpreter (specifically CPython, the \"standard\" interpreter) can understand. Together we'll investigate what that means, and what role bytecode plays in the execution of a Python program. We'll discover how we simple humans can read this machine language using the `dis` module, and inspect the bytecode for some simple programs. We'll learn the meaning of a few instructions that often appear in our bytecode, and we'll find out how to learn the rest. Finally, we'll use bytecode to understand why a piece of Python code runs faster if we put it inside of a function.\r\n\r\nWhen you go home, you'll be able to use bytecode to get a deeper understanding of your Python code and its performance. The adventure simply starts here; where it ends is up to you!\r\n\r\n" - ], - "abstract_extra": "Approximate timeline (30 minute talk):\r\n\r\n - :00 - Hello: Speaker intro. Gauge audience experience with bytecode. (1 min.)\r\n - :01 - What does the interpreter do? What is bytecode? What are .pyc files? (5 min.)\r\n - :06 - The dis module: What is it for? What objects can it be used on? How? (3 min.)\r\n - :09 - Understanding bytecode: Examples. What does each column mean? What are some common opcodes? (10 min.)\r\n - :19 - Case study: Python code runs faster inside of a function; different operations in the bytecode let us understand the performance difference (5 min.)\r\n - :24 - Further resources (1 min.)\r\n - :25 - Q&A (5 min.)\r\n\r\nAs far as I can tell, the last time a talk on this subject was given at EuroPython, it was by Larry Hastings in 2013 [(abstract and video )][1]. My talk will differ from his in that:\r\n\r\n - It will be only a 30-minute introduction\r\n - It will be accessible even to beginners\r\n - It will provide motivation to learn about bytecode even if you\u2019re not (planning to be) a CPython core developer\r\n - It will only cover disassembling CPython bytecode using the `dis` module\r\n\r\nI haven't given a talk at EuroPython or another Python conference before, but I have public speaking experience in the form of several talks at academic conferences, on subjects related to software and research for computational linguistics. A list of my previous talks (with links to slides) is available at [ https://vakila.github.io/talks/][2]. \r\n\r\nIn December 2015 I gave a lightning talk on this subject to an audience of approximately 50 developers at the Recurse Center [(https://www.recurse.com/)][3]; unfortunately the talk was not recorded and did not use slides.\r\n\r\nIf you have any questions, need clarification, or have any other feedback on this proposal, please do get in touch. I\u2019m best reached by email, but I will be on holiday with limited internet access from February 29 to March 7.\r\n\r\n [1]: https://ep2013.europython.eu/conference/talks/all-singing-all-dancing-python-bytecode\r\n [2]: https://vakila.github.io/talks/\r\n [3]: https://www.recurse.com/", - "tag_categories": [ - "Python", - "Python" - ], - "emails": "anjanavakil@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/exploring-python-bytecode", - "admin_type": "", - "companies": "Mozilla" - }, - "494": { - "abstract_short": "Learn how to use the new async/await language feature to write asynchronous code in Python and [Cython][1]. See how to benefit from the excellent low-level features that Cython provides to speed up or parallelise your code, interface natively with external C/C++ code, and achieve better responsiveness and lower latency also in mostly I/O bound applications.\r\n\r\n [1]: http://cython.org/", - "sub_title": "How to simply get more out of your async applications with Cython", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 494, - "speakers": "Stefan Behnel", - "title": "Fast Async Code with Cython and AsyncIO", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Cython", - "ASYNC / Concurreny", - "Web Track", - "C-Languages", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Python has recently seen a fresh development boost around asynchronous applications, triggered by the addition of the asyncio library and the new async/await language features in Python 3.5, but coming from a world of well established tools like [Twisted][2] and [Tornado][3]. The [Cython][1] compiler, which compiles Python code to C, has accompanied and influenced this development. It provides full language support for async/await under all Python versions starting from 2.6, as well as native interoperability with existing Python code and the new Python coroutines in Python 3.5.\r\n\r\nBenchmarks show that, while fully compatible, Cython compiled coroutines perform about 2-3x better than the same code executed in Python, but they additionally allow to interface natively with external C/C++ code, release the GIL, do parallel computation, and much more. All of this extends the applicable zone for asynchronous applications dramatically and can lead to better responsiveness and lower latency also for mostly I/O bound applications.\r\n\r\nThis joined talk by an async I/O expert and one of the Cython core developers explains how to write code with async/await in Python and Cython, and shows how to benefit from the excellent low-level features that Cython provides on top of Python.\r\n\r\n [1]: http://cython.org/\r\n [2]: https://twistedmatrix.com/\r\n [3]: http://www.tornadoweb.org/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Programming", - ">>> Suggested Track", - "Other Programming Languages", - "Python" - ], - "emails": "pycon@behnel.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/fast-async-code-with-cython-and-asyncio", - "admin_type": "", - "companies": "Skoobe" - }, - "522": { - "abstract_short": "The Python language is hard to optimize. Let's see how guards checked at runtime allows to implement new optimizations without breaking the Python semantic.", - "sub_title": "New exciting optimizations projects are coming into the next 3.6 release of CPython!", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@VictorStinner", - "id": 522, - "speakers": "Victor Stinner", - "title": "FAT Python: a new static optimizer for Python 3.6", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Code Analysis", - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "(Almost) everything in Python is mutable which makes Python a language very difficult to optimize. Most optimizations rely on assumptions, for example that builtin functions are not replaced. Optimizing Python requires a trigger to disable optimization when an assumption is no more true. FAT Python exactly does that with guards checked at runtime. For example, an optimization relying on the builtin len() function is disabled when the function is replaced.\r\n\r\nGuards allows to implement various optimizations. Examples: loop unrolling (duplicate the loop body), constant folding (propagates constants), copy builtins to constants, remove unused local variables, etc.\r\n\r\nFAT Python implements guards and an optimizer rewriting the Abstract Syntax Tree (AST). The optimizer is implemented in Python so it's easy to enhance it and implement new optimizations.\r\n\r\nFAT Python uses a static optimizer, it is less powerful than a JIT compiler like PyPy with tracing, but it was written to be integrated into CPython.\r\n\r\nI wrote 3 PEP (509, 510, 511) targeting Python 3.6. Some changes to support FAT Python have already been merged into Python 3.6.\r\n\r\nWe will also see other pending patches to optimize CPython core, and the bytecode project which allows to modify bytecode, it also includes a peephole optimizer written in pure Python.\r\n\r\nLinks:\r\n\r\n* http://faster-cpython.readthedocs.org/fat_python.html\r\n* http://fatoptimizer.readthedocs.org/\r\n* http://bytecode.readthedocs.org/", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Programming", - "Programming", - "Python", - "Python" - ], - "emails": "victor.stinner@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/fat-python-a-new-static-optimizer-for-python-36", - "admin_type": "", - "companies": "Red Hat" - }, - "718": { - "abstract_short": "FBTFTP: facebook's opensource framework for creating dynamic TFTP servers in Python3.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@pallotron", - "id": 718, - "speakers": "Angelo Failla", - "title": "FBTFTP: Facebook's open source python3 framework for dynamic TFTP servers.", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Python 3", - "System Architecture", - "Infrastructure", - "Open-Source", - "Scaling" - ], - "abstract_long": [ - "TFTP was first standardized in '81 (same year I was born!) and one of its primary uses is in the early stage of network booting. TFTP is very simple to implement, and one of the reasons it is still in use is that its small footprint allows engineers to fit the code into very low resource, single board computers, system-on-a-chip implementations and mainboard chipsets, in the case of modern hardware.\r\n\r\nIt is therefore a crucial protocol deployed in almost every data center environment. It is used, together with DHCP, to chain load Network Boot Programs (NBPs), like Grub2 and iPXE. They allow machines to bootstrap themselves and install operating systems off of the network, downloading kernels and initrds via HTTP and starting them up.\r\n\r\nAt Facebook, we have been using the standard in.tftpd daemon for years, however, we started to reach its limitations.\r\nLimitations that were partially due to our scale and the way TFTP was deployed in our infrastructure, but also to the protocol specifications based on requirements from the 80's.\r\n\r\nTo address those limitations we ended up writing our own framework for creating dynamic TFTP servers in Python3, and we decided to open source it.\r\n\r\nI will take you thru the framework and the features it offers. I'll discuss the specific problems that motivated us to create it. We will look at practical examples of how touse it, along with a little code, to build your own server that are tailored to your own infra needs.", - "", - "", - "" - ], - "abstract_extra": "Previous talks I have given can be found http://lanyrd.com/profile/pallotron/sessions/", - "tag_categories": [ - "Python", - "DevOps", - "DevOps", - "Open Source", - "DevOps" - ], - "emails": "pallotron@fb.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/fbtftp-facebooks-python3-framework-for-tftp-servers", - "admin_type": "", - "companies": "Facebook Ireland" - }, - "569": { - "abstract_short": "Sometimes it's hard to decide when a something is really done or cannot be improved further. \r\n**Game theory** can help you to make complicated decisions whenever you encounter flow problems.", - "sub_title": "Solving Flow Problems with Game Theory", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@hendorf", - "id": 569, - "speakers": "Alexander Hendorf", - "title": "Game Theory to the Rescue When Hard Decisions Are to Be Made", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Use Case", - "Business Track" - ], - "abstract_long": [ - "Sometimes it's hard to decide when a something is really done or cannot be improved further. \r\n**Game theory** can help you to make complicated decisions whenever you encounter flow problems.\r\n\r\nGame theory is \"the study of mathematical models of conflict and cooperation between intelligent rational decision-makers.\" \r\n\r\nIn our use case we had to match data for accounting: - the data was not always clean but we had some extra tools at hand and a complex system to make good guesses. Nevertheless it was hard to decide when to give up, some records were just not processable.\r\nFinally we used Game theory to make the decision.\r\n\r\nhttps://en.wikipedia.org/wiki/Game_theory\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "hendorf@opotoc.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/game-theory-to-the-rescue-when-hard-decisions-are-to-be-made", - "admin_type": "", - "companies": "K\u00f6nigsweg GmbH" - }, - "499": { - "abstract_short": "Airflow (https://github.com/airbnb/airflow) is an open source Python package from Airbnb to control your workflows.\r\n\r\nThis talk will explain the concepts behind Airflow, demonstrating how to define your own workflows in Python code and how to extend the functionality with new task operators and UI blueprints by developing your own plugins. You'll also get to hear about our experiences at Blue Yonder, using this tool in real-world scenarios.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ctrebing", - "id": 499, - "speakers": "Christian Trebing", - "title": "Get in control of your workflows with Airflow", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Architecture", - "Best Practice" - ], - "abstract_long": [ - "Whenever you work with data, sooner or later you stumble across the definition of your workflows. At what point should you process your customer's data? What subsequent steps are necessary? And what went wrong with your data processing last Saturday night?\r\n\r\nAt Blue Yonder we use Airflow (https://github.com/airbnb/airflow), an open source Python package from Airbnb to solve these problems. It can be extended with new functionality by developing plugins in Python, without the need to fork the repo. With Airflow, we define workflows as directed acyclic graphs and get a shiny UI for free. Airflow comes with some task operators which can be used out of the box to complete certain tasks. For more specific cases, tasks can be developed by the end user. Best of all: even the configuration is done completely in Python!\r\n\r\nThis talk will explain the concepts behind Airflow, demonstrating how to define your own workflows in Python code and how to extend the functionality with new task operators and UI blueprints. You'll also get to hear about our experiences using this tool in real-world scenarios." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases" - ], - "emails": "christian.trebing@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/get-in-control-of-your-workflows-with-airflow", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "383": { - "abstract_short": "To get real time insight into your running applications you need to instrument them and collect metrics: count events, measure times, expose numbers. Sadly this important aspect of development was a patchwork of half-integrated solutions for years. Prometheus changed that and this talk will walk you through instrumenting your apps and servers, building dashboards, and monitoring using metrics.", - "sub_title": "How Prometheus Can Unify Your Metrics", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@hynek", - "id": 383, - "speakers": "Hynek Schlawack", - "title": "Get Instrumented!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Performance", - "Best Practice", - "Operations", - "DevOps general", - "Use Case" - ], - "abstract_long": [ - "Metrics are highly superior to logging in regards of understanding the past, presence, and future of your applications and systems. They are cheap to gather (just increment a number!) but setting up a metrics system to collect and store them is a major task.\r\n\r\nYou may have heard of statsd, Riemann, Graphite, InfluxDB, or OpenTSB. They all look promising but on a closer look it\u2019s apparent that some of those solutions are straight-out flawed and others are hard to integrate with each other or even to get up and running.\r\n\r\nThen came Prometheus and gave us independence of UDP, no complex math in your application, multi-dimensional data by adding labels to values (no more server names in your metric names!), baked in monitoring capabilities, integration with many common systems, and official clients for all major programming languages. In short: a *unified* way to gather, process, and present metrics.\r\n\r\nThis talk will:\r\n\r\n1. explain why you want to collect metrics,\r\n1. give an overview of the problems with existing solutions,\r\n1. try to convince you that Prometheus may be what you\u2019ve been waiting for,\r\n1. teach how to impress your co-workers with beautiful graphs and intelligent monitoring by putting a fully instrumented Python application into production,\r\n1. and finally give you pointers on how to migrate an existing metrics infrastructure to Prometheus *or* how to integrate Prometheus therein.\r\n", - "", - "", - "" - ], - "abstract_extra": "# Notes\r\n\r\nLast year I spoke about metrics and logging in general. People approached me afterwards expressing interest in metrics but felt lost. And truth to be told, back then the metrics landscape was not very good.\r\n\r\nThe rise of [Prometheus](http://prometheus.io) with decent Python integration changed that considerably. It\u2019s possible to have one coherent metrics platform for both system and app metrics (in various programming languages) and even get monitoring for free.\r\n\r\nTherefore, as a follow-up, I want to do this kind-of case study on how I\u2019ve harmonized our metrics. The talk will **not** build on the older one though.\r\n\r\nThe key idea is to start from nothing and ending up with a well-instrumented system including monitoring. I don\u2019t believe there\u2019s ever been a comparable talk.\r\n\r\n# Technical Aptitude\r\n\r\nI\u2019ve implemented most of [Variomedia](http://www.variomedia.de)\u2019s metrics infrastructure using Graphite and later moved it to Prometheus. Therefore I know both sides of the coin. I\u2019m also working on the [asyncio/Twisted integration](https://github.com/hynek/prometheus_async/) for the Prometheus Python client.\r\n\r\nIn general OSS terms, I\u2019m a PSF fellow, a dormant CPython core dev, an active Twisted core dev, help out in way too many projects, and have a fair share of [own projects](https://github.com/hynek/) too.\r\n\r\n\r\n# Speaking Experience\r\n\r\nThis talk has been [accepted](https://us.pycon.org/2016/schedule/presentation/1601/) to PyCon US. People already [expressed their hopes](https://twitter.com/d0ugal/status/695678965529374720) that I submit it to EP too.\r\n\r\nOther than that, I\u2019ve spoken at the past three PyCon US ([deployments](https://hynek.me/talks/python-deployments/), [TLS](https://hynek.me/talks/tls/), and [Loggging/Metrics](https://hynek.me/talks/beyond-grep/)), the past three EuroPythons (same), PyCon Russia 2014 (TLS, invited speaker), PyCon PL 2014 (TLS, invited speaker), PiterPy 2015 (Logging/Metrics, invited speaker), PyCon JP 2015 (Logging/Metrics, keynote). From what I gather from the feedback and buzz, I think it\u2019s fair to say that my talks have been well-received so far. Especially because I try to make them both informative *and* entertaining at once.\r\n\r\nI put a *lot* of effort into my talks: I start at least three months prior to the conference and work, polish, and practice until EP. Therefore I\u2019m hopeful to deliver another popular talk. Of course, there will be a accompanying page again like in the previous years.\r\n\r\n# Preliminary Outline\r\n\r\n1. Prometheus\r\n\t- short history\r\n\t- philosophy\r\n\t\t- push vs. pull\r\n\t\t- simplest math in-app\r\n\t- why no statsd/Graphite?\r\n\t\t- UDP\r\n\t\t\t- more load = more packets\r\n\t\t\t- lots of load = lost packets\r\n\t\t- one-dimensional data (e.g. `app.server1.process5.request_time` instead of `app.request_time` with tags/labels with metadata)\r\n\t- presentation of result: beautiful dashboard & working monitoring\r\n1. System Metrics\r\n\t- `node_exporter` for native system metrics\r\n\t- examples of other popular exporters like nginx\r\n\t- `collectd_exporter` and `graphite_exporter` as bridges while transitioning\r\n1. Instrumenting Your App [*concrete* examples]\r\n\t- general considerations\r\n\t\t- what to measure\r\n\t\t- how to avoid code duplication\r\n\t\t- protecting your exposed metrics\r\n\t- example: long-running web app (simple pyramid or flask app with DB & caching)\r\n\t- example: batch job (e.g. a backup)\r\n\t- example: asyncio (simple echo server or something similar)\r\n\t- example: Twisted (same)\r\n\t- opaque cloud environments\r\n\t\t- how does heroku fit in?\r\n1. Visualisation\r\n\t- building queries in the integrated graph browser\r\n\t- Grafana\r\n\t\t- building beautiful and useful dashboards\r\n\t\t- correlating system metrics with app metrics\r\n1. Monitoring\r\n\t- defining alerts\r\n\t- integration with 3rd parties (e.g. PagerDuty, nagios)\r\n1. Next Steps\r\n\t- how to fully automate metrics endpoint discovery (e.g. consul)\r\n\t- long term metrics storage", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "DevOps", - "DevOps", - "Best Practice and Use Cases" - ], - "emails": "schlawack@variomedia.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/get-instrumented", - "admin_type": "", - "companies": "Variomedia AG" - }, - "672": { - "abstract_short": "A side-by-side walkthrough of basic Go syntax and semantics compared to Python.", - "sub_title": "A side-by-side walkthrough of basic Go syntax and semantics compared to Python", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@STajbakhsh", - "id": 672, - "speakers": "Shahriar Tajbakhsh", - "title": "Go for Python Programmers", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python general", - "Data Structures", - "Programming", - "Go-Lang" - ], - "abstract_long": [ - "A side-by-side walkthrough of basic Go syntax and semantics compared to Python." - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Programming", - "Programming", - "Other Programming Languages" - ], - "emails": "sh.tajbakhsh@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/go-for-python-programmers", - "admin_type": "", - "companies": "Osper" - }, - "626": { - "abstract_short": "Grocker is a Docker build chain for Python. It transforms your Python package into a self-contained Docker image which can be easily deployed in a Docker infrastructure. Grocker also adds a Docker entry point to easily start your application.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 626, - "speakers": "Fabien Bochu", - "title": "Grocker, a Python build chain for Docker", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Docker" - ], - "abstract_long": [ - "At Polyconseil, we build Paris electric car sharing service: Autolib'. This system is based on many services developed using web technologies, Django and our own libraries to handle business logic.\r\n\r\nPackaging is already a difficult problem, deploying large Python projects is even more difficult. When deploying on a live and user-centric system like Autolib', you cannot rely on Pip and external PyPI servers which might become unavailable and are beyond your control. In the beginning we used classic Debian packaging: it was a maintenance hell. It took hours to build our packages and update their metadata to match our Python packages. So we switched to Docker.\r\n\r\nDocker allows us to have a unique item that is deployed in production systems: code updates are now atomic and deterministic! But before deploying the Docker image, you need to build it. That's where Grocker comes in.\r\n\r\nGrocker is a Docker build chain for Python. It will transform your Python package into a self-contained Docker image which can be easily deployed in a Docker Infrastructure. Grocker also adds a Docker entry point to easily start your application.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "DevOps" - ], - "emails": "fabien.bochu@polyconseil.fr", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/grocker-a-python-build-chain-for-docker", - "admin_type": "", - "companies": "Polyconseil" - }, - "463": { - "abstract_short": "El objetivo de la charla ser\u00eda mostrar las herramientas que disponemos dentro de la propia API de Python y librer\u00edas de terceros para desarrollar nuestras propias herramientas que permitan realizar pruebas de seguridad y de pentesting de las aplicaciones.", - "sub_title": "Pentesting con python", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@jmortegac", - "id": 463, - "speakers": "Jose Manuel Ortega", - "title": "Hacking \u00e9tico con herramientas Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Security", - "Privacy", - "Science Track", - "Development", - "Cryptography" - ], - "abstract_long": [ - "Python se ha convertido en el lenguaje m\u00e1s usado para desarrollar herramientas dentro del \u00e1mbito de la seguridad.\r\nMuchas de las herramientas que podemos encontrar hoy en d\u00eda como esc\u00e1ner de puertos, an\u00e1lisis de vulnerabilidades, ataques por fuerza bruta y hacking de passwords, se han escrito en este lenguaje ,adem\u00e1s de ofrecer un ecosistema de herramientas para realizar pruebas de seguridad y de pentesting de aplicaciones. \r\n\r\nEntre los puntos a tratar podr\u00edamos destacar: \r\n\r\n - **Introducir Python como lenguaje de desarrollo de herramientas de seguridad**\r\n - **Introducir librer\u00edas para obtener informaci\u00f3n de nuestro objetivo como Shodan,pygeocoder,pygeoip**\r\n - **An\u00e1lisis y extracci\u00f3n de metadatos en Python en im\u00e1genes y documentos** \r\n - **An\u00e1lisis de puertos con herramientas como python-nmap**\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Comentar\u00e9 algunas de las herramientas que podemos encontrar en http://www.pythonsecurity.org/libs y como demo pr\u00e1ctica mostrar\u00e9 una herramienta de pentesting creada desde cero con algunos de los m\u00f3dulos que comentar\u00e9. \r\n\r\nHe impartido algunas charlas sobre seguridad en algunas conferencias.\r\nLas presentaciones de las charlas que he impartido se pueden ver en:\r\nhttps://speakerdeck.com/jmortega", - "tag_categories": [ - "Security", - "Security", - ">>> Suggested Track", - "Programming", - "Security" - ], - "emails": "jmoc25@gmail.com", - "language": "Spanish", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/hacking-etico-con-herramientas-python", - "admin_type": "", - "companies": "" - }, - "456": { - "abstract_short": "If you have ever happened to need to deal with GPS data in Python you may have felt a bit lost. This talk presents libraries starting from basic reading and writing GPS tracks in the GPS Exchange Format to adding missing elevation information. Also visualisation of tracks on OpenStreetmap data with interactive plots in Jupyter notebooks is covered. Additionally common algorithms for GPS like Douglas-Peucker and Kalman filter are explained.", - "sub_title": "Reading, writing, handling and visualizing GPS data", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@FlorianWilhelm", - "id": 456, - "speakers": "Florian Wilhelm", - "title": "Handling GPS Data with Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Science", - "Jupyter/iPython Notebook", - "Sensors" - ], - "abstract_long": [ - "If you have ever happened to need to deal with GPS data in Python you may have felt a bit lost. There are many libraries at various states of maturity and scope. Finding a place to start and to actually work with the GPS data might not be as easy and obvious as you might expect from other Python domains. \r\nInspired from my own experiences of dealing with GPS data in Python, I want to give an overview of some useful libraries. From basic reading and writing GPS tracks in the GPS Exchange Format with the help of gpxpy to adding missing elevation information with srtm.py. Additionally, I will cover mapping and visualising tracks on OpenStreetmap with mplleaflet that even supports interactive plots in a Jupyter notebook.\r\nBesides the tooling, I will also demonstrate and explain common algorithms like Douglas-Peucker to simplify a track and the famous Kalman filters for smoothing. For both algorithms I will give an intuition about how they work as well as their basic mathematical concepts. Especially the Kalman filter that is used for all kinds of sensor, not only GPS, has the reputation of being hard to understand. Still, its concept is really easy and quite comprehensible as I will also demonstrate by presenting an implementation in Python with the help of Numpy and Scipy. My presentation will make heavy use of the Jupyter notebook which is a wonderful tool perfectly suited for experimenting and learning.\r\n", - "", - "", - "" - ], - "abstract_extra": "Hi there,\r\n\r\nyou can find more information about me on the [homepage][1]. There you can also find the talks I have held before at EuroPython 2015/2014 etc. I submitted this additional talk if you find my first talk [Kalman and Bayesian Filters][2] maybe too technical or too much focused on mathematics. This talk will be more practical and Python programming oriented.\r\nI am looking forward to EuroPython 2016 in Bilbao!\r\n\r\nBest regards from Cologne,\r\nFlorian\r\n\r\n [1]: http://www.florianwilhelm.info/\r\n [2]: https://ep2016.europython.eu/conference/talks/kalman-and-bayesian-filters-in-python\r\n", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Hardware" - ], - "emails": "florian.wilhelm@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/handling-gps-data-with-python", - "admin_type": "", - "companies": "inovex" - }, - "726": { - "abstract_short": "Scaling a project to a worldwide scale with the same performance and availability in every region using Python isn\u2019t easy, but with the right mindset and tools it\u2019s a very viable target.", - "sub_title": "", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 726, - "speakers": "John Kraal", - "title": "High Availability Scaling with Share Nothing Architecture", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Security", - "Data Structures", - "Architecture", - "Distributed Systems", - "Scaling" - ], - "abstract_long": [ - "Scaling a project to a worldwide scale with the same performance and availability in every region using Python isn\u2019t easy, but with the right mindset and tools it\u2019s a very viable target. We will discuss methods of delivering software, with automated scaling systems, building units out of your project to manage separately and how to reliably and securely distribute data to separate clusters, and how we have achieved this with the use of Celery, Redis, Databases, Protobuf and other modern tools, whilst making sure to highlight our pitfalls and successes" - ], - "abstract_extra": "", - "tag_categories": [ - "Security", - "Programming", - "Programming", - "DevOps", - "DevOps" - ], - "emails": "john@getbynder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/high-availability-scaling-with-share-nothing-architecture", - "admin_type": "", - "companies": "Bynder" - }, - "546": { - "abstract_short": "The talk will cover new async/await syntax in Python, asyncio library and ecosystem around it, and ways to use them for creating high performance servers. It will explain how to build custom event loops for asyncio, with an example of using the libuv library with Cython to achieve 2-3x performance boost over vanilla asyncio. ", - "sub_title": "Boosting asyncio performance 2x", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@1st1", - "id": 546, - "speakers": "Yury Selivanov", - "title": "High Performance Networking in Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Performance", - "Architecture", - "Web Track", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "The talk will start with an overview of async/await syntax introduced with PEP 492 in Python 3.5. We'll go through asynchronous context managers and iteration protocols it introduces. I'll briefly explain how the feature is implemented in CPython core.\r\n\r\nThen we'll explore asyncio design. I'll briefly cover event loop, policies, transports, protocols and streams abstractions. I'll explain that event loops are pluggable, which really makes asyncio a universal framework.\r\n\r\nWe'll cover libuv - a high performance networking library that drives NodeJS. I'll highlight where it's similar to asyncio and how it's different.\r\n\r\nIn the final part of the talk I'll explain how to make an asyncio compatible event loop on top of libuv. I'll showcase Cython, which is an amazing tool for tasks like this.\r\n\r\nFinally, I'll share some ideas on how we can further improve the performance of asyncio and networking in Python, and what are the challenges that we will face.\r\n\r\n\r\n**Objectives:**\r\n\r\n1. Deeper understanding of async/await in Python and why it's important. \r\n2. Deeper understanding of asyncio architecture and protocols. \r\n3. How to improve asyncio performance by implementing custom event loops.\r\n4. Show that it's easy to integrate existing complex & low level libraries with Cython. \r\n5. Some perspective on how Python may evolve wrt networking.\r\n\r\n" - ], - "abstract_extra": "I'm an active maintainer of asyncio module (along with Guido van Rossum and Victor Stinner). I think I have a rather unique inner-view at how asyncio works and where it will evolve in the coming years.\r\n\r\nI'm also the author and implementor of PEP 492 -- async/await syntax in Python 3.5. I'm also working on a new PEP to add asynchronous generators in CPython 3.6. I think it might be interesting for people to ask me some interesting questions about async/await and asynchronous Python programming in general.", - "tag_categories": [ - "Python", - "Programming", - "Programming", - ">>> Suggested Track", - "Programming" - ], - "emails": "yury@magic.io", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/high-performance-networking-in-python", - "admin_type": "", - "companies": "MagicStack" - }, - "744": { - "abstract_short": "This talk will give an overview about the Intel\u00ae Distribution for Python which delivers high performance acceleration of Python code on Intel processors for scientific computing, data analytics, and machine learning.\r\n", - "sub_title": "Development of high performance Python code for machine learning, analytics and HPC", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 744, - "speakers": "Ralph de Wargny", - "title": "High Performance Python on Intel Many-Core Architecture", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "This talk will give an overview about the Intel\u00ae Distribution for Python which delivers high performance acceleration of Python code on Intel processors for scientific computing, data analytics, and machine learning. \r\nIn the first part of the talk, we'll look at the architecture of the latest Intel processors, including the brand new Intel Xeon Phi, also known as Knights Landing, a many-core processor, which was just released end of June 2016. \r\nIn the second part, we will see which tools and libraries are available from Intel Software to enable high performance Python code on multi-core and many-core processors.", - "", - "", - "" - ], - "abstract_extra": "...", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "ralph.wargny@intel.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/high-performance-python-on-intel-architecture", - "admin_type": "", - "companies": "Intel Software" - }, - "738": { - "abstract_short": "This talk is a case-study of how Python (Pandas, NumPy, SciKit-learn) can be implemented to identify the influence of the potential drivers of a decline in size of Atlantic herring populations using Gradient Boosting Regression Trees. \r\n\r\n", - "sub_title": "Predicting drivers of change with Gradient Boosting Regression Trees", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@", - "id": 738, - "speakers": "Olga Lyashevska", - "title": "How can machine learning help to predict changes in size of Atlantic herring ?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Science", - "Predictions", - "Case Study", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Machine-Learning" - ], - "abstract_long": [ - "A decline in size and weight of Atlantic herring in the Celtic Sea has been observed since the mid-1980\u2019s. The cause of the decline remains largely unexplained but is likely to be driven by the interactive effect of various endogenous and exogenous factors. The goal of this study is to interrogate a long time-series of biological data obtained from commercial fisheries from 1959 to 2012. We use gradient boosting regression trees to identify important variables underlying changes in growth from various potential drivers, such as: \r\n- Atlantic multidecadal oscillation;\r\n- sea surface temperature;\r\n- salinity;\r\n- wind;\r\n- zooplankton abundance;\r\n- fishing pressure.\r\nThis learning algorithm allows to quantify the influence of the potential drivers of change with the test error lower when compared to other supervised learning techniques. The predictor variables importance spectrum (feature importance) helps to identify the underlying patterns and potential tipping points while resolving the external mechanisms underlying observed changes in size and weight of herring. This analysis is a useful case-study of how Python can be implemented in academia. The outputs of the analysis are of relevance to conservation efforts and sustainable fisheries management which promotes species resistance and resilience." - ], - "abstract_extra": "This research will be presented at International Statistical Ecology Conference in Seattle on June 28 - July 1st 2016 (http://depts.washington.edu/uwconf/wordpress/isec2016/). \r\nWhereas in Seattle I will mostly focus on statistical model and ecological meaning of the findings, at EuroPython I would like to demonstrate the implementation of the analysis with Scikit-learn using IPython notebook. \r\n\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - "Case Study", - "Data Science", - "Data Science" - ], - "emails": "olga.lyashevska@gmit.ie", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-can-machine-learning-help-to-predict-changes-in-size-of-atlantic-herring", - "admin_type": "", - "companies": "Galway-Mayo Institute of Technology" - }, - "496": { - "abstract_short": "OpenStack is an infrastructure stack mostly developed in Python. In this talk, Thierry Carrez and Doug Hellmann, both Python Software Foundation fellows and OpenStack Technical Committee members, will look at the symbiotic relationship between OpenStack and Python.", - "sub_title": "", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@tcarrez, @doughellmann", - "id": 496, - "speakers": "Thierry Carrez, Doug Hellmann", - "title": "How OpenStack makes Python better (and vice-versa)", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Best Practice", - "failures/mistakes", - "Test Driven Development (TDD)", - "Development", - "OpenStack" - ], - "abstract_long": [ - "OpenStack is an open source stack that can be deployed on raw computing resources to privately or publicly present Infrastructure as a Service. It now consists of more than 4.5 million lines of code, 85% of which is Python. In this talk, Thierry Carrez and Doug Hellmann, both Python Software Foundation fellows and OpenStack Technical Committee members, will look at the symbiotic relationship between OpenStack and Python.\r\n\r\nWe'll go back in history and explain why OpenStack originally picked Python as its main language 6 years ago, and explore what does Python bring to OpenStack. We'll dive into examples of OpenStack pushing Python libraries to their limits and exposing new bugs. We'll look into the massive cloud-based continuous integration system that OpenStack uses and explain how it exposes bugs in Python libraries in the minutes after they are published to PyPI. We'll look into Python libraries that were created by the OpenStack community and libraries that the OpenStack community took over. Finally we'll expose a few best practices that Python developers can follow to get the most of this symbiotic relationship.", - "", - "", - "" - ], - "abstract_extra": "This 45-min talk would be created for EuroPython and could be made to last 30 or 60 min if that would be your preference. If selected, this talk would be co-presented by Thierry Carrez (see bio above) and Doug Hellmann.\r\n\r\nDoug has been employed to work on OpenStack full time for three years. He is a member of the Python Software Foundation, and served as its Communications Director from 2010-2012. After a year as a regular columnist for Python Magazine, he served as Editor-in-Chief from 2008-2009. Between 2007 and 2011, Doug published the popular \"Python Module of the Week\" series on his blog, and that material served as the basis for his book \"The Python Standard Library By Example\". He lives in Athens, Georgia.\r\n\r\nDoug presented at various Python conferences in the past, including PyCon in 2013 [https://us.pycon.org/2013/speaker/profile/297/][1].\r\n\r\nThierry presented OpenStack at EuroPython, back in 2011 [https://ep2013.europython.eu/conference/talks/snakes-on-a-cloud-a-presentation-of-the-openstack-project][2].\r\n\r\n [1]: https://us.pycon.org/2013/speaker/profile/297/\r\n [2]: https://ep2013.europython.eu/conference/talks/snakes-on-a-cloud-a-presentation-of-the-openstack-project\r\n", - "tag_categories": [ - "Best Practice and Use Cases", - "Best Practice and Use Cases", - "Testing", - "Programming", - "DevOps" - ], - "emails": "thierry.carrez@gmail.com, doug@doughellmann.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-openstack-makes-python-better-and-vice-versa", - "admin_type": "", - "companies": "OpenStack Foundation, Red Hat" - }, - "435": { - "abstract_short": "The popular board game of Risk has many fans around the world. \r\nUsing a Python-based simulation of the game, we try to answer several questions that went through the minds of many players:\r\n- Which missions are easiest to attain?\r\n- Does your starting position influence your chances?\r\n- Which regions are easiest to defend?", - "sub_title": "analyzing the game of Risk with Python", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 435, - "speakers": "Rogier van der Geer", - "title": "How to conquer the world", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Algorithms", - "Predictions", - "Performance", - "Programming" - ], - "abstract_long": [ - "The popular board game of Risk has many fans around the world. \r\nUsing a Python-based simulation of the game, we try to answer several questions that went through the minds of many players;\r\n\r\n- Which missions are easiest to attain?\r\n- Does your starting position influence your chances?\r\n- Which regions are easiest to defend?\r\n\r\nDuring this talk we'll explain what genetic algorithms are and we'll explain an entertaining use-case: how to win at popular board games. During the talk we'll demo how object oriented patterns help with the design and implementation of these algorithms. We'll also demonstrate a library that allows users to push their own risk bots into a game and battle it out on.", - "", - "", - "" - ], - "abstract_extra": "Before joining GoDataDriven, Rogier obtained a PhD in particle physics. Rogier gained hands-on experience with handling enormous quantities of data and processing, or 'charming', them into a manageable format before performing complicated analyses. After his PhD he exchanged physical science for data science at GoDataDriven, where he is now putting his skills to use on more business-driven problems. He likes applying data science to anything; be it his daily commute, improving his photography skills or the contents of his lunch box.", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Programming", - "Programming" - ], - "emails": "rogiervandergeer@godatadriven.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-genetic-algorithm-to-play-the-game-of-risk", - "admin_type": "", - "companies": "GoDataDriven" - }, - "633": { - "abstract_short": "Optimization in Python (also known as mathematical programming) can be performed by minimization (or maximization) of an objective function within a model that can include discrete variables subject to a set of constrains. At this talk, chemical engineering students of the University of Alicante will introduce the audience to the possibilities of optimization, presenting Pyomo and showing real world examples such as how to improve your diet and save money at fast food restaurants.\r\n\r\n", - "sub_title": "Mathematical optimization with Pyomo or how to solve LP, NLP and MILP problems with Python", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@zuriich92, @DanielDomeneL", - "id": 633, - "speakers": "Zuria Bauer, Daniel Domene L\u00f3pez", - "title": "How to improve your diet and save money with Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Science", - "Beginners", - "Jupyter/iPython Notebook", - "Engineering", - "Science Track" - ], - "abstract_long": [ - "Process optimization in industry has become essential in order to maximize the resources available and reduce energy consumption. \r\nOptimization problems become interesting when dealing with restrictions (linear or nonlinear) and integer variables (modeling the discrete decisions). Python ecosystem presents different libraries to solve optimization problems, some of them are CVXOpt, CVXPy, PulP, OpenOpt, or Pyomo. \r\nAmong them, Pyomo results interesting because:\r\n\r\n- It can be used for Mathematical modeling in Python similarly to AMPL (and GAMS)\r\n- It communicates with the main solvers used in this field such as GLPK, Gurobi, CPLEX, CBC and PICO\r\n- It's free and open source Python library (BSD license), being developed by Sandia National Laboratories, USA.\r\n- It supports Python 3 and it is easy to install.\r\n\r\nThe talk will be divided in three parts:\r\n\r\n1. _Introduction to Mathematical Programming/Optimization (15 min):_ visual introduction to optimization concepts including restrictions and non linearties (linear Programming, Nonlinear Programming, ILP, MIP, MINLP). \r\n\r\n2. _Introduction to the Pyomo sintax and a quick note for the installation (20 min):_ showing how to improve their diet and save money when ordering food in fast food restaurants.\r\n\t\r\n3. _Optimization problems in engineering (10 min):_ showing more advanced optimization examples that include decision variables.\r\n\r\n ", - "", - "", - "" - ], - "abstract_extra": "The talk will be oriented to _beginners_ and will be given by _Chemical Engineering students_. Slides, Jupyter Notebooks will be available on [GitHub][1]\r\n\r\n [1]: https://github.com/CAChemE/Mathematical-Optimization/\r\n", - "tag_categories": [ - "Sciences", - "Educational", - "Python", - "Everything Else", - ">>> Suggested Track" - ], - "emails": "zuriich92@gmail.com, daniel.domene.lopez2@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-to-improve-your-diet-and-save-money-with-python", - "admin_type": "", - "companies": ", CAChemE" - }, - "401": { - "abstract_short": "This talk is for people who have a lot of floating numbers inside\r\nPostgreSQL tables. I will bring as an example my personal experience\r\nwith a scientific project that used PostgreSQL as storage for a rather\r\ncomplex set of composite multidimensional arrays and ran into all\r\nsorts of performances issues, both in reading and writing the data. I\r\nwill explain how I solved all that by dropping the database in favor\r\nof an HDF5 file, while keeping the application running and the users\r\nhappy.\r\n", - "sub_title": "Refactoring a distributed parallel earthquake simulation engine", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@", - "id": 401, - "speakers": "Michele Simionato", - "title": "How to migrate from PostgreSQL to HDF5 and live happily ever after", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Algorithms", - "Big Data", - "Architecture", - "Science Track", - "Testing" - ], - "abstract_long": [ - "This talk is for people who have a lot of floating numbers inside\r\nPostgreSQL tables and have problems with that. I will narrate my\r\nexperience with a scientific project that used PostgreSQL as storage\r\nfor a rather complex set of composite multidimensional arrays and ran\r\ninto all sorts of performances issues, both in reading and writing the\r\ndata. I will discuss the issues and the approach that was taken first\r\nto mitigate them (unsuccessfully) and then to remove them\r\n(successfully) by a complete rethinking of the underlying architecture\r\nand eventually the removal of the database. I will talk about the\r\nmigration strategies that were employed in the transition period and\r\nhow to live with a mixed environment of metadata in PostgreSQL and\r\ndata in an HDF5 file. I will also talk about concurrency, since the\r\nunderlying application is distributed and massively parallel, and\r\nstill it uses the purely sequential version of HDF5. Questions from\r\nthe audience are expected and welcome.\r\nThe talk is of interest to a large public, since it is mostly about\r\nmeasuring things, monitoring and testing a legacy system,\r\nmaking sure that the changes do not break the previous behavior\r\nand keeping the users happy, while internally rewriting\r\nall of the original code. And doing that in a small enough number of years!\r\n" - ], - "abstract_extra": "I am a well known Pythonista since 2002, I have spoken at the EuroPython conference several times in the past and I am also the author of the decorator module : https://pypi.python.org/pypi/decorator", - "tag_categories": [ - "Data Science", - "Data Science", - "Programming", - ">>> Suggested Track", - "Testing" - ], - "emails": "michele.simionato@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/how-to-migrate-from-postgresql-to-hdf5-and-live-happily-ever-after", - "admin_type": "", - "companies": "GEM" - }, - "737": { - "abstract_short": "This presentation show how to deploy **[Wendelin][1]**, the free software platform for Big Data & Machine Learning, using **[SlapOS][2]** , the free software hyperconverged Operating System (hOS). Written in 100% in Python, SlapOS and Wendelin, can create a complete Big Data Infraestruture with out-of-core capabilities ready to use and operate in just few hours.\r\n\r\n [1]: http://www.wedelin.io\r\n [2]: http://community.slapos.org\r\n", - "sub_title": "Provisioning from sensors to out-of-core-pydata in few minutes", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@ramonnerat", - "id": 737, - "speakers": "Rafael Monnerat", - "title": "Hyperconvergence meets BigData", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Big Data", - "Use Case", - "Open-Source", - "Deployment/Continuous Integration and Delivery", - "Configuration Management (Ansible/Fabric/Chef/...)" - ], - "abstract_long": [ - "This presentation aims to demonstrate how to use [SlapOS][1] (Hyperconverged OS) to deploy an entire Big Data Infrastrucure and show how \"data life cycle\" can be managed with [Wendelin][2] - covering ingestion, analysis, visualization and weaving it into an application.\r\n\r\nWe'll show how Wendelin and SlapOS could handle acquisition, analysis and exploitation of data, making it a potential solution for IOT scenarios where data is available and needs some logic applied before being presented as web application, possibly on a commercial basis.\r\n\r\nThe agenda of the presentation includes an introduction on SlapOS, as a tool used to deploy a wide range of different services and an introduction of Wendelin, as a tool in order to make out-of-core python applications.\r\n\r\nAfter a short introduction, we progress to show the steps to deploy SlapOS infrastructure and later to deploy Wendelin on the just deployed SlapOS, including an use case which shows SlapOS deploying a fluentd instance to ingest data to the Wendelin Database.\r\n\r\nTo conclude, we make a live demo with an Jupiter using out-of-core python to handle wav files stored on Wendelin, and a second short demo on handle computer resources consumption data.\r\n\r\n [1]: http://community.slapos.org\r\n [2]: http://www.wendelin.io/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - "Open Source", - "DevOps", - "DevOps" - ], - "emails": "rafael@nexedi.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/hyperconvergence-meets-bigdata", - "admin_type": "", - "companies": "Nexedi" - }, - "408": { - "abstract_short": "In an era of almost-unlimited textual data, accurate sentiment analysis can be the key for determining if our products, services and communities are delighting or aggravating others. We'll take a look at the sentiment analysis landscape in Python: touching on simple libraries and approaches to try as well as more complex systems based on machine learning.", - "sub_title": "A Survey of Python Sentiment Analysis Tools", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@kjam", - "id": 408, - "speakers": "Katharine Jarmul", - "title": "I Hate You, NLP... ;)", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Natural Language Processing", - "Algorithms", - "failures/mistakes", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "Overview\r\n-------------\r\n\r\nThis talk aims to introduce the audience to the wide array of tools available in Python focused on sentiment analysis. It will cover basic semantic mapping, emoticon mapping as well as some of the more recent developments in applying neural networks, machine learning and deep learning to natural language processing. Participants will also learn some of the pitfalls of the different approaches and see some hands-on code for sentiment analysis.\r\n\r\nOutline\r\n-----------\r\n* NLP: then and now\r\n* Why Emotions Are Hard\r\n* Simple Analysis\r\n * TextBlob (& other available libraries)\r\n * Bag of Words\r\n * Naive Bayes\r\n* Complex Analysis\r\n * Preprocessing with word2vec\r\n * Metamind & RNLN\r\n * Optimus & CNN\r\n * TensorFlow\r\n * Watson\r\n* Live Demo\r\n* Q&A\r\n", - "", - "", - "" - ], - "abstract_extra": "I've spoken at numerous conferences in the US about Python, and have written a book on data analysis with Python for O'Reilly. NLP has always been a side / passion project for me and I've recently been able to spend more time learning about the new tools available using deep learning and neural networks. I'm hoping to share what I've learned with others from a \"survey style\" perspective (rather than as an author of one of the libraries). I hope this perspective can add a bit of fun and humor to the talk as well :D", - "tag_categories": [ - "Data Science", - "Data Science", - "Best Practice and Use Cases", - "Data Science", - "Data Science" - ], - "emails": "kjarmul@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/i-hate-you-nlp", - "admin_type": "", - "companies": "kjamistan" - }, - "458": { - "abstract_short": "El tema que nos ocupa es como implementar un identificador de sonido tipo Shazam usando t\u00e9cnicas DSP. Los puntos a seguir ser\u00e1n, implementaci\u00f3n, retos y pasos adicionales. El proyecto que nos ocupa se encuentra todav\u00eda en proceso de desarrollo (el c\u00f3digo [subido en GitHub][1]) y fue inspirado despu\u00e9s la conferencia, [Over-the-Air Audio Identification][2] en FOSDEM 2016.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@notexactlyawe", - "id": 458, - "speakers": "Cameron Macleod", - "title": "Implementaci\u00f3n de un Identificador de Sonido en Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Case Study", - "failures/mistakes", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Databases" - ], - "abstract_long": [ - "El tema que nos ocupa es como implementar un identificador de sonido tipo Shazam usando t\u00e9cnicas DSP con ayuda de unas fant\u00e1sticas bibliotecas. Los puntos a seguir ser\u00e1n, implementaci\u00f3n, retos y pasos adicionales. El proyecto que nos ocupa se encuentra todav\u00eda en proceso de desarrollo (el c\u00f3digo [subido en GitHub][1]) y fue inspirado despu\u00e9s la conferencia, [Over-the-Air Audio Identification][2] en FOSDEM 2016.\r\n\r\nLa estructura b\u00e1sica del proyecto consiste en un clasificador y un reconocedor. El clasificador toma huellas del sonido y las procesa en una forma investigable para el reconocedor que usa estas huellas para la identificaci\u00f3n y b\u00fasqueda de archivos almacenados con el fin de encontrar la semejanza mas probable. El reconocedor estar\u00e1 expuesto en un entorno API.\r\n\r\nLa conferencia intentar\u00e1 introducir el \u00e1rea de DSP a la audiencia y los conceptos que est\u00e1n detr\u00e1s aplicaciones como Shazam. Explicar\u00e9 todos las nociones incluidas en una manera sencilla.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/" - ], - "abstract_extra": "El tema es sobre un proyecto a\u00fan en curso y como resultado puede convertirse antes que lo doy en una charla sobre los fracasos del proyecto y sus lecci\u00f3nes. Preferir\u00eda dar el tema en ingl\u00e9s pero estoy dispuesto darlo en espa\u00f1ol tambi\u00e9n.", - "tag_categories": [ - "Case Study", - "Best Practice and Use Cases", - "Open Source", - "Data Science", - "Databases" - ], - "emails": "cmacleod170@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/implementacion-de-un-identificador-de-sonido-en-python", - "admin_type": "", - "companies": "Cambridge Consultants Ltd" - }, - "457": { - "abstract_short": "The talk will go over implementing a Shazam-style sound recogniser using DSP techniques and some fantastic libraries. It will cover implementation, challenges and further steps. The project is still a work in progress and the code is [available on GitHub][1]. It was inspired by the [Over-the-Air Audio Identification talk][2] at FOSDEM 2016.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/\r\n", - "sub_title": "", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@notexactlyawe", - "id": 457, - "speakers": "Cameron Macleod", - "title": "Implementing a Sound Identifier in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Case Study", - "failures/mistakes", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Databases" - ], - "abstract_long": [ - "The talk will go over the journey of implementing a Shazam-style sound recogniser using DSP techniques and some fantastic libraries. It will cover implementation, challenges and further steps. The project is still a work in progress at the time of proposal and the code is [available on GitHub][1]. It was inspired by the [Over-the-Air Audio Identification talk][2] at FOSDEM 2016.\r\n\r\nThe basic structure of the project consists a classifier that fingerprints audio and stores it in a searchable form and a recogniser that fingerprints a smaller chunk of audio and then searches the stored records to find the most suitable fit for it. The recogniser will be exposed as an API to allow for different front-ends.\r\n\r\nI will aim to introduce both the field of DSP and concepts behind applications like Shazam in a simple easy-to-understand manner. The audience will not need any prior experience in anything except Python.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/" - ], - "abstract_extra": "As stated in the abstract, the project is still very much a work in progress and a lot has to be done. As such, the focus of the talk may turn more towards lessons learned as opposed to actual implementation closer to the time if the project turns out less successful than hoped.", - "tag_categories": [ - "Case Study", - "Best Practice and Use Cases", - "Open Source", - "Data Science", - "Databases" - ], - "emails": "cmacleod170@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/implementing-a-sound-identifier-in-python", - "admin_type": "", - "companies": "Cambridge Consultants Ltd" - }, - "654": { - "abstract_short": "EFL (Embedded Flexible Language), a deterministic parallel programming tool, may be embedded in any host language. Two versions of the EFL pre-compiler for Python were implemented. One translates EFL blocks into Python's Multiprocessing code, and the other one into DTM/MPI4PY code. EFL implementations of Parallel Programming Design Patterns will be shown, generated parallel code compared, and differences discussed. Visit flexcomp.jct.ac.il for further information. \r\n", - "sub_title": "", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@, @", - "id": 654, - "speakers": "Moshe Goldstein, david dayan", - "title": "Implementing Parallel Programming Design Patterns using EFL for Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Tooling", - "Multi-Processing", - "Development", - "Programming", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Multi-core CPUs are abundant and utilizing them effectively requires programmers to parallelize CPU-intensive code. To facilitate this, we have developed EFL (Embedded Flexible Language), a deterministic parallel programming tool. \r\nThe parallel parts of a program are written as EFL-blocks, which are embedded into a sequential host language program. The sequential parts of the program are written in the host language, outside the EFL blocks. \r\nEFL may be embedded in any host language by writing an appropriate EFL pre-compiler. At the moment, we implemented two versions of the EFL pre-compiler. Both pre-compilers translate EFL blocks into parallel Python code - one of them generates parallel code based on Python's Multiprocessing module, and the other one generates parallel code based on the DTM/MPI4PY Python module.\r\nWe will present the principles upon which EFL is built. We will show the implementation of Parallel Programming Design Patterns using EFL's parallel programming constructs (such as parallel assignments, parallel for-loops, etc.). Using our two EFL pre-compilers we will show their translation to Python parallel code according to the Multiprocessing module as well as the DTM/MPI4PY module. The differences between code versions produced by the EFL pre-compilers will be discussed. \r\nFor further information about the EFL project and our Flexible Computation Research Laboratory, visit http://flexcomp.jct.ac.il\r\n", - "", - "", - "" - ], - "abstract_extra": "A poster titled \"EFL: An Embedded Language for Safe and Efficient Parallel Execution\" was presented at EuroPython 2014, Berlin, Germany.\r\nA poster titled \"Parallel Programming Constructs and Techniques using and Embedded Flexible Language (EFL) for Python\" was presented at EuroPython 2015, Bilbao, The Basque Country, Spain. \r\nA talk titled \"EFL: An Embedded Language for Safe and Efficient Parallel Execution\" was presented at the Intel Compiler, Architecture and Tools Conference (CATC), Haifa, Israel, 2014.\r\nA paper titled \"Flexible Algorithms: Enabling Well-defined Order-Independet Execution with an Imperative Programming Style\" was presented at the ECBS-EERC 2015, Brno, The Czech Republic, 2015 (available at pp 75-82 of the proceedings of the conference).\r\nA paper title \"EFL: Implementing and Testing an Embedded Language Which Provides Safe and Efficient Parallel Execution \" was presented at the ECBS-EERC 2015, Brno, The Czech Republic, 2015 (available at pp 83-90 of the proceedings of the conference). \r\nFor further material, including unpublished papers and technical reports, visit the website of our research lab. Also, from there you will be able to download the installation kit of our two EFL pre-compilers. \r\n", - "tag_categories": [ - "Programming", - "Programming", - "Programming", - "Programming", - "Python" - ], - "emails": "goldmosh@g.jct.ac.il, dayandav@g.jct.ac.il", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/implementing-parallel-programming-design-patterns-using-efl-for-python", - "admin_type": "", - "companies": ", Jerusalem College of Technology, HebrewUniversity" - }, - "628": { - "abstract_short": "One of the biggest differences, in the Python community, is its effort to improve diversity. I was fortunate enough to take part in nine different PyCon's. I always took note of experiences on how to improve diversity, that could be useful and replicable in my local community and would like to share at EuroPython. There are other reports, that also I would like to share, which are only beautiful stories of how Python reaches the most distant people and places you may never have imagined.", - "sub_title": "Nine Different PyCon's in Two Year's: Lessons on Diversity that I Learned", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@fmasanori, @pk_pacheco, @KatiaNakamura", - "id": 628, - "speakers": "Fernando Masanori Ashikaga, Paola Katherine Pacheco, K\u00e1tia Nakamura", - "title": "import community", - "have_tickets": [ - true, - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Community" - ], - "abstract_long": [ - "One of the biggest differences, in the Python community, in relation to other communities, is its effort to improve diversity. There is even a Diversity Statement at PSF: \"We have created this diversity statement because we believe that a diverse Python community is stronger and more vibrant. A diverse community where people treat each other with respect has more potential contributors and more sources for ideas.\" In last two years I was fortunate enough to take part in nine PyCon's in ten different countries: Namibia, UK, Japan, Brazil, Italy, Argentina, Uruguay, Germany, Canada and Spain. Some were not national conferences, but were EuroPython or PyConUS. I was coach in three Django Girls at PyCon Namibia, Argentina and Brazil. I always took note of experiences on how to improve diversity, that could be useful and replicable in my local community and would like to share at EuroPython. There are other reports that I also would like to share, which are only beautiful stories of how Python reaches the most distant people and places you may never have imagined.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Community" - ], - "emails": "fmasanori@gmail.com, pkcpweb@gmail.com, katia@kiwi.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/import-community", - "admin_type": "", - "companies": "FATEC S\u00e3o Jos\u00e9 dos Campos, Hadrons, Kiwi.com" - }, - "497": { - "abstract_short": "In this talk I will show how to build your own infrastructure-as-a-service on the example of \"Postgraas\", an open source postgres-as-a-service I wrote in python just for fun. With a simple curl request you can get your very own database, just like RDS on AWS. You will learn how easy it is to create such a remarkably useful service with hardly three hundred lines of flask, docker and some glue-code, a project for a rainy Sunday.", - "sub_title": "or how to write your very own database-as-a-service", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@sebineubauer", - "id": 497, - "speakers": "Sebastian Neubauer", - "title": "Infrastructure as Code: \"pip install\" your environment", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "PostgreSQL", - "Deployment/Continuous Integration and Delivery", - "Infrastructure", - "Docker", - "DevOps general" - ], - "abstract_long": [ - "Continuous Delivery, DevOps, Lean - all those movements have one thing in common: extending the process of software development along the whole value stream, ultimately to the customer. This simple requirement causes surprising serious difficulties on traditional operations workflows. All of a sudden, a single manual ticket to the operations team is a critical blocker in the delivery process. Therefore all parts of the infrastructure, storage, databases, identities, compute resources must be provided as a self service for the developers in order to be able to achieve this goal. What one may call \"the cloud\" (including self hosted ones like open stack) is such a successful model not least because they offer exactly this \"ticket-less\" self-service. But why should we wait for \"the cloud\" to offer what we really need? We are python developers, we are hackers!\r\n\r\nIn this talk I will show how to build your own infrastructure-as-a-service on the example of \"Postgraas\", an open source postgres-as-a-service I wrote in python just for fun. With a simple curl request you can get your very own database, just like RDS on AWS. You will learn how easy it is to create such a remarkably useful service with hardly three hundred lines of flask, docker and some glue-code, a project for a rainy Sunday. After the talk you will know how to amaze your colleagues by eliminating an annoying ticket or manual workflow with a simple flask app and some creativity.", - "", - "", - "" - ], - "abstract_extra": "My talk on last years EP:\r\nhttps://ep2015.europython.eu/conference/talks/a-pythonic-approach-to-continuous-delivery\r\n\r\nAnd maybe it wasn't even that bad, at least according to a review of that talk:\r\nhttps://tesarek.me/europython-2015\r\n\r\n> A Pythonic Approach to Continuous Delivery.\r\n> Sebastian presented CI and CD as one process of delivering value to the customer. He showed the whole process from beginning (the idea of a feature) to the end (the customer using the feature). He presented lots of useful tools that you can use but the basic idea is to start with the most lightweight but fully functional version and build on it.\r\n> We should automate as much as possible and continuously improve our automated processes.\r\n> This was the best presentation of Ci&CD I've ever seen. As to the topic, it was very explanatory and contained lots of useful tips and tricks.\r\n\r\n", - "tag_categories": [ - "Databases", - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "sebastian.neubauer@blue-yonder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/infrastructure-as-code-pip-install-your-environment", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "513": { - "abstract_short": "This talk covers the distributed architecture that Skyscanner built to solve the data challenges involved in the generation of images of all hotels in the world. Putting together a distributed system in Python, based on queues, surfing on the AWS Cloud.", - "sub_title": "How Skyscanner hotels built its image processing pipeline.", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@alevinval", - "id": 513, - "speakers": "Alex Vinyals", - "title": "Ingesting 35 million hotel images with python in the cloud.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "System Architecture", - "Big Data", - "Use Case", - "Distributed Systems" - ], - "abstract_long": [ - "This talk covers the distributed architecture that Skyscanner built to solve the data challenges involved in the generation of images of all hotels in the world. Putting together a distributed system in Python, based on queues, surfing on the AWS Cloud.\r\n\r\nOur goal? To build an incremental image processing pipeline that discards poor quality and duplicated images, scaling the final images to several sizes to optimise for mobile devices.\r\n\r\nAmong the challenges:\r\n\r\n1. Ingest all the input images that partners provide us.\r\n2. Detect and remove bad quality + duplicated images from reaching production.\r\n3. Resize all the generated images to optimise for mobile devices.\r\n4. Ensure the process scales and behaves in an incremental way.\r\n5. Ensure the whole process fits in a time constrained window.\r\n\r\nAmong the tools we used? Pillow, ImageHash, Kombu and Boto.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Any feedback welcome if you think something is missing or could be improved. I can also answer any question you guys have.\r\n\r\nThanks.", - "tag_categories": [ - "DevOps", - "Data Science", - "Best Practice and Use Cases", - "DevOps" - ], - "emails": "alexandre.vinyals@skyscanner.net", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/ingesting-35-million-hotel-images-with-python-in-the-cloud", - "admin_type": "", - "companies": "Skyscanner" - }, - "739": { - "abstract_short": " \u201cNotebooks come alive when interactive widgets are used\u201d, but programming complex applications that rely entirely on widgets may end up being a painful and frustrating process. Shaolin is a new python project that aims to provide a framework for building interactive complex dashboards.", - "sub_title": "Introducing a new framework for interactive dashboards programming.", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@miau_db", - "id": 739, - "speakers": "Guillem Duran", - "title": "Interactive data Kung Fu with Shaolin", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Jupyter/iPython Notebook", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Analytics" - ], - "abstract_long": [ - "You can read in The Project Jupyter web page that \u201cNotebooks come alive when interactive widgets are used\u201d, but programming complex applications that rely entirely on widgets may end up being a painful and frustrating process. Shaolin is a new python project that aims to provide a framework for building interactive complex dashboards.\r\n\r\nShaolin provides all the basic tools for building complex interactive data analysis applications using the pydata ecosystem. Arbitrary code can be embedded into a Dashboard -a class that works as a \u201cblack box\u201d that allows to easily define a GUI based on the ipywidgets package- to process any data in any form and then let you interactively define how to plot it using automatically generated widgets. Hierarchical combinations of Dashboards can be arranged then to build more complex applications.\r\n\r\nThe talk is divided in two sections. First one introduce the framework and its main features:\r\n\r\n - Custom syntax for defining widgets in a simplified way.\r\n - Dashboards: Syntax rules and capabilities.\r\n - Combining Dashboards to build complex applications.\r\n - Interactive plot creation.\r\n - Integration with pydata.\r\n\r\nSecond section will show how this framework can be used to analyse real data using Dashboards without writing any code. I will show how to transform market data time series into graphs using pandas and networkx, then plot it interactively using bokeh and Vpython.\r\n\r\n" - ], - "abstract_extra": "I think that here you will be able to find all the information related to my framework. https://github.com/HCsoft-RD/shaolin A detailed description of its main features can be found in the examples folder. The notebooks you will find there are self-explanatory.\r\n\r\n This is currently in alpha version. Everything there is online works, but I'm still testing like half of the Dashboards I have programmed, before uploading them. Expect thie beta version to be finished by the date of the talk.\r\n\r\n\r\nThere are no recordings of the talks I have already given, but you can find some info about the R&D work we are doing at HCSoft in this blog http://entropicai.blogspot.com.es/", - "tag_categories": [ - "Data Science", - "Python", - "Data Science", - "Data Science" - ], - "emails": "guillem.db@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/interactive-data-kung-fu-with-shaolin", - "admin_type": "", - "companies": "HCSoft programaci\u00f3n S.L." - }, - "450": { - "abstract_short": "aiohttp is asynchronous HTTP client and server library built on top of asyncio.\r\n\r\nThe intro describes basic programming patterns for both client\r\nand server API as well as more advanced techniques. \r\n\r\nThe main target of the talk is displaying an alternative to\r\npeople who want to avoid classic WSGI\r\nframeworks (Django/Flask/Pyramid etc) limitations but found\r\nTwisted and Tornado too cumbersome.", - "sub_title": "asyncio-based web programming fundamentals in 30 minutes", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@andrew_svetlov", - "id": 450, - "speakers": "Andrew Svetlov", - "title": "Introduction to aiohttp", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Best Practice", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "HTTP" - ], - "abstract_long": [ - "aiohttp is asynchronous HTTP client and server library built on top of asyncio.\r\n\r\nThe library allows to write user friendly code which looks like well-known\r\nlinear one (requests library for client and Django/Flask/Pyramid for\r\nserver) but utilizes the power of non-blocking sockets and\r\nsupports websockets natively.\r\n\r\nThe intro describes basic programming patterns for both client\r\nand server API as well as more advanced techniques. \r\nTips and tricks for writing asyncio-based code are included as well.\r\n\r\nThe main target of the talk is displaying an alternative to\r\npeople who want to avoid classic WSGI\r\nframeworks (Django/Flask/Pyramid etc) limitations but found\r\nTwisted and Tornado too cumbersome.\r\n\r\nDive into aiohttp usage with the library author." - ], - "abstract_extra": "I made similar talks in Caribbean PyCon and PyCon Hong Kong plus several times on several Russian-speaking conferences.", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Web", - "Web" - ], - "emails": "andrew.svetlov@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-aiohttp", - "admin_type": "", - "companies": "DataRobot" - }, - "427": { - "abstract_short": "Beginning programmers or Python beginners may find it overwhelming to implement a machine learning algorithm. Increasingly machine learning is becoming more applicable to many areas. This talk introduces key concepts and ideas and uses Python to build a basic classifier - a common type of machine learning problem. Providing some jargon to help those that may be self-educated or currently learning ", - "sub_title": "A novice's inquiry into classification.", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@loooorenanicole", - "id": 427, - "speakers": "Lorena Mesa", - "title": "Is that spam in my ham?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Education", - "Beginners", - "Case Study", - "Machine-Learning" - ], - "abstract_long": [ - "Supervised learning, machine learning, classifiers, big data! What in the world are all of these things? As a beginning programmer the questions described as \"machine learning\" questions can be mystifying at best.\r\n\r\nIn this talk I will define the scope of a machine learning problem, identifying an email as ham or spam, from the perspective of a beginner (non master of all things \"machine learning\") and show how Python can help us simply learn how to classify a piece of email.\r\n\r\nTo begin we must ask, what is spam? How do I know it \"when I see it\"? From previous experience of course! We will provide human labeled examples of spam to our model for it to understand the likelihood of spam or ham. This approach, using examples and data we already know to determine the most likely label for a new example, uses the Naive Bayes classifier.\r\n\r\nOur model will look at the words in the body of an email, finding the frequency of words in both spam and ham emails and the frequency of spam and ham. Once we know the prior likelihood of spam and what makes something spam, we can try applying a label to a new example.\r\n\r\nThrough this exercise we will see at a basic level what types of questions machine learning asks, learn to model \"learning\" with Python, and understand how learning can be measured." - ], - "abstract_extra": "This topic arose from a talk about a Naive Bayes white paper I did in Chicago (Papers We Love Chicago - May 2015 http://www.meetup.com/Papers-We-Love-Chicago/events/222024292/) that discussed the efficacy of Naive Bayes as well as what types of problems Naive Bayes performs well on. The learning curve was steep when reading this white paper, it was heavy on math and jargon for those that are not from the machine learning world. In fact I am a policy analyst who turned programmer just over two years ago (at the time of PyCon 2016). Most of my learning is self-taught or self-guided thus I find it important to be curious and use that curiosity to provide content in accessible formats to all.\r\n\r\nThis talk is not meant to be an exhaustive understanding of Naive Bayes but a focused talk on what machine learning questions look like and how Python can answer it.\r\n\r\nPast speaking experience:\r\n\r\nI performed this talk at PyOhio 2015 (http://www.pyvideo.org/video/3690/is-that-spam-in-my-ham-a-novices-inquiry-into-c) and received a good amount of feedback as well as additional questions to help me better direct the talk. \r\n\r\nI've taught quite a bit with the Girl Develop It Chicago chapter and as an original (and current) co-organizer and co-founder of PyLadies Chicago I've taught several of our workshops. For a listing of the workshops I've taught and the talks I've given can be found at - http://lorenamesa.com/pages/speaking.html. \r\n\r\nI spoke at PyTennessee in Feb 2016 on a similar beginner data collection and modeling exercise with some basic machine learning analysis. The talk had amazing feedback and I am now building out smaller workshops around it. I find that many beginner programmers have an overwhelming fear of trying to take on such topics and think that this would be a great talk for beginners to start learning.\r\n", - "tag_categories": [ - "Educational", - "Educational", - "Case Study", - "Data Science" - ], - "emails": "me@lorenamesa.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/is-that-spam-in-my-ham", - "admin_type": "", - "companies": "Sprout Social, Inc." - }, - "539": { - "abstract_short": "This talk shows the Python Descriptors, detailing their behaviour with a detailed practical example, so we can understand the power and flexibility they give. As a bonus track, class decorators are explained.", - "sub_title": "Get to know in the intimacy one of the most powerful and elegant corners of Python: Descriptors!", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@facundobatista", - "id": 539, - "speakers": "Facundo Batista", - "title": "It's not magic: descriptors exposed", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python general" - ], - "abstract_long": [ - "This talk presents, using a detailed practical example, the Python Descriptos.\r\n\r\nThe behaviour of descriptors mechanisms is detailed, showing their power and flexibility.\r\n\r\nFinally, as a bonus track and to complete the used practical example, class descriptors are explained.\r\n\r\n" - ], - "abstract_extra": "I gave this talk in last PyCon Argentina, the result was awesome.\r\n\r\nAlso note that I created (and gave) this talk together with Joaquin Sorianello, but I can give it myself without any problem.", - "tag_categories": [ - "Python" - ], - "emails": "facundobatista@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/its-not-magic-descriptors-exposed", - "admin_type": "", - "companies": "Canonical" - }, - "545": { - "abstract_short": "There should be something for everyone in this whistle\u2013stop tour of iteration in Python setting off from `for`\u2013loops, and riding cross\u2013country to multiplexing coroutines!\r\n\r\nSee and hear the amazing sights and sounds of list comprehensions, and generators. Take in the amazing vistas from `itertools`, and be amazed at the magnificent `yield`!", - "sub_title": "A whistle\u2013stop tour of iteration in Python", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@sneeu", - "id": 545, - "speakers": "John Sutherland", - "title": "Iteration, iteration, iteration", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Beginners", - "Python general", - "Programming", - "Functional Programming" - ], - "abstract_long": [ - "There should be something for everyone in this whistle\u2013stop tour of iteration in Python setting off from `for`\u2013loops, and riding cross\u2013country to multiplexing coroutines!\r\n\r\nSee and hear the amazing sights and sounds of list comprehensions, and generators. Take in the amazing vistas from `itertools`, and be amazed at the magnificent `yield`!\r\n\r\nWe\u2019ll take detours to higher\u2013order functions, closures, and decorators. And cover the FP inspired builtins `map`, `filter`, and `reduce`, as well as the epitome of Pythonic programming, `enumerate`." - ], - "abstract_extra": "This talk was given at the \u201cPython Edinburgh Mini Conference\u201d in 2011 (http://sneeu.com/talks/pemc-2011/iteration/), but my plan is to completely rewrite the talk from scratch. Examples will be in Python 3.", - "tag_categories": [ - "Educational", - "Python", - "Programming", - "Programming" - ], - "emails": "john@sneeu.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/iteration-iteration-iteration", - "admin_type": "", - "companies": "FanDuel" - }, - "423": { - "abstract_short": "Sure you can do a chunk of scientific exploration and stuff in Jupyter in your choice of language supplemented with visuals and that's already awesome !\r\n\r\nBut let's head off the beaten track a little to look at other uses, especially command-line.\r\n\r\nWe'll look at some alternate uses of Jupyter ...\r\n", - "sub_title": "Sure you can do science, data analysis - but also CLI, tutorials, cheat sheats, blog, presentations", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@mjbright", - "id": 423, - "speakers": "Mike BRIGHT", - "title": "Jupyter for everything else", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Use Case", - "Jupyter/iPython Notebook", - "Docker", - "Command-Line" - ], - "abstract_long": [ - "Sure you can do a chunk of scientific exploration and stuff in Jupyter in your choice of language supplemented with visuals and that's already awesome !\r\n\r\nBut let's head off the beaten track a little to look at other uses, especially command-line.\r\n\r\nWe'll look at some alternate uses of Jupyter ...\r\n\r\n - Write command-line tutorials, cheat sheets in an easy to maintain format.\r\n - Perform visualization tasks for command-line tools\r\n - Write blog posts\r\n - Create interactive presentations (thanks Damian !)\r\n - Publish interactive books, articles and blog posts\r\n - HTML/js/css experimentation\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "**45 min version**\r\n\r\nI regularly use Jupyter to document my own creations\r\n\r\n - Command-line cheat sheets\r\n - Presentations via RISE\r\n - \"Command-line\" demos of any utility\r\n - I do Docker demos this way\r\n - I do Docker Build labs this way\r\n - PyMongo\r\n - HTML/JS/CSS experiments\r\n\r\nIt ain't rocket science, but it works for me .. .and maybe for you too.\r\n\r\nHere's my repo of past workshops.\r\n https://github.com/mjbright/jupyter_notebooks/\r\n\r\nObviously all talk (and lab) materials will be available on github as well as on your site.\r\n\r\n", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - "Python", - "DevOps", - "Programming" - ], - "emails": "europython@mjbright.net", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/jupyter-for-everything-else", - "admin_type": "", - "companies": "HPE" - }, - "662": { - "abstract_short": "We are using Python to help the National Grid in the UK to balance electricity production and usage. We do this by installing Python powered devices at customers sites that allow us to monitor and set control criteria to automatically turn on and off power consuming and producing devices when there is a mismatch between electricity supply and demand. \r\nIn this talk we will be talking about how and why we have used Python, as well as where in our system we would like to use Python.", - "sub_title": "Balancing the National Grid with Python and IoT", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 662, - "speakers": "Scott Reeve", - "title": "Keeping the Lights on with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Hardware/IoT Track", - "Case Study", - "Internet of Things (IoT)" - ], - "abstract_long": [ - "We are using Python to help the National Grid in the UK to balance electricity production and usage. We do this by installing Python powered devices at customers sites that allow us to monitor and set control criteria to automatically turn on and off power consuming and producing devices when there is a mismatch between electricity supply and demand. These devices talk to our Python powered cloud based system using the 3g network, giving us near real-time monitoring of our customers assets.\r\nOur entire infrastructure is written in Python, from our billing systems, data analytics systems and customer portal all the way through to our on site industrial system interfaces. In this talk we will be talking about how and why we have used Python, where we have had problems, as well as where in our system we would like to use Python and why we cannot. We will also be talking about what we are going to do next, moving our system from near real time monitoring to near real-time control, using Python for both system modelling and control. We will discuss how we are using Python to creating a system that monitors the balance between electricity supply and demand many times per second and is able to provide a corrective control based on the sum of the output of a dynamic set of our customer sites and the challenges that presents." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Case Study", - "Hardware" - ], - "emails": "scott.reeve@limejump.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keeping-the-lights-on-with-python", - "admin_type": "", - "companies": "Limejump Ltd" - }, - "488": { - "abstract_short": "El m\u00f3dulo itertools es una de las piedras angulares de la programaci\u00f3n avanzada en Python. Esta charla proporciona consejos pr\u00e1cticos del \u00e1lgebra de iteradores que pueden aplicarse de forma inmediata. Descubrir el m\u00f3dulo itertools supone arrancar el velo de nuestros ojos, y una vez usadas funciones como `repeat()`, `takewhile()`, `dropwhile()` o `product()` no hay marcha atr\u00e1s \u2014 es imposible volver al mundo de los meros mortales donde las soluciones son m\u00e1s complejas y necesitan m\u00e1s memoria.", - "sub_title": "Aumentando la letalidad y elegancia de nuestro c\u00f3digo gracias al m\u00f3dulo itertools.", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@pyctor", - "id": 488, - "speakers": "V\u00edctor Terr\u00f3n", - "title": "Kung Fu al amanecer con itertools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Clean Code", - "Best Practice", - "Functional Programming" - ], - "abstract_long": [ - "El m\u00f3dulo itertools es una de las piedras angulares de la programaci\u00f3n avanzada en Python. Parte de la biblioteca est\u00e1ndar, nos ofrece un \u00e1lgebra de iteradores que permite encadenar abstracciones de forma elegante, haciendo posibles soluciones sencillas a la par que m\u00e1s eficientes en su consumo de memoria.\r\n\r\nEl objetivo de esta charla es el de, ante todo, proporcionar consejos y lecciones claras que puedan aplicarse de forma inmediata. Ilustr\u00e1ndolo con numerosos ejemplos, los asistentes abandonar\u00e1n la charla habiendo asimilado como m\u00ednimo varios conceptos que mejorar\u00e1n indiscutible e irremediablemente su c\u00f3digo. El \u00e9nfasis se har\u00e1 en mostrar casos espec\u00edficos en los que una soluci\u00f3n tradicional puede ser mejorada una y otra vez con funciones del m\u00f3dulo itertools. \r\n\r\nSupongamos, por ejemplo, que queremos alternar indefinidamente entre dos valores: -1 y 1. El reci\u00e9n iniciado utilizar\u00eda una variable cuyo valor ir\u00eda modificando a cada paso y el usuario medio quiz\u00e1s optar\u00eda por un generador infinito. Ambas soluciones dignas y honorables, pero que palidecen ante la maestr\u00eda del artista marcial que que tan s\u00f3lo necesita `itertools.cycle()`. Porque el m\u00f3dulo itertools es as\u00ed: una vez ca\u00eddo el velo de nuestros ojos y descubiertas funciones como `repeat()`, `takewhile()`, `dropwhile()` o `product()`, no hay marcha atr\u00e1s. En esta charla vamos a aprender a reconocer cu\u00e1ndo pueden ser usadas, proporcion\u00e1ndonos en una \u00fanica l\u00ednea lo que para los meros mortales supone mucho m\u00e1s trabajo." - ], - "abstract_extra": "Tengo una enemistad personal con los ponentes aburridos, as\u00ed que me tomo muy en serio que mis charlas sean amenas y todo lo divertidas posibles \u2014 y por el momento, cruzo los dedos, parece que lo he logrado. Mis charlas en las PyConES se encuentran todos los a\u00f1os entre las que m\u00e1s reproducciones tienen en YouTube, si es que eso significa algo:\r\n\r\n- 2013: [https://www.youtube.com/watch?v=QZiX75rbkuI][1]\r\n- 2014: [https://www.youtube.com/watch?v=MgRdg3s8n3E][2]\r\n- 2015: [https://www.youtube.com/watch?v=8TDZsaATmqQ][3] [charla de clausura]\r\n\r\nEn ingl\u00e9s tan s\u00f3lo he dado una charla hasta la fecha, en 2015:\r\n[https://www.youtube.com/watch?v=oSOco7qQujU][4]\r\n\r\n [1]: https://www.youtube.com/watch?v=QZiX75rbkuI\r\n [2]: https://www.youtube.com/watch?v=MgRdg3s8n3E\r\n [3]: https://www.youtube.com/watch?v=8TDZsaATmqQ\r\n [4]: https://www.youtube.com/watch?v=oSOco7qQujU\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "quintanar@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/kung-fu-al-amanecer-con-itertools", - "admin_type": "", - "companies": "Google" - }, - "635": { - "abstract_short": "The itertools module is one of the cornerstones of advanced programming in Python. This talk offers practical advice about iterator algebra that can be put into practice immediately. Discovering the itertools module means taking the veil from our eyes, and once we use functions such as repeat(), takewhile(), dropwhile() or product(), there is no return \u2014 it is impossible to come back to the world of the mere mortals, where solutions are more complex and need more memory.", - "sub_title": "Increasing the lethality and elegance of our code with the itertools module.", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@pyctor", - "id": 635, - "speakers": "V\u00edctor Terr\u00f3n", - "title": "Kung Fu at Dawn with Itertools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Clean Code", - "Best Practice", - "Functional Programming" - ], - "abstract_long": [ - "The itertools module is one of the cornerstones of advanced programming in Python. Part of the standard library, it provides an iterator algebra that allows us to elegantly chain abstractions, enabling solutions that are both simpler and more memory efficient.\r\n\r\nThe goal of this talk is to offer practical advice and clear lessons that can be immediately put into practice. Illustrating it with numerous examples, attendees will leave having assimilated at least several concepts that will improve their code undeniably and irremediably. Emphasis will be on showing specific cases where a traditional solution can be overhauled over and over with functions from the itertools module.\r\n\r\nLet\u2019s say, for example, that we want to alternate indefinitely between two values: -1 and 1. The novice would use a variable, updating its value at each step, and the average user would maybe opt for an endless generator. Both are worthy and honorable solutions, but they pale before the mastery of the martial artist who only needs itertools.cycle(). Because that is the nature of the itertools module: once the veil falls from our eyes and we come across functions such as repeat(), takewhile(), dropwhile() or product(), there is no return. In this talk we will learn to identify when they can be used, accomplishing with a single line of code what for the mere mortals takes much more effort." - ], - "abstract_extra": "I have a personal feud with boring speakers, so I do my best trying to make my talks as entertaining and funny as possible \u2014 and so far, I am crossing my fingers, it seems that I have succeeded. My talks at PyCon Spain are every year among the most viewed on YouTube, if that means anything:\r\n\r\n- 2013: [https://www.youtube.com/watch?v=QZiX75rbkuI][1] [Spanish]\r\n- 2014: [https://www.youtube.com/watch?v=MgRdg3s8n3E][2] [Spanish]\r\n- 2015: [https://www.youtube.com/watch?v=8TDZsaATmqQ][3] [closing keynote, Spanish]\r\n\r\nI have only given one talk in English so far, in 2015:\r\n[https://www.youtube.com/watch?v=oSOco7qQujU][4]\r\n\r\n [1]: https://www.youtube.com/watch?v=QZiX75rbkuI\r\n [2]: https://www.youtube.com/watch?v=MgRdg3s8n3E\r\n [3]: https://www.youtube.com/watch?v=8TDZsaATmqQ\r\n [4]: https://www.youtube.com/watch?v=oSOco7qQujU\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "quintanar@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/kung-fu-at-dawn-with-itertools", - "admin_type": "", - "companies": "Google" - }, - "588": { - "abstract_short": "Programming is one of the most important 21st-century skills and tons of different online and offline resources can help you to master it.\r\n\r\nOn the other hand, playing games is really effective way for us to learn and it's also the most fun.\r\n\r\nBut is it possible to learn real programming language like Python by playing a game? \r\n\r\nIn this talk I'll show you some projects that allow you to achieve that. I also want to inspire you to help such projects and to suggest ideas how to do that.", - "sub_title": "", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 588, - "speakers": "Liana Bakradze", - "title": "Learn Python The Fun Way", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Educational Track" - ], - "abstract_long": [ - "Programming is one of the most important 21st-century skills. It doesn't only provide promising career opportunities but teaches how to reason logically, systematically and creatively. \r\n\r\nCode readability, rich standard library, straightforward syntax and other features make Python a great language for teaching beginners how to program. Python community is very supportive and friendly to newcomers and does awesome work to make Python available to everyone. Tons of different online and offline resources can help you to master Python programming. Problem solving is the classical way of learning how to code. But it can be boring for some people, especially for kids.\r\n\r\nOn the other hand, playing games is really effective way for us to learn and it's also the most fun. You can find different games designed to teach basics of programming, but most of them use special visual environments and don't teach real text based languages. \r\n\r\nBut is it possible to learn programming language like Python by playing a game? \r\n\r\nIn this talk I'll show you a few projects for different age and levels that allow you to achieve that. I'll pay attention on methods that are used to teach programming.\r\n\r\nI also want to inspire you to help such projects and to suggest ideas how to do that." - ], - "abstract_extra": "", - "tag_categories": [ - "Educational", - ">>> Suggested Track" - ], - "emails": "liana.bakradze@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/learn-python-the-fun-way", - "admin_type": "", - "companies": "JetBrains" - }, - "716": { - "abstract_short": "What we learned along the way - processes, organization, technology and people - from 0 to 11 million students, 40 thousand courses and 20 thousand teachers.", - "sub_title": "", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@rbanffy", - "id": 716, - "speakers": "Ricardo B\u00e1nffy", - "title": "Lessons Learned after 190 Million Lessons Served", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Management", - "Django", - "Scaling" - ], - "abstract_long": [ - "What we learned along the way - processes, organization, technology and people - from 0 to 11 million students, 40 thousand courses and 20 thousand teachers.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Development Methods", - "Application Frameworks", - "DevOps" - ], - "emails": "rbanffy@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/lessons-learned-after-190-million-lessons-served", - "admin_type": "", - "companies": "Udemy" - }, - "523": { - "abstract_short": "Web APIs that are easier to understand, develop, test and use, is a popular subject. \"An API is only as good as its documentation\". We decided to play with this proverb and leverage the power of documentation. We propose to use the code documentation and the type system to provide lots of free features: explorable APIs, better error messages, automatic testing. \r\n\r\nPython is perfect to explore code and documentation dynamically. We'll demonstrate what we came up to and the lessons we've learned.", - "sub_title": "The day you'll prefer writing documentation over code: automatic UI/API and tests from documentation", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 523, - "speakers": "Rudy Sicard", - "title": "Leveraging documentation power for better web APIs", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Django", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "APIs" - ], - "abstract_long": [ - "'Rich' web APIs that are easier to understand, develop, test and use, is a popular subject. There are a lot of new specification languages (e.g. swagger, apiblueprint ...) and libraries (django-rest-framework, drf ...) that provide features in this direction. Following the old proverb \"An API is only as good as its documentation\", we decided to play with these ideas and focus on leveraging the power of documentation. We propose to use the code documentation and the type system to provide: \r\n - browsable APIs, that are easy to interact with and visualize, reducing the need to provide custom UIs \r\n - verification of inputs/outputs along with precise error message if needed \r\n - automatic [de]-serialization of inputs/ouputs outside of the domain code\r\n - smart exception handling, e.g. exceptions that are not documented are automatically converted into internal errors\r\n - automatic testing, e.g. input, output and result including exceptions are tested ensuring the code works and the documentation is up-to-date. \r\n\r\n\r\nThis use case is one of the rare situation where introspection is desirable and unavoidable. And Python is a good language to explore/exploit code and documentation dynamically. The perfect excuse to spend some time on meta coding a first implementation while being at work. We'll demonstrate what we came up to, the advantages and limitations compared to other approaches. And we'll share the lessons we learned from this experiment.\r\n\r\n" - ], - "abstract_extra": "In my previous compagny I worked (design & implementation) on a functional language dedicated to web programming. I wrote one of the blog entry of the company.\r\nhttp://blog.opalang.org/2012/09/programming-tools-ux-when-statically.html\r\n\r\nI have written two articles in machine learning journals:\r\n* Rudy Sicard, T. Arti\u00e8res, E. Petit, Learning iteratively a classifier using the Bayesian Model Averaging Principle, Pattern Recognition, http://www.sciencedirect.com/science/article/pii/S0031320308004895\r\n* Rudy Sicard, Thierry Arti\u00e8res, Modelling sequences using pairwise relational features, to appear in Pattern Recognition, http://www.sciencedirect.com/science/article/pii/S0031320308004895\r\n\r\nand give several speech in machine learning conferences:\r\n* R. Sicard, Th. Arti\u00e8res, E. Petit : \u201cModeling On-line Handwriting Using Pairwise Relational Features\u201d, International Workshop on Frontiers in Handwriting Recognition, La Baule, France, pp. 267-274 (2006)\r\n* R. Sicard, Th. Arti\u00e8res, E. Petit : \u201cMod\u00e8lisation de l\u2019\u00e9crit en ligne \u00e0 l\u2019aide de reseaux bay\u00e9siens et de caract\u00e9ristiques relationnelles\u201d, Colloque International Francophone sur l'Ecrit et le Document (CIFED'06), Fribourg, Suisse (2006)\r\n* R. Sicard, Th. Arti\u00e8res : \u201cPatch Learning for Incremental Classifier Design\u201d, European Conference on Artificial Intelligence (ECAI 2006), Riva del Garda, Italie, pp. 807-808 (2006)\r\n* R. Sicard, Th. Arti\u00e8res : \u201cAn application of bayesian model averaging to histograms\u201d, Grenoble, France (2007)", - "tag_categories": [ - "Application Frameworks", - "Web", - "Web" - ], - "emails": "polux.moon@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/leveraging-documentation-power-for-better-web-apis", - "admin_type": "", - "companies": "Criteo" - }, - "590": { - "abstract_short": "Many times these logs are thrown away or just sit uselessly somewhere on disk. I would like to show you how you can make sense of all that data, how to collect and clean them, store them in a scalable fashion and, finally, explore and search across various systems.", - "sub_title": "Centralised logging for fun and profit.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@honzakral", - "id": 590, - "speakers": "Honza Kr\u00e1l", - "title": "Log all the things!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Tooling", - "Infrastructure", - "Operations", - "DevOps general" - ], - "abstract_long": [ - "Centralized logging (and the ELK stack) is proving itself to be a very useful tool in managing a production infrastructure. When combined with other data sources (application logging, business data, ...) it can provide even more insight.\r\n\r\nThis talk is an introduction into the area with some overview of the motivation, tools and techniques that can prove useful. We will show how the open source ELK (Elasticsearch Logstash and Kibana) stack can be used to implement this.\r\n\r\nIt is geared towards people familiar with the DevOps concept that are looking to improve their lives by introducing smarter tools.", - "", - "", - "" - ], - "abstract_extra": "I have spoken at EuroPython before, including last year. This talk is an updated version of my talk from PyCon Australia since I assume there will be minimum overlap in audiences. Video of the talk: https://www.youtube.com/watch?v=i3rH5cU-Uz4", - "tag_categories": [ - "Programming", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/log-all-the-things", - "admin_type": "", - "companies": "Elastic" - }, - "415": { - "abstract_short": "Machine Learning is the next big thing. If you are a dummy in terms of Machine Learning, but want to get started with it... there are options.\r\n\r\nStill, thanks to the Web, Python and OpenSource libraries, we can overcome this situation and do some interesting stuff with Machine Learning.", - "sub_title": "If you're a Machine Learning dummy but are interested in the topic, this is for you.", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 415, - "speakers": "Javier Arias Losada", - "title": "Machine Learning for dummies with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Cython", - "Predictions", - "Deep Learning", - "Open-Source", - "Machine-Learning" - ], - "abstract_long": [ - "Have you heard that Machine Learning is the next big thing?\r\n\r\nAre you a dummy in terms of Machine Learning, and think that is a topic for mathematicians with black-magic skills?\r\n\r\nIf your response to both questions is 'Yes', we are in the same position.\r\n\r\nStill, thanks to the Web, Python and OpenSource libraries, we can overcome this situation and do some interesting stuff with Machine Learning." - ], - "abstract_extra": "I regularly speak at different venues:\r\n- Telefonica Developers conference\r\n- Python and Javascript meetups in Barcelona\r\n- Oscon amsterdam 2015: http://conferences.oreilly.com/oscon/open-source-eu-2015/public/schedule/detail/44008\r\n- NoSQL matters 2013 : https://2013.nosql-matters.org/bcn/index.html%3Fp=2344.html#abstract_266016455\r\n- MediterraneaJS 2015 - http://mediterraneajs.eu/people/javier_arias.html\r\n\r\nSome of my presentations: http://www.slideshare.net/javierarilos\r\n", - "tag_categories": [ - "Python", - "Data Science", - "Data Science", - "Open Source", - "Data Science" - ], - "emails": "javier.arilos@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-for-dummies-with-python", - "admin_type": "", - "companies": "Telefonica I+D" - }, - "642": { - "abstract_short": "In Machine Learning, the power of combining many models have proven to successfully provide better results than single models. \r\n\r\nThe primary goal of the talk is to answer the following questions:\r\n1) Why and How ensembles produce better output?\r\n2) When data scales, what's the impact? What are the trade-offs to consider? \r\n3) Can ensemble models eliminate expert domain knowledge?", - "sub_title": "United we stand, divided we fall", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@bargava", - "id": 642, - "speakers": "Bargava Subramanian", - "title": "Machine Learning: Power of Ensembles", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Predictions", - "Machine-Learning", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "It is relatively easy to build a first-cut machine learning model. But what does it take to build a reasonably good model, or even a state-of-art model ?\r\n\r\nEnsemble models. They are our best friends. They help us exploit the power of computing. Ensemble methods aren't new. They form the basis for some extremely powerful machine learning algorithms like random forests and gradient boosting machines. The key point about ensemble is that consensus from diverse models are more reliable than a single source. This talk will cover how we can combine model outputs from various base models(logistic regression, support vector machines, decision trees, neural networks, etc) to create a stronger/better model output.\r\n\r\nThis talk will cover various strategies to create ensemble models.\r\n\r\nUsing third-party Python libraries along with scikit-learn, this talk will demonstrate the following ensemble methodologies:\r\n1) Bagging\r\n2) Boosting\r\n3) Stacking\r\n\r\nReal-life examples from the enterprise world will be show-cased where ensemble models produced better results consistently when compared against single best-performing models.\r\n\r\nThere will also be emphasis on the following: Feature engineering, model selection, importance of bias-variance and generalization.\r\n\r\nCreating better models is the critical component of building a good data science product. \r\n\r\nA preliminary version of the slides is available [here](https://speakerdeck.com/bargava/power-of-ensembles)", - "", - "", - "" - ], - "abstract_extra": "**Previous Presentations**\r\n\r\nOne version of the talk was previously presented at \r\n* [PyCon Ireland -2015 - Machine Learning - Power of Ensembles](http://lanyrd.com/2015/pyconie/sdrpqd/)\r\n\r\nThe speaker has presented at a number of conferences. Some of them are:\r\n\r\n* [PyCon Ireland 2015 - Workshop on Deep Learning](http://lanyrd.com/2015/pyconie/sdrpqd/)\r\n* [Pycon Poland 2015 - Workshop on Deep Learning](http://pl.pycon.org/2015/agenda_en.html)\r\n* [Fifth Elephant 2015, Bangalore India. India's largest data analytics conference -workshop on Deep Learning](https://fifthelephant.talkfunnel.com/2015/10-introduction-to-deep-learning)\r\n [talk](https://fifthelephant.talkfunnel.com/2015/11-visualising-multi-dimensional-data)\r\n* [IEEE International Conference on Cloud Computing for Emerging Markets - Tutorial on Deep Learning](http://conferences.computer.org/ccem/program.html)\r\n* [Bangalore Python Users Meetup Sep 2015 - Data Analysis workshop](http://www.meetup.com/BangPypers/events/210041222/)\r\n* [Scipy India 2015 - Workshop on Data Analysis](http://scipy.in/2015)\r\n( [PyCon India 2015 - Workshop on Statistics](https://in.pycon.org/2015/)", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "bargava@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-power-of-ensembles", - "admin_type": "", - "companies": "Cisco" - }, - "384": { - "abstract_short": "You will see several different walking robots controlled with Python in different ways, and learn how they were built and programmed.", - "sub_title": "Making Python run on robots", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 384, - "speakers": "Radomir Dopieralski", - "title": "Making robots walk with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Algorithms", - "Gadgets", - "Engineering", - "Hardware/IoT Track", - "Cross-Platform-Development" - ], - "abstract_long": [ - "Making a robot walk is not easy, especially when all it has for brains is a small microcontroller which you have to program in C. During this talk you will see different ways in which such a robot can be controlled in Python, either by using remote control, with the Python program running on a stationary computer, by putting a small computer, such as a Raspberry Pi on it, or by programming it with Micropython, a version of the Python language designed for microcontrollers. I will also explain the basic problems with walking robots and how Python can be used to overcome them. Finally, I will show some of the robots I have built.", - "", - "", - "" - ], - "abstract_extra": "I have shown those robots on several conferences already:\r\n\r\nA poster session at PyCon.US: https://us.pycon.org/2015/schedule/presentation/448/\r\nA talk at PyCon.PL: https://www.youtube.com/watch?v=-PisXGVe-lE\r\nA talk at DevConf.cz: http://sched.co/2BkO\r\n\r\nSince then I have made considerable progress, and things became even easier for hobbyists. There are more Micropython boards available, the Micropython language itself became better, there is a new, smaller, Raspberry Pi board, and there are lots of other innovations popping up constantly. We live in the future, and I will talk about some of the exciting new things too.\r\n\r\n", - "tag_categories": [ - "Data Science", - "Hardware", - "Everything Else", - ">>> Suggested Track", - "Python" - ], - "emails": "ep2016@sheep.art.pl", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/making-robots-walk-with-python", - "admin_type": "", - "companies": "" - }, - "734": { - "abstract_short": "Kubernetes is the Google Borg inspired control plane for Docker containers. It has a great API but needs a load of HTTP client code and JSON processing to use it from Python. This talk introduces Kube, a Python wrapper around the Kubernetes API that enables you to manage your Kubernetes cluster in a pythonic way while avoiding any Kubernetes API peculiarities. Programmers and operations folk who are interested in interacting with the Kubernetes API using Python.", - "sub_title": "Manage Kubernetes with Python using the open source, pythononic API wrapper we developed called Kube", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@cobecto", - "id": 734, - "speakers": "David Charles", - "title": "Managing Kubernetes from Python using Kube", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Operations", - "Infrastructure", - "Open-Source", - "python", - "System Administration" - ], - "abstract_long": [ - "## Abstract\r\nDocker has had a transformative influence on the way we deploy software and Kubernetes, the Google Borg inspired control plane for Docker-container- hosting-clusters, is gaining similar momentum. Being able to easily interact with this technology from Python will become an increasingly important capability in many organisations. I'll discuss what the motivations behind writing Kube. We'll dive into Kube using the Python interactive interpreter, getting connected to the API, and simple viewing and label update operations. Finally I'll discuss more advanced resource management activities like Kube's 'watch' API capability.\r\n\r\n## Objectives\r\nAttendees will learn about the key concepts in getting resource information out of their Kubernetes cluster using Kube.\r\n\r\n## Outline\r\n1. Setting the scene (3 minutes)\r\n1. Other Python kubernetes wrappers (2 minutes)\r\n1. Kubernetes concepts quick recap (5 minutes)\r\n1. Dive into Kube in the Python interactive interpreter (10 minutes)\r\n * Outline prerequisites\r\n * The entry point - a Cluster instance\r\n * Views and Items - two important Kube concepts\r\n * Item meta data: labels and versions\r\n1. More Kube features (5 minutes)\r\n * Creating and deleting resources\r\n * Using Kube's Watch API support\r\n * The cluster proxy attribute for when you need to get at the actual API.\r\n1. Q&A (5 minutes)" - ], - "abstract_extra": "## Additional\r\nThe Kubernetes interactions will be performed against a single node k-machine instance installed on a laptop. The talk essentially presents the quick-start portion of the Kube documentation.\r\n\r\n## Speaking experience\r\nThis would be the first time I have given a talk at a major conference but I regularly deliver talks at tech meet-ups. As CTO at Cobe.io, one of the EP2016 conference sponsors, a significant part of my job is delivering talks to prospective customers, clients and investors. A portion of the talk will be delivered performing simple operations in the python interactive shell and on the command line, but there's no complicated live coding.\r\n\r\nSome blog articles I've written:\r\nhttps://cobe.io/blog/authors/dave-charles/\r\n\r\nTech Tran Network video about monitoring: \r\nhttp://www.thettn.tv/headlines/a-brief-history-of-monitoring-david-charles.aspx", - "tag_categories": [ - "DevOps", - "DevOps", - "Open Source", - "", - "DevOps" - ], - "emails": "dave@cobe.io", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-kubernetes-from-python-using-kube", - "admin_type": "", - "companies": "Cobe.io" - }, - "406": { - "abstract_short": "Mocking is a valuable technique for writing tests but mocking effectively is often a stumbling block for many developers and can raise questions about its overall value as a technique.\r\n\r\nThere will be a brief introduction to mocking, then a look at features and techniques of Python\u2019s unittest.mock library and cover some useful tips and common scenarios, so this will be useful to those who have some experience mocking but would like to do so more effectively.", - "sub_title": "Better mocking with Python", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@helenst", - "id": 406, - "speakers": "Helen Sherwood-Taylor", - "title": "Managing Mocks", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Test Driven Development (TDD)", - "Testing" - ], - "abstract_long": [ - "Mocking is a valuable technique for writing tests but mocking effectively is often a stumbling block for many developers and can raise questions about its overall value as a technique.\r\n\r\nThe audience will have some familiarity with unit testing and may have tried mocking before, but some introduction will be provided for those who haven\u2019t. We will look at some features and techniques of Python\u2019s unittest.mock library and cover some useful tips and common scenarios, so this will be useful to those who have some experience mocking but would like to do so more effectively.\r\n\r\nSummary of proposed content:\r\n\r\n1. A short introduction to what mocking is and why it is useful.\r\n2. Tour of Python\u2019s mock library and how to make the most of it\r\n * Creating and manipulating Mock objects\r\n * Setting up return values and side effects to control test environment\r\n * Inspecting mocks - different ways to examine a mock object and find out what happened during the test\r\n * How and where to patch\r\n3. Common mocking situations - scenarios where mocking is particularly useful and/or tricky to get right. For example - date/time, filesystem, read only properties\r\n4. Some discussion of when mocking is and isn't helpful.\r\n\r\nFocus will be mainly on Python's unittest.mock module but we will also have a brief look at some other useful libraries." - ], - "abstract_extra": "I gave this talk previously at PyCon UK last year (https://www.youtube.com/watch?v=haXUaGTp8Bc) which was my first speaking experience.\r\n\r\nI received some encouraging feedback and some interesting suggestions for improvement. I'd like to combine this with my own learnings over the last few months so I can bring a better talk to a wide audience.", - "tag_categories": [ - "Testing", - "Testing" - ], - "emails": "helen@rrdlabs.co.uk", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-mocks", - "admin_type": "", - "companies": "" - }, - "527": { - "abstract_short": "When standard Python syntax doesn't cut it, apply metaclasses to make it do what you want. Here I present our metaclass-based implementation of a declarative GUI layout syntax to inspire ideas for what to do when your goals don't fit the Python syntax.", - "sub_title": "Use the power of metaclasses to bend Python to your needs", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@sm6xmm", - "id": 527, - "speakers": "Anders Hammarquist", - "title": "Metaclasses for fun and profit: Making a declarative GUI implementation", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Meta Classes", - "Use Case" - ], - "abstract_long": [ - "When overhauling the user interface of Autolabel's labeling printers, \r\nwe wanted a clean way to describe the layout of the settings widgets.\r\nThe structure we came up with was a declarative class layout that\r\nleverages Python's metaclass concept to build the underlying GTK\r\nwidget structure.\r\n\r\nI will present the implementation to hopefully inspire you to apply\r\nmetaclass techniques to problems that standard Python syntax can't\r\nquite solve. If that fails, you will at least have a way to\r\ndeclaratively construct GTK GUIs.\r\n\r\nA short, non-exaustive, summary of concepts I will mention includes\r\nmetaclasses (obviously), class hierarchies, method resolution\r\norder, super(), and anecdotes of dealing with GTK.\r\n\r\nYou may find some similarities with my talk on Python as a domain\r\nspecific language at Europython 2006\r\nhttp://indico.cern.ch/event/44/session/41/contribution/35" - ], - "abstract_extra": "Previous talks:\r\n\r\nPython as a domain specific language, Europython 2006\r\nhttp://indico.cern.ch/event/44/session/41/contribution/35\r\n\r\nMulti-document concistency with MondoDB, Europython 2012\r\nhttps://ep2013.europython.eu/conference/talks/multi-document-consistency-with-mongodb", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases" - ], - "emails": "sm6xmm@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/metaclasses-for-fun-and-profit-making-a-declarative-gui-implementation", - "admin_type": "", - "companies": "Open End AB" - }, - "453": { - "abstract_short": "The BBC micro:bit is a \"moon-shot\" project to provide an open programmable device for kids. The PSF were a partner in the project: the device runs MicroPython ~ a full reimplementation of Python 3. \r\n\r\nThis practical demonstration will show what the device does, how to program it, and how to contribute and/or set the appropriate wheels in motion to adopt and adapt the project for their own purposes.\r\n\r\nA practical demo-led presentation... what could possibly go wrong? ;-)", - "sub_title": "A practical demonstration that can't possibly go wrong. What's the worst that could happen?", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@ntoll", - "id": 453, - "speakers": "Nicholas Tollervey", - "title": "MicroPython on the BBC micro:bit", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Gadgets", - "Educational Track", - "MicroPython", - "Internet of Things (IoT)" - ], - "abstract_long": [ - "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython (a full reimplementation of Python 3) runs on the device. All the assets needed to recreate this project have been release under open-source licenses.\r\n\r\nThis practical demonstration shows what can be done with the device and how to program it. I'll provide advice on how best to introduce the device to children and teachers in your own locale.\r\n\r\nThe only prerequisite you need is a passion for Python, education and playing with a cool IoT gizmo. My goal is simply to give attendees enough information to have fun and make cool things with a micro:bit." - ], - "abstract_extra": "I regularly speak at conferences and other tech-related events (including PyconUK, PyConUS, Europython, O'Reilly's EdFoo, OpenTech, Techhub and various \"open source\" related meet-ups). In the past year I have been a keynote speaker at PyCon India (https://www.youtube.com/watch?v=Q3kXXtlviiM) and PyCon Slovakia.\r\n\r\nI created PyCon UK's education track in 2012 and have been the organiser ever since although I stepped down last year so I couldn't become a single point of failure. I also created and have organised the London Python Code Dojo since 2009.\r\n\r\nI blog at http://ntoll.org/ and a large number of my Python related demos created during the development of the BBC micro:bit can be found here: https://www.youtube.com/channel/UC9FMO_qG2eE9I1rMaCEZu7A\r\n\r\nI've written three books for O'Reilly (most recently \"Python in Education\" - http://www.oreilly.com/programming/free/python-in-education.csp) and have also written articles for Computer Shopper, O'Reilly Radar and The Guardian.\r\n\r\nI am a fellow of the Python Software Foundation.", - "tag_categories": [ - "Educational", - "Hardware", - ">>> Suggested Track", - "Python", - "Hardware" - ], - "emails": "ntollervey@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/micropython-on-the-bbc-microbit", - "admin_type": "", - "companies": "" - }, - "730": { - "abstract_short": "Are we looking in the wrong direction for artificial intelligence and machine learning?\r\n\r\nI'll discuss an older but perhaps more satisfying approach, that has been neglected in recent years.\r\n\r\nIt begins with questions in logic and language, and can be explored using easy techniques. I'll use simple Python programs to explore three key notions in this AI research: **loops**, **self-reference** and **tangled hierarchies**, themselves directly reflected in important programming concepts.", - "sub_title": "Approaching artificial intelligence from another direction", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@EvilDMP", - "id": 730, - "speakers": "Daniele Procida", - "title": "Minds, machines and Python", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "The Answer to Life the Universe and Everything Else", - "Machine-Learning" - ], - "abstract_long": [ - "In recent years, we've seen interesting and spectacular successes in artificial intelligence and machine learning, made possible by leaps in computing power and techniques able to harvest vast quantities of data.\r\n\r\nThe results are uncanny. We see them everywhere, from the personal assistants built into smartphones to the neural networks that do an astounding job of recognising images. However, they're also susceptible to the criticism that they represent not intelligence but a mere simulation of it, and that producing a convincing simulacrum has become more important than a genuine search for intelligence or learning.\r\n\r\nAt the same time, another, perhaps deeper, approach has become neglected in recent decades, along with the questions it asks about the nature of mind, intelligence and learning. This approach begins with fundamental questions in logic and language, and can be explored using some of the simplest programming techniques.\r\n\r\nIn this talk, I'll use simple Python programs to explore three key notions in this strand of artificial intelligence research: *loops*, *self-reference* and *tangled hierarchies*. The way these concepts directly reflect important concepts in programming suggests that for the programmer, this approach could be more interesting and satisfying, and simply more **fun,** than using huge ontologies and big data to create mere simulacra of intelligence.\r\n\r\nThe examples I use will be concrete and easy to understand, even for novice programmers." - ], - "abstract_extra": "I'm very excited by this talk - after many years I feel I am succeeding in bringing together a number of questions in the subject together in a way that works extremely well for programmers, and can use insights from programming itself to illuminate questions about the nature of intelligence.\r\n\r\nI'll be drawing upon multiple sources and work in a range of fields. They include the work of Douglas Hofstadter, language theorists, programmers, even poets and artists.\r\n\r\nMy own academic background is in philosophy, and I've presented some of this material to different audiences, including to mathematicians. This talk however will be aimed firmly at the general Python audience of EuroPython.\r\n\r\nAbout me\r\n===========\r\n\r\nI am a member of the Django core team and the board of the Django Software Foundation.\r\n\r\nI was the chair of the organising committee of DjangoCon Europe in Cardiff in 2014, and have been involved in several other international community conferences, including PyCon Namibia.\r\n\r\nI've previously spoken at events including DjangoCon US, DjangoCon Europe, PyCon Ireland, PyCon UK, PyCon Slovakia and PyCon Italia.", - "tag_categories": [ - "Everything Else", - "Data Science" - ], - "emails": "daniele.procida@divio.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/minds-machines-and-python", - "admin_type": "", - "companies": "Divio" - }, - "503": { - "abstract_short": "Dutch startup MiniBrew intends to disrupt the beer market by introducing an easy-to-use beer brewing machine controlled by a mobile app and communicating with a Python backend. Users want real-time insights in their brewing process, which presented some challenges in terms of architectural design. In this talk Elements Interactive's Chesco discusses best practices and pitfalls of the IoT architecture of MiniBrew by diving into message queues, protocol buffers and full-session logging.", - "sub_title": "A use case of Python as the driver of an IoT architecture for MiniBrew", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@chescales", - "id": 503, - "speakers": "Francisco Igual", - "title": "MiniBrew: Brewing beer with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Hardware/IoT Track", - "Architecture", - "Internet of Things (IoT)", - "APIs", - "RESTful" - ], - "abstract_long": [ - "The number one alcoholic drink in the world is undoubtedly beer. With the rise of craft beers, also homebrewing has become very popular in recent years, although it is still a complex and expensive hobby. Dutch startup MiniBrew intends to change that with their revolutionary beer brewing machine, which is controlled by a mobile app and communicates with a Python API backend. \r\n \r\nIn this talk Chesco will share his ideas and experiences in utilizing Python in the backend architecture for the MiniBrew project he and his team are working on at MiniBrew's development partner Elements Interactive. \r\n \r\nAs many IoT projects, the ingredients for MiniBrew are a device with a limited chipset and internet connection, a backend to store the data acting as the mastermind and a mobile app to allow end users to control the brewing process. \r\n \r\nThe fact that we want users to know in real-time how their beer brewing process is doing presented some challenges which required us to come up with a competitive architecture that would both give real-time status updates and not saturate the server with continuous calls. \r\n \r\nChesco discusses best practices and pitfalls in designing and developing IoT architecture by diving into the RabbitMQ message broker, the MQTT protocol and protocol buffers. He will focus on the REST API and CMS site written in Python, elaborating on high frequency data in the apps, scalability, full-session logging and overcoming common architectural challenges.", - "", - "", - "" - ], - "abstract_extra": "For more information on Elements Interactive, please visit: https://www.elements.nl/\r\nFor more information on MiniBrew, please visit: http://www.minibrew.io/", - "tag_categories": [ - ">>> Suggested Track", - "Programming", - "Hardware", - "Web", - "Web" - ], - "emails": "chesco@elements.nl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/minibrew-brewing-beer-with-python", - "admin_type": "", - "companies": "Elements Interactive" - }, - "414": { - "abstract_short": "The OpenGL api is one of the oldest (and most used) graphics library in both the gaming and simulations world. In latest years the api has been extremely re-designed to support modern hardware features available in GPUs. \r\nCan we build realtime graphics application with Python using OpenGL ? Well, obviously Yes !", - "sub_title": "Learn how to use OpenGL to build your game or simulations using latest versions of the API", - "timerange": "2016-07-20 14:00:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@unbit", - "id": 414, - "speakers": "Roberto De Ioris", - "title": "Modern OpenGL with Python", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Game-Development" - ], - "abstract_long": [ - "The OpenGL api is one of the oldest (and most used) graphics library in both the gaming and simulations world. In latest years the api has been extremely re-designed to support modern hardware features available in GPUs. \r\nCan we build realtime graphics application with Python using OpenGL ? Well, obviously Yes !\r\n\r\nThe talk will introduce how 2D and 3D graphics works, which math is required for mastering them and why strong hardware cooperation and heavy optimizations have been required since the very beginning of gaming development history.\r\n\r\nOnce the theory is \"almost\" clear, we can start talking about OpenGL, which problems tries to solve and how it evolved in more than 20 years.\r\n\r\nThe last (and the biggest) part of the talk will show how to interface Python with OpenGL, how to draw simple 2D sprites and how to load and show 3D models using simple lighting models. \r\n\r\nWarning: OpenGL shaders (the custom code you upload in the GPU) are written in GLSL, a pseudo-c dialect, so expect a bit of lower-level programming\r\n", - "", - "", - "" - ], - "abstract_extra": "The talk will be very focused on coding and a bit of CG theory. Very few slides will be produced (mainly to explain some graphics pattern or pipeline). The vast majority of time will be in the IDE/editor.", - "tag_categories": [ - "Everything Else" - ], - "emails": "roberto@20tab.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/modern-opengl-with-python", - "admin_type": "", - "companies": "20tab" - }, - "625": { - "abstract_short": "Monkey-patching is a dynamic modification of a class or a module at runtime.\r\n\r\nThe Python gives developers a great opportunity to use monkey-patching almost everywhere. But should developers do it? Is it a magic trick or a powerful tool? In this talk we will try to give the answers to these questions and try to figure out pros and cons of using monkey-patching.", - "sub_title": "Pros and cons of using monkey-patching in projects", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@itsmyprototype", - "id": 625, - "speakers": "Elizaveta Shashkova", - "title": "Monkey-patching: a magic trick or a powerful tool?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Debugging", - "Python general", - "Best Practice", - "Development", - "Programming" - ], - "abstract_long": [ - "Monkey-patching is a dynamic modification of a class or a module at runtime.\r\n\r\nThe Python gives developers a great opportunity to use monkey-patching almost everywhere. But should developers do it? Is it a magic trick or a powerful tool? In this talk we will try to give the answers to these questions and try to figure out pros and cons of using monkey-patching.\r\n\r\nFirst of all we will learn what is monkey-patching in Python and consider some basic examples of using it.\r\n\r\nOf course, monkey-patching may cause some problems in the code. We will consider bad ways to use it and try to learn different types of problems monkey-patching may lead to.\r\n\r\nDespite of some bugs that may appear in a patched program, monkey-patching is used in a real life rather often. There are some reasons and motives to do it. We will consider the examples of using monkey-patching in real projects like `gevent`, in some other libraries and in testing. Also we will learn some monkey-patch tricks that helps to solve real-life problems in the Python debugger which is a part of the PyCharm and the PyDev.\r\n\r\nAfter that we will compare using of monkey-patching in Python to using it in an another dynamic language Ruby. Are there any differences between them? Is our reasoning correct for Ruby? \r\n\r\nFinally we will conclude all our thoughts and examples and try to give the answer to the question from title." - ], - "abstract_extra": "", - "tag_categories": [ - "Testing", - "Python", - "Best Practice and Use Cases", - "Programming", - "Programming" - ], - "emails": "elizabeth.shashkova@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/monkey-patching-a-magic-trick-or-a-powerful-tool", - "admin_type": "", - "companies": "JetBrains" - }, - "386": { - "abstract_short": "The talk covers the complexity of managing an asset transformation pipeline through tools like Grunt and NodeJS, especially during deploy, test suites or when a new development environment has to be configured from scratch, and showcase how this complexity can be dodged by using tools like WebAssets and DukPy.\r\n\r\nNo more need to keep around two languages, two package management systems and manage your dependencies between them by youself. Just pip install your app and have it working.", - "sub_title": "How your CoffeScript, TypeScript, LESS or SASS can be compiled without using nodejs at all", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@__amol__", - "id": 386, - "speakers": "Alessandro Molina", - "title": "Moving away from NodeJS to a pure python solution for assets", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Deployment/Continuous Integration and Delivery", - "Operations", - "Infrastructure", - "NodeJS", - "Testing" - ], - "abstract_long": [ - "When working with WebApplications it is common to rely on an asset management pipeline to compile scripts, minify css or preprocess images.\r\n\r\nMost of the tools available today rely on JavaScript to perform those steps and always forced Python developers to rely on NodeJS to have grunt perform the pipeline tasks, coffee-script to compile their CoffeeScript or lessc to build their css. This causes longer setup times for projects newcomers, complex development environment, working with two package managers and dependencies that you use once a week but still need to be there.\r\n\r\nThe talk will showcase the DukPy project and focus on how it is possible to build a pure python asset pipeline relying on DukPy to run javascript tools and WebAssets framework to perform the most common tasks that usually Nodejs and tools like Grunt handle for us, greatly reducing the development environment complexity and making its setup as simple as \u2018pip install\u2019.\r\n\r\nThe talk aims at explaining the complexity of managing an asset transformation pipeline through tools like Grunt, especially during deploy, test suites or when a new development environment has to be created, and showcase how this complexity can be dodged by using tools like WebAssets and DukPy.\r\n\r\nNo more need to keep around two languages, two package management systems and manage your dependencies between them by youself. Just pip install your app and have it working.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "Web", - "Testing" - ], - "emails": "alessandro.molina@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/moving-away-from-nodejs-to-a-pure-python-solution-for-assets", - "admin_type": "", - "companies": "AXANT" - }, - "676": { - "abstract_short": "Music transcription allows to convert an audio recording to musical notation through mathematical analysis. In the talk we will focus on transcribing a monophonic audio input and see how we can modify it on the fly. To achieve that, we need to determine pitch and duration of each note, and then use these parameters to create a sequence of MIDI events.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@aniawsz", - "id": 676, - "speakers": "Anna Wszeborowska", - "title": "Music transcription with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Algorithms", - "Use Case", - "Science Track", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Music transcription allows to convert an audio recording to musical notation through mathematical analysis. It is a very complex problem, especially for polyphonic music - currently existing solutions yield results with approx. 70% or less accuracy.\r\n\r\nIn the talk we will focus on transcribing a monophonic audio input and see how we can modify it on the fly.\r\nTo achieve that, we need to determine pitch and duration of each note, and then use these parameters to create a sequence of MIDI events. MIDI stands for _Musical Instrument Digital Interface_ and it encodes commands used to generate sounds by musical hardware or software.\r\n\r\nLet's see how to play around with sounds using Python and a handful of its powerful libraries. And let's do it in real-time!" - ], - "abstract_extra": "I have led a couple of workshops at conferences, such as:\r\nPolyConf 2014 - A polyglot approach to building applications\r\nPyconPL 2014 - Web scraping\r\nPolyConf 2015 - Tandems. Workshops for mothers and children\r\nPyconPL 2015 - Introduction to TDD\r\n\r\nand presented PyLadies Poland organization at Lightning Talks on varied conferences as well as during discussion panels or interviews.\r\n\r\nI have also led a series of workshops under the shield of PyLadies Poland (which I am a founder of), Geek Girls Carrots as well as mentored for DjangoGirls.\r\n\r\nI happen to talk a lot, especially about the stuff I am deeply involved with :)", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - ">>> Suggested Track", - "Data Science" - ], - "emails": "anna.wszeborowska@ableton.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/music-transcription-with-python", - "admin_type": "", - "companies": "Ableton" - }, - "502": { - "abstract_short": "Visual data exploration, e.g. of social networks, can be ugly manual work. The talk will be an introduction for the combined usage of NetworkX and Bokeh in a Jupyter Notebook to show how easy interactive network visualization can be.", - "sub_title": "Network Manipulation Meets Interactive Visualization", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 502, - "speakers": "Bj\u00f6rn Meier", - "title": "NetworkX Visualization Powered by Bokeh", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Web General" - ], - "abstract_long": [ - "During some work with social network analysis my favoured tool to study the networks was NetworkX. It provides a wide set of features and algorithms for network analysis, all in Python. But the functionality to visualize networks is not very strong and not to mention the missing interactive manipulation. However during the exploration of data: exporting, feeding an extra tool for visualization and then manipulating data manually was a tedious workflow.\r\n\r\nAs I also had the optional target of presenting networks in a browser, I improved this workflow by creating a Flask web application providing interfaces to my networks. On the browser side I created a javascript client based on D3.js. In retrospective the required programming effort in Python and also in Javascript was too much for such a task. And exactly this target, interactive visualization in a browser (and as bonus in a Jupyter Notebook), can be achieved quiet easy now with Bokeh.\r\n\r\nThe talk will be a step by step introduction, starting with the basic visualization of a network using Bokeh, NetworkX and a Jupyter Notebook. Next, how to create interactions with your network which will be used to change a network structure, e.g. a leaving person. As we want to see directly the impact of these changes in a network I will finally show how to update networks and visualize directly how the importance of the remaining people changes. And all this can be achieved with Python and maybe a bit of Javascript.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Web" - ], - "emails": "bjoern@opentrash.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/networkx-visualization-powered-by-bokeh", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "685": { - "abstract_short": "This is an introductory talk to modern brain image analysis tools.\r\nI will show how to use nipy tools to process one resting-state fMRI subject, perform intra-subject registration, ICA analysis to extract and visualize resting-state networks.\r\nIf the time allows me I will introduce an anatomical brain atlas and how to perform non-linear registration to do atlas-based segmentation.\r\n", - "sub_title": "", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@alex_savio", - "id": 685, - "speakers": "Alexandre Savio", - "title": "Nipy on functional brain MRI", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Science" - ], - "abstract_long": [ - "This is an introductory talk to modern brain image analysis tools.\r\nI will show how to use nipy tools to process one resting-state fMRI subject, perform intra-subject registration, ICA analysis to extract and visualize resting-state networks.\r\nIf the time allows me I will introduce how to perform non-linear registration to to atlas-based segmentation.\r\n\r\nThe outline of the talk:\r\n1. Present the COBRE dataset and show its characteristics.\r\n2. Use nibabel to open a NifTI file and see the matrix/volume parameters.\r\n3. Use nilearn.plotting to show the anatomical image.\r\n4. Use nipy to co-register the anatomical image to the fMRI image.\r\n5. Use nilearn to perform CanICA and plot ICA spatial segmentations.\r\n\r\nIf time allows:\r\n7. Present a brain anatomical atlas and its template.\r\n8. Present the tools needed for non-linear registration.\r\n9. Show the result of an atlas-based segmentation result.\r\n10. Use nilearn to calculate the resting-state functional connectivity matrix of the subject.\r\n11. Plot it with Bokeh.\r\n", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Sciences" - ], - "emails": "alexsavio@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/nipy-on-functional-brain-mri", - "admin_type": "", - "companies": "TUM, ACPySS" - }, - "601": { - "abstract_short": "Bokeh is a unique library in its genre that lets users create beautiful and complex visualizations from Python. \r\n\r\nThe talks shows a comprehensive overview of the most powerful and popular Bokeh features, like: the optimized websocket based server for performant python callbacks from actions on the browser, Javascript callbacks written in Python (YES!!), bokeh command that lets target different outputs from the same input, JS transforms from Python, high-level charts, Geo support, ...", - "sub_title": "From how to look into billions of points to writing JS callbacks.. we'll look at Bokeh power!", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@b_smoke", - "id": 601, - "speakers": "Fabio Pliger", - "title": "OMG, Bokeh is better than ever!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Big Data", - "Use Case", - "Open-Source", - "HTML5" - ], - "abstract_long": [ - "Bokeh is a unique library in its genre that lets users create beautiful and complex visualizations from Python (and other languages) to the browser without actually writing Javascript or HTML. \r\n\r\nIn the last year the Bokeh team have added a large number of unique features that are extremely powerful. Fully optimized websocket based server that enables performant python callbacks from actions on the browser, Javascript callbacks written in Python (YES!!), bokeh command that lets target different outputs from the same input, JS transforms from Python, high-level charts, Geo support, ...\r\n\r\nAnyone interested in powerful and easy visualizations should take a look at it. :)", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Data Science", - "Best Practice and Use Cases", - "Open Source", - "Web" - ], - "emails": "fabio.pliger@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/omg-bokeh-is-better-then-ever", - "admin_type": "", - "companies": "Continuum Analytics" - }, - "422": { - "abstract_short": "ZeroDB is an end-to-end encrypted database that lets users operate on encrypted data without exposing encryption keys to the database server. The familiar client-server architecture is unchanged, but query logic and encryption keys are pushed client-side. Since the server has no insight into the nature of the data, the risk of data being exposed via a server-side data breach is eliminated.", - "sub_title": "Search, sort, query, and share ciphertext without exposing encryption keys to the database serve", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/newmichwill", - "id": 422, - "speakers": "Michael Egorov", - "title": "Operating on Encrypted Data with ZeroDB", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Infrastructure", - "Open-Source", - "Cryptography", - "Databases" - ], - "abstract_long": [ - "ZeroDB is an open-source end-to-end encrypted database that enables clients to operate on (search, sort, query, and share) encrypted data without exposing encryption keys or cleartext data to the database server. The familiar client-server architecture is unchanged, but query logic and encryption keys are pushed client-side. Since the server has no insight into the nature of the data, the risk of data being exposed via a server-side data breach is eliminated. Even if the server is successfully infiltrated, adversaries would not have access to the cleartext data and cannot derive anything useful out of disk or RAM snapshots. \r\n\r\nZeroDB provides end-to-end encryption while maintaining much of the functionality expected of a modern database, such as full-text search, sort, and range queries. Additionally, ZeroDB uses proxy re-encryption and/or delta key technology to enable secure, granular sharing of encrypted data without exposing keys to the server and without sharing the same encryption key between users of the database.\r\n\r\nZeroDB can be used by enterprises to securely outsource on-premise database and storage infrastructure to cloud environments. Enterprises can encrypt client-side and keep keys on-premise, so that they're only pushing encrypted data to the cloud.\r\n\r\nAdditionally, developers can easily write end-to-end encrypted applications with strong security and privacy guarantees." - ], - "abstract_extra": "Interview on The Changelog: https://changelog.com/190/\r\n\r\nBlog: https://medium.com/@ZeroDB_/\r\n\r\nWhite paper: http://arxiv.org/abs/1602.07168\r\n\r\nGitHub org: https://github.com/zero-db\r\n", - "tag_categories": [ - "Security", - "DevOps", - "Open Source", - "Security", - "Databases" - ], - "emails": "michwill@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/operating-on-encrypted-data-with-zerodb", - "admin_type": "", - "companies": "ZeroDB" - }, - "551": { - "abstract_short": "There's a ton of digital ink spent on the subject of productivity. Choosing the right tools, the right editor, plugins, the right OS, keyboard shortcuts, mouse gestures, etc.\r\n\r\nWell, this is not what this talk is about! It's about everything else around your computer that can boost your productivity. It's about communication, getting things done, working less while doing more, sleeping good, and ultimately, staying healthy. ", - "sub_title": "Staying productive beyond your keyboard", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@nzupan", - "id": 551, - "speakers": "Nejc Zupan", - "title": "Optimize Thyself", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Tooling", - "Python general", - "Development", - "Programming" - ], - "abstract_long": [ - "There's a ton of digital ink spent on the subject of productivity. Choosing the right tools, the right editor, the right plugins, the right OS, mapping keyboard shortcuts, using mouse gestures, the list goes on and on.\r\n\r\nThis is not what this talk is about! It's about everything else around your computer that can boost or kill your productivity. It's about efficient communication, getting things done, working less while doing more, sleeping good, keeping your blood sugar at optimal levels, and ultimately, staying healthy. \r\n\r\nHow should I know? I'm juggling my time between my lifetime addiction to windsurfing , being a father and running a successful Python shop. My working time is very limited and I need to make the most of it. In this talk I'll go through what works for me and point to research on the subject.\r\n" - ], - "abstract_extra": "I've been giving talks (and an occasional keynote) regularly on various (mostly Plone related) events since around 2010:\r\n* https://vimeo.com/110423315\r\n* https://www.youtube.com/watch?v=HsGLLGeXFOU\r\n* https://www.youtube.com/watch?v=egwnZUmR6CE\r\n* https://plone.org/events/regional/past-events/pssa/2012\r\n* http://www.slideshare.net/zupo", - "tag_categories": [ - "Programming", - "Python", - "Programming", - "Programming" - ], - "emails": "nejc.zupan@niteoweb.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/optimize-thyself", - "admin_type": "", - "companies": "NiteoWeb Ltd." - }, - "603": { - "abstract_short": "Ever wondered how Python works under the hood? One way to learn about Python-the-C-program is by exploring the C API for writing Python bindings to native C libraries. In this talk, we will walk through a simple example of making a C library callable from Python code and vice versa. Along the way, we will encounter some essential features of Python: reference counting, memory management, and the inner-workings of objects and modules.", - "sub_title": "A Beginner's Guide to C Extensions for Python", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 603, - "speakers": "Sophia Davis", - "title": "Peeking into Python\u2019s C API", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Data Structures", - "CPython" - ], - "abstract_long": [ - "We all love Python. It\u2019s so elegant and easy to use as a programming language that we forget about the giant, complicated C program executing our strings of white-space sensitive code. For many Python programmers, this side of Python is just a big black box. It works well, so thankfully we don\u2019t *need* to go messing around inside... but what if you *want* to look into the inner workings of this powerful tool? One way to dive into the C-program-side of Python is by exploring the C API for writing Python bindings to native C libraries. In this talk I will explore the basics of this API as I recount my journey to make a simple C library callable from Python code, and allow C code to invoke objects defined in pure Python. Along the way, we will encounter some essential features of Python: reference counting, memory management, and the inner-workings of objects and modules. ", - "", - "", - "" - ], - "abstract_extra": "This talk was originally presented at the Amsterdam Python Meetup in February 2016.", - "tag_categories": [ - "Programming", - "Python" - ], - "emails": "scdgrapefruit@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/peeking-into-pythons-c-api", - "admin_type": "", - "companies": "Optiver Services B.V." - }, - "743": { - "abstract_short": "In the intersection of mechanics, mathematics and \"cool stuff that travels through space\" lies Astrodynamics, a beautiful branch of physics that studies the motion of spacecraft. In this talk we will describe poliastro, a pure Python library we can use to compute orbital maneuvers, plot trajectories and much more. The role of JIT compiling (using numba) to drop the previously used FORTRAN algorithms will also be discussed, as well as the importance of open source in scientific discoveries.", - "sub_title": "Python for Astrodynamics or how to compute complicated orbits using open source", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@astrojuanlu", - "id": 743, - "speakers": "Juan Luis Cano", - "title": "Per Python ad Astra", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Science", - "Algorithms", - "Open-Source", - "Physics" - ], - "abstract_long": [ - "In the intersection of mechanics, mathematics and \"cool stuff that travels through space\" lies Astrodynamics, a beautiful branch of physics that studies the motion of spacecraft. Rocket launches have never been so popular thanks to companies like Space X, more and more investors pay attention to aerospace startups and amazing missions explore our planet and our Solar System every day. In this talk we will describe poliastro, a pure Python library we can use to compute orbital maneuvers, plot trajectories and much more. The role of JIT compiling (using numba) to drop the previously used FORTRAN algorithms will also be discussed, as well as the importance of open source in scientific discoveries." - ], - "abstract_extra": "Versions of this talk already delivered in SciPy Latin America 2015 and 6th International Conference on Astrodynamics Tools and Techniques:\r\n\r\n- https://speakerdeck.com/pybonacci/per-python-ad-astra\r\n- https://indico.esa.int/indico/event/111/session/32/contribution/5\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - "Open Source", - "Sciences" - ], - "emails": "juanlu001@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/per-python-ad-astra", - "admin_type": "", - "companies": "Indizen" - }, - "657": { - "abstract_short": "Python is a great language. Easy to learn, friendly to use, widely used.\r\n\r\nIt is not, however, renowned for being fast. In a lot of situations that does not matter. Sometimes it really does. This talk will introduce you to some tools and techniques for making sure your Python code becomes fast enough \u2013 without turning into a maintenance nightmare. Warning: may contain small bits of other languages.", - "sub_title": "how to write good, fast, pythonic code", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 657, - "speakers": "Burkhard Kloss", - "title": "Performant Python", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Clean Code", - "Science Track", - "Best Practice", - "Educational Track" - ], - "abstract_long": [ - "Python is a great language. Easy to learn, friendly to use, widely used.\r\n\r\nIt is not, however, renowned for being fast. In a lot of situations that does not matter. Sometimes it really does. This talk will introduce you to some tools and techniques for making sure your Python code becomes fast enough \u2013 without turning into a maintenance nightmare. Fast code does not have to be unreadable - and when you're writing Python, it really pays of to think \"pythonically\".\r\n\r\nThat does mean using the included batteries, and utilising the ecosystem of tools around the language, too.\r\n\r\n Warning: may contain small bits of other languages." - ], - "abstract_extra": "Speaking experience: \r\nI have given talks at Nordevcon (http://www.nordevcon.com/) and the ACCU Conference (http://accu.org/index.php/conferences) over the last few years.\r\n\r\nThis talk is an extended and revised version of the presentation I gave at Nordevcon in February this year, with additional material.", - "tag_categories": [ - "Educational", - "Educational", - ">>> Suggested Track", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "burkhard.kloss@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/performant-python", - "admin_type": "", - "companies": "" - }, - "474": { - "abstract_short": "When a program is not fast enough, we call on the profiler to save us. But what happens when the program is hard to profile, like for instance the Python Debugger? In this talk we're going dive deep into Vmprof, a Python profiler, and see how it helps us find out why a debugger can be slow. Once we find the culprit, we'll use Cython to optimise things. \r\n", - "sub_title": "Using Vmprof to profile a Python debugger and then optimise it with Cython", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/DmitryTrofimov", - "id": 474, - "speakers": "Dmitry Trofimov", - "title": "Profiling the unprofilable", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Cython", - "Best Practice", - "Performance", - "Case Study", - "Open-Source" - ], - "abstract_long": [ - "Profile is the main way to find slow parts of your application, and it's often the first approach to performance optimisation. While there are quite a few profilers, many of them have limitations. In this talk we're going to learn about the new statistical profiler for Python called Vmprof that is actively being developed by the PyPy team. We'll see how it is implemented and how to use it effectively. We will apply it to an open source project, the Pydev.Debugger, a popular debugger used in IDE's such as Pydev and PyCharm, and with the help of Cython which we'll also dig into, we'll work on optimising the issues we find.\r\n\r\nWhether it's a Python debugger, a Web Application or any other kind of Python development you're doing, you'll learn how to effectively profile and resolve many performance issues.\r\n\r\n\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "**Outline**\r\n\r\n - INTRODUCTION (1 MINUTE)\r\n - About myself\r\n - How am I related to the topic and why is it important\r\n - THE PROBLEM WITH PERFORMANCE (3 MINUTES)\r\n - Introducing Pydev.Debugger, a Python debugger\r\n - Why is it slow? Seems that we need to use a profiler\r\n - FIRST PROFILING ATTEMPT (7 MINUTES)\r\n - Python profilers overview: CProfile, yappi, line_profiler (4 minutes)\r\n - Using CProfile to profile the debugger (2 minute)\r\n - Why doesn't it work? (1 minute)\r\n - SECOND PROFILING ATTEMPT (10 MINUTES)\r\n - Statistical profilers (1 minute)\r\n - Introducing Vmprof profiler (3 minutes)\r\n - Profiling the debugger with Vmprof (6 minutes)\r\n - OPTIMIZATION (15 MINUTES) \r\n - What is Cython (5 minutes)\r\n - Using Cython to optimize the slowest parts of the debugger (6 minutes)\r\n - Profiling Cython-optimized code (2 minutes)\r\n - Making Cython optional to support wider range of Python versions (2 minutes)\r\n - CONCLUSION (2 MINUTES)\r\n - Q & A (5 MINUTES)\r\n\r\n*Note*: the talk length can be reduced to 30 minutes. That will mean having no questions, and very limited introduction about into technologies used (Cython and Vmprof profiler). \r\n\r\n*My knowledge about the topic*\r\nThe project used as an example: Pydev.Debugger.\r\nI am one of the maintainers of the project in collaboration with Fabio Zadrozny. The Cython optimization shown in talk is a real optimization performed recently to make the debugger faster and was our collaborative effort.\r\nThe profiler introduced in the talk: Vmprof.\r\nI am not a direct committer to the project, but I have collaborated with the PyPy team for the last half of a year on making it available on Windows and Mac OSX. I am quite aware of the tool usage limitations as well as it's implementation details.\r\n\r\n*Audience*\r\nThe talk is supposed to be also intelligible for novice developers as they can get out of it some general concepts about profiling and optimization. While developers with intermediate experience will know about implementation details and learn some best practices.\r\n\r\n*Slides*\r\nWhile the main example in the talk will be a real Python debugger, I will avoid showing the real code on my slides. Instead there will be simplified snippets that are able to express the main idea of the optimization needed to perform and the resulting outcome. I tried this approach in my past talk 'Python Debugger Uncovered' and it proved to be a good approach.\r\nThe real project will be visible only during profiling phase in the form of visual call tree and probably other diagrams.\r\n\r\n*Past speaking experience*\r\nI gave a 30 minutes talk called \"Python Debugger Uncovered\" about implementation details of Python debugger at Europython 2014 in Berlin and at PyCon APAC 2015 in Taipei. There are video recordings of this talk: https://www.youtube.com/watch?v=DHf-6gW3-qs https://www.youtube.com/watch?v=HfzdM7rsKbU\r\nI gave a 30-minute talk 'Can Rust make your Python shine?' about Rust programming language and Python profiling at Europython 2015 in Bilbao: https://www.youtube.com/watch?v=weAxEoEfl0M&feature=youtu.be\r\nI presented a 45-minute live-demo about features of PyCharm IDE at Python Unconference 2015 in Hamburg\r\nI presented a 30-minute talk about PyCharm at PyCon Ukraine 2011\r\nI gave several lightning talks about PyCharm and other open-source projects at difference conference including PyCon and DjangoCon Europe.\r\n\r\n", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Programming", - "Case Study", - "Open Source" - ], - "emails": "trofimov.dmitry@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/profiling-the-unprofilable", - "admin_type": "", - "companies": "JetBrains" - }, - "613": { - "abstract_short": "Failures are the bane of scaling a modern web service and can cause serious pain for end users! Lucky for us, there are techniques that can help protect your product handle failures in subsystems gracefully. This talk will dive into one of these in depth, the Circuit Breaker pattern, and explore the options it gives us for keeping all our users safe. We will be focusing on several real-world problems and options for how to implement your circuit breaker setup in nice, readable python code.", - "sub_title": "Handling errors in production with shocking ease", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@scott_triglia", - "id": 613, - "speakers": "Scott Triglia", - "title": "Protect your users with Circuit Breakers", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web General", - "Distributed Systems", - "Web Track" - ], - "abstract_long": [ - "The inevitability of failures is the bane of scaling any modern web service and can cause serious pain for end users! Lucky for us, there are techniques that can help protect your product handle failures in subsystems gracefully. This talk will dive into one of these in depth, the Circuit Breaker pattern, and explore the options it gives us for keeping our users safe.\r\n\r\nWe will be focusing on several real-world problems and how they can be addressed by circuit breakers. You should expect to leave the talk with details on simple circuit breakers as well as understanding how they can be adapted for more complex situations. We\u2019ll also discuss some options for how to implement your circuit breaker in readable python.\r\n\r\n\r\n**Contrived FAQ time!**\r\n\r\n**I don\u2019t know what Circuit Breakers are, should I come?**\r\nDefinitely! We\u2019re going to start from scratch and work our way up. Only requirement is basic familiarity with backend services receiving and making HTTP requests.\r\n\r\n**I totally know what Circuit Breakers are, should I come?**\r\nDefinitely! After the intro, the main meat of the talk will be working through a series of more advanced situations and talking about how we can alter the basic circuit breaker setup to address them. \r\n\r\n**I want real-world advice, not made up hypotheticals!**\r\nWell that\u2019s not really a question, but you\u2019ll be happy to know that the examples we\u2019ll discuss come straight from my experience at Yelp. They should be very realistic and broadly applicable.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "I spoke at Europython, PyDX, PyconCA, and PyconAU in 2015. Videos are Europython (https://www.youtube.com/watch?v=z3_HorshzJ4), PyconAU (http://www.pyvideo.org/video/3964/arrested-development), and PyconCA (https://www.youtube.com/watch?v=RMt43wyg-zg).\r\n\r\nMy team at Yelp is focused on customer-to-business transactions, so we have a ton of experience with applying these types of patterns to safely minimize costly failures in production. I\u2019m excited to get a chance to share this specific technique with the EuroPython audience :)\r\n\r\nNot requirements, but ideal preferences for the talk time.\r\n* early in the conference schedule\r\n* not in the last session of any day", - "tag_categories": [ - "Web", - "DevOps", - ">>> Suggested Track" - ], - "emails": "scott.triglia@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/protect-your-users-with-circuit-breakers", - "admin_type": "", - "companies": "Yelp" - }, - "395": { - "abstract_short": "As developers we all love well-documented, well-tested packages. If we do the same for our code it is easier for others to re-use our hard work, and maybe even contribute. We will take a quick look on how to do this using popular tools and only a small investment of time. With Github and some simple tools, setting up a well-groomed package doesn't have to be difficult.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 395, - "speakers": "Marko Samastur", - "title": "Publish your code so others can use it in 5 easy steps", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Best Practice", - "PyPi", - "Open-Source", - "Community" - ], - "abstract_long": [ - "Every Python open-source developer wants their software to be used. As developers, we trust software that is tested and well-documented.\r\n\r\nIn this talk we'll go through 5 steps for how to do this for your own packages.\r\n\r\nWe will take a quick look on how to do this using popular tools and small investment of time:\r\n\r\n- Write a setup.py script for a pure Python package\r\n- Set up py.test, tox and coverage to test our package with multiple versions of Python\r\n- Configure Github to use Travis CI & coveralls.io to automatically test our package every time we commit\r\n- Register and publish our package to PyPI\r\n- Setup our documentation on ReadTheDocs\r\n\r\n" - ], - "abstract_extra": "**Objectives**\r\n\r\nMy goal is to inspire a newcomer to PyPI and the Github ecosystem with enough knowledge to get them off the ground in creating pure Python package. Using py.test, tox, and coverage combined with Travis CI and coveralls for solid testing with published results. Also show how easy it is to publish a package to PyPI, check requirements are up-to-date using requires.io, publish documentation on RTFD. \r\n\r\n\r\n**Talk outline**\r\n\r\nIntroduction (1min / 1min)\r\n\r\n- why you\u2019d want this\r\n- tools to use\r\n- there\u2019s a github repo with details (notes not necessary)\r\n\r\nBasics of setup.py (5min / 6min)\r\n\r\n- anatomy of a pure Python setup.py\r\n- setting requirements\r\n- specifying packages to include\r\n- maybe: quick overview of Trove identifiers\r\n- maybe: dealing with versions (have one place to set it)\r\n\r\nTesting locally (5 min / 11min)\r\n\r\n- py.test setup\r\n- checking test coverage\r\n- testing with various Python versions with tox\r\n\r\nCI with Travis (5min / 16min)\r\n\r\n- registering account on travis-ci.org and adding project\r\n- basic .travis.yml configuration\r\n\r\nAdding coverage check with coveralls.io (3min / 19min)\r\n\r\n- registering account and adding project\r\n- changes to .travis.yml (install coveralls package; publish with coveralls command)\r\n\r\nPublishing on PyPI (3min / 22min)\r\n\r\n- registering package\r\n- pushing changes\r\n\r\nPublishing on ReadTheDocs (5min / 27min)\r\n\r\n- registering Github project\r\n- Sphinx and sphinx-quickstart; RTD configuration tweaks\r\n- just some pointers to some docs on how to write reStructuredText\r\n\r\nConclusion (2min / 29min)\r\n\r\n- what wasn\u2019t covered (documentation, mixed packages\u2026)\r\n- where to get more information (cookie cutter package)\r\n\r\n**Previous experience**\r\nI've attended few EuroPythons, a number of DjangoCons and many local Python Meetups. I have presented to large audiences (500+) before, including on technical subjects (Web 2.0 Expo Europe 2008).\r\n\r\nBecause talk itself covers a lot of information that cannot be adequately presented in 30 minutes (or 45) it will be supported with a template repository on Github including cookiecutter script to produce a documented working setup for covered (and not covered) services.\r\n\r\nI have also already published a few packages on PyPI.\r\n\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Python", - "Open Source", - "Community" - ], - "emails": "markos@gaivo.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/publish-your-code-so-others-can-use-it-in-5-easy-steps", - "admin_type": "", - "companies": "" - }, - "661": { - "abstract_short": "Pygame Zero is a new game engine for education, built on top of Pygame. It makes writing your first games extremely simple, while saving beginners from certain potential pitfalls. Daniel will introduce Pygame Zero, walk through creating a simple game, and discuss the background for Python in education and the design philosophy behind Pygame Zero.", - "sub_title": "A zero-boilerplate game framework", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@lordmauve", - "id": 661, - "speakers": "Daniel Pope", - "title": "Pygame Zero", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Educational Track", - "Game-Development" - ], - "abstract_long": [ - "Pygame Zero is a new game engine for education, built on top of Pygame. It makes writing your first games extremely simple, while saving beginners from certain potential pitfalls. This talk will introduce Pygame Zero, walk through creating a simple game, and discuss the background for Python in education and the design philosophy behind Pygame Zero.\r\n\r\nPygame is a powerful set of libraries for graphics, sound, input and more. But it is just a library: each program needs to import and set up the libraries, implement a game loop and load resources among numerous other concerns. While seasoned Pythonistas have no trouble with this, teachers told us that they found it difficult to teach with Pygame. There is simply too much boilerplate involved, and getting students to reproduce the boilerplate perfectly before useful lessons can begin takes too much time out of a 40-minute lesson.\r\n\r\nPygame Zero is simple enough that a lesson can be broken down into bitesize steps where meaningful progress can be made with just a couple of lines of code at a time." - ], - "abstract_extra": "This talk will be a revised version of a talk I've already given at the Raspberry Pi Birthday weekend and which has also been accepted for Pycon US.\r\n\r\nI gave a brief lightning talk at Europython 2015 and this will be an extended version that introduces several of the features of Pygame Zero\r\n\r\nI have spoken at various Python conferences including Europython, Pycon UK and lightning talks at Pycon US and the London Python Dojo. I am a two-time winner of the Pyweek games programming contest.", - "tag_categories": [ - "Educational", - ">>> Suggested Track", - "Everything Else" - ], - "emails": "lord.mauve@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pygame-zero", - "admin_type": "", - "companies": "Mauve Internet" - }, - "741": { - "abstract_short": "\r\n\r\n - New features of pytest's upcoming major version 3.0\r\n - Breaking changes and other important information\r\n - Recap of the first developer sprint in June, 2016\r\n - Thank you notes to all who have contributed to the fundraiser\r\n\r\n", - "sub_title": "Demonstration, New Features, Important Bugfixes & Sprint Recap", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@hackebrot", - "id": 741, - "speakers": "Raphael Pierzina", - "title": "Pytest 3.0", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Open-Source", - "Documentation", - "Testing", - "Community" - ], - "abstract_long": [ - "Pytest is a mature testing framework for Python that is developed by a thriving and ever-growing community of volunteers. Following the principle of \"no API is the best API\" it uses plain assert statements and regular Python comparisons. Writing tests with pytest requires little to no boilerplate code and powerful features allow easy parametrization and intelligent test selection.\r\n\r\nIn this talk we will have an in-depth look at new features of pytest 3.0 and live demo possible use cases. We will also learn about important bugfixes and other enhancements of the upcoming major release. Backwards-incompatible changes will be addressed and changes made to the documentation will be highlighted.\r\n\r\nIf you are already familiar with pytest, you will be happy to hear about significant improvements of the fixture and hook system but also what's in store for a better integration with tox, an important tool that allows testing across different Python versions.\r\n\r\nIn June, 2016 more than 25 Pythonistas from around the globe gather in Freiburg, Germany to work on the release and set the path for future developments of the core framework. This is a big step forward for the project made posssible by a fundraiser that reached 108% of it's initial goal.\r\n\r\nI will share our experiences from the developer sprint while they are still fresh and explain why these events are incredibly important for a community and give advice on how to organize your own." - ], - "abstract_extra": "For more information on the sprint see: https://www.indiegogo.com/projects/python-testing-sprint-mid-2016\r\n\r\nIf there are no more 45 min slots available, I can skip over live demos of new features to reduce the talks duration to 30 min.", - "tag_categories": [ - "Open Source", - "Programming", - "Testing", - "Community" - ], - "emails": "raphael.pierzina@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pytest-30", - "admin_type": "", - "companies": "FanDuel" - }, - "607": { - "abstract_short": "Todo programador tiene inter\u00e9s para que su software sea fiable y estable. Haremos una sencilla introducci\u00f3n a pytest con el caso de uso de un site internacional para el que generamos cientos de tests y redujimos dr\u00e1sticamente los errores en producci\u00f3n. Con este simple ejemplo demostraremos que no siempre necesitamos hacer TDD para disfrutar de las ventajas de un framework de testing.", - "sub_title": "O como un framework de testing puede substituir las p\u00edldoras para dormir", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@paurullan", - "id": 607, - "speakers": "Pau Ru\u0140lan Ferragut", - "title": "Pytest desde las trincheras", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Best Practice", - "Tooling", - "Case Study", - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "Las metodolog\u00edas de desarrollo que incorporan la escritura de pruebas desde el momento cero tienden a generar c\u00f3digo m\u00e1s estable y fiable pero la realidad es que muchas veces no gozamos del privilegio ni del presupuesto para escribir tests para todas las caracter\u00edsticas de nuestro producto. Pero si tenemos a nuestra disposici\u00f3n herramientas de testing que nos permitan eliminar los errores evitables como romper enlaces en la p\u00e1gina de inicio nos quitaremos el miedo a hacer pases a producci\u00f3n y generaremos m\u00e1s valor al negocio.\r\n\r\nLa charla no tiene pretensi\u00f3n de ser ni una introducci\u00f3n al test driven development ni de las complejidades de qu\u00e9 es un buen o mal test. El objetivo es animar a todo aquel que todav\u00eda pruebe sus proyectos manualmente a intentar alg\u00fan grado de automatizaci\u00f3n. Para ello la estructura ser\u00e1 una presentaci\u00f3n de pytest, exponer algunos plugins altamente recomendados y centrarse en el caso de uso de una p\u00e1gina con presencia en ocho pa\u00edses donde automatizamos un mont\u00f3n de comprovaciones simples que nos permitieron reducir los errores evitables.\r\n" - ], - "abstract_extra": "Este charla tambi\u00e9n la he propuesto en ingl\u00e9s con el t\u00edtulo \u00abPytest from the trenches\u00bb", - "tag_categories": [ - "Best Practice and Use Cases", - "Programming", - "Case Study", - "Testing", - "Testing" - ], - "emails": "paurullan@gmail.com", - "language": "Spanish", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pytest-desde-las-trincheras", - "admin_type": "", - "companies": "APSL" - }, - "580": { - "abstract_short": "How does the experienced python programmer fair when faced with python's \"new\" way of doing async programming for the first time? \r\n\r\nThis talk details the different ways python provides for attacking the problem of asynchronous programming and focuses on the best practices for the future (as of python 3.4 and 3.5)", - "sub_title": "Do you need to be a wizard to use it?", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 580, - "speakers": "Nicolas Lara", - "title": "Python and Async programming", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Best Practice", - "Go-Lang", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "How does the experienced python programmer fair when faced with python's \"new\" way of doing async programing in for the first time? Do we all know how and when to use Futures, yield from, asyncio, coroutines, the async and await keywords, eventloops, and others?\r\n\r\nA lot has changed in recent versions of Python when it comes to async programming, concurrency, and parallelism. We still have very different ways of approaching the problem in each version, but they are finally (as of python 3.4/3.5) converging to a standard. \r\n\r\nThis talk explores, from the perspective of an experienced python programmer with little to no experience in async programming, what the \"one obvious way\" to do async programming in Python is supposed to be. It does so but analysing examples of different categories of async problems we may want to solve and what the correct way to solve them with the latest versions of Python would be (along with the trade offs of different approaches).\r\n\r\nThe examples include generic CPU-bound problems, IO-bound problems, and \"both-bound\" problems; along with common tasks as building a simple server, scraping, deferring a web response, and traversing graphs.\r\n\r\nWhen useful, I compare the solutions with the approach we would take in languages that have been design for- and are known to be good at async programming like Javascript and Go. " - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Other Programming Languages", - "Programming" - ], - "emails": "nicolaslara@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-and-async-programming", - "admin_type": "", - "companies": "Lincoln Loop" - }, - "647": { - "abstract_short": "This talk explains how Ableton\u2019s developers use Python to build and test C, C++ and Objective-C code. Our \"build-system\" is a collection of Python scripts that simplify our workflows, and help us write better software. The top-level scripts share a common design which makes them easy to use, maintain and extend. This talk describes the essence of that design, so you can apply it to your own project.", - "sub_title": "", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 647, - "speakers": "Alain Martin", - "title": "Python as the keystone of building and testing C++ applications", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Software Design", - "Tooling", - "Case Study", - "C-Languages", - "Command-Line" - ], - "abstract_long": [ - "At Ableton, we make [Live][1], [Push][2] and [Link][3], unique software and hardware for music creation and performance. Live is a C++ desktop application built from a 15-year old code base. Push is an instrument embedding a multicolor display which renders a [Qt Quick][4] scene powered by [Qt][5]. Link is a technology that keeps music devices in time and is available to app developers as [LinkKit][6], an iOS SDK. \"But what does all that have to do with Python?\", you might ask. \r\n\r\nThis talk answers that question by explaining how our developers use Python to build and test C, C++ and Objective-C source code. Based on [GYP][7], what we call \"build-system\" is a collection of Python scripts that simplify our workflows, and help us write better software. The three top-level scripts, \"configure.py\", \"build.py\" and \"run.py\", share a common design which makes them easy to use by developers, as well as easy to maintain and extend. This talk describes the essence of that design, so you can apply it to your own project.\r\n\r\n[1]: https://www.ableton.com/live/\r\n[2]: https://www.ableton.com/push/\r\n[3]: https://www.ableton.com/link/\r\n[4]: https://www.qt.io/qt-quick/\r\n[5]: http://www.qt.io/\r\n[6]: https://ableton.github.io/linkkit/\r\n[7]: https://gyp.gsrc.io/", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Programming", - "Programming", - "Case Study", - "Other Programming Languages", - "Programming" - ], - "emails": "alain.martin@ableton.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-as-the-keystone-of-building-and-testing-c-applications", - "admin_type": "", - "companies": "Ableton" - }, - "536": { - "abstract_short": "Have you ever wondered how Django models work? I'll present a story of data structure transformation. I will talk about ideas from Django models that I used and how I rediscovered descriptor API. I will talk about printing, serializing, comparing data structures and some other examples, where descriptors excel at making declarative code easier to write.", - "sub_title": "How to use Python descriptor API and let testers skip the boring work", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 536, - "speakers": "Adrian Dziubek", - "title": "Python Descriptors for Better Data Structures", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Django", - "Case Study", - "Testing" - ], - "abstract_long": [ - "I worked as a developer of a testing framework for a C++ server. The framework tested binary protocol implemented by the server.\r\n\r\nMost of the work involved testers preparing test cases. The data format was primitive structures -- hard to read and easy to break. Field order and all the data had to be entered manually.\r\n\r\nAt the time, I have already seen the better world -- the models from Django. Have you ever wondered how those work? Step by step, I used the ideas from there to make the structures more friendly and on my way I rediscovered descriptors.\r\n\r\nI'll show in incremental steps, how:\r\n\r\n - used keyword arguments to lower signal to noise ratio,\r\n - order of definition for sorting the fields,\r\n - realized that `__call__` is used instead of assignment,\r\n - used `__setattribute__` as first step to extend primitive fields,\r\n - discovered that I'm actually reimplementing descriptors,\r\n\r\nand how it lead me to:\r\n \r\n - implement printing in a way that is friendly to regression testing,\r\n - use diff library for less code and better results,\r\n - implement more readable validation.\r\n\r\nI want to show how descriptors work in Python and how they enable declarative style of programming. By the end of the talk I want you to understand what is at the core of the magic behind field types used by object relational mappers like Django.\r\n\r\n" - ], - "abstract_extra": "That would be my first talk for a bigger audience. I have some experience from presenting at the university courses and playing guitar at school, so I'm hopeful about my stage fright. I'll be training with presenting this subject at my company's lightning talks and a local Python group.", - "tag_categories": [ - "Application Frameworks", - "Case Study", - "Testing" - ], - "emails": "adrian.dziubek+europython@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-descriptors-for-better-data-structures", - "admin_type": "", - "companies": "STX Next" - }, - "455": { - "abstract_short": "I would like to talk about modern Astronomy where I would give a brief history of Astronomy. I will answer some question: \r\nWhat do we use computers for today in astronomy? \r\nWhere is Python\u2019s place in today\u2019s science? \r\nIs Python is the best language for scientific computation? \r\nI would like to give a short introduction into AstroPy module. Finally I would like presents some result of my research where Python was used to create data.\r\n", - "sub_title": "", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 455, - "speakers": "S\u0142awomir Piasecki", - "title": "Python in Astronomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Science", - "Python general", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Physics" - ], - "abstract_long": [ - "For ages people have been watching the sky, and tried to learn something about all those mysterious lights. In ancient times, scientist used mostly their naked eyes to watch what happened in the night sky. Astronomy is one of the oldest fields in science. \r\nEverything changed when Galileo invented his lunette. Thanks to thi, we were able to proof Copernicus\u2019 new model of the solar system with the sun in the center. \r\n\r\nThe next big step in Astronomy was using computers. Where there are computers and Astronomy, there is a place for programming. For many years astronomers were mostly using Fortran and C/C++. Both are suited to numeric computation and scientific computing. Since they are structured programming language, that makes them very valuable for science.\r\n\r\nOver the past decade, Python has started to be used by more and more people in astronomy. But is there a place in Astronomy for Python, as it is not as fast as Fortran or C/C++? In Python there is a module called AstroPy which helps astronomers in their work. \r\n\r\nMatPlotLib is one of the most popular library use in astronomy. This tool helps created very sophisticated plots and graphs.\r\n\r\nFinally I would like talk about some research I did using Python. For research, we decided to use AUTO. It is a hybrid of Fortran and Python, to compute bifurcation points in mathematical models. In Python we introduce mathematical model, ODE and initial parameters. Fortran does all the computation.\r\n", - "", - "", - "" - ], - "abstract_extra": "I have been giving talk during my education career in Spain and USA. \r\nLast year (2015) I gave my first presentations about python in Polish PyCon. Since I got positive feedback I would like to try now in bigger event.", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Data Science", - "Sciences" - ], - "emails": "slawomir.piasecki@stxnext.pl", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-in-astronomy", - "admin_type": "", - "companies": "STX Next" - }, - "619": { - "abstract_short": "On February 11th 2016 Ligo-Virgo collaboration gave the announce of the discovery of Gravitational Waves, just 100 years after the Einstein\u2019s paper on their prediction.\r\nA brief introdutcion to data analysis methods used in Gravitational Waves (GW) communities \r\nPython notebook describing how to analyze the GW event detected on 14 September 2015. \r\n\r\n", - "sub_title": "", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@ElenaCuoco", - "id": 619, - "speakers": "Elena Cuoco", - "title": "Python in Gravitational Waves Research Communities", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Jupyter/iPython Notebook", - "Data Science" - ], - "abstract_long": [ - "On February 11th 2016 Ligo-Virgo collaboration gave the announce of the discovery of Gravitational Waves, just 100 years after the Einstein\u2019s paper on their prediction.\r\nAfter an introduction on Gravitational Waves, on Virgo Interferometric detector, I will go through the data analysis methods used in Gravitational Waves (GW) communities either for the detector characterization and data condition or for the signal detection pipelines, showing the use of python we make.\r\nAs practical example I will introduce a python notebook describing the GW event detected on 14 September 2015 and I will show a few of signal processing techniques.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Python", - "Data Science" - ], - "emails": "elena.cuoco@ego-gw.it", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pyhton-in-gravitational-waves-research-communities", - "admin_type": "", - "companies": "European Gravitational Observatory" - }, - "570": { - "abstract_short": "Approach to topics, evolution, correlations through the lyrics of some of the greatests rock bands of all times. We will talk about the different phases of this personal project, in which I approach to a passion through a scientific method. \r\n\r\nThis is a project that combine different techniques: \r\n- web crawling\r\n- NoSQL \r\n- Natural Language Processing \r\n- Data visualization", - "sub_title": "Analysing the lyrics of the greatest rock bands of all time", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@claudiaguirao", - "id": 570, - "speakers": "Claudia Guirao Fern\u00e1ndez", - "title": "Python, Data & Rock'n'Roll", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Natural Language Processing", - "MongoDB", - "Data Science", - "Beginners" - ], - "abstract_long": [ - "Have you ever wonder how David Bowie has evolved into the theme of his songs throughout their studio albums? Want to find out in what looks like Nirvana and Pink Floyd?\r\n\r\nApproach to topics, evolution, correlations through the lyrics of some of the greatests rock bands of all times. We will talk about the different phases of this personal project, in which I approach to a passion through a scientific method. \r\n\r\nThis is a project that combine different techniques: \r\n- Web crawling\r\n- NoSQL \r\n- Natural Language Processing \r\n- Data visualization\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Data Science", - "Databases", - "Data Science", - "Educational" - ], - "emails": "guirao.claudia@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-data-rocknroll", - "admin_type": "", - "companies": "Kernel Analytics" - }, - "736": { - "abstract_short": "Query Embeddings is an unsupervised deep learning based system, built using Python and open source libraries (Annoy, keyvi etc.) which recognizes similarity between queries and their vector representations, for a web scale search engine integrated within Cliqz browser [https://cliqz.com/en]. It improves recall for previously unseen queries and is one of the many key components of our search stack. The framework be utilized by other low latency systems involving vector representations.\r\n", - "sub_title": "Web Scale Search powered by Deep Learning and Python", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@codekee", - "id": 736, - "speakers": "Ankit Bahuguna", - "title": "Query Embeddings: Web Scale Search powered by Deep Learning and Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Natural Language Processing", - "Deep Learning", - "Open-Source", - "Data", - "Machine-Learning" - ], - "abstract_long": [ - "A web search engine allows a user to type few words of query and it presents list of potential relevant results within fraction of a second. Traditionally, keywords in the user query were fuzzy-matched in realtime with the keywords within different pages of the index and they didn't really focus on understanding meaning of query. Recently, Deep Learning + NLP techniques try to _represent sentences or documents as fixed dimensional vectors in high dimensional space_. These special vectors inherit semantics of the document.\r\n\r\nQuery embeddings is an unsupervised deep learning based system, built using Python, Word2Vec, Annoy and Keyvi (https://github.com/cliqz-oss/keyvi) which recognizes similarity between queries and their vectors for a web scale search engine within Cliqz browser. (https://cliqz.com/en)\r\n\r\n![][1]\r\n\r\nThe goal is to describe how query embeddings contribute to our existing python search stack at scale and latency issues prevailing in real time search system. Also is a preview of separate vector index for queries, utilized by retrieval system at runtime via ANNs to get closest queries to user query, which is one of the many key components of our search stack.\r\n\r\n![][2]\r\n\r\nPrerequisites: Basic experience in NLP, ML, Deep Learning, Web search and Vector Algebra. Libraries: Annoy. \r\n \r\n[1]: https://sites.google.com/site/netankit/1.png\r\n[2]: https://sites.google.com/site/netankit/3.png" - ], - "abstract_extra": "**Talks:**\r\n - \"Deep Dive into Tensorflow\" as an Invited speaker at TensorFlow and Open AI Meetup, Stylight GmbH, Munich, March 2016. [https://www.youtube.com/watch?v=T0H6zF3K1mc]\r\n - \"Sentiment Analysis: Machine learning using Python Scikit-Learn\", delivered at FOSS-ASIA. March 2015 at NUS, Singapore. [https://speakerdeck.com/netankit/sentiment-analysis-machine-learning-with-python-scikit-learn]\r\n- \"Breaking the Wall of Building Effective Communities\" at Falling Walls Lab, Berlin, November 2014 [[https://www.youtube.com/watch?v=y6y-10BQg9o][1]]\r\n\r\n**Master Thesis / IDP :** \r\n- \"Deep Learning Methods for Sentiment Analysis\", conducted jointly at TU Munich and LMU Munich, Germany. October 2015\r\n\r\n**Publications [ACL Anthology]:**\r\n - Facilitating multi-lingual sense annotation: Human mediated lemmatizer, Estonia (GWC) 2014\r\n - HinMA: Distributed Morphology based Hindi Morphological Analyzer, India (ICON) 2014\r\n\r\n**Others:** \r\nOfficial contributor, Mozilla Project: www.mozilla.org/credits/\r\nMozilla Reps (REMO) Profile: https://reps.mozilla.org/u/netankit/\r\n\r\n [1]: https://www.youtube.com/watch?v=y6y-10BQg9o\r\n", - "tag_categories": [ - "Data Science", - "Data Science", - "Open Source", - "", - "Data Science" - ], - "emails": "ANKITBAHUGUNA@outlook.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/query-embeddings", - "admin_type": "", - "companies": "Cliqz GmbH" - }, - "614": { - "abstract_short": "GPIO Zero is a new friendly API for physical computing with Raspberry Pi. Like PyGame Zero, it's a minimal boilerplate module that lets you dive straight in and build things with physical components. The Pythonic API was designed for use in education, and was tried and tested with teachers. This talk is the story of how the library came about, how it was developed and I provide a close look at some of its cleverest features.", - "sub_title": "Developing a new friendly Python API for physical computing with Raspberry Pi", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/ben_nuttall", - "id": 614, - "speakers": "Ben Nuttall", - "title": "Raspberry Pi GPIO Zero", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Raspberry PI", - "Open-Source", - "Internet of Things (IoT)", - "Community" - ], - "abstract_long": [ - "I work at the Raspberry Pi Foundation and regularly give workshops on physical computing with Python to kids and teachers and we always found the existing GPIO library difficult to teach with due to its broad scope and verbose nature. Although technically possible to do all sorts of projects, it had a difficult learning curve and even the most basic of examples required explanation of code and electronics concepts.\r\n\r\nGPIO Zero is a new friendly API for physical computing with Raspberry Pi. Like PyGame Zero, it's a minimal boilerplate module that lets you dive straight in and build things with physical components. Simple interfaces are provided for everyday components with obvious features provided with guessable method names. The Pythonic API was designed for use in education, and was tried and tested with teachers. This talk is the story of how the library came about, how it was developed and I provide a close look at some of its cleverest features. The initial batch of work on the library was done by two people in different cities, with all features and changes discussed in length in a series of about 100 GitHub issues over 2 months, and additional features and expansions have been implemented since launch.\r\n\r\nGPIO Zero is now the Foundation's recommended method of interfacing with physical components, and comes pre-installed in the Raspbian Jessie image.\r\n\r\nDocumentation is provided at http://gpiozero.readthedocs.org/" - ], - "abstract_extra": "I wrote a blog post on this topic: http://bennuttall.com/gpio-zero-developing-a-new-friendly-python-api-for-physical-computing/\r\n\r\nI have given a number of talks on this subject to a range of audiences. At EuroPython, this will be the developer focused version of the talk, based on: https://speakerdeck.com/bennuttall/gpio-zero-developing-a-friendly-python-api-for-physical-computing-campug\r\n\r\nI spoke at EuroPython 2014 and 2015, PyConUK 2014 and 2015, PyCon Ireland 2014, and gave keynotes at PySS 2014 and EuroSciPy 2014.\r\n\r\nMy talks are documented at http://bennuttall.com/talks/\r\n\r\nNote: although this talk is related to Education, it's more focused at developers.", - "tag_categories": [ - "Educational", - "Hardware", - "Open Source", - "Hardware", - "Community" - ], - "emails": "ben@raspberrypi.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/raspberry-pi-gpio-zero", - "admin_type": "", - "companies": "Raspberry Pi Foundation" - }, - "640": { - "abstract_short": "As Armin Ronacher pointed out in a recent blog post, there is more to Python's regular expression module than meets the eye. His post made me wonder what other \u201chidden gems\u201d are stashed away in Python\u2019s `re`. In the talk I share what I\u2019ve learned about the inner workings of this extremely popular and heavily used module.", - "sub_title": "A look at the inner workings of the `re` module.", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 640, - "speakers": "Ilia Kurenkov", - "title": "re-Discovering Python's Regular Expressions", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Python general", - "CPython" - ], - "abstract_long": [ - "Anyone who has used Python to search text for substring patterns has at least heard of the regular expression module. Many of us use it extensively for parsers and lexers, extracting information .\r\nAnd yet we know surprisingly little about its inner workings, as Armin Ronacher demonstrated in his recent blog post, \u201cPython's Hidden Regular Expression Gems\u201d. Inspired by this, I want to dive deeper into Python\u2019s `re` module and share what I find with folks at EuroPython. My goal is that at the end of the day most of us walk away from this talk with a better understanding of this extremely useful module.\r\n\r\nHere are a few examples of the kinds of things I would like to cover:\r\n\r\n - A clear presentation of `re`\u2019s overall structure.\r\n - What actually happens behind the scenes when you \u201ccompile\u201d a regular expression with `re.compile`?\r\n - What are the speed implications of using a callable as the replacement argument to `re.sub`?\r\n - re.MatchObject interface: `group` vs. `groups` vs `groupdict`\r\n\r\nTo keep the talk entertaining as well as educational I plan to pepper it with whatever interesting and/or funny trivia I find about the module\u2019s history and structure.\r\n\r\nPrerequisites:\r\nIf you've ever used the `re` module, you should be fine :)\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Python" - ], - "emails": "ilia.kurenkov@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/rediscovering-pythons-regular-expressions", - "admin_type": "", - "companies": "eGym" - }, - "677": { - "abstract_short": "Virtualenv is a great tool for the development environment but it's definitely not suitable for every use case. Also, Docker is great for running the application in production, but not everyone that use it in production tried to use it in the development environment. Why not use the same tool from the beginning of the project and until it hits the production in a uniform stack of tooling? This talk will show use cases of using Docker in the process of development as well.", - "sub_title": "Building real, immutable, and portable virtual environments using Docker", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@mishunika", - "id": 677, - "speakers": "Mihai Iachimovschi", - "title": "Real virtual environments without virtualenv", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web General", - "Python general", - "Open-Source", - "Docker", - "Deployment/Continuous Integration and Delivery" - ], - "abstract_long": [ - "The process of developing using Python is very straightforward and easy. Still, each and every developer has his own style of developing and building his entire dev environment. Most of us use virtualenvs which are reliable and comfortable to use. But there are some issues. For instance, the repeatability and immutability of the built environment are not guaranteed. \r\n\r\nVirtualenv does a lot of work that targets the direction of somehow isolated and independent environments. They are *almost* *fully* repeatable. In any team, we can hear the notorious expression \"It works for me!\".\r\n\r\nFor some time now, I am using Docker instead of virtualenv for building custom and really-virtual environments that are entirely isolated. The containers are immutable and consistent, so this workflow guarantees repeatability. Using such technique, not only enables the user to have unique and immutable environments, it also allows de developer to create full app architecture that can then be tested and deployed as is. So the production version will be in identical conditions as the one from the development environment. These features are not provided by virtualenv at all.\r\n\r\nThe goal of this exercise is to try to use totally different tooling for building the application from its first line of code until the production. " - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Python", - "Open Source", - "DevOps", - "DevOps" - ], - "emails": "mihai.iachimovschi@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/real-virtual-environments-without-virtualenv", - "admin_type": "", - "companies": "" - }, - "621": { - "abstract_short": "It is important to understand from the beginning how model API should look like.\r\nDo not repeat your friends\u2019 mistakes and make developers upset!\r\nThere are some simple rules that can make your API cooler - clean, safe and efficient.\r\n\r\nBased on both bad and good examples of REST APIs (I had to deal with) we will learn about best practices.", - "sub_title": "", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 621, - "speakers": "Malwina Nowakowska", - "title": "RESTful API - Best Practices.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Best Practice", - "RESTful", - "APIs" - ], - "abstract_long": [ - "Nowadays building and integrating with Representational State Transfer web services is a very common thing. It seems that creating RESTful API is trivial - nothing could be more wrong.\r\nIn my previous projects I had to integrate with lots of APIs. Unfortunately only some of them were easy to work with. Most of the APIs did not follow the main rules of model API.\r\n\r\nIt is really important to understand how model REST API should look like.\r\nTo make developers happy we will learn best practices of creating REST API from the beginning.\r\n\r\nWe will start with quick introduction what REST is, why principle of REST is so amazing, talk about identifires and explain some key terms.\r\nWe will discuss about architectall constraints and properties.\r\n\r\nMistakes and best practices are based on my experience of developing and maintaining the projects. After this talk you will be able to create model RESTful API developers will be happy to work with.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Best Practice and Use Cases", - "Web", - "Web" - ], - "emails": "malwina.nowakowskaa@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/restful-api-best-practises", - "admin_type": "", - "companies": "STX Next" - }, - "543": { - "abstract_short": "Microservices offer an efficient way to only scale those parts of your application which are performance bottlenecks.\r\n\r\nWe will demo and explain open source tech which allows the easy scaling out across distributed devices. The audience will be able to donate processor cycles from their devices to our demo application (and win a hardware prize).\r\n\r\nThe demo uses [Crossbar.io][1], an open souce application router (written in Python), and all demo code is open source.\r\n\r\n [1]: http://crossbar.io", - "sub_title": "Easy distributed systems from mobiles to servers", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 543, - "speakers": "Tobias Oberstein", - "title": "Scaling Microservices with Crossbar.io", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Scaling", - "Architecture", - "Distributed Systems", - "Internet of Things (IoT)", - "Microservices" - ], - "abstract_long": [ - "Microservices offer an efficient way to only scale parts of your applications which are hotspots. Instead of running multiple instances of a monolithic application, with all the complexity and operational run-time overhead that entails, you can scale only the functionality which is a bottleneck. Today that increasingly means scaling out, not up.\r\n\r\nWe will go over open source technologies which allow the easy scaling out across distributed devices.\r\n\r\nA live demo will allow the audience to participate with its devices (including mobile phones) in an application. (There will be prizes for the donors.)\r\n\r\nThe demo uses [Crossbar.io,][1] an open source router for the open [Web Application Messaging Protocol (WAMP) ][2] written in Python. WAMP supports routed Remote Procedure Calls, and Crossbar.io uses these to implement various load-balancing strategies across endpoints which register a particular procedure.\r\n\r\nWAMP has a first-class library for Python ([Autobahn|Python][3]), but is cross-language, with support for a total of 11 languages. This allows you to implement polyglot and heterogenos microservices applications, from Python to Node.js to C# right into the browser. Microservices can run anywhere, since the outgoing connections to the router which WAMP uses avoid NAT problems.\r\n\r\nAll software used is open source, and all demo code is provided on GitHub under the MIT license.\r\n\r\n [1]: http://crossbar.io\r\n [2]: http://wamp-proto.org\r\n [3]: http://autobahn.ws/python", - "", - "", - "" - ], - "abstract_extra": "The talk will give a very brief overview of the advantages of microservices as a modern architectural approach, and then focus on the specific problem of scaling individual microservices. There will be a quick look at some established communication mechanisms and their disadvantages in this context, and an overview of the router Remote Procedure Calls that WAMP provides, their advantages and how Crossbar.io uses these to achieve simple scaling.\r\n\r\nThe demo will allow participants to connect with their own devices (laptops, tablets, mobile phones, remote servers) and donate processor cylces. The simplest way to do so is to call up a Web page in a browser which will connect to the application and provide a JavaScript implementation of the microservice to scale. (This also provides realtime feedback about audience participation.) We will also provide a Python client, and potentially clients in other languages for participants to run on their laptops.\r\n\r\nParticipation will be possible via conference wi-fi, a local dedicated wi-fi network or a mobile network - so problems with the conference wi-fi network (always a possibility) will not impact the demo.", - "tag_categories": [ - "DevOps", - "Programming", - "DevOps", - "Hardware", - "Programming" - ], - "emails": "tobias.oberstein@tavendo.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/scaling-microservices-with-crossbario", - "admin_type": "", - "companies": "Tavendo GmbH" - }, - "405": { - "abstract_short": "The server is developed in Python 3.4, using MySQL5.6 \r\nThe mobile device application is developed using Kivy.\r\nThe application in the IoT device is developed in C. \r\nThe IoT device is a hardware device using ATSAMD21 from Atmel, and wifi is made using ESP8266. The security used is sha256, standard in Python. And the IoT device using the crypto device ATECC508A, that generate also sha256.\r\n\r\n\r\n", - "sub_title": "Server for Communication of IoT devices and Mobile Devices using Wifi Network", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 405, - "speakers": "Joaquin Berenguer", - "title": "Server for IoT devices and Mobile devices using Wifi Network,", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Algorithms", - "Beginners", - "Agile", - "APIs", - "Analytics" - ], - "abstract_long": [ - "The server is developed in Python 3.4, the information is stored in a MySQL 5.6 database. \r\nAll IoT devices, Mobile Devices and Windows or Linux Desktop are registered in the database.\r\nAll type of messages that are understood by every type of device, is also registered.\r\nA map between which device could access which device is also stored in the database.\r\nWith this info, any mobile registered could send a message to a device. The message arrives to the server that resend the message to the IoT device, receive the answer and resend to the Mobile device. \r\nThe Mobile device and the IoT device, could be anywhere, as the server is public, have the registration of every device connected.\r\nThe mobile device application is developed using Kivy.\r\nThe application in the IoT device is developed in C. \r\nThe IoT device is a hardware device using ATSAMD21 from Atmel, and wifi is made using ESP8266. The security used is sha256, standard in Python. And the IoT device using the crypto device ATECC508A, that generate also sha256.\r\nThe server start a thread for every device connected, the communication between thread is made using queues. \r\nDuring the presentation, the server is going to be presented, and IoT device is shown, no demo is going to be made.\r\nA library to manage the database, is used for easy access to the database, and have database independence, also will be shown.\r\nPrerequites: Python 3.4, sha256, threading, queue, mysql.connector, relational database.\r\n", - "", - "", - "" - ], - "abstract_extra": "Owner of the company Berentec, from 2014\r\nExperience during many year in Database Environment, working at Sybase during 19 years.\r\n", - "tag_categories": [ - "Data Science", - "Educational", - "Development Methods", - "Web", - "Data Science" - ], - "emails": "chimo.berenguer@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/server-for-iot-devices-and-mobile-devices-using-wifi-network", - "admin_type": "", - "companies": "Berentec" - }, - "454": { - "abstract_short": "The Processing project demonstrated that computer art can attract a wider audience to programming. Python has a robust catalog of libraries, including two interfaces to OpenGL. However, none of these libraries replicate Processing\u2019s simplicity when drawing to the screen. I will present my solution to this problem: a re-implementation of VPython\u2019s visual module purely in python called PygletHelper.", - "sub_title": "", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@femion", - "id": 454, - "speakers": "Catherine Holloway", - "title": "Simplifying Computer Art in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Visualization", - "Teaching", - "Game-Development" - ], - "abstract_long": [ - "Processing is a programming language originally developed by the MIT media lab with the goal of allowing artists, educators, and many others develop striking computer generated or assisted projects without requiring deep knowledge of software engineering or computer graphics. Like Processing, Python has become a favourite language of users from diverse backgrounds, such as web development, education, and science. Unlike Processing, python lacks a simple and easy to use library for drawing shapes. Python\u2019s existing libraries for scientific computing and data analysis could be made even more awesome when combined with a simple drawing library.\r\n\r\nVPython contains a module called visual that established a simple API and convention for drawing shapes, however it was written in C++, prior to the development of pyglet, and thus is not entirely cross-platform. In this talk, I will demonstrate my solution to this problem: a re-implementation of visual purely in Python called PygletHelper. Pyglet, an existing python library, provides a python interface to OpenGL. PygletHelper is built on pyglet but obscures all of the OpenGL calls, such that the user can draw simple geometric shapes to the screen and animate them without needing to know about computer graphics terminology, memory usage, or C data types.\r\n\r\nI will also show some need visualizations of science and music in my talk, as well as the graphical glitches encountered implementing the library. " - ], - "abstract_extra": "PygletHelper is open source, and available at: https://github.com/CatherineH/pyglet_helper\r\nI have given many talks in the past about robotics or quantum computing, but this would be my second talk on python if accepted. In 2015 I gave a talk on the Robotics Operating System and Python at PyCon Canada:\r\n\r\nhttps://www.youtube.com/watch?v=oX294t9UYSw", - "tag_categories": [ - "Data Science", - "Everything Else", - "Everything Else" - ], - "emails": "milankie@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/simplifying-computer-art-in-python", - "admin_type": "", - "companies": "Qubitekk" - }, - "577": { - "abstract_short": "This talk is based on a recent consulting project the speaker ran to support the valuation of a Python startup company in the due diligence phase.\r\n\r\nBy following some of the advice from this talk, you should be possible to improve the valuation of your Python startup or consulting business in preparation for investment rounds or an acquisition.", - "sub_title": "Designing valuable software for fun and profit", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@malemburg", - "id": 577, - "speakers": "Marc-Andre Lemburg", - "title": "So you think your Python startup is worth $10 million...", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Databases", - "Use Case", - "Best Practice", - "Business Track", - "Software Design" - ], - "abstract_long": [ - "This talk is based on the speaker's experience running a Python focused software company for more than 15 years and a recent consulting project to support the valuation of a Python startup company in the due diligence phase.\r\n\r\nFor the valuation we had to come up with metrics, a catalog of criteria analyzing risks, potential and benefits of the startup's solution, as well as an estimate for how much effort it would take to reimplement the solution from scratch.\r\n\r\nIn the talk, I am going to show the metrics we used, how they can be applied to Python code, the importance of addressing risk factors, well designed code and data(base) structures.\r\n\r\nBy following some of the advice from this talk, you should be able to improve the valuation of your startup or consulting business in preparation for investment rounds or an acquisition.\r\n", - "", - "", - "" - ], - "abstract_extra": "Marc-Andre Lemburg is a regular speaker at Python conferences and has been giving Python talks ever since the first European Python Meeting in 2001.\r\n\r\nThe following page includes some of the talk he has given over the years:\r\n\r\nhttp://www.egenix.com/library/presentations/\r\n\r\nMarc-Andre also runs a local user group in D\u00fcsseldorf, together with Charlie Clark, where he regularly gives shorter or longer talks on various topics in German:\r\n\r\nhttp://www.egenix.com/library/pyddf/videos.html\r\n", - "tag_categories": [ - "Databases", - "Best Practice and Use Cases", - "Best Practice and Use Cases", - ">>> Suggested Track", - "Programming" - ], - "emails": "mal@europython.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/so-you-think-your-startup-is-worth-10-million", - "admin_type": "", - "companies": "eGenix.com Software GmbH" - }, - "501": { - "abstract_short": "Having to deal with a monolith, an application which became far to big over the time, can be quite bothersome. On the other hand if you split it up and have to deal with lots of smaller components, you might end up in dependency hell. But not only the splitting of the monolith and the management of the dependencies afterwards can be a problem, but also the packaging of you python components itself. \r\n ", - "sub_title": "", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@tmuxbee", - "id": 501, - "speakers": "Patrick M\u00fchlbauer", - "title": "Split Up! Fighting the Monolith", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "System Architecture", - "Best Practice", - "Testing", - "Packaging" - ], - "abstract_long": [ - "Do you know this situation, where you and your team are facing this big monolith? An application which has grown far too\r\nbig over the years. Every time when you make a change, you have to fear the code might break at a totally different place, because lots of things\r\nare closely intertwined. But what to do if you are at such a point? Maybe you start thinking about microservices but then questions like\r\n\"Are they really the right thing for us?\" and \"How do we get there?\" arise.\r\n\r\nIn my talk I will show you how we are dealing with our monolith. A collection of multiple python packages without clear boundaries, forming the\r\nactual application - all living in a single monorepo.\r\n\r\nI will talk about how we split up the whole thing, making it more flexible for us and also easier to use individual components by other teams.\r\nAll this, of course, comes with a price: You have to think more about the dependencies between you components. You have to think about how\r\nyou can efficiently test everything, making sure your final application is still working correctly.\r\nDon't loosing yourself in dependency hell and packaging all components correctly becomes quite a challenge.\r\n\r\nThis talk will:\r\n\r\n - show you bad patterns to avoid, so that you don't end up in the above situation in the first place\r\n - give you ideas what to consider when tackling your monolith\r\n - explain how to package your python components and how to mange your dependencies\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Best Practice and Use Cases", - "Testing", - "Python" - ], - "emails": "tmuxbiene@googlemail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/split-up-fighting-the-monolith", - "admin_type": "", - "companies": "Blue Yonder " - }, - "748": { - "abstract_short": "a", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 748, - "speakers": "Solomon Bisker", - "title": "Sponsored talk: Hired", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "python" - ], - "abstract_long": [ - "a" - ], - "abstract_extra": "", - "tag_categories": [ - "" - ], - "emails": "solomon@hired.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/sponsored-talk-hired", - "admin_type": "", - "companies": "" - }, - "524": { - "abstract_short": "In times of NoSQL databases and Map Reduce Algorithms it's surprising how far\r\nyou can scale the relational data model. At [Blue Yonder](http://blue-yonder.com)\r\nwe use SQLAlchemy in all stages of our data science workflows and handle tenth\r\nof billions of records to feed our predictive algorithms. This talk will dive\r\ninto SQLAlchemy beyond the Object Relational Mapping (ORM) parts and conentrate\r\non the SQLAlchemy Core API, the Expression Language and Database Migrations\r\nwith Alembic.", - "sub_title": "", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@peterhoffmann", - "id": 524, - "speakers": "Peter Hoffmann", - "title": "SQLAlchemy as the backbone of a Data Science company", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Big Data", - "SQL Alchemy", - "Data Science", - "Databases" - ], - "abstract_long": [ - "In times of NoSQL databases and Map Reduce Algorithms it's surprising how far\r\nyou can scale the relational data model. At [Blue Yonder](http://blue-yonder.com)\r\nwe use SQLAlchemy in all stages of our data science workflows and handle tenth\r\nof billions of records to feed our predictive algorithms. This talk will dive\r\ninto SQLAlchemy beyond the Object Relational Mapping (ORM) parts and conentrate\r\non the SQLAlchemy Core API and the Expression Language:\r\n\r\n- **Database Abstraction**: Statements are generated properly for different\r\n database vendor and type without you having to think about it.\r\n\r\n- **Security**: Database input is escaped and sanitized prior to beeing commited \r\n to the database. This prevents against common SQL injection attacks.\r\n\r\n- **Composability and Reuse**: Common building blocks of queries are expressed\r\n as SQLAlchemy selectables and can be reuesd in other queries.\r\n\r\n- **Testability**: SQLAlchemy allows you to perform functional tests against a database\r\n or mock out queries and connections.\r\n\r\n- **Reflection**: Reflection is a technique that allows you to generate a\r\n SQLAlchemy repesentation from an existing database. You can reflect tables,\r\n views, indexes, and foreign keys.\r\n\r\nAs a result of the usage of SQLAlchemy in Blue Yonder, we have implemented and\r\nopen sourced a SQLAlchemy dialect for the in memory, column-oriented database\r\nsystem [EXASolution](https://github.com/blue-yonder/sqlalchemy_exasol)" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Databases", - "Data Science", - "Databases" - ], - "emails": "peter.hoffmann@blue-yonder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/sqlalchemy-as-the-backbone-of-a-data-science-company", - "admin_type": "", - "companies": "Blue Yonder" - }, - "477": { - "abstract_short": "System tests are an invaluable tool for verifying correctness of large scale online services. This talk will discuss best practices and tooling (pytest and docker-py) for writing maintainable system tests.\r\n\r\nDemonware has used System tests to verify online services for some of the biggest AAA video game launches as well as internal operational tools.\r\n\r\nMany folks who write software are familiar with unit testing, but far fewer with system testing.", - "sub_title": "", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@bobcatwilson, @mtomwing", - "id": 477, - "speakers": "Christie Wilson, Michael Tom-Wing", - "title": "System Testing with pytest and docker-py", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Best Practice", - "Distributed Systems", - "Test Libraries (pyTest/node/...)", - "Docker", - "Testing" - ], - "abstract_long": [ - "System testing a microservice architecture is challenging. As we move away from monolithic architectures, system testing becomes more important but also more complicated.\r\n\r\nIn the video game industry, if a game doesn\u2019t work properly immediately after launch, it will heavily impact game success. We have found system testing to be an important tool for pre launch testing of game services and operational tools, to guarantee quality of these services at launch.\r\n\r\nWe want to share with you best practices for system testing: when to write system tests, what to test and what not to, and common pitfalls to avoid. Using python\u2019s pytest tool and docker-py for setting up services and their dependencies has made it easier than ever to write complex but maintainable system tests and we\u2019ll share with you how we\u2019ve made use of them.\r\n\r\nDevelopers (senior and junior) and ops folks can walk away from this talk with practical tips they can use to apply system testing to their software.", - "", - "", - "" - ], - "abstract_extra": "Please note that I would be presenting with my colleague Michael Tom-Wing\r\n\r\nI founded and run PyLadies Vancouver, where I regularly speak at meetups.\r\n\r\nMichael Tom-Wing and I have together presented tutorials on unit testing at pydx (http://pydx.org/) and at several PyLadies Vancouver meetups (www.meetup.com/PyLadies-Vancouver/). We will be delivering this tutorial at PyCon this year as well. The content of the tutorial is available on github: https://github.com/keeppythonweird/catinabox#catinabox---intro-to-testing-and-test-automation-in-python", - "tag_categories": [ - "Best Practice and Use Cases", - "DevOps", - "Testing", - "DevOps", - "Testing" - ], - "emails": "bobcatfish@gmail.com, mtomwing@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/system-testing-with-pytest-and-docker-py", - "admin_type": "", - "companies": "Demonware" - }, - "648": { - "abstract_short": "A framework-agnostic approach to creating Python microservices with a tests-first approach.\r\nI'll show how to utilize Docker and Swagger to create service and contract tests that run your service as an independent process, as if it was running in production, giving you and your team a higher degree of confidence when introducing changes.\r\n\r\nA little bit of a broader microservice, TDD and work management context will also be given.", - "sub_title": "Docker, Swagger and Pytest to the rescue", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 648, - "speakers": "Micha\u0142 Bultrowicz", - "title": "TDD of Python microservices", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Test Driven Development (TDD)", - "Docker", - "RESTful", - "Web Track" - ], - "abstract_long": [ - "These will be my ideas on how to help a microservice-based (HTTP) project by integrating testing into the development process (TDD).\r\nI'll approach the testing pyramid presented in Martin Fowler's \"Microservice Testing\" as well as the test variants in \"Building Microservices\" (O'Reilly) and I'll show a way of how they can be translated to real-life Python.\r\n\r\nThe main focus will be on \"service tests\" (aka. out-of-process component tests) and contract tests. They both can be run relatively fast on a development machine and can give fast feedback to the developer, preventing many kinds of problems.\r\n\r\nService tests run the whole application process without any internal modifications, but have to present the service with a fake \"outside world\". I'll show how to fake external HTTP services with Mountebank (similar to WireMock). Instead of faking other systems (like databases) we can quickly spin up the real deal as a Docker container from within the tests.\r\n\r\nContract tests check if the contract (interface) of your service with the outside world is kept, so no external services should be broken by the changes you are introducing. It can also work the other way around, proving that your collaborators are keeping their part of the deal. In both cases, Swagger (a RESTful API description scheme) and a few clever tricks can be used for significant advantage." - ], - "abstract_extra": "I've worked as developer and then a technical team leader on one of the teams working on Intel's Trusted Analytics Platform - a solution based on microservices and PaaS.\r\n\r\nI've presented once before, during EuroPython 2015 . My talk title was \"Python microservices on PaaS done right\". This is a continuation of this talk, focusing more on testing and the experiences I had for the past year.", - "tag_categories": [ - "Testing", - "DevOps", - "Web", - ">>> Suggested Track" - ], - "emails": "michalbultrowicz@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/tdd-of-python-microservices", - "admin_type": "", - "companies": "N/A" - }, - "519": { - "abstract_short": "We will present the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), and how to execute it with [pytest-nodev][1] a test-driven search engine for Python code.\r\n\r\n [1]: http://pytest-nodev.readthedocs.io/en/stable/quickstart.html\r\n\r\nPytest-nodev and the other nodev tools that helps implement TDR for Python are rather new, in spite of that we will present several successful applications of the technique to more and more complex examples.", - "sub_title": "Its like test-driven development... without the development bit.", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@alexamici", - "id": 519, - "speakers": "Alessandro Amici", - "title": "Test-driven code search and reuse coming to Python with pytest-nodev", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Test Driven Development (TDD)", - "Educational Track", - "Test Libraries (pyTest/node/...)", - "Testing", - "Best Practice" - ], - "abstract_long": [ - "We will present the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), and how to execute it with [pytest-nodev](http://pytest-nodev.readthedocs.io/en/stable/quickstart.html) an Open Source test-driven search engine for Python code.\r\n\r\nWhen developing new functionalities developers spend significant efforts searching for code to reuse, mainly via keyword-based searches, e.g. on StackOverflow and Google. Keyword-based search is effective in finding code that is explicitly designed and documented to be reused, e.g. libraries and frameworks, but typically fails to identify reusable functions and classes in the large corpus of auxiliary code of software projects.\r\n\r\nTDR aims to address the limits of keyword-based search with test-driven code search that focuses instead on code behaviour and semantics. Developing a new feature in TDR starts with the developer writing the tests that will validate candidate implementations of the desired functionality. Before writing any functional code the tests are run against all functions and classes of available projects. Any code passing the tests is presented to the developer as a candidate implementation for the target feature.\r\n\r\n[Pytest-nodev](https://github.com/nodev-io/pytest-nodev) and other nodev tools that help implement TDR for Python are newer than the JAVA counterparts, in spite of that we will present several applications of the technique to more and more complex examples." - ], - "abstract_extra": "Two open source projects will be demonstrated:\r\n\r\n- https://github.com/nodev-io/pytest-nodev\r\n- https://github.com/nodev-io/nodev.specs\r\n\r\nWe would love to announce the beta of an on-line test-driven code search service at EuroPython. No promises, though.", - "tag_categories": [ - "Testing", - ">>> Suggested Track", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "a.amici@bopen.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/test-driven-source-code-search-for-python-with-pytest-nodev", - "admin_type": "", - "companies": "B-Open Solutions srl" - }, - "486": { - "abstract_short": "In this session you will learn your way around Python 3\u2019s unittest.mock package through examples. You\u2019ll learn about the Mock class, sentinels and patching. You will see the benefits that mocks can bring and learn to avoid the pitfalls. Along the way I\u2019ll fill you in on some of the bewildering terminology surrounding mocks such as \u201cSUT\u201d, \u201cStub\u201d, \u201cDouble\u201d, \u201cDummy\u201d , \u201cmockist\u201d and more and I\u2019ll give a brief plug for my own mockextras package that can enhance your mock experience.", - "sub_title": "", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@andrewburrows", - "id": 486, - "speakers": "Andrew Burrows", - "title": "Testing the untestable: a beginner\u2019s guide to mock objects", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Beginners", - "Testing" - ], - "abstract_long": [ - "Mock objects can be a powerful tool to write easy, reliable tests for the most difficult to test code. In this session you will learn your way around Python 3\u2019s unittest.mock package starting at the simplest examples and working through progressively more problematic code. You\u2019ll learn about the Mock class, sentinels and patching and how and when to use each of them. You will see the benefits that mocks can bring and learn to avoid the pitfalls. Along the way I\u2019ll fill you in on some of the bewildering terminology surrounding mocks such as \u201cSUT\u201d, \u201cStub\u201d, \u201cDouble\u201d, \u201cDummy\u201d , \u201cmockist\u201d and more and I\u2019ll give a brief plug for my own mockextras package that can enhance your mock experience." - ], - "abstract_extra": "I have given many presentations within my organisation to audiences of up to 100+ people but have no publicly referenceable examples. \r\n\r\nI am testing mentor for all Man AHL developers, especially new hires. I have given variants of this presentation numerous times within my workplace.\r\n\r\nI am the developer and maintainer of the mockextras library, which I will give a small plug for in the talk.\r\n\r\nhttp://mockextras.readthedocs.org/\r\nhttps://github.com/manahl/mockextras\r\nhttps://pypi.python.org/pypi/mockextras", - "tag_categories": [ - "Educational", - "Testing" - ], - "emails": "aburrows@ahl.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/testing-the-untestable-a-beginners-guide-to-mock-objects", - "admin_type": "", - "companies": "Man AHL" - }, - "745": { - "abstract_short": "CPython's GIL means your Python code can only run on one CPU core at a time. Can we remove it? Yes, we can... in fact we already have! But is it worth the cost?", - "sub_title": "Removing CPython's GIL", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@larryhastings", - "id": 745, - "speakers": "Larry Hastings", - "title": "The Gilectomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Multi-Threading", - "CPython" - ], - "abstract_long": [ - "CPython's \"Global Interpreter Lock\", or \"GIL\", was added in 1992. It was an excellent design decision. But 24 years is a long time--today it prevents Python from capitalizing on multiple CPUs. Many people want us to remove the GIL.\r\n\r\nIt turns out, removing the GIL isn't actually that hard. In fact, I already removed it, in my experimental \"gilectomy\" branch. But the GIL is one reason CPython is so fast! The \"gilectomy\" makes CPython shockingly slow.\r\n\r\nThis talk will discuss the history of the GIL, how the GIL helps make CPython fast, how the \"gilectomy\" removed the GIL, and some ways we might be able to make the \"gilectomy\" version fast enough to be useful." - ], - "abstract_extra": "I gave a version of this talk at PyCon 2016. The room was full five minutes before starting and many, many people were turned away at the door.", - "tag_categories": [ - "Programming", - "Programming", - "Python" - ], - "emails": "larry@hastings.org", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/the-gilectomy", - "admin_type": "", - "companies": "Python CoreDev" - }, - "683": { - "abstract_short": "I would like to indicate main keys to success, factors and features that help a developer to find himself on an independent career path.\r\nHow to create employee-friendly work environment for Python developers?\r\nWhich business model gives a chance to attract and keep more than 100 Python enthusiast?\r\nI will also gladly share some lessons learned working with dozens of clients, dozens of Python frameworks, and lots, lots of great developers.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@mdziergwa", - "id": 683, - "speakers": "Maciej Dziergwa", - "title": "The Journey from Python Developer to Python Company Owner", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Business Track", - "Community" - ], - "abstract_long": [ - "Ten years ago I became a big Python fan, but at the time there were no jobs for Python developers in Poland. So, I decided to start my own Python company. Today, ten years later, this company employs more than 100 Python Developers in four cities.\r\n\r\nThere are a lot of Python enthusiasts in the world, many of them more skilled than I was at that time, but clearly not anyone can become a \u201ePython Business Developer\u201d. In this talk I would like to indicate main keys to success, factors and features that help a developer to find himself on an independent career path.\r\n\r\nMy goal is to answear these questions:\r\n\r\nHow to create employee-friendly work environment for Python developers?\r\n\r\nWhich business model gives a chance to attract and keep more than 100 Python enthusiast?\r\n\r\nI will also gladly share some lessons learned while working with dozens of clients, dozens of Python frameworks, and lots, lots of great developers. " - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Community" - ], - "emails": "mdziergwa@stxnext.pl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-journey-from-python-developer-to-python-company-owner", - "admin_type": "", - "companies": "STX Next" - }, - "398": { - "abstract_short": "In this talk discusses some joyful exercises in simulation. I'll demonstrate it's usefulness but moreover I'll discuss the sheer joy. I'll discuss how to generate song lyrics, I'll discuss how to get better at casino games, how to avoid math, how to play monopoly or even how to invest in lego minifigures. No maths required; just a random number generator. ", - "sub_title": "Make a living selling lego mini-figures on ebay.", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@fishnets88", - "id": 398, - "speakers": "vincent warmerdam", - "title": "The Joy of Simulation: for Fun and Profit", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Beginners", - "Algorithms", - "Data Science", - "Science" - ], - "abstract_long": [ - "In this talk discusses some joyful exercises in simulation. I'll demonstrate it's usefulness but moreover I'll discuss the sheer joy you can experience. \r\n\r\nI'll go over the following points (the short list):\r\n\r\n- I'll show how you can avoid math by simulating; I'll calculate the probability that two people in the live room have the same birthday. \r\n- I'll show how simulation can help you get better at many games. I'll start with simple card games and with the game of roulette. Most prominently I'll discuss how to determine the value of buying an asset in the game of monopoly (See blogpost: http://koaning.io/monopoly-simulations.html). \r\n- I'll demonstrate how you can simulate Red Hot Chilli Pepper lyrics. Or any other band. Or legalese. \r\n- I'll demonstrate the results of a scraping exercise which helped me to determine the value of investing in Lego Minifigures (See blogpost: http://koaning.io/lego-minifigs-stochastics-profit.html). \r\n\r\nDepending on the level of the audience I might also discuss how biased simulation can help you solve optimisation problems or even introduce bayesian statistics via sampling. I'll gladly leave this decision to the EuroPython committee. ", - "", - "", - "" - ], - "abstract_extra": "I am the founding committee member of PyData Amsterdam and I've spoken before at PyData events as well as EuroPython. You can find me on twitter or at my blog over at koaning.io. ", - "tag_categories": [ - "Educational", - "Educational", - "Data Science", - "Data Science", - "Sciences" - ], - "emails": "vincentwarmerdam@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/the-joy-of-simulation-for-fun-and-profit", - "admin_type": "", - "companies": "GoDataDriven" - }, - "599": { - "abstract_short": "This talk will teach you how Twisted or Tornado supplement asyncio, how asyncio can/is integrated with these frameworks, and makes a case for the continued development of new and existing selector-loop based frameworks. It will also paint a picture of the future direction of Twisted, why the original plan of asyncio as a standard API has not come to complete fruition, and what can be done about it. ", - "sub_title": "Why Twisted and Tornado Are Relevant In The Asyncio Age", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@hawkieowl", - "id": 599, - "speakers": "Amber Brown", - "title": "The Report Of Twisted\u2019s Death", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Performance", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "- Introduction (3 min)\r\n - I\u2019m Amber Brown, Twisted Release Manager\r\n - 3 years contributing to the Twisted Project\r\n- What is asynchronous I/O? (5 min)\r\n- How can it be implemented? (5 min)\r\n- The options (5 min)\r\n - Twisted, Tornado, asyncio\r\n- Asynchronous I/O on Python 3, in 2012 (2 min)\r\n - Tornado was only just ported\r\n - twisted, gevent, eventlet, etc were not ported\r\n- asyncio (7 min)\r\n - Designed as both a \u201ccommon API\u201d for async I/O frameworks, much like WSGI was for web servers\r\n - Built using ideas from Twisted\r\n- asyncio exists, so Twisted and Tornado can go away, right? (5 min)\r\n - asyncio is an \u201casync I/O thing\u201d, and twisted/tornado are \u201casync I/O things\u201d, so Twisted and Tornado aren\u2019t required now, right?\r\n- Twisted\u2019s Renaissance (5 min)\r\n - 450,000 LoC, fifteen years of legacy, supports many many major protocols\r\n - Twisted hits 50% on the port to Python 3\r\n - Pressure from asyncio providing renewed competition\r\n - The very existence of asyncio means we no longer need to have the \u201cwhy is asynchronous I/O a good idea\u201d\r\n- But It\u2019s Not Over Yet (5 min)\r\n - Twisted does not implement nor use the asyncio standard APIs, Twisted needs help and developer support to do this\r\n - Support on Windows is still subpar, as the asyncio IOCP proactor does not support UDP\r\n- The Future (8 min)\r\n - A Twisted You Can Use\r\n - WSGI 2\r\n - asyncio standardisation\r\n- Questions (5 min)\r\n", - "", - "", - "" - ], - "abstract_extra": "This is a talk which has been accepted for PyCon US 2016. The full abstract, as submitted to PyCon US, is available at https://dl.dropboxusercontent.com/u/14290114/Twisted%20and%20Tornado%20in%20The%20Age%20of%20Asyncio.pdf .\r\n\r\nI've previously given talks at DjangoCon AU (keynote 2015), PyCon AU (2014, 2015), PyCon CZ (keynote 2015), and Django Under The Hood (2015).", - "tag_categories": [ - "Programming", - "Programming" - ], - "emails": "hawkowl@atleastfornow.net", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/the-report-of-twisteds-death", - "admin_type": "", - "companies": "" - }, - "651": { - "abstract_short": "Mindfulness has proven to be a foundational skill that started as a pure buddhist practice. Nowadays mindfulness serves as the core technique of several western programs ranging from curing stress-induced medical problems to curricula for teaching successful business leadership, such as the Search Inside Yourself program developed at Google. \r\n\r\nThe aim of this seminar is to provide a practical experience of mindfulness with a short introduction to how it can be applied by digital workers.", - "sub_title": "", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@https://twitter.com/ralhei", - "id": 651, - "speakers": "Ralph Heinkel", - "title": "The value of mindfulness and how it has arrived at Google", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [], - "abstract_long": [ - "Mindfulness has proven to be a foundational skill that started as a pure buddhist practice. Nowadays mindfulness serves as the core technique of several western programs ranging from curing stress-induced medical problems to curricula for teaching successful business leadership, such as the Search Inside Yourself (SIY) program developed at Google in 2002. \r\n\r\nMind is the root of all things. Neuroscience shows that attention is a fundamental function of the mind. Being able to direct attention to the present moment - and keep it there while performing daily tasks - is a great tool to navigate through life and its challenges with more engagement, more happiness, and more resilience. Focusing attention in a relaxed way enables us to disconnect from the overall noise found in a high-speed environment and get things done without feeling too overwhelmed by them. But being effective is not only about checking off more tasks - it is about how we are in resonance with our environment, how we interact with others, and how we face the increasing complexity in our professional life. \r\n\r\nThe aim of this seminar is to provide a practical experience of mindfulness with a short introduction to how it can be applied in a technology driven world as experience by digital workers." - ], - "abstract_extra": "", - "tag_categories": [], - "emails": "rh@ralph-heinkel.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-value-of-mindfulness-and-how-it-has-arrived-at-google", - "admin_type": "", - "companies": "Freelance Python Developer" - }, - "576": { - "abstract_short": "In recent years one of the ways people get introduced into Python is through its scientific stack. Although this is not bad, it may lead to learn solely one aspect of the language, while overlooking other idioms and functionality included in Python as well as some basic software development good practices. I will share some useful tricks, tools and techniques and software design and development principles that I find beneficial when working on a data processing / science project.", - "sub_title": "", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@mfcabrera", - "id": 576, - "speakers": "Miguel Cabrera", - "title": "Things I wish I knew before starting using Python for Data Processing", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Python general", - "Best Practice", - "Data Science" - ], - "abstract_long": [ - "In recent years of the ways people get introduced into Python is through its scientific stack. Most people that learned Python this way are not trained software developers and many times it is the first contact with a programming language.\r\nAlthough this is not bad, it may lead to learn solely one aspect of the language while overlooking other idioms, standard and common libraries included in Python as well as some basic software development good practices. This may become a problem when a data science project is moved from an experimentation phase to an integration with technical environment. \r\n\r\nIn this talk I share some useful tricks, tools and techniques and as well as some software design and development principles that I find beneficial when working on a data processing / science project.\r\n\r\nThe talk is divided into two parts, one is Python centered, where I will talk about some powerful Python construct that are useful in data processing tasks. This include some parts collections module, generators and iterators among others. The other I will describe some general software development concepts including SOLID, DRY, and KISS that are important to understand the rationale behind software design decisions. \r\n" - ], - "abstract_extra": "I am been thinking in the idea for this talk for some time already . I gave a lighting talk on this subject during the [PyData Meetup in Berlin in 2015][1].\r\n\r\nAs speaker experience I have spoken in some meetups and talks including Munich Data Geeks, PyData Meetup, PyData Berlin 2015. I also gave a lighting talk at Europython 2015. \r\n\r\nSome of my slides can be found here: https://speakerdeck.com/mfcabrera\r\n\r\n [1]: https://speakerdeck.com/mfcabrera/pydata-berlin-meetup-nov-2015-some-of-the-things-i-wish-i-knew-before-starting-using-python-for-data-science\r\n", - "tag_categories": [ - "Programming", - "Python", - "Best Practice and Use Cases", - "Data Science" - ], - "emails": "mfcabrera@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/things-i-wish-i-knew-before-starting-using-python-for-data-processing", - "admin_type": "", - "companies": "TrustYou" - }, - "617": { - "abstract_short": "What systems and tools are useful for encrypting and securing email today? After discussing attack vectors we'll explore two user-side techniques for establishing end-to-end encryption, GPG and S/MIME. We then look at two projects which aim to provide ready-made email-server provisioning, Mail-in-a-box and LEAP and conclude with spotlights on ongoing EU-research projects aiming to improve email. ", - "sub_title": "", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@, @", - "id": 617, - "speakers": "holger krekel, Kali Kaneko", - "title": "Towards More Secure Emailing", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Infrastructure", - "Best Practice" - ], - "abstract_long": [ - "Email has been declared dead several times but refuses to die. It remains the backbone of the web and remains the largest federated open social network to date. However, most people and organisations rely on a few big email operators which fund their operations through advertisements and user tracking. But is it neccessary to hand off email messaging operations to large operators? Is dealing with unsolicited email (SPAM) still too maintenance intensive to deploy it by yourself? Is handling secret keys to unlock encrypted mails still a nightmare? Are there somewhat secure email hosting solutions?\r\n\r\nIn recent years there have been renewed efforts to renovate the state of world wide email infrastructure with initiatives such as the \"Dark Mail Alliance\", \"FreedomBox\", \"Mailpile\", \"Mail-in-a-box\" and the \"LEAP encryption access project\". Some of them are using Python to provide security to users both from criminal, corporate and state level attacks and could use help from experienced python programmers.\r\n\r\nThe talk concludes with highlighting current ongoing research (Panoramix and NEXTLEAP) funded by the European Union over the next couple years. They try to ease and automate key management and provide \"encryption by default\" among other goals. After this talk you'll end up having a better understanding of how you can use existing technologies for yourself or your organisation and how you can possibly help to improve them and make life for users and activists safer world-wide.", - "", - "", - "" - ], - "abstract_extra": "I intend to give this talk with Kali Kaneko from Guatemala but didn't see a way to add him as co-speaker. ", - "tag_categories": [ - "Security", - "DevOps", - "Best Practice and Use Cases" - ], - "emails": "holger@merlinux.eu, bennomadic@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/towards-more-secure-emailing", - "admin_type": "", - "companies": "LEAP Encrypted Access Project, merlinux GmbH" - }, - "644": { - "abstract_short": "El ecosistema cient\u00edfico de python es extraordinario y saca m\u00fasculo con las \u00faltimas aportaciones de la comunidad cient\u00edfica. Revisaremos nuevas aproximaciones a la representaci\u00f3n de texto. \u00a1Tus cadenas de texto merecen algo m\u00e1s que una m\u00edsera bolsa de palabras! Veremos c\u00f3mo se aplica la representaci\u00f3n distribuida (word embeddings) en un caso pr\u00e1ctico de aprendizaje autom\u00e1tico, y daremos consejos para hacer experimentos replicables y obtener datos significativos.", - "sub_title": "\u201cNuevas\u201d aproximaciones a la representaci\u00f3n de texto para el procesamiento del lenguaje natural", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@maidotgimenez", - "id": 644, - "speakers": "Mai Gim\u00e9nez", - "title": "Un vector por tu palabra", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Educational Track", - "Science Track", - "PyLadies", - "Data Science", - "Deep Learning" - ], - "abstract_long": [ - "\u201cDime con quien andas y te dir\u00e9 c\u00f3mo eres\u201d Este dicho es una de las ideas m\u00e1s revolucionarias en PLN. Podemos saber muchas cosas de una palabra por su contexto. No es lo mismo un adorable gato que un gato mec\u00e1nico, pero por el contexto diferenciamos esta palabra polis\u00e9mica.\r\nHasta ahora la mayor parte de los modelos representan una frase como una bolsa de palabras. Por ejemplo, si queremos representar este conjunto de frases: [\u201cI love Python\u201d, \u201cI love NLP\u201d, \u201cPyladies are cool\u201d] tenemos un vocabulario de siete palabras: [\u201cI\u201d, \u201clove\u201d, \u201cPython\u201d, \u201cNLP\u201d, \u201cPyladies\u201d, \u201care\u201d, \u201ccool\u201d] esta representaci\u00f3n crea un vector de tama\u00f1o del vocabulario para cada frase, y pone a 1 si la palabra aparece y a 0 en el caso contrario : [[1,1,1,0,0,0,0], [1,1,0,1,0,0,],[0,0,0,0,1,1,1]] \u00a1Pero,se pierde el contexto y los vectores pueden ser gigantes y con much\u00edsimos 0s!\r\nRecientemente, hemos encontrado una forma mucho mejor de representar las palabras: La representaci\u00f3n distribuida -word2vec, por ejemplo- \r\nEn esta charla exploramos esta representaci\u00f3n y c\u00f3mo aplicarla en problemas de clasificaci\u00f3n utilizando textos de redes sociales. \r\nNavegaremos por el rico ecosistema cient\u00edfico en python, veremos c\u00f3mo crear gr\u00e1ficas significativas y hablaremos de la importancia de escribir experimentos bien dise\u00f1ados, replicables y con c\u00f3digo elegante y por supuesto de la importancia de difundir el conocimiento. Debemos inspirar a la siguiente generaci\u00f3n de cient\u00edficos y cient\u00edficas \u00a1Seamos extraordinarios!" - ], - "abstract_extra": "He dado charlas en la PyConES 2013 (https://youtu.be/8MRG6SixmeM), PyConES 2014 (https://youtu.be/k5-50FFCifw) y estuve en la sesi\u00f3n de posters de la PyCon 2014(https://us.pycon.org/2014/schedule/presentation/94/). He formado parte del equipo organizador de la PyConEs 2015.\r\nDoy charlas en Python Valencia, Betabeers y en pr\u00e1cticamente en cualquier evento que me dejen predicar sobre lo mol\u00f3n que es python, lo importante que es la diversidad en la comunidad y en definitiva compartir conocimiento. \r\n", - "tag_categories": [ - ">>> Suggested Track", - ">>> Suggested Track", - "Community", - "Data Science", - "Data Science" - ], - "emails": "mai@immutable.es", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/un-vector-por-tu-palabra", - "admin_type": "", - "companies": "" - }, - "703": { - "abstract_short": "I will describe a scientific application of python in the field of Astrophysics and Cosmology. How the publicly available package Monte Python is used to compare data from space satellite missions with theoretical models that attempt to describe the evolution and content of the Universe. The result is surprising, as it points towards a Universe which is mainly dark.", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@vpettorino", - "id": 703, - "speakers": "Valeria Pettorino", - "title": "Unveiling the Universe with python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Science", - "Python general", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Physics" - ], - "abstract_long": [ - "Python is widely used in Cosmology, which is the study of the Universe and all forms of energy in it. A large amount of data has been recently obtained through space satellite missions, such as Planck, financed by ESA/NASA. Planck has observed the radiation emitted about 13 billion years ago (the Cosmic Microwave Background, CMB), which gives us information on the content and space-time geometry of the Universe. Many competitive theoretical models have been proposed that aim at describing the evolution of the species contained in the Universe: therefore, cosmologists need a method to identify which theoretical model better fits the data. In order to compare data with theoretical predictions, cosmologists use Bayesian statistics and Monte Carlo simulations. Among the tools developed for the analysis, the package \u2018Monte Python\u2019 is publicly available and uses python to perform Monte Carlo simulations: this allows to determine the theoretical model that maximizes the likelihood to obtain the observed data. Such model is now the standard cosmological model and reveals a Universe that is very different from what scientists had ever expected. A Universe in which the atoms we are made of, constitute only 5% of the total energy budget. The rest is the so-called \u2018Dark Universe\u2019.\r\n\r\nI will illustrate the story of how cosmologists used python to analyse the data of the CMB and unveil the Dark Universe.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Data Science", - "Sciences" - ], - "emails": "valeria.pettorino@me.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/unveiling-the-universe-with-python", - "admin_type": "", - "companies": "University of Heidelberg" - }, - "434": { - "abstract_short": "Python\u2019s double-underscore ('`__`') methods and attributes go by many names, including \u201cspecial\u201d, \u201cdunder\u201d, and \u201cmagic\u201d. You already use some, like `__init__`, but there are many more! \r\n\r\nIn this talk, we\u2019ll see how dunders can be useful, silly, dangerous, and fun! We\u2019ll trick Python\u2019s arithmetic and comparison operators. We\u2019ll make objects behave like dictionaries and containers. We\u2019ll reduce an object\u2019s memory usage, and speed up membership tests. We\u2019ll even try some naughty function hacks!\r\n", - "sub_title": "The world of special dunder magic", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@AnjanaVakil", - "id": 434, - "speakers": "Anjana Vakil", - "title": "Using and abusing Python\u2019s double-underscore methods and attributes", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Python 3", - "Python general", - "Programming" - ], - "abstract_long": [ - "The curious Python methods and attributes surrounded by double underscores ('`__`') go by many names, including \u201cspecial\u201d, \u201cdunder\u201d, and \u201cmagic\u201d. You probably use some of them, like `__init__`, every day. But that\u2019s just the tip of the iceberg! \r\n\r\nIn this talk, we\u2019ll explore the weird and wonderful world of the double-underscore, and find out how dunders can be useful, silly, dangerous, and just fun! We\u2019ll play pranks on Python\u2019s builtin operators for arithmetic and comparison. We\u2019ll make arbitrary objects behave like dictionaries and containers. We\u2019ll reduce an object\u2019s memory usage, and speed up tests for membership. We\u2019ll even try some naughty function hacks that we should never use in real life!\r\n\r\nYou'll get the most out of this talk if you're already comfortable writing object-oriented Python code. If you already use special dunder magic in your own code, that's excellent! You\u2019ll have a chance to share your tips & tricks with the rest of the audience at the end of the talk.\r\n" - ], - "abstract_extra": "Approximate timeline (30 minute talk):\r\n\r\n - :00 - Hello, who I am, gauge audience experience with dunders (1 min.)\r\n - :01 - Intro, familiar dunders (e.g. `__init__`, `__str__`) (2 min.)\r\n - :03 - Arithmetic and comparisons: (e.g. `__mod__`, `__eq__`) (4 min.)\r\n - :07 - Emulating dictionaries (`__getitem__`, etc.) and collections (`__len__`, `__contains__`) (5 min.)\r\n - :12 - Optimizations: `__contains__`, `__slots__` (4 min.)\r\n - :16 - Function hacks: implementing `__call__` on non-functions, replacing a function\u2019s `__defaults__` and `__code__` (4 min.)\r\n - :20 - Links to further reading; Audience members share their dunder tricks (5 min.)\r\n - :25 - Q&A (5 min.)\r\n\r\nI\u2019m submitting this as a standard 30-minute talk, but I think it\u2019s possible the topic could also work for an interactive session, with the audience participating in coding through the examples and coming up with ideas for fun and interesting hacks using these methods/variables. If you think it would work better in that format, please let me know.\r\n\r\nEven in the 30-minute talk format, I\u2019d really like to have an interactive tip-sharing session at the end of the talk, as mentioned in the long abstract and timeline. I imagine that this will probably merge with the Q&A and become a 10-minute discussion at the end of the talk. I hope this fits in nicely with the enhanced focus on interactivity for this year\u2019s conference, but if it\u2019s not desirable for whatever reason, I can easily replace the tip-sharing session with additional content (e.g. context managers with `__enter__` and `__exit__`) or examples. \r\n\r\nI haven't given a talk at EuroPython or another Python conference before, but I have public speaking experience in the form of several talks at academic conferences, on software and research for computational linguistics. A list of my previous talks is available at [https://vakila.github.io/talks/ ][1](links to slides are provided).\r\n\r\nIf you have any questions, need clarification, or have any other feedback on this proposal, please do get in touch! I\u2019m best reached by email, but I will be on holiday with limited internet access from February 29 to March 7.\r\n\r\n [1]: https://vakila.github.io/talks/ \r\n", - "tag_categories": [ - "Python", - "Python", - "Programming" - ], - "emails": "anjanavakil@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/using-and-abusing-pythons-double-underscore-methods-and-attributes", - "admin_type": "", - "companies": "Mozilla" - }, - "504": { - "abstract_short": "Let's compare the usage of three major **service discovery** technologies to build a dynamic and distributed python application !\r\n\r\nThis talk will be about **consul**, **etcd** and **zookeeper** and their python bindings and will feature code along with a live demo.", - "sub_title": "Concrete python usage of three Service Discovery technologies", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@ultrabug", - "id": 504, - "speakers": "Alexys Jacob", - "title": "Using Service Discovery to build dynamic python applications", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "System Architecture", - "Infrastructure", - "Distributed Systems", - "Scaling", - "DevOps general" - ], - "abstract_long": [ - "This talk will **showcase and compare** three Service Discovery technologies and their usage to **build a dynamic and distributed python application** :\r\n\r\n- consul\r\n- etcd\r\n- zookeeper\r\n\r\nAfter a short introduction to service discovery, we will **iterate and compare** how we can address the concrete and somewhat complex design of our python application using each technology.\r\n\r\nWe'll then be able to discuss their strengths, weaknesses and python bindings and finally showcase the application in a demo.\r\n\r\nAll the source code will of course be made available for the audience to benefit and start from for their own use !" - ], - "abstract_extra": "Yes, I'm crazy enough to sell a live demo. I have faith in you and... it worked well last year !", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/service-discovery-for-dynamic-python-applications", - "admin_type": "", - "companies": "Numberly" - }, - "404": { - "abstract_short": "Compare full text search engines for Python.\r\n", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:45:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@a_soldatenko", - "id": 404, - "speakers": "Andrii Soldatenko", - "title": "What is the best full text search engine for Python?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "PostgreSQL", - "Python 3", - "Elastic Search", - "Documentation" - ], - "abstract_long": [ - "Nowadays we can see lot\u2019s of benchmarks and performance tests of different web frameworks and Python tools. Regarding to search engines, it\u2019s difficult to find useful information especially benchmarks or comparing between different search engines. It\u2019s difficult to manage what search engine you should select for instance, ElasticSearch, Postgres Full Text Search or may be Sphinx or Whoosh. You face a difficult choice, that\u2019s why I am pleased to share with you my acquired experience and benchmarks and focus on how to compare full text search engines for Python.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Databases", - "Python", - "Databases", - "Programming" - ], - "emails": "andrii.soldatenko@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/what-is-the-best-full-text-search-engine-for-python", - "admin_type": "", - "companies": "Toptal" - }, - "557": { - "abstract_short": "Haskell community has made lots of small important improvements to packaging in 2015. What can Python community learn from it and how are we different?", - "sub_title": "A subtle introduction into Haskell packaging and differences to Python ecosystem", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 557, - "speakers": "Domen Ko\u017ear", - "title": "What Python can learn from Haskell packaging", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "DevOps general", - "System Administration" - ], - "abstract_long": [ - "Haskell community has been living in \"Cabal hell\" for decades, but Stack tool and Nix language have been a great game changer for Haskell in 2015.\r\n\r\nPython packaging has evolved since they very beginning of distutils in 1999. We'll take a look what Haskell community has been doing in their playground and what they've done better or worse.\r\n\r\nThe talk is inspired by Peter Simons talk given at Nix conference: [Peter Simons: Inside of the Nixpkgs Haskell Infrastructure][1]\r\n\r\n [1]: https://www.youtube.com/watch?v=TDnZsBxqeBM&list=PL_IxoDz1Nq2Y7mIxMZ28mVtjRbbnlVdmy&index=4\r\n\r\nOutline:\r\n\r\n- Cabal (packaging) interesting features overview \r\n - Cabal file specification overview\r\n - Interesting Cabal features not seen in Python packaging\r\n - Lack of features (introduction into next section)\r\n- Cabal hell \r\n - Quick overview of Haskell community frustration over Cabal tooling\r\n- Stack tool overview \r\n - What problem Stack solves\r\n - How Stack works\r\n - Comparing Stack to pip requirements\r\n- Using Nix language to automate packaging \r\n - how packaging is automated for Haskell\r\n - how it could be done for Python" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps" - ], - "emails": "domen@dev.si", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/what-python-can-learn-from-haskell-packaging", - "admin_type": "", - "companies": "" - }, - "426": { - "abstract_short": "This talk covers the basics of what Object Orientation (OO) is really about. It focusses on the problem OO is aimed at solving and shows where the OO mechanisms of Python fit into this picture. This material can serve as an introduction to OO for beginners, but also as a homing signal for experienced programmers who are doubting whether they are reaping the benefits OO promises.", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@reahl", - "id": 426, - "speakers": "Iwan Vosloo", - "title": "What's the point of Object Orientation?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Software Design", - "Programming", - "Abstractions", - "Best Practice" - ], - "abstract_long": [ - "Object Orientation (OO) is often introduced in terms of how it is implemented by a specific language. However, understanding the theory underlying OO is not quite the same as understanding how OO concepts are supported by a particular language. It is insightful to understand the simple OO fundamentals and how these map to the particular implementation provided by Python.\r\n\r\nIn this talk I will first explain the very basics of OO from a language-neutral point of view with the aim of showing what OO can offer you and to give a glimpse of the simple mathematical theory underlying OO. I hope to give you enough information to help you distinguish between better and worse designs and to detect whether you\u2019re using OO as it was intended. I will also very briefly show how these fundamentals map to Python.\r\n\r\nThis talk is for anyone: whether you\u2019re new at Object Orientation, or a practitioner wondering whether OO is worth the effort you\u2019ve spent trying to use it." - ], - "abstract_extra": "Hi, I have given versions of this talk before at PyCon Namibia (not recorded) and [PyConZA (http://youtu.be/M1XL65qj2dU)][1]. People found it useful there, so I thought it may be worthwhile for people at EuroPython too.\r\n\r\nI am the main author of [Reahl (http://www.reahl.org)][2] and gave presentation on it last year at [EuroPython (https://ep2015.europython.eu/conference/talks/reahl-the-python-only-web-framework)][3]\r\n\r\n [1]: http://youtu.be/M1XL65qj2dU\r\n [2]: http://www.reahl.org\r\n [3]: https://ep2015.europython.eu/conference/talks/reahl-the-python-only-web-framework", - "tag_categories": [ - "Programming", - "Programming", - "Everything Else", - "Best Practice and Use Cases" - ], - "emails": "iwan@reahl.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/whats-the-point-of-object-orientation", - "admin_type": "", - "companies": "Reahl Software Services (Pty) Ltd" - }, - "521": { - "abstract_short": "We all know Python strength does not rely on its performance and speed when running programs. This plus the flexibility of it, can lead to build real slow and bad quality software.\r\n\r\nIn this talk you will discover a set of useful tools for diagnosing where the bottleneck is in your programs along with trips for quickly realizing which is the most needed resource.", - "sub_title": "", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 521, - "speakers": "Manuel Miranda", - "title": "Where is the bottleneck?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Performance", - "Best Practice", - "Code Analysis" - ], - "abstract_long": [ - "Have you ever felt like your software is eating your resources and you have no clue why? Have you reviewed all the lines, debugged and printed everything but you still don't know what's wrong?\r\n\r\nIn this talk I will conduct a fast intro of a basic set of tools you can use to diagnose your software's performance and then we will go through a simple piece of code with different problems and solve them one by one, using those previously presented tools ending up with a decent and acceptable piece of code.\r\n\r\nThis set of tools will include basic ones given by the OS itself like `htop`, `lsof`, `ps` and more advanced ones that let you plot the memory usage for given functions like `memory_profiler`, check CPU usage and the call graph between functions like `cprofile` and `kcachegrind` and others.\r\n\r\nAlso, you will discover some bad practices and \"don't dos\" with python language that can slow you down.\r\n\r\nBy the end of the talk, you should have an idea of which are the most typical causes that can make your program slow and you will have a list of tools to search for and identify the source of the problems.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "manu.mirandad@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/where-is-the-bottleneck", - "admin_type": "", - "companies": "Skyscanner" - }, - "485": { - "abstract_short": "The LLVM Project provides an intermediate representation (LLVM-IR) that can be compiled on many platforms. LLVM-IR is used by analytical frameworks to achieve language and platform independence. What if we could add Python to the long list of languages that can be translated to LLVM-IR? This talk will go through the steps of wrestling Python into LLVM-IR with a simple, static one-pass compiler.", - "sub_title": "", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 485, - "speakers": "Anna Herlihy", - "title": "Wrestling Python into LLVM Intermediate Representation", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Cross-Platform-Development", - "Compiler and Interpreters", - "Open-Source", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "What is LLVM-IR?\r\n\r\nThe LLVM Compiler Infrastructure Project provides a transportable intermediate representation (LLVM-IR) that can be compiled and linked into multiple types of assembly code. What is great about LLVM-IR is that you can take any language and distill it into a form that can be run on many different machines. Once the code gets into IR it doesn\u2019t matter what platform it was originally written on, and it doesn\u2019t matter that Python can be slow. It doesn\u2019t matter if you have weird CPUs - if they\u2019re supported by LLVM it will run.\r\n\r\nWhat is Tupleware?\r\n\r\nTupleWare is an analytical framework built at Brown University that allows users to compile functions into distributed programs that are automatically deployed. TupleWare is unique because it uses LLVM-IR to be language and platform independent.\r\n\r\nWhat is PyLLVM?\r\n\r\nThis is the heart of the talk. PyLLVM is a simple, easy to extend, one-pass static compiler that takes in the subset of Python most likely to be used by Tupleware. PyLLVM is based on an existing project called py2llvm that was abandoned around 2011. \r\n\r\nThis talk will go through some basic compiler design and talk about how some LLVM-IR features make our lives easier, and some much harder. It will cover types, scoping, memory management, and other implementation details. To conclude, it will compare PyLLVM to Numba, a Python-to-LLVM compiler from Continuum Analytics and touch on what the future has in store for PyLLVM.", - "", - "", - "" - ], - "abstract_extra": "Hello!\r\n\r\nI am extremely excited to submit a proposal for EuroPython 2016! I\u2019ve been getting to know the Python community over the past year and a half and have been completely charmed. I\u2019m in my second year out of school and pretty new to speaking but I\u2019ve found the Python community to be supportive and welcoming.\r\n\r\nExperience with this talk\r\n====================\r\nThis talk was accepted at [PyCon 2016](https://us.pycon.org/2016/schedule/presentation/1420) in Portland, Oregon. When I submitted the talk proposal I was living in New York City, however now I live in Stockholm and am looking forward to meeting the European Python community! I don\u2019t think there will be too much audience overlap between the two conferences.\r\n\r\nI gave a version of this talk at PyGotham in August 2015. It was well received on Twitter (and another speaker, Eric Schles, mentioned in his talk that he thought everyone should watch the video!). I\u2019ve taken the feedback I got from this presentation and incorporated it into my new talk.\r\n\r\nThere were some technical difficulties with the A/V so I had to restart a few slides in, but the talk is almost fully recorded: \r\n\r\n[**Link to PyGotham video**](https://www.youtube.com/watch?v=_HdfEqSqI2M).\r\n\r\n[**Link to PyGotham slides**](https://github.com/aherlihy/PythonLLVM/blob/master/PyGotham%20Slides.pdf)\r\n\r\n[**Link to the paper that this talk is based on**](https://github.com/aherlihy/PythonLLVM/blob/master/Thesis.pdf)\r\n\r\nAnd if you\u2019re curious, the source code for the project itself is in the same repo!\r\n\r\nI also gave a much more technical version of this talk to the Brown University Computer Science department in 2014.\r\n\r\nOther Speaking Experience\r\n======================\r\nMost recently, I was invited to be a part of a panel organized by PyLadies and WriteSpeakCode called \u201cTales of Open Source: Five Contributors, Five Stories\u201d along with Ben Darnell, David Turner, Julian Berman, and Maia McCormick in October 2015 in NYC.\r\n[**Link to event page**](http://www.meetup.com/NYC-PyLadies/events/225696976)\r\n\r\nI spoke at OpenDataSciCon in Boston May 2015. I spoke about Monary, a fast, specialized MongoDB driver written in C and Python that copies data directly from MongoDB documents into NumPy arrays. \r\n[**Link to OpenDataSciCon talk**](http://bos2015.opendatascicon.com/schedule/monary-really-fast-analysis-with-mongodb-and-numpy). I tried to access this site just now (3/3) and it seems not to be working, but I'll leave the link there in case it is just temporarily down.\r\n\r\nI gave my first industry conference talk *ever* at PyData in NYC in November of 2014. I gave a talk similar to the OpenDataSciCon talk about Monary.\r\n[**Link to PyData video**](https://www.youtube.com/watch?v=E70AO8r5sMs)\r\n\r\nOpen Source Experience\r\n====================\r\nI am a contributor to PyMongo, Monary, MongoDB, and the MongoDB Ruby, C++, and C drivers. I currently maintain Mongo-Connector.", - "tag_categories": [ - "Python", - "Python", - "Open Source", - "Data Science", - "Data Science" - ], - "emails": "herlihyap@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/wrestling-python-into-llvm-intermediate-representation", - "admin_type": "", - "companies": "MongoDB, Inc" - }, - "483": { - "abstract_short": "Presentation on how you can write faster Python in your daily work. I will briefly explain ways of profiling the code, discuss different code structures and show how they can be improved. You will see what is the fastest way to remove duplicates from a list, what is faster than a _for_ loop or how \u201casking for permission\u201d is slower than \u201cbegging for forgiveness\u201d.\r\n\r\n", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@SebaWitowski", - "id": 483, - "speakers": "Sebastian Witowski", - "title": "Writing faster Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Performance", - "Best Practice" - ], - "abstract_long": [ - "Did you know that Python preallocates integers from -5 to 257 ? Reusing them 1000 times, instead of allocating memory for a bigger integer, can save you a couple of milliseconds of code\u2019s execution time. If you want to learn more about this kind of optimizations then, \u2026 well, probably this presentation is not for you :) Instead of going into such small details, I will talk about more _\"sane\"_ ideas for writing faster code.\r\nAfter a very brief overview of how to optimize Python code (rule 1: don\u2019t do this, rule 2: don\u2019t do this yet, rule 3: ok, but what if I really want to do this ?), I will show simple and fast ways of measuring the execution time and finally, discuss examples of how some code structures could be improved.\r\nYou will see:\r\n\r\n - What is the fastest way of removing duplicates from a list\r\n - How much faster your code is when you reuse the built-in functions instead of trying to reinvent the wheel\r\n - What is faster than the good ol\u2019 _for_ loop\r\n - If the lookup is faster in a list or a set (and when it makes sense to use each)\r\n - How the \u201cIt's better to beg for forgiveness than to ask for permission\u201d rule works in practice\r\n\r\nI will NOT go into details of _\"serious\"_ optimization, like using different Python implementation or rewriting critical code in C, etc.\r\n\r\n" - ], - "abstract_extra": "This is an extended and improved version of a presentation that I gave some time ago, as a part of Lightning Talks at CERN (slides and a link to the video are available here: [https://github.com/switowski/PythonPerformancePresentation][1]).\r\nThis time, less Dragon Ball pictures though :)\r\n\r\n [1]: https://github.com/switowski/PythonPerformancePresentation\r\n", - "tag_categories": [ - "Educational", - "Programming", - "Best Practice and Use Cases" - ], - "emails": "sebastian.witowski@cern.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/writing-faster-python", - "admin_type": "", - "companies": "CERN" - }, - "649": { - "abstract_short": "In this talk, I'll show you how to write redis using asyncio. You'll see how you can create a real world application using asyncio by creating a python port of redis.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@jsaryer", - "id": 649, - "speakers": "James Saryerwinnie", - "title": "Writing Redis in Python with asyncio", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "NoSQL", - "ASYNC / Concurreny", - "Databases" - ], - "abstract_long": [ - "Python has been adding more and more async features to the language. Starting with asyncio in python 3.4 and including the new async/await keywords in python 3.5, it's difficult to understand how all these pieces fit together. More importantly, it's hard to envision how to use these new language features in a real world application. In this talk we're going to move beyond the basic examples of TCP echo servers and example servers that can add number together. Instead I'll show you a realistic asyncio application. This application is a port of redis, a popular data structure server, written in python using asyncio. In addition to basic topics such as handling simple redis commands (GET, SET, APPEND, etc), we'll look at notifications using pub/sub, how to implement the MONITOR command, and persistence. Come learn how to apply the asyncio library to real world applications. " - ], - "abstract_extra": "This is an idea I started about a year ago. I wrote an initial blog post on the basic of writing redis in asyncio here: [Writing Redis in Python][1]\r\n\r\nHowever, this was all before the async/await keywords were added to the language and I found myself updating the code to reflect the latest changes to the python language and asyncio library.\r\n\r\nAt this point I think asyncio is at a nice and stable point where I can show the remaining work I've done for writing redis using asyncio.\r\n\r\nHere's a few places I've spoken in the past:\r\n\r\n* re:Invent 2015: https://www.portal.reinvent.awsevents.com/connect/sessionDetail.ww?SESSION_ID=1423&tclass=popup\r\n* OSCON: http://conferences.oreilly.com/oscon/open-source-2015/public/schedule/detail/42218\r\n* Pycon Canada: http://2013.pycon.ca/en/schedule/presentation/34/\r\n\r\n\r\n [1]: http://jamesls.com/writing-redis-in-python-with-asyncio-part-1.html", - "tag_categories": [ - "Databases", - "Programming", - "Databases" - ], - "emails": "js@jamesls.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/writing-redis-in-python-with-asyncio", - "admin_type": "", - "companies": "AWS" - }, - "656": { - "abstract_short": "There are many unit testing frameworks for C out there, but most of them require you to write your tests in C (or C++). While there might be good reasons to keep your implementation in C, those hardly apply to the tests. So wouldn't it be nice to use all the power of Python and its unit testing capabilities also for your C code? This talk will show you how.", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 656, - "speakers": "Alexander Steffen", - "title": "Writing unit tests for C code in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Programming", - "C-Languages", - "Testing" - ], - "abstract_long": [ - "There are many unit testing frameworks for C out there, but most of them require you to write your tests in C (or C++). While there might be good reasons to keep your implementation in C (for example execution speed or resource consumption), those hardly apply to the tests. So wouldn't it be nice to use all the power of Python and its unit testing capabilities also for your C code?\r\n\r\nThis talk will show you how to combine CFFI and pycparser to easily create Python unit tests for C code, without a single line of C anywhere in the test cases. It will also cover creating mock functions in Python, that can be used by the C code under test to hide external dependencies. Finally, we will look at some of the challenges you might face when trying to mix Python and C and what to do about them." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Other Programming Languages", - "Testing" - ], - "emails": "Alexander.Steffen@infineon.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/writing-unit-tests-for-c-code-in-python", - "admin_type": "", - "companies": "Infineon Technologies AG" - } - } -} diff --git a/ep2017/static/data/clean-talks.json b/ep2017/static/data/clean-talks.json deleted file mode 100644 index 2f2e323..0000000 --- a/ep2017/static/data/clean-talks.json +++ /dev/null @@ -1 +0,0 @@ -{"Poster sessions": {"287": {"id": 287, "abstracts": ["We learn best when we are relaxed, curious and enjoying ourselves. Without knowing a lot of Python, making a fun-to-play game is an achievable goal. Without knowing anything about programming, playing a game can be an accessible way to understand how programs work. The poster will invite people to consider the role of play in adult learning. (Much of it will also be relevent to teachers of younger people.) It will frame success and failure in the context of taking part, winning and losing.\r\n\r\nThe poster will give examples of games that are within the reach of a beginner programmer to design and build. It will explore what makes a well-designed game and how to develop good design elements simply. The goal is for people to identify resources for learning and developing Python skills based around building games. This will include: practice opportunities, Python libraries for game-building, and useful programming concepts.\r\n\r\nIf there are the facilities (small table and access to power) I will demonstrate **one** game during the poster session. The goal will be to illustrate the concepts, of good design and developing learning, introduced in my poster. It will have input and output interaction using a **Raspberry Pi** and basic electronics.\r\n\r\n"], "have_tickets": [false], "title": "Perceptions of Play: learning Python through games", "speakers": "Corinne Welsh", "track_title": "", "timerange": "", "duration": 90, "tags": ["Beginners", "pygame", "pyglet", "education", "games", "projects", "raspberrypi", "teaching", "learning", "fun", "Best Practice"]}, "141": {"id": 141, "abstracts": ["Inside [Aldebaran][1] company the goal of our team is to explore all the domains required for natural and efficient human-robot interaction. We mainly use python stack (scipy, numpy, scikit-learn) in our daily work as it provides a fast and efficient workflow to create and tune our robot behaviors.\r\n\r\nIn this presentation we will describe and demonstrate how we achieve real time sound event recognition on humanoids robots using python and scikit-learn. This work is funded by european project EARS in which our study case is a groom hotel robot that help customers : Two robots are waiting in a hotel lobby. They welcome people and give them relevant information. The robots detect and recognize sounds type such as: Door bell, phone ring, fire alarm, etc. New sounds could be easily learned by the robots.\r\n\r\nThe talk will be done by two human speakers followed by a live demonstration with NAO robots on the stage. Code and data will be published so everyone can experiments with sound recorded on the robots.", "Inside [Aldebaran][1] company the goal of our team is to explore all the domains required for natural and efficient human-robot interaction. We mainly use python stack (scipy, numpy, scikit-learn) in our daily work as it provides a fast and efficient workflow to create and tune our robot behaviors.\r\n\r\nIn this presentation we will describe and demonstrate how we achieve real time sound event recognition on humanoids robots using python and scikit-learn. This work is funded by european project EARS in which our study case is a groom hotel robot that help customers : Two robots are waiting in a hotel lobby. They welcome people and give them relevant information. The robots detect and recognize sounds type such as: Door bell, phone ring, fire alarm, etc. New sounds could be easily learned by the robots.\r\n\r\nThe talk will be done by two human speakers followed by a live demonstration with NAO robots on the stage. Code and data will be published so everyone can experiments with sound recorded on the robots.\r\n\r\nThe second speaker is [Alexandre Mazel][2].\r\n\r\n![][3]\r\n\r\n [1]: https://www.aldebaran.com/en\r\n [2]: https://ep2015.europython.eu/conference/p/alexandre-mazel\r\n [3]: http://studio.aldebaran-robotics.com/amazel/ears__sound_event_recognition/ears__sound_event_recognition.jpg\r\n", ""], "have_tickets": [false], "title": "Sound event recognition using python : application to humanoid robots with limited cpu", "speakers": "Laurent George", "track_title": "", "timerange": "", "duration": 90, "tags": ["robotics", "sound", "machine-learning", "scipy", "numpy", "sklearn"]}, "190": {"id": 190, "abstracts": ["We propose a web BI dashboard system developed for companies operating in the big market composed by several point of sales (POS) and providing services as stocking, distribution logistics, commercial support and promotional actions. \r\n\r\nWe have endowed the infrastructure with a set of statistical machine learning tools typical of high throughput bioinformatics, e.g., clustering procedures for time-series. Machine learning functionalities are actionable from on-line graphs, such as biclustering panels in which subset of retails and sales categories can be interactively selected. Currently 250 million entries are managed from the sales stream within the system. Network analysis (detection of community structure and co-occurrence patterns) combined with geospatial and socio-economic data are being developed as strategic tools.\r\n\r\nThe system is implemented as a web-based Django framework deployed on a AWS machine, using Celery and Redis to distribute tasks. This scalable framework can be accessed through a web interface from the strategic marketing and R&D departments and other directive figures; a similar and leaner interface is available for the individual POS owners. The web interface integrates Javascript libraries to obtain interactive displays connecting machine learning and data exploration (D3js, Highcharts, Sigma.js, Heatmap.js, leaflet, InCHlib). In particular we fork the django-highchart repository to improve functionalities available for the Django framework. Actionable dendrogram structures and sunburst plots allow the handling of big taxonomies typical of the category managment reference structures. Internally, the statistical machine learning methods are deployed as stored procedures for a PostgreSQL/PostGIS database, powered by the PL/R and PL/Python extensions. "], "have_tickets": [true], "title": "Actionable data analytics in retail marketing analysis", "speakers": "Ernesto Arbitrio", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "R", "data-science", "machine-learning", "visualization", "postgresql", "predictions", "django"]}, "125": {"id": 125, "abstracts": ["GR is an universal framework for cross-platform visualization applications. It offers developers a compact, portable and consistent graphics library for their programs. Its procedural graphics backend allows the presentation of continuous data streams. For object oriented environments such as graphical user interfaces a high level API has been implemented.\r\n\r\nIn this poster session, I will present PyGR, a companion module for GR that provides convenience functions for the interactive handling of real-time data, e.g. by zooming or panning. Using the QtGR module it is possible to easily integrate GR into GUI toolkits like Qt. It provides powerful widgets for 2D plotting and methods for embedding graphics into user interfaces based on PySide or PyQt.\r\n\r\nHowever, PyGR is not limited to a specific toolkit. The system\u2019s capabilities will be illustrated using concrete examples, e.g. NICOS, a network-based experiment and instrument control system used for neutron scattering experiments at FRM II in Munich.", "", ""], "have_tickets": [true], "title": "Embedding Visualization Applications with PyGR", "speakers": "Christian Felder", "track_title": "", "timerange": "", "duration": 90, "tags": ["visualization", "python"]}, "83": {"id": 83, "abstracts": ["Mongo-Board is a project focused on offering/building a graphical user interface to MongoDB replica set management and core-processes operations. The functionality is provided in two forms: a **standalone** core library that provides automation over MongoDB administrative operations and the **Mongo-Board UI**. A showcase in the form of an educational tool of its underlying library's possible usage where users can interact with a MongoDB cluster to perform various actions and view a log of all commands executed.\r\n\r\nCore features includes:\r\n\r\n-**MongoDB Instance Management** - connect to multiple remote servers, start/stop database instances, import/export database data\r\n\r\n -**Replica Set Management** - deploy, configure and maintain replica sets\r\n\r\nFirst, we developed a solution completely in PHP and currently we are in the middle of porting the back-end library into Python. I want to present our experience with MongoDB and discuss the architecture, challenges, solutions and open questions. \r\n\r\nThe poster will pose an interest to people passionate about client-server architecture, MongoDB management, administration and monitoring of processes, automation, as well as educational tools.\r\n\r\n [Article detailing some aspects of our initial project][1]\r\n\r\n[Video showcase][2]\r\n\r\n [1]: https://eastvisionsystems.com/mongoboard-replica-set-manager/\r\n [2]: https://eastvisionsystems.com/projects/#player4\r\n"], "have_tickets": [true], "title": "MongoBoard - A MongoDB replica set manager", "speakers": "Alex Porcescu", "track_title": "", "timerange": "", "duration": 90, "tags": ["automation", "mongodb", "learning", "linux", "system-administration"]}, "350": {"id": 350, "abstracts": ["DTOcean is a European collaborative project funded by the European Commission under the 7th Framework Programme for Research and Development. DTOcean that stands for Optimal Design Tools for Ocean Energy Arrays aims at at accelerating the industrial development of ocean energy power generation knowledge, and providing design tools for deploying the first generation of wave and tidal energy converter arrays. It gathers 18 partners from 11 countries (Ireland, Spain, United Kingdom, Germany, Portugal, France, Norway, Denmark, Sweden, Belgium and United States of America) under the coordination of the University of Edinburgh.\r\n\r\nDTOcean is developing an open source numerical tool using Python and many of the libraries developed for use with Python. This talk will discuss both the academic challenges of meeting the goals of the project and the technical challenges of organising and structuring a project consisting of many geographically dispersed partners with distinct tasks, but requiring close integration to solve the global optimisation problem.", "", ""], "have_tickets": [false], "title": "DTOcean: Optimal Design Tools for Ocean Energy Arrays", "speakers": "Mathew Topper", "track_title": "", "timerange": "", "duration": 90, "tags": ["science", "python", "data"]}, "68": {"id": 68, "abstracts": ["Parallel Programming Constructs and Techniques\r\nUsing an Embedded Flexible Language (EFL) for Python\r\n\r\nM. Goldstein , D. Dayan, D. Berlowitz, O. Berlowitz, Max Rabin, M. Nagar, D. Soudry, R. B. Yehezkael\r\n\r\nMulti-core CPUs are abundant and utilizing them effectively requires programmers to parallelize CPU-intensive code. To facilitate this, we have developed EFL, a deterministic parallel programming tool. \r\nThe parallel parts of a program are written as EFL-blocks, which are embedded into a sequential host language program. The sequential parts of the program are written in the host language, outside the EFL blocks. \r\nAn EFL pre-compiler translates EFL blocks into parallel Python code. EFL may be embedded in any host language by writing an appropriate pre-compiler. The EFL pre-compiler is being developed for other host programming languages (C++, Java, C#, Fortran, etc) as well as for other parallel platforms (DTM/MPI4PY, etc. ).\r\nHere we present the parallel programming constructs of EFL, such as parallel assignments, parallel for-loops, etc., and some examples of using EFL to implement Parallel Programming Design Patterns. \r\n", "", ""], "have_tickets": [true], "title": "Parallel Programming Constructs and Techniques Using an Embedded Flexible Language (EFL) for Python", "speakers": "Moshe Goldstein", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "Tooling", "Programming", "concurrency"]}, "337": {"id": 337, "abstracts": ["Rust is a new programming language from Mozilla, it has been announced as the successor of C and C++. \r\n\r\nIn this talk, I will show how to use Rust to extend Python via CFFI or ctypes because you want to optimize your code. But do you know we can integrate Python in Rust.\r\n\r\n* Brief introduction to Rust\r\n* Why Rust is a good candidate for the replacement of C\r\n* How to extend Python with Rust\r\n* How to interact with Python from Rust.", "", ""], "have_tickets": [true], "title": "Python, Rust, who extend who ?", "speakers": "Stephane Wirtel", "track_title": "", "timerange": "", "duration": 90, "tags": ["extending", "rust", "cpython"]}, "280": {"id": 280, "abstracts": ["Via several examples, this poster will present you how to handle quickly AsyncIO and how to build applications with [toolbox libraries][1] around AsyncIO.\r\n\r\nYou can create HTTP servers with AsyncIO, but also you can mixin several others server protocols like WebSockets, SSH, IRC, FastAGI or SIP.\r\n\r\nThis poster will show you that it can be easier to do than you think, AsyncIO ecosystem is beginner friendly.\r\n\r\n [1]: https://github.com/python/asyncio/wiki/ThirdParty"], "have_tickets": [false], "title": "AsyncIO ecosystem", "speakers": "Ludovic Gasc", "track_title": "", "timerange": "", "duration": 90, "tags": ["redis", "HTTP", "servers", "multi-processing", "aiohttp", "aiopg", "websockets", "python3", "asyncio"]}, "145": {"id": 145, "abstracts": ["Over the last fourteen years, Plone has had a remarkable journey: from just a wild idea by a few people to create a CMS which would combine the best technology with a vision of beauty and power to the reality of today: Plone is actively used by companies, governments, universities, nonprofits and other organizations of all sizes around the world.\r\n\r\nYet the vision behind it has stayed consistent. The Plone community chooses technology not for the sake of technology, but because it best solves the problems at hand. We value reliability, security and long-term stability, yet the community is agile enough to adapt where needed.\r\n\r\nThe poster will showcase Plone 5, a major new release which is a solid foundation for the challenges of today, while providing a good upgrade path for earlier versions. It can be used right away for installations of all sizes, but it is also flexible enough to serve as basis for specialized use cases. \r\nBut we do not stop there; the Plone community is already looking further into the future. In spring 2015, we have developed our roadmap forward into a future where themes like mobile-first play a much more important role. Plone will open up it's core strengths like rock-solid workflows, security, standards-compliance and multilingual support to modern ways of presenting these. And with Mosaic and other advances we put power - and fun! -, firmly into the hands of the users that want to create beautiful sites and applications.", "", ""], "have_tickets": [true], "title": "The current state & the future of Plone", "speakers": "Paul Roeland", "track_title": "", "timerange": "", "duration": 90, "tags": ["web", "Plone"]}, "82": {"id": 82, "abstracts": ["Creating a large-scale event processing system can be a daunting task. Especially if you want it \u201cstupid simple\u201d and wrapped around each client\u2019s needs. We built a straightforward solution for this using Python 3 and other open-source tools.\r\n\r\nMain issues to solve for a system that needs to be both performant and scalable:\r\n\r\n - handling a throughput of 1 million events per minute in a 4 cores AWS instance;\r\n\r\n - following the principle of least astonishment;\r\n\r\n - data aggregation and how Python's standard libraries and data structures can help;\r\n\r\n - failsafe and profiling mechanisms that can be applied to any Linux service in production;\r\n\r\n - addressing unexpected behaviors of Python\u2019s Standard Library; like reading from a file while it is written;\r\n\r\n - tackling a sudden spectacular cloud instance failure;\r\n\r\nThe alternative to this system would be to adopt existing technology stacks that might be too general, add more complexity, bloat, costs and which need extensive work to solve your specific problem. Moreover, our approach resulted in over 85% drop on hardware utilisation.\r\n\r\n[Context: Production Software \u2013 II (where good coding reduces the client\u2019s bill)][1]\r\n\r\n [1]: https://eastvisionsystems.com/production-software-part-ii-good-coding-reduces-clients-bill/\r\n", "", ""], "have_tickets": [true], "title": "Use Python to process 12mil events per minute and still keep it simple (Poster Session)", "speakers": "Teodor Dima", "track_title": "", "timerange": "", "duration": 90, "tags": ["bigdata", "performance", "architecture", "Development"]}, "219": {"id": 219, "abstracts": ["Python is a popular and widely used programming language but its use is limited in certain cases. Concurrency is one of those cases when people look for an alternative. It's actually what happened at the start-up I work at before I joined. The co-founders looked for a solution in a functional programming language and chose to use Clojure. Functional programming is now implemented in most programming languages and functional languages are getting more and more popular. For a junior developer learning a functional language as her/his second programming language completely make sense and I was up for the challenge! Clojure is not so different from Python in its readability and might be one of the easiest functional languages to learn for a Pythonista. I would like to share my tips and tools I used for learning and contributing to a code base in Clojure.\r\n\r\nThere are several online resources to understand the paradigm of functional programming. The same can be said regarding Clojure but a good way to learn aside from diving into a codebase is to take part in a community. The Clojurians are much fewer than the Pythonistas but they are equally friendly. They are looking forward to grow their community and their meetups and dojos are well suited to beginners. At some point you have to throw yourself into this sea of parentheses so you'd better be well equipped! In that aim Emacs is by far the best suited text editor. After customising it with the right tools you shall fear no orphan parens!\r\nThis experience will help you progress and focus on writing more concise code with short and clear functions. You will be more comfortable and curious about implementing the functional features of the Python language. Getting always closer to the Zen of Python: \" Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. .... \" "], "have_tickets": [true], "title": "From Python to Clojure", "speakers": "Eleonore Mayola", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "Lisp", "Clojure", "Functional Programming"]}, "263": {"id": 263, "abstracts": ["In this poster session I'm going to introduce Scrapinghub's new open source framework [Frontera][1]. Frontera allows to build real-time distributed web crawlers and website focused ones. \r\n\r\nOffering:\r\n\r\n - customizable URL metadata storage (RDBMS or Key-Value based),\r\n - crawling strategies management,\r\n - transport layer abstraction.\r\n - fetcher abstraction.\r\n\r\nAlong with framework description I'll demonstrate how to build a distributed crawler using [Scrapy][2], Kafka and HBase, and hopefully present some statistics of Spanish internet collected with newly built crawler. Happy EuroPythoning!\r\n\r\n [1]: https://github.com/scrapinghub/frontera\r\n [2]: http://scrapy.org/\r\n", "", ""], "have_tickets": [true], "title": "Frontera: open source large-scale web crawling framework", "speakers": "Alexander Sibiryakov", "track_title": "", "timerange": "", "duration": 90, "tags": ["scrapy", "kafka", "hbase", "webcrawling", "distributed-systems"]}}, "EuroPython sessions": {"367": {"id": 367, "abstracts": ["We need help with organizing and running EuroPython 2016.\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.\r\n", "", ""], "have_tickets": [true, true], "title": "EuroPython 2016: Help us build the next edition!", "speakers": "Fabio Pliger, Marc-Andre Lemburg", "track_title": "Barria1 Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["conference", "EuroPython", "eps"]}, "368": {"id": 368, "abstracts": ["The EuroPython General Assembly.\r\n\r\nThis is where we give our reports and the EPS members can vote in a new EPS board.", "", ""], "have_tickets": [true, true], "title": "EPS General Assembly", "speakers": "Fabio Pliger, Marc-Andre Lemburg", "track_title": "Barria1 Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 16:15:00", "duration": 60, "tags": ["GA", "EuroPython", "eps", "assembly"]}}, "Talks": {"298": {"id": 298, "abstracts": ["The hook-based plugin system used by py.test and being made available\r\nas a stand alone package allows easy extensibility based on defined\r\nextension points which can be implemented using hook functions in the\r\nplugins. Plugins can themselves call these hooks as well as define\r\nfuture extension points allowing for a very flexible design.\r\n\r\npy.test itself uses this plugin system from the ground up with the\r\nentire application being implemented by built-in plugins. This\r\narchitecture has proven powerful and flexible over the years, on both\r\ncommand line tools as well as long running daemons. This talks will\r\ndescribe how the plugin system works and how it deals with passing\r\narguments and return values 1:N hook calls. It will also describe how\r\nto design an application consisting entirely of plugins. While not\r\nspecifically talking about py.test it will also give a solid\r\nunderstanding on how plugins work in py.test."], "have_tickets": [true], "title": "The hook-based plugin architecture of py.test", "speakers": "Floris Bruynooghe", "track_title": "A2 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["software-design", "architecture", "plugin"]}, "218": {"id": 218, "abstracts": ["The potential upside of microservices is significant and exciting. So much so that Yelp's Transaction Platform committed from the start to an architecture of small, cooperative microservices. This talk explores the inevitable complications that arise for Python developers in as the services grow larger and stretch both their own architecture and the developers responsible for them. Come hear tales of terror (tight coupling! low test coverage!), stories which will warm your heart (agility! strong interfaces!), and everything in between as we follow the adventures of our plucky team.\r\n\r\nThe talk will be focused on the functional, cultural, and reliability challenges which occur as a microservices-based project evolves and expands over time. Particular attention will be paid to where these diverge from the utopian way microservices are often described, and to the particular difficulties faced by Python developers trying to implement such systems. My goal is to share with attendees some mistakes we've made, some successful methods for growing gracefully, and Python-specific tools/libraries which can help with these problems.\r\n\r\nTo enjoy this talk, you should be aware of the basic vocabulary and concepts of HTTP-based services. Any additional awareness of distributed systems (and their failure modes) will be helpful."], "have_tickets": [true], "title": "Arrested Development - surviving the awkward adolescence of a microservices-based application", "speakers": "Scott Triglia", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["services", "distributed-systems", "HTTP"]}, "340": {"id": 340, "abstracts": ["An introduction to the devops culture by sharing our experience in a successfully French start-up.\r\n\r\nThe salt route talk presents some best practices and common mistakes that arise in everyday teamwork between developers and sysadmins using SaltStack for configuration management, server provisioning, orchestration and Django web applications deployment.\r\n\r\nAs an introductory talk there is no prerequisites required.\r\n\r\nThis talk will be presented by the dynamic duo Natal Ng\u00e9tal and Pablo Seminario, 2 co-workers at PeopleDoc Inc.", "", ""], "have_tickets": [true], "title": "The Salt Route", "speakers": "Pablo SEMINARIO", "track_title": "A2 Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["architecture", "ConfigurationManagement", "DevOps", "saltstack", "automation", "django", "deployment", "Best Practice"]}, "43": {"id": 43, "abstracts": ["gitfs is an open-source[1] filesystem which was designed to bring the full powers of Git to everyone, no matter how little they know about versioning. A user can mount any repository and all the his changes will be automatically converted into commits. gitfs will also expose the history of the branch you\u2019re currently working on by simulating snapshots of every commit.\r\n\r\ngitfs is useful in places where you want to keep track of all your files, but at the same time you don\u2019t have the possibility of organizing everything into commits yourself. A FUSE filesystem for git repositories, with local cache.\r\n\r\nIn this talk we will take a look at some of the crucial aspects involved in building a reliable FUSE filesystem, the steps that we took in building gitfs, especially in handling the git objects (http://git-scm.com/book/en/v2/Git-Internals-Git-Objects), what testing methods we have used for it and also we will share the most important lessons learned while building it.\r\n\r\nThe prerequisites for this talk are:\r\nA good understanding of how Git works\r\nBasic understaning of Operating Systems concepts\r\n\r\n[1] You can get the source here - https://github.com/PressLabs/gitfs; you cand find more details here - http://www.presslabs.com/gitfs/."], "have_tickets": [true], "title": "gitfs - building a filesystem in Python", "speakers": "Vlad Temian", "track_title": "Google Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["low-level", "FOSS", "cpython", "DevOps", "concurrency", "open-source", "linux", "fun", "pytest"]}, "208": {"id": 208, "abstracts": ["NumPy is the fundamental Python package for scientific computing. However, being efficient with NumPy might require slightly changing how you write Python code. \r\n\r\nI\u2019m going to show you the basic idioms essential for fast numerical computations in Python with NumPy. We'll see why Python loops are slow and why vectorizing these operations with NumPy can often be good. \r\n\r\nTopics covered in this talk will be array creation, broadcasting, universal functions, aggregations, slicing and indexing.\r\nEven if you're not using NumPy you'll benefit from this talk."], "have_tickets": [false], "title": "NumPy: vectorize your brain", "speakers": "Ekaterina Tuzova", "track_title": "Google Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:15:00", "duration": 45, "tags": ["numpy", "machine-learning"]}, "46": {"id": 46, "abstracts": ["CityBikes [1] started on 2010 as a FOSS alternative endpoint (and Android client) to gather information for Barcelona's Bicing bike sharing service. Later evolved as an open API [2] providing bike sharing data of any (mostly) service worldwide.\r\n\r\nFast forward today and after some C&D letters, there's support for more than 200 cities, more than 170M historical entries have been gathered for analysis (in approx. a year) and the CityBikes API is the main source for open bike share data worldwide. This talk will tour about how we got there with the help of python and the community [3].\r\n\r\nPS: We have a realtime map, it is awesome [4].\r\n\r\n [1]: http://citybik.es\r\n [2]: http://api.citybik.es\r\n [3]: http://github.com/eskerda/pybikes\r\n [4]: http://upcoming.citybik.es\r\n\r\n"], "have_tickets": [true], "title": "CityBikes: bike sharing networks around the world", "speakers": "Llu\u00eds Esquerda", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["redis", "nosql", "api", "data-science", "visualization", "bigdata", "mongodb", "flask", "open-source", "linux", "fun", "FOSS", "internationalization"]}, "224": {"id": 224, "abstracts": ["Lately, there's a lot of talk about microservices but not enough concrete examples and case studies. I want to change that by showing:\r\n\r\n - how thinking in PaaS terms can lead to robust and scalable designs;\r\n\r\n - what infrastructure and automation you need to set up to go along smoothly;\r\n\r\n - how to get real time metrics of your apps; \r\n\r\n - what makes Python good for microservices;\r\n\r\n - what is Python's performance relative to some alternatives.\r\n\r\n**Prerequisites for the talk:**\r\n\r\n - some experience with web development in Python;\r\n\r\n - basic knowledge of RESTful web services.\r\n\r\n"], "have_tickets": [true], "title": "Python microservices on PaaS done right", "speakers": "Micha\u0142 Bultrowicz", "track_title": "A2 Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["automation", "performance", "cloud", "metrics", "PaaS"]}, "93": {"id": 93, "abstracts": ["Finding a good structure for number-crunching code can be a problem, this especially applies to routines preceding the core algorithms: transformations such as data processing and cleanup, as well as feature construction.\r\n\r\nWith such code, the programmer faces the problem, that their code easily turns into a sequence of highly interdependent operations, which are hard to separate. It can be challenging to test, maintain and reuse such \"Data Science Spaghetti code\".\r\n\r\nScikit-Learn offers a simple yet powerful interface for data science algorithms: the estimator and composite classes (called meta-estimators). By example, I show how clever usage of meta-estimators can encapsulate elaborate machine learning models into a maintainable tree of objects that is both handy to use and simple to test.\r\n\r\nLooking at examples, I will show how this approach simplifies model development, testing and validation and how this brings together best practices from software engineering as well as data science.\r\n\r\n_Knowledge of Scikit-Learn is handy but not necessary to follow this talk._"], "have_tickets": [true], "title": "Using Scikit-Learn's interface for turning Spaghetti Data Science into Maintainable Software", "speakers": "Holger Peters", "track_title": "Barria1 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["python", "data-science", "machine-learning", "cleancode", "sklearn", "Best Practice", "Testing"]}, "159": {"id": 159, "abstracts": ["Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.\r\n\r\nIn this talk some advanced techniques will be shown based on how Scrapy is used at Scrapinghub.\r\n\r\nGoals:\r\n\r\n - Understand why its necessary to _Scrapy-ify_ early on.\r\n - Anatomy of a Scrapy Spider.\r\n - Using the interactive shell.\r\n - What are items and how to use item loaders.\r\n - Examples of pipelines and middlewares.\r\n - Techniques to avoid getting banned.\r\n - How to deploy Scrapy projects.\r\n\r\n\r\n"], "have_tickets": [true], "title": "Dive into Scrapy", "speakers": "Juan Riaza", "track_title": "Google Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["scrapy", "python", "open-source", "scraping"]}, "206": {"id": 206, "abstracts": ["From september 2015 Aarhus School of Engineering will offer the education Bachelor of Electronic Engineering, as a combined online and on campus education. In the talk I will describe the technical and pedagogical setup, we are working at to meet the challenges of having both on-site and remote students.\r\n\r\nI will also touch on how IPython Notebook, will be part of the technical setup, and how it can be incorporated into the teaching."], "have_tickets": [true], "title": "Online Education: challenges and opportunities for Staff and Students", "speakers": "Anders Lehmann", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["education", "ipython"]}, "293": {"id": 293, "abstracts": ["Do you know how a spreadsheet works? Can you imagine building one, from scratch, in Python? This talk will be a whirlwind overview of how to do just that. Based on the source code of Dirigible, a short-lived experiment in building a cloud-based Pythonic spreadsheet (now [open-sourced](https://github.com/pythonanywhere/dirigible-spreadsheet), for the curious).\r\n\r\nWe'll start from scratch, with a simple data representation for a two-by-two grid, and then gradually build up the functionality of our spreadsheet:\r\n- Cell objects, and the formula/value distinction\r\n- Evaluating cells, from simple arithmetic up to an Excel-like dialect\r\n- Building up the dependency graph, and the ensuing fun times with recursion (arg!)\r\n- Integrating custom functions and user-defined code.\r\n\r\nShowing and explaining code examples, and alternating with live demos (don't worry, I've done this before!)\r\n\r\nAnd it's all in Python! You'll be surprised at how easy it turns out to be, when you go step-by-step, each building on the last... And I promise you'll be at least a couple of moderately mind-blowing moments :)", "", ""], "have_tickets": [true], "title": "How to build a spreadsheet with Python", "speakers": "Harry Percival", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["Beginners", "data", "demo", "spreadsheet", "data-science"]}, "245": {"id": 245, "abstracts": ["You need to download data from lots and lots of URLs stored in a text file and then save them on your machine. Sure, you could write a loop and get each URL in sequence, but imagine that there are so many URLs that the sun may burn out before that loop is finished; or, you're just too impatient.\r\n\r\nFor the sake of making this instructive, pretend you can only use one box. So, what do you do? Here are some typical solutions: Use a single process that creates lots of threads. Use many processes. Use a single process and a library like asyncio, gevent or eventlet to yield between coroutines when the OS blocks on IO.\r\n\r\nThe talk will walk through the mechanics of each approach, and then show benchmarks of the three different approaches.\r\n", "", ""], "have_tickets": [true], "title": "Parallelism Shootout: threads vs asyncio vs multiple processes", "speakers": "Shahriar Tajbakhsh", "track_title": "A2 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["Parallelism"]}, "97": {"id": 97, "abstracts": ["\u00bfY si pudieras centrarte en la funcionalidad de tus\r\nservicios en lugar de programar la integraci\u00f3n entre ellos?\r\n\r\nlymph es un framework con personalidad propia para escribir\r\nservicios en Python que te permite hacer justo eso. Incluye\r\ndescubrimiento de servicios extensible, comunicaci\u00f3n v\u00eda\r\npetici\u00f3n-respuesta, comunicaci\u00f3n v\u00eda publicaci\u00f3n-subscripci\u00f3n\r\nextensible y gesti\u00f3n de procesos.\r\n\r\nA medida que crecen nuestros equipos de desarrollo, nos alejamos\r\ncada vez m\u00e1s de una arquitectura monol\u00edtica. Queremos empezar a\r\nescribir servicios sin tener que preocuparnos de los requisitos de\r\ninfraestructura. Queremos desarrollar de forma r\u00e1pida, centr\u00e1ndonos\r\nen nuestro trabajo.\r\n\r\nEn esta charla os ense\u00f1aremos lo f\u00e1cil que es desarrollar y\r\nejecutar servicios con lymph.\r\n\r\nEchad un ojo a http://lymph.io. Esperamos vuestros pull requests."], "have_tickets": [true], "title": "Deja de pegarte con tus servicios; import lymph", "speakers": "Alejandro Castillo", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["services", "zeromq", "events", "gevent", "web", "rpc", "open-source", "zookeeper", "rabbitmq", "framework"]}, "210": {"id": 210, "abstracts": ["\u201cCode shortening\u201d is the \u201csport\u201d where participants strive to achieve the shortest possible source code that solves a programming problem by exploiting all the tricks and quirks of the language.\r\n\r\nThe [SIZECON on SPOJ][1] is one of the oldest and most popular code shortening problems on the web with a bizarre twist, only character above ASCII value 32 are counted for the penalty. During the talk we will take a journey into some frightening depths of the Python language in order to write shorter and shorter solutions to SIZECON until, exploiting a number of truly mind-blowing tricks, we will reach the current record solution of 28 characters (above ASCII 32!).\r\n\r\nI promise I\u2019ll show you the most obfuscated, contrived and sick python code you have ever seen and (hopefully!) will ever see. I invite participants to give [SIZECON][1] a try and check their score against the [Python2][2] and [Python3][3] SPOJ rankings.\r\n\r\n [1]: http://www.spoj.com/problems/SIZECON/\r\n [2]: http://www.spoj.com/ranks/SIZECON/lang=PYTH%202.7\r\n [3]: http://www.spoj.com/ranks/SIZECON/lang=PYTH%203.2.3\r\n", "", ""], "have_tickets": [true], "title": "Solving the web most popular code shortening competition in Python.", "speakers": "Alessandro Amici", "track_title": "Barria2 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["competitions"]}, "288": {"id": 288, "abstracts": ["The talk would aim to introduce cryptography and security from the developer point of view, showing ways to encrypt information with Python scripts and more sensitive information in web applications using django.\r\n\r\nI will introduce to security in python ,showing some libraries that allow encryption and decryption like PyCrypto or M2Crypto,comparing theses libraries with the cryptography module.At the same time,I will show the main ciphers and hashing algorithms used in these libraries like AES,DES,RSA and some examples illustrating each case.I wil show other techniques like steganography for hiding information in files(images,documents,programs) with some libraries like Stepic or ezPyCrypto. \r\n\r\nFinally,I will comment OWASP Python Security Project where we can find some useful practices\r\nand secure coding guidelines for detecting potential security vulnerabilities in our applications like SQL injection or Cross-site scripting.\r\n"], "have_tickets": [true], "title": "Python Security & Cryptography", "speakers": "Jose Ortega", "track_title": "Barria1 Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["python", "algorithm", "best-practices", "django", "security", "cryptography"]}, "131": {"id": 131, "abstracts": ["At Blue Yonder, we've built a platform that can accept and process bulk amounts of data for multiple business domains (e.g. handling retail store location and sales data) using SQLAlchemy as a database abstraction layer.\r\nWe wanted to use as much of SQLAlchemy as possible, but we quickly found that the ORM (Object Relational Mapper) is not suitable for handling large amounts of data at once. At the same time, we did not want each team of developers working on individual business domains to have to handcraft their own SQL statements. To solve this problem, we built an application configuration that closely resembles an SQLAlchemy model, but also contains application-specific logic settings.\r\n\r\nIn this talk I will demonstrate:\r\n\r\n - an application architecture for multiple business domains\r\n\r\n - the structure of the domain configuration utilized in the generation of the SQLAlchemy model, SQLAlchemy core statements, and other application functionality\r\n\r\n - how the domain configuration is used throughout the application (consuming and parsing incoming data, storing it in a database and ensuring data quality)"], "have_tickets": [true], "title": "Building a multi-purpose platform for bulk data using sqlalchemy", "speakers": "Christian Trebing", "track_title": "Barria1 Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["bigdata", "SQLAlchemy"]}, "109": {"id": 109, "abstracts": ["This talk is about how python is used in cloud computing as well as used while configuring cloud infrastructure. It also gives brief about tools and technologies/libraries can be used for number of tasks while cloud development/execution. Developers and all python lovers are the perfect audience for this talk. They will get the brief about reliable stack of python based tools used in cloud development and also will be sharing the experience with python.\r\n\r\nSummary:\r\nPython in cloud. \r\nKind of services can be build with python.\r\nPython based tools used in deployment and configuration management for the cloud.\r\nFor every python lovers - How to create a python friendly cloud infrastructure with great reliable combination of many stable tools.\r\nStability.\r\nExperience sharing. "], "have_tickets": [true], "title": "Python for Cloud Services and Infrastructure Management", "speakers": "Bhaumik Shukla", "track_title": "Barria2 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["nosql", "python", "infrastructure", "REST", "mongodb", "DevOps", "configuration", "django", "deployment", "cloud", "fabric", "rabbitmq"]}, "281": {"id": 281, "abstracts": ["It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question \"How can we validate that our API is working as intended?\"\r\n\r\nIn this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design.\r\nI will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.\r\n\r\n"], "have_tickets": [true], "title": "TDD for APIs", "speakers": "Michael Kuehne", "track_title": "Barria1 Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["pytest", "django", "agile", "api", "tdd"]}, "60": {"id": 60, "abstracts": ["TDD is great, we all know that. But why is it so, and under which circumstances is it ineffective or even harmful?\r\n\r\nIn this talk I want to delve into the deeper meaning of testing to derive how to do it best.\r\nAll of this from the point of view of somebody who has profited but also struggled with testing and TDD.\r\n\r\nFor every experience level from beginner to advanced there is something to learn or ponder.\r\n"], "have_tickets": [true], "title": "TDD - the why, the how and the when not", "speakers": "Fabian Kreutz", "track_title": "Google Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["tdd", "Development", "Testing", "py.test"]}, "8": {"id": 8, "abstracts": ["Beginner's guide to Python code quality. I'll talk about the tools for code analysis, differences between them, extending them with new features and ways to running them automatically. In the end, I'll talk about reasons behind all of these tools and try to convince you to using them in your projects (but if you are against it - I'll gladly listen to your arguments).", "", ""], "have_tickets": [true], "title": "Code Quality in Python - tools and reasons", "speakers": "Rados\u0142aw Jan Ganczarek", "track_title": "Barria2 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["automation", "python", "metrics"]}, "274": {"id": 274, "abstracts": ["Bring the continuous integration to a new level, through a platform/project independent framework able to give you unittest-like reports. Argus is a scenario-based application written in Python, driven by custom recipes under configurable environments, that can be used for testing a wide variety of small and big projects, with the ability of querying live data from the in-test application.\r\n\r\nUntil now, it's successfully used with [cloudbase-init][1] (a robust cloud initialization service for instances) under OpenStack and not only, due to its extensiveness and the ability to mimic different infrastructures. More details can be found on the package page: https://github.com/PCManticore/argus-ci.\r\n\r\nThe goals of this talk are to show its generic scalability, how simple is to create such kind of recipes, the relationship between scenarios, introspection and tests and, but not last, the unlimited freedom of creating very custom aspects of these entities which lead to relevant and in-depth ready for analysis logs. There are no major prerequisites to understand it, just to be familiar with Python and optionally have a focus on cloud infrastructures.\r\n\r\n[1]: https://github.com/stackforge/cloudbase-init"], "have_tickets": [true], "title": "Argus - the omniscient CI", "speakers": "Cosmin Poieana", "track_title": "A2 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["cloudbase-init", "continuous-integration", "argus", "devstack", "OpenStack", "open-source", "linux", "windows", "cloud", "Testing"]}, "117": {"id": 117, "abstracts": ["Defining a natural hierarchy of classes in Python can be challenging. Features like multiple inheritance, metaclasses, and classmethods can make such hierarchies significantly more powerful. However, these language features are complex and easy to use incorrectly. This talk will cover the best way to put the capabilities of classes to work so you can write Python programs more effectively.\r\n\r\nSpecifically, I'll cover these pieces of advice that I think you should follow:\r\n\r\n1. Initialize Parent Classes with `super`\r\n1. Use Multiple Inheritance Only for Mix-in Utility Classes\r\n1. Validate Subclasses with Metaclasses\r\n1. Register Class Existence with Metaclasses\r\n1. Use `@classmethod` Polymorphism to Construct Objects Generically\r\n\r\nWith each suggestion I'll use code examples to demonstrate why this is the best choice. When there are differences between Python 2 and Python 3, I'll highlight what's different. The goal is that intermediate programmers will learn some Python best practices, experienced programmers will gain confidence in their full use of Python's features."], "have_tickets": [true], "title": "How to Be More Effective with Classes", "speakers": "Brett Slatkin", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:15:00", "duration": 45, "tags": ["Practice", "Best"]}, "32": {"id": 32, "abstracts": ["One of the key aspect to keep in mind when developing a scalable application is its faculty to grow easily. But while we're used to take advantage of scalable backend technologies such as mongodb or couchbase, **scaling automatically our own application** core is usually another story.\r\n\r\nIn this talk I will **explain and showcase** a distributed web application design based on **consul** and **uWSGI** and its consul plugin. This design will cover the key components of a distributed and scalable application:\r\n\r\n - **Automatic service registration and discovery** will allow your application to grow itself automatically.\r\n\r\n - **Health checking and service unregistration** will allow your application to be fault tolerant, highly available and to shrink itself automatically.\r\n\r\n - A **distributed Key/Value storage** will allow you to (re)configure your distributed application nodes at once.\r\n\r\n - **Multi-Datacenter awareness** will allow your application to scale around the world easily.\r\n\r\n", "", ""], "have_tickets": [true], "title": "Designing a scalable and distributed application", "speakers": "Alexys Jacob", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 16:15:00", "duration": 60, "tags": ["technologies", "gevent", "management", "performance", "flask", "DevOps", "web", "automation", "configuration"]}, "269": {"id": 269, "abstracts": ["Bokeh is a Python interactive visualization library for large datasets that natively uses the latest web technologies. Its goal is to provide elegant, concise construction of novel graphics in the style of Protovis/D3, while delivering high-performance interactivity over large data to thin clients.\r\n\r\nThe talk will go through it\u2019s design providing details of the different API layers (bottom to top) concluding with a comprehensive showcase of examples to expose many of the features that make Bokeh so powerful and easy.", "", ""], "have_tickets": [true], "title": "Big data beautiful visualization on the browser with Bokeh", "speakers": "Fabio Pliger", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 16:15:00", "duration": 60, "tags": ["data-science", "visualization", "bigdata", "flask", "web", "django", "data", "html5"]}, "126": {"id": 126, "abstracts": ["Data Science is a hot topic, and most data scientist use either Python or R to do their jobs as main scripting language. \r\nBeing import.io data scientist for the last 2 years, all of them using Python, I've come across many different problems and needs on how to wrangle data, clean data, report on it and make predictions.\r\nIn this talk I will cover all main analytics and data science needs of a start-up using Python, numpy, pandas, and sklearn. For every use case I will show snippets of code using IPython notebooks and run some of them as live demos. "], "have_tickets": [true], "title": "Everyone can do Data Science in Python", "speakers": "Ignacio Elola", "track_title": "Google Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:15:00", "duration": 45, "tags": ["data-science", "machine-learning", "analytics", "pandas", "scipy", "sklearn"]}, "160": {"id": 160, "abstracts": ["Writing a Python script from scratch is fairly easy and you get on with very little boilerplate code in general. However starting a new Python project can be tiring if you decide to stick to best practices and plan on submitting it to PyPI. It requires great diligence and occasionally gets pretty cumbersome if you start new tools on a regular basis.\r\n\r\nWhy not just use a template for it? Cookiecutter is a CLI tool written in pure Python that enables you to do so. Not only is it working for Python code, but also markdown formats and even other programming languages. We will talk about the ideas behind Cookiecutter and go over how you can create your very own template, so you and others can benefit from your experience.\r\n\r\n\r\nGitHub: [https://github.com/hackebrot][1]\r\n\r\nTwitter: [https://twitter.com/hackebrot][2]\r\n\r\nBlog: [http://www.hackebrot.de/][3]", "", ""], "have_tickets": [true], "title": "Come to the Dark Side! We have a whole bunch of Cookiecutters!", "speakers": "Raphael Pierzina", "track_title": "Google Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["Cookiecutter", "Best Practice", "CLI", "community", "open-source", "Click", "pytest", "Kivy", "Jinja2", "cross-platform"]}, "66": {"id": 66, "abstracts": ["Seg\u00fan wikipedia:\r\n\"La metaprogramaci\u00f3n consiste en escribir programas que escriben o manipulan otros programas (o a s\u00ed mismos) como datos, o que hacen en tiempo de compilaci\u00f3n parte del trabajo que, de otra forma, se har\u00eda en tiempo de ejecuci\u00f3n. Esto permite al programador ahorrar tiempo en la producci\u00f3n de c\u00f3digo.\"\r\nEn esta charla veremos diferentes mecanismos que Python proporciona como:\r\n - Decoradores\r\n - Metaclasses\r\n - Descriptors\r\nA trav\u00e9s de varios ejemplos veremos como reutilizar c\u00f3digo en varias funciones y clases, como modificar como nuestras clases se generan, como se genera una clase (que funciones se llaman cuando una clase se crea) o como se genera una instancia.\r\nVeremos tambi\u00e9n que f\u00e1cilmente se nos puede ir de las manos y como utilizar con cuidado las herramientas que Python nos proporciona.", "", ""], "have_tickets": [true], "title": "Metaprogramaci\u00f3n en Python", "speakers": "Ra\u00fal Cumplido", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["metaclass", "metaprogramming", "python"]}, "42": {"id": 42, "abstracts": ["Using the automated documentation feature of Sphinx, you can make with ease the extensive documentation of Python program.\r\nYou just write python function documents (docstrings), Sphinx organizes them into the document, can be converted to a variety of formats.\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc and autosummary extensions.\r\n\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc, autosummary, coverage and doctest extensions.", "Abstract:\r\n\r\nUsing the automated documentation feature of Sphinx, you can make with ease the extensive documentation of Python program.\r\nYou just write python function documents (docstrings), Sphinx organizes them into the document, can be converted to a variety of formats.\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc and autosummary extensions.\r\n\r\nDescription:\r\n\r\nSphinx provides autodoc feature that generate document from docstring in your python sources.\r\nThe docstring that contains description and example of the use of function written near the program, makes doc easy to update.\r\nIn addition, the output of the Sphinx will make you understand what to write in docstring. As a result, this will improve your motivation of doc writing.\r\n\r\nTo use the autodoc, you must specify python modules to automodule directive one by one. This is a tedious task, hoswever autosummary extension automate this task.\r\nIn most cases, once developers have developed the API, you only need to run the make html of Sphinx, you get a nicely formatted document.\r\n\r\nSphinx also has coverage and doctest extentions.\r\nThese support writing the documentation to work with autodoc.\r\nThis allow you to check the APIs that have not been documented or you can verify each doctest part is correct or not.\r\n\r\nIf you use such autodoc-related extensions, you can create a Sphinx API documentation in the following procedure.\r\n\r\n1. make coverage; you can get the APIs that have not been documented.\r\n2. Write docstrings that includes the doctest format how to use the API.\r\n3. make doctest; you can verify each doctest part is correct or not.\r\n4. make html; you can generate the HTML or your favorite format.\r\n\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc, autosummary, coverage and doctest extensions.\r\n\r\n\r\nTarget:\r\n\r\n- Python programmer who is struggling with documentation.\r\n- Python library author who want to generate API docs automatically.\r\n- Python library author who want to create a clear documentation which contains python snippets.\r\n\r\nOutline:\r\n\r\n* Self introduction (2 min)\r\n\r\n* Sphinx introduction (2 min)\r\n\r\n * What is Sphinx?\r\n * Sphinx examples\r\n\r\n* Have you written API docs for your code? (2 min)\r\n\r\n * I don't know what/where should I write.\r\n * Docstrings is needed? Are there some specific format?\r\n\r\n* Getting start Sphinx (2 min)\r\n\r\n * How to install Sphinx\r\n * How to start a Sphinx project\r\n\r\n* Generate API docs from your python code (5 min)\r\n\r\n * setup autodoc extension\r\n * write docstrings for yuor python module\r\n * \"automodule & make html\" will generate API docs from python code\r\n * autodoc pros & cons: docs for many modules\r\n\r\n* Listing APIs automatically (5 mins)\r\n\r\n * setup autosummary extension\r\n * how to use autosummary directive\r\n * no more autodoc directive\r\n\r\n* Discovering undocumented APIs (5 min)\r\n\r\n * setup coverage extension\r\n * make coverage\r\n\r\n* Detect deviations of the impl and doc (5 min)\r\n\r\n * setup doctest extension\r\n * make doctest\r\n\r\n* Overall picture, tips, Q&A (10 min)\r\n\r\n * Overall picture of the process\r\n * Options for autodoc\r\n * translate them into other langs\r\n", ""], "have_tickets": [true], "title": "Sphinx autodoc: automated API documentation", "speakers": "Takayuki SHIMIZUKAWA", "track_title": "Google Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["automation", "autodoc", "documentation", "Sphinx"]}, "64": {"id": 64, "abstracts": ["A perspective of the impact of the PyconUK education track from the point of view of teachers and educators. \r\n\r\nHaving attended the education track at Pycon UK 2014 as a teacher, my talk will share both my experiences and those of other teachers attending. The education track bought educators and developers together in a way that allowed the teachers to get support and advice whilst developers get to support teachers in developing exciting & real applications for teaching computing. \r\n\r\nThe talk will focus on two aspects of the education track. The workshops delivered for teachers by python developers and how this helps build teachers confidence. But also the breakout sessions where educators and developers with common interests can work together to develop something. This might be a program / library or a teaching resource, some developers gave a hands on and bespoke training session to a group of teachers.\r\n\r\nIf we are to get more young people programming or at least having a positive experience of programming then we need to minimize obstacles to that experience. By having educators and developers working together we can identify those obstacles and eliminate them!", "", ""], "have_tickets": [false], "title": "Pycon - A teacher's perspective", "speakers": "James Robinson", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["education", "pyconuk", "raspberrypi", "teaching", "learning", "computing", "python3"]}, "339": {"id": 339, "abstracts": ["Microservices are popping up everywhere. This talk will explain what this fashionable new architecture is, including the pros and cons of adopting it, and then discuss an open-source framework that can help you do so -- [https://nameko.readthedocs.org][1].\r\n\r\nNameko assists you in writing services with well-defined boundaries that are easy to test. By leveraging some neat design patterns and providing test helpers, it also encourages good service structure and clean code.\r\n\r\n [1]: https://nameko.readthedocs.org"], "have_tickets": [true], "title": "Nameko for Microservices", "speakers": "Matt Bennett", "track_title": "Google Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:15:00", "duration": 45, "tags": ["architecture", "open-source", "Microservices"]}, "255": {"id": 255, "abstracts": ["Ever feel like your open source project could be better tested? Lack of tests holding you back from contributors but you don\u2019t know where to start? You\u2019re not alone.\r\n\r\n[\u201cAdopt pytest month\u201d][1] was held in April 2015. [Pytest][2] volunteers were paired with open source software projects, to find a path to better testing with pytest. Projects varied from libraries/command line utilities, to a browser, to a complex Django app. In some cases converting existing tests was necessary, in others writing the first tests in existence for non-trivial amounts of code. Two projects were open sourced specifically to take part in \u201cadopt pytest month\u201d. What began as an experiment in increasing software audience proved to be an interesting exercise in strengthening community and most valuable of all, provided a newcomer\u2019s perspective to veteran contributors.\r\n\r\nThis talk will discuss what worked well with \u201cadopt pytest month\u201d, what didn\u2019t, what we learned about pytest and what you could take away for your open source project, be it an improved testing environment or an improved contributor community. A basic knowledge of testing and pytest will be useful.\r\n\r\n [1]: http://pytest.org/latest/adopt.html\r\n [2]: http://pytest.org/latest/\r\n"], "have_tickets": [true], "title": "The realities of open source testing: lessons learned from \u201cAdopt pytest month\u201d", "speakers": "Brianna Laugher", "track_title": "Barria1 Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["tdd", "open source", "community", "open-source", "Testing", "pytest", "py.test"]}, "115": {"id": 115, "abstracts": ["At Yelp, we ship code multiple times a day and have maintained this pace as our team has grown to 300+ and our codebase to several million lines of Python code. This talk explores the pain points we experienced along the ways, how our service-oriented architecture alleviates them, and the infrastructure we built to develop, test, and deploy in this highly-distributed environment. As a case study, we\u2019ll be looking at the backend powering the new Yelp Business Owner Android and iOS apps.\r\n\r\nAt the start, most of the development at Yelp occurred in a single, monolithic web application, creatively named \u201cyelp-main\u201d (naming is hard!). As the company grew, our developers were spending increasing amounts of time trying to ship code. After recognizing this pain point, we started experimenting with a service oriented architecture to scale the development process, and so far it\u2019s been a resounding success. Over the course of the last three years, we\u2019ve gone from writing our first service to having over seventy production services. Along the way, we\u2019ve dabbled with Docker containers, Pyramid, SQLAlchemy, uWSGI, gevent, and virtualenv in an effort to build the next-generation service platform for our engineers."], "have_tickets": [true], "title": "Building mobile APIs with services at Yelp", "speakers": "Stephan Jaensch", "track_title": "Barria2 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["services", "distributed-systems", "REST", "docker", "swagger", "pytest", "Pyramid"]}, "67": {"id": 67, "abstracts": ["Do you deploy your Python services to Amazon EC2, or to Openstack, or even to HP cloud, joyent or Azure? Do you want to - without being tied into any one of them? What about local full stack deployments with lxc or kvm containers?\r\n\r\nEven if you're convinced you don't need \"the cloud\" because you manage your own servers, amazing technologies like Private clouds and MaaS, for dynamic server management on bare metal, may change your mind.\r\n\r\nFed up with the cloud hype? Let us rehabilitate the buzzword! (A bit anyway.)\r\n\r\nA fully automated cloud deployment system is essential for rapid scaling, but it's also invaluable for full stack testing on continuous integration systems. Even better, your service deployment and infrastructure can be managed with Python code? (Devops distilled)\r\n\r\nTreat your servers as cattle not as pets, for service oriented repeatable deployments on your choice of back-end. Learn how service orchestration is a powerful new approach to deployment management, and do it with Python! If any of this sounds interesting then Juju maybe for you!\r\n\r\nIn this talk we'll see a demo deployment for a Django application and related infrastructure. We'll be looking at the key benefits of cloud deployments and how service orchestration is different from the \"machine provisioning\" approach of most existing cloud deployment solutions."], "have_tickets": [true], "title": "To the Clouds: Why you should deploy to the cloud even if you don't want to", "speakers": "Michael Foord", "track_title": "Barria1 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["OpenStack", "DevOps", "linux", "go", "cloud", "ec2"]}, "233": {"id": 233, "abstracts": ["How to write a test so you would remember what it does in a year from now? How to write selective tests with different inputs? What is test? How to subclass tests cases and yet maintain control on which tests would run? How to extend or to filter inputs used in parent classes? Are you a tiny bit intrigued now? :)\r\n\r\nThis is not another talk about how to test, but how to organize your tests so they were maintainable. I will be using nose framework as an example, however main ideas should be applicable to any other framework you choose. Explaining how some parts of code works I would have to briefly touch some advanced python topics, although I will provide need-to-know basics there, so people with any level of python knowledge could enjoy the ride.\r\n"], "have_tickets": [true], "title": "Sustainable way of testing your code", "speakers": "Eugene Amirov", "track_title": "Google Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["nose", "unit-testing", "maintainability", "readability"]}, "196": {"id": 196, "abstracts": ["In static unit testing, the output of a function is compared to a precomputed result. Even though such unit tests may apparently cover all the code in a function, they might cover only a small subset of behaviours of the function. This potentially allows bugs such as heartbleed to stay undetected. Dynamic unit tests using fuzzing, which allows you to specify a data generation template, can make your test suite more robust.\r\n\r\nIn this talk, we demonstrate fuzzing using the hypothesis library.\r\nHypothesis is a Python library to automatically generate test data based on a template.\r\nData is generated using a strategy. A strategy specifies how data is generated, and how falsifying examples can be simplified. Hypothesis provides strategies for Python's built-in data types, and is easily customizable.Since test data is generated automatically, we can not compare against pre-computed results. Instead, tests are usually done on invariants of functions. We give an overview of such invariants.\r\n\r\nFinally, we demonstrate how we use fuzzing to test machine learning algorithms at Blue Yonder."], "have_tickets": [true], "title": "What's the fuzz all about? Randomized data generation for robust unit testing", "speakers": "Moritz Gronbach", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:15:00", "duration": 45, "tags": ["fuzzing", "hypothesis", "unit-testing"]}, "106": {"id": 106, "abstracts": ["Do you like visiting Python conferences like the EuroPython? Does it\r\nmake you to want something similar where you live too? This talk looks\r\ninto the effort, practical things and some good tips on how to\r\nbootstrap your own Python community where you live!\r\n\r\nIf you already run a local Python community, join this talk to share\r\nyour views and give your comments to those interested in building\r\ntheir first Python community.\r\n\r\nAfter the talk you have a good idea of what it takes to run your local\r\nPython community (spoiler: not much!) and how can you take it even further!"], "have_tickets": [true], "title": "How-To: Build a local Python community", "speakers": "Jyrki Pulliainen", "track_title": "Google Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["conferences", "organizer", "meetup", "community"]}, "336": {"id": 336, "abstracts": ["One point usually underestimated or omitted when dealing with \r\nmachine learning algorithms is how to write *good quality* code.\r\nThe obvious way to face this issue is to apply automated testing, which aims at implementing (likely) less-buggy and higher quality code.\r\n\r\nHowever, testing machine learning code introduces additional concerns that has to be considered. On the one hand, some constraints are imposed by the domain, and the risks intrinsically related to machine learning methods, such as handling unstable data, or avoid under/overfitting. On the other hand, testing scientific code requires additional testing tools (e.g., `numpy.testing`), specifically suited to handle numerical data.\r\n\r\nIn this talk, some of the most famous machine learning techniques will be discudded and analysed from the `testing` point of view, emphasizing that testing would also allow for a better understanding of how the whole learning model works under the hood.\r\n\r\nThe talk is intended for an *intermediate* audience.\r\nThe content of the talk is intended to be mostly practical, and code\r\noriented. Thus a good proficiency with the Python language is **required**.\r\nConversely, **no prior knowledge** about testing nor Machine Learning \r\nalgorithms is necessary to attend this talk.", "", ""], "have_tickets": [true], "title": "Machine Learning Under Test", "speakers": "Valerio Maggio", "track_title": "A2 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["data-science", "machine-learning", "nose", "py.test", "sklearn", "scipy", "numpy", "Testing"]}, "55": {"id": 55, "abstracts": ["When you see users starting to use your feature, you feel very proud and fulfilled. So why feel this only once every few weeks, why not feel it every day? In this talk I will show how we changed our workflow to automate deployment of code changes to production every time a feature is ready - sometimes even few times per day. I will present how to successfully combine open-source tools like Git, Jenkins, Buildout, Fabric, uWSGI, and South, in order to simplify the process and make it more reliable. I will discuss challenges that we faced implementing this workflow in a real project based on Django and how we resolved them. During this talk you will gain the knowledge required to implement Continuous Deployment in your own project."], "have_tickets": [false], "title": "Continuous Deployment for webapps based on Django", "speakers": "Wojciech Lichota", "track_title": "A2 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["case study", "Tooling", "django", "Best Practice", "deployment"]}, "372": {"id": 372, "abstracts": ["Scalability is a big problem for everyone who wants to grow. In order to handle the demand, appropriate infrastructure both in terms of software and hardware should be met. What if hardware was as dynamic as a service where CPU and RAM could have been acquired when only it's needed. Is there such an environment? How can you work with it? What you should be careful of? How your applications should evolve?\r\n", "", ""], "have_tickets": [true], "title": "Preparing Apps for Dynamic Scaling", "speakers": "roy simkes", "track_title": "Barria1 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["Scalability"]}, "45": {"id": 45, "abstracts": ["[Cython][1] is not only an excellent and widely used tool to speed up computational Python code, it's also a very comfortable way to talk to native code and libraries. The Cython compiler translates Python code to C or C++ code, and supports static type annotations to allow direct use of C/C++ data types and functions. The tight integration of all three languages makes it possible to freely mix Python features like generators and comprehensions with C/C++ features like native data types, pointer arithmetic or manually tuned memory management in the same code.\r\n\r\nThis talk by a core developer introduces the Cython compiler by interactive code examples and presents recent enhancements in the language that continue to make Cython the best choice for the development of fast and portable Python extensions.\r\n\r\n [1]: http://cython.org/\r\n"], "have_tickets": [true], "title": "Get native with Cython", "speakers": "Stefan Behnel", "track_title": "Barria1 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["Cython", "python", "c++", "ipython"]}, "231": {"id": 231, "abstracts": ["The terminal emulators we run so many of our programming tools in are more powerful than we remember to give them credit for, and the key to that power is understanding the interface. This talk will cover terminal colors and styles, writing to arbitrary portions of the screen, handling signals from the terminal, determining the terminal's dimensions and scrollback buffer behavior.\r\n\r\nTerminal programming can get hairy; along the way we'll deal with encoding issues, consider cross platform concerns, acknowledge 4 decades' worth of standards for terminal communication, and consider that humans at interactive terminals may not be the only users of our interfaces. By gaining an understanding of these issues, we'll be able choose from the abstractions over them offered by Python libraries Urwid, Blessings, and Python Prompt Toolkit.\r\n\r\nThis talk requires minimal Python knowledge, but does assume familiarity with command line tools in a unix environment.\r\n\r\nAn abbreviated version of this talk was presented at PyCon 2015 in Montr\u00e9al: https://www.youtube.com/watch?v=WAitSilLDUA With the additional time I'd hope to present more code examples, a more in-depth tour of existing libraries and more practical advice about writing programs that use the terminal, and an additional example of a difficult terminal details: dealing with reflowing of text in modern terminal emulators like GNOME Terminal and iTerm."], "have_tickets": [true], "title": "Terminal Whispering", "speakers": "Thomas Ballinger", "track_title": "Barria1 Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["terminal", "Urwid", "Blessings", "command-line", "REPL", "unix", "curses"]}, "352": {"id": 352, "abstracts": ["You've heard about Python's GIL. But what is it really? What does it do, both good and bad?\r\n\r\nCome learn all about the Python GIL. You'll learn about its history, all the problems it solves, all the problems it causes (that we know about!), and what it would take to remove the GIL.\r\n\r\nAttendees should be familiar with the terrors inherent in multithreaded programming, and be comfortable with a little C code in the slides.", "", ""], "have_tickets": [true], "title": "Python's Infamous GIL", "speakers": "Larry Hastings", "track_title": "Google Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["GIL", "cpython"]}, "63": {"id": 63, "abstracts": ["Python is the language of choice for the orchestration part of MySQL 5.6. \r\n\r\nAfter a brief introduction of MySQL replication architecture, the talk [Slides here][1] presents the python utilities released by MySQL: a set of drivers in pure-python, mysql-utilites for replication, management and failover, and fabric, a tool for scaling, sharding and provisioning new servers.\r\n\r\nYou will see how to create resilient configurations in minutes and use mysql-fabric to create high available infrastructures.\r\n\r\nAs a plus, we'll show how we implemented a fabric provider for provisioning new databases via docker\r\n\r\nPrerequisites: basic database knowledge, transactions, replication. MySQL specific concepts (eg: binary logs) are briefly introduced in the talk.\r\n\r\n [1]: http://www.slideshare.net/ioggstream/scaling-mysql-with-python", "Python is the language of choice for the orchestration part of MySQL 5.6. \r\n\r\nAfter a brief introduction of MySQL replication architecture, the talk [Slides here][1] presents the python utilities released by MySQL:\r\n\r\n - a set of drivers in pure-python \r\n - mysql-utilites for replication, management and failover\r\n - fabric, a tool for scaling, sharding and provisioning new servers\r\n\r\nYou will see how to:\r\n\r\n - create resilient configurations in minutes\r\n - use mysql-fabric to create high available infrastructures\r\n\r\nAs a plus, we'll show how we:\r\n\r\n - implemented a fabric provider for provisioning new databases via docker\r\n\r\n\r\n# Prerequisites\r\n\r\nBasic database knowledge, transactions, replication. \r\n\r\nMySQL specific concepts (eg: binary logs) are briefly introduced in the talk.\r\n\r\n\r\n [1]: http://www.slideshare.net/ioggstream/scaling-mysql-with-python", ""], "have_tickets": [true], "title": "Scaling MySQL with Python", "speakers": "Roberto Polli", "track_title": "Barria1 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["Database", "mysql", "case study", "docker", "linux"]}, "108": {"id": 108, "abstracts": ["My talk is meant to provide an overview of our current set of tools for storing data and how we arrived to these. Then, in the light of the current bottlenecks, and how hardware and software are evolving, provide a brief overview of the emerging technologies that will be important for handling Big Data within Python. Although I expect my talk to be a bit prospective, I won't certainly be trying to predict the future, but rather showing a glimpse on what I expect we would be doing in the next couple of years for properly leveraging modern architectures (bar unexpected revolutions ;).\r\n\r\nAs an example of library adapting to recent trends in hardware, I will be showing bcolz (https://github.com/Blosc/bcolz), which implements a couple of data containers (and specially a chunked, columnar 'ctable') meant for storing large datasets efficiently.\r\n"], "have_tickets": [true], "title": "New Trends In Storing Large Data Silos With Python", "speakers": "Francesc Alted", "track_title": "Barria1 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["Database", "bigdata", "python", "open-source", "data-science"]}, "272": {"id": 272, "abstracts": ["The popularity of Single Page Applications build with modern JavaScript frameworks is increasing, and more and more teams work on projects with separate frontend and backend components communicating over the network. At the same time, complex projects are evolving their architecture towards containerized microservices. However, most traditional batteries-included web frameworks are not designed for this paradigm.\r\n\r\nThis talk covers some best practices for building REST APIs for private use (in contrast to public ones), focusing on issues like authentication, error handling, validation, and serialization. It will also try to convince you that this might be a good moment to reconsider microframeworks like Flask instead of your favourite opinionated web framework."], "have_tickets": [true], "title": "Killer REST APIs for rich JS applications", "speakers": "Adam Byrtek", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["web", "flask", "HTTP", "api", "REST"]}, "65": {"id": 65, "abstracts": ["The Raspberry Pi weather station project introduces young people to using python programming to solve real and technical problems. The weather station consists of a range of sensors including:\r\nAnemometer\r\nRain gauge\r\nWind Vane\r\nTemperature Probe\r\nBarometer\r\nAir Quality Sensor\r\nHygrometer\r\n\r\n1000 kits are being given away to schools to take part in the project by following our schemes of work which will involve.\r\nProgramming basic interrupt based sensors\r\nAdvanced Sensors using ADC chips\r\nCreate a pygame based UI\r\nLogging data to MySQL and Oracle Apex\r\nPresenting data to a web app\r\nDeploying the weather station\r\nIntegrating Apex database\r\n\r\nWe would love feedback on the project from Python Developers and support in updating some libraries from python 2 to 3.", "", ""], "have_tickets": [false], "title": "Raspberry Pi Weather Station", "speakers": "James Robinson", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["education", "python3", "weather", "python2"]}, "265": {"id": 265, "abstracts": ["Kotti is a high-level, Pythonic web application framework based on Pyramid, SQLAlchemy and Bootstrap 3. It includes an extensible Content Management System called the Kotti CMS. Kotti is particularly well suited for building custom applications with object level security. It comes with complete user and group management and supports the concepts of global and local roles providing management views for each of those. \r\n\r\nThe talk will give an overview on Kotti, its philosophy, history and future. Target audience are people who want to learn what it is and can be used for. Because Kotti is just a rather small layer on top of its foundations, the talk might also give some interesting insights on how to build a solid (web) framework that suits your personal preferences.\r\n\r\nReferences:\r\n\r\n - http://kotti.pylonsproject.org/\r\n - http://kotti.readthedocs.org/en/latest/\r\n\r\n"], "have_tickets": [true], "title": "Standing on the Shoulders of Giants: The Kotti Web Application Framework", "speakers": "Andreas Kaiser", "track_title": "Barria1 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["wsgi", "web", "open-source", "SQLAlchemy", "Kotti", "Pyramid"]}, "271": {"id": 271, "abstracts": ["Generar documentaci\u00f3n de forma din\u00e1mica es relevante para los ingenieros de software porque ellos interact\u00faan con la data en el mismo donde est\u00e1 localizada. Es tambi\u00e9n relevante para los clientes porque la documentaci\u00f3n se puede presentar en un formato organizado y claro. En esta presentaci\u00f3n, hablaremos de c\u00f3mo usar un proceso unificado para generar din\u00e1micamente la documentaci\u00f3n de diversas fuentes de data incluyendo los wikis y los sistemas de rastreo de incidencias. \r\n\r\nIdealmente, nosotros como ingenieros deber\u00edamos interactuar solamente con una Fuente de informaci\u00f3n que nos dara como resultado una documentaci\u00f3n vigente y correspondiente al estado actual de un sistema. En el Presente, el cliente recibe documentos incompletos y sin actualizaci\u00f3n dando una incorrecta impresi\u00f3n del estado vigente de un Sistema. Usando un proceso unificado para generar documentaci\u00f3n de solo una Fuente de data permite presentar al cliente lo que se merece: artefactos actualizados y completos dando el real y mas reciente estado de un Sistema. El resto de esta presentaci\u00f3n se enfocara en c\u00f3mo lograr este Sistema.", "Generar documentaci\u00f3n de forma din\u00e1mica es relevante para los ingenieros de software porque ellos interact\u00faan con la data en el mismo donde est\u00e1 localizada. Es tambi\u00e9n relevante para los clientes porque la documentaci\u00f3n se puede presentar en un formato organizado y claro. En esta presentaci\u00f3n, hablaremos de c\u00f3mo usar un proceso unificado para generar din\u00e1micamente la documentaci\u00f3n de diversas fuentes de data incluyendo los wikis y los sistemas de rastreo de incidencias. \r\n\r\nLa documentaci\u00f3n especifica (documentos requeridos, documentos de dise\u00f1o, etc.) es un punto cr\u00edtico para el desarrollo de un Sistema. Desafortunadamente, desde el momento de su creaci\u00f3n los documentos quedan desactualizados a causa del r\u00e1pido desarrollo y mejoras de c\u00f3digo que ocurren actualmente en la industria. Con frecuencia, estas mejoras no son anotados en la documentaci\u00f3n. El resultado de esto son documentos que no sirven o que son creados con mucha prisa resultando en documentos mediocres. Adicionalmente hay diversas fuentes de data sin actualizar que causan tener distintas versiones de estado actual de un Sistema.\r\n\r\nIdealmente, nosotros como ingenieros deber\u00edamos interactuar solamente con una Fuente de informaci\u00f3n que nos dara como resultado una documentaci\u00f3n vigente y correspondiente al estado actual de un sistema. En el Presente, el cliente recibe documentos incompletos y sin actualizaci\u00f3n dando una incorrecta impresi\u00f3n del estado vigente de un Sistema. Usando un proceso unificado para generar documentaci\u00f3n de solo una Fuente de data permite presentar al cliente lo que se merece: artefactos actualizados y completos dando el real y mas reciente estado de un Sistema. El resto de esta presentaci\u00f3n se enfocara en c\u00f3mo lograr este Sistema.", ""], "have_tickets": [true], "title": "Incorporando administrado repositorios de informaci\u00f3n para generar documentaci\u00f3n on-demand", "speakers": "Todd Waits", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["process", "teams", "knowledge", "management", "documentation", "DevOps", "automation", "workflow"]}, "200": {"id": 200, "abstracts": ["This presentation introduces Flowy, a library for building and running distributed, asynchronous workflows built on top of different backends (such as Amazon\u2019s SWF). Flowy deals away with the spaghetti code that often crops up from orchestrating complex workflows. It is ideal for applications that do multi-phased batch processing, media encoding, long-running tasks, and/or background processing.\r\n\r\nWe'll start by discussing Flowy's unique execution model and see how different execution topologies can be implemented on top of it. During the talk we'll run and visualize workflows using a local backend. We'll then take a look at what it takes to scale beyond a single machine by using an external service like SWF."], "have_tickets": [true], "title": "Distributed Workflows with Flowy", "speakers": "Sever Banesiu", "track_title": "Barria2 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["SWF", "workflow", "AWS", "distributed-computing"]}, "316": {"id": 316, "abstracts": ["At some previous EuroPythons, I have taken advantage of people, while eating their food at the conference dinner, to extract money. But don't worry, it's all been in a good cause: in aid of the [Python Software Foundation][1], which defends the intellectual property of the Python language, and supports Python conferences. We are well represented in the list of the [top PSF donors][2]:\r\n\r\n- 53. EuroPython 2013 Sponsored Massage\r\n- 278. EuroPython 2012 Sponsored Massage\r\n- 499. EuroPython 2011 Sponsored Massage\r\n- 572. EuroPython 2010 Sponsored Massage\r\n- 1331. EuroPython Conference Dinner (sponsored massage)\r\n\r\nIn the early days, I could reasonably visit most tables, offering a shoulder massage in return for a donation. But now, there are too many diners, and not enough hands to do this on my own! **_I need lots of help_**:\r\n\r\n - Doing neck and shoulder massage\r\n - Collecting money in a wine bucket\r\n - Counting and bagging the money\r\n - Exchanging multiple currencies and getting it into the PSF account\r\n - Feeling good that you're doing something for the Python community\r\n\r\n**What do you need to join in?** For everything apart from the massage, common sense, honesty and a sense of humour! Given these, I will be running a short massage workshop. Learn how to relax your own neck and shoulders, with fewer headaches, and less stress from hours spent crouching over a laptop. Then find out the essentials of massaging someone else's neck, shoulders and back for three to four minutes. Become a more valuable member of your work team back home. Help others to relax!\r\n\r\n### Requirements:\r\n\r\n1. Please attend the workshop only if you are actually coming to the conference dinner.\r\n1. You don't need to have particularly strong thumbs and fingers (elbows make a good substitute). But you do need to be not afraid of touching people. Massage is not tickling!\r\n1. Lack of embarrassment about asking for money. More people will pay not to have a massage, than to be massaged -- and that's OK!\r\n1. Join in!\r\n\r\nIf you'd rather not give a massage to diners/donors, no problem: there are lots of other ways to help. But at least you need to join fully in the workshop, so that you experience something of what we'll be asking money for. **A workshop means no onlookers -- all participants!**\r\n\r\n [1]: https://www.python.org/psf/\r\n [2]: http://legacy.python.org/psf/donations/\r\n", "", ""], "have_tickets": [true], "title": "Sponsored massage training, in aid of the Python Software Foundation", "speakers": "Rob Collins", "track_title": "Exhibition Hall / Helpdesk ", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:30:00", "duration": 45, "tags": ["PSF", "massage", "relax", "REST"]}, "170": {"id": 170, "abstracts": ["Devpi is an open source PyPi-compatible package server. Its versatile features make it the Swiss Army knife of Python package and release management, enabling anyone to shape a custom release workflow.\r\n\r\nIn this talk, I will detail how we use our company-wide Devpi installation in order to share a large set of packages across teams, deploy binary packages to our application servers, and mix and mash open source packages with our own. With Devpi being a critical part of our release and deployment infrastructure, I will also cover our high-availability setup and how we perform major version updates with minimal downtime.\r\n\r\nWhile this talk is not meant to be an exhaustive introduction of all available Devpi features, it can offer insights on how Devpi can be used at a larger scale.", "", ""], "have_tickets": [true], "title": "Release Management with Devpi", "speakers": "Stephan Erb", "track_title": "Barria1 Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["case study", "deployment", "packaging", "Devpi"]}, "48": {"id": 48, "abstracts": ["Trying to find a good place to eat has become much easier and democratic with online reviews, but on the other hand, that creates new problems. Can you trust that 5 star review of fast food chain as much as the 1 star of a fancy restaurant because \"Toast arrived far too early, and too thin\"?\r\n\r\nWe all like enjoy things differently. Starting of on the assumption that the \"best pizza\" is not the same for everyone. Can we group users into people that has similar tastes? Can we identify reviews and restaurants to make sense of it? Can that lead us to a better way to find restaurants that you like?\r\n\r\nUsing some data handling techniques I walk you through my process and results that I've got from that idea. There are no requisites for this talk except basic python and math knowledge (matrices exist)\r\n\r\n "], "have_tickets": [true], "title": "Yak shaving a good place to eat using non negative matrix factorization", "speakers": "Adriano Petrich", "track_title": "Barria1 Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["visualization", "fun", "data-science"]}, "204": {"id": 204, "abstracts": ["There is a lot buzz about the Internet of things and how it's going to be the next big thing in computing. Python can power \"things\" and is used extensively in network applications, however there isn't much information out there about where Python can be used to build end-to-end IoT products.\r\n\r\nGoals :\r\nTo put into perspective the usefulness of Python in building IoT products.\r\nSpread awareness on possibilities of using Python on embedded hardware."], "have_tickets": [true], "title": "Python & Internet of Things", "speakers": "Ravi Vagadia", "track_title": "A2 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["wearables", "BlE", "IoT", "distributed-computing"]}, "349": {"id": 349, "abstracts": ["Python is a fantastic language for writing web scrapers. There is a large ecosystem of useful projects and a great developer community. However, it can be confusing once you go beyond the simpler scrapers typically covered in tutorials.\r\n\r\nIn this talk, we will explore some common real-world scraping tasks. You will learn best practises and get a deeper understanding of what tools and techniques can be used.\r\n\r\nTopics covered will include:\r\n- Crawling - single pages, websites, focussed crawlers, etc.\r\n- Data extraction - techniques for \u201cscraping\u201d data from from web pages (e.g. regular expressions, xpath, machine learning).\r\n- Deployment - how to run and maintain different kinds of web scrapers\r\n- Real world examples\r\n", "", ""], "have_tickets": [true], "title": "Advanced Web Scraping", "speakers": "Shane Evans", "track_title": "Google Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["scrapy", "scraping"]}, "289": {"id": 289, "abstracts": ["This case study show how to start from a simple distance search on elasticsearch and haystack and implement a production ready search like airbnb. \r\nThe talk will explain decay functions works with the different curves (linear, exponential, gauss) and how to send them with query scores to elasticsearch. With that you will be able to mix the distance, the price, the user activity, the number of picture and whatever you want. \r\n\r\n\r\nAdditionally I will show how to write a custom ElasticsearchSearchQuery and ElasticsearchSearchBackend because this is not yet supported by haybtacksearch.\r\n\r\nAll the code will be available on github soon\r\n\r\n"], "have_tickets": [true], "title": "From basic distance search to a complex multi criteria search", "speakers": "Antonin Lacombe", "track_title": "A2 Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["web", "haystacksearch", "django", "elasticsearch"]}, "122": {"id": 122, "abstracts": ["Software development is all about writing code that delivers additional value to a customer. Following the agile and lean approach this value created by code changes should be continuously delivered as fast, as early and as often as possible without any compromise on the quality. \r\nRemarkably, there is a huge gap between the development of the application code and the reliable and scalable operation of the application. As an example, most of the tutorials about web development with Flask or Django end by starting a local \u201cdummy\u201d server, missing out all the steps needed for production ready operation of the web service. Furthermore, as there is no \u201crocket science\u201d in-between, many proposals to bridge that gap from both sides, operations and developers start with sentences like: \u201cyou just have to...\u201d, a clear indication that it will cause problems later on and also a symptom of a cultural gap between developers and operations staff.\r\nIn this talk I will go through the complete delivery pipeline from application development to the industrial grade operation, clearly biased towards the \u201cDevOps\u201d mindset. Instead of presenting a sophisticated enterprise solution, I will outline the necessary building blocks for continuous delivery and fill them up with simple but working poor man's solutions, so that it is equally useful for professional and non-professional developers and operations engineers. After the talk you will know how to build such a continuous delivery pipeline with open-source tools like \u201cAnsible\u201d, \u201cDevpi\u201d and \u201cJenkins\u201d and I will share some of my day-to-day experiences with automation in general. Although many of the concepts are language agnostic I will focus on the ins and outs in a python universe and outline the pythonic way of \u201cget this thing running\u201d.\r\n"], "have_tickets": [true], "title": "A Pythonic Approach to Continuous Delivery", "speakers": "Sebastian Neubauer", "track_title": "A2 Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["Operations", "ApplicationLifecycle", "ConfigurationManagement", "Devpi", "ContinuousDelivery", "Jenkins", "DevOps", "ansible"]}, "324": {"id": 324, "abstracts": ["Do you know what happens every time you use the **@** symbol in Python?\r\n\r\nIn this talk we will see the magic behind the _syntactic sugar_ of the decorators. To understand how they internally work we will see in detail Python's **scopes**, **namespaces** and **closures**, and finally we will manually apply our own handcrafted decorator.\r\n\r\nThis talk is an improved version (in English) of the talk I delivered at PyConES 2013 (the feedback was pretty positive): [https://www.youtube.com/watch?v=d9-yTnJgcg4 ][1]\r\n\r\nLevel:\r\nIntermediate. Attendees must have previous knowledge of Python and should be somehow familiar with the **'@'** notation to decorate a function.\r\n\r\n [1]: https://www.youtube.com/watch?v=d9-yTnJgcg4\r\n"], "have_tickets": [true], "title": "Decorators demystified", "speakers": "Pablo Enfedaque", "track_title": "A2 Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["namespaces", "scopes", "decorators", "closures"]}, "230": {"id": 230, "abstracts": ["OpenCV Python bindings provide several ready to use tools for camera calibration, image recognition and camera position estimation. This talk will show how to recognize a picture, from a library of known paintings, and compute the camera position with respect to the recognized picture using OpenCV and numpy. This is applied to a tourist guide application for Google Glass through the recognition of the paintings exposed in the museum.\r\n"], "have_tickets": [true], "title": "Image recognition and camera positioning with OpenCV. A tourist guide application.", "speakers": "Francesco Nazzaro", "track_title": "Barria1 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["python", "Google Glass", "ipython notebook", "image recognition", "numpy", "OpenCV"]}, "23": {"id": 23, "abstracts": ["In this talk I will describe how to use Apache Spark (PySpark) with some data from the World of Warcraft API from an iPython notebook. Spark is interesting because it speeds up iterative processes on your hadoop cluster as well as your local machine. \r\n\r\nI will give basic benchmarks (comparing it to numpy/pandas/scikit), explain the architecture/performance behind the technology and will give a live demo on how I used Spark to analyse an interesting dataset. I'll explain why you might want to use Spark and I'll also go in and explain when you don't want to use it. \r\n\r\nThe dataset I will be using is a 22Gb json blob containing auction house data from all world of warcraft servers over a period of time. The goal of the analysis will be to determine when and if basic economics still applies in a massively online game. \r\n\r\nI will assume that the everyone knows what the ipython notebook is and I will assume a basic knowledge of numpy/pandas but nothing fancy. The dataset has been chosen such that people who are less interested in Spark can still enjoy the analysis part of the talk. If you know very little about data science but if you love video games then you should like this talk.", "", ""], "have_tickets": [true], "title": "PySpark and Warcraft Data", "speakers": "vincent warmerdam", "track_title": "A2 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["data-science", "machine-learning", "bigdata", "analytics", "pandas", "numpy"]}, "59": {"id": 59, "abstracts": ["The author shows how to use the [SleekXMPP][1] library in order to write a small chatbot that connects to Google Hangouts and reminds you or someone else to take medication for instance. The secure and recommended OAuth2 protocol is used to authorize the bot application in the [Google Developers Console][2] in order to access the Google+ Hangouts API. The author will elaborate then on how to use an event-driven library to write a bot that sends scheduled messages, waits for a proper reply and repeats the question if need be. Thereby, a primer on event-driven architectures will be given.\r\n\r\n [1]: http://sleekxmpp.readthedocs.org/\r\n [2]: https://console.developers.google.com/\r\n"], "have_tickets": [true], "title": "\"It's about time to take your medication!\" or how to write a friendly reminder bot ;-)", "speakers": "Florian Wilhelm", "track_title": "Barria2 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["automation", "xmpp", "oauth2", "bot", "network", "hangouts"]}, "318": {"id": 318, "abstracts": ["Odoo is used by 2 millions of users, although relatively unknown in the python community, it has a vibrant community and is one of the most active python open source project.\r\n\r\nI will present you the Odoo framework and how it can help to be more productive when building web based business apps. I will highlight its advantages compared to more popular framework such as django.", "", ""], "have_tickets": [true], "title": "Odoo the underdog python killer app. A python framework for web based business apps.", "speakers": "Antony Lesuisse", "track_title": "Google Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:15:00", "duration": 45, "tags": ["werkzeug", "HTTP.", "python", "javascript", "postgresql", "wsgi", "web", "django"]}, "213": {"id": 213, "abstracts": ["Have you ever developed a nice, well-working python program on one environment, only to have it blow up with exceptions and tracebacks when you run it on a different environment? Have no fear! This talk will show you how to write and maintain python code that is compatible across environments that may differ by python versions and/or operating systems.\r\n\r\nTechniques and tips will be drawn from lessons and experiences gained from making the AWS CLI, a python-based command line tool to manage AWS resources, compatible across a wide range of environments. In a case-study-like format, real-life compatibility issues encountered while developing the AWS CLI will be presented along with how we resolved each of them. These real-life examples will encompass, but will not be limited to, the following topics:\r\n\r\n\u2022 How to use functions and classes that may differ across python versions and/or operating systems\r\n\r\n\u2022 How to handle version-specific bugs\r\n\r\n\u2022 How to handle strings, bytes, and Unicode across python versions\r\n\r\n\u2022 How to handle differing locale settings\r\n\r\n\u2022 How to handle file operations across operating systems\r\n\r\n\u2022 How and when to vendor dependencies\r\n\r\n\u2022 How to write tests that are compatible across python versions and operating systems\r\n\r\n\u2022 How to create a testing environment that monitors compatibility of code across various environments\r\n\r\nUltimately, the goal of these examples is introduce to you some effective, real-world programming practices to overcome your current or next compatibility issue.\r\n"], "have_tickets": [true], "title": "It Works on My Machine: Writing Python Code for Any Environment", "speakers": "Kyle Knapp", "track_title": "Barria2 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["CLI", "packaging", "python2", "python3", "Best Practice", "Development", "Testing"]}, "294": {"id": 294, "abstracts": ["Docker has introduced a new model of deployment solving the infamous \"Deployment Matrix from Hell\" by using containers.\r\nBut this also brought the spotlight back on the Operating System side, and following the trails of CoreOS and Atomic Host, a new generation of Cloud Servers are born by using containers instead of traditional RPM/DPKG/tarball/whaterver packages model to deploy services. CoreOS/Atomic Host/Snappy Ubuntu and now VMWare Photon also provides transactional image-based OS focusing on security and built-in cluster management.\r\n\r\nDuring this talk, we'll present these next-gen OS, and their components and how they fit in. ", "", ""], "have_tickets": [true], "title": "The Lightweight Cloud Servers War Begins", "speakers": "Haikel Guemar", "track_title": "Barria1 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["Photon", "Snappy", "atomic", "cloud", "Virtualization", "community", "docker", "infrastructure", "Best Practice", "CoreOS", "rocket"]}, "302": {"id": 302, "abstracts": ["The MongoDB aggregation framework provides a means to calculate aggregated values without having to use map-reduce. While map-reduce is powerful, it is often more difficult than necessary for many simple aggregation tasks, such as totaling or averaging field values.\r\n\r\nSee how to use the build-in data-aggregation-pipelines for averages, summation, grouping, reshaping. See how to work with documents, sub-documents, grouping by year, month, day, etc. \r\n\r\nThis talk will give many (live) examples how to make the most of your data with pymongo with a few lines of code.", "", ""], "have_tickets": [true], "title": "Data Analysis and Map-Reduce with mongoDB and pymongo", "speakers": "Alexander Hendorf", "track_title": "Google Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["pymongo", "bigdata", "python", "mongodb", "analytics"]}, "214": {"id": 214, "abstracts": ["A few months ago, Guido unfolded PEP 484, which was highlighted at PyCon 2015 as a keynote presentation. This proposal would introduce type hints for Python 3.5. While the debate is still roaring and without taking a side, I believe that there is much to learn from static type-checking systems.\r\n\r\nThe purpose of this talk is to introduce ways that could be used to fully take over the amazing power that comes with static types, inside a dynamic type language such as Python. The talk will go over what exactly a static type system is, and what kind of problem it tries to solve. We will also review Guido's proposal of type hinting, and what it could mean to you. Finally, I will present a few libraries that are available, such as Hypothesis or various QuickCheck-inspired library that tries to build more robust tests, how they achieve it and their limitations. Throughout the talk, a lot of examples will used to fully illustrate the ideas being explained. \r\n\r\nAt the end of this talk, you should have a better understanding of the wonderful world of type systems, and what it really means to you. It should help you decide wether using type hints will be helpful to you and also if an external library trying to fuzz your tests has its place inside your project "], "have_tickets": [true], "title": "Static type-checking is dead, long live static type-checking in Python!", "speakers": "Jean-Philippe Caissy", "track_title": "Google Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["python3", "type-hinting", "library", "static-analysis", "Testing"]}, "6": {"id": 6, "abstracts": ["Microservices are a fresh architecture trend. In this talk I will explain what a microservice is. I will answer WHY and HOW to build microservices using tooling from Python ecosystem. We will take a look at components that power microservices: web frameworks, task queues, databases, reporting & monitoring tools and also integration technologies.\r\n\r\nI will start from design & planning, go through implementation and deployment process and briefly cover internal communcation and MDM (master data management).\r\n\r\nFinally, I will present a brief overview of patterns and anti-patterns of microservice architectures, as well as cover few use cases and success stories.\r\n\r\nPrerequisites: be familiarized with at least one python web framework and have a general understanding of web stack."], "have_tickets": [true], "title": "Why should You consider microservices ?", "speakers": "Jacek Nosal", "track_title": "Barria2 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["HTTP.", "DevOps", "automation", "docker", "ansible", "Tooling"]}, "239": {"id": 239, "abstracts": ["Un proyecto hecho en Django durante dos a\u00f1os da para muchas an\u00e9cdotas y mucho aprendizaje. Esta charla es un repaso por las decisiones sobre lo humano y lo t\u00e9cnico que fuimos tomando durante el desarrollo del proyecto.\r\n\r\nSe\u00f1alar\u00e9 las buenas decisiones que tomamos en el equipo, y tambi\u00e9n las que no nos salieron bien y nos hicieron aprender por las malas. \r\n\r\nTanto las buenas como las malas decisiones nos ense\u00f1aron much\u00edsimo y aqu\u00ed las compilo junto con unos cuantos tips que pueden divertir y, ojal\u00e1, inspirar a la audiencia, especialmente a aquellas personas que se enfrentan por primera vez a un proyecto grande.\r\n", "", ""], "have_tickets": [true], "title": "Lecciones aprendidas en un proyecto grande de Django", "speakers": "Yamila Moreno", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["postgresql", "python", "django", "open-source", "Beginners"]}, "90": {"id": 90, "abstracts": ["At the beginning of this year I started working at Lyst and I was tasked with helping to replace their old and outdated web API with a modern RESTful replacement. \r\n\t\r\nAlong the way we encountered some interesting design decisions and now I\u2019m going to share what we learned about building a real RESTful API with Django and Django REST framework.\t\r\n\r\nI've been talking about how to build great RESTful APIs for the past year at various Python and Django conferences in Europe. Now I'd like to take some real world experiences from creating Lyst's new web API and share what I've learned along the way.\r\n"], "have_tickets": [true], "title": "What it's really like building RESTful APIs with Django", "speakers": "Paul Hallett", "track_title": "Google Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["HTTP.", "django", "api", "REST"]}, "184": {"id": 184, "abstracts": ["One of the problems programmers are most often faced with is the parsing and validation of command-line arguments. If you're new to Python or programming in general, you might start by parsing sys.argv. Or perhaps you might've already come across standard library solutions such as getopt, optparse or argparse in the official documentation. \r\nWhile these modules are probably preferable to parsing sys.argv yourself, you might wonder if there are more satisfactory solutions outside of the standard library. Well, yes there are!\r\n\r\nThis talk will give you an overview of some popular alternatives to the standard library solutions (e.g. click, docopt and cliff), explain their basic concepts and differences and show how you can test your CLIs."], "have_tickets": [true], "title": "Building nice command line interfaces - a look beyond the stdlib", "speakers": "Patrick M\u00fchlbauer", "track_title": "Google Room", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["docopt", "cliff", "Click", "CLI"]}, "71": {"id": 71, "abstracts": ["with modern_peripherals: \r\n Python and Flask\r\n\r\nAuto-scrolling sites, glance-following ads, and gesture friendly web pages are coming!\r\n\r\nOver the last few years three products emerged that enable interaction with computer in a new way: Myo Armband, Leap Motion Controller and EyeTribe. The Myo Armband is a device that uses the electrical activity in your muscles to wirelessly control your computer, phone, and tablet, which is especially useful when your hands are \"tied\" or dirty. This device will be used to navigate through the presentation. The Leap Motion Controller tracks both hands in front of the screen. From a web developer\u2019s perspective, both devices allows us to use gestures, previously restricted to touch devices, on desktops. EyeTribe is an affordable eye-tracking device. \r\n\r\nThe talk will briefly cover setting up SDKs and python wrappers, and then focus on possible uses in daily life, business and, of course, web app development. Code examples will be included. In addition, the trade-offs between processing this new type of input data in the client versus processing input on the server will be discussed.\r\n"], "have_tickets": [true], "title": "with modern_peripherals: Python and Flask", "speakers": "Piotr Dyba", "track_title": "A2 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["Beginners", "python", "technologies", "flask", "web", "python3", "socket", "communication"]}, "222": {"id": 222, "abstracts": ["Have you ever worried that your tests aren't as good because they're running against a fake or mock instead of the real thing?\r\nVerified fakes solve this problem.\r\nVerified fakes allow for simplified testing using fakes while still providing the assurance that code tested using a fake implementation will behave the same way when used with a real implementation.\r\n\r\nThe talk will begin with a case-study, demonstrating what it means to write a \"verified fake\" implementation of a public API.\r\nI will show how to write tests that verify a fake implementation of a well defined API\r\nand I will show how those same tests can be re-used to verify and test real implementations of the same API.", "Have you ever worried that your tests aren't as good because they're running against a fake or mock instead of the real thing?\r\nVerified fakes solve this problem.\r\nVerified fakes allow for simplified testing using fakes while still providing the assurance that code tested using a fake implementation will behave the same way when used with a real implementation.\r\n\r\nThe talk will begin with a case-study, demonstrating what it means to write a \"verified fake\" implementation of a public API.\r\nI will show how to write tests that verify a fake implementation of a well defined API\r\nand I will show how those same tests can be re-used to verify and test real implementations of the same API.\r\n\r\nThe talk will end with a proposal that more libraries should include verified fakes.\r\nI will show, with real-world examples, how verified fakes can be used by integrators\r\nand discuss how they are superior to ad-hoc, unverified, mocking.\r\n\r\nDuring the talk I will refer to various real world, Open Source examples. Including:\r\n\r\n* Flocker's Pluggable \"Block Device Backend\" [1]\r\n\r\n This API allows Flocker to manipulate file systems on OpenStack Cinder Blocks and AWS EBS devices.\r\n It also makes it easy for third parties to implement their own Flocker block device backends.\r\n\r\n* Eliot's Memory Logger - and its use in testing and verifying logged messages.\r\n* LibCloud's DummyNodeDriver - and its limitations.\r\n* Boto - as an example of a library that could benefit from a verified, introspectable fake.\r\n* Docker-py - as an example of a library for which we have written a verified fake.\r\n\r\nThere will be at least 5 minutes for discussion at the end of the talk.\r\n\r\n[1] Flocker is an Open Source Docker orchestration system written in Python by ClusterHQ\r\n", ""], "have_tickets": [false], "title": "Faking It - The Art of Testing Using Verified Fakes", "speakers": "Richard Wall", "track_title": "A2 Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["tdd", "AWS", "OpenStack", "docker", "api", "cloud", "Best Practice", "Testing", "linux"]}, "81": {"id": 81, "abstracts": ["Creating a large-scale event processing system can be a daunting task. Especially if you want it \u201cstupid simple\u201d and wrapped around each client\u2019s needs. We built a straightforward solution for this using Python 3 and other open-source tools.\r\n\r\nMain issues to solve for a system that needs to be both performant and scalable:\r\n\r\n - handling a throughput of 1 million events per minute in a 4 cores AWS instance;\r\n\r\n - following the principle of least astonishment;\r\n\r\n - data aggregation and how Python's standard libraries and data structures can help;\r\n\r\n - failsafe and profiling mechanisms that can be applied to any Linux service in production;\r\n\r\n - addressing unexpected behaviors of Python\u2019s Standard Library; like reading from a file while it is written;\r\n\r\n - tackling a sudden spectacular cloud instance failure;\r\n\r\nThe alternative to this system would be to adopt existing technology stacks that might be too general, add more complexity, bloat, costs and which need extensive work to solve your specific problem. Moreover, our approach resulted in over 85% drop on hardware utilisation.\r\n\r\n[Context: Production Software \u2013 II (where good coding reduces the client\u2019s bill)][1]\r\n\r\n [1]: https://eastvisionsystems.com/production-software-part-ii-good-coding-reduces-clients-bill/\r\n", "", ""], "have_tickets": [true], "title": "Use Python to process 12mil events per minute and still keep it simple (Talk)", "speakers": "Teodor Dima", "track_title": "Barria1 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["bigdata", "performance", "architecture", "Development"]}, "267": {"id": 267, "abstracts": ["As an engineer working on any web stack, you may have heard about Blocking and Non-Blocking IO. You may as well have used any framework or library that supports Non-Blocking IO. After all, they are very useful as you don't want to block execution of other tasks while one task is waiting to complete a network call to another service (like HTTP call to an API or may be a TCP call to your database). Non-Blocking IO while doing tasks and not wait for IO. This also helps us handle a lot many connections than we possibly could with Blocking IO. Python supports Non-Blocking IO, but we always use some existing 3rd party library that hides all the gory details and makes it all look like black magic to the uninitiated. But there is nothing like black magic.\r\n\r\nThis presentation will be an introductory talk focused at explaining how Non-Blocking IO works, which is the basis of libraries like Gevent, Tornado and Twisted. We will learn about how Non-Blocking IO can be implemented using the most basic modules that form the base for the above mentioned libraries. Hopefully after this talk, Non-Blocking IO will not be an unsolved mystery for you anymore."], "have_tickets": [false], "title": "Understanding Non-blocking IO", "speakers": "Vaidik Kapoor", "track_title": "Google Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["web", "asyncronous", "networking"]}, "4": {"id": 4, "abstracts": ["Knowing that your application is up and running is great. However in order to make informed decisions about the future, you also need to know in what state your application currently is and how its state is developing over time.\r\n\r\nThis talk combines two topics that are usually discussed separately. However I do believe that they have a lot of overlap and ultimately a similar goal: giving you vital insights about your system in production.\r\n\r\nWe'll have a look at their commonalities, differences, popular tools, and how to apply everything in your own systems while avoiding some common pitfalls.", "", ""], "have_tickets": [true], "title": "Beyond grep: Practical Logging and Metrics", "speakers": "Hynek Schlawack", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["logging", "metrics", "errors", "DevOps"]}, "261": {"id": 261, "abstracts": ["Elasticsearch has many use cases, some of them fairly obvious and widely used, like plain searching through documents or analytics. In this talk I would like to go through some of the more advanced scenarios we have seen in the wild. Some examples of what we will cover:\r\n\r\nTrend detection - how you can use the aggregation framework to go beyond simple \"counting\" and make use of the full-text properties of Elasticsearch.\r\n\r\nPercolator - percolator is reversed search and many people use it as such to drive alerts or \"stored search\" functionality for their website, let's look at how we can use it to detect languages, geo locations or drive live search.\r\n\r\nIf we end up with some time to spare we can explore some other ideas about how we can utilize the features of a search engine to drive non-trivial data analysis including Geo-enabled search with relevancy.\r\n", "", ""], "have_tickets": [true], "title": "Beyond the basics with Elasticsearch", "speakers": "Honza Kr\u00e1l", "track_title": "Google Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:15:00", "duration": 45, "tags": ["search", "bigdata", "open-source", "elasticsearch", "analytics"]}, "189": {"id": 189, "abstracts": ["Continuous Integration is a software development practice where members of a team integrate their work frequently, leading to multiple integrations per day. Each integration is verified by an automated process (including tests) to detect integration errors as quickly as possible.\r\n\r\nThis talk will introduce the basic principles for building an effective Continuous Integration system for Python-based projects. It will present the lessons learned from building a Jenkins-based CI system for an Open Source project with a distributed team of more than 340 core developers that ranks among the top 2% of all open source projects worldwide (Plone). "], "have_tickets": [true], "title": "The Butler and the Snake - Continuous Integration for Python", "speakers": "Timo Stollenwerk", "track_title": "Barria2 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["python", "ContinuousIntegration", "tdd", "ContinuousDelivery", "Testing"]}, "314": {"id": 314, "abstracts": ["With the Raspberry Pi, it's easy to do physical computing directly from Python code - rather than usual embedded hardware engineering in C or Assembler. \r\n\r\nIn this talk I'll show examples of physical computing projects that use Python on Raspberry Pi and demonstrate the sort of code used in such projects.\r\n\r\nPhysical computing with Python is very popular in education - as it's so engaging, and more interesting than printing to the screen.\r\n\r\nThis will be an informative session with learning possibilities to give those new to physical computing a change to get started.", "", ""], "have_tickets": [true], "title": "Physical computing with Python and Raspberry Pi", "speakers": "Ben Nuttall", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["education", "raspberrypi"]}, "216": {"id": 216, "abstracts": ["As Python programmers we're used to program without taking care about allocating\r\nmemory for our objects and later on freeing them, Python garbage collector\r\ntakes care of this task automatically for us.\r\n\r\nGarbage collection is one of the most challenging topics in computer science,\r\nthere are a lot of research around the topic and different ways to tackle\r\nthe problem.\r\n\r\nKnowing how our language does this process give us a better understanding\r\nof underlying interpreter and allow us to know why problems like cycles\r\ncan happen in CPython interpreters.\r\n\r\nSo, this talk aims to be and introduction to the topic and a walkaround\r\nthrough different approaches followed in CPython and PyPy:\r\n\r\n* Generational Reference counting with cycles detector on CPython.\r\n* Incremental version of the MiniMark GC on PyPy.\r\n"], "have_tickets": [true], "title": "Knowing your garbage collector", "speakers": "Francisco Fern\u00e1ndez Casta\u00f1o", "track_title": "Barria2 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["collection", "counting", "reference", "garbage", "cpython", "PyPy"]}, "14": {"id": 14, "abstracts": ["The Python compiler Nuitka has evolved from an absurdly compatible Python to C++ translator into a **statically optimizing Python compiler**. The mere peephole optimization is now accompanied by full function/module level optimization, with more to come, and only increased compatibility.\r\n\r\nWitness local and module **variable value propagation**, **function in-lining** with suitable code, and graceful degradation with code that uses the full Python power. (This is considered kind of the break through for Nuitka, to be finished for EP.) No compromises need to be made, full language support, all modules work, including extension modules, e.g. PyQt just works.\r\n\r\nAlso new is a plugin framework that allows the user to provide workarounds for the standalone mode (create self contained distributions), do his own type hinting to Nuitka based on e.g. coding conventions, provide his own optimization based on specific knowledge.\r\n\r\nUltimately, Nuitka is intended to grow the Python base into fields, where performance is an issue, it will need your help. Scientific Python could largely benefit from future Nuitka. Join us now.\r\n", "", ""], "have_tickets": [true], "title": "The Python Compiler", "speakers": "Kay Hayen", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["FOSS", "python", "performance", "scipy", "numpy"]}, "139": {"id": 139, "abstracts": [" **Stop doing the same thing but expecting different results**\r\n\r\nAs developers we put considerable effort into optimisation. We are always tinkering, trying to make things better, and striving to remove antipatterns from our code and our development processes. \r\n\r\nYet for some reason we have not been as good at applying this spirit of optimisation to the problem of increasing diversity, even though most people these days agree that, like good tests, agile methodologies, and virtual environments, diversity is a \"good thing\".\r\n\r\nMy position is that just as there is no single easy way to write good code there is no single easy way to increasing diversity. There are, however, several things that companies and organisations do which actually work against diversity. This talk will explore these antipatterns for diversity, including uncritical belief in meritocracy, lack of understanding of the realities of marginalisation, null processes, misunderstanding of \"culture fit\", and an unwillingness to change, as well as some ways that teams, companies, and organisations might work to combat them.\r\n\r\n"], "have_tickets": [true], "title": "Antipatterns for Diversity", "speakers": "Naomi Ceder", "track_title": "A2 Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["diversity", "inclusion", "Best Practice", "community"]}, "128": {"id": 128, "abstracts": ["The asyncio module introduced in Python 3.4 is a game-changer for I/O management and event-driven network programming in Python. Aiming to be a lower-level implementation of an asynchronous event loop, it intends that higher level frameworks like Tornado, Twisted or Gevent will build on top of it, taking advantage of the shared interface for writing concurrent event-driven code across different Python frameworks.\r\n\r\nThis talk connects theory with practice, presenting how Tornado can run in the asyncio event loop and take advantage of the subgenerator delegation syntax (yield from) to provide a high degree of concurrency while keeping the simplicity of sequential code. It explains the concept of coroutines, futures and ioloop, exposing Python 3 code for sample web tasks. The talk completes with a basic demo of running this code on Tornado, comparing its syntax and performance with popular asynchronous frameworks from other languages."], "have_tickets": [true], "title": "Better asynchronous code with Tornado and Python 3", "speakers": "Anton Caceres", "track_title": "Barria1 Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["web", "python3", "tornado", "asyncio"]}, "98": {"id": 98, "abstracts": ["One day our software will go in production, and so shortly we will pay dearly for our youthful mistakes. Without regression tests, we will be in deep trouble. If we have regression tests, but we did not have performed TDD, we should probably increase the effort in bug fixing and\r\nmaintenance, since we do not have enough code coverage and our tests come out complex.\r\n\r\nBy retracing the author youthful mistakes, we will see a complete development workflow, from the user story to the low-level tests, in order to highlight the differences between functional, integration and unit tests, the best practices, and the lessons learned by the author during the development of the [Sardinia Radio Telescope][1] control software.\r\n\r\n [1]: https://www.youtube.com/watch?v=zCL_tSMqsRg\r\n", "", ""], "have_tickets": [true], "title": "Lessons learned about testing and TDD", "speakers": "Marco Buttu", "track_title": "A2 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["unit-te", "tdd", "Testing"]}, "238": {"id": 238, "abstracts": ["A Django project, developed for 2 years is a valuable source of anecdotes and wisdom. This talk is a review on the decissions, about human and tech, that my team took during the project. I'll point out the good decissions as well as the bad ones, those which made us learn \"the hard way\".\r\n\r\nBoth good and bad decissions taught us a lot, and here I compile them, together with a handful of tips which can amuse and, hopefully, inspire the audience, specially those who are facing for the first time a big project."], "have_tickets": [true], "title": "Learnt lessons in a big Django Project", "speakers": "Yamila Moreno", "track_title": "Barria1 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["postgresql", "python", "django", "open-source", "Beginners"]}, "169": {"id": 169, "abstracts": ["In this talk, people will get introduced to python threading and multiprocessing packages. This talk will cover multiprocessing/threaded development best practices, problems occurs in development, things to know before multiprocessing/multi-threading. After this talk attendees will be able to develop multiprocessing/threaded applications. \r\n\r\nThis talk will cover threads, global interpreter lock, thread pool, processes, process pool, synchronization locks - Lock & RLock , semaphores, events, condition, timer, pipes, queue, shared memory. This talk will also cover best practices and problems in multiprocessing and threaded application development. \r\n"], "have_tickets": [true], "title": "Python Multithreading and Multiprocessing: Concurrency and Parallelism", "speakers": "Hitul Mistry", "track_title": "Barria2 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["concurrency", "multi-processing", "Parallelism", "multi-threading", "linux", "Best Practice"]}, "127": {"id": 127, "abstracts": ["Traditional Python profiling tools have limitations. Standard tools like **cProfile** and most all third party tools (like **Python Tools** plugin for Microsoft Visual Studio) suffer from common flaws. First, the profiling overhead is high (up to 50%). Second, the information provided is \u201cfunction-level\u201d i.e. the tool shows how much time was spent within a function, but not actionable \u201cline-level\u201d information to show which exact lines are _the bottleneck_ in a function. Adding \u201cline-level\u201d information to most tools causes the application to run even slower. Third, some tools require modification of the application source code to enable profiling thus disrupting development.\r\n\r\nThis talk presents an experimental Python profiler. It typically has less than 15% overhead, shows line-level information and does not require modification of application source code. Experiments using it resulted in performance gains of 2x and more. Of course results vary by application, but in a typical application there may be quick optimizations easily identified by this type of profiler.\r\n\r\nThe talk will briefly describe the basics of what, why and how to profile. The profiler\u2018s use and results will be shown in the presentation with examples based on real-life applications. Previous experience of working with profilers and trying to optimize an application is a plus, but not required, to gain a better appreciation of the work presented.", "", ""], "have_tickets": [true], "title": "Tuning Python applications can dramatically increase performance", "speakers": "Vasilij Litvinov", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python", "visualization", "performance", "profiling", "metrics", "cpython", "Tooling", "Development"]}, "134": {"id": 134, "abstracts": ["Removing UneXploded Ordnance (UXO) from minefields at the end of a conflict is a very time-consuming and expensive operation. Advanced satellite image processing can detect changes and activities on the ground and represent them on a map that can be used by operators to classify more dangerous zones and safer areas, potentially reducing the time spent on field surveys.\r\n\r\nWe exploit space-borne radar Earth images together with thematic data for mapping activities on the ground using numpy, scipy and gdal. The Activity Map generation process to be shown will be implemented using IPython Notebook.", "", ""], "have_tickets": [true], "title": "Activity Map from space: supporting mine clearance with Python", "speakers": "Giuseppe Cammarota", "track_title": "A2 Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["visualization", "scipy", "ipython", "geodata", "numpy"]}, "11": {"id": 11, "abstracts": ["Python is an expressive general purpose programming language. Its syntax provides many ways to represent structure and minimise code repetition and boilerplate.\r\n\r\nBut Python not always expressible enough. Perhaps when you've built a complicated enough system with hard-to-express inter-relationships, the code required to construct or operate on it can become complicated, repetitive and unreadable. Or perhaps you have users unfamiliar with Python who need to understand or edit a system. In cases like these, stepping beyond the syntax and semantics of basic Python can be an advantage.\r\n\r\nDaniel will describe various ways you can implement your own Domain Specific Languages, languages perhaps completely unlike Python that can succinctly describe more complicated Python systems.\r\n\r\nThis talk will cover:\r\n\r\n* What and why of DSLs\r\n* Metaprogramming tricks\r\n* Writing simple parsers\r\n* The libraries PLY and PyParsing\r\n* Building tooling around your new DSLs"], "have_tickets": [true], "title": "The unabridged guide to Domain Specific Languages in Python", "speakers": "Daniel Pope", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 16:15:00", "duration": 60, "tags": ["python", "technologies", "Tooling"]}, "34": {"id": 34, "abstracts": ["Does your open source project need better documentation? Do you wish that new users could get started with your software more easily? Do you feel that your code contribution workflow isn't documented well enough, or that contributors are discouraged from documenting their code? How can you give your project docs the love they deserve?\r\n\r\nThis high-level talk aims to introduce the main principles of technical communication in the context of FOSS projects. It is intended for anyone who interacts with docs, whether your project is fresh off the dev environment or has been around since the dawn of Git. Topics include tone, style, process management, structure, and contribution workflow.", "", ""], "have_tickets": [true], "title": "FOSS DOCS 101 (keep it simple, present!)", "speakers": "Mikey Ariel", "track_title": "Google Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["FOSS", "documentation", "community", "open-source", "Sphinx", "communication", "Best Practice", "sphinxdocumentation"]}, "300": {"id": 300, "abstracts": ["NumPy and Pandas have revolutionized data processing and munging in the Python ecosystem. As data and systems grow more complex, moving and querying becomes more difficult. Python already has excellent tools for in-memory datasets, but we inevitably want to scale this processing and take advantage of additional hardware. This is where Blaze comes in handy by providing a uniform interface to a variety of technologies and abstractions for migrating and analyzing data. Supported backends include databases like Postgres or MongoDB, disk storage systems like PyTables, BColz, and HDF5, or distributed systems like Hadoop and Spark. \r\n\r\nThis talk will introduce the Blaze ecosystem, which includes: Blaze (data querying), Odo (data migration), Dask (task scheduler), DyND (dynamic, multidimensional arrays) and Datashape (data description).\r\n\r\nAttendees will get the most out of this talk if they are familiar with NumPy and Pandas, have intermediate Python programming skills, and/or experience with large datasets.", "NumPy and Pandas have revolutionized data processing and munging in the Python ecosystem. As data and systems grow more complex, moving and querying becomes more difficult. Python already has excellent tools for in-memory datasets, but we inevitably want to scale this processing and take advantage of additional hardware. This is where Blaze comes in handy by providing a uniform interface to a variety of technologies and abstractions for migrating and analyzing data. Supported backends include databases like Postgres or MongoDB, disk storage systems like PyTables, BColz, and HDF5, or distributed systems like Hadoop and Spark. \r\n\r\nThis talk will introduce the Blaze ecosystem, which includes:\r\n\r\n- Blaze (data querying): [http://blaze.pydata.org/en/latest/][1]\r\n\r\n- Odo (data migration): [http://odo.readthedocs.org/en/latest/][2]\r\n\r\n- Dask (task scheduler): [http://dask.pydata.org/en/latest/][3]\r\n\r\n- DyND (dynamic, multidimensional arrays): [https://github.com/libdynd/dynd-python][4]\r\n\r\n- Datashape (data description): [http://datashape.pydata.org/][5]\r\n\r\nAttendees will get the most out of this talk if they are familiar with NumPy and Pandas, have intermediate Python programming skills, and/or experience with large datasets.\r\n\r\n [1]: http://blaze.pydata.org/en/latest/\r\n [2]: http://odo.readthedocs.org/en/latest/\r\n [3]: http://dask.pydata.org/en/latest/\r\n [4]: https://github.com/libdynd/dynd-python\r\n [5]: http://datashape.pydata.org/\r\n", ""], "have_tickets": [true], "title": "Scale your data, not your process: Welcome to the Blaze ecosystem", "speakers": "Christine Doig", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:15:00", "duration": 45, "tags": ["Abstractions", "distributed-systems", "analytics", "bigdata", "dynd", "blaze", "odo", "spark", "dask", "open-source", "pydata", "datashape", "databases", "data", "numpy"]}, "278": {"id": 278, "abstracts": ["Do you know what your application did last night? Python logging can help you.\r\n\r\nThis talk you will show you how to implement a systematic logging approach without boilerplate code and how to set up the Python logging module for different needs in production systems. We will see how to work with log files and other logging endpoints. We will address the data protection concerns that come up when logging from application with personal information. We will also look at the performance implications of logging. We will then cover best practices - how to structure logging, what to include in a log message, and how to configure logging for different use cases.\r\n\r\nWe will use the Python standard logging module to implement logging. This talk is useful to beginners with some experience. An understanding of decorators is useful, but not required. Some experience in web programming is a plus."], "have_tickets": [true], "title": "A Deep Look at Logging", "speakers": "Stefan Baerisch", "track_title": "A2 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["web", "BestPractices", "logging"]}, "198": {"id": 198, "abstracts": ["The asyncio project was officially launched with the release of Python 3.4 in March 2014. The project was public before that under the name \"tulip\". asyncio is just a core network library, it requires third party library to be usable for common protocols. One year later, asyncio has a strong community writing libraries on top of it.\r\n\r\nThe most advanced library is aiohttp which includes a complete HTTP client but also a HTTP server. There are also libraries to access asynchronously the file system, resolve names with DNS, have variables local to tasks, read-write locks, etc. There are clients for AMQP, Asterisk, ElasticSearch, IRC, XMPP (Jabber), etc. (and even an IRC server!). There are asynchronous drivers for all common databases, and even for some ORMs. As expected, there are tons of new web frameworks based on asyncio. It's also possible to plug asyncio into Gtk, Qt, gevent, eventlet, gunicorn, tornado, etc.\r\n\r\nI will also discuss use cases of asyncio in production and benchmarks. Spoiler: asyncio is not slow.\r\n\r\nThe asyncio library also evolved to become more usable: it has a better documentation, is easier to debug and has a few new functions. There is also a port to Python 2: trollius.", "", ""], "have_tickets": [true], "title": "asyncio community, one year later", "speakers": "Victor Stinner", "track_title": "A2 Room", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["python3", "asyncio", "aiohttp", "networking"]}, "305": {"id": 305, "abstracts": ["The past few years, we have made large strides to welcome more diverse people into our community. You see better gender ratios in attendance numbers at Python conferences, the billed speakers, the amount of women-centric programs. We can see the benefits of outreach. But we're not done yet.\r\n\r\nWhile a lot of the Python community embraces the importance of being diverse, we haven't taken that mindset to our workplace. From recruiting, we still hear, \"sure, we wanted to recruit women, but we couldn't find them\" and \"we only focus on quality here, not gender!\" Within company cultures, we hear \"gender equality isn't a problem here!\" or \"women don't ask for a higher salary\" and to \"just lean in!\"\r\n\r\nThis talk will recount the diversity efforts of the past few years and quantify the effects on the Python community. But this talk will also address the not-so-low-hanging fruit; the deeper-rooted problems that still plague the community from inside where we work. And it will talk the audience through actionable items to improve one's work place that welcomes more diversity."], "have_tickets": [true], "title": "Diversity: We are not done yet", "speakers": "Lynn Root", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["social", "diversity", "equality", "community"]}, "77": {"id": 77, "abstracts": ["A d\u00eda de hoy usamos un enorme conjunto de bibliotecas y frameworks, adem\u00e1s los usamos con cierta libertad dentro de nuestro c\u00f3digo, y pasado el tiempo nos damos cuenta de que esa biblioteca, no cubre mis necesidades, o tiene alg\u00fan fallo, o no escala bien en proyectos m\u00e1s grandes... en resumen, hemos ca\u00eddo en una trampa. No se puede evitar caer en estas trampas, porque depende de nuestras necesidades y las bibliotecas que utilizamos, por lo tanto, solo podemos estar lo mejor preparados posibles para salir de ellas tan pronto como nos demos cuenta.\r\n\r\nComo soluci\u00f3n a esto, plantear\u00e9 varias v\u00edas (nada innovadoras, pero menos usadas de lo que deber\u00edan). Unit testing (TDD idealmente), arquitectura hexagonal, y algunas reglas b\u00e1sicas de clean code.", "", ""], "have_tickets": [true], "title": "Todo es una trampa", "speakers": "Jes\u00fas Espino", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python", "architecture", "tdd", "cleancode", "unit-testing"]}, "236": {"id": 236, "abstracts": ["Using an SQL database offers a bunch of advantages; first of all its maturity and that it is understood by almost every software developer. But it has at least one main disadvantage. As the data is structured, if you want to modify the structure, for example on a long-running project, you need a migration and therefore almost for sure, a downtime.\r\n\r\nWhen you have to make a migration, to modify the structure of data for a small amount of records, it is so fast that it never gets problematic. But if you think to modify the structure of tables containing millions or billions of records, the time required to simply apply the structural change is problematic.\r\n\r\nHere are some changes we are working on at orderbird to go towards zero downtime migrations using some of the latest improvements of PostgreSQL 9.4, mainly logical replication and mixing in a little magic of some python scripting with psycopg."], "have_tickets": [false], "title": "Bringing PostgreSQL towards zero downtime migration with Python", "speakers": "Matthieu Rigal", "track_title": "A2 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["Database", "postgresql", "psycopg"]}, "84": {"id": 84, "abstracts": ["The Baserock project is about creating system images from source code in a clean, reproducible way. All of the tooling is written in Python.\r\n\r\nIn this talk I'll explain a bit about the core idea of Baserock: declarative system definitions (expressed in YAML) that can be built and deployed in various ways.\r\n\r\nThen I'll go into more detail about the tools available, and some of the cool things that they can do: distributed building, atomic system updates, creating custom container images, and more.\r\n\r\nFind out more about the Baserock project at http://www.baserock.org/", "", ""], "have_tickets": [true], "title": "Introduction to Baserock", "speakers": "Sam Thursfield", "track_title": "Barria2 Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["python", "DevOps", "system-administration", "unix", "open-source", "docker", "linux"]}, "225": {"id": 225, "abstracts": ["While Python supports procedural, object-oriented, and functional programming, its functional features are not fully developed. Mochi is a Python-like functional language that compiles to Python 3 and PyPy 3 bytecode. It can use Python libraries and can be used from Python.\r\n\r\nMochi adds functional features such as tail recursion optimization, no re-assignments in function definitions, persistent data structures, pattern matching, algebraic data types, a pipeline operator, better anonymous functions, Erlang-style actors, Lisp-style macros as well as many useful builtin functions.\r\n\r\nThis talk presents what Mochi is, how it works, and what you can do with it. Functional programming can help to solve certain kind of problems elegantly. Done right, functional programs can be easily tested and provide more confidence that you program is really doing what you want. Mochi could be another tool in your toolbox. Functional programming can expand your horizon and can be a lot of fun. Mochi offers easy access to this new world because you can leverage your existing Python knowledge and libraries whenever needed. "], "have_tickets": [true], "title": "Functional Python with Mochi", "speakers": "Mike M\u00fcller", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["Programming", "functional"]}, "96": {"id": 96, "abstracts": ["Given the dynamic nature of Python, some bugs tend to creep in our codebases. Innocents NameErrors or hard-to-find bugs with variables used in a closure, but defined in a loop, they all stand no chance in front of Pylint (http://pylint.org/).\r\nIn this talk, I'll present one of the oldest static analysis tools for Python, with emphasis on what it can do to understand your Python code. Pylint is both a style checker, enforcing PEP 8 rules, as well as a code checker in the vein of pyflakes and the likes, but its true power isn't always obvious to the eye of beholder. It can detect simple bugs such as unused variables and imports, but it can also detect more complicated cases such as invalid arguments passed to functions, it understands the method resolution order of your classes and what special methods aren't implemented correctly. Starting from abstract syntax trees, we'll go through its inference engine and we'll see how Pylint understands the logical flow of your program and what sort of type hinting techniques are used to improve its inference, including PEP 484 type hints. As a bonus, I'll show how it can be used to help you port your long-forgotten library to Python 3, using its new --py3k mode."], "have_tickets": [true], "title": "12 years of Pylint (or How I learned to stop worrying about bugs)", "speakers": "Claudiu Popa", "track_title": "Google Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["ast", "static-analysis", "lint", "typehinting"]}, "52": {"id": 52, "abstracts": ["Python has a great versatile ecosystem but the competition is getting better, this talk is about how Python can keep up with these new languages and where PyPy fits into this.\r\n\r\nRecently we've seen the rise of new technologies like Go, Node.js and Julia, those have the ability to build an ecosystem on a clean slate and thus be better than Python in some aspects. What would it take to be as good as those technologies on those aspects without loosing all the things we love about Python ? This talk will describe my perfect future where Python keeps getting better, gets to keep it's great set of libraries and where PyPy fits in that future.", "", ""], "have_tickets": [true], "title": "PyPy and the future of the Python ecosystem", "speakers": "Romain Guillebert", "track_title": "A2 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["PyPy"]}, "345": {"id": 345, "abstracts": ["Case study of an In-Flight Entertainment system, built using Python.\r\n\r\nThis talk will show the basic requirements for the system and the architecture decisions we took.\r\n\r\nBesides, running software at 10.000 feet implies new unexpected challenges, different from the ones we encounter day-to-day. We'll focus on how we solved them."], "have_tickets": [true], "title": "Python in the Sky: In-Flight Entertainment with Python", "speakers": "David Arcos", "track_title": "A2 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["redis", "python", "distributed-systems", "postgresql", "aviation", "django", "api", "fabric", "celery"]}, "161": {"id": 161, "abstracts": ["pip is certainly one of the most used package in the Python ecosystem, but what actualy happens when you pip install foo ?\r\n\r\n - - how does it perform an installation and resolve dependencies ?\r\n - - how does pip find installation candidates and select the 'best' ?\r\n - - Some sneak peek on the (possible) plans for the future of pip (wheel caching, setup_requires control, etc)\r\n\r\n"], "have_tickets": [true], "title": "PIP Internals", "speakers": "Xavier Fernandez", "track_title": "Barria1 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["packaging", "internals"]}, "221": {"id": 221, "abstracts": ["This talk will be a general introduction to Numba. Numba is an open source just\u00ad-in-\u00adtime Python compiler that allows you to speed up numerical algorithms for which fast linear algebra (i.e. Numpy array operations) is not enough. It has backends for the CPU and for NVidia GPUs. After the talk, the audience should be able to understand for which use cases Numba is adequate, what level of performance to expect, and have a general notion of its inner working.\r\n\r\nA bit of familiarity with scientific computing and/or Numpy is recommended for optimal understanding, but the talk should otherwise be accessible to the average Python programmer. It should also be of interest to people who are curious about attempts at high-\u00adperformance Python.", "", ""], "have_tickets": [true], "title": "Numba, a JIT compiler for fast numerical code", "speakers": "Antoine Pitrou", "track_title": "Google Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["python", "data-science", "analytics", "performance", "JIT", "numpy"]}, "5": {"id": 5, "abstracts": ["Traditional methods of coping with concurrent programming problems are well-known and described in literature. Many programming languages, including Python, contain in their standard libraries tools and primitives such as semaphores and can spawn threads or subprocesses.\r\n\r\nHowever, in the face of increasing interest in service oriented architecture and building distributed systems, that span across many independent server nodes, emerges a need to adapt traditional solutions, so they can be applied in the new environment.\r\n\r\nIn this talk I will share my experiences gathered during building a modern contact center - highly concurrent system, which requires certain resources to be accessed exclusively by several self-contained components.\r\n"], "have_tickets": [true], "title": "Distributed locks with Python and Redis", "speakers": "Sebastian Buczy\u0144ski", "track_title": "Google Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["redis", "twisted", "concurrency"]}, "86": {"id": 86, "abstracts": ["Braintree is a Ruby shop. By default, we use Ruby and Rails for projects. We also use Ruby-based projects for much of our tooling, including puppet, capistrano, and rake. However, we strongly believe in using the right tool for the job. What that means has evolved over ti\r\nme, and I'll discuss what solutions we chose in the past as well as our current choices.\r\n\r\nSo what's it like doing Python at a Ruby shop? You get lots of jokes about language features Ruby has but Python lacks and lots of disbelief that Python will survive the 2/3 split. People also tend to apply the best practices and conventions of Ruby to Python code as if t\r\nhey were the same. Python's major inroad at Braintree has been, surprisingly enough, as a platform for high-concurrency situations. This is a direct result of the power of Tornado as a platform for asynchronous I/O. It also helps that many Python is very approachable and \r\nmany developers have at least some experience with it.\r\n\r\nBraintree has three pieces of our infrastructure using Python and Tornado -- an incoming request proxy; an outgoing request proxy; and a webook delivery service. They've served us well for 3+ years but all suffer from a number of problems. The outdated concurrency feature\r\ns of CPython / Python 2 as well as our lack of experience with and commitment to Tornado have always been an issue. As the meat of the talk, I'll speak in depth about the other issues we've encountered with each of the three applications and our short- and long- term solu\r\ntions to the problems.\r\n\r\nThe state as of the end of 2014 appeared dire for Python at Braintree. All the old Python code in our stack is on the way out, and Python has been specifically recommended agaist for new projects. Our Python client library is used by some of our largest merchants, and is \r\nready for the future by supporting Python 2.6+ and Python 3.3+ in a single codebase. We also have a vibrant Python community at Venmo, our sister company. Both Braintree and Venmo support Python by attending, hosting, sponsoring, and speaking at meetups, conferences, and \r\nother events in Chicago, New York, and elsewhere. At Braintree, our Data Science team uses Python almost exclusively and they're becoming a bigger part of our business every day. We also use Collings and custom tooling written in Python to manage our infrastructure.\r\n"], "have_tickets": [true], "title": "Python Not Recommended", "speakers": "Adam Forsyth", "track_title": "Barria1 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["data-science", "pandas", "tornado", "collins", "case study", "pika", "sklearn"]}, "212": {"id": 212, "abstracts": ["PEP 484 introduces type hints for Python 3. Type hints can increase readability of our code for both humans and tools and lead to better and safer outcomes. And we'll prove it in this talk!\r\n\r\nWe're going to take a closer look at type hints, see practical examples of where they can be used and the value they provide. We'll see that simple class types and built-in collection types are often enough for our public API's. We'll also discuss how you can benefit from type hinting stubs for third-party libraries and briefly cover more advanced scenarios like generic types."], "have_tickets": [false], "title": "How you can benefit from type hints", "speakers": "Andrey Vlasovskikh", "track_title": "A2 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["type-hinting", "python", "static-analysis"]}, "150": {"id": 150, "abstracts": ["Orain dela urte batzuk asi genuen bidea azalduko dut, Python San Sebastian elkartea nola sotu genuen eta hortik pixkanaka pixkanaka nola sortzen joan den EuroPython sortzeko grina. \r\n\r\nGendeari nahi izan eskero eta lan egin eskero EuroPython bezelako kongresu bat antolatzea posible dela erakustea du helburu hitzaldi honek."], "have_tickets": [true], "title": "Karakate magaletik EuroPythoneko tontorrera", "speakers": "oier etxaniz", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["python", "MAL", "Euskara", "EuroPython", "Inspirational", "PySS"]}, "162": {"id": 162, "abstracts": ["Coding dojos are a very good way to share coding knowledge among members in a community, and, at the same time, introduce people into the language and community.\r\nSometimes, though, the typical approach to set coding dojos may prevent expert coders to join the session. This is the story of the pyBCN's dojos, so far.\r\n", "", ""], "have_tickets": [true, true], "title": "What dojos are and how we run these at pyBCN", "speakers": "N\u00faria Pujol, Ignasi Fosch", "track_title": "Barria1 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["Beginners", "python", "tdd", "Functional Programming", "unit-testing", "learning", "fun"]}, "180": {"id": 180, "abstracts": ["Python is a language of choice for developers with wide range of experience, for some it is a first programming language, others switch to Python after years of experience. Python provides friendly syntax and smooth learning curve. This sometimes leads to developers lacking comprehension of some more advanced constructs. \r\n\r\nIt happens that experienced developers jump into using Python and sometimes miss less known Python language constructs. On the other hands people who purposefully learned Python sometimes lack practical ideas for how to apply those constructs.\r\n\r\nThis talk will be specifically focused on the practical usages of advanced Python constructs like iterators, generators, decorators and context managers. Goal of the talk is to share ideas about how those constructs can be used for practical purposes in real projects. Prior knowledge is not required, there will be a brief introduction to every construct being presented."], "have_tickets": [true], "title": "Practical usage of advanced Python constructs", "speakers": "Andrey Syschikov", "track_title": "Barria1 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["python", "core"]}, "309": {"id": 309, "abstracts": ["Python and PostgreSQL, two tools we like to use for our projects but do you know everything about them?\r\n\r\nThe talk will give an overview of psycopg2, Peewee, SQLAlchemy, Alembic and multicorn, PL/Python, these libraries can be used with PostgreSQL.\r\n\r\n- psycopg2, the well known connector, this basic component is really useful, well documented and battle-tested and used by the most famous toolkits of the Python ecosystem.\r\n- Peewee, a minimalist ORM for Python, clear and brief, this ORM can be used if you want create a software with a minimalist ORM.\r\n- SQLAlchemy, a Python SQL toolkit and Object Relational Mapper, you can use this library to create your models and interact with them.\r\n- Alembic, a lightweight database migration tool for usage with SQLAlchemy, allows to create some migration scripts for your project.\r\n- multicorn is a Python wrapper over the Foreign Data Wrapper of PostgreSQL\r\n- PL/Python, a procedural language for PostgreSQL, allows to write functions in the Python language.\r\n\r\nYou can find this talk on https://speakerdeck.com/matrixise/python-and-postgresql-a-wonderful-wedding-english"], "have_tickets": [true], "title": "Python and PostgreSQL, a wonderful wedding", "speakers": "Stephane Wirtel", "track_title": "A2 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["python", "SQLAlchemy", "postgresql", "multicorn", "peewee", "dbapi"]}, "95": {"id": 95, "abstracts": ["What if you could focus on functionality rather than the glue code between services?\r\n \r\nLymph is an opinionated framework for writing services in Python. It features pluggable service discovery, request-reply messaging and pluggable pub-sub messaging. \r\n \r\nAs our development teams are growing, we're moving away from our monolithic architecture. We want to write services and not worry about the infrastructure's needs. We want development to be fast, quick and simply work.\r\n \r\nIn this talk we will show you how easy it is to write and run services with lymph.\r\nGo check http://lymph.io - we are accepting pull requests."], "have_tickets": [true], "title": "Stop trying to glue your services together; import lymph", "speakers": "Max Brauer", "track_title": "Google Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["werkzeug", "services", "zeromq", "events", "gevent", "web", "rpc", "open-source", "zookeeper", "rabbitmq", "framework"]}, "78": {"id": 78, "abstracts": ["MkDocs is a Python library for creating documentation with\r\nMarkdown. The primary goal of the project is to lower the barrier\r\nfor documentation writers and to help enable high quality prose\r\nbased documentation.\r\n\r\nThe primary maintainer of MkDocs will cover the following topics:\r\n\r\n- An introduction to MkDocs and the project goals.\r\n - How and why did the project start?\r\n - Who uses MkDocs today?\r\n\r\n- Discuss what we need to do to create great documentation and\r\n how MkDocs can help.\r\n\r\n- A tour of the key features currently in MkDocs\r\n - Adding MkDocs to your project.\r\n - Using themes in the documentation and making customisations\r\n - Publishing your documentation with ReadTheDocs and GitHub\r\n pages.\r\n\r\n- A look at the up and coming features in MkDocs and how you can\r\n help make these happen.\r\n\r\n- A comparison with Sphinx and why you should consider MkDocs."], "have_tickets": [true], "title": "MkDocs: Documenting projects with Markdown", "speakers": "Dougal Matthews", "track_title": "Barria1 Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["markdown", "open-source", "documentation", "mkdocs"]}, "53": {"id": 53, "abstracts": ["Locality sensitive hashing (LSH) is a technique for reducing complex data down to a simple hash code. If two hash codes are similar than the original data is similar. Typically, they are used for speeding up search and other similarity comparisons. \r\n\r\nIn this presentation I will discuss two ways of implementing LSH in python; the first method is completely stateless but only works on certain forms of data; the second is stateful but does not make any assumptions about the distribution of the underlying data. I will conclude the presentation by describing how we apply LSH to search at Lyst.\r\n", "", ""], "have_tickets": [true], "title": "Speeding up search with locality sensitive hashing", "speakers": "Maciej Kula", "track_title": "Barria2 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["data-science", "machine-learning", "bigdata", "search", "numpy", "sklearn"]}, "362": {"id": 362, "abstracts": ["PEP 484, \"Type Hints\", was accepted in time for inclusion in Python 3.5 beta 1. This introduces an optional standard for specifying types in function signatures. This concept was previously discussed as \"optional static typing\" and I similar to the way TypeScript adds optional type declarations to JavaScript.\r\n\r\nIn this talk I will discuss the motivation for this work and show the key elements of the DSL for describing types (which, by the way is backward compatible with Python 3.2, 3.3 and 3.4). Note: *Python will remain a dynamically\r\ntyped language, and I have no desire to ever make type hints\r\nmandatory, even by convention!*", "", ""], "have_tickets": [true], "title": "Type Hints for Python 3.5", "speakers": "Guido van Rossum", "track_title": "Google Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python"]}, "155": {"id": 155, "abstracts": ["RinohType is a document processor inspired by [LaTeX][1] and written in Python. It renders [reStructuredText][2] and [Sphinx][3] documents to PDF based on a document template and a style sheet. RinohType already implements many of the features that make LaTeX so great. Not stopping there, RinohType also tries to fix LaTeX's weaknesses; it should not only be easy to use, but easy to _customize_ and _extend_ as well. To minimize frustration when things go wrong, care is taken to provide descriptive warning and error messages. The powerful layout engine makes it easy to define custom page layouts. And the CSS-inspired stylesheets simplify the styling of document elements. At a lower level, Python makes the writing of extensions much more accessible when compared to TeX's rather arcane macro language.\r\n\r\nIn the talk, I would like to introduce RinohType to the Python community. No special prerequisite knowledge is required. \r\nReference: https://pypi.python.org/pypi/RinohType", "RinohType is a document processor inspired by [LaTeX][1] and written in Python. It renders [reStructuredText][2] and [Sphinx][3] documents to PDF based on a document template and a style sheet. RinohType already implements many of the features that make LaTeX so great. Not stopping there, RinohType also tries to fix LaTeX's weaknesses; it should not only be easy to use, but easy to _customize_ and _extend_ as well. To minimize frustration when things go wrong, care is taken to provide descriptive warning and error messages. The powerful layout engine makes it easy to define custom page layouts. And the CSS-inspired stylesheets simplify the styling of document elements. At a lower level, Python makes the writing of extensions much more accessible when compared to TeX's rather arcane macro language.\r\n\r\nIn the talk, I would like to introduce RinohType to the Python community. No special prerequisite knowledge is required. I will start off by discussing my motivation for starting RinohType development, its design goals and the currently available features. This will be followed by an example of how you can use RinohType to render a reStructuredText document to a neat PDF document, highlighting some of the features along the way. Next, we'll explore some of RinohType's internals such as the page layout engine and the style sheet system. We will explore how these can be used in a Python application to create a document from scratch.\r\n\r\nA first RinohType release was recently created. While this preview release is of alpha quality, it should be able to render most reStructuredText documents. It also includes a preliminary Sphinx builder. Please find more details in the package's description at [PyPI][4].\r\n\r\n [1]: http://en.wikipedia.org/wiki/LaTeX\r\n [2]: http://docutils.sourceforge.net/rst.html\r\n [3]: http://sphinx-doc.org\r\n [4]: https://pypi.python.org/pypi/RinohType", ""], "have_tickets": [true], "title": "RinohType, a document processor inspired by LaTeX", "speakers": "Brecht Machiels", "track_title": "Google Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["LaTeX", "reStructuredText", "PDF", "typesetting"]}, "227": {"id": 227, "abstracts": ["What if I told you that we\u2019ve built an open source \u201cWhatsApp\u201d-like RESTful API on the top of Pyramid? We've developed MAX: a real-time messaging service and activity stream that has become the key feature for a social intranet at the BarcelonaTech University\r\n\r\nWe will show how we designed and built MAX with performance in mind using state of the art Python technologies like Gevent, WSGI, and multi-threaded queue processing. We will also show you how we've managed to design a simple architecture guaranteeing both high scalability and performance, achieving connecting ratios over 30.000 students, teachers, and university staff.\r\n\r\nThe API is secured using oAuth 2.0 resource owner password credentials flow powered by our own oAuth server implementation (Osiris) also Pyramid-based. We are using MongoDB as general storage backend and RabbitMQ over websockets to support realtime and messaging."], "have_tickets": [true], "title": "MAX: Realtime messaging and activity stream engine", "speakers": "Carles Bruguera", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python", "restfull", "gevent", "REST", "open source", "mongodb", "wsgi", "web", "websockets", "api", "rabbitmq"]}, "135": {"id": 135, "abstracts": ["This talk is a sequel to \"Brainwaves for Hackers\" and illustrates some experiments you can do with a Neurosky Mindwave headset, a bluetooth enabled EEG device.\r\n \r\nI'll also talk some more about how to integrate the device with the IPython\r\nNotebook for real time viewing and how to use the Mindwave with the Raspberry Pi."], "have_tickets": [true], "title": "Brainwaves for Hackers 2.0", "speakers": "Andreas Klostermann", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["visualization", "biology", "Health-Science", "machine-learning"]}, "124": {"id": 124, "abstracts": ["When applications get deployed in enterprise environment or in large organizations, they need to support user accounts and groups that are managed externally, in existing directory services like FreeIPA or Active Directory, or federated via protocols like SAML. While it is possible to add support for these individual setups and protocols directly to application code or to Web frameworks or libraries, often it is better to delegate the authentication and identity operations to a frontend server and just assume that the application has to be able to consume results of the external authentication and identity lookups.\r\n\r\nIn this talk, we will look at Django Web framework and how with few small changes to the framework and to the application we can extend the functionality of existing RemoteUserMiddleware and RemoteUserBackend to consume users coming from enterprise identity management systems. We will focus on using proven OS-level components such as SSSD for Web applications, but will also show setup using federation.", "", ""], "have_tickets": [false], "title": "External authentication for Django projects", "speakers": "Jan Pazdziora", "track_title": "Barria2 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["django", "FreeIPA", "HTTP", "web", "Apache", "authentication", "sssd"]}, "229": {"id": 229, "abstracts": ["The quality of written code is an important factor in a final success of a software project.\r\nPerhaps there is no universal definition of high quality code, however usually it's characterized as clear and readable, well-designed, well tested and documented, easier to debug, maintain and extend, etc.\r\n\r\nPython was designed to be a highly readable language that would make it easier to develop high quality code. Nevertheless, programming language is only a tool in a software development process and in the end the quality of code depends mostly on its author's concept and decisions he make. \r\n\r\nIn this talk I would like to present some of ideas, techniques and tools for improving the quality of written code, tried out with a good result in everyday work on developing software in Python."], "have_tickets": [true], "title": "Writing quality code", "speakers": "Rados\u0142aw Jankiewicz", "track_title": "Google Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["python", "BestPractices", "Programming", "Coding"]}, "353": {"id": 353, "abstracts": ["Testing with purely random data on it's own doesn't get you very far. But\r\ntwo approaches that have been around for a while have new libraries that\r\nhelp you generate random input, that homes in on failing testcases.\r\n\r\nFirst **[Hypothesis][1]**, a Python implementation and update of the Haskell library\r\nQuickCheck. Known as property based testing, you specify a property of your\r\ncode that must hold, and Hypothesis does its best to find a counterexample.\r\nIt then shrinks this to find the minimal input that contradicts your\r\nproperty.\r\n\r\nSecond, **[American fuzzy lop][2]** (AFL), is a young fuzzing library that's already\r\nachieved an impressive trophy case of bug discoveries. Using\r\ninstrumentation and genetic algorithms, it generates test input that\r\ncarefully searches out as many code paths as it can find, seeking greater\r\nfunctional coverage and ultimately locating crashes and hangs that no other\r\nmethod has found. I'll be showing how with **[Python-AFL][3]** we can apply this\r\ntool to our Python code.\r\n\r\n [1]: https://hypothesis.readthedocs.org/en/latest/\r\n [2]: http://lcamtuf.coredump.cx/afl/\r\n [3]: http://jwilk.net/software/python-afl\r\n"], "have_tickets": [true], "title": "Testing with two failure seeking missiles: fuzzing and property based testing", "speakers": "Tom Viner", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["fuzzing", "Testing"]}, "304": {"id": 304, "abstracts": ["The talk will show the architecture and inners of a cloud hosting service we are developing in the University of Cambridge based on python technologies, mainly django, ansible, and celery.\r\n\r\nThe users manage their hosts using a web panel, developed in django, with common options: ability to create a vhost, associate domain names to vhosts, install packages, recover from backups, make snapshots, etc. Interaction between the panel and the hosts are made using ansible playbooks launched asynchronously by celery tasks. The VM architecture has been designed to be VM platform agnostic and to provide disk replication and high availability.\r\n\r\nThe University of Cambridge central IT services (http://www.ucs.cam.ac.uk/) also provides other services to the rest of the university like domain name registration, authentication, authorisation, TLS certificates, etc. We link all these other services with the hosting service by using APIs while keeping a microservices architecture approach. Thus, enabling the use/link of other services within the same hosting service web application. "], "have_tickets": [false], "title": "Architecture of a cloud hosting service using python technologies: django, ansible and celery", "speakers": "Dr A. Martin-Campillo", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["hosting", "django", "cloud", "ansible", "celery"]}, "201": {"id": 201, "abstracts": ["2000 urtean CodeSyntax sortu zenetik Python erabili dugu gure lan ia guztiak egiteko. Lan horiek egitean izandako (r)eboluzioa azalduko dugu hitzaldi honetan: python script arruntetatik, Zope aplikazioen zerbitzarian nabigatzaile baten programatzetik, fitxategi sisteman programatzera pasatu gara, Turbogears ere ikutu dugu eta orain Plone, Django eta Pyramid darabilgu.\r\n\r\nSince the beginning of our company in year 2000 we have been using Python to do our work. We will explain the (r)evolution we faced working with python during this 15 years: small python scripts, browser-based-development using Zope Application Server, we touched Turbogears and now Plone, Django and Pyramid applications."], "have_tickets": [true], "title": "Python gure etxean: (r)eboluzioa atzo, gaur eta bihar", "speakers": "Mikel Larreategi", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["web", "Plone", "django", "open-source"]}, "185": {"id": 185, "abstracts": ["Users and developers especially, hate waiting. Computing has adapted and we almost never wait for the computer for more then 10 seconds. One big exception is runnig a test suite which takes MINUTES on many projects. That is incredibly distracting, frustrating and dragging the whole concept of automated tests down. \r\n\r\nI present a technique and a tool (py.test plugin called \"testmon\") which automatically selects only tests affected by recent changes. Does it sound too good to be true? Python developers rightfully have a suspecting attitude towards any tool which tries to be too clever about their source code. Code completion and symbol searching doesn't need to be 100% reliable but messing with the test suite execution? I show that we can cut test suite execution time significantly but maintain it's reliability."], "have_tickets": [true], "title": "Mashing up py.test, coverage.py and ast.py to take TDD to a new level", "speakers": "Tibor Arpas", "track_title": "Barria2 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["py.test", "Testing"]}, "228": {"id": 228, "abstracts": ["Passwords are a pain for us all - programmers, users and admins alike. How can we reduce that pain, or eliminate it entirely?\r\n\r\nThis talk will\r\n\r\n - Review research into techniques that improve the usability of password systems, and mitigate shortcomings\r\n - Introduce the new standards Universal Authentication Framework (UAF) & Universal Second Factor (U2F)\r\n - Describe how they streamline authentication, even eliminate passwords entirely\r\n - Show how to integrate UAF/U2F in Django and other Python frameworks\r\n - Summarize the state of support for UAF & U2F in browsers, devices, and the wider world\r\n - Introduce Sonipass - a project to replace passwords, even on existing websites\r\n"], "have_tickets": [true], "title": "Taking the pain out of passwords and authentication", "speakers": "Alex Willmer", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 16:15:00", "duration": 60, "tags": ["experience", "u2f", "web", "authentication", "2fa", "passwords", "security", "fido", "2-factor", "uaf"]}, "308": {"id": 308, "abstracts": ["Whatever you need to do with Python, you can probably import a library for it. But what exactly happens when you use that import statement? How does a source file that you've installed or written become a Python module\r\nobject, providing functions or classes for you to play with?\r\n\r\nWhile the import mechanism is relatively well-documented in the reference and dozens of PEPs, sometimes even Python veterans are caught by surprise. And some details are little-known: did you know you can import from zip archives? Write CPython modules in C, or even a dialect of Lisp? Or import from URLs (which might not be a good idea)?\r\n\r\nThis talk explains exactly what can happen when you use the import statement \u2013 from the mundane machinery of searching PYTHONPATH through subtle details of packages and import loops, to deep internals of custom importers and C extension loading.", "", ""], "have_tickets": [true], "title": "Import Deep Dive", "speakers": "Petr Viktorin", "track_title": "Barria1 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["import", "core"]}, "211": {"id": 211, "abstracts": ["CeleraOne tries to bring its vision to Big Data by developing a unique platform for real-time Big Data processing. The platform is capable of personalizing multi-channel user flows, right-in time targeting and analytics while seamlessly scaling to billions of page impression. It is currently tailored to the needs of content providers, but of course not limited to.\r\n\r\n - The platform\u2019s architecture is based on four main layers:\r\n - Proxy/Distribution -- OpenResty/LUA for dynamic request forwarding\r\n - RESTful API -- several Python applications written using Pyramid web framework running under uWSGI server, which serve as an integration point for third party systems;\r\n - Analytics -- Python API for Big Data querying and distributed workers performing heavy data collection.\r\n - In-memory Engine -- CeleraOne\u2019s NoSql database which provides both data storage and fast business logic.\r\n\r\nIn the talk I would like to give insights on how we use Python in the architecture, which tools and technologies were chosen, and share experiences deploying and running the system in production.\r\n\r\n"], "have_tickets": [true], "title": "Building a RESTful real-time analytics system with Pyramid", "speakers": "Andrii Chaichenko", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["bigdata", "Pyramid", "highload", "real-time", "analytics"]}, "188": {"id": 188, "abstracts": ["In this talk, Software Engineer Joao Santos will describe how the engineering team at Zalando has been migrating to local Git hooks to ensure that engineers can work autonomously and flexibly. Zalando---Europe\u2019s leading online fashion platform for men, women and children-- began shifting from SVN to Git in late 2013. Santos and his colleagues used Python to create a Git update hook that enabled the team to reject changes to a branch while still allowing changes to other branches. He\u2019ll explain why his team chose Python for this job instead of a bash script, point out mistakes made during the process (and solutions his team used to fix them), and the benefits generated by this migration. He\u2019ll also talk about turnstile: a set of open-source, configurable, optional local Git hooks, created by the Zalando team, that enables engineers to abide by internal rules for committing code while following their own coding style and workflow preferences."], "have_tickets": [false], "title": "Using Git Hooks to Help Your Engineering Teams Work Autonomously", "speakers": "Jo\u00e3o Santos", "track_title": "Barria2 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["yaml", "git-hooks", "FOSS", "agile", "Git", "CLI", "open-source", "Development"]}, "100": {"id": 100, "abstracts": ["Take a big, non-multithreaded program, and run in on multiple cores!\r\n\r\nPyPy, the Python implementation written in Python, experimentally\r\nsupports Software Transactional Memory (STM). It runs without the\r\nGlobal Interpreter Lock (GIL).\r\n\r\nThe strength of STM is not only to remove the GIL, but to also enable\r\na novel use of multithreading, inheritently safe, and more useful in\r\nthe general case than other approaches like OpenMP. The main news\r\nfrom last year's presentation is that there is now a way to get\r\nreports about the \"STM conflicts\", which is essential to go past toy\r\nexamples. With it, you can incrementally remove conflicts from large\r\ncode bases until you see a benefit from PyPy-STM. The goal of the\r\ntalk is to give several concrete examples of doing that."], "have_tickets": [true], "title": "The GIL is dead: PyPy-STM", "speakers": "Armin Rigo", "track_title": "Google Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["PyPy", "GIL", "concurrency"]}, "7": {"id": 7, "abstracts": ["SaltStack is a thriving configuration management system written in Python that leverages YAML and Jinja2 which, by now, probably needs no introduction.\r\n\r\nThis talk will cover a brief summary of why we need configuration management tools, followed by a full dive into SaltStack, its features, pros and cons, how to use it and how to extend it. By the end of this talk you will have gone from knowing little or nothing about SaltStack, to being able to deploy your own setup.\r\n\r\nThis talk will be targeted to either seasoned Python developers who are taking their first steps in the system administration world, or established system administrators who secretly love Python and prefer to stay away of configuration management systems based on other languages.\r\nIts advisable that attendees have some familiarity with Python as well as with system administration concepts. Also, this presentation will be focused on GNU/Linux systems, so it is expected that attendees are comfortable with some of its concepts.", "", ""], "have_tickets": [true], "title": "Salting things up in the sysadmin's world", "speakers": "Juan Manuel Santos", "track_title": "Barria1 Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["saltstack", "management", "python", "configuration", "linux"]}, "21": {"id": 21, "abstracts": ["TDD is not about tests!\r\nWell, actually, it\u2019s not **just** about writing tests, or writing them before the code. This talk will show you how to use tests to really drive development by transforming business requirements into tests, and allowing your code to come as their natural consequence.\r\n\r\nToo often this key aspect is neglected and the result is that tests and code are somehow \u201cdisconnected\u201d. The code is not as short and efficient as it could be, and the tests are not as effective. Refactoring is not always easy, and over time all sorts of issues start to come out of the surface.\r\n\r\nHowever, we will show that when TDD is done properly, tests and code merge beautifully into an organic whole that fulfills the business requirements, and provides all sorts of advantages: your code is minimal, easy to amend and extend, readable, clean. Your tests will be effective, short and focused, and allow for light-hearted refactoring and excellent coverage.\r\n\r\nWe will provide enough information and examples to spark the curiosity of the novice, and satisfy the need of a deeper insight for the intermediate, and help you immediately benefit from this transformative technique that is still often underestimated and misunderstood."], "have_tickets": [true], "title": "TDD is not about tests!", "speakers": "Fabrizio Romano", "track_title": "A2 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python", "tdd", "agile", "Best Practice", "Development", "Testing", "Coding"]}, "348": {"id": 348, "abstracts": ["Python focuses a lot on writing readable code and also tries to make solutions obvious, but this doesn't necessarily mean that you cannot write unreadable code or design your code in ways which makes it hard to extend or maintain.\r\n\r\nThis talk will show some useful idioms to use when writing Python code, how to structure your modules and also goes into details on which techniques to use and which to think about twice, based on 20 years of experience writing Python."], "have_tickets": [true], "title": "Python idioms to help you write good code", "speakers": "Marc-Andre Lemburg", "track_title": "Google Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["python", "design", "idioms", "experience", "Best Practice", "Coding"]}, "286": {"id": 286, "abstracts": ["Meta classes are an advanced feature in python, in this talk i will try to explain what they are, how they work and i will show some code as well. \r\nThis talk is for anyone who would like to see what happens under the hood when you create a class in Python and how to intercept the class creation process and modify it.\r\n", "", ""], "have_tickets": [false], "title": "Python Advanced Basics (Meta Classes)", "speakers": "Nimrod Wandera", "track_title": "Barria1 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python"]}, "75": {"id": 75, "abstracts": ["I will explain how CPython objects are built, from simple objects\r\nlike int or None to complex ones like dict. To make it funnier, I\r\nwill play to change instance data directly using ctypes and do\r\n\"really bad things\" like truncating tuples."], "have_tickets": [true], "title": "Playing with CPython Objects Internals", "speakers": "Jes\u00fas Espino", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["low-level", "python", "cpython"]}, "133": {"id": 133, "abstracts": ["The talk discusses the challenges of implementing a Citizen Science Paradigm in a Python-centric platform, and the solutions devised for the System for observation and monitoring of Marine Alien Species, currently used by the italian Institute for Environmental Protection and Research (ISPRA). \"Alien\" Species means species introduced into a natural environment where they are not normally found.\r\nTopics includes strategies for crowd-friendly forms, work-flow definition for collected data, choice of the best technologies for its components: app for android devices, web application for citizens and experts, webGIS for data browsing and web services for data exporting."], "have_tickets": [true], "title": "Citizen Science: Tracking Aliens with Python!", "speakers": "Alessio Siniscalchi", "track_title": "Barria2 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["Plone", "postgresql", "webGIS", "citizen-science"]}, "111": {"id": 111, "abstracts": ["Before its first major version, Elasticsearch was only used as a \"secondary\" database, and search engine.\r\nThe releases added a snapshort/restore feature, making it a great full featured database\r\n\r\nThis talk will focus on how we integrate Elasticsearch into our stack, and the multiple usage we make of it: from storing business events to IOT devices metrics."], "have_tickets": [true], "title": "Python and elasticsearch 101", "speakers": "Beno\u00eet Calvez", "track_title": "A2 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["databases", "development-process", "elasticsearch"]}, "129": {"id": 129, "abstracts": ["[Apache Spark][1] is a computational engine for large-scale data processing. It\r\nis responsible for scheduling, distribution and monitoring applications which\r\nconsist of many computational task across many worker machines on a computing\r\ncluster.\r\n\r\nThis Talk will give an overview of PySpark with a focus on Resilient\r\nDistributed Datasets and the DataFrame API. While Spark Core itself is written\r\nin Scala and runs on the JVM, PySpark exposes the Spark programming model to\r\nPython. It defines an API for Resilient Distributed Datasets (RDDs). RDDs are a\r\ndistributed memory abstraction that lets programmers perform in-memory\r\ncomputations on large clusters in a fault-tolerant manner. RDDs are immutable,\r\npartitioned collections of objects. Transformations construct a new RDD from a\r\nprevious one. Actions compute a result based on an RDD. Multiple computation steps\r\nare expressed as directed acyclic graph (DAG). The DAG execution model is \r\na generalization of the Hadoop MapReduce computation model.\r\n\r\nThe Spark DataFrame API was introduced in Spark 1.3. DataFrames envolve Spark's\r\nRDD model and are inspired by Pandas and R data frames. The API provides\r\nsimplified operators for filtering, aggregating, and projecting over large\r\ndatasets. The DataFrame API supports diffferent data sources like JSON\r\ndatasources, Parquet files, Hive tables and JDBC database connections.\r\n\r\nResources:\r\n\r\n- [An Architecture for Fast and General Data Processing on Large Clusters][2] Matei Zaharia\r\n- [Spark][6] Cluster Computing with Working Sets - Matei Zaharia et al.\r\n- [Resilient Distributed Datasets][5] A Fault-Tolerant Abstraction for In-Memory Cluster Computing -Matei Zaharia et al.\r\n- [Learning Spark][3] Lightning Fast Big Data Analysis - Oreilly\r\n- [Advanced Analytics with Spark][4] Patterns for Learning from Data at Scale - Oreilly\r\n\r\n [1]: https://spark.apache.org\r\n[2]: http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf\r\n[3]: http://shop.oreilly.com/product/0636920028512.do\r\n[4]: http://shop.oreilly.com/product/0636920035091.do\r\n[5]: https://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf\r\n[6]: http://www.cs.berkeley.edu/~matei/papers/2010/hotcloud_spark.pdf\r\n\r\n"], "have_tickets": [false], "title": "PySpark - Data processing in Python on top of Apache Spark.", "speakers": "Peter Hoffmann", "track_title": "Google Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["bigdata", "distributed-systems", "data-science", "analytics"]}, "18": {"id": 18, "abstracts": ["An overview of the currently available Python game development libraries and frameworks and how is Python currently being used in the videogame industry.\r\n\r\nPresentation of Kobra, a modern open source Python game development framework with ECS (Entity Component System) architecture and C++ bindings."], "have_tickets": [true], "title": "Python Gamedev MLG", "speakers": "Alejandro Garcia", "track_title": "A2 Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["gamedev", "python", "OpenGL", "c++"]}, "80": {"id": 80, "abstracts": ["Mixins are a great way to keep an application decoupled. This talk is about building mixins and dissecting what's behing the mixin \"magic\" and that, in fact, there is no magic involved at all. The main focus will be on Django framework while digging into mixins. When using Django class-based views, mixins feel very natural.\r\n\r\n**Goal**: by the end of this talk, every developer should be confident about creating his or her own custom mixins.\r\n\r\n**Prerequisites:**\r\n - basic understanding of OOP principles and their application in Python\r\n - Django web framework\r\n\r\nGenerally mixins in Python are pretty straight-forward, easy to create and use. Nevertheless a lot of developers stay away from them. I think attendees of this talk will be interested to learn that mixins are not that complex and their benefit is tremendous."], "have_tickets": [true], "title": "Demystifying Mixins with Django", "speakers": "Ana Balica", "track_title": "Barria2 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["mixins", "OOP", "django"]}, "232": {"id": 232, "abstracts": ["So often, we've been encouraged to be smart in our development. \"Work smarter not harder!\" say the encouraging posters. But the desire to be smart, and be seen to be smart, is hurting. The design suffers, the code suffers, and it's hard to recruit developers smart enough to cope with the problems caused.\r\n\r\nIn this talk, I'm proposing an alternative to being smart: **_DumbDev_**. Let's use our brains for enjoyable, interesting things, rather than wrestling with code written for smart developers.\r\n\r\n**So what do I mean by _dumb_?**\r\n\r\nWell, I don't mean 'ignorant'. A clever person can be ignorant of some important information, and learn it. With ignorance, there is hope. I'm also not talking about its opposite, 'stupidity'. This occurs when someone is given the information or advice, and chooses to ignore it. Dumb isn't stupid. Nor is it silent, as in someone who can't speak.\r\n\r\nInstead, the picture I have is of one of the early computers: very small RAM, disk space measured in KB, and a woefully inadequate CPU. In other words, slow, with very little working memory and limited persistent storage. Hey, this describes my brain -- and I realise that's an asset! I will write better software if I take this into account.\r\n\r\nHere's the first **_DumbDev_** rule, putting a sensible limit on complexity:\r\n\r\n> **1. All diagrams must fit on a Noughts and Crosses (Tic-tac-toe) board**.\r\n\r\n> _One central class/concept and up to eight things linked. Larger structures need to be subdivided._\r\n\r\n [1]: http://www.phyast.pitt.edu/~micheles/python/plone-hierarchy.png\r\n [2]: http://www.artima.com/weblogs/viewpost.jsp?thread=246341\r\n", "So often, we've been encouraged to be smart in our development. \"Work smarter not harder!\" say the encouraging posters. But the desire to be smart, and be seen to be smart, is hurting. The design suffers, the code suffers, and it's hard to recruit developers smart enough to cope with the problems caused.\r\n\r\nIn this talk, I'm proposing an alternative to being smart: **_DumbDev_**. Let's use our brains for enjoyable, interesting things, rather than wrestling with code written for smart developers.\r\n\r\n**So what do I mean by _dumb_?**\r\n\r\nWell, I don't mean 'ignorant'. A clever person can be ignorant of some important information, and learn it. With ignorance, there is hope. I'm also not talking about its opposite, 'stupidity'. This occurs when someone is given the information or advice, and chooses to ignore it. Dumb isn't stupid. Nor is it silent, as in someone who can't speak.\r\n\r\nInstead, the picture I have is of one of the early computers: very small RAM, disk space measured in KB, and a woefully inadequate CPU. In other words, slow, with very little working memory and limited persistent storage. Hey, this describes my brain -- and I realise that's an asset! I will write better software if I take this into account.\r\n\r\nSo, I'm a **_DumbDev_**, which means I can't hold in my mind the infamous [Plone Site class hierarchy][1] (see [Michele Simionato's article][2]). Rather than beat myself up about this, I can say, \"Hold on, maybe deep inheritance is a bad idea...\" There is some debate about the number of things we can think about simultaneously: it may be 7, 9, 5, 4 or even only 3. We can learn some tricks to appear to cope with more, but most of us can't easily do 38. \r\n\r\nHere's the first **_DumbDev_** rule, putting a sensible limit on complexity:\r\n\r\n> **1. All diagrams must fit on a Noughts and Crosses (Tic-tac-toe) board**.\r\n\r\n> _One central class/concept and up to eight things linked. Larger structures need to be subdivided._\r\n\r\nThere are seven further rules for me to explain in this talk. I will demonstrate the benefits of the **_DumbDev_** approach, with good and bad examples. At the end of the presentation, I hope you will realise that you're a better developer than you thought at the start. The next time it takes you two hours to debug a simple exception, you'll know that it's not you. It's because the system wasn't written using **_DumbDev_** rules.\r\n\r\nLet's free our brains for more interesting things, like having ideas and solving problems. \r\n\r\nLet's do **_DumbDev_**.\r\n\r\n [1]: http://www.phyast.pitt.edu/~micheles/python/plone-hierarchy.png\r\n [2]: http://www.artima.com/weblogs/viewpost.jsp?thread=246341\r\n", ""], "have_tickets": [true], "title": "DumbDev -- eight rules for dumb development", "speakers": "Rob Collins", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["massage", "best-practices", "dumbdev", "unit-testing", "rules", "community", "software-design"]}, "39": {"id": 39, "abstracts": ["Reahl is a full-featured web framework with a twist: with Reahl you write a web application purely in Python. HTML, JavaScript, CSS and all those cumbersome web technologies (and a few other lower level concerns) are hidden away from you. As far as web frameworks go this is truly a paradigm shift: away from the cobwebs of all the different web technologies, template languages and low-level details -- towards being able to focus on the goals at hand instead, using a single language.\r\n\r\nIn this talk I will give you a brief idea of what Reahl is all about: why it is worthwhile doing, how it works, where we are and what still needs to be done. I hope to convince you that this is an important direction for web frameworks, and of how unique Reahl is. Developing such an abstract framework is an ambitious goal. I'd like to convey the message that what we have achieved so far, and the strategy lessons learnt along the way demonstrate this goal to be realistic and practical.\r\n\r\n"], "have_tickets": [true], "title": "Reahl: The Python-only web framework", "speakers": "Iwan Vosloo", "track_title": "Barria1 Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["web", "open-source"]}, "41": {"id": 41, "abstracts": ["[Ansible ][1]is the _new cool kid in town_ in the configuration management world. It is easy to learn, fast to setup and works great! In the first part of the talk, I will do a super-fast introduction to Ansible for the newcomers.\r\n\r\nIf you are a Pythonista, you can hack and leverage Ansible in many ways. In the second part of the talk, I will describe some options to extend and embed Ansible with Python:\r\n\r\n - Embedding Ansible with the Python API\r\n - Extending Ansible: creating modules, plugins and callbacks\r\n\r\nPrevious experience with Ansible is advised in order to get the most of this talk, but beginners to the tool will also get an overview of the capabilities of this kind of integration.\r\n\r\n [1]: http://www.ansible.com/home\r\n"], "have_tickets": [true], "title": "Extending and embedding Ansible with Python", "speakers": "Alejandro Guirao Rodr\u00edguez", "track_title": "A2 Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["management", "Tooling", "configuration", "DevOps", "ansible"]}, "70": {"id": 70, "abstracts": ["The talk is about the implementation of multibody simulation in the scientific python world on the way to a stage usefull for engineering and educational purposes.\r\nMultibody simulation (MBS) requires two major steps: first the formulation of the specific mechanical problem. Second step is the integration of the resulting equations.\r\nFor the first step we use the package sympy which is on a very advanced level to perform symbolic calculation and which supports already Lagrange's and Kane's formalism. The extensions we made are such that a complex mechanical setup can be formulated easily with several lines of python code. The functionality is analogous to well known MBS-tools, with that you can assemble bodies, joints, forces and constraints. Also external forces even in a cosimulation model can be added on top. The second step, the integration is done via ode-integrators implemented in scipy.\r\nFinally for visual validation the results are visualized with the vpython package and for further analytics with matplotlib.\r\n\r\nConclusion: not only highly constrained pendulums with many rods and springs but also driving simulation of passenger cars an be performed with our new extension using python packages off the shelf."], "have_tickets": [true], "title": "Multibody Simulation using sympy, scipy and vpython", "speakers": "Oliver Braun", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["Mechanics", "sympy", "Engineering", "vpython", "Physics", "visualization", "education", "scipy"]}, "19": {"id": 19, "abstracts": ["Times changed, with introducing asyncio to Python standard library many and many developers think about switching from previous solutions to aio stack. Talk will introduce aiohttp, aioredis & aiopg - cornerstones for building modern Python backends and show common problems & solutions while switching to aio stack.\r\n\r\nBut not only Python changed. In second part, I'll talk about what new happened in frontend development, how new ES6 features modified JavaScript, and what React.js & Flux means for Python developers. \r\n\r\nTalk will cover real-world web application, which used aio stack on backend and React.js & Flux approach on frontend and provide useful observations for other developers interested in these topics."], "have_tickets": [true], "title": "Asyncio Stack & React.js or Development on the Edge", "speakers": "Igor Davydenko", "track_title": "Google Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["es6", "aiohttp", "aiopg", "react.js", "flux", "api", "aioredis", "python3", "asyncio"]}, "99": {"id": 99, "abstracts": ["In this talk I'm going to introduce Scrapinghub's new open source framework [Frontera][1]. Frontera allows to build real-time distributed web crawlers and website focused ones. \r\n\r\nOffering:\r\n\r\n - customizable URL metadata storage (RDBMS or Key-Value based),\r\n - crawling strategies management,\r\n - transport layer abstraction.\r\n - fetcher abstraction.\r\n\r\nAlong with framework description I'll demonstrate how to build a distributed crawler using [Scrapy][2], Kafka and HBase, and hopefully present some statistics of Spanish internet collected with newly built crawler. Happy EuroPythoning!\r\n\r\n [1]: https://github.com/scrapinghub/frontera\r\n [2]: http://scrapy.org/\r\n"], "have_tickets": [true], "title": "Frontera: open source large-scale web crawling framework", "speakers": "Alexander Sibiryakov", "track_title": "A2 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["scrapy", "kafka", "hbase", "webcrawling", "distributed-systems"]}, "279": {"id": 279, "abstracts": ["This talks is about automation and the use of Python scripts to speed up repetitive tasks.\r\n\r\nIt's for developers, sysops, devops, but also any kind of user that want improve his daily routine.\r\n\r\nI will talk about the use of Python with different tools for different platforms: Keyboard Maestro/Alfred/Hazel on OsX and Synapse/Kupfer/AutoKey on Linux.\r\n\r\nThere will be presented some sample script to give an idea of the potentiality of Python mixed with great tools, and these are some of the topics that I will cover:\r\n\r\n - text manipulation;\r\n - document template management;\r\n - clipboard management;\r\n - stuff internet activities (url shortening, web scraping, etc.);\r\n - list management.\r\n - etc.\r\n\r\n"], "have_tickets": [true], "title": "Python for IT specialists' tasks automation", "speakers": "Gianluca Nieri", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["automation", "development-tools", "DevOps", "system-administration"]}, "101": {"id": 101, "abstracts": ["DEPOT ( http://depot.readthedocs.org/en/latest/ ) is a file storage framework born from the experience on a project that saved a lot of files on disk, until the day it went online and the customer system engineering team decided to switch to Heroku, which doesn't support storing files on disk.\r\n\r\nThe talk will cover the facets of a feature \"saving files\" which has always been considered straightforward but that can become complex in the era of cloud deployment and when infrastructure migration happens. \r\n\r\nAfter exposing the major drawbacks and issues that big projects might face on short and long terms with file storage the talk will introduce DEPOT and how it tried to solve most of the issues while providing a super-easy-to-use interface for developers. We will see how to use DEPOT to provide attachments on SQLAlchemy or MongoDB and how to handle problems like migration to a different storage backend and long term evolution.\r\n\r\nLike SQLAlchemy makes possible to switch your storage on the fly without touching code, DEPOT aims at making so possible for files and even use multiple different storages together."], "have_tickets": [true], "title": "Why storing files for the web is not as straightforward as you might think.", "speakers": "Alessandro Molina", "track_title": "Barria2 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["web", "HTTP.", "mongodb", "cloud", "SQLAlchemy"]}, "147": {"id": 147, "abstracts": ["Haskell is very different from Python, and provide different tools to library and framework designers. As a result, its ecosystem is filled with libraries and frameworks that solve the same problems we try to solve in our favorite programming languages, but with a very different approach.\r\n\r\nThis talk is an exploration of the Haskell ecosystem, from the point of view of a Python developer. \r\nWe will review various popular Haskell libraries and frameworks, focusing on the library design. The goal is to provide the audience a sneak peak of some different ways to tackle problems, and hopefully to inspire library authors to explore some design space that we don't usually explore in Python.\r\n\r\nThis talk should be interesting to any intermediate Python programmer who is curious about other ways to solve problems. No Haskell knowledge is required from the audience."], "have_tickets": [true], "title": "Through the lens of Haskell: exploring new ideas for library design", "speakers": "Georges Dubus", "track_title": "A2 Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["design", "library", "Haskell"]}, "165": {"id": 165, "abstracts": ["As a web developer, I find myself being asked to make increasing numbers of data visualizations, interactive infographics, and more. d3.js is great, as are many other javascript toolkits that are out there. But if I can write more Python and less JavaScript... well, that makes me happy! \r\n\r\nBokeh is a new Python library for interactive visualization. Its origins are in the data science community, but it has a lot to offer web developers. In this mini-tutorial, I'll run through how to build a data visualization in Bokeh and how to hook it into your web application. This will be a real-world example, that was previously built in d3.js. \r\n\r\nAlong the way, I'll provide tips and tricks that I've discovered in my experience including how Bokeh works wonderfully with the iPython notebook which I use to prototype my visualizations, and many data science people use as their native way to explore data.\r\n\r\nFor those of you who already know a little Bokeh, I'll be covering the new \"actions framework\" that lets you write JS callbacks in your python code so you can do lots of interactions all on the client side.\r\n"], "have_tickets": [true], "title": "Getting started with Bokeh / Let's build an interactive data visualization for the web..in Python!", "speakers": "Sarah Bird", "track_title": "Barria2 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["open-data", "data-science", "javascript", "visualization", "bigdata", "bokeh", "pandas", "web", "django", "open-source", "canvas", "data", "graphics"]}, "247": {"id": 247, "abstracts": ["Wrappers are an essential tool for interacting with web APIs. They reduce the amount of work needed to make requests and sometimes, only sometimes prevent the developer from dealing with extensive documentations. It\u2019s common to encounter libs that require not only the study of their own documentation, but also the APIs one, duplicating the needed work. This is caused because wrappers do not follow a design pattern, each developer creates it\u2019s own design, coding style and use their preferred tools. \r\n\r\n[Tapioca][1] is what can be called: \"a wrapper generator\u201d. Creating API wrappers with Tapioca is extremely easy and fast. For example, it took 1 hour to write the full wrapper for the [Parse.com][2] REST API. But this is not the more important thing, Tapioca libs have a similar interface so once understood how they work, developers can work with any other without the need to learn a new interface. \r\n\r\nTapioca is also thought to comply with REST features and takes HATEOAS (Hypermedia as the engine of application state) seriously, so \u201cfollowing\u201d links and pagination are natively supported. Explorability is also a key concept and developers are encouraged to play with Tapioca packages and find their way through APIs before writing their final code. Although there are some production ready [Tapioca wrappers][3], it is a work in progress, there are still many features to be explored.\r\n\r\n [1]: https://github.com/vintasoftware/tapioca-wrapper\r\n [2]: http://parse.com\r\n [3]: https://github.com/vintasoftware/tapioca-wrapper#tapioca-comes-in-many-flavours"], "have_tickets": [true], "title": "What is wrong with API wrappers and how can we do better", "speakers": "Filipe Ximenes", "track_title": "A2 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["HTTP", "ipython", "web", "api", "requests", "wrapper"]}, "195": {"id": 195, "abstracts": ["In this talk I will present some tools for working with Geographic Information Systems in Python.\r\n\r\nGeographic information Systems are widely used for managing geographic (map) data. As an example I will present how to use Open Street Map data (http://openstreetmap.org/), in routing, traffic planning and estimation of pollution emission.\r\n\r\nFor the purpose of the project EcoSense (http://ecosense.au.dk), GPS data from users smartphones are mapped to OSM roads. The map matching algorithm is written in Python and uses data from the database PostgreSQL, with the PostGIS extension. \r\n\r\nOne of the goals of the EcoSense project is to devise methods to improve the estimation of air quality in urban environments.\r\n"], "have_tickets": [true], "title": "How to GIS with Python", "speakers": "Anders Lehmann", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["GIS", "bigdata", "Mapmatching", "PostGIS", "postgresql"]}, "296": {"id": 296, "abstracts": ["To accompany an upcoming O'Reilly book 'Data-visualisation with Python and Javascript: crafting a dataviz toolchain for the web' (see [here][1]) this talk aims to sketch out the toolchain by transforming some dry Wikipedia data (Nobel prize-winners) into a far more engaging and insightful web-visualisation. This transformative cycle uses Python big-hitters such as Scrapy, Pandas and Flask, the latter delivering data to Javascript's D3.\r\n\r\nWhile Python is fast becoming the goto language for data-processing/science, the visual fruits of that labour hit the wall of the web, where there is only one first-class language, Javascript. To develop a data-viz toolchain for the modern world, where web-presentation is increasingly mandated, making Python and Javascript play nicely is fundamental. This talk aims to show that the perceived wall between the two languages is actually a thin, permeable membrane and that, with a bare minimum of web-dev, one can get on with programming seamlessly in both.\r\n\r\n [1]: http://kyrandale.com/blog/data-visualization-python-javascript/\r\n"], "have_tickets": [true], "title": "Data-visualisation with Python and Javascript: crafting a data-viz toolchain for the web", "speakers": "Kyran Dale", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["d3", "visualization", "matplotlib", "flask", "pandas", "web", "javascript", "scrapy"]}, "199": {"id": 199, "abstracts": ["Today, we almost exclusively think of code in software projects as a collection of text files. The tools that we use (version control systems, IDEs, code analyzers) also use text as the primary storage format for code. In fact, the belief that \"code is text\" is so deeply ingrained in our heads that we never question its validity or even become aware of the fact that there are other ways to look at code.\r\n\r\nIn my talk I will explain why treating code as text is a very bad idea which actively holds back our understanding and creates a range of problems in large software projects. I will then show how we can overcome (some of) these problems by treating and storing code as data, and more specifically as a graph. I will show specific examples of how we can use this approach to improve our understanding of large code bases, increase code quality and automate certain aspects of software development.\r\n\r\nFinally, I will outline my personal vision of the future of programming, which is a future where we no longer primarily interact with code bases using simple text editors. I will also give some ideas on how we might get to that future.\r\n\r\nMore information about me:\r\n\r\n- Github: https://github.com/adewes\r\n- Twitter: https://twitter.com/japh44\r\n- Website: http://www.andreas-dewes.de/en", "Today, we almost exclusively think of code in software projects as a collection of text files. The tools that we use (version control systems, IDEs, code analyzers) also use text as the primary storage format for code. In fact, the belief that \"code is text\" is so deeply ingrained in our heads that we never question its validity or even become aware of the fact that there are other ways to look at code.\r\n\r\nIn my talk I will explain why treating code as text is a very bad idea which actively holds back our understanding and creates a range of problems in large software projects. I will then show how we can overcome (some of) these problems by treating and storing code as data, and more specifically as a graph. I will show specific examples of how we can use this approach to improve our understanding of large code bases, increase code quality and automate certain aspects of software development.\r\n\r\nFinally, I will outline my personal vision of the future of programming, which is a future where we no longer primarily interact with code bases using simple text editors. I will also give some ideas on how we might get to that future.\r\n\r\nGoals:\r\n\r\n- Convince people that treating code primarily as text is a really bad idea.\r\n- Show which insights we can gain when treating code as data and storing it in a format that allows us to analyze and process it algorithmically.\r\n- Give people a vision on how the future of programming might look like and how we might get there.\r\n\r\nPrerequisites:\r\n\r\n- A basic understanding of programming concepts (files, compilers / interpreters, version control [not really necessary though]).\r\n- An interest in best practices and writing good code.\r\n\r\nOutline:\r\n\r\n- Introduction (who am I, why I'm here) - 3 mins\r\n- Short history of code storage formats - wires, punch cards, text, graphs and back to text (5 mins)\r\n- Why storing code as text is a bad idea - motivation and examples (5 mins)\r\n- Alternative ways to think about code - graphs and trees (5 mins)\r\n- Building a graph storage engine for Python code - principles and use cases (5 mins)\r\n- Demo time - visualizing the graph, tracking the evolution of code, finding duplicates and problems, automatically refactoring the graph (5 mins)\r\n- The future of programming - increase automation, decrease errors (5 mins) \r\n- Building the future - what we need and how to build it (5 mins)\r\n- Ending remarks (2 mins)\r\n\r\n(40 minutes total [probably less] + 5 minutes of Q&A)\r\n\r\nMy motivation:\r\n\r\nI talked about data-driven code analysis at the PyCon Montreal 2015, and many people said that they really enjoyed my talk and would like to learn more about data-driven code analysis and treating code as a graph. I'm happy to oblige and give a talk about this at the EuroPython!\r\n\r\nOther events I spoke at (selection):\r\n\r\n- 31C3 (Chaos Communication Congress) Hamburg: I gave a talk on quantum computing in front of 1.800 people, which received very positive feedback (https://www.youtube.com/watch?v=aXtE0Zeszho)\r\n- PyCon Montreal - I spoke about data-driven code analysis in front of 1.000 people. The talk received great interest and very positive feedback (https://us.pycon.org/2015/schedule/presentation/341/)\r\n\r\nMore information about me:\r\n\r\n- Github: https://github.com/adewes\r\n- Twitter: https://twitter.com/japh44\r\n- Website: http://www.andreas-dewes.de/en", ""], "have_tickets": [true], "title": "Code is not text! How graph technologies can help us to understand our code better.", "speakers": "Andreas Dewes", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["python", "visualization", "bigdata", "Programming", "code", "graphdatabases", "futureofcoding", "Best Practice"]}, "343": {"id": 343, "abstracts": ["This is a talk for mediocre Python programmers by a mediocre programmer. PyPy\r\nis an alternative implementation of Python. It is notorious for being fast, but\r\nalso for using clever algorithms pertaining to advanced concepts such as type\r\ninference, garbage collection, just-in-time compilation, etc. So, can we,\r\nmediocre programmers, realistically use PyPy?\r\n\r\nYes, absolutely. In fact, PyPy developers did all that hard work so that we\r\nwouldn't have to. As we'll see, it runs most Python code exactly like CPython\r\ndoes, save that it magically makes it faster.\r\n\r\nPorting existing applications is always more involved than running a simple\r\nscript, so we'll also examine likely difficulties such as code relying on\r\nCPython implementation details, and dependencies on C extensions, and explore\r\nsimple principles to let PyPy run your code even faster.\r\n\r\nFinally, we'll have a glimpse of the future by looking at what's brewing in \r\nthe PyPy lair, such as software transactional memory, new speed optimisations,\r\nbetter support for Python 3 and NumPy, ...\r\n\r\n\r\n"], "have_tickets": [true], "title": "PyPy for mediocre programmers", "speakers": "Ronan Lamy", "track_title": "Barria1 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["PyPy"]}, "156": {"id": 156, "abstracts": ["This talk introduces the asyncio module. I'll cover what it's for, how it works and describe how I used it to write a real-world networked application (a distributed hash table). We'll explore the event loop, coroutines, futures and networking with examples from my code. This won't be an exhaustive exposition. Rather, attendees will grasp enough of asyncio to continue with their own studies.\r\n\r\nBy the end of this introductory talk I hope attendees will want to learn more about asyncio and perhaps give it a try in their own projects."], "have_tickets": [false], "title": "Lessons learned with asyncio (\"Look ma, I wrote a distributed hash table!\")", "speakers": "Nicholas Tollervey", "track_title": "A2 Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["asyncio", "introduction"]}, "317": {"id": 317, "abstracts": ["Talk about mistakes we made and best practises we have elaborated while implementation Behave Driven Development into one of the projects. Great idea to coverage whole application with functional tests fall down in development chaos and reborn on new better foundations.\r\n\r\nProject referred is web-based big data management which main features are transcoding and file sharing. Thanks to Django and many Python frameworks we have web interface for it and we are able to run automation tests with Selenium.", "", ""], "have_tickets": [true], "title": "BDD: You\u2019re doing it wrong!", "speakers": "Rafa\u0142 Nowicki", "track_title": "Barria1 Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["test", "selenium", "django", "bdd"]}, "244": {"id": 244, "abstracts": ["You've been making packages for a while now. Everything works almost fine, however, lots of new features and tools have been developed recently. Some are really obscure. And there's a chance they can save you time and help you avoid _packaging-induced-pain_. I'm willing to bet couple of beers you haven't seen these features and/or tools before.\r\n\r\nThis talk is going to show you:\r\n\r\n- Patterns and tricks you can use in your `setup.py`.\r\n- Obscure pip/setuptools/virtualenv/python features you can use to improve your packaging experience (be it as a user of packages or a package author).\r\n- Fledgeling alternative tools.", "", ""], "have_tickets": [true], "title": "Less known packaging features and tricks", "speakers": "Ionel Cristian M\u0103rie\u0219", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:15:00", "duration": 45, "tags": ["virtualenv", "setuptools", "python", "packaging", "pip"]}, "29": {"id": 29, "abstracts": ["Data Structures is traditionally a \u201cbogeyman\u201d discipline in Computer Science courses and has a high degree of failure. In FATEC S\u00e3o Jos\u00e9 dos Campos we are adopting a hybrid approach, with C and Python languages. The failure rate decreased from 85% (2008) to 12% (2014). The talk will be extensively illustrated with code in C and Python, addressing the various concepts taught in this course: recursion, linked lists, queues, stacks, sorting algorithms.", "", ""], "have_tickets": [true], "title": "Data Structures with Python", "speakers": "Fernando Masanori Ashikaga", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["education"]}, "333": {"id": 333, "abstracts": ["During this talk we will discuss how to manage your full stack development life cycle using python technologies plus Docker. \r\n\r\nWe will cover from, the project creation (using Pyramid web framework), to maintaining a consistent deployment infrastructure using buildout and docker containers. ", "Durante esta presentaci\u00f3n discutiremos como administrar el ciclo de vida de tu desarrollo usando tecnolog\u00edas Python m\u00e1s Docker.\r\n\r\nVamos a cubrir desde la creaci\u00f3n de tu proyecto (usando el framework Pyramid), hasta la mantenci\u00f3n de infraestructuras consistentes de instalaci\u00f3n usando buildout y contenedores docker. ", ""], "have_tickets": [true], "title": "Easy FullStack Deployments", "speakers": "Alvaro Aguirre", "track_title": "A2 Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["Buildout", "DevOps", "docker", "ansible", "fabric", "Pyramid"]}, "16": {"id": 16, "abstracts": ["Big Data - these two words are heard so often nowadays. But what exactly is Big Data ? Can we, Pythonistas, enter the wonder world of Big Data ? The answer is definitely \"Yes\".\r\n\r\nThis talk is an introduction to the big data processing using Apache Hadoop and Python. We'll talk about Apache Hadoop, it's concepts, infrastructure and how one can use Python with it. We'll compare the speed of Python jobs under different Python implementations, including CPython, PyPy and Jython and also discuss what Python libraries are available out there to work with Apache Hadoop.\r\n\r\nThis talk is intended for beginners who want to know about Hadoop and Python or those who are already working with Hadoop but are wondering how to use it with Python or how to speed up their Python jobs."], "have_tickets": [true], "title": "Big Data with Python & Hadoop", "speakers": "Max Tepkeev", "track_title": "Google Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["bigdata", "jython", "hadoop", "cpython", "etl", "PyPy"]}, "94": {"id": 94, "abstracts": ["Python is a powerful language that provides many tools for creating highly dynamic programs. It offers tools all across the complexity spectrum that library authors can use to make their libraries seem convenient to use for users.\r\n\r\nWhile it's true that there are a wealth of techniques with huge positive benefits, there are a number of common antipatterns which can deceptively cause a net-loss in flexibility, readability, and predictability for users.\r\n\r\nWe'll explore a few specific commonalities in this area of library and object API design, and talk about the ramifications they have on each of these programmer concerns."], "have_tickets": [true], "title": "Just Because You Can, Doesn't Mean You Should", "speakers": "Julian Berman", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:15:00", "duration": 45, "tags": ["case study", "Best Practice"]}, "306": {"id": 306, "abstracts": ["At Spotify, my team struggled to be awesome. We had a very loose understanding of what product/service our squad was responsible for, and even less so of the expectations our internal and external customers had for those services. Other than \u201cdoes our Facebook login work?\u201d, we had no understanding of how our services we\u2019re responsible for were doing. How many users actually sign up or log in with Facebook? How many users have connected their Spotify account with their Uber account? Do folks even use Spotify with Uber? \r\n\r\nWith a 2-month challenge period, my squad and I focused inward to establish those unanswered questions and to establish feedback loops and always-on dashboards. This talk will tell the story of how we chose which metrics are important for us to focus on, what technologies we have used and are using, and how we\u2019ve iterated over our feedback loops to fine-tune what metrics we care about. "], "have_tickets": [true], "title": "Metrics-driven development", "speakers": "Lynn Root", "track_title": "Google Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["servers", "metrics", "technologies", "real-time", "logging"]}, "164": {"id": 164, "abstracts": ["Rust is a new programming language from Mozilla. It is fast, safe and beautiful. It is also a very good option when needing performance. In this talk we're going to look at Rust and see what it offers and how we can leverage it as Python developers. And we'll do it with a case study: a statistical profiler for Python."], "have_tickets": [true], "title": "Can Rust make Python shine?", "speakers": "Dmitry Trofimov", "track_title": "Barria1 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["performance", "profiling", "rust"]}, "140": {"id": 140, "abstracts": ["In this talk we would like to have a short introduction on how Python\r\nprograms are compiled and executed, with a special attention towards\r\njust in time compilation done by PyPy. PyPy is the most advanced Python\r\ninterpreter around and while it should generally just speed up your programs\r\nthere is a wide range of performance that you can get out of PyPy, ranging from\r\nslightly faster than CPython to C speeds, depending on how you write your\r\nprograms.\r\n\r\nWe will split the talk in two parts. In the first part we will explain\r\nhow things work and what can and what cannot be optimized as well as describe\r\nthe basic heuristics of JIT compiler and optimizer. In the next part we will\r\ndo a survey of existing tools for looking at performance of Python programs\r\nwith specific focus on PyPy.\r\n\r\nAs a result of this talk, an audience member should be better equipped with\r\ntools how to write new software and improve existing software with performance\r\nin mind.\r\n\r\nThe talk will be given by Antonio Cuni and Maciej Fijalkowski,\r\nboth long time PyPy core developers and expert in the area of\r\nPython performance.", "", ""], "have_tickets": [true], "title": "Python and PyPy performance (not) for dummies", "speakers": "Antonio Cuni", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 16:15:00", "duration": 60, "tags": ["profiling", "performance", "PyPy", "JIT"]}}, "Trainings": {"262": {"id": 262, "abstracts": ["The value that search functionality can add to a website is often underestimated, and many people fear that it is too complex or complicated. At the same time, it\u2019s not clear to many developers what a good search implementation should do.\r\n\r\nIn short, many developers - and the users of their websites - are missing out on important benefits.\r\n\r\nThis workshop will help them over the first hurdles to a solid search implementation using Django and Elasticsearch. It will cover basic steps like syncing the models to a search engine and setting up search views, as well as more advanced functionality such as faceted navigation.\r\n\r\nHonza will explain how search works and guide people through the process of customising their search and setting up analytics based on the data in their apps.", "", ""], "have_tickets": [true], "title": "Don't be afraid to search", "speakers": "Honza Kr\u00e1l", "track_title": "", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["search", "django", "elasticsearch", "databases"]}, "323": {"id": 323, "abstracts": ["If you want to get data from the web, and there are no APIs available, then you need to use web scraping! Scrapy is the most effective and popular choice for web scraping and is used in many areas such as data science, journalism, business intelligence, web development, etc.\r\n\r\nThis workshop will provide an overview of Scrapy, starting from the fundamentals and working through each new topic with hands-on examples.\r\n\r\nParticipants will come away with a good understanding of Scrapy, the principles behind its design, and how to apply the best practices encouraged by Scrapy to any scraping task.\r\n\r\nGoals:\r\n\r\n - Set up a python environment.\r\n - Learn basic concepts of the Scrapy framework.\r\n\r\n", "", ""], "have_tickets": [true], "title": "Scrapy Workshop", "speakers": "Juan Riaza", "track_title": "", "timerange": "2015-07-24 14:30:00, 2015-07-24 17:30:00", "duration": 180, "tags": ["scrapy", "python", "open-source", "scraping"]}, "207": {"id": 207, "abstracts": ["Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.\r\n\r\n*Audience*: Programmers with good basic Python knowledge. No previous\r\nknowledge in the field of optimization is required.\r\n\r\n*Objectives*: This tutorial will help you to get the most out of your optimization work.\r\nYou will learn useful techniques for details combined with an overall strategy\r\nfor the big picture.\r\n\r\n*Detailed Abstract*: Python is a great language. But it can be slow compared to other languages for certain types of tasks. If applied appropriately, optimization may reduce program runtime or memory consumption considerably. But this often comes at a price. Optimization can be time consuming and the optimized program may be more complicated. This, in turn, means more maintenance effort. How do you find out if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how to find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n\r\n*More Info*: You will need Python 2.7 or 3.4 installed on your laptop. Python 2.6 or 3.3 should also work. Very detailed installation instructions will be given to all participants well before the course.", "Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.\r\n\r\n### Audience\r\n\r\nProgrammers with good basic Python knowledge. No previous\r\nknowledge in the field of optimization is required.\r\n\r\n### Objectives\r\n\r\nThis tutorial will help you to get the most out of your optimization work.\r\nYou will learn useful techniques for details combined with an overall strategy\r\nfor the big picture.\r\n\r\n### Detailed Abstract\r\n\r\nPython is a great language. But it can be slow compared to other languages\r\nfor certain types of tasks. If applied appropriately, optimization may reduce\r\nprogram runtime or memory consumption considerably. But this often comes at a\r\nprice. Optimization can be time consuming and the optimized program may be more\r\ncomplicated. This, in turn, means more maintenance effort. How do you find\r\nout if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how\r\nto find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n\r\n\r\n### Outline\r\n\r\n* How Fast is Fast Enough? (5 min)\r\n* Optimization Guidelines and Strategy (10 min)\r\n* Measuring run time\r\n * ``time``, ``timeit``, decorators for timing (5 min)\r\n * Wall Clock vs. CPU Time (2 min)\r\n* Profiling CPU Usage\r\n * cProfile (10 min)\r\n * A Picture is Worth a Thousand Words\r\n * RunSnakeRun (5 min)\r\n * SnakeViz (5 min)\r\n * Cachegrind (5 min)\r\n * Going Line-by-Line (5 min)\r\n * Exercise (10 min)\r\n* Profiling Memory Usage\r\n * Heapy (5 min)\r\n * Pympler (5 min)\r\n * Memory Usage Line-by-Line with memory_profiler (5 min)\r\n * Exercise (10 min)\r\n* Algorithms and Anti-patterns\r\n * String Concatenation (3 min)\r\n * List and Generator Comprehensions (5 min)\r\n * Think Global buy Local (5 min)\r\n * Exercise (5 min)\r\n* The Right Data Structure\r\n * Use built-in Data Types (2 min)\r\n * ``list`` vs. ``set`` (3 min)\r\n * ``list`` vs. ``deque`` (5 min)\r\n * ``dict`` vs. ``defaultdict`` (5 min)\r\n * Big-O notation and Data Structures (5 min)\r\n * O(1) vs. O(n) vs. O(n) (5 min)\r\n * Exercise (15 min)\r\n* Caching\r\n * Reuse before You Recalculate (5 min)\r\n * Deterministic caching (5 min)\r\n * Non-deterministic caching (5 min)\r\n * Least Recently Used Cache (5 min)\r\n * Memcached (5 min)\r\n * Exercise (10 min)\r\n\r\n### More Info\r\n\r\nYou will need Python 2.7 or 3.4 installed on your laptop. Python 2.6 or 3.3\r\nshould also work. Very detailed installation instructions will be given to all participants well before the course.\r\n", ""], "have_tickets": [true], "title": "Faster Python Programs - Measure, don't Guess", "speakers": "Mike M\u00fcller", "track_title": "", "timerange": "2015-07-24 14:30:00, 2015-07-24 17:30:00", "duration": 180, "tags": ["optimization", "profiling"]}, "28": {"id": 28, "abstracts": ["Tutorial interactivo, en *espa\u00f1ol*, y muy divertido para la gente, con los conceptos b\u00e1sicos de programaci\u00f3n en alguna otra lenguaje, y que no saben nada de Python. Vamos a hackear fotos de amigos de Facebook y tambi\u00e9n hackear m\u00f3dulos b\u00e1sicos y clases para obtener la \"respuesta a la \u00faltima pregunta de la vida, el universo, y todo\". Este tutorial asume que usted tiene algunos pocos conceptos b\u00e1sicos (entrada de dados, salida de dados, operadores booleanos, control de flujo, funciones, repeticiones). Vamos a cubrir, en Python 3.x: 1. El modo interactivo de Python 2. Variaciones en el juego de adivinar un n\u00famero aleat\u00f3rio 3. Hackear m\u00f3dulos b\u00e1sicos y clases para obtener la \"respuesta a la \u00faltima pregunta de la vida, el universo, y todo\". 4. Hacking de las fotos de los amigos de Facebook sin OAuth 5. Chuck Norris Nerd chistes y partidos de la Copa Mundial en seis l\u00edneas de c\u00f3digo. 6. Prueba selectiva del Hackaton Facebook en una l\u00ednea de c\u00f3digo. Nota importante: No soy un gur\u00fa de Python, s\u00f3lo un maestro apasionado!"], "have_tickets": [true], "title": "Python para Iniciantes (ESPA\u00d1OL)", "speakers": "Fernando Masanori Ashikaga", "track_title": "", "timerange": "2015-07-21 11:00:00, 2015-07-21 13:30:00", "duration": 150, "tags": ["iniciante", "programaci\u00f3n", "divertido"]}, "110": {"id": 110, "abstracts": ["Many programming paradigms are reaching us nowadays bringing the promise of being faster by leveraging more cores and more machines (and more system administration headaches, but this is rarely stated). Reality is that many times these paradigms do not take in account the increasing mismatch between memory speed and CPUs (see http://www.blosc.org/docs/StarvingCPUs-CISE-2010.pdf), and this is becoming utterly critical so as to get maximum performance out of your data handling applications.\r\n\r\nDuring my tutorial, I will introduce different data containers for handling different kind of data and will propose experimenting with them while explaining why some adapts better to the task at hand. I will start with a quick introduction for Python data containers (lists, dicts, arrays...), continuing with well-known in-memory NumPy and Pandas containers as well as on-disk HDF5/PyTables and ending with bcolz (https://github.com/Blosc/bcolz), a novel way to store and quickly retrieve data which uses chunking and compression techniques so as to leverage the memory hierarchy of modern computer architectures.\r\n\r\nPeople attending will need a working Python setup with IPython notebook, NumPy, pandas, PyTables and bcolz installed. Anaconda or Enthought Canopy distributions are recommended, but any other means of installing (e.g. pip) will do.", "", ""], "have_tickets": [true], "title": "Efficient Memory/Disk Data Containers With Python", "speakers": "Francesc Alted", "track_title": "", "timerange": "2015-07-22 11:00:00, 2015-07-22 13:30:00", "duration": 150, "tags": ["python", "data-science", "bigdata", "ipython", "open-source", "databases", "data"]}, "299": {"id": 299, "abstracts": ["This tutorial will offer a hands-on introduction to machine learning and the process of applying these concepts in a Kaggle competition. We will introduce attendees to machine learning concepts, examples and flows, while building up their skills to solve an actual problem. At the end of the tutorial attendees will be familiar with a real data science flow: feature preparation, modeling, optimization and validation. \r\n\r\nPackages used in the tutorial will include: IPython notebook, scikit-learn, pandas and nltk. We'll use IPython notebook for interactive exploration and visualization, in order to gain a basic understanding of what's in the data. From there, we'll extract features and train a model using scikit-learn. This will bring us to our first submission. We'll then learn how to structure the problem for offline evaluation and use scikit-learn's clean model API to train many models simultaneously and perform feature selection and hyperparameter optimization.\r\n\r\nAt the end of session, attendees will have time to work on their own to improve their models and make multiple submissions to get to the top of the leaderboard, just like in a real competition. Hopefully attendees will not only leave the tutorial having learned the core data science concepts and flow, but also having had a great time doing it.\r\n"], "have_tickets": [true], "title": "Beginner's Guide to Machine Learning Competitions", "speakers": "Christine Doig", "track_title": "", "timerange": "2015-07-20 14:30:00, 2015-07-20 17:30:00", "duration": 180, "tags": ["python", "competitions", "data-science", "machine-learning", "nltk", "predictions", "ipython-notebook", "ipython", "pandas", "natural-language-processing", "open-source", "sklearn"]}, "320": {"id": 320, "abstracts": ["[asyncio][1] is relative new library for asynchronous network programming.\r\n\r\n\r\n\r\nOn training session newcomers will learn how to:\r\n\r\n* develop asyncio-based WEB applications with help of aiohttp library and siblings\r\n* write tests for asynchronous code\r\n* make tiny but revealing asyncio library which shows all design concepts required for making good product for asyncio code\r\n\r\nA lot of tips and tricks will be explained. Development for asyncio is really easy (much easier than [Tornado][2] and [Twisted][3] coding) but requires to change you mind a bit.\r\n\r\n [1]: http://docs.python.org/3/library/asyncio.html\r\n [2]: http://www.tornadoweb.org/\r\n [3]: http://twistedmatrix.com"], "have_tickets": [true], "title": "Mastering asyncio applications", "speakers": "Andrew Svetlov", "track_title": "", "timerange": "2015-07-21 14:30:00, 2015-07-21 17:30:00", "duration": 180, "tags": ["HTTP", "aiohttp", "aiopg", "aioredis", "asyncio", "network"]}, "9": {"id": 9, "abstracts": ["Do you like playing lego? Do you want to know how Scrum works? Why not to combine having fun & learning? \r\n\r\nDuring my workshops you will get familiar with Scrum ceremonies by building a Lego city. In your team you will have a Scrum Master who should help you with a demanding Product Owner who will be me. \r\n\r\nCan you manage my requirements? Can you finish the sprint? Can you build the city I'm dreaming about? Try yourself and get Scrum experience!", "", ""], "have_tickets": [true], "title": "Lego for Scrum", "speakers": "Anna Kierczy\u0144ska", "track_title": "", "timerange": "2015-07-22 14:30:00, 2015-07-22 17:30:00", "duration": 180, "tags": ["lego", "management", "agile", "fun", "scrum"]}, "291": {"id": 291, "abstracts": ["**Description:** Over the course of the 2.5 hours of this workshop you will learn how to leverage both Python and MongoDB to build highly scalable, asynchronous applications based on microservices architecture. We will be building from scratch several different \"exotic\" services, using a variety of datasets, that together we can mashup into a consolidated application using our own laptops. \r\n\r\nWe will start by introducing several technologies that we will be using (e.g. Python, Flask, MongoDB, AngularJS) and take a ten-thousand foot overview of micro services architecture.\r\nIn the second half of the workshop, we will break into teams that will each take charge in implementing a microservice that will comprise our final application. \r\n\r\nThis a fully hands-on workshop.\r\n\r\n**Learning objectives:** \r\n\r\n - Benefits of microservice architectures\r\n\r\n - MongoDB schema design \r\n\r\n - MongoDB query optimization and profiling \r\n\r\n - Basic understanding of AngularJS \r\n\r\n - Flask as REST API platform\r\n\r\n**Target Audience:**\r\nThis workshop is recommended to software developers eager to understand more about MongoDB and how to build async calls. Coding skills and basic understanding of Python is required. Prior experience with AngularJS and Flask is welcomed.\r\n\r\n**Technical Requirement:**\r\nThe attendee should bring their own laptop with MongoDB and Python (>2.7) installed. One should have administration grants over their system because we will need to expose ports and other communications to the network. The datasets and project instructions will be provided on site.\r\n\r\n"], "have_tickets": [true], "title": "Building Async Microservices", "speakers": "Norberto Leite", "track_title": "", "timerange": "2015-07-22 11:00:00, 2015-07-22 13:30:00", "duration": 150, "tags": ["AngularJS", "mongodb", "flask", "api", "Microservices"]}, "292": {"id": 292, "abstracts": ["The aim is to cover the basics of setting up a simple Django site, but using full, rigorous TDD at every step along the way.\r\n\r\nThe tutorial is based on the first few chapters of my book, which is available (for free!) online for you to follow up with after the session, so that you can embed what you've learned. [www.obeythetestinggoat.com](http://www.obeythetestinggoat.com)\r\n\r\nWe'll learn:\r\n\r\n - how to set up functional tests with Selenium\r\n - how to set up Django\r\n - how to run Django unit tests\r\n - how TDD actually works in practice: the unit test / code cycle where we re-run the tests after each tiny, incremental change to the code\r\n - all the basics of Django like views, models and templates.\r\n\r\nWe'll talk about what to test, what not to test, what the point of all this testing is anyway, you'll get a real hands-on feeling for how it works, and I promise to make it all at least moderately entertaining!\r\n\r\nAnd it's all in Python 3 :)\r\n\r\n**Please come prepared!** you'll need:\r\n\r\n- Python 3.4\r\n- Firefox\r\n- Django 1.8\r\n- Selenium\r\n\r\nYou'll find full instructions [here](http://chimera.labs.oreilly.com/books/1234000000754/pr02.html) -- do email me if you have any problems, I'm happy to help. obeythetestinggoat@gmail.com", "", ""], "have_tickets": [true], "title": "TDD for web development, from scratch", "speakers": "Harry Percival", "track_title": "", "timerange": "2015-07-24 11:00:00, 2015-07-24 13:30:00", "duration": 150, "tags": ["tdd", "unit-testing", "selenium", "django", "python3", "Testing"]}, "326": {"id": 326, "abstracts": ["Do you know what happens every time you use the **@** symbol in Python? Do you know how to implement a decorator to be customisable at _decoration time_ or to internally store a state? \r\n\r\nAfter attending this training you will be able to answer _yes_ to all the previous questions!\r\n\r\nThe content of the session can be split in 3 main blocks:\r\n\r\n - 1/ Some Python basic concepts\r\n - Scopes\r\n - Namespaces\r\n - Closures\r\n - 2/ Implement and understand a basic decorator\r\n - 3/ Advanced decorators\r\n - Generators of decorators\r\n - Classes as decorators\r\n - Decoration of classes\r\n\r\nRequirements:\r\n\r\n - **Intermediate Python level**. Attendees must have previous knowledge of Python and should be somehow familiar with the notation @ to decorate a function or class.\r\n - Bring **your own laptop** with Python installed and ready to solve some coding exercises.\r\n\r\nPS: I also submitted a talk proposal which partially covers the first part of the training: [https://ep2015.europython.eu/conference/talks/decorators-demystified][1]\r\n\r\n [1]: https://ep2015.europython.eu/conference/talks/decorators-demystified\r\n", "", ""], "have_tickets": [true], "title": "Python decorators in detail", "speakers": "Pablo Enfedaque", "track_title": "", "timerange": "2015-07-24 11:00:00, 2015-07-24 13:30:00", "duration": 150, "tags": ["namespaces", "training", "python", "scopes", "decorators", "closures"]}, "373": {"id": 373, "abstracts": ["New to Python? Come along to the beginners' day! It\u2019s designed to give you a crash-course in Python, and the ecosystem around it, to give you the context you need to get the most out of EuroPython. Suitable for total beginners, as well as people who already know a little programming. Bring your laptop, as a large part of the day will be devoted to learning Python on your own PC.\r\n\r\n*This session will be presented in English (although a few of the coaches do speak basic Spanish, French and Italian). Note there are also some Spanish-language Beginner sessions scheduled for day 2 of the conference.*\r\n\r\n**Morning:**\r\n\r\n - 11AM-11:30AM Intro to Python and programming.\r\n - 11:30AM-1PM Self-directed learning with coaches. Tutorials provided for beginner and experienced programmers.\r\n - 1PM-1:30PM Q&A and recap\r\n\r\n**Afternoon:**\r\n\r\n - 3:15PM: Intro to the Python ecosystem: some topics and bits of jargon that are bound to come up this week: open source, free software, github, packages, pip, pypi, scientific computing, scipy, numpy, pandas, ipython notebook, web frameworks, django, flask, asyncio, the BDFL, the Zen of Python, etc etc. What are the tools, areas of interest, in-jokes, people of note.\r\n - 4:30PM: More self-directed learning with coaches.\r\n - 5PM: \"How to get the best out of the conference\" session -- suggested talks, tips on asking questions, FAQs like what are open spaces / sprints / birds-of-a-feather sessions, etc.\r\n\r\nWe need to get an idea of numbers for this session, so if you are interested in attending, please drop a quick email to obeythetestinggoat@gmail.com\r\n\r\n"], "have_tickets": [true], "title": "Beginners' Day", "speakers": "Harry Percival", "track_title": "Room B Terrace", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 180, "tags": ["python", "introduction"]}, "243": {"id": 243, "abstracts": ["Learn how to use docker-compose and docker to create a development environment that you can use to mimic your production environment. \r\n\r\nLearn how to:\r\n\r\n* create a Dockerfile\r\n * What is a Docker File\r\n * How to utilize Docker's caching to optimize docker build\r\n * How to abstract common components to other docker images\r\n* use Docker-Hub\r\n * create auto builds\r\n * use web-hooks\r\n* use docker-compose\r\n * When to use a prebuilt image vs building from scratch\r\n* deploy your container to a VM\r\n\r\nClass will be mostly informational. BUT you are encouraged to play along. \r\n\r\nHardware requirements: \r\n\r\n* Computer that can run VirtualBox. \r\n\r\nSoftware requirements:\r\n\r\n* Docker CLI 1.6+\r\n* Docker Machine (latest)\r\n* Docker Compose 1.2+\r\n\r\nIf you plan on playing along, please make sure that you have all these installed already. "], "have_tickets": [true], "title": "Intro to Web Development with Docker", "speakers": "Nick Lang", "track_title": "", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 150, "tags": ["web", "development-process", "docker", "Development"]}, "376": {"id": 376, "abstracts": ["Workshop time: 2:00pm - 7:00pm\r\n\r\nThis is a half-day version of the SRE Classroom event that has been run successfully at Google offices and conferences around the world. We expect this event to appeal to senior and experienced engineers.\r\n\r\nThe workshop problem will be a real-world large-scale engineering problem that requires some distributed-systems knowhow to tackle. Attendees will work in groups with Googlers on the problem, trying to come up with:\r\n\r\n - A high-level design that scales horizontally\r\n - Initial SLIs, SLOs\r\n - Estimates for hardware required to run each component\r\n - If time permits, monitoring design and disaster testing scenarios\r\n\r\nAttendees will be provided with a workbook that guides them through tackling a problem like this, with some worked examples, so junior attendees should be able to make progress and learn too. \r\n\r\nSign-up here (seats are limited.)", "", ""], "have_tickets": [true], "title": "SRE Classroom", "speakers": "Sidnei da Silva", "track_title": "Room B Terrace", "timerange": "2015-07-21 14:00:00, 2015-07-21 17:00:00", "duration": 180, "tags": ["cloud", "google", "class"]}, "105": {"id": 105, "abstracts": ["Become a data wrangler with Python! This course will introduce you to the core concepts of data analysis with Python. We'll cover libraries that allow you to easily clean and set up your initial dataset, importing data from all different file types and standards. We'll introduce some basic libraries to help with statistics and analysis and then cover how to document and explore your findings. \r\n\r\nIt's assumed you have a working understanding of Python and it's data types and structures, and that you've used and understand Python for basic scripting. It's also assumed you haven't done much in terms of data analysis, and you'd like to learn more. If this is you, welcome! ", "", ""], "have_tickets": [true], "title": "Introduction to Data Analysis", "speakers": "Katharine Jarmul", "track_title": "", "timerange": "2015-07-23 11:00:00, 2015-07-23 13:30:00", "duration": 150, "tags": ["Beginners", "scraping", "data-science", "analytics", "Database", "e-gov", "pandas", "api", "oauth2", "data", "Coding"]}, "130": {"id": 130, "abstracts": ["Transducers \u2013 a portmanteau of \u2018transform reducers\u2019 \u2013 are a new functional programming concept, which were first introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them can be challenging. \r\n\r\nTransducers allow us to fuse multiple data processing operations together so they can be applied in a single pass over a data series \u2013 similar to how Python generator functions allow us to process iterable series. However, unlike generator functions they are completely decoupled from the data series abstraction and can be used on eager sequences, lazy iterables, coroutine-based push events and events such as those modelled by Reactive Extensions for Python (RxPy). \r\n\r\nIn this workshop, we introduce transducers by implementing them from scratch in Python 3. We\u2019ll start with the familiar staples of functional programming, map(), filter() and reduce(), and derive transducers from first principles. We\u2019ll work towards a set of general tools which works with eager collections, lazy \u2018pull\u2019 sequences, and coroutine \u2018push\u2019 event streams and RxPy. Along the way we\u2019ll cover stateful transducers and transducer composition, demonstrating that transducers are both more general, and more fundamental, than the functional programming tools baked into Python and many other languages.\r\n\r\nThere are no prerequisites for this workshop as we stick to core Python 3 language features although an enthusiasm for a functional programming style will be sure to help attendees get the most out of this session.", "", ""], "have_tickets": [true], "title": "Functional Programming with Transducers in Python", "speakers": "Austin Bingham", "track_title": "Room A4", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["python", "functional", "fun", "Functional Programming"]}, "331": {"id": 331, "abstracts": ["It is very hard to be a scientist without knowing how to write code, \r\nand nowadays **Python** is probably the programming language of \r\nchoice in many research fields.\r\nThis is mainly because the Python ecosystem includes a lot of tools and libraries \r\nfor many research tasks: `pandas` for *data analysis* , \r\n`networkx` for *social network analysis*, `nltk` for *natural language processing*,\r\n`scikit-learn` for *machine learning*, and so on.\r\n\r\nMost of these libraries relies (or are built on top of) `numpy`.\r\nTherefore, `numpy` is a crucial component of the common Python\r\nstack used for numerical analysis and data science.\r\n\r\nOn the one hand, NumPy code tends to be much cleaner (and faster) than \r\n\"straight\" Python code that tries to accomplish the same task. \r\nMoreover, the underlying algorithms have \r\nbeen designed with high performance in mind.\r\n\r\nThis training will be organised in two parts: the first part is \r\nintended to provide most of the essential concepts \r\nneeded to become confident with NumPy data structures and functions.\r\n\r\nIn the second part, some examples of data analysis libraries and code\r\nwill be presented, where NumPy takes a central role.\r\n\r\nHere is a list of software used to develop and test the code examples presented\r\nduring the training:\r\n\r\n* Python 3.x (2.x would work as well)\r\n* iPython 2.3+ (with **notebook support**): `pip install ipython[notebook]`\r\n* numpy 1.9+\r\n* scipy 0.14+\r\n* scikit-learn 0.15+\r\n* pandas 0.8+\r\n\r\nThe training is meant to be mostly introductory, thus it is perfectly suited\r\nfor **beginners**. However, a good proficiency in Python programming is (at least)\r\nrequired."], "have_tickets": [true], "title": "Numpy arrays: the weapons of a data scientist", "speakers": "Valerio Maggio", "track_title": "", "timerange": "2015-07-21 11:00:00, 2015-07-21 13:30:00", "duration": 150, "tags": ["scipy", "numpy", "data-science", "analytics"]}, "175": {"id": 175, "abstracts": ["The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We'll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We'll finish with discussing topics and questions of participants related to their own test suites and usages.\r\n\r\nThis is the planned outline:\r\n\r\n- (30 minutes) pytest feature walkthrough: automatic test discovery, assert\r\n statement, modular parametrizable fixtures, 150 plugins\r\n\r\n- (60 minutes) pytest fixture mechanism: dependency injection, declaring\r\n and using function/module/session scoped fixtures, using fixtures\r\n from fixture functions, parametrizing fixtures. Exercises.\r\n\r\n- (30 minutes): running nose/unittest/trial/Django suites with pytest.\r\n Discussing advantages and limitations. Exercise with a select\r\n existing real-life open source project.\r\n\r\n- (30 minutes): Strategies for a) migrating to pytest b) using\r\n \"autouse\" fixtures in conjunction with XUnit-based\r\n setup/tearodwn methods. Exercise.\r\n\r\n- (30 minutes): open space for questions and interactively solving\r\n pytest/unittest integration problems on real-life problems\r\n as time permits.\r\n", "", ""], "have_tickets": [true], "title": "pytest - simple, rapid and fun testing with Python", "speakers": "Florian Bruhin", "track_title": "", "timerange": "2015-07-20 14:30:00, 2015-07-20 17:30:00", "duration": 180, "tags": ["automation", "test", "pytest"]}, "120": {"id": 120, "abstracts": ["[OpenStack][1] es un conjunto de herramientas de software que permiten la construcci\u00f3n y mantenimiento de plataformas de _cloud computing_ para nubes p\u00fablicas y privadas. Permite a sus usuarios desplegar m\u00e1quinas virtuales y otras instancias que manejan diferentes tareas para la administraci\u00f3n de un entorno de _cloud computing_ _on the fly_. Considerando la complejidad de la arquitectura del c\u00f3digo que hace de esto una realidad, establecer el entorno de desarrollo y comenzar a contribuir puede ser una tarea agobiante.\r\n\r\nPero empezar a ser un contribuyente no deber\u00eda ser un proceso dif\u00edcil si comienzas con el pie derecho. Hay algunos detalles que, si los pudieras conocer de antemano, har\u00edan que dar tus primeros pasos no sea una tarea tan complicada.\r\n\r\nEn esta presentaci\u00f3n daremos una explicaci\u00f3n breve de cu\u00e1les son las herramientas usadas por la comunidad de OpenStack y c\u00f3mo debes configurarlas para empezar a contribuir. Adem\u00e1s cubriremos c\u00f3mo el proceso de desarrollo funciona, incluyendo c\u00f3mo encontrar y arreglar un _bug_, c\u00f3mo hacer una nueva propuesta de desarrollo, c\u00f3mo probar tus cambios antes de enviar un parche y c\u00f3mo funciona el proceso de revisi\u00f3n.\r\n\r\nHaremos todo esto usando un _script_ que automatiza el despliege del entorno de desarrollo llamado [DevStack][2]. Mientras que el _script_ es ejecutado y descarga/configura todas las dependencias, explicaremos cada uno de los pasos para empezar a contribuir. Finalmente, con el entorno de desarrollo listo, repasaremos las listas de bugs y empezaremos a analizar el c\u00f3digo.\r\n\r\nPara el final del taller, tendr\u00e1s todos las herramientas y conocimientos necesarios para poder comenzar a contribuir a un proyecto de OpenStack.\r\n\r\nRequerimientos m\u00ednimos: Procesador de 1 gigahertz (GHz) o m\u00e1s 32-bit (x86) o 64-bit (x64), 4GB RAM, 10GB HD\r\nRequerimientos recomendados: Procesador de 1 gigahertz (GHz) o m\u00e1s 32-bit (x86) o 64-bit (x64), 8GB RAM, 20GB HD\r\n\r\nTambi\u00e9n aconsejamos que los participantes tengan una herramienta de virtualizaci\u00f3n preinstalada y, si es posible, que inicien una instancia con Ubuntu 14.04 LTS.\r\n\r\n [1]: https://www.openstack.org/\r\n [2]: http://docs.openstack.org/developer/devstack/", "", ""], "have_tickets": [true], "title": "Manos a la obra con OpenStack: La gu\u00eda paso a paso para comenzar a contribuir a OpenStack", "speakers": "Victoria Martinez de la Cruz", "track_title": "", "timerange": "2015-07-21 14:30:00, 2015-07-21 17:30:00", "duration": 180, "tags": ["python", "cloud", "open-source", "linux", "OpenStack"]}, "202": {"id": 202, "abstracts": ["A workshop introducing participants to physical computing with Python and Raspberry Pi.\r\n\r\nLearn how to build applications with Python that interact with the physical world - using the Pi's GPIO (general purpose input & output) pins and its camera module and their respective Python libraries.\r\n\r\nWe'll start simple - flashing LEDs, using push buttons, basic use of the camera module, then introduce sensors such as infra-red motion detectors, temperature sensors and light sensors, then we'll build interactive applications (embedded apps, desktop apps and web apps) using the sensors and camera module for a variety of different purposes.\r\n\r\nEmbedded or physical computing is not just for C programmers or hardcore Linux engineers - I'll show you how to get up and running with your first physical world application and show how easy it is to control GPIOs and the camera module from the language you know and love (and can read). This will prepare you for making your own hardware project idea a reality - build a security system, a robot or a home automation system.\r\n\r\nThis workshop is well suited to beginners with a basic understanding of Python code, but is also suitable for those more experienced with Python but with little or no experience with physical computing.", "", ""], "have_tickets": [true], "title": "Explore physical computing with Python and Raspberry Pi", "speakers": "Ben Nuttall", "track_title": "", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["education", "raspberrypi"]}, "171": {"id": 171, "abstracts": ["This tutorial explores some real-world solutions to make your Python code run on different processes, possibly on different computers. \r\n\r\nTools like Pyro, Celery, Python-RQ will be discussed. Ways to run your Python code on a supercomputer/cluster using a batch job scheduler and packages for local parallelism such as multiprocessing and concurrent.futures will be touched upon as well. \r\n\r\nThe emphasis is on practical examples and lessons learned. The assumption is that the attendee is familiar with Python and basic OOP concepts.", "", ""], "have_tickets": [true], "title": "Distributed Programming With Python", "speakers": "Francesco Pierfederici", "track_title": "", "timerange": "2015-07-23 11:00:00, 2015-07-23 13:30:00", "duration": 150, "tags": ["redis", "amqp", "distributed-systems", "performance", "concurrency", "computing", "cloud", "rabbitmq", "celery"]}, "153": {"id": 153, "abstracts": ["Highly-constrained, large-dimensional, and non-linear optimizations are found at the root of most of today\u2019s forefront problems in statistics, quantitative finance, risk, operations research, materials design, and other predictive sciences. Tools for optimization, however, have not changed much in the past 40 years -- until very recently. The abundance of parallel computing resources has stimulated a shift away from using reduced models to solve statistical and predictive problems, and toward more direct methods for solving high-dimensional nonlinear optimization problems.\r\n\r\nThis tutorial will introduce modern tools for solving optimization problems -- beginning with traditional methods, and extending to solving high-dimensional non-convex optimization problems with highly nonlinear constraints. We will start by introducing the cost function, and it\u2019s use in local and global optimization. We will then address how to monitor and diagnose your optimization convergence and results, tune your optimizer, and utilize compound termination conditions. This tutorial will discuss building and applying box constraints, penalty functions, and symbolic constraints. We will then demonstrate methods to efficiently reduce search space through the use of robust optimization constraints. Real-world inverse problems can be expensive, thus we will show how to enable your optimization to seamlessly leverage parallel computing. Large-scale optimizations also can greatly benefit from efficient solver restarts and the saving of state. This tutorial will cover using asynchronous computing for results caching and archiving, dynamic real-time optimization, and dimensional reduction. Next we will discuss new optimization methods that leverage parallel computing to perform blazingly-fast global optimizations and n-dimensional global searches. Finally, we will close with applications of global optimization in statistics and quantitative finance.\r\n\r\nThe audience need not be an expert in optimization, but should have interest in solving hard real-world optimization problems. We will introduce the [_mystic_][1] optimization framework -- then begin with a walk through some introductory optimizations, learning how to build confidence in understanding your results. By the end of the tutorial, participants will have working knowledge of how to use modern constrained optimization tools, how to enable their solvers to leverage high-performance parallel computing, and how to utilize legacy data and surrogate models in statistical and predictive risk modeling.\r\n\r\n*PREREQUISITES*: This tutorial will assume attendees have basic knowledge of _python_ and _numpy_, and is intended for scientific developers who are interested in utilizing optimization to solve real-world problems in statistics, quantitative finance, and predictive sciences. The tutorial will require _python_, _numpy_, and _mystic_ to be installed, and optionally installs of _matplotlib_, _scipy_, _pathos_, and _klepto_. All packages can be installed under _Anaconda_ or _Canopy_, or with _setuptools_ or _pip_.\r\n\r\n [1]: https://github.com/uqfoundation\r\n", "Highly-constrained, large-dimensional, and non-linear optimizations are found at the root of most of today\u2019s forefront problems in statistics, quantitative finance, risk, operations research, materials design, and other predictive sciences. Tools for optimization, however, have not changed much in the past 40 years -- until very recently. The abundance of parallel computing resources has stimulated a shift away from using reduced models to solve statistical and predictive problems, and toward more direct methods for solving high-dimensional nonlinear optimization problems.\r\n\r\nThis tutorial will introduce modern tools for solving optimization problems -- beginning with traditional methods, and extending to solving high-dimensional non-convex optimization problems with highly nonlinear constraints. We will start by introducing the cost function, and it\u2019s use in local and global optimization. We will then address how to monitor and diagnose your optimization convergence and results, tune your optimizer, and utilize compound termination conditions. This tutorial will discuss building and applying box constraints, penalty functions, and symbolic constraints. We will then demonstrate methods to efficiently reduce search space through the use of robust optimization constraints. Real-world inverse problems can be expensive, thus we will show how to enable your optimization to seamlessly leverage parallel computing. Large-scale optimizations also can greatly benefit from efficient solver restarts and the saving of state. This tutorial will cover using asynchronous computing for results caching and archiving, dynamic real-time optimization, and dimensional reduction. Next we will discuss new optimization methods that leverage parallel computing to perform blazingly-fast global optimizations and n-dimensional global searches. Finally, we will close with applications of global optimization in statistics and quantitative finance.\r\n\r\nThe audience need not be an expert in optimization, but should have interest in solving hard real-world optimization problems. We will introduce the [_mystic_][1] optimization framework -- then begin with a walk through some introductory optimizations, learning how to build confidence in understanding your results. By the end of the tutorial, participants will have working knowledge of how to use modern constrained optimization tools, how to enable their solvers to leverage high-performance parallel computing, and how to utilize legacy data and surrogate models in statistical and predictive risk modeling.\r\n\r\nintroduction to optimization (30 min)\r\n-------------------------------------\r\n - the cost function\r\n - local and global optimization\r\n - monitoring and diagnosing convergence and optimization results\r\n - solver tuning and compound termination conditions\r\n - Exercise(s)\r\n\r\npenalty functions and constraints (30 min)\r\n------------------------------------------\r\n - box constraints\r\n - applying penalty functions\r\n - reducing search space with constraints\r\n - applying symbolic constraints\r\n - Exercise(s)\r\n\r\nleverage asynchronous and parallel computing (30 min)\r\n-----------------------------------------------------\r\n - parallel function evaluations and solver iterations \r\n - solver restarts and saving state\r\n - dynamic real-time optimization\r\n - automated dimensional reduction\r\n - Exercise(s)\r\n\r\nensemble optimization and global searches (30 min)\r\n--------------------------------------------------\r\n - blazingly-fast global optimization\r\n - using global search to find all minima, maxima, and turning points\r\n - building a surrogate model through optimal surface interpolation\r\n - Exercise(s)\r\n\r\noptimization in parameter sensitivity, statistics, and risk modeling (30 min)\r\n-----------------------------------------------------------------------------\r\n - the cost metric\r\n - statistical and probabilistic constraints\r\n - information constraints from surrogate models and legacy data\r\n - application to quantitative finance and statistics\r\n - Exercise(s)\r\n\r\nPREREQUISITES:\r\nThis tutorial will assume attendees have basic knowledge of _python_ and _numpy_, and is intended for scientific developers who are interested in utilizing optimization to solve real-world problems in statistics, quantitative finance, and predictive sciences. The tutorial will require _python_, _numpy_, and _mystic_ to be installed, and optionally installs of _matplotlib_, _scipy_, _pathos_, and _klepto_. All packages can be installed under _Anaconda_ or _Canopy_, or with _setuptools_ or _pip_.\r\n\r\n [1]: https://github.com/uqfoundation", ""], "have_tickets": [true], "title": "Modern optimization methods in Python", "speakers": "Michael McKerns", "track_title": "", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 150, "tags": ["optimization", "predictions", "framework", "data-science", "analytics"]}, "374": {"id": 374, "abstracts": ["Django Girls is a free, one-day workshop for women who are new to programming. During the workshop, our participants will learn how to build their first Web application using Python, Django, HTML, and CSS. Participants were selected in advance for the workshop, and our coaches are all EuroPython attendees who volunteered to mentor the participants through the process.\r\n\r\nThis year's workshop is organized by [Mikey Ariel][1] and [Petr Viktorin][2], with support from the [Django Girls][3] global organization. Since the first Django Girls workshop was held at EuroPython 2014, this workshop also marks our first birthday! After the workshop, we will operate a booth in collaboration with PyLadiesES throughout the conference, so come say hello!\r\n\r\nOfficial website: [http://djangogirls.org/europython2015/][4]\r\n\r\nTwitter: [@DjangoGirlsEP15][5]\r\n\r\n [1]: https://twitter.com/thatdocslady\r\n [2]: https://twitter.com/EnCuKou\r\n [3]: http://djangogirls.org/\r\n [4]: http://djangogirls.org/europython2015/\r\n [5]: https://twitter.com/DjangoGirlsEP15\r\n"], "have_tickets": [true], "title": "Django Girls Workshop", "speakers": "Mikey Ariel", "track_title": "Room C1", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 180, "tags": ["workshop", "django-girls"]}, "166": {"id": 166, "abstracts": ["This training is about how to keep all your software stack under control using mainly Python technologies.\r\n\r\nWe will run some full stack deployment examples using things like Pyramid, Buildout, Ansible and Docker. \r\n\r\nWe will try to apply the Zen of Python into our DevOps infrastructure in order to make happy all stakeholders in your company/organization.\r\n\r\nThe session is divided in two sections, the first one we will cover full stack development strategies, and we will discuss subjects like design patterns, code organization and web servers, among others. We will compare how other \u201cde facto\u201d or \u201centerprise\u201d technologies in the industry are doing. \r\n\r\nIn the second part we will see how to prepare your application and power your deployments using Docker containers (www.docker.com) and Buildout (www.buildout.org).\r\n\r\nEach part of the training session is accompanied by runnable source code and documentation.", "Este curso es acerca de como mantener tu stack de software bajo control usando principalmente tecnolog\u00edas Python.\r\n\r\nVamos a ejecutar algunos ejemplos completos de c\u00f3digo que abarquen todas las capas de desarrollo e instalaci\u00f3n usando cosas como Pyramid, Buildout, Ansible y Docker.\r\n\r\nVamos a tratar de aplicar de aplicar el Zen de Python en nuestra infraestructura DevOps con el fin the hacer felices a todos los involucrados en tu empresa/organizaci\u00f3n.\r\n\r\nLa sesi\u00f3n se divide en dos secciones, la primera abarcar\u00e1 estrategias de desarrollo 'full stack' y discuteremos temas como patrones de dise\u00f1o, organizaci\u00f3n de c\u00f3digo, y servidores web, entre otros. Vamos a comparar como otras tecnolog\u00edas \"de facto\" o \"empresariales\" lo est\u00e1n haciendo en la industria.\r\n\r\nEn la segunda parte vamos a ver como preparar tu aplicaci\u00f3n y tus instalaciones usando contenedores docker (www.docker.com) y buildout (www.buildout.org)\r\n\r\nCada parte del entrenamiento es acompa\u00f1ada por c\u00f3digo ejecutable y documentaci\u00f3n.", ""], "have_tickets": [true], "title": "Full Stack + DevOps using Pyramid, Buildout and Docker", "speakers": "Alvaro Aguirre", "track_title": "", "timerange": "2015-07-22 14:30:00, 2015-07-22 17:30:00", "duration": 180, "tags": ["redis", "ansible", "Buildout", "Virtualization", "Enterprise", "DevOps", "docker", "SQLAlchemy", "fabric", "elasticsearch", "Pyramid"]}}, "Keynotes": {"365": {"id": 365, "abstracts": ["In this keynote, Ola and Ola will take you on a fantastic journey to the magical world of little Liz, who is totally enchanted by technology. The story of Liz will show that with a little bit of magic, curiosity, courage and hard work, you can defeat all the obstacles standing in your way. You'll discover with her that making big and scary things is easier when you're not doing them alone. Because sometimes, one magical spell, the helpful hand of a friend or this shiny sparkle is all it takes to make a dent in one's universe.", "", ""], "have_tickets": [true, true], "title": "Keynote: It's Dangerous To Go Alone, Take This: The Power of a Community", "speakers": "Ola Sitarska, Ola Sendecka", "track_title": "Google Room", "timerange": "2015-07-20 09:30:00, 2015-07-20 10:30:00", "duration": 60, "tags": ["diversity", "python", "community"]}, "366": {"id": 366, "abstracts": ["You've solved the issue of process-level reproducibility by packaging up\r\nyour apps and execution environments into a number of Docker containers.\r\nBut once you have a lot of containers running, you'll probably need to\r\ncoordinate them across a cluster of machines while keeping them healthy and\r\nmaking sure they can find each other. Trying to do this imperatively can\r\nquickly turn into an unmanageable mess! Wouldn't it be helpful if you could\r\ndeclare to your cluster what you want it to do, and then have the cluster\r\nassign the resources to get it done and to recover from failures and scale\r\non demand?\r\n>\r\nKubernetes (http://kubernetes.io) is an open source, cross platform cluster\r\nmanagement and container orchestration platform that simplifies the complex\r\ntasks of deploying and managing your applications in Docker containers. You\r\ndeclare a desired state, and Kubernetes does all the work needed to create\r\nand maintain it. In this talk, we\u2019ll look at the basics of Kubernetes and\r\nat how to map common applications to these concepts. This will include a\r\nhands-on demonstration and visualization of the steps involved in getting\r\nan application up and running on Kubernetes.", "", ""], "have_tickets": [true], "title": "Keynote: So, I have all these Docker containers, now what?", "speakers": "Mandy Waite", "track_title": "", "timerange": "", "duration": 60, "tags": ["python", "cloud", "docker"]}, "361": {"id": 361, "abstracts": ["This is *your* keynote! I will have some prepared remarks on the state of the Python community and Python's future directions, but first and foremost this will be an interactive Q&A session.", "", ""], "have_tickets": [true], "title": "Keynote: Python now and in the future", "speakers": "Guido van Rossum", "track_title": "Google Room", "timerange": "2015-07-21 09:30:00, 2015-07-21 10:30:00", "duration": 60, "tags": ["python"]}, "364": {"id": 364, "abstracts": ["The problem of introducing children to programming and computer science has\r\nseen growing attention in the past few years. Initiatives like Raspberry\r\nPi, Code Club, code.org, (and many more) have been created to help solve\r\nthis problem. With the introduction of a national computing curriculum in\r\nthe UK, teachers have been searching for a text based programming language\r\nto help teach computational thinking as a follow on from visual languages\r\nlike Scratch.\r\n\r\nThe educational community has been served well by Python, benefiting from\r\nits straight-forward syntax, large selection of libraries, and supportive\r\ncommunity. Education-focused summits are now a major part of most major\r\nPython Conferences. Assistance in terms of documentation and training is\r\ninvaluable, but perhaps there are technical means of improving the\r\nexperience of those using Python in education. Clearly the needs of\r\nteachers and their students are different to those of the seasoned\r\nprogrammer. Children are unlikely to come to their teachers with\r\nfrustrations about the Global Interpreter Lock! But issues such as\r\nusability of IDEs or comprehensibility of error messages are of utmost\r\nimportance.\r\n\r\nIn this keynote, Carrie Anne will discuss existing barriers to Python\r\nbecoming the premier language of choice for teaching computer science, and\r\nhow learning Python could be helped immensely through tooling and further\r\nsupport from the Python developer community.\r\n", "", ""], "have_tickets": [true], "title": "Keynote: Designed for Education: A Python Solution", "speakers": "Carrie Anne Philbin", "track_title": "Google Room", "timerange": "2015-07-23 09:30:00, 2015-07-23 10:30:00", "duration": 60, "tags": ["python"]}, "363": {"id": 363, "abstracts": ["In this talk, I'll discuss the recent rise of immutable state concepts in languages and network protocols. And how the advent of hash-based data structures and replication strategies are shaking the client/server web service paradigm which rests on managing mutable state through http. By contrast, building on git, bittorrent and other content addressed data structures provides for a more secure, efficient decentralized communication topology. There are projects, thoughts and talk to create new web standards to bring such technologies to mass deployment and fuel a new wave of decentralization. What can Python bring to the table? ", "", ""], "have_tickets": [true], "title": "Keynote: Towards a more effective, decentralized web", "speakers": "Holger Krekel", "track_title": "", "timerange": "", "duration": 60, "tags": ["python"]}}, "Other sessions": {"371": {"id": 371, "abstracts": ["Recruiting sponsors presentation.", "", ""], "have_tickets": [false], "title": "Recruiting sponsors presentation", "speakers": "To be announced", "track_title": "Google Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:30:00", "duration": 45, "tags": ["recruiting"]}}, "Help desks": {"334": {"id": 334, "abstracts": ["Scrapy is an open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way.\r\n\r\nThis helpdesk is run by members of Scrapinghub, where Scrapy was built and designed.", "", ""], "have_tickets": [true], "title": "Scrapy Helpdesk", "speakers": "Juan Riaza", "track_title": "", "timerange": "2015-07-21 10:00:00, 2015-07-21 13:00:00", "duration": 180, "tags": ["scrapy", "python", "scraping"]}, "248": {"id": 248, "abstracts": ["For this helpdesk session, I will be here to help people on ansible, be it for beginner usage or more advanced use cases ( or even bug reporting/fixing ).\r\n\r\nPrerequisite are simply to have a computer ( if needed by the question ) and familliarity with command line on a unix system ( but the more, the better )."], "have_tickets": [true], "title": "Ansible helpdesk", "speakers": "Michael Scherer", "track_title": "", "timerange": "2015-07-23 10:00:00, 2015-07-23 13:00:00", "duration": 180, "tags": ["yaml", "Operations", "CLI", "system-administration", "open-source", "linux", "ansible"]}, "369": {"id": 369, "abstracts": ["Plone help desk", "", ""], "have_tickets": [true], "title": "Plone help desk", "speakers": "Paul Roeland", "track_title": "", "timerange": "2015-07-21 10:00:00, 2015-07-21 13:00:00", "duration": 180, "tags": ["web", "Plone", "CMS"]}, "47": {"id": 47, "abstracts": ["Bring us your broken README files, your cryptic API references, and your disheveled Wiki projects! Or, just come and chat with us about life, the universe, and everything docs. \r\n\r\nOur doc(tor)s are happy to assist with all things docs: from proofreading and restructuring content, optimizing contribution workflows, to automating API docs and L10N, implementing scalable and testable markup languages, and more! \r\n\r\nThe clinic will be staffed by:\r\n\r\n* [Mikey Ariel][1] , senior technical writer at Red Hat, community lead at Write the Docs EU, documentation evangelist, agile coach, has coffee - will travel.\r\n\r\n* [Maciej Szlosarczyk][2], senior technical writer at Symantec, Linux user in rehab, experiments with Django, Swagger, and Ember.js, can talk craft beer for hours.\r\n\r\n* [Paul Roeland][3] , open source and non-profit activist, fluent in Plone and conversational in Sphinx and Robot-screenshots, mixes a mean Martini.\r\n\r\n [1]: https://twitter.com/thatdocslady\r\n [2]: https://twitter.com/icejam_\r\n [3]: https://twitter.com/polyester"], "have_tickets": [true], "title": "The doc(tor)s are in! (Documentation Helpdesk)", "speakers": "Mikey Ariel", "track_title": "", "timerange": "2015-07-22 10:00:00, 2015-07-22 13:00:00", "duration": 180, "tags": ["Plone", "api", "autodoc", "education", "Best Practice", "agile", "documentation", "community", "communication", "django", "fun", "Sphinx", "translation", "internationalization", "i18n", "sphinxdocumentation"]}}} \ No newline at end of file diff --git a/ep2017/static/index.js b/ep2017/static/index.js deleted file mode 100644 index 746739c..0000000 --- a/ep2017/static/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * jQuery scrollintoview() plugin and :scrollable selector filter - * - * Version 1.8 (14 Jul 2011) - * Requires jQuery 1.4 or newer - * - * Copyright (c) 2011 Robert Koritnik - * Licensed under the terms of the MIT license - * http://www.opensource.org/licenses/mit-license.php - */ -(function(f){var c={vertical:{x:false,y:true},horizontal:{x:true,y:false},both:{x:true,y:true},x:{x:true,y:false},y:{x:false,y:true}};var b={duration:"fast",direction:"both"};var e=/^(?:html)$/i;var g=function(k,j){j=j||(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(k,null):k.currentStyle);var i=document.defaultView&&document.defaultView.getComputedStyle?true:false;var h={top:(parseFloat(i?j.borderTopWidth:f.css(k,"borderTopWidth"))||0),left:(parseFloat(i?j.borderLeftWidth:f.css(k,"borderLeftWidth"))||0),bottom:(parseFloat(i?j.borderBottomWidth:f.css(k,"borderBottomWidth"))||0),right:(parseFloat(i?j.borderRightWidth:f.css(k,"borderRightWidth"))||0)};return{top:h.top,left:h.left,bottom:h.bottom,right:h.right,vertical:h.top+h.bottom,horizontal:h.left+h.right}};var d=function(h){var j=f(window);var i=e.test(h[0].nodeName);return{border:i?{top:0,left:0,bottom:0,right:0}:g(h[0]),scroll:{top:(i?j:h).scrollTop(),left:(i?j:h).scrollLeft()},scrollbar:{right:i?0:h.innerWidth()-h[0].clientWidth,bottom:i?0:h.innerHeight()-h[0].clientHeight},rect:(function(){var k=h[0].getBoundingClientRect();return{top:i?0:k.top,left:i?0:k.left,bottom:i?h[0].clientHeight:k.bottom,right:i?h[0].clientWidth:k.right}})()}};f.fn.extend({scrollintoview:function(j){j=f.extend({},b,j);j.direction=c[typeof(j.direction)==="string"&&j.direction.toLowerCase()]||c.both;var n="";if(j.direction.x===true){n="horizontal"}if(j.direction.y===true){n=n?"both":"vertical"}var l=this.eq(0);var i=l.closest(":scrollable("+n+")");if(i.length>0){i=i.eq(0);var m={e:d(l),s:d(i)};var h={top:m.e.rect.top-(m.s.rect.top+m.s.border.top),bottom:m.s.rect.bottom-m.s.border.bottom-m.s.scrollbar.bottom-m.e.rect.bottom,left:m.e.rect.left-(m.s.rect.left+m.s.border.left),right:m.s.rect.right-m.s.border.right-m.s.scrollbar.right-m.e.rect.right};var k={};if(j.direction.y===true){if(h.top<0){k.scrollTop=m.s.scroll.top+h.top}else{if(h.top>0&&h.bottom<0){k.scrollTop=m.s.scroll.top+Math.min(h.top,-h.bottom)}}}if(j.direction.x===true){if(h.left<0){k.scrollLeft=m.s.scroll.left+h.left}else{if(h.left>0&&h.right<0){k.scrollLeft=m.s.scroll.left+Math.min(h.left,-h.right)}}}if(!f.isEmptyObject(k)){if(e.test(i[0].nodeName)){i=f("html,body")}i.animate(k,j.duration).eq(0).queue(function(o){f.isFunction(j.complete)&&j.complete.call(i[0]);o()})}else{f.isFunction(j.complete)&&j.complete.call(i[0])}}return this}});var a={auto:true,scroll:true,visible:false,hidden:false};f.extend(f.expr[":"],{scrollable:function(k,i,n,h){var m=c[typeof(n[3])==="string"&&n[3].toLowerCase()]||c.both;var l=(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(k,null):k.currentStyle);var o={x:a[l.overflowX.toLowerCase()]||false,y:a[l.overflowY.toLowerCase()]||false,isRoot:e.test(k.nodeName)};if(!o.x&&!o.y&&!o.isRoot){return false}var j={height:{scroll:k.scrollHeight,client:k.clientHeight},width:{scroll:k.scrollWidth,client:k.clientWidth},scrollableX:function(){return(o.x||o.isRoot)&&this.width.scroll>this.width.client},scrollableY:function(){return(o.y||o.isRoot)&&this.height.scroll>this.height.client}};return m.y&&j.scrollableY()||m.x&&j.scrollableX()}})})(jQuery); - -$(function() { - var current = 0; - - var $sponsors = $('footer ul.sponsors li'); - - window.setInterval(function() { - if (current < $sponsors.length) { - current += 1; - } else { - current = 0; - } - - $sponsors.eq(current).scrollintoview({ - duration: 500, - direction: "vertical", - }); - }, 4000); -}); diff --git a/ep2017/static/jquery-2.1.4.min.js b/ep2017/static/jquery-2.1.4.min.js deleted file mode 100644 index 49990d6..0000000 --- a/ep2017/static/jquery-2.1.4.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){ -return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*\s*$/g,ia={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n(" --> - - - - diff --git a/ep2017/templates/index.html b/ep2017/templates/index.html deleted file mode 100644 index d7ebc13..0000000 --- a/ep2017/templates/index.html +++ /dev/null @@ -1,255 +0,0 @@ - Talk Schedule - - - - - - - - - - - - - - - - - - - - - - - -
-

Logo

- - {# {{momentjs(timestamp).format('YYYY-MM-DD')}} #} -
- - -
- -

Current Talk:

- {% if next_talk[0] %} -

{{ next_talk[0].start }}

- {% endif %} -
- {% if next_talk[0] %} -

{{ next_talk[0].title }}

- {% else %} -

There is no actual talk, see when its going to be the next one...

- {% endif %} -
- -
-
-
-
Room
-
{{ room_name }}
-
-
-
-
-
Speaker
- {% if next_talk[0] %} -
{{ next_talk[0].speakers }}
- {% else %} -
No Speaker
- {% endif %} -
-
-
- -
- -
-
-
-

Upcoming talk

- {% if talks %} - {% for t in talks %} -

{{ t.end }}

-

: {{ t.title }} by {{ t.speakers }} ( {{ t.talk_type }} )

-
- {% endfor %} - {% else %} -

No next talks in the next hours... come tomorrow.

- {% endif %} -
-
- -
    -
  • -
  • -
  • -
  • -
-
- - - {#
-
- - -

INFORMATION

-
- - - - {% if talks_list %} -

WHATS HAPPENING IN EUROPYTHON 2015

- - - - - - - - - - - - - {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} - - - - - - - - - {% endfor %} - {% endfor %} - -
TrackTalk titleSpeakersTalk typeFinish
{{ t.track_title }}{{ t.title }}{{ t.speakers }}{{ t.talk_type }}{{ t.end }}
- {% endif %} - - -
-#} - - - - - - diff --git a/ep2017/templates/menu.html b/ep2017/templates/menu.html deleted file mode 100644 index a46b480..0000000 --- a/ep2017/templates/menu.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -

Available rooms:

-{% for i in options %} - -{% if "Hall" in i %} - {{ i }}
-{% else %} - {{ i }}
-{% endif %} - -{% endfor %} - - \ No newline at end of file diff --git a/ep2017/templates/multi_index.html b/ep2017/templates/multi_index.html deleted file mode 100644 index 445a1e8..0000000 --- a/ep2017/templates/multi_index.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - Talk Schedule - - - - - - - - - - - - - - - - - - - -
-

Logo

-
-
- -
-
- {# {{momentjs(timestamp).format('YYYY-MM-DD')}} #} -
-
-
- {% if not empty %} - {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} -
-
-
-

{{t.start_hour}}

: {{ t.title }} ({{ t.talk_type }})

-
- -
-
-
-
-
Room
-
{{ t.track_title }}
-
-
- -
-
-
Speaker
-
{{ t.speakers }}
-
-
-
-
-
-
- {% endfor %} - {% endfor %} - {% else %} -
-
-
-

No talks at this time

-
-
-
- {% endif %} -
-
- -
- -
-
-
-
-
-
- {% if not empty %} -

Upcoming talk

- -
- {% for track in talks_list %} - {% for t in talks_list[track]["current"] %} -

{{ t.title }}

- {% endfor %} - {% endfor %} -
- {% endif %} -
-
-
- -
-
-
    -
  • -
  • -
  • -
  • -
  • -
  • - -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • - -
-
-
-
- - - - diff --git a/ep2018/__init__.py b/ep2018/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ep2018/static/data/accepted_talks.json b/ep2018/static/data/accepted_talks.json deleted file mode 100644 index ae18508..0000000 --- a/ep2018/static/data/accepted_talks.json +++ /dev/null @@ -1,8195 +0,0 @@ -{ - "Closing session": { - "699": { - "abstract_short": "Closing Session", - "sub_title": "", - "timerange": "2016-07-22 17:30:00, 2016-07-22 18:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 699, - "speakers": "To be announced", - "title": "Closing Session", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS" - ], - "abstract_long": [ - "Closing Session", - "", - "", - "" - ], - "abstract_extra": "Closing Session", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/closing-session", - "admin_type": "Closing session", - "companies": "" - } - }, - "Keynote": { - "711": { - "abstract_short": "Have you ever wondered how you could be your own boss? or how you could make money from your side project? or build the next Facebook or Uber.\r\n\r\nTo be a coder in today's world of work is to have amazing opportunities to design the business life you want.\r\n\r\nI've enjoyed the last 20 years without a 'real job', as company founder, freelancer and side-project-hacker.\r\n\r\nNow I am bootstrapping my current company to profitability. Listen to my stories and learn from my mistakes and successes.", - "sub_title": "How I used my technical skills to design the business life I want; and how you can too", - "timerange": "2016-07-18 09:15:00, 2016-07-18 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@rwillmer", - "id": 711, - "speakers": "Rachel Willmer", - "title": "20 years without a 'proper job'", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Track", - "Business" - ], - "abstract_long": [ - "Have you ever wondered how you could be your own boss? If so, then this talk is for you.\r\n\r\nMaybe you're working on a sideproject and wonder how you could make some money from it? Or maybe you have the idea for the next Facebook or Uber?\r\n\r\nTo be a coder in today's world of work is to have amazing opportunities to design the business life you want. You can work remotely; you can write books, or teach, or consult, with anyone anywhere. \r\n\r\nYou can have a crazy idea on Friday and have it running by Monday. Design your architecture to use cloud computing, so your tiny team can scale up your huge ideas. \r\n\r\nOr keep it small, and just earn some extra money with a Wordpress plugin, or a training course.\r\n\r\nIt has been 21 years since I last had a 'real job' and a regular income. \r\n\r\nI survived creating and running a company through the madness of the dotcom years. I made money from sideprojects, that I had started just for fun and for learning. I have freelanced without needing to use an agency to find the work.\r\n\r\nAnd now I'm bootstrapping my current business to profitability. Listen to my stories and learn from my mistakes and successes.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "rachel@willmer.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-20-years-without-a-proper-job", - "admin_type": "Keynote", - "companies": "Luzme" - }, - "714": { - "abstract_short": "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython runs on the device.\r\n\r\nMy talk will tell the story of the project, describe Python's role in it and explain how the wider Python community can become involved. It may involve demonstrations, live coding and audience participation.", - "sub_title": "A million UK kids have been given a device that runs MicroPython. What could possibly go wrong?", - "timerange": "2016-07-18 13:45:00, 2016-07-18 14:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ntoll", - "id": 714, - "speakers": "Nicholas Tollervey", - "title": "A Million Children (and MicroPython)", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "MicroPython", - "Fun and Humor", - "Internet of Things (IoT)", - "python" - ], - "abstract_long": [ - "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython (a full reimplementation of Python 3) runs on the device.\r\n\r\nMy talk will tell the story of the project, describe Python's role in it and explain how the wider Python community can become involved. It may involve demonstrations, live coding and audience participation.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Educational", - "Python", - "Everything Else", - "Hardware", - "" - ], - "emails": "ntollervey@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-a-million-children-and-micropython", - "admin_type": "Keynote", - "companies": "" - }, - "702": { - "abstract_short": "While Python the language is wonderful, the Python community and the personal, social, and professional benefits that flow from involvement in a community like ours are often more compelling. \r\n\r\nLearn about the goals of the Python Software Foundation and how everyone can take part to help build even better Python communities locally, regionally, and globally. I will also discuss some of our strengths as a community, and also look at some of the challenges we face going forward.\r\n", - "sub_title": "From Community Import Python", - "timerange": "2016-07-21 09:15:00, 2016-07-21 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@NaomiCeder", - "id": 702, - "speakers": "Naomi Ceder", - "title": "Come for the Language, Stay for the Community", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "python", - "Community" - ], - "abstract_long": [ - "Python is a powerful and flexible tool that many of us love and use in many ways. And yet, as wonderful as the language is, many would say that the community is even more attractive. This talk will focus on involvement in the Python community and what that means - in particular the many personal, social, and professional benefits that flow from involvement in a community like ours.\r\n\r\nI will also discuss what the Python Software Foundation does, what its goals and purpose are, and how everyone in the community can take part in the PSF to help build even better Python communities. This will include specific explanations of the membership model and how active contributors (both in terms of code and community organisation) can and should become full voting members of the PSF.\r\n\r\nI will also touch on our strengths, like our commitment to safe and inclusive spaces and our devotion to education, and also look at some of the challenges we face as a community going forward.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "", - "Community" - ], - "emails": "naomi.ceder@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-stay-for-the-community", - "admin_type": "Keynote", - "companies": "Trans*Code" - }, - "710": { - "abstract_short": "Paul will take you through the process of making of a Disney movie. He will use examples from Zootopia to explain and illustrate the steps in making a movie and explain where technology, specifically Python, is involved. This is an updated talk from one given years ago with more information. \r\n\r\n*This talk won't be recorded.*", - "sub_title": "", - "timerange": "2016-07-19 09:15:00, 2016-07-19 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@paulhildebrandt", - "id": 710, - "speakers": "Paul Hildebrandt", - "title": "Inside the Hat: Python @ Walt Disney Animation Studios", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Case Study" - ], - "abstract_long": [ - "The Walt Disney Animation Studios has a long history of creating acclaimed animated films and continues to be an industry leader with regards to artistic achievements, storytelling excellence, and cutting-edge innovations. Since the 1923 release of Snow White they\u2019ve been pushing forward technology in the art of movie making. This push continues in the modern day with classics such as Oscar winning box office hits \"Big Hero 6\" and \u201cFrozen\u201d and Oscar nominated hits \u201cWreck-It Ralph\u201d, \u201cTangled\u201d, \u201cBolt\u201d, \u201cTreasure Planet\u201d, and \u201cDinosaur\u201d.\r\n\r\nOne of the most common questions we get when attending PyCon is \u201cWhy are you here?\u201d People seem confused that technology, especially Python is used in the making of animated films. \r\n\r\nTo dive into exactly where Python is used without context would be confusing so Paul will give the audience some background on the Walt Disney Animation Studios. He will talk about what we\u2019ve done and what we are currently working on.\r\n\r\nThe main part of the talk is describing the production process whilst imparting this information he will interject where technology and specifically Python comes into play. He will describe the tools in each area and the tech stack used to create them.\r\n\r\nHe will then dive more deeply into the products he owns and discuss python in general at Disney.\r\n\r\n*This talk won't be recorded.*", - "", - "", - "" - ], - "abstract_extra": "The Walt Disney Animation Studios has a long history of creating acclaimed animated films and continues to be an industry leader with regards to artistic achievements, storytelling excellence, and cutting-edge innovations. Since the 1923 release of Snow White they\u2019ve been pushing forward technology in the art of movie making. This push continues in the modern day with classics such as Oscar winning box office hits \"Big Hero 6\" and \u201cFrozen\u201d and Oscar nominated hits \u201cWreck-It Ralph\u201d, \u201cTangled\u201d, \u201cBolt\u201d, \u201cTreasure Planet\u201d, and \u201cDinosaur\u201d.\r\n\r\nOne of the most common questions we get when attending PyCon is \u201cWhy are you here?\u201d People seem confused that technology, especially Python is used in the making of animated films. \r\n\r\nTo dive into exactly where Python is used without context would be confusing so Paul will give the audience some background on the Walt Disney Animation Studios. He will talk about what we\u2019ve done and what we are currently working on.\r\n\r\nThe main part of the talk is describing the production process whilst imparting this information he will interject where technology and specifically Python comes into play. He will describe the tools in each area and the tech stack used to create them.\r\n\r\nHe will then dive more deeply into the products he owns and discuss python in general at Disney.\r\n\r\n*This talk won't be recorded.*", - "tag_categories": [ - "Case Study" - ], - "emails": "paul.hildebrandt@disney.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-inside-the-hat-python-at-alt-disney-animation", - "admin_type": "Keynote", - "companies": "Walt Disney Animation Studios" - }, - "705": { - "abstract_short": "Scientists have been searching for the elusive gravitational wave for more than half a century. Hear how they finally found them, and the role that Python played in the discovery.\r\n\r\n", - "sub_title": "The epic hunt for the elusive gravitational-wave, and Python's pivital role in the discovery", - "timerange": "2016-07-20 09:15:00, 2016-07-20 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 705, - "speakers": "Jameson Rollins", - "title": "LIGO: The Dawn of Gravitational Wave Astronomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Science", - "The Answer to Life the Universe and Everything Else", - "Machine-Learning", - "Human-Machine-Interaction", - "Analytics" - ], - "abstract_long": [ - "Scientists have been searching for the elusive gravitational wave for more than half a century. On September 14, 2015, the Laser Interferometer Gravitational-wave Observatory (LIGO) finally observed the gravitational wave signature from the merger of two black holes. This detection marks the dawn of a new age of _gravitational wave astronomy_, where we routinely hear the sounds emanating from deep within the most energetic events in the Universe. This talk will cover the events leading up to one of the most important discoveries of the last century, and the myriad of ways in which Python enabled the effort.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Sciences", - "Everything Else", - "Data Science", - "Hardware", - "Data Science" - ], - "emails": "jrollins@finestructure.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-ligo", - "admin_type": "Keynote", - "companies": "LIGO Caltech" - }, - "709": { - "abstract_short": "Data science is a hot topic and Python has emerged as an ideal language for it.\r\nIts strength for data analysis come from the cultural mix between the scientific Python community, and more conventional software usage, such as web development or system administration. I'll show how and why Python is a easy and powerful tool for data science.", - "sub_title": "", - "timerange": "2016-07-22 09:15:00, 2016-07-22 10:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@GaelVaroquaux", - "id": 709, - "speakers": "Ga\u00ebl Varoquaux", - "title": "Scientist meets web dev: how Python became the language of data", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Science", - "Data" - ], - "abstract_long": [ - "Python started as a scripting language, but now it is the new trend everywhere and in particular for data science, the latest rage of computing. It didn't get there by chance: tools and concepts built by nerdy scientists and geek sysadmins provide foundations for what is said to be the sexiest job: data scientist.\r\n\r\nIn my talk I'll give a personal perspective, historical and technical, on the progress of the scientific Python ecosystem, from numerical physics to data mining. What made Python suitable for science; How could scipy grow to challenge commercial giants such as Matlab; Why the cultural gap between scientific Python and the broader Python community turned out to be a gold mine; How scikit-learn was born, what technical decisions enabled it to grow; And last but not least, how we are addressing a wider and wider public, lowering the bar and empowering people.\r\n\r\nThe talk will discuss low-level technical aspects, such as how the Python world makes it easy to move large chunks of number across code. It will touch upon current exciting developments in scikit-learn and joblib. But it will also talk about softer topics, such as project dynamics or documentation, as software's success is determined by people.", - "", - "", - "" - ], - "abstract_extra": ".", - "tag_categories": [ - "Sciences", - "" - ], - "emails": "gael.varoquaux@normalesup.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keynote-science-web-dev", - "admin_type": "Keynote", - "companies": "INRIA" - } - }, - "EPS session": { - "695": { - "abstract_short": "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:30:00", - "sub_community": "", - "duration": 60, - "twitters": "@b_smoke, @malemburg", - "id": 695, - "speakers": "Fabio Pliger, Marc-Andre Lemburg", - "title": "EPS General Assembly", - "have_tickets": [ - true, - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS", - "Community" - ], - "abstract_long": [ - "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "", - "", - "" - ], - "abstract_extra": "This is where the EuroPython Society (EPS) board gives its reports, resolutions are passed and the EPS members can vote in a new EPS board.", - "tag_categories": [ - "Community", - "Community", - "Community", - "Community" - ], - "emails": "fabio.pliger@gmail.com, mal@europython.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/eps-general-assembly", - "admin_type": "EPS session", - "companies": "Continuum Analytics, eGenix.com Software GmbH" - }, - "696": { - "abstract_short": "We need help with organizing and running EuroPython 2017.\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@b_smoke, @malemburg", - "id": 696, - "speakers": "Fabio Pliger, Marc-Andre Lemburg", - "title": "EuroPython 2017: Help us build the next edition!", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Euro Python and EPS" - ], - "abstract_long": [ - "We need help with organizing and running EuroPython 2017\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "fabio.pliger@gmail.com, mal@europython.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/europython-2017-help-us-build-the-next-edition", - "admin_type": "EPS session", - "companies": "Continuum Analytics, eGenix.com Software GmbH" - } - }, - "Lightning talk": { - "469": { - "abstract_short": "The LightingTalkShow is the time for new and exceptional ideas to shine.", - "sub_title": "", - "timerange": "2016-07-18 17:15:00, 2016-07-18 18:15:00", - "sub_community": "", - "duration": 60, - "twitters": "@mcltm", - "id": 469, - "speakers": "Harald Armin Massa", - "title": "The LightningTalkShow", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Communication", - "Conferences and Meet-Ups", - "Best Practice" - ], - "abstract_long": [ - "At the LightningTalkShow, there is script, there are no trained actors. Just the regular attendants, delivering interesting, diverse or crazy presentation about all things Python and computer.\r\n\r\nTo encourage the delivery, the LightningTalkMan shall conduct this ceromny, finding words when Laptops do not find the projector; allways honouring the motto of the original Python: the show must go on.\r\n", - "", - "", - "" - ], - "abstract_extra": "of course those 60 or whatever amount of minutes are allocated will be filled by participants who give LightningTalks.", - "tag_categories": [ - "Community", - "Community", - "Best Practice and Use Cases" - ], - "emails": "chef@ghum.de", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-lightningtalkshow", - "admin_type": "Lightning talk", - "companies": "2ndQuadrant Deutschland GmbH" - } - }, - "Recruiting session": { - "717": { - "abstract_short": "The recruiting sponsors will present their companies and their job offers in short talks.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@b_smoke", - "id": 717, - "speakers": "Fabio Pliger", - "title": "Recruiting session", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "workforce" - ], - "abstract_long": [ - "The recruiting sponsors will present their companies and their job offers in short talks.", - "", - "", - "" - ], - "abstract_extra": "The recruiting sponsors will present their companies and their job offers in short talks.", - "tag_categories": [ - "Business" - ], - "emails": "fabio.pliger@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/recruiting-session", - "admin_type": "Recruiting session", - "companies": "Continuum Analytics" - } - }, - "Reserved slot": { - "706": { - "abstract_short": "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "sub_title": "reserved for hot topics", - "timerange": "", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 706, - "speakers": "To be announced", - "title": "Reserved for 2nd Call for Proposals", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "", - "tags": [ - "General", - "python" - ], - "abstract_long": [ - "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/reserved-for-2nd-call-for-proposals", - "admin_type": "Reserved slot", - "companies": "" - }, - "707": { - "abstract_short": "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "sub_title": "reserved for hot topics", - "timerange": "", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 707, - "speakers": "To be announced", - "title": "Reserved for 2nd Call for Proposals", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "", - "tags": [ - "General", - "python" - ], - "abstract_long": [ - "June 4th we will open a second Call for Proposals, limited to hot topics and most recent developments in software and technology. Read our blog post here: http://blog.europython.eu/post/143625007372/europython-2016-extra-hot-topics-call-for", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "", - "" - ], - "emails": "alex@hendorf.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/reserved-for-2nd-call-for-proposals-1", - "admin_type": "Reserved slot", - "companies": "" - } - }, - "training": { - "490": { - "abstract_short": "Chinese is a fascinating but also dauntingly complex language. So let's use Python to make learning it easier! In this tutorial, we will use Python's powerful data analysis capabilities to accelerate our understanding of the Chinese language, boosting both our Chinese and our Python skills:\r\n\r\nSpeech analysis will help us to cut through our pronunciation problems, image recognition will make Chinese characters look less foreign to us and statistics will tell us what to learn, and what not.", - "sub_title": "Using Python to become better at language learning.", - "timerange": "2016-07-21 14:00:00, 2016-07-21 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@japh44", - "id": 490, - "speakers": "Andreas Dewes", - "title": "(Machine-)Learning Chinese, with Python!", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4 [PyData Track]", - "tags": [ - "Visualization", - "Natural Language Processing", - "Educational Track", - "Algorithms", - "Machine-Learning" - ], - "abstract_long": [ - "#(Machine-)Learning Chinese, with Python!\r\n\r\nLearning a new language is hard work. Especially if it is Chinese, which is a tonal language that is written using more than 10.000 different characters. Finding our way around in this linguistic labyrinth is a daunting task. But do not fear, for we have the power of Python at our side, and with its help we will **machine-learn Chinese**!\r\n\r\n## Mom scolds the horse \r\n\r\nChinese is a tonal language, which means that pronouncing a syllable differently will usually change its meaning. And while this can be very funny, it can also be rather embarrassing for language learners. So, to keep us from getting into linguistic trouble, we'll write a little Python tool that helps us to improve our pronunciation.\r\n\r\n## Seeing the trees and the forest, but still being lost\r\n\r\nReading the morning newspaper while having a nice cup of tea doesn't sound so complicated, does it? Well, if that newspaper is printed in Chinese we will have to know about 2.500 characters just to make it through the first pages. Again, machine-learning will come to our rescue!\r\n\r\n## Low-hanging fruits, high-flying dragons\r\n\r\nPronunciation and characters mastered, we'll still have to learn a large amount of words and phrases, so where to begin? To answer this, we'll make use of Bayesian techniques to identify the low-hanging fruits of the Chinese language.\r\n\r\nCongratulations, you should now be fluent in Chinese (or at least Machine-Learning)." - ], - "abstract_extra": "After speaking about a fairly scientific topic at the last EuroPython, I want to do something more applied this year! \r\n\r\nAs I'm currently learning Chinese, I thought applying machine-learning to this could be a very good use case for showing off some Python libraries for data analysis and visualization. Also, Chinese is a fascinating topic by itself and something that many people can relate to as Chinese culture becomes more pervasive around the world.\r\n\r\nMy idea is therefore to do a tutorial in which people can apply different machine learning methods to problems that we encounter in language learning. I selected three specific problems (voice recognition, image classification, text processing) for this, which in my opinion are very well suited to a machine-learning approach and produce interesting and relevant results while being easy to explain and understand on a basic level.\r\n\r\nI also would like to give a talk about the material that we cover in the tutorial such that a wider audience can enjoy it, I therefore also submitted a proposal for a summary talk (with the same title). \r\n\r\nI already spoke at many IT & scientific conferences and usually received very good audience feedback for my talks (but maybe people are just very polite :D ), a selection of my talks and publications can be found on my website: http://www.andreas-dewes.de/talks.html\r\n\r\nI also have more than 7 years of experience in using Python for data analysis and I really enjoy teaching, which I have done both at University and professionally in my job.", - "tag_categories": [ - "Data Science", - "Data Science", - ">>> Suggested Track", - "Data Science", - "Data Science" - ], - "emails": "andreas.dewes@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-chinese-with-python", - "admin_type": "", - "companies": "7scientists UG" - }, - "396": { - "abstract_short": "In this short tutorial session you'll learn how easy it is to build 3d objects with python code in blender. We begin with constructing 3d objects with cubes and we finish by rendering a small video/gif with mini explosions! It is meant to be very beginner friendly and will be a fun exercise to show how flexible python can be. ", - "sub_title": "From python code to 3d GIF animations.", - "timerange": "2016-07-22 10:15:00, 2016-07-22 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@fishnets88", - "id": 396, - "speakers": "vincent warmerdam", - "title": "Blender: much visual, very 3d, many python.", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Visualization", - "Blender" - ], - "abstract_long": [ - "In this short tutorial session you'll learn how easy it is to build 3d objects with python code in blender. We begin with constructing 3d objects with cubes and we finish by rendering a small video/gif with mini explosions! It is meant to be very beginner friendly and will be a fun exercise to show how flexible python can be. \r\n\r\nThese two blogposts of mine will give an impression of what people can do at the end of the day. \r\n- http://koaning.io/python-blender-gif.html\r\n- http://koaning.io/python-cubes-in-blender.html\r\n\r\nIf customs allow it: I'll consider bringing an oculus rift such that people can walk in their own creations." - ], - "abstract_extra": "This is my blog: http://koaning.io/. \r\n\r\nI've done many talks in the past. Both at PyData events and EuroPython. If you type my name into youtube, you should find example videos of me. ", - "tag_categories": [ - "Data Science", - "Everything Else" - ], - "emails": "vincentwarmerdam@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/blender-much-visual-very-3d-many-python", - "admin_type": "", - "companies": "GoDataDriven" - }, - "573": { - "abstract_short": "This tutorial is targeted at the intermediate-to-advanced Python user who wants to extend Python into High-Performance Computing. The tutorial will provide hands-on examples and essential performance tips every developer should know for writing effective parallel Python. The result will be a clear sense of possibilities and best practices using Python in HPC environments.\r\n", - "sub_title": "", - "timerange": "2016-07-19 10:15:00, 2016-07-19 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 573, - "speakers": "Michael McKerns", - "title": "Efficient Python for High-Performance Parallel Computing", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Multi-Threading", - "Python general", - "Abstractions", - "Multi-Processing", - "Performance" - ], - "abstract_long": [ - "Many of the examples you often find on parallel Python focus on the mechanics of getting the parallel infrastructure working with your code, and not on actually building good portable parallel Python. This tutorial is intended to be a broad introduction to writing high-performance parallel Python that is well suited to both the beginner and the veteran developer. Parallel efficiency starts with the speed of the target code itself, so we will start with how to evolve code from for-loops to Python looping constructs and vector programming. We will also discuss tools and techniques to optimize your code for speed and memory performance.\r\n\r\nThe tutorial will overview working with the common parallel communication technologies (threading, multiprocessing, MPI) and introduce the use of parallel programming models such as blocking and non-blocking pipes, asynchronous and iterative conditional maps, and map-reduce. We will discuss strategies for extending parallel workflow to utilize hierarchical and heterogeneous computing, distributed parallel computing, and job schedulers. We then return our focus to the speeding up our target code by leveraging parallelism within compiled code using Cython.\r\n\r\nAt the end of the tutorial, participants should be able to write simple parallel Python scripts, make use of effective parallel programming techniques, and have a framework in place to leverage the power of Python in High-Performance Computing.", - "", - "", - "" - ], - "abstract_extra": "An earlier version of the tutorial is available at: http://www.pyvideo.org/video/1345/efficient-parallel-python-for-high-performance-co while a preliminary version of the tutorial is at https://github.com/mmckerns/tuthpc.\r\n", - "tag_categories": [ - "Programming", - "Python", - "Everything Else", - "Programming", - "Programming" - ], - "emails": "mmckerns@uqfoundation.org", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/efficient-python-for-high-performance-parallel-computing", - "admin_type": "", - "companies": "the UQ Foundation" - }, - "592": { - "abstract_short": "Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.", - "sub_title": "", - "timerange": "2016-07-20 10:15:00, 2016-07-20 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@pyacademy", - "id": 592, - "speakers": "Mike M\u00fcller", - "title": "Faster Python Programs - Measure, don't Guess", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Algorithms", - "Tooling", - "Data Structures", - "Best Practice", - "Performance" - ], - "abstract_long": [ - "Python is a great language. But it can be slow compared to other languages\r\nfor certain types of tasks. If applied appropriately, optimization may reduce\r\nprogram runtime or memory consumption considerably. But this often comes at a\r\nprice. Optimization can be time consuming and the optimized program may be more\r\ncomplicated. This, in turn, means more maintenance effort. How do you find\r\nout if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how\r\nto find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n" - ], - "abstract_extra": "## Outline\r\n\r\n* How Fast is Fast Enough? (5 min)\r\n* Optimization Guidelines and Strategy (10 min)\r\n* Measuring run time\r\n * ``time``, ``timeit``, decorators for timing (5 min)\r\n * Wall Clock vs. CPU Time (2 min)\r\n* Profiling CPU Usage\r\n * cProfile (10 min)\r\n * A Picture is Worth a Thousand Words\r\n * SnakeViz (10 min)\r\n * Going Line-by-Line (5 min)\r\n * Exercise (15 min)\r\n* Profiling Memory Usage\r\n * Pympler (5 min)\r\n * Memory Usage Line-by-Line with memory_profiler (5 min)\r\n * Roll your own (5 min)\r\n * Exercise (10 min)\r\n* Algorithms and Anti-patterns\r\n * String Concatenation (3 min)\r\n * List and Generator Comprehensions (5 min)\r\n * Think Global buy Local (5 min)\r\n * Exercise (5 min)\r\n* The Right Data Structure\r\n * Use built-in Data Types (2 min)\r\n * ``list`` vs. ``set`` (3 min)\r\n * ``list`` vs. ``deque`` (5 min)\r\n * ``dict`` vs. ``defaultdict`` (5 min)\r\n * Big-O notation and Data Structures (5 min)\r\n * O(1) vs. O(n) vs. O(n) (5 min)\r\n * Exercise (15 min)\r\n* Caching\r\n * Reuse before You Recalculate (5 min)\r\n * Deterministic caching (5 min)\r\n * Non-deterministic caching (5 min)\r\n * Least Recently Used Cache (5 min)\r\n * Memcached (5 min)\r\n * Exercise (10 min)\r\n\r\n## Software Requirements\r\n\r\nYou will need Python 2.7 or 3.5 installed on your laptop. Python 2.6 or 3.3/3.4\r\nshould also work. Python 3.x is strongly preferred.\r\n\r\n\r\n### IPython Notebook\r\n\r\nI will use an IPython Notebook for the tutorial because it makes a very good\r\nteaching tool. You are welcome to use the setup you prefer, i.e editor, IDE,\r\nREPL. If you also like to use an IPython Notebook, I recommend `conda` for\r\neasy installation. Similarly to `virtualenv`, `conda` allows creating isolated\r\nenvironments but allows binary installs for all platforms.\r\n\r\nThere are two ways to install`IPython` via `conda`:\r\n\r\n1. Use [Minconda][1]. This is a small install and (after you installed it)\r\n you can use the command `conda` to create an environment:\r\n `conda create -n pycon2016 python=3.5`\r\n Now you can change into this environment:\r\n `source activate pycon2016`. The prompt should change to `(pycon2016)`.\r\n Now you can install IPython: `conda install IPython`.\r\n\r\n2. Install [Anaconda][2] and you are ready to go if you don't mind installing\r\n lots of packages from the scientific field.\r\n\r\n\r\nThe second option also gives you `conda` and you can create more environments\r\njust as with Miniconda (see 1.).\r\n\r\n### Working witch ``conda`` environments\r\n\r\nAfter creating a new environment, the system might still work with some\r\nstale settings. Even when the command ``which`` tells you that you are using an\r\nexecutable from your environment, this might actually not be the case.\r\nIf you see strange behavior using a command line tool in your environment,\r\nuse ``hash -r`` and try again. Please install ``pip`` inside this environment:\r\n\r\n conda install pip\r\n\r\n\r\n### Tools\r\n\r\nYou can install these with ``pip`` (in the active ``conda`` environment):\r\n\r\n* [SnakeViz][3]\r\n* [line_profiler][4]\r\n* [Pympler][6]\r\n* [memory_profiler][7]\r\n* [pyprof2calltree][9]\r\n\r\n\r\n\r\n#### Linux\r\n\r\nUsing the package manager of your OS should be the best option.\r\n\r\n\r\n[1]: http://conda.pydata.org/miniconda.html\r\n[2]: http://continuum.io/downloads\r\n[3]: http://jiffyclub.github.io/snakeviz/\r\n[4]: https://pypi.python.org/pypi/line_profiler/\r\n[6]: https://pypi.python.org/pypi/Pympler\r\n[7]: https://pypi.python.org/pypi/memory_profiler\r\n[8]: http://kcachegrind.sourceforge.net/html/Home.html\r\n[9]: https://github.com/pwaller/pyprof2calltree/\r\n\r\n## About the trainer\r\n\r\nI've been teaching Python courses since 2004. According to my statistics,\r\nI taught about 250 Python courses totaling over 600 teaching day.\r\nThis includes 16 tutorials at PyCon as well as numerous tutorials at\r\nEuroPython, EuroSciPy, PyCon DE, PyCon PL, PyCon IE, PyCon AsiaPacific\r\nas well as at PyData London and Berlin.\r\n\r\nI've been teaching tutorials about this topic every year at PyCon US from 2007\r\nthrough 2014 as well at PyData Berlin 2015 and at EuroPython 2015 in Bilbao.\r\nThis version has been revised **based on the feedback from the last tutorial\r\ndeliveries**.\r\n\r\nFirst, the tutorial covers fewer topics. I cut out tools that do not support\r\nPython 3 such as SnakeRunSnake and Heapy.\r\n\r\nSecond, I added more exercises. This should allow more focus on the core of the\r\ntutorial and also include more hands-on work by the participants. This \u201eLess is\r\nMore\u201c approach is additionally justified because the content of the tutorial\r\ngrew over time as more very useful tools became available. I think more\r\ndepths and less range makes sense for this topic.\r\n\r\nThere is a 60-page PDF handout that is rather comprehensive and can serve for\r\nself-study after the tutorial.\r\n", - "tag_categories": [ - "Data Science", - "Programming", - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "mmueller@python-academy.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/faster-python-programs-measure-dont-guess-1", - "admin_type": "", - "companies": "Python Academy GmbH & Co. KG" - }, - "556": { - "abstract_short": "During this workshop, you will be guided to make an open source contribution to the [coala][1] project. You will learn about quality restrictions and code review as well as the necessary tools to rework your patches to get them accepted. With the knowledge from this course you should easily be able to go out and help any open source project!\r\n\r\n [1]: http://coala-analyzer.org\r\n", - "sub_title": "Qualifies attendees for contribution to coala and other open source projects.", - "timerange": "2016-07-22 14:00:00, 2016-07-22 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@tushar_rishav", - "id": 556, - "speakers": "Tushar Gautam", - "title": "Guide to make a real contribution to an open source project for novice", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Python 3", - "Beginners", - "Git", - "Open-Source", - "Development" - ], - "abstract_long": [ - "Goal\r\n----\r\nYou will be guided to make a real contribution to an open source project ([_coala_][1]). The skills you learn are generally applicable. \r\n\r\nPrerequisite\r\n------------\r\n1. Eager to contribute to open source.\r\n2. Willingness to do great things in python\r\n3. GitHub account\r\n4. Git and Python installed\r\n5. A laptop\r\n\r\n\r\nOverview\r\n--------\r\n- Talk about version control (specifically Git). Basic stuffs like setup git and commands like `fork/clone, pull/fetch, push, commit/ammend, squash` etc. We'll be following **learning by doing** paradigm. Approx 15 minutes.\r\n- Introduce people to [_coala_][1] in general, brief about its codebase and how to use Github to contribute to coala. Approx 15 minutes.\r\n- Get started to write some code. We'll have bunch of unassigned issues, specifically created for \r\nthe purpose of workshop, show people how developers collaborate, cover git commands in more detail and the pull requests from attendees. Approx 1.30 hrs.\r\nWe'll also talk in brief about quality/testing tools like Travis Ci, CircleCi, Gitmate etc. In the meantime we'll start reviewing the PRs. Approx 20 minutes.\r\n- Finally, reworking the code phase and get every attendees merge their contributions to master branch.\r\n\r\n \r\n[1]: http://coala-analyzer.org/" - ], - "abstract_extra": "We've been using git and programming in Python since a fair amount of time. We've also conducted workshops regarding the contribution to open source in University. We'll be glad to share what we've learnt so far with the community. We also look forward to learn a lot from this conference. \r\nThe workshop shall be conducted by [_Tushar Gautam_][1] and [_Vishal Agarwal_][2] ,the two contributors to coala :\r\n [1]: https://github.com/tushar-rishav\r\n [2]: https://github.com/charizard42", - "tag_categories": [ - "Python", - "Educational", - "DevOps", - "Open Source", - "Programming" - ], - "emails": "tushar.rishav@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/guid-to-make-a-real-contribution-to-an-open-source-project-for-novice", - "admin_type": "", - "companies": "" - }, - "407": { - "abstract_short": "Want to learn how to clean, investigate, explore and analyze your data using Python? This workshop will take you from using Python as a developer into the basics of using Python as a data wrangler. We will cover an introduction to several data science libraries including Pandas, as well as some basic charting and reporting libraries.", - "sub_title": "Solving problems through data cleaning, analysis and reporting", - "timerange": "2016-07-21 10:15:00, 2016-07-21 13:15:00", - "sub_community": "pydata", - "duration": 180, - "twitters": "@kjam", - "id": 407, - "speakers": "Katharine Jarmul", - "title": "Introduction to Data Wrangling", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4 [PyData Track]", - "tags": [ - "Visualization", - "Jupyter/iPython Notebook", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "APIs" - ], - "abstract_long": [ - "Overview \r\n------------------ \r\nIn this tutorial, we'll be taking an exploratory look at how to perform data wrangling using Python. It's assumed the audience has a working understanding of Python and some basic data analysis exposure. Participants will leave the class with a better understanding of useful Python libraries for data analysis, as well as some hands-on scripts built throughout the tutorial. With these initial first steps, they should feel comfortable integrating data analysis into their current Python projects. \r\n\r\nOutline \r\n------------------ \r\n* Introduction to Data Wrangling with Python \r\n** How to ask questions \r\n** Where to find data \r\n** Why Python? \r\n\r\n* Initial setup\r\n** IPython Notebook \r\n** Getting the data \r\n\r\n* Importing data\r\n** Working with easy formats \r\n** Working with hard formats \r\n** APIs \r\n\r\n* Exploring data \r\n** Using pandas \r\n** Asking simple questions \r\n** Joining datasets \r\n\r\n* Analysing data \r\n** What is the data saying \r\n** Standardization and normalization \r\n** Making conlusion \r\n\r\n* Reporting your findings \r\n** Who is your audience \r\n** Charting data \r\n** Interactive charts and graphs \r\n\r\n* Next steps \r\n** Where to go from here \r\n** Q&A \r\n** \"Homework\" " - ], - "abstract_extra": "This tutorial will be based on work for my recently completed O'Reilly book, (Data Wrangling with Python)[http://shop.oreilly.com/product/0636920032861.do]. I've spoken at several US PyCon and other Python conferences and led classes for PyLadies in Los Angeles and Berlin. \r\n\r\nI've presented a version of this tutorial at EuroPycon last year, and, despite WiFi issues, received some great feedback and reviews. I've modified it and updated it to be more on-point with the audience in mind. ", - "tag_categories": [ - "Data Science", - "Python", - "Data Science", - "Web" - ], - "emails": "kjarmul@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-data-wrangling", - "admin_type": "", - "companies": "kjamistan" - }, - "629": { - "abstract_short": "**Objectives:**\r\n\r\n1) What is deep learning and why is it the current rage? \r\n2) How to implement a deep learning algorithm from scratch? \r\n3) Python library for deep learning - Keras\r\n4) Leverage deep learning for natural language processing \r\n5) Impact of GPU for deep learning \r\n\r\nThis workshop covers some of the common deep learning architectures for NLP with hands-on implementation of them using the latest deep learning libraries. The main topics would be MLP, RNN and word2vec.\r\n\r\n", - "sub_title": "A single neuron to a civilization", - "timerange": "2016-07-20 10:15:00, 2016-07-20 13:15:00", - "sub_community": "pydata", - "duration": 180, - "twitters": "@bargava, @nischalhp, @raghothams", - "id": 629, - "speakers": "Bargava Subramanian, Nischal HP, Raghotham Sripadraj", - "title": "Introduction to Deep Learning for Natural Language Processing", - "have_tickets": [ - true, - false, - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Natural Language Processing", - "Machine-Learning", - "Deep Learning", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "Ever wondered how Google Translate works so well? Do you know how the auto-captioning works on Youtube? How to mine the sentiments of tweets on twitter? And there's a host of successful natural language processing examples out there. What's the underlying theme? They all use Deep Learning.\r\n\r\nThis workshop introduces artificial neural networks and deep learning. The building blocks of neural networks are discussed in detail. Attendees are introduced to learning using ANN with backpropagation algorithm.\r\n\r\nA preliminary model using multi-layer perceptron is implemented to get a feel for deep learning model structure and the library keras.\r\n\r\nThe state-of-art recurrent neural networks is introduced. Two approaches are shown - 0ne using Long Short-Term Memory models and another one leveraging Word2Vec. Some ways to overcome overfitting are explored. \r\n\r\nWe'll also show how GPU's affect the computation.\r\n\r\nWe'll also implement a RNN to do text-generation.\r\n\r\n\r\n**Ideal Background of the attendee**\r\n\r\nSome knowledge of machine learning. \r\n - Bias and Variance\r\n - Train, Validation, and Test sets\r\n - Cross-validation\r\n - hyperparameter optimization\r\n - Measuring model accuracy \r\n - Supervised and Unsupervised learning\r\n - Overfitting \r\n - Basic Python constructs\r\n\r\nThe repository for the tutorial is [here][1]\r\n\r\nThe repository has instructions on what packages to install and the data we would be using for the workshop.\r\n\r\n [1]: https://github.com/rouseguy/intro2deeplearning\r\n", - "", - "", - "" - ], - "abstract_extra": "This tutorial will be conducted along with Raghotham S(raghotham.s@gmail.com) and Nischal HP(nischalhp@gmail.com)\r\n\r\nWe have conducted this workshop at the following places\r\n[PyCon Ireland 2015][5]\r\n[PyCon Poland 2015][4]\r\n[Fifth Elephant 2015(India's largest Data Science Conference)][3]\r\n[IEEE Conference on Cloud Computing for Emerging Markets][2]\r\n[PyCon Czech 2015][1]\r\n\r\n [1]: https://cz.pycon.org/2015/workshops/\r\n [2]: http://conferences.computer.org/ccem/program.html\r\n [3]: https://fifthelephant.talkfunnel.com/2015/10-introduction-to-deep-learning\r\n [4]: http://pl.pycon.org/2015/agenda_en.html\r\n [5]: http://lanyrd.com/2015/pyconie/sdrpqd/\r\n\r\nIn addition to this, the speakers have organized workshops at the following places\r\nPyCon India 2015 - Introduction to Statistics\r\nBangalore Python User Group: \r\n- Machine Learning (June 2015)\r\n- Data Analysis(August 2015)\r\n- Optimization (February 2016) ", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "bargava@gmail.com, nischal.hp@gmail.com, raghotham.s@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-deep-learning-for-natural-language-processing", - "admin_type": "", - "companies": "Cisco, Unnati Data Labs" - }, - "425": { - "abstract_short": "We will run through a fork of the publicly available ipython-in-depth tutorial \r\n [https://github.com/mjbright/ipython-in-depth][1]\r\nto discover many of the capabilities of Jupyter and IPython.\r\n\r\n [1]: https://github.com/mjbright/ipython-in-depth\r\n", - "sub_title": "Discover IPython/Jupyter through hands-on exercises with this time tested (evolving) tutorial", - "timerange": "2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@mjbright", - "id": 425, - "speakers": "Mike BRIGHT", - "title": "IPython in Depth", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Notebook", - "Jupyter/iPython" - ], - "abstract_long": [ - "We will run through a fork of the publicly available ipython-in-depth tutorial \r\n - [https://github.com/mjbright/ipython-in-depth][1]\r\n\r\nto discover many of the capabilities of Jupyter and IPython.\r\n\r\nPlease bring your own PC with Jupyter already installed.\r\nI recommend to have the Anaconda distribution, see here for suggested installation methods:\r\n - [http://jupyter.readthedocs.org/en/latest/install.html][2]\r\n\r\nI will work through at least the following tutorial sections:\r\n\r\n - Notebook Basics + beyond plain python\r\n - Markdown Cells\r\n - Rich Display System\r\n - Introduction to Interactive Javascript Widgets\r\n\r\nWe will spend roughly 45 mins on each section\r\n\r\nThis is a beginners Jupyter/IPython session.\r\nNevertheless, there's no problem for people to jump ahead, or to perform other exercises container within that repo.\r\n\r\nI've created a gitter channel for dissemination of information and to allow participants to chat and help each other. Feel free to post before/after the session.\r\nYou can join the channel here:\r\n[https://gitter.im/mjbright/ipython-in-depth][3]\r\n\r\n [1]: https://github.com/mjbright/ipython-in-depth\r\n [2]: http://jupyter.readthedocs.org/en/latest/install.html\r\n [3]: https://gitter.im/mjbright/ipython-in-depth\r\n", - "", - "", - "" - ], - "abstract_extra": "The tutorial will be run on attendee PCs.\r\n\r\nTutorial will be based on the publicly available tutorials on the github IPython and Jupyter repositories.\r\n\r\nCan be adapted if particular requirements are suggested.\r\n\r\nI am more than open to participating with other speakers on this lab.\r\n", - "tag_categories": [ - "", - "" - ], - "emails": "europython@mjbright.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/ipython-in-depth", - "admin_type": "", - "companies": "HPE" - }, - "615": { - "abstract_short": "The open source devpi private packaging system is used in many organisations and in this course you learn how to make the best use of it. Devpi helps with packaging and uploading python packages, documentation and test results to private indexes. In this course you'll also learn how to setup the server and client-side of devpi and how to implement staging and custom work flows. ", - "sub_title": "", - "timerange": "2016-07-20 14:00:00, 2016-07-20 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 615, - "speakers": "holger krekel", - "title": "Manage your Python packages professionally with devpi", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Infrastructure", - "Testing", - "Packaging" - ], - "abstract_long": [ - "The devpi server can manage all your private python packages and documentation and you can use well-known python tools like pip, tox, twine and sphinx to work with it. It also serves as a caching proxy for pypi.python.org and indexes can be configured to work as an \"overlay\" where your private packages appear in addition to public python ones. The server provides a web interface which integrates search and sphinx-generated documentation. All of this will be demonstrated and learned through little exercises during the course.\r\n\r\nThe devpi client side provides help for creating users, indexes, uploading packages, documentation and performing package-defined tests. In the course you'll learn the basics of command line usage with devpi and how to use it to implement custom work flows.\r\n\r\nMore info on the devpi system at doc.devpi.net" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Testing", - "Python" - ], - "emails": "holger@merlinux.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/manage-your-python-packages-professionally-with-devpi", - "admin_type": "", - "companies": "merlinux GmbH" - }, - "650": { - "abstract_short": "Learn how to use the [Cython][1] compiler to bring complex array computations to the speed of C without resorting to low level languages.\r\n\r\n [1]: http://cython.org/\r\n", - "sub_title": "Learn how to speed up complex array computations with Cython", - "timerange": "2016-07-20 14:00:00, 2016-07-20 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 650, - "speakers": "Stefan Behnel", - "title": "NumPy with Cython", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Cython", - "Big Data", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Compiler and Interpreters" - ], - "abstract_long": [ - "The [Cython][1] compiler is an excellent and widely used tool for speeding up computational code and talking to native libraries. It translates Python code to C or C++ code and supports static type annotations to allow direct use of C/C++ data types, native functions and complex array types. The tight integration of all three languages makes it possible to freely mix Python features like generators and comprehensions with C/C++ features like native data types, pointer arithmetic or manually tuned memory management in the same code. Cython has direct support for NumPy arrays and other buffer objects, which allows for efficient and even parallel (OpenMP) processing of large arrays.\r\n\r\nThis tutorial by a Cython core developer introduces the Cython programming language and its compiler and leads the participants all the way from their first Python extension to an efficient integration with NumPy arrays.\r\n\r\nNote that participants are expected to have a good understanding of the Python language, at least some basic knowledge about NumPy and C or C++, and are able to use a C compiler on their computers to build native CPython modules from sources (e.g. install source packages from PyPI that contain C extensions). No deep C programming knowledge is required, nor is any prior knowledge needed about writing extension modules for the CPython runtime. The Cython compiler handles most of these low-level issues itself.\r\n\r\n [1]: http://cython.org/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Data Science", - "Data Science", - "Data Science", - "Python" - ], - "emails": "pycon@behnel.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/numpy-with-cython", - "admin_type": "", - "companies": "Skoobe" - }, - "549": { - "abstract_short": "Learn the use of python SDKs to deploy your first cloud native application atop OpenStack. Deploying applications in a cloud environment can be very different from deploying them in a traditional IT environment. This workshop will teach you how to deploy applications on OpenStack and some best practices for cloud application development. ", - "sub_title": "Using Python SDKs to Deploy your first Cloud Native Application atop OpenStack", - "timerange": "2016-07-21 14:00:00, 2016-07-21 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 549, - "speakers": "David Flanders", - "title": "OpenStack Cloud Native Deployment for Application Developers", - "have_tickets": [ - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Visualization", - "Education", - "OpenStack", - "DevOps general", - "Deep Learning" - ], - "abstract_long": [ - "Did you miss the first wave of job opportunities to be an OpenStack operator? Fear not, the second wave commeth! Learn the latest in Application Development atop OpenStack. Both DevOpps and AppDev are invited to this hands-on training. This training will provide an overview of the most popular Python SDKs and their use with OpenStack (and other clouds: why be locked in?). \r\n\r\nBy the end of the workshop you will have learned: \r\na.) The basic componets of an open collaborative cloud infrastructure, \r\nb.) Simple architectures for building an application to scale accross several cloud compute nodes\r\nc.) Cloud data storage techniques and how to auto-orchestrate your data and compute\r\nd.) About the future upcoming application development paradigms: containers, 12 factor and mobile/IoT and much more. \r\n\r\nThe future is open, might as well get started. \r\n\r\nThe OpenStack foundation is now a not-for-profit organisation which is now 5 years of age and still innovatively growing. If you've not been to an OpenStack summit you are missing one of the best open events of the year. The OpenStack summit will be in Barcelona late October, hope to see you there. " - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Educational", - "DevOps", - "DevOps", - "Data Science" - ], - "emails": "denise@openstack.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/openstack-cloud-native-deployment-for-application-developers", - "admin_type": "", - "companies": "OpenStack Foundation" - }, - "475": { - "abstract_short": "_Try major async web frameworks in playful use-cases, learn which tool works best for which task_\r\n\r\nWorkshop reveals Python capabilities for async web development, focusing on production-ready tools for the time being. It contains an overview and sample tasks for most established Python solutions:\r\n\r\n- AsyncIO\r\n- Tornado\r\n- Twisted\r\n\r\nWorkshop does not promote any particular framework; we try each option to build the personal preference mapping of project requirements and corresponding tools.", - "sub_title": "Try major async web frameworks in playful use-cases, learn which tool works best for which task", - "timerange": "2016-07-19 10:15:00, 2016-07-19 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@PyMunich", - "id": 475, - "speakers": "Anton Caceres", - "title": "Present-day Async Web development training: from Twisted to Tornado and AsyncIO", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Use Case", - "Web Track", - "Best Practice", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "**Objective**\r\n\r\nGet hands-on experience with async Python frameworks, learn which tool works best for which task.\r\n\r\n**Description**\r\n\r\nThis beginner-friendly workshop contains an overview, code tasks and a benchmark for production-ready Python async tools for the time being:\r\n\r\n- AsyncIO\r\n- Tornado\r\n- Twisted\r\n\r\nWorkshop does not promote any particular framework; we practically try each option and develop personal preferences.\r\n\r\n**Plan**\r\n\r\n 1. Introduction to async web servers and frameworks (15 min)\r\n 2. Formulating typical web tasks that need async design (10 min)\r\n 3. for task in tasks: (1 h)\r\n - implement with Twisted\r\n - Tornado\r\n - AsyncIO\r\n 4. Take a realistic parallel requests use-case and use LAN to experiment (30 min)\r\n 4. Discuss peculiarities of implementations (10 min)\r\n 5. Run same task on different platforms with a benchmark (10 min)\r\n 6. Integrate frameworks: (15 min)\r\n - run Tornado on AsyncIO loop\r\n - convert Future objects\r\n7. Q & A (10 min)\r\n\r\n**Practical part**\r\n\r\nWe try different frameworks to implement typical web tasks: handling requests, fetching data from external APIs and proxying connections. In case of reliable LAN we will use laptops of each other as services to call asynchronously. This part is interactive, everyone is a creator of own service. Then we will put some service down and do error handling, try to integrate future objects of different frameworks, run a benchmark.\r\n\r\n**Pre-requirements**\r\n\r\n- Laptop with Python 3.4+" - ], - "abstract_extra": " - This workshop is an evolution of my talk series, eg last _[EuroPython talk][1]_\r\n - I also had similar but more AsyncIO-focused workshops at _[PyCon.es][2]_ and _[PyCon Sette][3]_.\r\n - Current workshop will be presented for the first time\r\n - I'm the organiser and tutor of _[PyMunich][4]_\r\n\r\n [1]: https://www.youtube.com/watch?v=NKPHP5p0WXA\r\n [2]: http://2015.es.pycon.org/en/schedule/\r\n [3]: https://www.pycon.it/conference/talks/beautiful-async-code-in-python-3\r\n [4]: http://www.pymunich.com", - "tag_categories": [ - "Best Practice and Use Cases", - ">>> Suggested Track", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "anton@caceres.me", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/present-day-async-web-development-training-from-twisted-to-tornado-and-asyncio", - "admin_type": "", - "companies": "Skoobe" - }, - "631": { - "abstract_short": "Modern Python development is sophisticated: large code bases with many libraries, multiple developers, and rich frontend stacks for web development. Better tooling can be a big help, including an integrated development environment (IDE). This tutorial introduces PyCharm, covers its major features, and shows a web development workflow in a hands-on environment.", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@paulweveritt", - "id": 631, - "speakers": "Paul Everitt", - "title": "Productive Coding with PyCharm", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Programming" - ], - "abstract_long": [ - "PyCharm is a powerful development environment for Python and web programming, with many tools and features to boost productivity. This tutorial covers a broad selection of these features, in the context of hands-on development. The outline focuses on Python, but includes a treatment of the HTML/JS/CSS features PyCharm inherits from its IntelliJ/WebStorm foundation.\r\n\r\nDuring this tutorial we'll also take a look on how good code practices can help the IDE to assist you on Python coding: writing docstrings, type hints with Python 3.5 latest standards, etc.\r\n\r\nAfter this tutorial, attendees should part with a basic understanding of the myriad of PyCharm features: what they are, why they help, how to use them, and how to find more information.\r\n\r\nAttendees should arrive at the tutorial with an installation of Python and and installation of the latest PyCharm. A list of required packages will be provide the week before, to help minimize the network impact of PyPI access. (An attempt will be made to run a local mirror.)" - ], - "abstract_extra": "##Tutorial format\r\n\r\nHands-on environment with multiple people from the PyCharm team to walk around and help. The approach is based on how I taught my \u201cPython 3 Web Development with Pyramid\u201d at two previous PyCons, a format that received strong feedback scores. The tutorial is broken into 10-12 sections. Each section begins with some talking, then has the students do hands-on work, then finishes with a wrap-up.\r\n\r\n## Class Size\r\n\r\nWe can handle a large class (I have a lot of experience over the years teaching Python in larger settings.)\r\n\r\n## Previous Experience\r\n\r\nI have conducted two PyCon tutorials in the past 3 years, plus a tutorial at PyCon Brasil. Before that, my tutorial work goes back to teaching CGI at the Python workshop in 1995.", - "tag_categories": [ - "Programming" - ], - "emails": "pauleveritt@me.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/productive-coding-with-pycharm", - "admin_type": "", - "companies": "JetBrains s.r.o." - }, - "587": { - "abstract_short": "Learn to test your code more effectively with Hypothesis.", - "sub_title": "Let your testing do more of your work for you", - "timerange": "2016-07-18 10:15:00, 2016-07-18 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@DRMacIver", - "id": 587, - "speakers": "David MacIver", - "title": "Property-based testing with Hypothesis", - "have_tickets": [ - false - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "Hypothesis is a library for writing smarter tests.\r\n\r\nInstead of hand-writing every example in your tests, you describe what sorts of examples you need and let it fill in the blanks. It uses this to actively go looking for bugs in your code.\r\n\r\nIt's proven very effective, and is being used by an ever growing number of open source projects (including pypy, cryptography, and mercurial), but people sometimes struggle to get started.\r\n\r\nIn this session we'll help you overcome that by going through a number of illustrative examples that will help you understand this style of testing better.\r\n\r\nThe first two hours will be spent on these, start with a discussion of the problem, a sample test to start you off, and then people will work through it at their own pace, with me there to answer questions and help people when they get stuck. After people have had some time on a given problem, I'll go over some possible tests for the example and why they are useful, and give people time to try anything they like out before moving on to the next problem.\r\n\r\nFor the final hour, people will work on testing some more substantial code. You should feel free to bring your own, but I will provide some interesting projects for people to work on for anyone who doesn't have anything specific.\r\n\r\nAt the end of this you should feel much more comfortable with the general concepts of property based testing, and be able to use Hypothesis effectively to test your own code." - ], - "abstract_extra": "I'm the primary author of Hypothesis.\r\n\r\nI've previously given a few talks about it, including this one at PyCon UK (https://www.youtube.com/watch?v=62ubHXzD8tM) and a more recent one at PyCon Namibia (No video, unfortunately, but here are the slides: https://bit.ly/how-do-i-know-1).\r\n\r\nI've run similar trainings before, both at PyCon Namibia and for companies.\r\n\r\nLast year's EuroPython had a number of talks about Hypothesis ( https://ep2015.europython.eu/conference/talks/whats-the-fuzz-all-about-randomized-data-generation-for-robust-unit-testing, https://ep2015.europython.eu/conference/talks/testing-with-two-failure-seeking-missiles-fuzzing-and-property-based-testing and somewhat https://ep2015.europython.eu/conference/talks/static-type-checking-is-dead-long-live-static-type-checking-in-python) , although I wasn't able to attend myself.", - "tag_categories": [ - "Testing", - "Testing" - ], - "emails": "david.maciver@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/property-based-testing-with-hypothesis", - "admin_type": "", - "companies": "" - }, - "622": { - "abstract_short": "The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We\u2019ll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We\u2019ll finish with discussing topics and questions of participants related to their own test suites and usages.", - "sub_title": "", - "timerange": "2016-07-22 10:15:00, 2016-07-22 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@the_compiler", - "id": 622, - "speakers": "Florian Bruhin", - "title": "pytest - simple, rapid and fun testing with Python", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Test Driven Development (TDD)", - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We\u2019ll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We\u2019ll finish with discussing topics and questions of participants related to their own test suites and usages.\r\n\r\nThis is the planned outline:\r\n\r\n- (30 minutes) pytest feature walkthrough: automatic test discovery, assert statement, modular parametrizable fixtures, 150 plugins\r\n\r\n- (60 minutes) pytest fixture mechanism: dependency injection, declaring and using function/module/session scoped fixtures, using fixtures from fixture functions, parametrizing fixtures. Exercises.\r\n\r\n- (30 minutes): running nose/unittest/trial/Django suites with pytest. Discussing advantages and limitations. Exercise with a select existing real-life open source project.\r\n\r\n- (30 minutes): Strategies for a) migrating to pytest b) using \u201cautouse\u201d fixtures in conjunction with XUnit-based setup/tearodwn methods. Exercise.\r\n\r\n- (30 minutes): open space for questions and interactively solving pytest/unittest integration problems on real-life problems as time permits." - ], - "abstract_extra": "I did the pytest training at EuroPython last year and it was quite popular with good feedback, so I thought I'd submit it again.", - "tag_categories": [ - "Testing", - "Testing", - "Testing" - ], - "emails": "europython.eu@the-compiler.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/pytest-simple-rapid-and-fun-testing-with-python-1", - "admin_type": "", - "companies": "" - }, - "439": { - "abstract_short": "Python allows system administrators to replace a wide set of tools like awk, perl and gnuplot.\r\n\r\nThe students will learn - thru various examples presented in ipython notebook - to speed up their everyday work and trasform their scripts in reusable libraries. Moreover they will see a large showcase of libraries and their usage.\r\n\r\nA Test Driven Deployment approach using Ansible will be shown.\r\n", - "sub_title": "One language to rule them all.", - "timerange": "2016-07-19 14:00:00, 2016-07-19 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@ioggstream", - "id": 439, - "speakers": "Roberto Polli", - "title": "Python for System Administrators", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "DevOps general", - "System Administration" - ], - "abstract_long": [ - "##Goal\r\nUse python to replace sysadmin tools like awk, perl and gnuplot and:\r\n\r\n - gather system data on different platforms (Linux, Windows, Mac);\r\n - parse them efficiently (\u00b5-benchmarks, defaultdict, re.compile, dstat plugins); \r\n - basic statistics and data visualization (distributions, correlation, scatter);\r\n - showcase of useful libraries (smtplib, ansible, mysql-utilities);\r\n - plan test driven deployments with Ansible\r\n\r\nTimings are [in the **draft** slides][2] \r\n\r\n## Methodology\r\nThe training is interactive, [jupyter notebooks stubs here][6] with [sources][1] and a [Docker image][4].\r\nStudents will be driven performing the exercises and sharing their results. A couple of volunteers will be prepared to support the students.\r\n\r\n## Prerequisites\r\nThe training is multi-platform, though focused on Linux + Python2.7:\r\n\r\n - Linux, Windows, Mac\r\n\r\nFeel free to contact me for any issue or question!\r\n\r\n \r\n [1]: https://github.com/ioggstream/python-course/tree/master/python-for-sysadmin\r\n \u00a0\r\n [2]: http://www.slideshare.net/ioggstream/python-for-system-administrators-59499282\r\n \u00a0\r\n [3]: https://github.com/ioggstream/python-course/tree/master/python-for-sysadmin/requirements.txt\r\n \u00a0\r\n [4]: https://registry.hub.docker.com/u/ioggstream/python-course/\r\n \u00a0\r\n [5]: https://github.com/ioggstream/python-course/tree/master/python-basic\r\n\r\n [6]: http://nbviewer.jupyter.org/github/ioggstream/python-course/tree/corso-interno/python-for-sysadmin/notebooks/" - ], - "abstract_extra": "EuroPython speaker since 2012.\r\nRed Hat Opensource Days Italy: 2011, 2015", - "tag_categories": [ - "DevOps", - "DevOps" - ], - "emails": "robipolli@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-for-system-administrators", - "admin_type": "", - "companies": "Par-Tec Spa" - }, - "643": { - "abstract_short": "Our cloud platform, Aldryn, is probably the world\u2019s biggest host of Docker-powered Django websites. \r\n\r\nWe work with Docker every day, and also with less-technical users of the platform, so we have built up a good understanding of how to introduce and explain the technology for practical purposes, and of the numerous and multiple difficulties that users of it can stumble across.\r\n\r\nWe want to share that experience, and help people take advantage of Docker from a Python/Django perspective.\r\n", - "sub_title": "A hands-on workshop to familiarise Django developers with key Docker concepts and techniques", - "timerange": "2016-07-22 14:00:00, 2016-07-22 17:00:00", - "sub_community": "", - "duration": 180, - "twitters": "@EvilDMP, @stefanfoulis", - "id": 643, - "speakers": "Daniele Procida, Stefan Foulis", - "title": "So, what's all the fuss about Docker?", - "have_tickets": [ - false, - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Django", - "Docker" - ], - "abstract_long": [ - "Ou cloud platform, Aldryn, is probably the world\u2019s biggest host of Docker-powered Django websites. \r\n\r\nWe work with Docker every day, and also with less-technical users of the platform, so we have built up a good understanding of how to introduce and explain the technology for practical purposes, and of the numerous and multiple difficulties that users of it can stumble across.\r\n\r\nWe want to share that experience, and help people take advantage of Docker from a Python/Django perspective.\r\n\r\nWhat does Docker offer you, the Django developer? Even if you already know a bit about Docker, you\u2019re probably more familiar with it as a deployment tool, but in fact it offers some powerful advantages for the Python/Django developer too.\r\n\r\nThis is a hands-on workshop that also aims to clarify some key questions for the Django developer:\r\n\r\n- Why is Docker such a big deal?\r\n- What problems can Docker solve for me?\r\n- How does it work?\r\n- How can it enhance my development experience?\r\n\r\nIn the workshop we\u2019ll help install and configure Docker on your laptop (Linux/OS X/Windows), to have it working in a clear and manageable way.\r\n\r\nThen we\u2019ll step through setting up a Django project with Docker.\r\n\r\nIf we have time, we\u2019ll go on to show how Docker can help you move your project from development to deployment with minimum friction.\r\n", - "", - "", - "" - ], - "abstract_extra": "I will be running this training workshop together with a colleague or two from Divio.", - "tag_categories": [ - "Application Frameworks", - "DevOps" - ], - "emails": "daniele.procida@divio.ch, stefan@foulis.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/so-whats-all-the-fuss-about-docker", - "admin_type": "", - "companies": "Divio" - }, - "616": { - "abstract_short": "Practice writing implementation-agnostic tests and using the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), with [pytest-nodev][2] an Open Source test-driven search engine for Python code.\r\n\r\n[2]: http://pytest-nodev.readthedocs.org/en/stable/quickstart.html\r\n\r\nIncluding:\r\n\r\n- test-driven code search of functions and classes\r\n- test-suite validation, identification of weak tests\r\n- implementation-agnostic tests resilient to code refactoring", - "sub_title": "Writing good tests is more challenging and more rewarding than writing good code.", - "timerange": "2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@alexamici", - "id": 616, - "speakers": "Alessandro Amici", - "title": "Test-driven code search and the art of writing implementation-agnostic tests", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "A4", - "tags": [ - "Test Driven Development (TDD)", - "Educational Track", - "Test Libraries (pyTest/node/...)", - "Testing", - "Best Practice" - ], - "abstract_long": [ - "This is the hands-on counterpart of the regular talk \"Test-driven code search and reuse coming to Python with pytest-nodev\", it is suggested to attend it first.\r\n\r\nWe will practice writing implementation-agnostic tests and using the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), with [pytest-nodev][2] an Open Source test-driven search engine for Python code.\r\n\r\n[2]: http://pytest-nodev.readthedocs.org/en/stable/quickstart.html\r\n\r\nTDR aims to address the limits of usual keyword-based search by focusing on code behaviour and semantics instead. Developing a new feature in TDR starts with the developer writing the tests that will validate candidate implementations of the desired functionality. Before writing any functional code the tests are run against all functions and classes of all available projects. Any code passing the tests is presented to the developer as a candidate implementation for the feature.\r\n\r\nApplications will include:\r\n\r\n- test-driven code search of auxiliary functions and classes\r\n - full code reuse by adding dependencies\r\n - full code reuse by forking code samples\r\n - partial code reuse by integrating features and identifying problem corner cases\r\n- test-suite validation, identification of weak tests\r\n- using implementation-agnostic tests to make regular test-suites more resilient to code refactoring." - ], - "abstract_extra": "This is the hands-on counterpart of the regular talk [\"Test-driven code search and reuse coming to Python with pytest-nodev\"][1], it is suggested to attend it first, but it is not strictly needed.\r\n\r\n[1]: http://ep2016.europython.eu/conference/talks/test-driven-source-code-search-for-python-with-pytest-nodev\r\n", - "tag_categories": [ - "Testing", - ">>> Suggested Track", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "a.amici@bopen.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/test-driven-code-search-and-the-art-of-writing-implementation-agnostic-tests", - "admin_type": "", - "companies": "B-Open Solutions srl" - }, - "397": { - "abstract_short": "Spend time using and abusing advanced features of Python for fun, with little\r\nconsideration of what is a good or bad idea.\r\n\r\nPython has fun and powerful language features: operator overriding, decorators,\r\nmagic methods, and metaclasses. Developers steer away\r\nfrom using these features to avoid creating code that is difficult to\r\nunderstand. *Don't be one of those developers!* Come on an adventure to push\r\nPython syntax to its limits. (We will also cover what each feature is *really* for.)", - "sub_title": "Learn advanced Python features by writing code that would get you fired.", - "timerange": "2016-07-21 10:15:00, 2016-07-21 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@judy2k", - "id": 397, - "speakers": "Mark Smith", - "title": "The Stupid Python Workshop", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "Meta Classes", - "Python general", - "Educational Track", - "Mind Bending", - "Fun and Humor" - ], - "abstract_long": [ - "Spend time using and abusing advanced features of Python, for\r\nfun, with little consideration of what is a good or bad idea.\r\n\r\nDevelopers avoid using advanced language features because they don't want to\r\nwrite code that is difficult to understand. *Don't be one of those developers!*\r\nCome on an adventure to push Python syntax to its limits.\r\n\r\nThis workshop is aimed at intermediate Python developers. Attendees should be\r\ncomfortable with Python's syntax and should be intrigued or confused by:\r\nmagic methods; how `@property` works; and *what on Earth* a metaclass is.\r\nAttendees will learn how these things work, starting with the more\r\nstraightforward features. I'll introduce each concept assuming the attendees\r\nhave never used them before.\r\n\r\nWe'll be writing *silly* and *bad* things. We aim to understand how they work,\r\nnot whether they are a good idea, but in each case there will be a brief\r\ndiscussion of what each feature was really designed for. The exact contents are\r\nnot confirmed, but should include some or all of the following:\r\n\r\n* Override operators for more flexible syntax.\r\n* Using `__new__` for fun and profit.\r\n* Functions that behave differently depending on the values in the\r\n caller's scope.\r\n* Tacking extra methods on to classes we don't own.\r\n* Abuse of the descriptor protocol.\r\n* Messing with imports.\r\n* Decorators that do things decorators were never meant to do.\r\n* Write a metaclass and see if the world ends." - ], - "abstract_extra": "This workshop is based on a bunch of experiments I've partly published in my\r\n[GitHub Repo][stupid-python-tricks-repo]. It's basically a ridiculously\r\nexpanded, hands-on version of my [Lightning Talk][stupid-python-tricks-lightning-talk]\r\nat last year's EuroPython.\r\n\r\nI'm an experienced trainer and speaker. Two years ago I gave a talk on\r\n[command line programming][command-line-talk] at EuroPython, which has now been\r\nviewed 20000 times and seems to have been well received.\r\n\r\n[command-line-talk]: https://youtu.be/gR73nLbbgqY\r\n[stupid-python-tricks-repo]: https://github.com/judy2k/stupid-python-tricks\r\n[stupid-python-tricks-lightning-talk]: https://youtu.be/LQSWi3QJV8s?t=55m10s", - "tag_categories": [ - "Programming", - "Python", - ">>> Suggested Track", - "Everything Else", - "Everything Else" - ], - "emails": "pornbypost@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/the-stupid-python-workshop", - "admin_type": "", - "companies": "FanDuel" - }, - "511": { - "abstract_short": "uWSGI application server training from a simple web application hosting to an asynchronous task runner.", - "sub_title": "Learn to use and leverage the uWSGI power", - "timerange": "2016-07-18 10:15:00, 2016-07-18 13:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@ultrabug", - "id": 511, - "speakers": "Alexys Jacob", - "title": "uWSGI: the full stack application server", - "have_tickets": [ - true - ], - "type": "Training (180 mins)", - "status": "accepted", - "track_title": "E", - "tags": [ - "System Architecture", - "Infrastructure", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "ASYNC / Concurreny", - "System Administration" - ], - "abstract_long": [ - "Come and **learn how to use the uWSGI application server stack** with us.\r\n\r\nWe'll start from the basics to some more advanced usages :\r\n\r\n- what is uWSGI and why it can help you\r\n- what is the dynamic emperor mode and how it works\r\n- 1: run a simple Flask web application\r\n- 2: run a gevent based Flask web application\r\n- 3: run an external daemon using uWSGI\r\n- 4: create and run a task deferral application\r\n\r\nNote : we will provide and open source the Flask web application code we'll start from and iterate from there" - ], - "abstract_extra": "We at Numberly propose this training and propose that 2 of us run it.", - "tag_categories": [ - "DevOps", - "DevOps", - "Web", - "Programming", - "DevOps" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/uwsgi-the-full-stack-application-server", - "admin_type": "", - "companies": "Numberly" - } - }, - "poster": { - "555": { - "abstract_short": "The EDARA code, currently in FORTRAN 77, is used at CERN to assess the environmental impact of airborne releases of radioactivity and will be significantly upgraded in the next years. Therefore a python prototype has been developed using the numba just-in-time compiler for the Monte Carlo simulation core routines and the pandas library for data analysis. This prototype lead to a much cleaner code base with comparable performance and increased flexibility, ensuring its long-term maintainability.", - "sub_title": "Leveraging powerful data analysis libraries with just-in-time compilation techniques", - "timerange": "2016-07-19 11:30:00, 2016-07-19 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 555, - "speakers": "Robert Froeschl", - "title": "A case study of porting a Fortran77 Monte Carlo simulation code to python&numba", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "All Other Programming Languages", - "Science Track", - "Case Study", - "Physics" - ], - "abstract_long": [ - "The EDARA code is used at CERN (European Council for Nuclear Research) to assess the environmental impact of airborne releases of radioactivity. Its development has started in the 1990ies and the code is written in FORTRAN 77.\r\nThe EDARA code will be significantly upgraded in the next years to meet the future legal requirement of including additional age groups in the impact assessments, to have the capability of choosing among several different atmospheric dispersion models and to be interfaced from other software packages.\r\nTherefore it has been decided to port the EDARA code to python and a prototype has been developed with the following characteristics:\r\n - The numba just-in-time compiler has been used for the computationally demanding Monte Carlo simulation core routines. Closures over just-in-time compiled functions have been used to implement function pointer like features for the atmospheric dispersion model selection.\r\n - The data analysis and reporting features have been implemented using the pandas library.\r\n - implementation.\r\n - An API is provided for scripting and interfacing from other codes.\r\nThis prototype demonstrates that the python/numba/pandas implementation leads to a much smaller and cleaner code base that the FORTRAN 77 implementation without incurring a significant performance penalty for the computationally demanding parts. It has substantially increased the flexibility and extensibility of the code and will ensure its long-term maintainability.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Other Programming Languages", - ">>> Suggested Track", - "Case Study", - "Sciences" - ], - "emails": "robert.froeschl@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-case-study-of-porting-a-fortran77-monte-carlo-simulation-code-to-pythonnumba", - "admin_type": "", - "companies": "CERN, Geneva, Switzerland" - }, - "725": { - "abstract_short": "Shiv is Facebook layer 4 load balancer control plane built in Python, it is responsible for handling healthchecks, and configuration changes amongst other things and configure Linux IPVS to properly handle IP traffic.", - "sub_title": "", - "timerange": "2016-07-18 11:30:00, 2016-07-18 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@chantr4", - "id": 725, - "speakers": "Emmanuel Bretelle", - "title": "Building a billion user load balancer", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "System Architecture", - "Distributed Systems", - "Infrastructure", - "Open-Source", - "Scaling" - ], - "abstract_long": [ - "At Facebook, we make intensive use of Python in our infrastructure. Back in mid-2012, our engineers started to work on replacing the hardware load balancers that were powering Facebook with an in-house brew that would leverage Linux IPVS. Python was naturally chosen as the language to control, configure and manage the load balancers. By mid-2013, the whole of Facebook layer 4 load balancers in our datacenters had been replaced with Shiv and have been handling traffic ever since.\r\n\r\nAt the core of Shiv, we use libraries open-sourced by Facebook like Sparts [0], to set up a Thrift service, run and manage tasks, and gnlpy [1], to control IPVS via netlink. Add some python-fu to the mix and you can get a layer 4 load balancer that serves traffic for 1.65 billion people.\r\n\r\nIn this poster I will explain how our L4 load balancers are architected and how we use Python to leverage IPVS, setup individual VIPs and manage their backends, and make those load balancers operate in a fully automated way.\r\n\r\n\r\n[0] https://github.com/facebook/sparts\r\n\r\n[1] https://github.com/facebook/gnlpy\r\n\r\n[2] https://www.youtube.com/watch?v=MKgJeqF1DHw\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "Open Source", - "DevOps" - ], - "emails": "chantra@fb.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-a-billion-user-load-balancer", - "admin_type": "", - "companies": "Facebook" - }, - "732": { - "abstract_short": "TBD", - "sub_title": "An EEG-Based Control of a simulated four-wheeled Rover using ROS and Gazebo", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 732, - "speakers": "Enrico Carbognani", - "title": "Driving a Rover on the Moon with the Power of your Mind", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Robotics", - "Human-Machine-Interaction" - ], - "abstract_long": [ - "Humans have been dreaming for centuries about controlling their surroundings solely by the power of their minds. Nowadays, these dreams are slowly becoming reality due to a variety of inexpensive brain-computer interfaces (BCI) that detect neural activation patterns and support the control of devices by brain signals.\r\nIn this experimental setup, we intend to evaluate the performance of a commercial electroencephalographic (EEG) headset (Emotiv EPOC) in combination with a robotic simulation environment based on the Robot Operating System (ROS) and the Gazebo 3D simulator, and highlight the advantages and limitations of this approach. \r\nThe user will able to control one degree of freedom (yaw) of a four-wheeled rover (the CLEARPATH Robotics Husky) via the EPOC EEG and drive it trough simulated Moon terrains constructed using images and topographic (elevation) satellite data and integrated into Gazebo. \r\nWe are also planning to extend the experimental setup to include the use of Virtual Reality for the 3D visualization (this is subject to the successful integration of the Oculus Rift DK2 headset support in Gazebo which we are currently testing).\r\n" - ], - "abstract_extra": "In this simulation we will evaluate the performance of a commercial electroencephalographic (EEG) headset (Emotiv EPOC) in combination with a robotic simulation environment based on ROS and the Gazebo 3D simulator, and highlight the advantages and limitations of this approach. \r\nThe user will able to control one degree of freedom (yaw) of a four-wheeled rover via the EEG and drive it trough simulated Moon terrains.\r\nWe are also planning to possibly extend the experimental setup to include the use of Virtual Reality for the 3D visualization.", - "tag_categories": [ - "Hardware", - "Hardware" - ], - "emails": "enrico.carbognani@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/driving-a-rover-on-the-moon-with-the-power-of-your-mind", - "admin_type": "", - "companies": "" - }, - "550": { - "abstract_short": "Plone has, for the last 15 years, pushed the boundaries of Python-based CMSs. \r\nNow, in a world where JS frontends and delivery to multiple devices is key, we use the knowledge gained to get the **good** parts of this in a sensible, secure, developer- and integrator friendly, reliable Python backend.\r\n\r\n", - "sub_title": "Secure, social, responsive and scalable.", - "timerange": "2016-07-20 11:30:00, 2016-07-20 13:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@polyester", - "id": 550, - "speakers": "Paul Roeland", - "title": "Plone, the premier Python CMS and intranet", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Web General", - "Plone", - "Open-Source", - "CMS", - "Community" - ], - "abstract_long": [ - "Plone 5.1 brings more ways to integrate all that is needed for a modern website and intranet:\r\n\r\n - rapid theming independent of the backend, so designers can do what they do best\r\n - testable, standard ways of integrating JavaScript widgets and frameworks\r\n - integrate best-of-breed search\r\n - all with a solid, secure, Python backend\r\n - flexibility and TTW rapid prototyping, combined with CI and controlled development techniques\r\n\r\nPlone, now in its 15th year, has evolved together with Python. As shown in one of this year's [keynotes at PyCon][1], the relationship is still going strong, and there is much we can learn from one another.\r\n\r\n [1]: https://us.pycon.org/2016/events/keynotes/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Application Frameworks", - "Open Source", - "Web", - "Community" - ], - "emails": "paul.roeland@plone.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/plone-the-premier-python-cms-and-intranet", - "admin_type": "", - "companies": "Plone" - }, - "720": { - "abstract_short": "Many problems in statistics, finance, biology, pharmacology, physics, mathematics, economics, and chemistry involve the determination of the global minimum of multidimensional functions. The PyGenSA python module has been developed for generalized simulated annealing to process complicated non-linear objective functions with a large number of local minima.\r\n\r\n", - "sub_title": "An Efficient Global Optimization Python Module based on Generalized Simulated Annealing", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 720, - "speakers": "St\u00e9phane Cano", - "title": "PyGenSA: An Efficient Global Optimization for Generalized Simulated Annealing", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Science", - "Algorithms", - "Science Track", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Many problems in statistics, finance, biology, pharmacology, physics, mathematics, economics, and chemistry involve the determination of the global minimum of multidimensional functions. Python modules from SciPy and PyPI for the implementation of different stochastic methods (i.e.: pyEvolve, SciPy optimize) have been developed and successfully used in the Python scientific community. Based on Tsallis statistics, the PyGenSA python module has been developed for generalized simulated annealing to process complicated non-linear objective functions with a large number of local minima. Testing PyGenSA, basinhopping and differential evolution (SciPy) on many standard test functions used in optimization problems shows that PyGenSA is more reliable in general and very efficient in particular for high dimension problems." - ], - "abstract_extra": "Pull request submitted to SciPy: \r\nhttps://github.com/scipy/scipy/pull/6197\r\n\r\nBranch corresponding to the pull request:\r\nhttps://github.com/sgubianpm/scipy.git\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - ">>> Suggested Track", - "Open Source", - "Data Science" - ], - "emails": "stephane.john.cano@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pygensa-an-efficient-global-optimization-for-generalized-simulated-annealing", - "admin_type": "", - "companies": "Philip Morris R&D" - }, - "713": { - "abstract_short": "The IntelliCage\u2122 is a system for long-term behavioural experiments on cohorts of mice in social context. The robustness of IntelliCage data analysis may be improved with computer programs analysing the data in batch mode.\r\n\r\nTo simplify development of such programs, we developed the PyMICE library (RRID:nlx_158570). The library provides an user-friendly and intuitive API to access IntelliCage data, encouraging programming according to object-oriented and functional programming paradigms.", - "sub_title": "Facilitating reproducible research on mice behaviour.", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:10:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 713, - "speakers": "Jakub Kowalski", - "title": "PyMICE - a library for analysis of IntelliCage\u2122 data", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Science", - "Python general", - "Science Track", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Life sciences are suffering badly from a \"research reproducibility crisis\". One of possible countermeasures is automation of data acquisition and analysis. \r\n\r\nAutomated data acquisition systems facilitate standardization of conditions and measurements by minimization of human disturbance. One of such systems is IntelliCage\u2122, dedicated for long-term behavioural experiments on cohorts of mice in social context.\r\n\r\nThe robustness of data analysis may be improved with automated data analysis workflows (ADAWs): computer programs analysing the data in batch mode. Also, the source code of such program is an unequivocal, formal specification of the performed analysis. The only drawback of such approach is a significant effort and technical knowledge necessary to define an ADAW.\r\n\r\nOur goal was to simplify development of ADAWs and to shift the developer's focus from technical details (like data format) to the analysis itself. To meet the goal, we developed the PyMICE library (resource identifier: RRID:nlx_158570). The library provides an user-friendly and intuitive API to access IntelliCage data, encouraging development of ADAWs according to object-oriented and functional programming paradigms.\r\n\r\n**Acknowledgements**\r\nProject sponsored by Symfonia NCN grant: UMO-2013/08/W/NZ4/00691\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "My experience is mostly from presenting posters at neuroscientific conferences.", - "tag_categories": [ - "Sciences", - "Python", - ">>> Suggested Track", - "Open Source", - "Data Science" - ], - "emails": "j.kowalski@nencki.gov.pl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pymice-library", - "admin_type": "", - "companies": "" - }, - "733": { - "abstract_short": "Python is the most used language by production engineers , and the second most used by Facebook infrastructure teams. We use it in domains such as infrastructure management (network/server provisioning, service turnup, auto-remediation of server and services failures), platform services (package deployment, job scheduling, TFTP and kernel upgrades), service configuration management or operational tooling.\r\n", - "sub_title": "", - "timerange": "2016-07-19 14:45:00, 2016-07-19 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@chantr4", - "id": 733, - "speakers": "Emmanuel Bretelle", - "title": "Python in Production Engineering", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Operations", - "Infrastructure", - "Distributed Systems", - "Scaling" - ], - "abstract_long": [ - "Python is the most used language by production engineers [0], and the second most used by Facebook infrastructure teams. We use it in domains such as infrastructure management (network/server provisioning, service turnup, auto-remediation [1] of server and services failures), platform services (package deployment, job scheduling, TFTP [2] and kernel upgrades), service configuration management [3] or operational tooling.\r\n\r\nProduction engineers working on those services will be attending Europython 16 and happy to answer your questions on how Python helps us build service quickly and enables us to move fast and scale.\r\n\r\n\r\n[0] https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/\r\n\r\n[1] https://www.facebook.com/notes/facebook-engineering/making-facebook-self-healing/10150275248698920/\r\n\r\n[2] https://ep2016.europython.eu/conference/talks/fbtftp-facebooks-python3-framework-for-tftp-servers\r\n\r\n[3] https://us.pycon.org/2016/schedule/presentation/2059/" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "chantra@fb.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-in-production-engineering", - "admin_type": "", - "companies": "Facebook" - }, - "694": { - "abstract_short": "Juju is a devops tool for automated deployments, with full stack\r\nservice modelling and orchestration, in the cloud. Fully\r\ncontrollable with Python through \"charms\".", - "sub_title": "Devops distilled: deploy and orchestrate your services with Juju and Python", - "timerange": "2016-07-20 14:45:00, 2016-07-20 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 694, - "speakers": "Michael Foord", - "title": "To the Clouds: Service Orchestration and Cloud Deployment with Juju", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Public Cloud (AWS/Google/...)", - "Go-Lang", - "Linux", - "DevOps general", - "OpenStack" - ], - "abstract_long": [ - "Juju is a devops tool for automated deployments, with full stack\r\nservice modelling and orchestration, in the cloud. Fully\r\ncontrollable with Python through \"charms\".\r\n\r\nAbstract\r\n\r\nDo you deploy your Python services to Amazon EC2, or to Openstack,\r\nor even to HP cloud, joyent or Azure? Do you want to - without being\r\ntied into any one of them? What about local full stack deployments\r\nwith lxc or kvm containers?\r\n\r\nEven if you're convinced you don't need \"the cloud\" because you\r\nmanage your own servers, amazing technologies like Private clouds\r\nand MaaS, for dynamic server management on bare metal, may change\r\nyour mind.\r\n\r\nFed up with the cloud hype? Let me rehabilitate the buzzword! (A bit\r\nanyway.)\r\n\r\nA fully automated cloud deployment system is essential for rapid\r\nscaling, but it's also invaluable for full stack testing on\r\ncontinuous integration systems. Even better, your service deployment\r\nand infrastructure can be managed with Python code? (Devops distilled)\r\n\r\nTreat your servers as cattle not as pets, for service oriented\r\nrepeatable deployments on your choice of back-end. Learn how service\r\norchestration is a powerful new approach to deployment management,\r\nand do it with Python! If any of this sounds interesting then Juju\r\nmaybe for you!\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Other Programming Languages", - "Operating Systems", - "DevOps", - "DevOps" - ], - "emails": "fuzzyman@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/juju", - "admin_type": "", - "companies": "Canonical" - }, - "627": { - "abstract_short": "The BBC micro:bit is a small programmable device. It is being given, this year, to every 11 to 12-year-old child in the UK. One of the programming languages available for the micro:bit is Python. This poster will look at using Python, on the micro:bit, in informal learning environments. It is based on a six-month, in residence, project at a library.", - "sub_title": "Introducing Python and the Internet of Things, to the next generation, through libraries and clubs.", - "timerange": "2016-07-18 14:45:00, 2016-07-18 16:25:00", - "sub_community": "", - "duration": 180, - "twitters": "@corinnewelsh", - "id": 627, - "speakers": "Corinne Welsh", - "title": "Using Python on the BBC micro:bit in informal learning environments", - "have_tickets": [ - true - ], - "type": "Poster session (180 mins)", - "status": "accepted", - "track_title": "Poster Session", - "tags": [ - "Education", - "Teaching", - "MicroPython", - "Internet of Things (IoT)", - "Community" - ], - "abstract_long": [ - "This year, in an aspirational project led by the BBC, every 11 to 12-year-old child in the UK is being given a small programmable device. The BBC micro:bit has LEDs, input buttons, an accelerometer, a compass, input/output pins, power supply pins, and Bluetooth connectivity. It is supported by four different programming languages, one of which is Python.\r\n\r\nSchools are central in delivering the project: the micro:bits are being distributed, through schools, to Year 7 pupils. However, the vision of the micro:bit project is that the devices are given directly to children. They are owned by the children themselves to do with as they wish.\r\n\r\nI am involved in a six-month project based in a London borough library. The project's aim is to develop support to use Python, on the micro:bit, in the context of informal learning spaces. These include extra-curricular STEM clubs, libraries, and Saturday coding clubs.\r\n\r\nMy poster will be a reportage of the project. It will cover the challenges of introducing Python for the micro:bit and the benefits Python brings. I will also consider some wider issues, such as the role of gender, in the roll-out of the micro:bit." - ], - "abstract_extra": "I will bring a couple of micro:bits, with me, to accompany the poster presentation and discussion with a demonstration.", - "tag_categories": [ - "Educational", - "Everything Else", - "Python", - "Hardware", - "Community" - ], - "emails": "corinne@lilycat.co.uk", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/using-python-on-the-bbc-microbit-in-informal-learning-environments", - "admin_type": "", - "companies": "JustOutsource.it" - } - }, - "helpdesk": { - "731": { - "abstract_short": "We'll try to help everybody, especially new comers in Python, to understand better the asynchronous pattern, and AsyncIO in general.\r\n\r\nDon't hesitate to ask us any question, especially if you think it's a stupid question: No stupid questions, only stupid answers.", - "sub_title": "If you're curious to write code with AsyncIO but you don't know how to start or you have issues", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:00:00, 2016-07-18 14:15:00, 2016-07-18 17:15:00", - "sub_community": "", - "duration": 180, - "twitters": "@GMLudo", - "id": 731, - "speakers": "Ludovic Gasc", - "title": "AsyncIO support for new comers", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Python 3", - "Databases", - "Architecture", - "APIs", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "We'll try to help everybody, especially new comers in Python, to understand better the asynchronous pattern, and AsyncIO in general.\r\n\r\nDon't hesitate to ask us any question, especially if you think it's a stupid question: No stupid questions, only stupid answers.\r\n\r\nExample of questions we'll try to answer, it's a compilation of questions we'll already received:\r\n\r\n- Where is the 101 of AsyncIO ?\r\n- When I can use AsyncIO ?\r\n- Why to add async/await keywords ? It's only aliases of @asyncio.coroutine/yield from ?\r\n- I don't understand the difference between a task and a coroutine, could you explain me ?\r\n- When I need to add await before a call function ?\r\n- How to spot quickly the code can be asynchronous with synchronous code ?\r\n- How I can use synchronous libraries in my asynchronous code ?\r\n- How to architecture my source code with AsyncIO ?\r\n- I don't understand the internals of AsyncIO with event loop and how yield from works internally. (Spoiler alert: To start to code with Python itself, did you understand before the CPython's internals ?)\r\n - Why another asynchronous network framework ? Need already covered by Twisted/Tornado/Gevent/...\r\n- Why some libraries need to be reimplemented, like aiohttp or aiopg ?\r\n- Now that Django channels exist, AsyncIO is useless, isn't it ?\r\n- What's the difference between AsyncIO and curio ?" - ], - "abstract_extra": "We'll try to be the most pedagogical as possible with some concrete examples of source code with a laptop.", - "tag_categories": [ - "Python", - "Databases", - "Programming", - "Web", - "Programming" - ], - "emails": "gmludo@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/asyncio-support-for-new-comers", - "admin_type": "", - "companies": "Eyepea/ALLOcloud" - }, - "721": { - "abstract_short": "Helpdesk will help people to know more about code analysis tools that they should be using in their projects for better, clean code. The aim is to get people familiar with static code analysis tool and how to use coala to make linting and other analysis super easy in their projects. ", - "sub_title": "Our goal is to make code analysis easy while remaining completely modular, extensible and language i", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:00:00, 2016-07-20 14:00:00, 2016-07-20 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@karansharma1295", - "id": 721, - "speakers": "Karan Sharma", - "title": "Code analysis made super easy.", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Beginners", - "Clean Code", - "Open-Source", - "Static Analysis", - "Python Software Foundation (PSF)" - ], - "abstract_long": [ - "The helpdesk will get the audience acquainted with code analysis tools and how coala helps to make this whole process of static code analysis easier. The goal of the helpdesk will be to get the user setup coala and demonstrate live on how to use it on projects etc, configure it, how to be able to customise it. coala helps to manage a lot of different tools together in one single configuration file. Also, as coala is an ever growing community of happy developers, I will assist them to get acquainted with how to contribute to coala and solve baby issues at Github to mark their first Open source contribution if they are interested in doing that. \r\n" - ], - "abstract_extra": "I've been contributing to coala since March 2016 and I am a Google Summer of Code student, working with them this year. \r\n\r\nMy code commits which have been accepted at upstream repo at coala are https://github.com/coala-analyzer/coala-bears/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Amr-karan+", - "tag_categories": [ - "Educational", - "Educational", - "Open Source", - "Everything Else", - "Community" - ], - "emails": "karansharma1295@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/code-analysis-made-super-easy", - "admin_type": "", - "companies": "coala" - }, - "668": { - "abstract_short": "Chat with the core developers about how to extend django CMS, integrate your own apps seamlessly or brainstorm a hard-to-solve problem.", - "sub_title": "Talk about your django CMS project with the core devs", - "timerange": "2016-07-21 10:30:00, 2016-07-21 12:00:00, 2016-07-21 14:00:00, 2016-07-21 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@stefanfoulis", - "id": 668, - "speakers": "Stefan Foulis", - "title": "django CMS", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Web General", - "Django", - "CMS" - ], - "abstract_long": [ - "Chat with the core developers about how to extend django CMS or how to integrate your own apps seamlessly. Lets talk about your plugins, apphooks, toolbar extensions, content-creation wizards, menu extensions or anything else django CMS related.\r\nWe can brainstorm a hard-to-solve problem you've encountered. Maybe you have the nagging feeling there ought to be simpler way to solve something you've done in a project. We're also happy to discuss feedback or ideas for something that could be added to django CMS.\r\nBring your code. Lets chat!" - ], - "abstract_extra": "My colleague has also submitted a matching training which I'll be part of: https://ep2016.europython.eu/conference/talks/application-integration-with-django-cms\r\n\r\nStefan Foulis' previous talk stuff:\r\n- various talks at local meetups in Z\u00fcrich, Switzerland\r\n- \"Local development with docker\" talk at DjangoCon 2015 (http://2015.djangocon.eu/talks/ https://vimeo.com/133154447 )\r\n- \"Advanced django CMS\" workshop at DjangoCon 2015 (http://2015.djangocon.eu/event/advanced-django-cms/)\r\n", - "tag_categories": [ - "Web", - "Application Frameworks", - "Web" - ], - "emails": "stefan@foulis.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/django-cms", - "admin_type": "", - "companies": "Divio" - }, - "553": { - "abstract_short": "Tips, best practices, health check and a general good workout for your documentation. There is both science, and art, to writing and maintaining good docs. And, as your docs are your first point of contact for new community members, there is every reason to make it the best you can.\r\n\r\nWhile this helpdesk won't *write* docs for you, we will give you a solid headstart in making them better. ", - "sub_title": "A health-check and excercise session for your docs", - "timerange": "2016-07-18 10:30:00, 2016-07-18 12:00:00, 2016-07-18 14:15:00, 2016-07-18 15:45:00", - "sub_community": "", - "duration": 180, - "twitters": "@polyester", - "id": 553, - "speakers": "Paul Roeland", - "title": "DOCtors are in!", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Communication", - "Teaching", - "Documentation", - "DevOps general", - "Community" - ], - "abstract_long": [ - "There's a whole community, and a wealth of experience, that aim to bring the science, the art, and the fun of documentation to a higher level. Come learn some best practices on how to keep your docs maintainable, testable, deployable and up to date.\r\n\r\n\"Give me your tired, your poor,\r\nYour huddled docs yearning to breathe free,\r\nThe wretched refuse of your teeming shore.\r\nSend these, the homeless, tempest-tost to me,\r\nI lift my lamp beside the golden door!\"" - ], - "abstract_extra": "We (Mikey Ariel, Maciej Szlosarczyk and me) held a similar session last year in Bilbao, which was well visited and fun to do.\r\n\r\nAs I'm traveling I haven't had time to contact them to see if they had already submitted a Helpdesk proposal. So there may be a double proposal; just wanted to get it in before the deadline.", - "tag_categories": [ - "Community", - "Everything Else", - "Programming", - "DevOps", - "Community" - ], - "emails": "paul.roeland@plone.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/doctors-are-in", - "admin_type": "", - "companies": "Plone" - }, - "594": { - "abstract_short": "Come ask me anything about Elasticsearch or associated technologies. We can talk design/use cases/integrations and/or try and debug your problems.", - "sub_title": "Ask Me Anything about deploying/architecting/scaling", - "timerange": "2016-07-20 10:30:00, 2016-07-20 12:00:00, 2016-07-20 14:00:00, 2016-07-20 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@honzakral", - "id": 594, - "speakers": "Honza Kr\u00e1l", - "title": "Elasticsearch and the Elastic Stack", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Debugging", - "Architecture", - "Best Practice", - "Scaling", - "Elastic Search" - ], - "abstract_long": [ - "Elasticsearch and other parts of the Elastic stac (beats, logstash and kibana) are becoming more popular for many different use cases - from pure search all the way to log storage and analysis.\r\n\r\nIn case you have any questions, problems or suggestions, come talk to me." - ], - "abstract_extra": "I have been working for the company behind elasticsearch for over three years, mostly developing the Python client but also doing support, training and consulting for our paying customers. I would love to help the members of the Python community to be successful when using elasticsearch.", - "tag_categories": [ - "Testing", - "Programming", - "Best Practice and Use Cases", - "DevOps", - "Databases" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/elasticsearch-and-the-elastic-stack", - "admin_type": "", - "companies": "Elastic" - }, - "740": { - "abstract_short": "> \u201cMake things as simple as possible, but not simpler.\u201d \u2014 Albert Einstein\r\n> \u201cPremature optimization is the root of all evil.\u201d \u2014 Donald E. Knuth\r\n\r\nWe've all heard that Python is slow and that we have to use a compiled language to get the maximum performance. While this is true to a certain extent, it is also true that we can work out certain bits of our Python code and gain some microseconds. Bring your code and let's try to make it as fast as possible together!", - "sub_title": "Use profiling techniques and certain Python libraries to optimize your code", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:00:00, 2016-07-19 14:00:00, 2016-07-19 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@astrojuanlu", - "id": 740, - "speakers": "Juan Luis Cano", - "title": "Make Python as fast as possible, but not faster", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 2", - "tags": [ - "Performance", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Code Analysis" - ], - "abstract_long": [ - "> \u201cMake things as simple as possible, but not simpler.\u201d \u2014 Albert Einstein\r\n> \u201cPremature optimization is the root of all evil.\u201d \u2014 Donald E. Knuth\r\n\r\nIt's often said that Python is necessarily slow and that we have to write the critical parts of our program in a compiled language to get the maximum performance. While this is true to a certain extent, it is also true that we can work out certain bits of our Python code and gain some microseconds, leaving the rewriting of our program in C++ or Fortran as a last resource.\r\n\r\nBring your slow Python algorithm and we will use profiling, memory profiling, numba and a bit of common sense to try and make it run as fast as possible! Sometimes we will be able to make some suggestions of new algorithms or architectures, other times we will be able to spot the single line that consumes 90 % of our running time, but either way we will both learn about software performance a lot.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Data Science", - "Programming" - ], - "emails": "juanlu001@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/make-python-as-fast-as-possible-but-not-faster", - "admin_type": "", - "companies": "Indizen" - }, - "514": { - "abstract_short": "Design or usage questions of mongoDB from python ? Come over and ask !", - "sub_title": "Use cases and pymongo helpdesk", - "timerange": "2016-07-19 10:30:00, 2016-07-19 12:00:00, 2016-07-19 14:00:00, 2016-07-19 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@ultrabug", - "id": 514, - "speakers": "Alexys Jacob", - "title": "Python and mongoDB", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "NoSQL", - "Use Case", - "MongoDB", - "Best Practice" - ], - "abstract_long": [ - "The Numberly DevOps team members will help and share their experience in using mongoDB on python applications.\r\n\r\nCome with your code or design questions and we'll do our best to help you find the best answers and test them live !\r\n\r\n_The Numberly team has been running mongoDB in production for more than 5 years now and used it on various use cases, from simple web applications to real time analytics serving thousands transactions per second._\r\n\r\n" - ], - "abstract_extra": "This is not a personal proposal but a team one from Numberly, at least 2 of us will be made available for this helpdesk (myself not included).", - "tag_categories": [ - "Databases", - "Best Practice and Use Cases", - "Databases", - "Best Practice and Use Cases" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-and-mongodb", - "admin_type": "", - "companies": "Numberly" - }, - "416": { - "abstract_short": "I", - "sub_title": "YAML libraries are not always the most developer friendly, stop by if you have any questions.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 12:00:00, 2016-07-22 14:00:00, 2016-07-22 15:30:00", - "sub_community": "", - "duration": 180, - "twitters": "@", - "id": 416, - "speakers": "Anthon van der Neut", - "title": "YAML is one of the more human friendly data serialisation formats", - "have_tickets": [ - true - ], - "type": "Help desk (180 mins)", - "status": "accepted", - "track_title": "Help Desk 1", - "tags": [ - "Data", - "Structures" - ], - "abstract_long": [ - "There are several human parsable data serialisation possibilities but there are only a handful that are human friendly. Arbitrarily human friendly means that:\r\n - you can include comments in your format to explain things to other readers\r\n - it means what you think that it means\r\n - no need to quote things that are clear without\r\n - visual nesting through indentation, not through lisp like ( (( (()()))) or \r\n- easy to edit without breaking things (trailing comma's anyone).\r\n\r\nYAML supports most of the above, but the \"standard\" YAML library would \r\n- rearrange mapping (dictionary) entries on dumping making comparison using diff difficult\r\n- drop comments when reading data to YAML, so dumping leads to data loss for humans\r\n- was not updated for YAML 1.2 published in 2009\r\nby upgrading the standard library to deal with these issues in the increasingly often used ruamel.yaml round-trip library, in-dept knowledge was built up both on how to effectively use YAML as well on how to do some unplanned for things in YAML. \r\nPlease stop by with any questions you have beginner, or advanced on how to make the use of YAML in you project not only more human-friendly, but also more developer friendly. \r\n(You're also welcome if you don't understand how someone can like to work with JSON)\r\n\r\n" - ], - "abstract_extra": "I have professionally supported many developers that worked (in)directly for me or for other departments in the organisation I was employed.\r\n\r\nI like helping out people and online I do so both on StackOverflow (primarily\r\nanswering [YAML related questions][1], on [Unix&Linux][2] and [Ebooks][3] StackExchange\r\n\r\n [1]: http://stackoverflow.com/search?q=user%3A1307905+[yaml]+is%3Aanswer\r\n [2]: http://unix.stackexchange.com/users?tab=Reputation&filter=all\r\n [3]: http://ebooks.stackexchange.com/users?tab=Reputation&filter=all\r\n", - "tag_categories": [ - "", - "" - ], - "emails": "a.van.der.neut@ruamel.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/yaml-is-one-of-the-more-human-friendly-data-serialisation-format", - "admin_type": "", - "companies": "RUAMEL bvba" - } - }, - "interactive": { - "572": { - "abstract_short": "Technical debt lives among us regardless if we are in the services business or building products. \r\nWe discuss about it, we try to fix it or live with it, but can we actually prevent it? \r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay.\r\nWhat qualifies as debt? What qualifies as interest? How do we manage it? Is it really unavoidable?", - "sub_title": "", - "timerange": "2016-07-18 14:15:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 60, - "twitters": "@mircea_zetea", - "id": 572, - "speakers": "Mircea Zetea", - "title": "Managing technical debt", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Management", - "Best Practice", - "Business Track" - ], - "abstract_long": [ - "Technical debt lives among us regardless if we are in the services business or building products. \r\nWe discuss about it, we try to fix it or live with it, but can we actually prevent it? \r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay.\r\nMy reason for discussing this openly is because once it is there you do not only deal with the technical debt itself but also with the interest you must pay. Comparing the two, probably the highest cost that we see is with the interest.\r\n As our code base grows and our deadlines get tougher we tend to forget about the cost our project will have to pay for every functionality that we implement in a hurry, for which we \u201cforget\u201d about tests or for which we write in a comment \u201cthis needs to be refactored\u201d or \u201cthis is a temporary solution. refactor later\u201d.\r\nWhat qualifies as debt? What qualifies as interest? How do we manage it? At what levels in our projects can we see the debt and the interest? Is it really unavoidable? " - ], - "abstract_extra": "", - "tag_categories": [ - "Development Methods", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "mircea@zetea.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-technical-debt", - "admin_type": "", - "companies": "Spyhce" - }, - "510": { - "abstract_short": "Sharing our worst production experiences and the tricks, good practices and code we developed to address them.", - "sub_title": "Let's share our worst experiences and tricks we used to avoid them", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@ultrabug, @r4mnes", - "id": 510, - "speakers": "Alexys Jacob, Guillaume Gelin", - "title": "Planning for the worst", - "have_tickets": [ - true, - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "The Answer to Life the Universe and Everything Else", - "Use Case", - "Best Practice", - "Mind Bending", - "failures/mistakes" - ], - "abstract_long": [ - "This talk is about sharing our experience about how we handled production problems on all levels of our applications.\r\n\r\nWe'll begin with common problems, errors and failures and dig on to more obscure ones while sharing concrete tips, good practices and code to address them !\r\n\r\nThis talk will make you feel the warmth of not being alone facing a problem :)", - "", - "", - "" - ], - "abstract_extra": "Can also be a \"standard\" talk, I just wanted to try the idea of having it more interactive with the audience because a lot of people can relate to quick a lot of problems.\r\n\r\nThere will be slides to guide the conversation but it will be open to everyone to share their experience.", - "tag_categories": [ - "Everything Else", - "Best Practice and Use Cases", - "Best Practice and Use Cases", - "Everything Else", - "Best Practice and Use Cases" - ], - "emails": "ultrabug@ultrabug.net, ramnes@1000mercis.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/planning-for-the-worst", - "admin_type": "", - "companies": "Numberly" - }, - "712": { - "abstract_short": "First we will talk about coding interviews: How to prepare and\r\nwhat to expect. Then, we will cover software engineering resumes, typical coding\r\nquestions and tasks that companies usually give to candidates.\r\n\r\nWe end with a discussion on long-term career paths\r\nof software engineers. The hypothesis is that true engineering careers\r\nexist at maybe Google but normal firms unfortunately only allow growth by\r\nforcing engineers into management.", - "sub_title": "Going from junior to senior and from interviewee to interviewer", - "timerange": "2016-07-19 14:00:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@", - "id": 712, - "speakers": "Iwan Gulenko", - "title": "Programming interviews and careers", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "General", - "Use Case", - "Business", - "Best Practice", - "failures/mistakes" - ], - "abstract_long": [ - "First we will talk about coding interviews: How to prepare and\r\nwhat to expect. Then, we will cover software engineering resumes, typical coding\r\nquestions and tasks that companies usually give to candidates.\r\n\r\nWe end with a discussion on long-term career paths\r\nof software engineers. The hypothesis is that true engineering careers\r\nexist at maybe Google but normal firms unfortunately only allow growth by\r\nforcing engineers into management." - ], - "abstract_extra": "", - "tag_categories": [ - "", - "Best Practice and Use Cases", - "", - "Best Practice and Use Cases", - "Best Practice and Use Cases" - ], - "emails": "iwan@gulenko.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/coding-interviews-what-to-expect-and-how-to-prepare", - "admin_type": "", - "companies": "" - }, - "697": { - "abstract_short": "EuroPython Meeting of the Python Software Foundation\r\n\r\nMembers and non-members are invited to this EuroPython meeting of the PSF! Please join us for some updates from the PSF board.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@NaomiCeder", - "id": 697, - "speakers": "Naomi Ceder", - "title": "PSF Meeting", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Conferences and Meet-Ups", - "Python Software Foundation (PSF)", - "Community" - ], - "abstract_long": [ - "EuroPython Meeting of the Python Software Foundation\r\n\r\nMembers and non-members are invited to this EuroPython meeting of the PSF! Please join us for some updates from the PSF board.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Community", - "Community", - "Community" - ], - "emails": "naomi.ceder@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/psf-meeting-2016", - "admin_type": "", - "companies": "Trans*Code" - }, - "639": { - "abstract_short": "This interactive game teaches the basic of ip and ethernet protocol using just paper and pens, and become very popular with our interns and in our LUG meetings. \r\n\r\nParticipants are divided in teams, simulating simple network infrastructures (eg. computers connected by an hub and a switch).\r\n", - "sub_title": "Learn IP protocol basics with an interactive game.", - "timerange": "2016-07-18 16:00:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@ioggstream", - "id": 639, - "speakers": "Roberto Polli", - "title": "The Router Game", - "have_tickets": [ - true - ], - "type": "Interactive (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Internet of Things (IoT)" - ], - "abstract_long": [ - "This interactive game teaches the basic of ip and ethernet protocol using just paper and pens, and become very popular with our interns and LUG meetings. \r\n\r\nParticipants are divided in teams, simulating simple network infrastructures (eg. computers connected by an hub and a switch).\r\n\r\nEvery player has a role: a PC or mobile phone, an HUB, a Switch, a Router, and must communicate with the others following the associate specification (eg. an hub should broadcast message to every neighbour, a switch should populate the mac address table, ...)\r\n\r\nThe team which is faster in exchanging messages wins.\r\n\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Hardware" - ], - "emails": "robipolli@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-router-game", - "admin_type": "", - "companies": "Par-Tec Spa" - } - }, - "talk": { - "729": { - "abstract_short": "Creating 3D model for 3D printing is pretty hard for non 3D CG designer or non 3D CAD engineer. But recently, so many 3D software (like Maya, Blender, Fusion360 and so on) provides Python API to manipulate 3D data in those software. So in this session, I will introduce Python API of Blender and Autodesk Fusion 360 and share some basic knowledge and tips when you use these API. I will also introduce my past projects with those APIs.", - "sub_title": "Generate 3D model for 3D printing using Python API proveded by 3D softwares", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@taxpon", - "id": 729, - "speakers": "Takuro Wada", - "title": "3D Modeling and Printing by Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Developing with Python", - "3D", - "Blender" - ], - "abstract_long": [ - "### Abstract\r\n\r\n- Creating 3D model for 3D printing is pretty hard for **non 3D CG designer or non 3D CAD \r\nengineer**.\r\n\r\n- Recently, so many 3D software (like Maya, Blender, Fusion360 and so on) provides Python API to manipulate 3D data in those software. Once you learn these Python API, you can generate 3D model by Python and 3D print those generated model.\r\n\r\n- In this session, I will introduce Python API of some softwares and share some basic knowledges and tips when you use these API. I will also introduce my past projects with those APIs and my products.\r\n\r\n![][1]\r\n\r\n### Goal\r\n- Introduce 3D model generation and 3D printing with Python to audience\r\n\r\n### After this session, you will\r\n- Acquire the basic knowledge of 3D data structure\r\n- Understand basic concepts of Python API provided by 3D softwares\r\n- Acquire knowledge to start your 3D model generation project by Python\r\n- Know past 3D model generation projects by Python\r\n\r\n### Prerequisite\r\n- Basic knowledge of Python\r\n- Interests for 3D modeling and 3D printing by Python\r\n\r\n [1]: http://takuro.ws/img/euro_python.jpg\r\n" - ], - "abstract_extra": "### Blog articles about 3D manipulation by Python\r\n- Articles about 3D modeling for 3D printing by Python (only Japanese)\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-1][1]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-2][2]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-3][3]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-4][4]\r\n - [https://www.rinkak.com/jp/blog/blender-python-modeling-5][5]\r\n - Sample codes\r\n - [https://github.com/kabuku/blender-python][6]\r\n\r\n- 3D model and Minecraft (only Japanese)\r\n - [http://www.kabuku.co.jp/developers/blender2minecraft-by-python][7]\r\n - Source code\r\n - [https://github.com/taxpon/b2mine][8]\r\n\r\n### Created library to manipulate 3D model\r\n- [Pymesh][9]\r\n- [Openpyscad][10]\r\n\r\n### Presentation Slides\r\n- Past talks\r\n - [http://www.slideshare.net/TakuroWada/3d-modeling-by-python-scripts][11]\r\n - [http://www.slideshare.net/TakuroWada/3d-printing-by-python-scripts-and-blender-54557221][12]\r\n\r\n [1]: https://www.rinkak.com/jp/blog/blender-python-modeling-1\r\n [2]: https://www.rinkak.com/jp/blog/blender-python-modeling-2\r\n [3]: https://www.rinkak.com/jp/blog/blender-python-modeling-3\r\n [4]: https://www.rinkak.com/jp/blog/blender-python-modeling-4\r\n [5]: https://www.rinkak.com/jp/blog/blender-python-modeling-5\r\n [6]: https://github.com/kabuku/blender-python\r\n [7]: http://www.kabuku.co.jp/developers/blender2minecraft-by-python\r\n [8]: https://github.com/taxpon/b2mine\r\n [9]: https://github.com/taxpon/pymesh\r\n [10]: https://github.com/taxpon/openpyscad\r\n [11]: http://www.slideshare.net/TakuroWada/3d-modeling-by-python-scripts\r\n [12]: http://www.slideshare.net/TakuroWada/3d-printing-by-python-scripts-and-blender-54557221", - "tag_categories": [ - ">>> Suggested Track", - "Everything Else", - "Everything Else" - ], - "emails": "taxpon@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/3d-modeling-and-printing-by-python", - "admin_type": "", - "companies": "Kabuku Inc." - }, - "509": { - "abstract_short": "The Pymongo driver is one of MongoDB\u2019s most popular driver interfaces for\r\nconnecting to MongoDB. But developers rarely look under the cover to see\r\nwhat\u2019s happening inside the driver.\r\nBy having a deeper insight into how the driver constructs server requests\r\nand responds, developers will be able to write more effective MongoDB\r\napplications in Python.", - "sub_title": "What work does the driver do before sending requests to the MongoDB server", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@jdrumgoole", - "id": 509, - "speakers": "Joe Drumgoole", - "title": "A deep dive into the Pymongo MongoDB driver", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Educational Track", - "MongoDB", - "Open-Source" - ], - "abstract_long": [ - "*The Pymongo driver is one of MongoDB\u2019s most popular driver interfaces for\r\nconnecting to MongoDB. But developers rarely look under the cover to see\r\nwhat\u2019s happening inside the driver. *\r\n\r\n*By having a deeper insight into how the driver constructs server requests\r\nand responds, developers will be able to write more effective MongoDB\r\napplications in Python.*\r\n\r\n*We will look at :*\r\n\r\n-\r\n\r\n*Initial connection*\r\n-\r\n\r\n*A query*\r\n-\r\n\r\n*A simple write operation*\r\n-\r\n\r\n*A bulk write operation*\r\n-\r\n\r\n*How the driver responds when we have a node failure*\r\n\r\n*We will also give insight into the driver\u2019s approach to server selection\r\nwhen connecting to a replicas set (a multi-node instance of MongoDB).*", - "", - "", - "" - ], - "abstract_extra": "I've been doing public presentations for over twenty years. I'm a regular speaker at MongoDB technical events .\r\n\r\n", - "tag_categories": [ - ">>> Suggested Track", - "Databases", - "Open Source" - ], - "emails": "joe.drumgoole@10gen.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-deep-dive-into-the-pymongo-mongodb-driver", - "admin_type": "", - "companies": "MongoDB" - }, - "409": { - "abstract_short": "A gentle introduction to neural networks, and making your own with Python.\r\n\r\nThis session is deliberately designed to be accessible to everyone, including anyone with no expertise in mathematics, computer science or Python.\r\n\r\nFrom this session you will have an intuitive understanding of what neural networks are and how they work. If you are more technically capable, you will see how you could make your own with Python and numpy.", - "sub_title": "Gain an understanding of the ideas behind simple neural networks, and make your own with Python.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@postenterprise", - "id": 409, - "speakers": "Tariq Rashid", - "title": "A Gentle Introduction to Neural Networks (with Python)", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Python 3", - "Beginners", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Algorithms", - "Machine-Learning" - ], - "abstract_long": [ - "A gentle introduction to neural networks, and making your own with Python.\r\n\r\nThis session is deliberately designed to be accessible to everyone, including anyone with no expertise in mathematics, computer science or Python.\r\n\r\nFrom this session you will have an intuitive understanding of what neural networks are and how they work. If you are more technically capable, you will see how you could make your own with Python and numpy.\r\n\r\nPart 1 - Ideas:\r\n - the search for AI, hard problems for computers easy fro humans\r\n - learning from examples (simple classifier)\r\n - biologically inspired neurons and networks\r\n - training a neural network - the back propagation breakthrough\r\n - matrix ways of working (good for computers)\r\n\r\nPart 2 - Python:\r\n - Python is easy, and everywhere\r\n - Python notebooks\r\n - the MNIST data set\r\n - a very simple neural network class\r\n - focus on concise and efficient matrix calculations with bumpy\r\n - 97.5% accuracy recognising handwritten numbers - with just a few lines of code!\r\n\r\nPart 3 - Q&A\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "The core reason for my proposal is to open access to interesting ideas to as many people as possible - especially those with no technical background, and no university level expertise in maths or computer science.\r\n\r\nI seem to have a talent for this - and enjoy this immensely. \r\n\r\nI have started teaching Python in London (eg Meetups) for complete beginners, and they are well received and over subscribed. \r\n\r\nI have a book published, introducing complete beginners or students of approx age 15, to fractals using complex numbers, and introducing them to Python to make their own. The book is well reviewed and sells approx 3 a week, and was serialised in Linux Voice magazine.\r\nhttp://www.amazon.com/dp/B00JFIEC2A\r\nhttp://makeyourownmandelbrot.blogspot.com\r\n\r\nMy latest book (almost published) applies the same idea of making complex and sometimes scary concepts accessible and easy to as many people as possible. \r\nhttp://makeyourownneuralnetwork.blogspot.co.uk\r\n\r\nQualifications? Why should anyone believe me?\r\nI have a degree in Physics from Cambridge University, and a second Masters degree in Machine Leaning and Data Mining.\r\nI have worked in tech in some serious organisations like civil nuclear, international finance and media, and most recently in the UK government. If you search google, you'll find talks on open source, digital and security reform by myself - eg http://www.embecosm.com/2015/11/17/how-to-start-your-own-open-source-business/", - "tag_categories": [ - "Python", - "Educational", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "tariq.rashid50@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-gentle-introduction-to-neural-networks-with-python", - "admin_type": "", - "companies": "Digital Dynamics" - }, - "561": { - "abstract_short": "At the LEAP Encryption Access Project we aim to make secure communications both easy to use and easy to provide.\r\n\r\nWe bring some tales (and some, hopefully, tools) from the quest for user-friendly crypto software. How to make people love the email experience in the 21st century, without risking their privacy. How to encrypt data locally, sync it to servers that you can lose, and still be sexy.", - "sub_title": "tales and tools for applications that need encrypted, synchronized data, with minimal-trust servers", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 561, - "speakers": "Kali Kaneko", - "title": "Against the silos: usable encrypted email & the quest for privacy-aware services", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Fun and Humor", - "clients", - "Distributed Systems", - "Cryptography", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "Technologies that allow for privacy in the communications, allowing the escape from the pervasive massive surveillance, have been there for some years now, but yet its use by the general public is far from widespread. The challenge, in our view, can be defined by one of making usable crypto. Usable for the end user, usable for the sysadmin and for the fellow application developer. In the quest for massive adoption of encryption technologies, we've been forging several python packages to solve different problems, always standing in the shoulders of giants. \r\nWe bring some tales from the trenches to share, from our humble experience trying to deploy clients and servers to provide Secured Encrypted Internet Tunnels and Encrypted Email. This includes interesting challenges dealing with key management, automatic and secure software updates, and processing of email while using stock cloud providers, while still being resistant to hostile environments.\r\nWe'll show a webmail email user agent based on this architecture, a promising future for decentralization and privacy.\r\nWe'll also talk about how to store locally encrypted data, and will present Soledad (Synchronization of Locally Encrypted Data Across Devices). Soledad is a library with server and client components that allows the development of different applications based on client-side, end-to-end and cloud-syncable encryption of private data. We'll play with some toy apps to showcase its features and potential." - ], - "abstract_extra": "https://github.com/leapcode/\r\nhttps://leap.se/docs/\r\nsome previous presentations at (random order):\r\nHOPE, IFF, hackmeeting, squatconf", - "tag_categories": [ - "Everything Else", - "Business", - "DevOps", - "Security", - "Programming" - ], - "emails": "bennomadic@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/against-the-silos-usable-encrypted-email-the-quest-for-privacy-aware-services", - "admin_type": "", - "companies": "LEAP Encrypted Access Project" - }, - "715": { - "abstract_short": "This is a look behind the scenes at Winton Capital Management- one of Europe\u2019s most successful systematic investment managers. The talk will mainly focus on how Python gives researchers fine-grained control over the data and trading systems, without requiring them to interact directly with the underlying, highly-optimised technology.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@, @", - "id": 715, - "speakers": "iztok kucan, Joris Peeters", - "title": "Algorithmic Trading with Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Algorithms" - ], - "abstract_long": [ - "Have you ever wondered what technologies are used in a systematic trading system that utilises computer models and accounts for the majority of trading on the stock market? This is a look behind the scenes at Winton Capital Management- one of Europe\u2019s most successful systematic investment managers. In this talk, we\u2019ll run through an overview of Winton\u2019s trading infrastructure, including data management, signal generation and execution of orders on global exchanges. The talk will mainly focus on how Python gives researchers fine-grained control over the data and trading systems, without requiring them to interact directly with the underlying, highly-optimised technology.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science" - ], - "emails": "i.kucan@wintoncapital.com, j.peeters@wintoncapital.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/algorithmic-trading-with-python", - "admin_type": "", - "companies": "" - }, - "584": { - "abstract_short": "Deep learning: how it works, how to train a deep neural network, the theory behind deep learning, recent developments and applications.", - "sub_title": "", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:15:00", - "sub_community": "pydata", - "duration": 60, - "twitters": "@Brittix1023", - "id": 584, - "speakers": "Geoff French", - "title": "An Introduction to Deep Learning", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Deep Learning", - "Science Track", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "In the last few years, deep neural networks have been used to generate state of the art results in image classification, segmentation and object detection. They have also successfully been used for speech recognition and textual analysis. In this talk, I will give an introduction to deep neural networks. I will cover how they work, how they are trained, and a little bit on how to get going. I will briefly discuss some of the recent exciting and amusing applications of deep learning. The talk will primarily focus on image processing." - ], - "abstract_extra": "I have given this talk previously at PyData London and at the Cambridge Python User Group where it was well received:\r\nSlides are here:\r\nhttps://speakerdeck.com/britefury/introduction-to-deep-learning-cambridge-python-user-group\r\n", - "tag_categories": [ - "Data Science", - ">>> Suggested Track", - "Data Science", - "Data Science" - ], - "emails": "britefury@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/an-introduction-to-deep-learning", - "admin_type": "", - "companies": "" - }, - "670": { - "abstract_short": "Docker is a powerful tool for packaging software and services in containers and running them on a virtual infrastructure. Python is a very powerful language for data analysis. What happens if we combine the two? We get a very versatile and robust system for analyzing data at small and large scale!\r\n\r\nI will show how we can make use of Python and Docker to build repeatable, robust data analysis workflows which can be used in many different contexts (possibly with a live demo).", - "sub_title": "Creating reproducible and robust data analysis workflows with containers", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@japh44", - "id": 670, - "speakers": "Andreas Dewes", - "title": "Analyzing Data with Python & Docker", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Deployment/Continuous Integration and Delivery", - "Docker", - "Data Science" - ], - "abstract_long": [ - "Docker is a powerful tool for packaging software and services in containers and running them on a virtual infrastructure. Python is a very powerful language for data analysis. What happens if we combine the two? We get a very versatile and robust system for analyzing data at small and large scale!\r\n\r\nI will show how we can make use of Python and Docker to build repeatable, robust data analysis workflows that can be used in many different contexts. I will explain the core ideas behind Docker and show how they can be useful in data analysis. I will then discuss an open-source Python library (Rouster) which uses the Python Docker-API to analyze data in containers and show several interesting use cases (possibly even a live-demo).\r\n\r\nOutline:\r\n\r\n1. Why data analysis can be frustrating: Managing software, dependencies, data versions, workflows\r\n2. How Docker can help us to make data analysis easier & more reproducible\r\n3. Introducing Rouster: Building data analysis workflows with Python and Docker\r\n4. Examples of data analysis workflows: Business Intelligence, Scientific Data Analysis, Interactive Exploration of Data\r\n5. Future Directions & Outlook" - ], - "abstract_extra": "This is a technical talk about data analysis & Python intended for the PyData conference. I have started using Docker and Python for data analysis recently and I think the topic could be very interesting to the Python & data analysis community. I also work on an open-source library for data analysis using Python & Docker called *Rouster* (http://rouster.7scientists.com), which makes it very easy to build data analysis workflows with Python and Docker. I want to use the talk to introduce the tool to a wider audience and get feedback and ideas for the further development (currently the tool is still in its alpha stage).\r\n\r\n", - "tag_categories": [ - "DevOps", - "DevOps", - "Data Science" - ], - "emails": "andreas.dewes@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/analyzing-data-with-python-docker", - "admin_type": "", - "companies": "7scientists UG" - }, - "585": { - "abstract_short": "Many of us have been taught to code, but we know that software engineering jobs are so much more than that.\r\nProgrammers can spend 5-6 hours per week on code review, but doing that is almost ignored as a skill.\r\nHow many of us have seen poor reviews, which don't catch bugs, make people feel bad or block important features being merged?\r\nAn introduction to what code review is alongside guidelines, tips, tricks and anecdotes to help make your code reviews be as productive as possible.", - "sub_title": "Improve your code and your team by reviewing code (well)", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@adamdangoor", - "id": 585, - "speakers": "Adam Dangoor", - "title": "Another pair of eyes: Reviewing code well", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Clean Code", - "Tooling", - "Best Practice", - "Development" - ], - "abstract_long": [ - "Many of us have been taught to code, but we know that software engineering is so much more than that. Programmers can spend 5-6 hours per week on code review, but doing that is almost ignored as a skill, and instead it is often treated as a rote chore.\r\n\r\nHow many of us have seen poor reviews - those which upset people, don't catch bugs or block important features being merged? This talk explores the social and technical impacts of various code review practices as well as helpful tooling. The goal is to provide a structure to help improve how teams review code, and to introduce the costs and benefits of code review to anyone unfamiliar with the practice.\r\n\r\nThere are always trade-offs to be made - e.g. think how costly a security flaw in this code could be to your organisation - perhaps intense scrutiny is not necessary for prototypes soon to be thrown away. It is useful to consider the trade-offs in order to optimise for a particular problem domain. Perhaps right now it is more important to look for issues with maintainability, functionality or performance.\r\n\r\nI talk about how some fantastic code reviews from mentors, colleagues and strangers have helped me become a better programmer and team member, as well as occasions where code review has been detrimental by slowing things down and causing arguments.\r\n\r\nThis is aimed at everyone from beginner to advanced programmers." - ], - "abstract_extra": "I gave my first conference talk last year at Write the Docs Prague - I was nervous but it went down well. The video is at https://www.youtube.com/watch?v=PoVwyPipHzc. The talk was on the topic of how to keep instructions in software documentation working as the code changes.", - "tag_categories": [ - "Educational", - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "adamdangoor@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/another-pair-of-eyes-reviewing-code-well", - "admin_type": "", - "companies": "" - }, - "562": { - "abstract_short": "In this talk we show how the Go language helped us get a high performance in a concise and simple API. Everything will be exemplified using the backdrop of a real case of Globo.com: API registrations. We will see how we went from 200 to 19,000 records per second to the impacts of this rapid growth and the consequences of Go of use. We also show how our microservices architecture was used in the project.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 60, - "twitters": "@ViniciusPach", - "id": 562, - "speakers": "Vinicius Pacheco", - "title": "APIs and Microservices With Go", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Architecture", - "Go-Lang", - "Microservices" - ], - "abstract_long": [ - "This talk is about Go, software architecture and parallelism. How we went from legacy, complex and slow software to new, speed, resilient and maintainable software.\r\nI'll start the talk showing the problemas and the challenges that my team had received. After that, I'll show the tests, tests of performance and the options that we did considering technologies and strategies of development. The difficulties and problems also will be show. Also I talk about:\r\n\r\n- Goroutines\r\n- Resilient patterns\r\n- Go tools\r\n- Architecture\r\n- Web performance\r\n\r\nHow we leave of the Java ecosystem to new free ecosystem with microservices and how Go help us." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Other Programming Languages", - "Programming" - ], - "emails": "vfpweb@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/apis-and-microservices-with-go", - "admin_type": "", - "companies": "globo.com" - }, - "547": { - "abstract_short": "async/await is here, everybody can use it in Python 3.5. It's great and awesome, yet only a few understand it. As a PEP 492 author, I'd really like to have a chance to better explain the topic, show why async/await is important and how it will affect Python. I'll also tell a story on how I worked on the PEP -- starting from an idea that I discussed with Guido on PyCon US 2015, and landing to CPython source code one and a half moths later!", - "sub_title": "What and why is async/await in Python, and where it's headed", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@1st1", - "id": 547, - "speakers": "Yury Selivanov", - "title": "async/await in Python 3.5 and why it is awesome", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python 3", - "Educational Track", - "Architecture", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "The talk will start with a brief coverage of the story of asynchronous programming in Python -- Twisted, Tornado, Stackless Python & greenlets, eventlet, Tornado, asyncio & curio. We've come a really long road, and it's important to understand how we ended up with async/await.\r\n\r\nThen I'll go over asyncio and curio, showing async/await by example, explaining that in reality it's a very easy to use language feature. You don't need to know all the details to be able to successfully use the new syntax, and even build new frameworks on top of it.\r\n\r\nI'll then explain the async/await machinery in CPython, starting with generators and 'yield' expression, showing what is 'yield from' and finally, demonstrating how async/await is implemented in CPython. This will ensure that those who want to invent some new crazy ways of using async/await will have a starting point!\r\n\r\nI'll end the talk with a story of how I came up with the idea. How I shared it with Guido van Rossum, Victor Stinner, and Andrew Svetlow. How the first version of the PEP was born, and how we managed to push it to Python 3.5 in under two months period. The goal is to make people understand that it's possible to change your programming language -- in fact, Python, as any other programming language, wants new features and capabilities to be relevant." - ], - "abstract_extra": "I'm the author and implementor of PEP 492 -- async/await syntax in Python 3.5. I'm also working on a new PEP to add asynchronous generators in CPython 3.6. If it's accepted before the EuroPython (there chances are high!) I'll have a unique opportunity to be the first one to present it to the EuroPython crowd!", - "tag_categories": [ - "Python", - ">>> Suggested Track", - "Programming", - "Programming" - ], - "emails": "yury@magic.io", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/asyncawait-in-python-35-an-why-it-is-awesome", - "admin_type": "", - "companies": "MagicStack" - }, - "687": { - "abstract_short": "Introducing asynchronous calls from within an endpoint in a web app can be desirable but hard to achieve.\r\nThis talk will explore different solutions for this (running Twisted event loop, Co-Routines, Asyncio, \u2026) and how well they play with the different parallelization models of common WSGI web servers.", - "sub_title": "", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@laucia_julljen", - "id": 687, - "speakers": "Lauris Jullien", - "title": "Asynchronous network requests in a web application", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "In the more and more popular SOA paradigm, it\u2019s common for services to have to compose responses with resources from many different services. Everyone\u2019s first idea will probably be to call each service synchronously with your favorite python HTTP library. This unfortunately doesn\u2019t scale well and tens of successive network calls will make your endpoints painfully slow. \r\n\r\nOne solution is to parallelize these network calls. If you are already using an asynchronous web app (such as Tornado or Twisted), more asynchronous in your asynchronous shouldn\u2019t be much of a challenge. But if you chose not to dive into the madness of chained Deferred calls, and used a standard prefork/threaded WSGI web server (such as Gunicorn or uWSGI) to run your Django/Flask/Pyramid application, you might find yourself wondering how to manage these asynchronous calls.\r\n\r\nThis talk will explore different solutions (running Twisted event loop, Co-Routines, Asyncio, \u2026) and how well they play with the different parallelization models of WSGI web servers." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Web", - "Programming" - ], - "emails": "lauris@yelp.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/asynchronous-network-requests-in-a-web-application", - "admin_type": "", - "companies": "Yelp" - }, - "467": { - "abstract_short": "At Ableton we love music and we love open-source. Ansible is an amazing tool which allows us to free more time for music by automating boring and repetitive tasks, and to contribute back to the open-source community with ease. Here's an opportunity to share our love for it, our experience with it, and our contributions to it with you. ", - "sub_title": "Automate everything and contribute back to the community with ansible", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@oleiade", - "id": 467, - "speakers": "Theo Crevon", - "title": "Automate, contribute, repeat.", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Infrastructure", - "Open-Source", - "Development", - "DevOps general" - ], - "abstract_long": [ - "Computers are never as convenient as when they work for us. If you agree with this motto, then Ansible, a deployment and automation tool written in Python, might come in handy.\r\n\r\nAt Ableton, Ansible is involved in every aspect of deployment and automation. From local machine setup, to vm creation and deployment in our self-hosted datacenter, to our services in the immensity of the cloud.\r\n\r\nBecause it is dead simple to use, can deal with any number of hosts in parallel and has robust compatibility with Unix as well as Windows systems, you will probably never have to write a shell script again.\r\n\r\nBecause it is written in Python and exposes a clean, extensible and easy to adapt design and architecture; contributing features to the project and fixing the bugs you might encounter during the journey is extremely easy. \r\n\r\nAt Ableton we love music and we love open-source. Ansible is an amazing tool which allows us to free more time for music by automating boring and repetitive tasks, and to contribute back to the open-source community with ease. Here's an opportunity to share our love for it, our experience with it, and our contributions to it with you. \r\n\r\nAutomate, contribute, repeat. " - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Open Source", - "Programming", - "DevOps" - ], - "emails": "tcr@ableton.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/automate-contribute-repeat", - "admin_type": "", - "companies": "Ableton" - }, - "476": { - "abstract_short": "A modern application has a lot of passwords and keys floating around. Encryptions keys, database passwords, and API credentials; often typed in to text files and forgotten. Fortunately a new wave of tools are emerging to help manage, update, and audit these secrets. Come learn how to avoid being the next TechCrunch headline. ", - "sub_title": "", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 476, - "speakers": "Noah Kantrowitz", - "title": "Behind Closed Doors: Managing Passwords in a Dangerous World", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Configuration Management (Ansible/Fabric/Chef/...)", - "DevOps general" - ], - "abstract_long": [ - "Secrets come in many forms, passwords, keys, tokens. All crucial for the operation of an application, but each dangerous in its own way. In the past, many of us have pasted those secrets in to a text file and moved on, but in a world of config automation and ephemeral microservices these patterns are leaving our data at greater risk than ever before.\r\n\r\nNew tools, products, and libraries are being released all the time to try to cope with this massive rise in threats, both new and old-but-ignored. This talk will cover the major types of secrets in a normal web application, how to model their security properties, what tools are best for each situation, and how to use them with major web frameworks." - ], - "abstract_extra": "## Outline\r\n\r\n* Intros\r\n* Types of secrets\r\n * Passwords (internal control)\r\n * Key files (TLS, whole files)\r\n * Tokens (external control)\r\n * Other (PCI, etc)\r\n * Hot vs. cold access\r\n* Properties of a secrets management system\r\n * Audit trail\r\n * Least access\r\n * Integrations\r\n * Pre-encryption systems\r\n* The usual solutions, and why they are dangerous\r\n* Attack surfaces and threat modelling\r\n * Code leak\r\n * Backup leak\r\n * Directory traversal/transclude\r\n * RCE\r\n * Laptop theft\r\n * Higher power (gov, etc)\r\n* Identity Management\r\n * Tokens\r\n * Cloud Systems\r\n * HSMs\r\n* Tools\r\n * Text files\r\n * Chef encrypted bags\r\n * Ansible Vault\r\n * Chef Vault\r\n * Hashicorp Vault\r\n * KeyWhiz\r\n * AWS KMS\r\n * Sneaker\r\n * Confidant\r\n * Trousseau\r\n * Sops\r\n * Red October\r\n * Barbican\r\n * Conjur\r\n* Framework Integration\r\n * HVAC\r\n * KeywhizFS\r\n * Consul Template\r\n * botocore\r\n", - "tag_categories": [ - "Security", - "DevOps", - "DevOps" - ], - "emails": "coderanger@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/behind-closed-doors-managing-passwords-in-a-dangerous-world", - "admin_type": "", - "companies": "" - }, - "487": { - "abstract_short": "\r\nl\r\nThis talk show how a to create a simple, evolving, client server architecture combining zeromq, selenium and beautifulsoup, which allows you to scrape data even from variable dynamic sites like Sporcle and KhanAcademy. Once the page analysis has been implemented regular \"downloads\" can easily be deployed without cluttering your desktop, your headless server and/or anonymously.\r\n", - "sub_title": "Choosing the right combination of tools for getting data from the web can make your life easier", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 487, - "speakers": "Anthon van der Neut", - "title": "Beyond scraping, getting data from dynamic, heavily javascript driven, websites", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Tooling", - "Web Crawling", - "Web Track" - ], - "abstract_long": [ - "Scraping static websites can be done with `urllib2` from the standard library, or with some slightly more sophisticated packages like `requests`. \r\nHowever as soon as JavaScript comes into play on the website you want to download information from, for things like logging in via openid or constructing the pages content, you almost always have to fall back to driving a real browser.\r\nFor web sites with variable content this is can be time consuming and cumbersome process.\r\n\r\nThis talk show how a to create a simple, evolving, client server architecture combining zeromq, selenium and beautifulsoup, which allows you to scrape data from sites like Sporcle, StackOverflow and KhanAcademy. Once the page analysis has been implemented regular \"downloads\" can easily be deployed without cluttering your desktop, your headless server and/or anonymously.\r\n\r\nThe described client server setup allows you to restart your changed analysis program without having to redo all the previous steps of logging in and stepping through instructions to get back to the page where you got \"stuck\" earlier on. This often decreases the time between entering a possible fix in your HTML analysis code en testing it, down to less than a second from a few tens of seconds in case you have to restart a browser.\r\n\r\nUsing such a setup you have time to focus on writing robust code instead of code that breaks with every little change the sites designers make." - ], - "abstract_extra": "I have previously spoken at PyCon 2006 in Dallas and at other conferences, non-python related, in the Netherlands, when I still lived there.\r\nI will prepare some new and update some existing packages on PyPI so that attendees can easily reproduce the presented talk on their own.", - "tag_categories": [ - "Programming", - "Web", - ">>> Suggested Track" - ], - "emails": "a.van.der.neut@ruamel.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/beyond-scraping-getting-data-from-dynamic-heavily-javascript-driven-websites", - "admin_type": "", - "companies": "RUAMEL bvba" - }, - "392": { - "abstract_short": "This talk is about using our **Python** skills to explore the **secrets of our brains**. Using the Neurosky Mindwave as a bluetooth connected EEG device, I'll talk about new experiments I have performed inside the Jupyter notebook, for example \"Evoked Response Potentials\" and more about \"Neuro Feedback\" training. \r\n\r\n", - "sub_title": "Hacking the brain", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@BayesianHorse ", - "id": 392, - "speakers": "Andreas Klostermann", - "title": "Brainwaves for Hackers 3.0", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Beginners", - "Other Hardware", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "Electroencephalography **(EEG)** measures potential waves originating within the brain. Billions of brain cells fire inside your brain, each sending out a minuscule wave. The summed potential waves can be measured, even with quite cheap and **portable devices**.\r\n\r\nBeing the third major version of this talk, I'll talk briefly about the Neurosky Mindwave and the Muse headset. I have also developed more interactive Jupyter experiments, which I'll demonstrate in the talk. For example **Evoked Response Potentials (ERP)** can be demonstrated with relatively simple means. Also I'll talk some more about experiments with **Neuro Feedback**.\r\n\r\n" - ], - "abstract_extra": "This is the third \"version\" and contains new and updated content. It requires no knowledge from the previous two major versions, but also contains mostly new material. So those who haven't seen the other talks yet will still understand it, those who have won't be bored. That's the plan, anyway.", - "tag_categories": [ - "Data Science", - "Educational", - "Hardware", - "Programming" - ], - "emails": "andreasklostermann@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/brainwaves-for-hackers-3", - "admin_type": "", - "companies": "" - }, - "735": { - "abstract_short": "During this talk you will see how to make a robot able to recognize people with a Raspberry Pi as main board and Python as language. The talk will cover the hardware and modules, discuss briefly the alternatives, and finally show a live demo.", - "sub_title": "", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ilovelinux02", - "id": 735, - "speakers": "Antonio Spadaro", - "title": "Build and control a Python-powered robot.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Raspberry PI", - "Robotics", - "OpenCV" - ], - "abstract_long": [ - "During this talk you will see how to make a robot able to recognize people with a Raspberry Pi as main board and Python as language. The talk will cover the hardware and modules, discuss briefly the alternatives, and finally show a live demo.\r\n\r\nThe robot uses two main modules:\r\n\r\n - **OpenCV** (_Open Source Computer Vision Library_), an open-source library that includes several hundreds of computer vision algorithms. Usage ranges from interactive art, to mines inspection, stitching maps on the web or through advanced robotics.\r\n\r\n - **gpiozero**, a simple interface to everyday GPIO components used with Raspberry Pi.\r\n\r\nThe first is used to recognize the people and the object; the second to control the robot.\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Hardware", - "Hardware", - "Hardware" - ], - "emails": "antoniospadaro45@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/build-and-control-a-python-powered-robot", - "admin_type": "", - "companies": "" - }, - "618": { - "abstract_short": "Join this talk to learn about the OpenStack Python SDK and how to deploy your web app step by step using different components in OpenStack.", - "sub_title": "", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@vkmc", - "id": 618, - "speakers": "Victoria Martinez de la Cruz", - "title": "Build your first OpenStack application with OpenStack PythonSDK", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Open-Source" - ], - "abstract_long": [ - "How many times you heard about OpenStack and all the cool things it is being used for? Most of the use cases are big players that need to handle huge amounts of data and automate complex infrastructures. But what about actually using it, for you as a developer, to deploy a simple app? In my case, at least, that has not be an usual topic of discussion when talking about OpenStack. In this talk I'll introduce the OpenStack Python SDK, a project relatively new in the OpenStack ecosystem, and show you step by step how to deploy your own web app using different components in OpenStack." - ], - "abstract_extra": "", - "tag_categories": [ - "Open Source" - ], - "emails": "victoria@vmartinezdelacruz.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/build-your-first-openstack-application-with-openstack-pythonsdk", - "admin_type": "", - "companies": "Red Hat" - }, - "596": { - "abstract_short": "While microservices are rather commonly implemented using JSON over\r\nHTTP this is merely an implementation choice. This talk will cover\r\nthe reasons why you might want to choose ZeroMQ as communication\r\ntransport between your microservices instead. It will show how ZeroMQ\r\nis used from within Python and the common patterns which can simplify\r\nthe overal architecture while at the same time providing reliable and\r\nlow-latency communications between your services.", - "sub_title": "Low-latency communications for your backend architecture", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@flubdevork", - "id": 596, - "speakers": "Floris Bruynooghe", - "title": "Build your Microservices with ZeroMQ", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Software Design", - "System Architecture", - "Microservices" - ], - "abstract_long": [ - "Microservices is the popular term for the trend to build backend\r\narchitectures as a number of smaller independent processes. As an\r\nevolution from the Service Oriented Architecture the core aims are to\r\ncreate independent services which are easy to operate and even replace\r\nwhile all of them together compose into providing the business logic\r\nrequired for your application.\r\n\r\nWhile it is rather common for microservices to choose JSON over HTTP\r\nto communicate with each other, this is purely an implementation\r\nchoice. HTTP is a protocol using a strict request-response format,\r\nthis can become a little burdensome when needing to deal with\r\nasynchronous requests and forces some architectural descisions to be\r\nnot as ideal as they could be. ZeroMQ has more flexible communication\r\npatterns allowing for easier mapping of real-life interactions between\r\nservices. Coupled with an easy to use asynchronous user-level API and\r\nvery fast underlying communication on persistent TCP connections\r\nZeroMQ is a rather attractive transport to build your microservices\r\nbased applications in.\r\n\r\nThis talk will show how to use ZeroMQ within Python to build your\r\nmicroservices. It will show the benefits of ZeroMQ's asynchronous\r\nAPI, common usage patterns and how to handle backpressure.\r\nFurthermore different communication patterns will be explored and the\r\nimpact this has on how to simplify the overall architecture using\r\nthese patterns." - ], - "abstract_extra": "Previous talks I have given:\r\n- EuroPython 2011 - Exploring CPython's bytecode\r\n- PyConUK 2011 - Exploring CPython's bytecode\r\n- EuroPython 2012 - Using Sockets in Python\r\n- EuroPython 2013 - Taming greenlets using eventlet\r\n- FOSDEM 2014 - Introduction to py.test Fixtures\r\n- FOSDEM 2014 - Integrating Python and C using CFFI\r\n- EuroPython 2014 - Advanced Uses of py.test Fixtures\r\n- PyConUK 2014 - Advanced Uses of py.test Fixtures\r\n- EuroPython 2015 - The hook-based plugin architecture of py.test\r\n- PyConUK 2015 - Shipping your application using Conda", - "tag_categories": [ - "Programming", - "DevOps", - "Programming" - ], - "emails": "flub@devork.be", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/build-your-microservices-with-zeromq", - "admin_type": "", - "companies": "Cobe.io" - }, - "612": { - "abstract_short": "These are the lessons learned when scaling a SaaS web application which grew much faster than any one us could have ever expected.\r\n\r\n - Log and monitor from day one.\r\n - Things will fail, be sure you know when they do.\r\n - Choose components which allow language interoperability.\r\n - Horizontally scalable everything.\r\n - Plan for database downtime.\r\n - Have a way to share settings between backend and frontend.\r\n - Have a way to enter maintenance mode.\r\n - And more...\r\n\r\n", - "sub_title": "The things you knew you'd have to deal with, and some that you probably didn't.", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@eriknhj", - "id": 612, - "speakers": "Erik N\u00e4slund", - "title": "Building a reasonably popular web application for the first time.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web Track", - "Case Study", - "RESTful", - "APIs", - "failures/mistakes" - ], - "abstract_long": [ - "My name is Erik N\u00e4slund - I\u2019m the co-founder and Head of Engineering at Hotjar.\r\n\r\nI'd love to share the lessons learned when scaling a SaaS web application which grew much faster than any one us could have ever expected.\r\n\r\nWords like \u201cbig\u201d and \u201cpopular\u201d carry very little meaning, so let me define how big Hotjar is right now using some numbers.\r\n\r\nWe onboard about 500 new users on a daily basis.\r\nWe process around 250 000 API requests every minute.\r\nOur CDN delivers about 10 TB of data per day.\r\nWe have roughly 3 TB of data in our primary data store (PostgreSQL), another 1 TB in our Elasticsearch cluster, and a LOT more on Amazon S3.\r\n\r\nThese are the key things we wish we knew when we started. They would have made our life so much easier!\r\n\r\n - Log and monitor from day one.\r\n - Have a way to profile your API calls.\r\n - Things will fail, be sure you know when they do.\r\n - Have a way to keep secrets.\r\n - Everything needs a limit (even if it's really big).\r\n - Be wary of hitting data type limits.\r\n - Don't get too attached to a framework.\r\n - Choose components which allow language interoperability.\r\n - Horizontally scalable everything.\r\n - Plan for database downtime.\r\n - Features are a great way to test things out before launching them to the public.\r\n - Have a way to share settings between back end and front end.\r\n - Have a way to enter maintenance mode.\r\n - Require different quality of code for different parts of your application." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Case Study", - "Web", - "Web", - "Best Practice and Use Cases" - ], - "emails": "erik@hotjar.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-a-reasonably-popular-web-application-for-the-first-time", - "admin_type": "", - "companies": "Hotjar Ltd" - }, - "606": { - "abstract_short": "This talk demonstrates a technique for developing RESTful APIs using Flask and Flask-Restplus. These tools automate common API tasks such as: validating input, serializing output, routing requests to methods, and turning Python exceptions into HTTP responses.\r\n\r\nThe final API comes with a Swagger interactive UI, which documents all endpoints and makes testing easy. The described tools tools provide just enough syntactic sugar to make your code readable, scalable and easy to maintain.", - "sub_title": "Using Flask-Restplus to easily develop an API documented by Swagger", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@postrational", - "id": 606, - "speakers": "Micha\u0142 Karzy\u0144ski", - "title": "Building beautiful RESTful APIs using Flask", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Open-Source", - "Web Track", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "Documentation", - "Development" - ], - "abstract_long": [ - "Modern software is powered by APIs. User facing apps may run in the browser or on mobile platforms, but they almost universally rely on data stored in the cloud. More often then not apps use a RESTful API to exchange data with the server.\r\n\r\nIn my talk I will demonstrate a technique for developing RESTful APIs using the [Flask][1] micro-framework and [Flask-Restplus][2]. These powerful tools automate most common tasks associated with API development: validating input, serializing output, routing requests to methods, and turning Python exceptions into machine-readable HTTP responses.\r\n\r\nA Flask-Restplus API is fully documented by [Swagger][3] which lists all defined endpoints, their query parameters and the format of input and output JSON objects. Swagger generates an [interactive UI][4] for selecting options and easily testing queries. Flask and Flask-Restplus provide just enough syntactic sugar to make your code readable, scalable and easy to maintain.\r\n\r\nMy presentation will give an overview of the features of Flask and Flask-Restplus; I will describe how easy it is to get started and discuss some best practices for building complex APIs using this approach. I will wrap up by briefly mentioning other components of the Flask ecosystem, which give this micro-framework power to match fully-loaded systems such as Django.\r\n\r\n [1]: http://flask.pocoo.org/\r\n [2]: http://flask-restplus.readthedocs.org/en/latest/\r\n [3]: http://swagger.io/\r\n [4]: http://petstore.swagger.io/#/pet\r\n" - ], - "abstract_extra": "Hi there, my name is Michal. I write a [blog][1], which you may have come across Googling for Django how-tos. I'm also an author of a [book on Linux server administration using Webmin][2]. I have spoken at a number of conferences, including a lightning talk at DjangoCon 2013, a talk at a Python users' group in Warsaw ([PyWaw][3]) and a talk at a DevCon meeting in Warsaw.\r\n\r\nI want to give a presentation about creating RESTful APIs using Flask. As a companion to this talk, I am in the process of writing a blog article which will describe the technique with code samples and working boilerplate code. Attendees who are interested in the topic will be able to use the article as a practical way to get started building APIs in this way.\r\n\r\nI don't have a YouTube video with a talk in English, but you can hear me speak if you take a look at this [short demo][4] for a proof-of-concept I was working on a few years ago.\r\n\r\n [1]: http://michal.karzynski.pl/\r\n [2]: https://www.packtpub.com/networking-and-servers/webmin-administrators-cookbook\r\n [3]: http://pywaw.org/27/\r\n [4]: https://youtu.be/5dxLyt6cfAA?t=47s\r\n", - "tag_categories": [ - "Open Source", - ">>> Suggested Track", - "Web", - "Programming", - "Programming" - ], - "emails": "europython@karzyn.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-beautiful-restful-apis-using-flask-1", - "admin_type": "", - "companies": "Intel Corporation" - }, - "682": { - "abstract_short": "Ever wondered how to keep track of all of your services and their APIs? I'm going to explore how to build your Python services with OpenAPI/Swagger and how it helps you solve problems like communication between services, request and response validation, and documentation of your API. I'll also discuss some challenges you might face, gathered from over a year of heavy usage at Yelp.", - "sub_title": "Document, validate and connect your Python services", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@s_jaensch", - "id": 682, - "speakers": "Stephan Jaensch", - "title": "Building Service interfaces with OpenAPI / Swagger", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Microservices", - "Best Practice", - "python", - "Pyramid" - ], - "abstract_long": [ - "Implementing a service-oriented architecture (SOA) is a proven way to split up large monolithic codebases and to scale development when your organization grows to hundreds or thousands of engineers. I'm going to explore how to build and document your services with OpenAPI (formerly known as Swagger). I\u2019ll discuss the benefits and why you should standardize on the API and protocols, but not on SDKs or client libraries. Find out how to make sure the caller as well as your service is conforming to the specification by using request and response validation, how to generate a beautiful HTML documentation for your API, and how you can effortlessly make calls to your services. I'll also discuss and tell you how to overcome challenges you might face, gathered from over a year of heavy usage at Yelp for hundreds of services. I'll present the OpenAPI tools and libraries available for the Python ecosystem for client and server development.\r\n\r\nThe OpenAPI initiative is a cross-vendor consortium focused on creating, evolving and promoting a vendor neutral description format. As an open governance structure under the Linux Foundation, its members include Google, IBM, Atlassian and PayPal.", - "", - "", - "" - ], - "abstract_extra": "I'm a tech lead at Yelp, working on the backend for our Business Owner apps amongst other things. I'm a long-time user of Swagger and recently started contributing to the Python tools for it like bravado. I gave a talk at last year's EuroPython and I had a blast doing it. This is the video: https://youtu.be/UUkyzCwgqPw\r\n\r\nIf possible (and if I'm accepted), I'd prefer a slot during the first half of EuroPython.", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "", - "Application Frameworks" - ], - "emails": "sjaensch@yelp.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/building-service-interfaces-using-OpenAPI", - "admin_type": "", - "companies": "Yelp" - }, - "517": { - "abstract_short": "Hainbat zerbitzaritan dauden eta plataforma bakar batean oinarrituta dagoen plataforma baten mantentzea Buildout Django Fabric eta erabiliz. Kasu praktikoa euskarazko tokiko hedabideak.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@jatsu", - "id": 517, - "speakers": "Jatsu Argarate", - "title": "Buildout Django eta Fabric. Kasu praktikoa euskarazko tokiko hedabideetan", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Django" - ], - "abstract_long": [ - "Hainbat bezerorentzako neurrira egindako edukiak kudeatzeko plataforma bat garatu dugu Django Frameworka erabiliz. Guztia kudeatzeko eta erabilitako bertsioak kontrolatzeko zc.buildout erabiltzen dugu, baina plataforma hazten doa eta iada dozena bat instalazio ditugu hainbat zerbitzaritan zehar banatuta. Plataformaren oinarria berbera denez, instalazio guztietan eguneraketak argitaratzeko buildout eta fabric-en oinarritutako sistema erabiltzen dugu.\r\nHitzaldi honetan azalduko duguna.", - "", - "", - "" - ], - "abstract_extra": "Hainbat zerbitzaritan dauden eta plataforma bakar batean oinarrituta dagoen plataforma baten mantentzea Buildout Django Fabric eta erabiliz. Kasu praktikoa euskarazko tokiko hedabideak.", - "tag_categories": [ - "Application Frameworks" - ], - "emails": "jargarate@codesyntax.com", - "language": "Basque", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/buildout-django-eta-fabric-kasu-praktikoa-euskarazko-tokiko-hedabideetan", - "admin_type": "", - "companies": "CodeSyntax" - }, - "667": { - "abstract_short": "In this talk, we will see an intro to CFFI, an alternative to using the standard C API to extend Python. CFFI works on CPython and on PyPy. It\r\nis a possible solution to a problem that hits notably PyPy --- the\r\nCPython C API.\r\n\r\nThe CPython C API was great and contributed to the present-day success\r\nof Python, together with tools built on top of it like Cython and SWIG.\r\nI will argue that it may be time to look beyond it, and present CFFI as\r\nsuch an example.\r\n", - "sub_title": "CFFI, on CPython and PyPy, as a potentially better way to call C code", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 667, - "speakers": "Armin Rigo", - "title": "CFFI: calling C from Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "PyPy", - "C-Languages", - "CPython" - ], - "abstract_long": [ - "I will introduce CFFI, a way to call C libraries from Python.\r\n\r\n http://cffi.readthedocs.org/\r\n\r\nCFFI was designed in 2012 to get away from Python's C extension modules,\r\nwhich require hand-written CPython-specific C code. CFFI is arguably\r\nsimpler to use: you call C from Python directly, instead of going\r\nthrough an intermediate layer. It is not tied to CPython's internals,\r\nand works natively on two different Python implementations: CPython and\r\nPyPy. It could be ported to more implementations.\r\n\r\nIt is also a big success, according to the download statistics. Some\r\nhigh-visibility projects like Cryptography have switched to it.\r\n\r\nPart of the motivation for developing CFFI is that it is a minimal layer\r\nthat allows direct access to C from Python, with no fixed intermediate C\r\nAPI. It shares ideas from Cython, ctypes, and LuaJIT's ffi, but the\r\nnon-dependence on any fixed C API is a central point. \r\n\r\nIt is a possible solution to a problem that hits notably PyPy --- the CPython C API. The CPython C API was great and, we can argue, it contributed a lot to\r\nthe present-day success of Python, together with tools built on top of\r\nit like Cython and SWIG. However, it may be time to look\r\nbeyond it. This talk will thus present CFFI as such an example.\r\nThis independence is what lets CFFI work equally well on CPython and\r\non PyPy (and be very fast on the latter thanks to the JIT compiler).\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Other Programming Languages", - "Python" - ], - "emails": "armin.rigo@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/cffi-calling-c-from-python", - "admin_type": "", - "companies": "" - }, - "400": { - "abstract_short": "Introduction to the clean code principles applied to Python code. Let's honor the readable nature of the Python syntax so anyone can maintain our code: \"readability counts\".\r\n\r\nThis talk introduces general concepts of code quality and how they apply for Python. We analyse technical debt, refactoring, and unit testing in the context of a project striving for a better code base.", - "sub_title": "Achieving quality code in Python projects", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@rmarianoa", - "id": 400, - "speakers": "Mariano Anaya", - "title": "Clean code in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Education", - "Best Practice", - "Clean Code", - "Agile", - "Development" - ], - "abstract_long": [ - "Introduction to the clean code principles tailored for Python projects. The goal is to achieve better code quality and a more maintainable code base. Python has a nature of being clear, and easy to follow, so let's take advantage of it in our own code, in order to enforce the principle \"readability counts\" by writing pythonic code.\r\n\r\nThis talk introduces general concepts of code quality for Python developers, analyzing technical debt, with examples on how to achieve a more legible, maintainable and clean code base, by refactoring, writing unit tests and having good coding guidelines for the project. If you are giving your first steps with Python, you will gain insight on best practices for writing good software from the start. If you are a experienced developer, the ideas should work as food for thought, helping with recommendations for code reviews, best practices, etc." - ], - "abstract_extra": "", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Educational", - "Development Methods", - "Programming" - ], - "emails": "marianoanaya@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/clean-code-in-python", - "admin_type": "", - "companies": "Onapsis" - }, - "420": { - "abstract_short": "Take POSIX, add capability-based security, then remove anything that conflicts. The result is CloudABI, available for BSD, Linux, OSX et al. \r\n\r\nA CloudABI process is incapable of any action that has a global impact It can only affect the file descriptors you provide. As a result even unknown binaries can safely be executed - without the need for containers, virtual machines, or other sandboxes. \r\n\r\nThis talk will introduce CloudABI, how to use it with Python, the benefits, and the trade-offs.", - "sub_title": "Why is my webapp doing `rm -rf $HOME`, and how can I prevent it?", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@moreati", - "id": 420, - "speakers": "Alex Willmer", - "title": "CloudABI: Capability based security on Linux/Unix", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Unix", - "Security", - "Web Track", - "System Architecture", - "Microservices" - ], - "abstract_long": [ - "[CloudABI](https://nuxi.nl/) is a new POSIX based computing environment that brings [capability-based security](https://en.wikipedia.org/wiki/Capability-based_security) to BSD, Linux, OSX et al.\r\n\r\nUnlike traditional Unix, if a CloudABI process goes rogue it _cannot_ execute random binaries, or read arbitrary files. This is achieved by removing `open()` & any other API able to acquire global resources. Instead a CloudABI process must be granted _capabilities_ to specific resources (e.g. directories, files, sockets) in the form of file descriptors. If a process only has a descriptor for `/var/www` then it's _incapable_ of affecting any file or folder outside that directory.\r\n\r\nThis talk will\r\n\r\n - Review the security & reusability problems of Linux & Unix processes\r\n - Introduce capability-based security\r\n - Summarize the design of CloudABI - its benefits & trade-offs\r\n - Demonstrate how to write Python software for CloudABI & run it\r\n - Point out the pitfalls & gotchas to be aware of\r\n - Discuss the current & future status of CloudABI\r\n \r\nCloudABI began life on FreeBSD. It also runs DragonFly BSD, NetBSD, PC-BSD, Arch Linux, Debian, Ubuntu, & OS X. The API & ABI are kernel agnostic - a CloudABI binary can run on any supported kernel. The design is evolved from [Capsicum](https://www.cl.cam.ac.uk/research/security/capsicum/), a library that allows processes to drop access to undesired syscalls at runtime. CloudABI applies this at build time to make testing & lock-down easier.", - "", - "", - "" - ], - "abstract_extra": "I can contract this talk to 30 minutes, or expand it to 60 minutes if you prefer.", - "tag_categories": [ - "Operating Systems", - "Security", - ">>> Suggested Track", - "DevOps", - "Programming" - ], - "emails": "alex@moreati.org.uk", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/capability-based-security-on-unix-with-cloudabi", - "admin_type": "", - "companies": "" - }, - "597": { - "abstract_short": "Learn about `conda`, the package installer from the scientific community. It offers very interesting features that can improve your installation experience considerably. The talk gives an overview of the basic usage of `conda`. It covers the topics installation and building of packages.\r\n`conda` can be combined with `pip` to use all PyPi packages. Its cross-platform and multi-languages features combined with power environments can help to improve your productivity. \r\n", - "sub_title": "A better solution to the packing problem!?", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@pyacademy", - "id": 597, - "speakers": "Mike M\u00fcller", - "title": "Conda - Easier Installs and Simpler Builds", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python general", - "Packaging", - "Cross-Platform-Development" - ], - "abstract_long": [ - "The BSD license `conda` is a package installer for Python and other languages.\r\nWhile it originates form the scientific Python community, it can be really useful for\r\nall Python programmers.\r\n\r\nInstallation of Python packages has become much simpler over the last years.\r\nThe use of `pip` and `virtualenv` simplify the installation of Python packages a lot.\r\nHowever, they are specific to Python. The Python-agnostic `conda` has advantages\r\nfor packages with C or Fortran extension that are very common for scientific libraries. \r\n`conda` is cross-platform. According to different statistics, the most Python users work on Windows. Often is especially complicate to get extensions with many dependencies installer on this platform. `conda` facilities the installation for Windows considerably.\r\n\r\nThis talk introduces the basic usage of `conda` to install packages. This includes the basic commands for searching and installing of packages. Furthermore, the talk demonstrates the creation of environments for different Python versions and combinations of packages.\r\n\r\nThe building of a packages is simple. The talk shows how to build recipes that contain declarations of dependencies .\r\n\r\n`conda` can work together with `pip`. This allows to use all packages from the Python Package Index ( PyPI). The talk explains the concept of channels that allow to get packages from different sources.\r\n", - "", - "", - "" - ], - "abstract_extra": "This hands-on talk introduces a very useful tool to a new audience. While very well know in the scientific Python community, `conda` might not that well know outside this community. This talk can help to change this situation.", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "mmueller@python-academy.de", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/conda-easier-installs-and-simpler-builds", - "admin_type": "", - "companies": "Python Academy GmbH & Co. KG" - }, - "610": { - "abstract_short": "The purpose of this talk if pointing out that using Docker in production is perfectly valid, not just for develop and CI environments.\r\n\r\n", - "sub_title": "Security considerations and best practices", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@musghost", - "id": 610, - "speakers": "Andr\u00e9s Cidel", - "title": "Create secure production environment using Docker", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Virtualization", - "Security", - "Best Practice", - "Docker" - ], - "abstract_long": [ - "Docker is a relatively new technology platform that helps teams develop, deploy and scale applications with greater ease and speed. However, there are doubts about using Docker in production environments. One important reason is that containers don't provide the same security layer as hypervisors do.\r\n\r\nThe purpose of this talk is pointing out that using Docker in production is perfectly valid, not just for develop and CI environments.\r\n\r\nWe'll learn:\r\n\r\n - How Docker works.\r\n - Main risks.\r\n - How create and maintain secure images.\r\n - How defend containers.\r\n - How delimit security risks in containers.\r\n - Best practices for running containers.\r\n\r\n" - ], - "abstract_extra": "I'm the organizer of a Meetup about Docker and I've held some talks about it.\r\nThis is the meetup website: http://www.meetup.com/Mexico-City-Docker-friends/\r\nThese are my blogs, English and Spanish versions http://blog.cidel.com.mx/ and http://dockerfriends.mx/\r\n", - "tag_categories": [ - "DevOps", - "Security", - "Best Practice and Use Cases", - "DevOps" - ], - "emails": "andres@cidel.com.mx", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/create-secure-production-environment-using-docker", - "admin_type": "", - "companies": "Vinco Orbis" - }, - "746": { - "abstract_short": "please fill here", - "sub_title": "", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 746, - "speakers": "Miguel Reguero", - "title": "Cybersecurity in the financial sector with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security" - ], - "abstract_long": [ - "please fill here" - ], - "abstract_extra": "", - "tag_categories": [ - "Security" - ], - "emails": "miguel.reguero@i4s.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/ciberseguridad-en-el-sector-financiero-con-python", - "admin_type": "", - "companies": "Innovation 4 Security" - }, - "666": { - "abstract_short": "The CSV is the most widely adopted data format. It used to \r\nstore and share *not-so-big* scientific data. However, this format is not particularly \r\nsuited in case data require any sort of internal\r\nhierarchical structure, or if data are too big. To this end, other data formats must be considered. \r\nIn this talk, the different data formats will be presented and compared w.r.t. their\r\nusage for scientific computations along with corresponding Python libraries.", - "sub_title": "Different format solutions for tiny and big data, beyond CSV and HDFS", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@leriomaggio", - "id": 666, - "speakers": "Valerio Maggio", - "title": "Data Formats for Data Science", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Physics", - "Big Data", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Databases" - ], - "abstract_long": [ - "The *plain text* is one of the simplest yet most intuitive format in which data could be stored. \r\nIt is easy to create, human and machine readable, \r\n*storage-friendly* (i.e. highly compressible), and quite fast to process.\r\nTextual data can also be easily *structured*; in fact to date the \r\nCSV (*Comma Separated Values*) is the most common data format among data scientists.\r\n\r\nHowever, this format is not properly suited in case data require any sort of internal\r\nhierarchical structure, or if data are too big to fit in a single disk. \r\n\r\nIn these cases other formats must be considered, according to the shape of data, and the \r\nspecific constraints imposed by the context. \r\nThese formats may leverage *general purpose* solutions, e.g. [No]SQL databases, HDFS (Hadoop File System); \r\nor may be specifically designed for scientific data, e.g. hdf5, ROOT, NetCDF.\r\n\r\nIn this talk, the strength and flaws of each solution will be discussed, focusing on their usage for scientific computations. The goal is to provide some practical guidelines for data scientists, derived from the the comparison of the different Pythonic solutions presented for the case study analysed. These will include\r\n`xarray`, \r\n`pyROOT` *vs* `rootpy`, `h5py` *vs* `PyTables`, `bcolz`, and `blaze`.\r\nFinally, few notes about the new trends for **columnar databases** (e.g. *MonetDB*) will be also presented, for very fast\r\nin-memory analytics." - ], - "abstract_extra": "", - "tag_categories": [ - "Sciences", - "Data Science", - "Data Science", - "Data Science", - "Databases" - ], - "emails": "valerio.maggio@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/data-science-formats-beyond-csv-and-hdfs", - "admin_type": "", - "companies": "" - }, - "693": { - "abstract_short": "Laburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.", - "sub_title": "", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 693, - "speakers": "Iker Martinez de Agirre Mendia", - "title": "Datu bistaratze soluzioen garapena Smartcity proiektuetan", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Web", - "General" - ], - "abstract_long": [ - "Mondragon Unibertsitateko inbestigazio taldea Smartcity-en aplikazio eta monitorizazioen inguruko proiektuetan lanean ari da, non herrialde ezberdinetako gune konkretuetan bizi diren pertsonen kontsumo energetikoa jaso eta aztertzen den. Proiektu hauetako bi CITyFiED eta ARROWHEAD dira. \r\n\r\nKontsumo hori eta horren harira ondorioztatutako aholku energetikoak erabiltzailearengana heltzeko, bistaratze soluzio bat garatu da, web orrialde bat alegia. \r\n\r\nErabiltzailean oinarritutako diseinua (User Centered Design) aplikatuz, gailu ezberdinetara moldatzen den (Responsive Web Design, Mobile-First) web bat sortu da, Django Web Framework tresnaren bitartez. REST API (Django Rest Framework) baten bidez, informazioa gordetzen den datu basea atzitzen da, kontsumoak eta beraien bilakaera bistaratze libreriak (D3.js) erabiliz irudikatuz. Horrez gain, Djangok eskaintzen dituen aukerak baliatuz, web orrialdea hizkuntza ezberdinetan bistaratu daiteke.\r\n\r\nLaburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.\"\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Mondragon Unibertsitateko inbestigazio taldea Smartcity-en aplikazio eta monitorizazioen inguruko proiektuetan lanean ari da, non herrialde ezberdinetako gune konkretuetan bizi diren pertsonen kontsumo energetikoa jaso eta aztertzen den. Proiektu hauetako bi CITyFiED eta ARROWHEAD dira. \r\n\r\nKontsumo hori eta horren harira ondorioztatutako aholku energetikoak erabiltzailearengana heltzeko, bistaratze soluzio bat garatu da, web orrialde bat alegia. \r\n\r\nErabiltzailean oinarritutako diseinua (User Centered Design) aplikatuz, gailu ezberdinetara moldatzen den (Responsive Web Design, Mobile-First) web bat sortu da, Django Web Framework tresnaren bitartez. REST API (Django Rest Framework) baten bidez, informazioa gordetzen den datu basea atzitzen da, kontsumoak eta beraien bilakaera bistaratze libreriak (D3.js) erabiliz irudikatuz. Horrez gain, Djangok eskaintzen dituen aukerak baliatuz, web orrialdea hizkuntza ezberdinetan bistaratu daiteke.\r\n\r\nLaburbilduz, kontsumo energetikoaren datuak modu sinple eta argi batean bistaratzen dituen web orrialde bat sortu da Django erabiliz.\"", - "tag_categories": [ - "", - "" - ], - "emails": "iker.martinezm@alumni.mondragon.edu", - "language": "Basque", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/datu-bistaratze-soluzioen-garapena-smartcity-proiektuetan-1", - "admin_type": "", - "companies": "" - }, - "418": { - "abstract_short": "Python has lots of scientific, data analysis, and machine learning libraries. But there are many problems when starting out on a machine learning project. Which library do you use? How do they compare to each other? How can you use a model that has been trained in your production app? In this talk I will discuss how you can use TensorFlow to create Deep Learning applications. I will discuss how it compares to other Python machine learning libraries, and how to deploy into production.", - "sub_title": "Find out how TensorFlow compares to other Machine Learning libraries", - "timerange": "2016-07-22 14:00:00, 2016-07-22 15:00:00", - "sub_community": "pydata", - "duration": 60, - "twitters": "@IanMLewis", - "id": 418, - "speakers": "Ian Lewis", - "title": "Deep Learning with Python & TensorFlow", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Deep Learning", - "Science Track", - "Machine-Learning" - ], - "abstract_long": [ - "Python has lots of scientific, data analysis, and machine learning libraries. But there are many problems when starting out on a machine learning project. Which library do you use? How do they compare to each other? How can you use a model that has been trained in your production application?\r\n\r\nTensorFlow is a new Open-Source framework created at Google for building Deep Learning applications. Tensorflow allows you to construct easy to understand data flow graphs in Python which form a mathematical and logical pipeline. Creating data flow graphs allow easier visualization of complicated algorithms as well as running the training operations over multiple hardware GPUs in parallel.\r\n\r\nIn this talk I will discuss how you can use TensorFlow to create Deep Learning applications. I will discuss how it compares to other Python machine learning libraries like Theano or Chainer. Finally, I will discuss how trained TensorFlow models could be deployed into a production system using TensorFlow Serve.", - "", - "", - "" - ], - "abstract_extra": "Here is a high level outline of the talk:\r\n\r\nOutline\r\n\r\n - Overview of Machine Learning Problems\r\n - What is TensorFlow and How Does it Work?\r\n - Creating a Deep Learning Model with Tensorflow\r\n - Comparing Tensorflow to Theano & Chainer\r\n - Productionizing Deep Learning Models", - "tag_categories": [ - "Data Science", - ">>> Suggested Track", - "Data Science" - ], - "emails": "ianlewis@google.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/deep-learning-with-python-tensorflow", - "admin_type": "", - "companies": "Google" - }, - "388": { - "abstract_short": "This talk shares some insights into Aldryn, a platform used daily to execute hundreds of Django based website-deployments, and the various components that intervene to deploy a Django project from its git repository to the cloud.\r\n\r\nWe will discuss some of the problems we faced, and the solutions we adopted, to deploy Django projects at scale to the cloud, including topics like PyPI wheel proxies, dynamic traffic-rerouting, live data-center migrations, etc.", - "sub_title": "A journey through various challenges and solutions we adopted to deploy Django at scale on Aldryn", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@garet_jax", - "id": 388, - "speakers": "Jonathan Stoppani", - "title": "Deploying Django at scale: what happens inside the cloud", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Django Track", - "Configuration Management (Ansible/Fabric/Chef/...)", - "Django", - "Distributed Systems", - "Deployment/Continuous Integration and Delivery" - ], - "abstract_long": [ - "Aldryn is used daily to execute hundreds of Django based website-deployments. It consists of a control panel to help backend developers, frontend developers, project managers and content-editors collaborate to successfully build and maintain web apps, coupled to a scalable and highly available Docker-based build and deployment infrastructure currently used to host more than 6000 django-cms based websites.\r\n\r\nWhile the control panel is oriented mainly towards the Django/django-CMS match, the structure of the single projects and the deployment infrastructure allow to continuously deploy, upgrade and scale any type of HTTP service.\r\n\r\nThe goal of this talk is to share some insights into the various components that intervene to deploy a Django project from its git repository to the cloud.\r\n\r\nThis talk will discuss some of the problems we faced, and the solutions we adopted, to deploy Django projects at scale to the cloud. I'll share the lessons we learned and present the tools we built to reach our goal. I\u2019ll be covering topics like:\r\n - Using a PyPI proxy to both build platform-specific wheels, on order to both to withstand PyPI downtimes and cut on deployment times;\r\n - Dynamic traffic re-routing for zero-downtime deployments and horizontal scaling;\r\n - Massive TLS termination on a custom built Twisted/PyPy reverse proxy;\r\n - Live server and datacenter migrations for both apps and their data." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "DevOps", - "Application Frameworks", - "DevOps", - "DevOps" - ], - "emails": "jonathan.stoppani@divio.ch", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/deploying-django-at-scale-what-happens-inside-the-cloud", - "admin_type": "", - "companies": "Divio" - }, - "593": { - "abstract_short": "When designing an abstraction for a complex system (an ORM-like library in our case) you face a lot of design decisions and challenges. This talk details how we chose to tackle those when designing elasticsearch-dsl.", - "sub_title": "Lessons learned while bulding elasticsearch-dsl", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@honzakral", - "id": 593, - "speakers": "Honza Kr\u00e1l", - "title": "Designing a Pythonic Interface", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Software Design", - "Best Practice", - "failures/mistakes" - ], - "abstract_long": [ - "The json query language for elasticsearch, as well as its other APIs, can be very daunting to new users and can be a bit cumbersome when working with python. That is why we created elasticsearch-dsl - a sort of ORM for elasticsearch.\r\n\r\nWe will go through the design philosophy and obstacles found during the development - trying to make a more pythonic interface for elasticsearch while maintaining access to all of the features of the underlying query language.\r\n\r\nThe focus of the talk is more on the library and interface design than on elasticsearch and its query language itself, that is used only to demonstrate the principles." - ], - "abstract_extra": "I just want to stress that this is not a talk about elasticsearch, but about designing a pythonic API, using elasticsearch-dsl as an example (since it's a practical \"lessons learned\" talk).", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "Best Practice and Use Cases" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/designing-a-pythonic-interface", - "admin_type": "", - "companies": "Elastic" - }, - "505": { - "abstract_short": "Nowadays Python is the perfect environment for developing a real-time automated trading tool. In this talk we will discuss the development of: a general-purpose multiagent-system module using Pyro and ZeroMQ; a platform, based on it, for developing automated trading strategies using Numpy, Numba, Theano, etc.; and a GUI for visualizing real-time market data using PyQtGraph and Qt.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 505, - "speakers": "Miguel S\u00e1nchez de Le\u00f3n Peque", - "title": "Developing a real-time automated trading platform with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Distributed Systems", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "In OpenSistemas we have developed a general-purpose multi-agent system which is written in pure Python: *osBrain*. Agents communicate with each other using ZeroMQ, allowing the user to define different communication patterns based on their needs.\r\n\r\nBased on this multi-agent system, we have also developed a broker-independent platform for real-time automated trading: *osMarkets*. This platform implements specialized agents:\r\n\r\n- **Feeder** is an agent which receives real-time data from the broker.\r\n- **Router** is an agent which receives data from feeders. It manages the historical data and distributes updates to all the subscribed agents in the network.\r\n- **Brain** is the most common agent. It receives data from router or from other brains and processes them, sending the results to other brains or sending orders to be executed. Brains can make use of many useful packages avilable in the Python ecosystem: NumPy, SciPy, Numba, Theano...\r\n- **Trader** is an agent which is designed to interact with the broker, just as the feeder, but to execute market orders.\r\n\r\n![system](http://i.imgur.com/A9vsWee.png)\r\n\r\nWhile it is still in its earliest stages, we are developing a tool for real-time visualization of trading strategies using PyQtGraph. This tool acts as an agent in the multi-agent system.\r\n\r\n![chart](http://i.imgur.com/5XS7oBQ.png)" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "msanchez@opensistemas.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/developing-a-real-time-automated-trading-platform-with-python", - "admin_type": "", - "companies": "OpenSistemas" - }, - "565": { - "abstract_short": "Nowadays, there is a lot of buzz about Go. In this talk we'll learn the basics and most important concepts of the language, we'll further discuss differences and similarities in Go and Python and dive into the cool features of Go. Finally we'll talk about why popularity of Go is raising so fast and try to answer the most important question: Do I need to switch to Go ?", - "sub_title": "An opinion on the topic after working with Go for 6 months", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 565, - "speakers": "Max Tepkeev", - "title": "Do I need to switch to Go(lang) ?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Educational Track", - "Go-Lang" - ], - "abstract_long": [ - "Nowadays, there is a lot of buzz about Go. It happened so that for the last 6 months I've been mostly programming Go, and frankly speaking I fell in love with this language.\r\n\r\nWe'll first do a quick review of the language. Go doesn't have some language constructs, for example classes and exceptions and at first it may seem hard to write proper Go code, but in practice the language is so easy that I will try to teach you the basics and most important concepts of the language. We'll further discuss differences and similarities in Go and Python and dive into the cool features of Go.\r\n\r\nFinally we'll talk about why popularity of Go is raising so fast and try to answer the most important question: Do I need to switch to Go ?" - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Other Programming Languages" - ], - "emails": "tepkeev@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/do-i-need-to-switch-to-golang", - "admin_type": "", - "companies": "Aidata" - }, - "563": { - "abstract_short": "This talk is about dynamic class generation in python: the practice of writing code that generates classes and their functionality at runtime. It will use boto3, the AWS SDK for Python, as a basis to dive into the basics, the benefits, and the drawbacks to dynamically generating classes.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 563, - "speakers": "Kyle Knapp", - "title": "Dynamic Class Generation in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Python general", - "Use Case", - "APIs", - "Educational Track" - ], - "abstract_long": [ - "This talk is about the concept of dynamic class generation in python. The whole idea is writing code that generates classes and their functionality at runtime. You now may be asking yourself, \u201cThat sounds like a neat trick. Why would I ever generate my classes at runtime?\u201d Here are a few reasons why:\r\n\r\n\u2022\tIt can decrease the physical size of your code.\r\n\r\n\u2022\tIt can improve the workflow in adding new functionality.\r\n\r\n\u2022\tIt can improve reliability of your code.\r\n\r\nOne example where the power of this concept has really been leveraged is in boto3, the AWS SDK for Python. Dynamic class generation has allowed boto3 to become heavily data driven such that most of its classes and methods are generated based off JSON models representing aspects of an AWS service\u2019s API. For example, to add support for a new AWS service API in boto3, just plop in a JSON file into the library with no additional Python code required.\r\n\r\nUsing lessons and techniques drawn from developing boto3, this talk will dive into the following topics related to dynamic class generation:\r\n\r\n\u2022\tThe basics of dynamic class generation such as how to effectively dynamically generate classes.\r\n\r\n\u2022\tHow to overcome some of the challenges of dynamic class generation.\r\n\r\n\u2022\tThe tradeoffs in dynamically generating classes and discussion on when it is appropriate.\r\n\r\nBy the end of this talk, the hope is that you will have a better understanding of dynamic class generation and come away with helpful ideas for your next big project." - ], - "abstract_extra": "Talk from last EuroPython: https://ep2015.europython.eu/conference/talks/it-works-on-my-machine-writing-python-code-for-any-environment", - "tag_categories": [ - "Programming", - "Python", - "Best Practice and Use Cases", - "Web", - ">>> Suggested Track" - ], - "emails": "kyknapp1@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/dynamic-class-generation-in-python", - "admin_type": "", - "companies": "Amazon" - }, - "532": { - "abstract_short": "Developers usually state that finding defects is the primary motivation for doing code reviews. However, research has shown that the main benefits of code reviews are; knowledge transfer, team awareness and finding alternative solutions.\r\n\r\nCode reviews when done well are more than just finding defects; it should be a discussion and conversation with other developers about finding the best solutions. We will talk about re-framing code review to encourage open discussions.", - "sub_title": "Get the most out of code review. Learn best practices and avoid common pitfalls.", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@d0ugal", - "id": 532, - "speakers": "Dougal Matthews", - "title": "Effective Code Review", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Communication", - "Best Practice", - "Clean Code", - "Open-Source" - ], - "abstract_long": [ - "Developers usually state that finding defects is the primary motivation for doing code reviews. However, research has shown that the main benefits of code reviews are; knowledge transfer, team awareness and finding alternative solutions.\r\n\r\nCode reviews when done well are more than just finding defects; it should be a discussion and conversation with other developers about finding the best solutions. We will talk about re-framing code review to encourage open discussions.\r\n\r\nThis talk is for everyone that is already involved in regular code review and those hoping to start. I will talk through the code review process with the aim of making it a better and more useful experience for both the authors and the reviewers.\r\n\r\nThe talk will follow the following rough outline:\r\n\r\n- Introduction\r\n - Why do code reviews\r\n - What are we aiming to get out of it\r\n- Submitting code for review\r\n - How can you help reviewers?\r\n - What should you avoid doing?\r\n - Removing ownership of the code\r\n- Reviewing code\r\n - How should you give feedback?\r\n - What should you look for?\r\n - How can you encourage people to review more?\r\n - How to avoid and remove bike-shedding\r\n- Code review tools and how they impact on the process.\r\n- Wrap up and conclusion" - ], - "abstract_extra": "As a developer on the OpenStack project and the maintainer of multiple open source projects, doing code review is a big part of my day. I've been lucky enough to have worked in a strong code review culture for a number of years and given the subject a lot of thought.\r\n\r\nI have spoken at EuroPython previously a few times, last year I spoke about the MkDocs project which was well received albeit a somewhat niched topic.", - "tag_categories": [ - "Community", - "Best Practice and Use Cases", - "Educational", - "Open Source" - ], - "emails": "dougal@dougalmatthews.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/effective-code-review", - "admin_type": "", - "companies": "Red Hat" - }, - "611": { - "abstract_short": "We will explore the lessons learned on maintaining a Selenium test suite against a webapplication and how to leverage python tools to make this process easy and transparent.", - "sub_title": "Lessons learned from testing a webapplication with Selenium and python tools", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@festerc", - "id": 611, - "speakers": "Andrei Coman", - "title": "Effectively test your webapp with Python and Selenium", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Case Study", - "Test Libraries (pyTest/node/...)", - "Testing", - "failures/mistakes" - ], - "abstract_long": [ - "How often do you run your Selenium test suite? How fast do you get a result from it?\r\nWould you like to answer with: \"Whenever I feel like it\" and \"Well, about the time it takes me to finish a coffee\" ? This talk will try to get you closer to these answers.\r\n\r\nWe will have a look at the lessons learned and the challenges my team faced maintaining a Selenium test suite against a long-lived Django web application.\r\n\r\nWe will go over the pros and cons of:\r\n - test design approaches\r\n - technologies we used (nose, py.test, LiveServerTestCase)\r\n - reporting tools ", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Case Study", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "comandrei@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/effectively-test-your-webapp-with-python-and-selenium", - "admin_type": "", - "companies": "3Pillar Global" - }, - "675": { - "abstract_short": "Does Django scale? How to manage traffic peaks? What happens when the database grows too big? How to find the bottlenecks?\r\n\r\nWe will overview the basics concepts on scalability and performance, and then see some tips and tricks. These statements will be backed up with experiments and numbers, to show the timing improvements.", - "sub_title": "Tips and best practices for avoiding scalability issues and performance bottlenecks in Django", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@DZPM", - "id": 675, - "speakers": "David Arcos", - "title": "Efficient Django", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Django Track", - "System Architecture", - "Performance", - "Django", - "Best Practice" - ], - "abstract_long": [ - "**Does Django scale?** How to manage traffic peaks? What happens when the database grows too big? How to find the bottlenecks?\r\n\r\nWe will overview the basics concepts on scalability and performance, and then see some tips and tricks. These statements will be backed up with experiments and numbers, to show the timing improvements.\r\n\r\nMain topics:\r\n\r\n- System architecture\r\n- Database performance\r\n- Queues and workers\r\n- Profiling with django-debug-toolbar\r\n- Caching queries and templates\r\n- Dealing with a slow admin\r\n- Optimizing the models\r\n- Faster tests\r\n\r\n" - ], - "abstract_extra": "I've given talks at EuroPython 2015, PySS, PyConES, PyBCN.", - "tag_categories": [ - ">>> Suggested Track", - "DevOps", - "Programming", - "Application Frameworks", - "Best Practice and Use Cases" - ], - "emails": "david.arcos@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/efficient-django", - "admin_type": "", - "companies": "Lead Ratings" - }, - "484": { - "abstract_short": "EITB Nahieran zerbitzuaren informazioa era erabilgarrian erakusteko APIaren nondik norakoak erakutsiko ditut hitzaldian.", - "sub_title": "EITB Nahieran datuak erabiltzeko API erabilterraz bat nola egin dudan azalduko dut", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@erralin", - "id": 484, - "speakers": "Mikel Larreategi", - "title": "EITB Nahieran: askatu bideoak API honen bidez", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "RESTful", - "APIs", - "Pyramid" - ], - "abstract_long": [ - "Iaz Raspberry PI bat erosi nuen eta ez nekien zer egin berarekin... Aurten Kodi softwarea erabiliz media-center bihurtu dut Raspberrya.\r\n\r\nKodirako 'tvalacarta' izeneko plugin bat zegoen berarekin EITB Nahieran ikusteko, baina ez zebilen. Saiatu nintzen EITB Nahieranen kodea funtzionarazten, eta asko kostata informazioa hiru era ezberdinetan ateratzea lortu nuen. Azkenean, funtzionamendua errazteko API bat prestatu dut EITB Nahieranen dagoen informazioa atzitzeko eta edozeinek erabili ahal dezan." - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Web", - "Application Frameworks" - ], - "emails": "mlarreategi@codesyntax.com", - "language": "Basque", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/eitb-nahieran-askatu-bideoak-api-honen-bidez", - "admin_type": "", - "companies": "CodeSyntax" - }, - "604": { - "abstract_short": "Aurkezpen honetan Nao robotaren Choreographe programazio ingurumenaren sarrera bat egiten da, pythonek errobotikan duen erabilpena erakutsiz. Aurkezpen guztia aurkezleak orain arte egindako lanean oinarritzen da. Lehenik eta behin, programa baten estruktura erakutsiko da. Ondoren, liburutegi bat nola gehitu erakutsiko da, liburutegiaren instalazioak ekar ditzakeen arazoak aztertuz. Azkenik, Naoaren gorputz jarreran zein diskurtsoaren naturaltasunean egindako aurrerapenak azalduko dira. ", - "sub_title": "Pertsona-robot interakzioan lehenego pausuak Choreographe erabilita.", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 604, - "speakers": "Leire Ozaeta", - "title": "Endor, ipuinak kontatzen zituen Nao robota.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Beginners", - "Robotics", - "Human-Machine-Interaction" - ], - "abstract_long": [ - "Aurkezpen honetan Nao robotaren Choreographe programazio ingurumenaren sarrera bat egiten da, pythonek errobotikan duen erabilpena erakutsiz. Aurkezpen guztia aurkezleak orain arte egindako lanean oinarritzen da. Lehenik eta behin, programa baten estruktura erakutsiko da. Ondoren, liburutegi bat nola gehitu erakutsiko da, liburutegiaren instalazioak ekar ditzakeen arazoak aztertuz. Azkenik, Naoaren gorputz jarreran zein diskurtsoaren naturaltasunean egindako aurrerapenak azalduko dira. \r\nHonekin lortu nahi diren helburuak honako hauek dira: \r\n - Choreographeko proiektu baten estruktura ezagutzea.\r\n - Nao robot baten oinarrizko programa bat ikustea.\r\n - Chorepgraphek ematen dituen programazio blokeak eraldatzen jakitea, python erabiliz.\r\n - Choreographen eskaintzen diren tresnen bitartez, programan python liburutegi bat gehitzen ikastea.\r\nAurkezpen hau ulertzeko ez dago eskakizunik. Python pixka bat dakien edonork (\u201chello world\u201d bat egiten jakitearekin balio du) ulertzeko mailan emango da eta ez da konplexutasun tekniko handiko azalpenik emango. Printzipioz python ezagutzen ez duen edonor ere aurkezpen ia osoa ulertzeko gai izango da, programazio ingurumen bezala ez baita kodean gehiegi sartzen, pythonekin hasteko aukera ona izanez.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Educational", - "Hardware", - "Hardware" - ], - "emails": "lozaeta001@gmail.com", - "language": "Basque", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/endor-ipuinak-kontatzen-zituen-nao-robota", - "admin_type": "", - "companies": "" - }, - "531": { - "abstract_short": "Charla que explica qu\u00e9 es Unicode y otros conceptos relacionados para poder usar esta tecnolog\u00eda", - "sub_title": "Cansados de los UnicodeDecodeEncodeErrors? Frenen ese desastre! Vengan y entiendan Unicode :)", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@facundobatista", - "id": 531, - "speakers": "Facundo Batista", - "title": "Entendiendo Unicode", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Python 3", - "Python general", - "Python 2" - ], - "abstract_long": [ - "La charla muestra de forma te\u00f3rica/pr\u00e1ctica qu\u00e9 son Unicode, las planillas de c\u00f3digos, los caracteres, y las codificaciones, entra en detalle en las distintas codificaciones, para saber c\u00f3mo usarlas, ejemplifica las reglas de oro para utilizar Unicode en nuestros programa, y termina mostrando algunas funciones \u00fatiles para el manejo de esa tecnolog\u00eda." - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "facundobatista@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/entendiendo-unicode", - "admin_type": "", - "companies": "Canonical" - }, - "442": { - "abstract_short": "Python, as well as offering an ecosystem of tools for testing security and application pentesting.Python offers a tool ecosystem for developing our own tools security for testing applications and the servers security,identifying information about servers and potential vulnerabilities.\r\n\r\nThe ultimate objective is show a pentesting tool integrating some of the modules commented and try a demo showing info about our domain target and find vulnerabilities in it,\r\n", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@jmortegac", - "id": 442, - "speakers": "Jose Manuel Ortega", - "title": "Ethical hacking with Python tools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Security", - "Tooling", - "Science Track", - "Development" - ], - "abstract_long": [ - "Nowdays, Python is the language more used for developing tools within the field of security. Many of the tools can be found today as port scanner, vulnerability analysis, brute force attacks and hacking of passwords are written in python. The goal of the talk would show the tools available within the Python API and third-party modules for developing our own pentesting and security tools and finally show a pentesting tool integrating some of the modules.\r\n\r\nThe main topics of the talk could include:\r\n\r\n**1.Enter Python language as platform for developing security tools**\r\n\r\nIntroduction about the main libraries we can use for introducing in development of security tools such as socket and requests.\r\n\r\n**2.Libraries for obtain servers information such as Shodan, pygeocoder,pythonwhois**\r\n\r\nShodan is a search engine that lets you find specific computers (routers, servers, etc.) and get information about ports and services that are opened.\r\n\r\n**3.Analysis and metadata extraction in Python for images and documents**\r\n\r\nShow tools for scraping web data and obtain metadata information in documents and images\r\n\r\n**4.Port scanning with tools like python-nmap**\r\n\r\nWith python-nmap module we can check ports open for a target ip or domain.\r\n\r\n**5.Check vulnerabilities in FTP and SSH servers**\r\n\r\nWith libraries like ftplib and paramiko we can check if the server is vulnerable to ftp and ssh anonymous connections.\r\n\r\n" - ], - "abstract_extra": "I will discuss some of the tools that can be found in\r\n\r\nhttp://www.pythonsecurity.org/libs\r\n\r\nand i will show a practice pentesting tool where we can found integrated all tools mentioned,this tool is available in my github repository \r\n\r\nhttps://github.com/jmortega/python-pentesting\r\n\r\nI have been speaker in some python conferences like europython and pycones in 2015.\r\n\r\nIn my speakerdeck space you can see my presentations,some relationed with python https://speakerdeck.com/jmortega", - "tag_categories": [ - "Security", - "Programming", - ">>> Suggested Track", - "Programming" - ], - "emails": "jmoc25@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/ethical-hacking-with-python-tools", - "admin_type": "", - "companies": "" - }, - "652": { - "abstract_short": "During the last CPython sprints at PyCon US (Montreal), I started to contribute to the CPython project and I\r\nwanted to understand the beast.\r\nIn this case, there is only one solution, trace the code from the beginning.\r\nFrom the command line to the interpreter, we will take part to an adventure. The idea behind is just to show how CPython works for a new contributor.", - "sub_title": "", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@matrixise", - "id": 652, - "speakers": "Stephane Wirtel", - "title": "Exploring our Python Interpreter", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "During my last CPython sprint, I started to contribute to the CPython code and I\r\nwanted to understand the beast.\r\n\r\nIn this case, there is only one solution, trace the code from the beginning.\r\nFrom the command line to the interpreter, we will take part to an adventure\r\n\r\n* Overview of the structure of the project and the directories.\r\n* From the Py_Main function to the interpreter.\r\n* The used technics for the Lexer, Parser and the generation of the AST and of\r\ncourse of the Bytecodes.\r\n* We will see some bytecodes with the dis module.\r\n* How does VM works, it's a stack machine.\r\n* The interpreter and its main loop of the Virtual Machine.\r\n\r\nThe idea behind is just to show how CPython works for a new contributor to\r\nCPython.\r\n\r\nFrom the command line, we will learn that Python is a library and that we can\r\nembed it in a C project. In fact we will see the Py_Main function to the ceval.c\r\nfile of the interpreter.\r\n\r\nBut there is no magic in the CPython code, we will travel in the lexer and the\r\nparser of CPython, and why not, by the AST for one Python expression.\r\n\r\nAfter the AST, we will visit the Compiler and the Bytecodes for the\r\ninterpreter.\r\nOf course, we will learn there is the peepholer where some basic instructions\r\nare optimised by the this component.\r\n\r\nAnd of course, the interpreter, this virtual machine is really interesting for\r\nthe newbiew, because it's a big stack where the bytecodes are executed one by\r\none on the stack and the ceval.c file." - ], - "abstract_extra": "1. Intro (2 min)\r\n 1. Who am I?\r\n 2. Why we will visit the interpreter\r\n2. How to start ? (5 min)\r\n 1. The DevGuide\r\n 2. The Core Mentorship\r\n 3. Directories of Python \r\n3. What's the result of python -c \"x = 2 + 2\"? (20 min)\r\n 1. Command line \r\n 2. Lexer, Parser\r\n 3. Compiler \r\n 4. Bytecodes\r\n 5. Peepholer\r\n 4. Interpreter\r\n4. How to contribute (3min)\r\n\r\nAlready presented at PyCon Ireland 2015 and PyCon Canada 2015 at Toronto and PythonFOSDEM 2016 in Brussels.\r\nYou can find the slides at this address:\r\n\r\nhttps://speakerdeck.com/matrixise/exploring-our-python-interpreter", - "tag_categories": [ - "Python", - "Python", - "Python" - ], - "emails": "stephane@wirtel.be", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/exploring-our-python-interpreter", - "admin_type": "", - "companies": "Mgx.IO" - }, - "433": { - "abstract_short": "Do you ever wonder how your Python code looks to the interpreter? What those `.pyc` files are? Why one program outperforms another, even if the code is similar? Then let\u2019s dive into Python bytecode! Bytecode is the \"intermediate language\" that expresses your source code as machine instructions the interpreter can understand. In this talk we\u2019ll see what role it plays in executing Python programs, learn to read it with the `dis` module, and analyze it to better understand a program\u2019s performance.", - "sub_title": "What it is, how to read it, and why you should care", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@AnjanaVakil", - "id": 433, - "speakers": "Anjana Vakil", - "title": "Exploring Python Bytecode", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Do you ever wonder what your simple, beautiful Python code looks like to the interpreter? Are you starting to get curious about those `.pyc` files that always pop up in your project, and you always ignore? Would you like to start investigating your Python code's performance, and learn why some programs you write run faster than others, even if the code looks more or less the same? Have you simply fallen so completely in love with Python that you're ready to peer deep inside its soul?\r\n\r\nIf you, like me, answered \"yes\" to any of these questions, join me in an illuminating adventure into the world of Python bytecode! Bytecode is the \"intermediate language\" that expresses your Python source code as machine instructions the interpreter (specifically CPython, the \"standard\" interpreter) can understand. Together we'll investigate what that means, and what role bytecode plays in the execution of a Python program. We'll discover how we simple humans can read this machine language using the `dis` module, and inspect the bytecode for some simple programs. We'll learn the meaning of a few instructions that often appear in our bytecode, and we'll find out how to learn the rest. Finally, we'll use bytecode to understand why a piece of Python code runs faster if we put it inside of a function.\r\n\r\nWhen you go home, you'll be able to use bytecode to get a deeper understanding of your Python code and its performance. The adventure simply starts here; where it ends is up to you!\r\n\r\n" - ], - "abstract_extra": "Approximate timeline (30 minute talk):\r\n\r\n - :00 - Hello: Speaker intro. Gauge audience experience with bytecode. (1 min.)\r\n - :01 - What does the interpreter do? What is bytecode? What are .pyc files? (5 min.)\r\n - :06 - The dis module: What is it for? What objects can it be used on? How? (3 min.)\r\n - :09 - Understanding bytecode: Examples. What does each column mean? What are some common opcodes? (10 min.)\r\n - :19 - Case study: Python code runs faster inside of a function; different operations in the bytecode let us understand the performance difference (5 min.)\r\n - :24 - Further resources (1 min.)\r\n - :25 - Q&A (5 min.)\r\n\r\nAs far as I can tell, the last time a talk on this subject was given at EuroPython, it was by Larry Hastings in 2013 [(abstract and video )][1]. My talk will differ from his in that:\r\n\r\n - It will be only a 30-minute introduction\r\n - It will be accessible even to beginners\r\n - It will provide motivation to learn about bytecode even if you\u2019re not (planning to be) a CPython core developer\r\n - It will only cover disassembling CPython bytecode using the `dis` module\r\n\r\nI haven't given a talk at EuroPython or another Python conference before, but I have public speaking experience in the form of several talks at academic conferences, on subjects related to software and research for computational linguistics. A list of my previous talks (with links to slides) is available at [ https://vakila.github.io/talks/][2]. \r\n\r\nIn December 2015 I gave a lightning talk on this subject to an audience of approximately 50 developers at the Recurse Center [(https://www.recurse.com/)][3]; unfortunately the talk was not recorded and did not use slides.\r\n\r\nIf you have any questions, need clarification, or have any other feedback on this proposal, please do get in touch. I\u2019m best reached by email, but I will be on holiday with limited internet access from February 29 to March 7.\r\n\r\n [1]: https://ep2013.europython.eu/conference/talks/all-singing-all-dancing-python-bytecode\r\n [2]: https://vakila.github.io/talks/\r\n [3]: https://www.recurse.com/", - "tag_categories": [ - "Python", - "Python" - ], - "emails": "anjanavakil@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/exploring-python-bytecode", - "admin_type": "", - "companies": "Mozilla" - }, - "494": { - "abstract_short": "Learn how to use the new async/await language feature to write asynchronous code in Python and [Cython][1]. See how to benefit from the excellent low-level features that Cython provides to speed up or parallelise your code, interface natively with external C/C++ code, and achieve better responsiveness and lower latency also in mostly I/O bound applications.\r\n\r\n [1]: http://cython.org/", - "sub_title": "How to simply get more out of your async applications with Cython", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 494, - "speakers": "Stefan Behnel", - "title": "Fast Async Code with Cython and AsyncIO", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Cython", - "ASYNC / Concurreny", - "Web Track", - "C-Languages", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Python has recently seen a fresh development boost around asynchronous applications, triggered by the addition of the asyncio library and the new async/await language features in Python 3.5, but coming from a world of well established tools like [Twisted][2] and [Tornado][3]. The [Cython][1] compiler, which compiles Python code to C, has accompanied and influenced this development. It provides full language support for async/await under all Python versions starting from 2.6, as well as native interoperability with existing Python code and the new Python coroutines in Python 3.5.\r\n\r\nBenchmarks show that, while fully compatible, Cython compiled coroutines perform about 2-3x better than the same code executed in Python, but they additionally allow to interface natively with external C/C++ code, release the GIL, do parallel computation, and much more. All of this extends the applicable zone for asynchronous applications dramatically and can lead to better responsiveness and lower latency also for mostly I/O bound applications.\r\n\r\nThis joined talk by an async I/O expert and one of the Cython core developers explains how to write code with async/await in Python and Cython, and shows how to benefit from the excellent low-level features that Cython provides on top of Python.\r\n\r\n [1]: http://cython.org/\r\n [2]: https://twistedmatrix.com/\r\n [3]: http://www.tornadoweb.org/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Programming", - ">>> Suggested Track", - "Other Programming Languages", - "Python" - ], - "emails": "pycon@behnel.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/fast-async-code-with-cython-and-asyncio", - "admin_type": "", - "companies": "Skoobe" - }, - "522": { - "abstract_short": "The Python language is hard to optimize. Let's see how guards checked at runtime allows to implement new optimizations without breaking the Python semantic.", - "sub_title": "New exciting optimizations projects are coming into the next 3.6 release of CPython!", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@VictorStinner", - "id": 522, - "speakers": "Victor Stinner", - "title": "FAT Python: a new static optimizer for Python 3.6", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Code Analysis", - "CPython", - "Compiler and Interpreters" - ], - "abstract_long": [ - "(Almost) everything in Python is mutable which makes Python a language very difficult to optimize. Most optimizations rely on assumptions, for example that builtin functions are not replaced. Optimizing Python requires a trigger to disable optimization when an assumption is no more true. FAT Python exactly does that with guards checked at runtime. For example, an optimization relying on the builtin len() function is disabled when the function is replaced.\r\n\r\nGuards allows to implement various optimizations. Examples: loop unrolling (duplicate the loop body), constant folding (propagates constants), copy builtins to constants, remove unused local variables, etc.\r\n\r\nFAT Python implements guards and an optimizer rewriting the Abstract Syntax Tree (AST). The optimizer is implemented in Python so it's easy to enhance it and implement new optimizations.\r\n\r\nFAT Python uses a static optimizer, it is less powerful than a JIT compiler like PyPy with tracing, but it was written to be integrated into CPython.\r\n\r\nI wrote 3 PEP (509, 510, 511) targeting Python 3.6. Some changes to support FAT Python have already been merged into Python 3.6.\r\n\r\nWe will also see other pending patches to optimize CPython core, and the bytecode project which allows to modify bytecode, it also includes a peephole optimizer written in pure Python.\r\n\r\nLinks:\r\n\r\n* http://faster-cpython.readthedocs.org/fat_python.html\r\n* http://fatoptimizer.readthedocs.org/\r\n* http://bytecode.readthedocs.org/", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Programming", - "Programming", - "Python", - "Python" - ], - "emails": "victor.stinner@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/fat-python-a-new-static-optimizer-for-python-36", - "admin_type": "", - "companies": "Red Hat" - }, - "718": { - "abstract_short": "FBTFTP: facebook's opensource framework for creating dynamic TFTP servers in Python3.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@pallotron", - "id": 718, - "speakers": "Angelo Failla", - "title": "FBTFTP: Facebook's open source python3 framework for dynamic TFTP servers.", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Python 3", - "System Architecture", - "Infrastructure", - "Open-Source", - "Scaling" - ], - "abstract_long": [ - "TFTP was first standardized in '81 (same year I was born!) and one of its primary uses is in the early stage of network booting. TFTP is very simple to implement, and one of the reasons it is still in use is that its small footprint allows engineers to fit the code into very low resource, single board computers, system-on-a-chip implementations and mainboard chipsets, in the case of modern hardware.\r\n\r\nIt is therefore a crucial protocol deployed in almost every data center environment. It is used, together with DHCP, to chain load Network Boot Programs (NBPs), like Grub2 and iPXE. They allow machines to bootstrap themselves and install operating systems off of the network, downloading kernels and initrds via HTTP and starting them up.\r\n\r\nAt Facebook, we have been using the standard in.tftpd daemon for years, however, we started to reach its limitations.\r\nLimitations that were partially due to our scale and the way TFTP was deployed in our infrastructure, but also to the protocol specifications based on requirements from the 80's.\r\n\r\nTo address those limitations we ended up writing our own framework for creating dynamic TFTP servers in Python3, and we decided to open source it.\r\n\r\nI will take you thru the framework and the features it offers. I'll discuss the specific problems that motivated us to create it. We will look at practical examples of how touse it, along with a little code, to build your own server that are tailored to your own infra needs.", - "", - "", - "" - ], - "abstract_extra": "Previous talks I have given can be found http://lanyrd.com/profile/pallotron/sessions/", - "tag_categories": [ - "Python", - "DevOps", - "DevOps", - "Open Source", - "DevOps" - ], - "emails": "pallotron@fb.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/fbtftp-facebooks-python3-framework-for-tftp-servers", - "admin_type": "", - "companies": "Facebook Ireland" - }, - "569": { - "abstract_short": "Sometimes it's hard to decide when a something is really done or cannot be improved further. \r\n**Game theory** can help you to make complicated decisions whenever you encounter flow problems.", - "sub_title": "Solving Flow Problems with Game Theory", - "timerange": "2016-07-20 14:00:00, 2016-07-20 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@hendorf", - "id": 569, - "speakers": "Alexander Hendorf", - "title": "Game Theory to the Rescue When Hard Decisions Are to Be Made", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Use Case", - "Business Track" - ], - "abstract_long": [ - "Sometimes it's hard to decide when a something is really done or cannot be improved further. \r\n**Game theory** can help you to make complicated decisions whenever you encounter flow problems.\r\n\r\nGame theory is \"the study of mathematical models of conflict and cooperation between intelligent rational decision-makers.\" \r\n\r\nIn our use case we had to match data for accounting: - the data was not always clean but we had some extra tools at hand and a complex system to make good guesses. Nevertheless it was hard to decide when to give up, some records were just not processable.\r\nFinally we used Game theory to make the decision.\r\n\r\nhttps://en.wikipedia.org/wiki/Game_theory\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "hendorf@opotoc.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/game-theory-to-the-rescue-when-hard-decisions-are-to-be-made", - "admin_type": "", - "companies": "K\u00f6nigsweg GmbH" - }, - "499": { - "abstract_short": "Airflow (https://github.com/airbnb/airflow) is an open source Python package from Airbnb to control your workflows.\r\n\r\nThis talk will explain the concepts behind Airflow, demonstrating how to define your own workflows in Python code and how to extend the functionality with new task operators and UI blueprints by developing your own plugins. You'll also get to hear about our experiences at Blue Yonder, using this tool in real-world scenarios.", - "sub_title": "", - "timerange": "2016-07-20 15:45:00, 2016-07-20 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@ctrebing", - "id": 499, - "speakers": "Christian Trebing", - "title": "Get in control of your workflows with Airflow", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Architecture", - "Best Practice" - ], - "abstract_long": [ - "Whenever you work with data, sooner or later you stumble across the definition of your workflows. At what point should you process your customer's data? What subsequent steps are necessary? And what went wrong with your data processing last Saturday night?\r\n\r\nAt Blue Yonder we use Airflow (https://github.com/airbnb/airflow), an open source Python package from Airbnb to solve these problems. It can be extended with new functionality by developing plugins in Python, without the need to fork the repo. With Airflow, we define workflows as directed acyclic graphs and get a shiny UI for free. Airflow comes with some task operators which can be used out of the box to complete certain tasks. For more specific cases, tasks can be developed by the end user. Best of all: even the configuration is done completely in Python!\r\n\r\nThis talk will explain the concepts behind Airflow, demonstrating how to define your own workflows in Python code and how to extend the functionality with new task operators and UI blueprints. You'll also get to hear about our experiences using this tool in real-world scenarios." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases" - ], - "emails": "christian.trebing@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/get-in-control-of-your-workflows-with-airflow", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "383": { - "abstract_short": "To get real time insight into your running applications you need to instrument them and collect metrics: count events, measure times, expose numbers. Sadly this important aspect of development was a patchwork of half-integrated solutions for years. Prometheus changed that and this talk will walk you through instrumenting your apps and servers, building dashboards, and monitoring using metrics.", - "sub_title": "How Prometheus Can Unify Your Metrics", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@hynek", - "id": 383, - "speakers": "Hynek Schlawack", - "title": "Get Instrumented!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Performance", - "Best Practice", - "Operations", - "DevOps general", - "Use Case" - ], - "abstract_long": [ - "Metrics are highly superior to logging in regards of understanding the past, presence, and future of your applications and systems. They are cheap to gather (just increment a number!) but setting up a metrics system to collect and store them is a major task.\r\n\r\nYou may have heard of statsd, Riemann, Graphite, InfluxDB, or OpenTSB. They all look promising but on a closer look it\u2019s apparent that some of those solutions are straight-out flawed and others are hard to integrate with each other or even to get up and running.\r\n\r\nThen came Prometheus and gave us independence of UDP, no complex math in your application, multi-dimensional data by adding labels to values (no more server names in your metric names!), baked in monitoring capabilities, integration with many common systems, and official clients for all major programming languages. In short: a *unified* way to gather, process, and present metrics.\r\n\r\nThis talk will:\r\n\r\n1. explain why you want to collect metrics,\r\n1. give an overview of the problems with existing solutions,\r\n1. try to convince you that Prometheus may be what you\u2019ve been waiting for,\r\n1. teach how to impress your co-workers with beautiful graphs and intelligent monitoring by putting a fully instrumented Python application into production,\r\n1. and finally give you pointers on how to migrate an existing metrics infrastructure to Prometheus *or* how to integrate Prometheus therein.\r\n", - "", - "", - "" - ], - "abstract_extra": "# Notes\r\n\r\nLast year I spoke about metrics and logging in general. People approached me afterwards expressing interest in metrics but felt lost. And truth to be told, back then the metrics landscape was not very good.\r\n\r\nThe rise of [Prometheus](http://prometheus.io) with decent Python integration changed that considerably. It\u2019s possible to have one coherent metrics platform for both system and app metrics (in various programming languages) and even get monitoring for free.\r\n\r\nTherefore, as a follow-up, I want to do this kind-of case study on how I\u2019ve harmonized our metrics. The talk will **not** build on the older one though.\r\n\r\nThe key idea is to start from nothing and ending up with a well-instrumented system including monitoring. I don\u2019t believe there\u2019s ever been a comparable talk.\r\n\r\n# Technical Aptitude\r\n\r\nI\u2019ve implemented most of [Variomedia](http://www.variomedia.de)\u2019s metrics infrastructure using Graphite and later moved it to Prometheus. Therefore I know both sides of the coin. I\u2019m also working on the [asyncio/Twisted integration](https://github.com/hynek/prometheus_async/) for the Prometheus Python client.\r\n\r\nIn general OSS terms, I\u2019m a PSF fellow, a dormant CPython core dev, an active Twisted core dev, help out in way too many projects, and have a fair share of [own projects](https://github.com/hynek/) too.\r\n\r\n\r\n# Speaking Experience\r\n\r\nThis talk has been [accepted](https://us.pycon.org/2016/schedule/presentation/1601/) to PyCon US. People already [expressed their hopes](https://twitter.com/d0ugal/status/695678965529374720) that I submit it to EP too.\r\n\r\nOther than that, I\u2019ve spoken at the past three PyCon US ([deployments](https://hynek.me/talks/python-deployments/), [TLS](https://hynek.me/talks/tls/), and [Loggging/Metrics](https://hynek.me/talks/beyond-grep/)), the past three EuroPythons (same), PyCon Russia 2014 (TLS, invited speaker), PyCon PL 2014 (TLS, invited speaker), PiterPy 2015 (Logging/Metrics, invited speaker), PyCon JP 2015 (Logging/Metrics, keynote). From what I gather from the feedback and buzz, I think it\u2019s fair to say that my talks have been well-received so far. Especially because I try to make them both informative *and* entertaining at once.\r\n\r\nI put a *lot* of effort into my talks: I start at least three months prior to the conference and work, polish, and practice until EP. Therefore I\u2019m hopeful to deliver another popular talk. Of course, there will be a accompanying page again like in the previous years.\r\n\r\n# Preliminary Outline\r\n\r\n1. Prometheus\r\n\t- short history\r\n\t- philosophy\r\n\t\t- push vs. pull\r\n\t\t- simplest math in-app\r\n\t- why no statsd/Graphite?\r\n\t\t- UDP\r\n\t\t\t- more load = more packets\r\n\t\t\t- lots of load = lost packets\r\n\t\t- one-dimensional data (e.g. `app.server1.process5.request_time` instead of `app.request_time` with tags/labels with metadata)\r\n\t- presentation of result: beautiful dashboard & working monitoring\r\n1. System Metrics\r\n\t- `node_exporter` for native system metrics\r\n\t- examples of other popular exporters like nginx\r\n\t- `collectd_exporter` and `graphite_exporter` as bridges while transitioning\r\n1. Instrumenting Your App [*concrete* examples]\r\n\t- general considerations\r\n\t\t- what to measure\r\n\t\t- how to avoid code duplication\r\n\t\t- protecting your exposed metrics\r\n\t- example: long-running web app (simple pyramid or flask app with DB & caching)\r\n\t- example: batch job (e.g. a backup)\r\n\t- example: asyncio (simple echo server or something similar)\r\n\t- example: Twisted (same)\r\n\t- opaque cloud environments\r\n\t\t- how does heroku fit in?\r\n1. Visualisation\r\n\t- building queries in the integrated graph browser\r\n\t- Grafana\r\n\t\t- building beautiful and useful dashboards\r\n\t\t- correlating system metrics with app metrics\r\n1. Monitoring\r\n\t- defining alerts\r\n\t- integration with 3rd parties (e.g. PagerDuty, nagios)\r\n1. Next Steps\r\n\t- how to fully automate metrics endpoint discovery (e.g. consul)\r\n\t- long term metrics storage", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "DevOps", - "DevOps", - "Best Practice and Use Cases" - ], - "emails": "schlawack@variomedia.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/get-instrumented", - "admin_type": "", - "companies": "Variomedia AG" - }, - "672": { - "abstract_short": "A side-by-side walkthrough of basic Go syntax and semantics compared to Python.", - "sub_title": "A side-by-side walkthrough of basic Go syntax and semantics compared to Python", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@STajbakhsh", - "id": 672, - "speakers": "Shahriar Tajbakhsh", - "title": "Go for Python Programmers", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python general", - "Data Structures", - "Programming", - "Go-Lang" - ], - "abstract_long": [ - "A side-by-side walkthrough of basic Go syntax and semantics compared to Python." - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Programming", - "Programming", - "Other Programming Languages" - ], - "emails": "sh.tajbakhsh@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/go-for-python-programmers", - "admin_type": "", - "companies": "Osper" - }, - "626": { - "abstract_short": "Grocker is a Docker build chain for Python. It transforms your Python package into a self-contained Docker image which can be easily deployed in a Docker infrastructure. Grocker also adds a Docker entry point to easily start your application.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 626, - "speakers": "Fabien Bochu", - "title": "Grocker, a Python build chain for Docker", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Docker" - ], - "abstract_long": [ - "At Polyconseil, we build Paris electric car sharing service: Autolib'. This system is based on many services developed using web technologies, Django and our own libraries to handle business logic.\r\n\r\nPackaging is already a difficult problem, deploying large Python projects is even more difficult. When deploying on a live and user-centric system like Autolib', you cannot rely on Pip and external PyPI servers which might become unavailable and are beyond your control. In the beginning we used classic Debian packaging: it was a maintenance hell. It took hours to build our packages and update their metadata to match our Python packages. So we switched to Docker.\r\n\r\nDocker allows us to have a unique item that is deployed in production systems: code updates are now atomic and deterministic! But before deploying the Docker image, you need to build it. That's where Grocker comes in.\r\n\r\nGrocker is a Docker build chain for Python. It will transform your Python package into a self-contained Docker image which can be easily deployed in a Docker Infrastructure. Grocker also adds a Docker entry point to easily start your application.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "DevOps" - ], - "emails": "fabien.bochu@polyconseil.fr", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/grocker-a-python-build-chain-for-docker", - "admin_type": "", - "companies": "Polyconseil" - }, - "463": { - "abstract_short": "El objetivo de la charla ser\u00eda mostrar las herramientas que disponemos dentro de la propia API de Python y librer\u00edas de terceros para desarrollar nuestras propias herramientas que permitan realizar pruebas de seguridad y de pentesting de las aplicaciones.", - "sub_title": "Pentesting con python", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@jmortegac", - "id": 463, - "speakers": "Jose Manuel Ortega", - "title": "Hacking \u00e9tico con herramientas Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Security", - "Privacy", - "Science Track", - "Development", - "Cryptography" - ], - "abstract_long": [ - "Python se ha convertido en el lenguaje m\u00e1s usado para desarrollar herramientas dentro del \u00e1mbito de la seguridad.\r\nMuchas de las herramientas que podemos encontrar hoy en d\u00eda como esc\u00e1ner de puertos, an\u00e1lisis de vulnerabilidades, ataques por fuerza bruta y hacking de passwords, se han escrito en este lenguaje ,adem\u00e1s de ofrecer un ecosistema de herramientas para realizar pruebas de seguridad y de pentesting de aplicaciones. \r\n\r\nEntre los puntos a tratar podr\u00edamos destacar: \r\n\r\n - **Introducir Python como lenguaje de desarrollo de herramientas de seguridad**\r\n - **Introducir librer\u00edas para obtener informaci\u00f3n de nuestro objetivo como Shodan,pygeocoder,pygeoip**\r\n - **An\u00e1lisis y extracci\u00f3n de metadatos en Python en im\u00e1genes y documentos** \r\n - **An\u00e1lisis de puertos con herramientas como python-nmap**\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Comentar\u00e9 algunas de las herramientas que podemos encontrar en http://www.pythonsecurity.org/libs y como demo pr\u00e1ctica mostrar\u00e9 una herramienta de pentesting creada desde cero con algunos de los m\u00f3dulos que comentar\u00e9. \r\n\r\nHe impartido algunas charlas sobre seguridad en algunas conferencias.\r\nLas presentaciones de las charlas que he impartido se pueden ver en:\r\nhttps://speakerdeck.com/jmortega", - "tag_categories": [ - "Security", - "Security", - ">>> Suggested Track", - "Programming", - "Security" - ], - "emails": "jmoc25@gmail.com", - "language": "Spanish", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/hacking-etico-con-herramientas-python", - "admin_type": "", - "companies": "" - }, - "456": { - "abstract_short": "If you have ever happened to need to deal with GPS data in Python you may have felt a bit lost. This talk presents libraries starting from basic reading and writing GPS tracks in the GPS Exchange Format to adding missing elevation information. Also visualisation of tracks on OpenStreetmap data with interactive plots in Jupyter notebooks is covered. Additionally common algorithms for GPS like Douglas-Peucker and Kalman filter are explained.", - "sub_title": "Reading, writing, handling and visualizing GPS data", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@FlorianWilhelm", - "id": 456, - "speakers": "Florian Wilhelm", - "title": "Handling GPS Data with Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Science", - "Jupyter/iPython Notebook", - "Sensors" - ], - "abstract_long": [ - "If you have ever happened to need to deal with GPS data in Python you may have felt a bit lost. There are many libraries at various states of maturity and scope. Finding a place to start and to actually work with the GPS data might not be as easy and obvious as you might expect from other Python domains. \r\nInspired from my own experiences of dealing with GPS data in Python, I want to give an overview of some useful libraries. From basic reading and writing GPS tracks in the GPS Exchange Format with the help of gpxpy to adding missing elevation information with srtm.py. Additionally, I will cover mapping and visualising tracks on OpenStreetmap with mplleaflet that even supports interactive plots in a Jupyter notebook.\r\nBesides the tooling, I will also demonstrate and explain common algorithms like Douglas-Peucker to simplify a track and the famous Kalman filters for smoothing. For both algorithms I will give an intuition about how they work as well as their basic mathematical concepts. Especially the Kalman filter that is used for all kinds of sensor, not only GPS, has the reputation of being hard to understand. Still, its concept is really easy and quite comprehensible as I will also demonstrate by presenting an implementation in Python with the help of Numpy and Scipy. My presentation will make heavy use of the Jupyter notebook which is a wonderful tool perfectly suited for experimenting and learning.\r\n", - "", - "", - "" - ], - "abstract_extra": "Hi there,\r\n\r\nyou can find more information about me on the [homepage][1]. There you can also find the talks I have held before at EuroPython 2015/2014 etc. I submitted this additional talk if you find my first talk [Kalman and Bayesian Filters][2] maybe too technical or too much focused on mathematics. This talk will be more practical and Python programming oriented.\r\nI am looking forward to EuroPython 2016 in Bilbao!\r\n\r\nBest regards from Cologne,\r\nFlorian\r\n\r\n [1]: http://www.florianwilhelm.info/\r\n [2]: https://ep2016.europython.eu/conference/talks/kalman-and-bayesian-filters-in-python\r\n", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Hardware" - ], - "emails": "florian.wilhelm@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/handling-gps-data-with-python", - "admin_type": "", - "companies": "inovex" - }, - "726": { - "abstract_short": "Scaling a project to a worldwide scale with the same performance and availability in every region using Python isn\u2019t easy, but with the right mindset and tools it\u2019s a very viable target.", - "sub_title": "", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 726, - "speakers": "John Kraal", - "title": "High Availability Scaling with Share Nothing Architecture", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Security", - "Data Structures", - "Architecture", - "Distributed Systems", - "Scaling" - ], - "abstract_long": [ - "Scaling a project to a worldwide scale with the same performance and availability in every region using Python isn\u2019t easy, but with the right mindset and tools it\u2019s a very viable target. We will discuss methods of delivering software, with automated scaling systems, building units out of your project to manage separately and how to reliably and securely distribute data to separate clusters, and how we have achieved this with the use of Celery, Redis, Databases, Protobuf and other modern tools, whilst making sure to highlight our pitfalls and successes" - ], - "abstract_extra": "", - "tag_categories": [ - "Security", - "Programming", - "Programming", - "DevOps", - "DevOps" - ], - "emails": "john@getbynder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/high-availability-scaling-with-share-nothing-architecture", - "admin_type": "", - "companies": "Bynder" - }, - "546": { - "abstract_short": "The talk will cover new async/await syntax in Python, asyncio library and ecosystem around it, and ways to use them for creating high performance servers. It will explain how to build custom event loops for asyncio, with an example of using the libuv library with Cython to achieve 2-3x performance boost over vanilla asyncio. ", - "sub_title": "Boosting asyncio performance 2x", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@1st1", - "id": 546, - "speakers": "Yury Selivanov", - "title": "High Performance Networking in Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Performance", - "Architecture", - "Web Track", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "The talk will start with an overview of async/await syntax introduced with PEP 492 in Python 3.5. We'll go through asynchronous context managers and iteration protocols it introduces. I'll briefly explain how the feature is implemented in CPython core.\r\n\r\nThen we'll explore asyncio design. I'll briefly cover event loop, policies, transports, protocols and streams abstractions. I'll explain that event loops are pluggable, which really makes asyncio a universal framework.\r\n\r\nWe'll cover libuv - a high performance networking library that drives NodeJS. I'll highlight where it's similar to asyncio and how it's different.\r\n\r\nIn the final part of the talk I'll explain how to make an asyncio compatible event loop on top of libuv. I'll showcase Cython, which is an amazing tool for tasks like this.\r\n\r\nFinally, I'll share some ideas on how we can further improve the performance of asyncio and networking in Python, and what are the challenges that we will face.\r\n\r\n\r\n**Objectives:**\r\n\r\n1. Deeper understanding of async/await in Python and why it's important. \r\n2. Deeper understanding of asyncio architecture and protocols. \r\n3. How to improve asyncio performance by implementing custom event loops.\r\n4. Show that it's easy to integrate existing complex & low level libraries with Cython. \r\n5. Some perspective on how Python may evolve wrt networking.\r\n\r\n" - ], - "abstract_extra": "I'm an active maintainer of asyncio module (along with Guido van Rossum and Victor Stinner). I think I have a rather unique inner-view at how asyncio works and where it will evolve in the coming years.\r\n\r\nI'm also the author and implementor of PEP 492 -- async/await syntax in Python 3.5. I'm also working on a new PEP to add asynchronous generators in CPython 3.6. I think it might be interesting for people to ask me some interesting questions about async/await and asynchronous Python programming in general.", - "tag_categories": [ - "Python", - "Programming", - "Programming", - ">>> Suggested Track", - "Programming" - ], - "emails": "yury@magic.io", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/high-performance-networking-in-python", - "admin_type": "", - "companies": "MagicStack" - }, - "744": { - "abstract_short": "This talk will give an overview about the Intel\u00ae Distribution for Python which delivers high performance acceleration of Python code on Intel processors for scientific computing, data analytics, and machine learning.\r\n", - "sub_title": "Development of high performance Python code for machine learning, analytics and HPC", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 744, - "speakers": "Ralph de Wargny", - "title": "High Performance Python on Intel Many-Core Architecture", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "This talk will give an overview about the Intel\u00ae Distribution for Python which delivers high performance acceleration of Python code on Intel processors for scientific computing, data analytics, and machine learning. \r\nIn the first part of the talk, we'll look at the architecture of the latest Intel processors, including the brand new Intel Xeon Phi, also known as Knights Landing, a many-core processor, which was just released end of June 2016. \r\nIn the second part, we will see which tools and libraries are available from Intel Software to enable high performance Python code on multi-core and many-core processors.", - "", - "", - "" - ], - "abstract_extra": "...", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "ralph.wargny@intel.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/high-performance-python-on-intel-architecture", - "admin_type": "", - "companies": "Intel Software" - }, - "738": { - "abstract_short": "This talk is a case-study of how Python (Pandas, NumPy, SciKit-learn) can be implemented to identify the influence of the potential drivers of a decline in size of Atlantic herring populations using Gradient Boosting Regression Trees. \r\n\r\n", - "sub_title": "Predicting drivers of change with Gradient Boosting Regression Trees", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@", - "id": 738, - "speakers": "Olga Lyashevska", - "title": "How can machine learning help to predict changes in size of Atlantic herring ?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Science", - "Predictions", - "Case Study", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Machine-Learning" - ], - "abstract_long": [ - "A decline in size and weight of Atlantic herring in the Celtic Sea has been observed since the mid-1980\u2019s. The cause of the decline remains largely unexplained but is likely to be driven by the interactive effect of various endogenous and exogenous factors. The goal of this study is to interrogate a long time-series of biological data obtained from commercial fisheries from 1959 to 2012. We use gradient boosting regression trees to identify important variables underlying changes in growth from various potential drivers, such as: \r\n- Atlantic multidecadal oscillation;\r\n- sea surface temperature;\r\n- salinity;\r\n- wind;\r\n- zooplankton abundance;\r\n- fishing pressure.\r\nThis learning algorithm allows to quantify the influence of the potential drivers of change with the test error lower when compared to other supervised learning techniques. The predictor variables importance spectrum (feature importance) helps to identify the underlying patterns and potential tipping points while resolving the external mechanisms underlying observed changes in size and weight of herring. This analysis is a useful case-study of how Python can be implemented in academia. The outputs of the analysis are of relevance to conservation efforts and sustainable fisheries management which promotes species resistance and resilience." - ], - "abstract_extra": "This research will be presented at International Statistical Ecology Conference in Seattle on June 28 - July 1st 2016 (http://depts.washington.edu/uwconf/wordpress/isec2016/). \r\nWhereas in Seattle I will mostly focus on statistical model and ecological meaning of the findings, at EuroPython I would like to demonstrate the implementation of the analysis with Scikit-learn using IPython notebook. \r\n\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - "Case Study", - "Data Science", - "Data Science" - ], - "emails": "olga.lyashevska@gmit.ie", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-can-machine-learning-help-to-predict-changes-in-size-of-atlantic-herring", - "admin_type": "", - "companies": "Galway-Mayo Institute of Technology" - }, - "496": { - "abstract_short": "OpenStack is an infrastructure stack mostly developed in Python. In this talk, Thierry Carrez and Doug Hellmann, both Python Software Foundation fellows and OpenStack Technical Committee members, will look at the symbiotic relationship between OpenStack and Python.", - "sub_title": "", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@tcarrez, @doughellmann", - "id": 496, - "speakers": "Thierry Carrez, Doug Hellmann", - "title": "How OpenStack makes Python better (and vice-versa)", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Best Practice", - "failures/mistakes", - "Test Driven Development (TDD)", - "Development", - "OpenStack" - ], - "abstract_long": [ - "OpenStack is an open source stack that can be deployed on raw computing resources to privately or publicly present Infrastructure as a Service. It now consists of more than 4.5 million lines of code, 85% of which is Python. In this talk, Thierry Carrez and Doug Hellmann, both Python Software Foundation fellows and OpenStack Technical Committee members, will look at the symbiotic relationship between OpenStack and Python.\r\n\r\nWe'll go back in history and explain why OpenStack originally picked Python as its main language 6 years ago, and explore what does Python bring to OpenStack. We'll dive into examples of OpenStack pushing Python libraries to their limits and exposing new bugs. We'll look into the massive cloud-based continuous integration system that OpenStack uses and explain how it exposes bugs in Python libraries in the minutes after they are published to PyPI. We'll look into Python libraries that were created by the OpenStack community and libraries that the OpenStack community took over. Finally we'll expose a few best practices that Python developers can follow to get the most of this symbiotic relationship.", - "", - "", - "" - ], - "abstract_extra": "This 45-min talk would be created for EuroPython and could be made to last 30 or 60 min if that would be your preference. If selected, this talk would be co-presented by Thierry Carrez (see bio above) and Doug Hellmann.\r\n\r\nDoug has been employed to work on OpenStack full time for three years. He is a member of the Python Software Foundation, and served as its Communications Director from 2010-2012. After a year as a regular columnist for Python Magazine, he served as Editor-in-Chief from 2008-2009. Between 2007 and 2011, Doug published the popular \"Python Module of the Week\" series on his blog, and that material served as the basis for his book \"The Python Standard Library By Example\". He lives in Athens, Georgia.\r\n\r\nDoug presented at various Python conferences in the past, including PyCon in 2013 [https://us.pycon.org/2013/speaker/profile/297/][1].\r\n\r\nThierry presented OpenStack at EuroPython, back in 2011 [https://ep2013.europython.eu/conference/talks/snakes-on-a-cloud-a-presentation-of-the-openstack-project][2].\r\n\r\n [1]: https://us.pycon.org/2013/speaker/profile/297/\r\n [2]: https://ep2013.europython.eu/conference/talks/snakes-on-a-cloud-a-presentation-of-the-openstack-project\r\n", - "tag_categories": [ - "Best Practice and Use Cases", - "Best Practice and Use Cases", - "Testing", - "Programming", - "DevOps" - ], - "emails": "thierry.carrez@gmail.com, doug@doughellmann.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-openstack-makes-python-better-and-vice-versa", - "admin_type": "", - "companies": "OpenStack Foundation, Red Hat" - }, - "435": { - "abstract_short": "The popular board game of Risk has many fans around the world. \r\nUsing a Python-based simulation of the game, we try to answer several questions that went through the minds of many players:\r\n- Which missions are easiest to attain?\r\n- Does your starting position influence your chances?\r\n- Which regions are easiest to defend?", - "sub_title": "analyzing the game of Risk with Python", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 435, - "speakers": "Rogier van der Geer", - "title": "How to conquer the world", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Algorithms", - "Predictions", - "Performance", - "Programming" - ], - "abstract_long": [ - "The popular board game of Risk has many fans around the world. \r\nUsing a Python-based simulation of the game, we try to answer several questions that went through the minds of many players;\r\n\r\n- Which missions are easiest to attain?\r\n- Does your starting position influence your chances?\r\n- Which regions are easiest to defend?\r\n\r\nDuring this talk we'll explain what genetic algorithms are and we'll explain an entertaining use-case: how to win at popular board games. During the talk we'll demo how object oriented patterns help with the design and implementation of these algorithms. We'll also demonstrate a library that allows users to push their own risk bots into a game and battle it out on.", - "", - "", - "" - ], - "abstract_extra": "Before joining GoDataDriven, Rogier obtained a PhD in particle physics. Rogier gained hands-on experience with handling enormous quantities of data and processing, or 'charming', them into a manageable format before performing complicated analyses. After his PhD he exchanged physical science for data science at GoDataDriven, where he is now putting his skills to use on more business-driven problems. He likes applying data science to anything; be it his daily commute, improving his photography skills or the contents of his lunch box.", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Programming", - "Programming" - ], - "emails": "rogiervandergeer@godatadriven.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/a-genetic-algorithm-to-play-the-game-of-risk", - "admin_type": "", - "companies": "GoDataDriven" - }, - "633": { - "abstract_short": "Optimization in Python (also known as mathematical programming) can be performed by minimization (or maximization) of an objective function within a model that can include discrete variables subject to a set of constrains. At this talk, chemical engineering students of the University of Alicante will introduce the audience to the possibilities of optimization, presenting Pyomo and showing real world examples such as how to improve your diet and save money at fast food restaurants.\r\n\r\n", - "sub_title": "Mathematical optimization with Pyomo or how to solve LP, NLP and MILP problems with Python", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@zuriich92, @DanielDomeneL", - "id": 633, - "speakers": "Zuria Bauer, Daniel Domene L\u00f3pez", - "title": "How to improve your diet and save money with Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Science", - "Beginners", - "Jupyter/iPython Notebook", - "Engineering", - "Science Track" - ], - "abstract_long": [ - "Process optimization in industry has become essential in order to maximize the resources available and reduce energy consumption. \r\nOptimization problems become interesting when dealing with restrictions (linear or nonlinear) and integer variables (modeling the discrete decisions). Python ecosystem presents different libraries to solve optimization problems, some of them are CVXOpt, CVXPy, PulP, OpenOpt, or Pyomo. \r\nAmong them, Pyomo results interesting because:\r\n\r\n- It can be used for Mathematical modeling in Python similarly to AMPL (and GAMS)\r\n- It communicates with the main solvers used in this field such as GLPK, Gurobi, CPLEX, CBC and PICO\r\n- It's free and open source Python library (BSD license), being developed by Sandia National Laboratories, USA.\r\n- It supports Python 3 and it is easy to install.\r\n\r\nThe talk will be divided in three parts:\r\n\r\n1. _Introduction to Mathematical Programming/Optimization (15 min):_ visual introduction to optimization concepts including restrictions and non linearties (linear Programming, Nonlinear Programming, ILP, MIP, MINLP). \r\n\r\n2. _Introduction to the Pyomo sintax and a quick note for the installation (20 min):_ showing how to improve their diet and save money when ordering food in fast food restaurants.\r\n\t\r\n3. _Optimization problems in engineering (10 min):_ showing more advanced optimization examples that include decision variables.\r\n\r\n ", - "", - "", - "" - ], - "abstract_extra": "The talk will be oriented to _beginners_ and will be given by _Chemical Engineering students_. Slides, Jupyter Notebooks will be available on [GitHub][1]\r\n\r\n [1]: https://github.com/CAChemE/Mathematical-Optimization/\r\n", - "tag_categories": [ - "Sciences", - "Educational", - "Python", - "Everything Else", - ">>> Suggested Track" - ], - "emails": "zuriich92@gmail.com, daniel.domene.lopez2@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/how-to-improve-your-diet-and-save-money-with-python", - "admin_type": "", - "companies": ", CAChemE" - }, - "401": { - "abstract_short": "This talk is for people who have a lot of floating numbers inside\r\nPostgreSQL tables. I will bring as an example my personal experience\r\nwith a scientific project that used PostgreSQL as storage for a rather\r\ncomplex set of composite multidimensional arrays and ran into all\r\nsorts of performances issues, both in reading and writing the data. I\r\nwill explain how I solved all that by dropping the database in favor\r\nof an HDF5 file, while keeping the application running and the users\r\nhappy.\r\n", - "sub_title": "Refactoring a distributed parallel earthquake simulation engine", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@", - "id": 401, - "speakers": "Michele Simionato", - "title": "How to migrate from PostgreSQL to HDF5 and live happily ever after", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Algorithms", - "Big Data", - "Architecture", - "Science Track", - "Testing" - ], - "abstract_long": [ - "This talk is for people who have a lot of floating numbers inside\r\nPostgreSQL tables and have problems with that. I will narrate my\r\nexperience with a scientific project that used PostgreSQL as storage\r\nfor a rather complex set of composite multidimensional arrays and ran\r\ninto all sorts of performances issues, both in reading and writing the\r\ndata. I will discuss the issues and the approach that was taken first\r\nto mitigate them (unsuccessfully) and then to remove them\r\n(successfully) by a complete rethinking of the underlying architecture\r\nand eventually the removal of the database. I will talk about the\r\nmigration strategies that were employed in the transition period and\r\nhow to live with a mixed environment of metadata in PostgreSQL and\r\ndata in an HDF5 file. I will also talk about concurrency, since the\r\nunderlying application is distributed and massively parallel, and\r\nstill it uses the purely sequential version of HDF5. Questions from\r\nthe audience are expected and welcome.\r\nThe talk is of interest to a large public, since it is mostly about\r\nmeasuring things, monitoring and testing a legacy system,\r\nmaking sure that the changes do not break the previous behavior\r\nand keeping the users happy, while internally rewriting\r\nall of the original code. And doing that in a small enough number of years!\r\n" - ], - "abstract_extra": "I am a well known Pythonista since 2002, I have spoken at the EuroPython conference several times in the past and I am also the author of the decorator module : https://pypi.python.org/pypi/decorator", - "tag_categories": [ - "Data Science", - "Data Science", - "Programming", - ">>> Suggested Track", - "Testing" - ], - "emails": "michele.simionato@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/how-to-migrate-from-postgresql-to-hdf5-and-live-happily-ever-after", - "admin_type": "", - "companies": "GEM" - }, - "737": { - "abstract_short": "This presentation show how to deploy **[Wendelin][1]**, the free software platform for Big Data & Machine Learning, using **[SlapOS][2]** , the free software hyperconverged Operating System (hOS). Written in 100% in Python, SlapOS and Wendelin, can create a complete Big Data Infraestruture with out-of-core capabilities ready to use and operate in just few hours.\r\n\r\n [1]: http://www.wedelin.io\r\n [2]: http://community.slapos.org\r\n", - "sub_title": "Provisioning from sensors to out-of-core-pydata in few minutes", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@ramonnerat", - "id": 737, - "speakers": "Rafael Monnerat", - "title": "Hyperconvergence meets BigData", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Big Data", - "Use Case", - "Open-Source", - "Deployment/Continuous Integration and Delivery", - "Configuration Management (Ansible/Fabric/Chef/...)" - ], - "abstract_long": [ - "This presentation aims to demonstrate how to use [SlapOS][1] (Hyperconverged OS) to deploy an entire Big Data Infrastrucure and show how \"data life cycle\" can be managed with [Wendelin][2] - covering ingestion, analysis, visualization and weaving it into an application.\r\n\r\nWe'll show how Wendelin and SlapOS could handle acquisition, analysis and exploitation of data, making it a potential solution for IOT scenarios where data is available and needs some logic applied before being presented as web application, possibly on a commercial basis.\r\n\r\nThe agenda of the presentation includes an introduction on SlapOS, as a tool used to deploy a wide range of different services and an introduction of Wendelin, as a tool in order to make out-of-core python applications.\r\n\r\nAfter a short introduction, we progress to show the steps to deploy SlapOS infrastructure and later to deploy Wendelin on the just deployed SlapOS, including an use case which shows SlapOS deploying a fluentd instance to ingest data to the Wendelin Database.\r\n\r\nTo conclude, we make a live demo with an Jupiter using out-of-core python to handle wav files stored on Wendelin, and a second short demo on handle computer resources consumption data.\r\n\r\n [1]: http://community.slapos.org\r\n [2]: http://www.wendelin.io/\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - "Open Source", - "DevOps", - "DevOps" - ], - "emails": "rafael@nexedi.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/hyperconvergence-meets-bigdata", - "admin_type": "", - "companies": "Nexedi" - }, - "408": { - "abstract_short": "In an era of almost-unlimited textual data, accurate sentiment analysis can be the key for determining if our products, services and communities are delighting or aggravating others. We'll take a look at the sentiment analysis landscape in Python: touching on simple libraries and approaches to try as well as more complex systems based on machine learning.", - "sub_title": "A Survey of Python Sentiment Analysis Tools", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:15:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@kjam", - "id": 408, - "speakers": "Katharine Jarmul", - "title": "I Hate You, NLP... ;)", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Natural Language Processing", - "Algorithms", - "failures/mistakes", - "Data Science", - "Machine-Learning" - ], - "abstract_long": [ - "Overview\r\n-------------\r\n\r\nThis talk aims to introduce the audience to the wide array of tools available in Python focused on sentiment analysis. It will cover basic semantic mapping, emoticon mapping as well as some of the more recent developments in applying neural networks, machine learning and deep learning to natural language processing. Participants will also learn some of the pitfalls of the different approaches and see some hands-on code for sentiment analysis.\r\n\r\nOutline\r\n-----------\r\n* NLP: then and now\r\n* Why Emotions Are Hard\r\n* Simple Analysis\r\n * TextBlob (& other available libraries)\r\n * Bag of Words\r\n * Naive Bayes\r\n* Complex Analysis\r\n * Preprocessing with word2vec\r\n * Metamind & RNLN\r\n * Optimus & CNN\r\n * TensorFlow\r\n * Watson\r\n* Live Demo\r\n* Q&A\r\n", - "", - "", - "" - ], - "abstract_extra": "I've spoken at numerous conferences in the US about Python, and have written a book on data analysis with Python for O'Reilly. NLP has always been a side / passion project for me and I've recently been able to spend more time learning about the new tools available using deep learning and neural networks. I'm hoping to share what I've learned with others from a \"survey style\" perspective (rather than as an author of one of the libraries). I hope this perspective can add a bit of fun and humor to the talk as well :D", - "tag_categories": [ - "Data Science", - "Data Science", - "Best Practice and Use Cases", - "Data Science", - "Data Science" - ], - "emails": "kjarmul@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/i-hate-you-nlp", - "admin_type": "", - "companies": "kjamistan" - }, - "458": { - "abstract_short": "El tema que nos ocupa es como implementar un identificador de sonido tipo Shazam usando t\u00e9cnicas DSP. Los puntos a seguir ser\u00e1n, implementaci\u00f3n, retos y pasos adicionales. El proyecto que nos ocupa se encuentra todav\u00eda en proceso de desarrollo (el c\u00f3digo [subido en GitHub][1]) y fue inspirado despu\u00e9s la conferencia, [Over-the-Air Audio Identification][2] en FOSDEM 2016.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@notexactlyawe", - "id": 458, - "speakers": "Cameron Macleod", - "title": "Implementaci\u00f3n de un Identificador de Sonido en Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Case Study", - "failures/mistakes", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Databases" - ], - "abstract_long": [ - "El tema que nos ocupa es como implementar un identificador de sonido tipo Shazam usando t\u00e9cnicas DSP con ayuda de unas fant\u00e1sticas bibliotecas. Los puntos a seguir ser\u00e1n, implementaci\u00f3n, retos y pasos adicionales. El proyecto que nos ocupa se encuentra todav\u00eda en proceso de desarrollo (el c\u00f3digo [subido en GitHub][1]) y fue inspirado despu\u00e9s la conferencia, [Over-the-Air Audio Identification][2] en FOSDEM 2016.\r\n\r\nLa estructura b\u00e1sica del proyecto consiste en un clasificador y un reconocedor. El clasificador toma huellas del sonido y las procesa en una forma investigable para el reconocedor que usa estas huellas para la identificaci\u00f3n y b\u00fasqueda de archivos almacenados con el fin de encontrar la semejanza mas probable. El reconocedor estar\u00e1 expuesto en un entorno API.\r\n\r\nLa conferencia intentar\u00e1 introducir el \u00e1rea de DSP a la audiencia y los conceptos que est\u00e1n detr\u00e1s aplicaciones como Shazam. Explicar\u00e9 todos las nociones incluidas en una manera sencilla.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/" - ], - "abstract_extra": "El tema es sobre un proyecto a\u00fan en curso y como resultado puede convertirse antes que lo doy en una charla sobre los fracasos del proyecto y sus lecci\u00f3nes. Preferir\u00eda dar el tema en ingl\u00e9s pero estoy dispuesto darlo en espa\u00f1ol tambi\u00e9n.", - "tag_categories": [ - "Case Study", - "Best Practice and Use Cases", - "Open Source", - "Data Science", - "Databases" - ], - "emails": "cmacleod170@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/implementacion-de-un-identificador-de-sonido-en-python", - "admin_type": "", - "companies": "Cambridge Consultants Ltd" - }, - "457": { - "abstract_short": "The talk will go over implementing a Shazam-style sound recogniser using DSP techniques and some fantastic libraries. It will cover implementation, challenges and further steps. The project is still a work in progress and the code is [available on GitHub][1]. It was inspired by the [Over-the-Air Audio Identification talk][2] at FOSDEM 2016.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/\r\n", - "sub_title": "", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@notexactlyawe", - "id": 457, - "speakers": "Cameron Macleod", - "title": "Implementing a Sound Identifier in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Case Study", - "failures/mistakes", - "Open-Source", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Databases" - ], - "abstract_long": [ - "The talk will go over the journey of implementing a Shazam-style sound recogniser using DSP techniques and some fantastic libraries. It will cover implementation, challenges and further steps. The project is still a work in progress at the time of proposal and the code is [available on GitHub][1]. It was inspired by the [Over-the-Air Audio Identification talk][2] at FOSDEM 2016.\r\n\r\nThe basic structure of the project consists a classifier that fingerprints audio and stores it in a searchable form and a recogniser that fingerprints a smaller chunk of audio and then searches the stored records to find the most suitable fit for it. The recogniser will be exposed as an API to allow for different front-ends.\r\n\r\nI will aim to introduce both the field of DSP and concepts behind applications like Shazam in a simple easy-to-understand manner. The audience will not need any prior experience in anything except Python.\r\n\r\n [1]: https://github.com/notexactlyawe/abracadabra\r\n [2]: https://fosdem.org/2016/schedule/event/audio_identification/" - ], - "abstract_extra": "As stated in the abstract, the project is still very much a work in progress and a lot has to be done. As such, the focus of the talk may turn more towards lessons learned as opposed to actual implementation closer to the time if the project turns out less successful than hoped.", - "tag_categories": [ - "Case Study", - "Best Practice and Use Cases", - "Open Source", - "Data Science", - "Databases" - ], - "emails": "cmacleod170@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/implementing-a-sound-identifier-in-python", - "admin_type": "", - "companies": "Cambridge Consultants Ltd" - }, - "654": { - "abstract_short": "EFL (Embedded Flexible Language), a deterministic parallel programming tool, may be embedded in any host language. Two versions of the EFL pre-compiler for Python were implemented. One translates EFL blocks into Python's Multiprocessing code, and the other one into DTM/MPI4PY code. EFL implementations of Parallel Programming Design Patterns will be shown, generated parallel code compared, and differences discussed. Visit flexcomp.jct.ac.il for further information. \r\n", - "sub_title": "", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@, @", - "id": 654, - "speakers": "Moshe Goldstein, david dayan", - "title": "Implementing Parallel Programming Design Patterns using EFL for Python", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Tooling", - "Multi-Processing", - "Development", - "Programming", - "Compiler and Interpreters" - ], - "abstract_long": [ - "Multi-core CPUs are abundant and utilizing them effectively requires programmers to parallelize CPU-intensive code. To facilitate this, we have developed EFL (Embedded Flexible Language), a deterministic parallel programming tool. \r\nThe parallel parts of a program are written as EFL-blocks, which are embedded into a sequential host language program. The sequential parts of the program are written in the host language, outside the EFL blocks. \r\nEFL may be embedded in any host language by writing an appropriate EFL pre-compiler. At the moment, we implemented two versions of the EFL pre-compiler. Both pre-compilers translate EFL blocks into parallel Python code - one of them generates parallel code based on Python's Multiprocessing module, and the other one generates parallel code based on the DTM/MPI4PY Python module.\r\nWe will present the principles upon which EFL is built. We will show the implementation of Parallel Programming Design Patterns using EFL's parallel programming constructs (such as parallel assignments, parallel for-loops, etc.). Using our two EFL pre-compilers we will show their translation to Python parallel code according to the Multiprocessing module as well as the DTM/MPI4PY module. The differences between code versions produced by the EFL pre-compilers will be discussed. \r\nFor further information about the EFL project and our Flexible Computation Research Laboratory, visit http://flexcomp.jct.ac.il\r\n", - "", - "", - "" - ], - "abstract_extra": "A poster titled \"EFL: An Embedded Language for Safe and Efficient Parallel Execution\" was presented at EuroPython 2014, Berlin, Germany.\r\nA poster titled \"Parallel Programming Constructs and Techniques using and Embedded Flexible Language (EFL) for Python\" was presented at EuroPython 2015, Bilbao, The Basque Country, Spain. \r\nA talk titled \"EFL: An Embedded Language for Safe and Efficient Parallel Execution\" was presented at the Intel Compiler, Architecture and Tools Conference (CATC), Haifa, Israel, 2014.\r\nA paper titled \"Flexible Algorithms: Enabling Well-defined Order-Independet Execution with an Imperative Programming Style\" was presented at the ECBS-EERC 2015, Brno, The Czech Republic, 2015 (available at pp 75-82 of the proceedings of the conference).\r\nA paper title \"EFL: Implementing and Testing an Embedded Language Which Provides Safe and Efficient Parallel Execution \" was presented at the ECBS-EERC 2015, Brno, The Czech Republic, 2015 (available at pp 83-90 of the proceedings of the conference). \r\nFor further material, including unpublished papers and technical reports, visit the website of our research lab. Also, from there you will be able to download the installation kit of our two EFL pre-compilers. \r\n", - "tag_categories": [ - "Programming", - "Programming", - "Programming", - "Programming", - "Python" - ], - "emails": "goldmosh@g.jct.ac.il, dayandav@g.jct.ac.il", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/implementing-parallel-programming-design-patterns-using-efl-for-python", - "admin_type": "", - "companies": ", Jerusalem College of Technology, HebrewUniversity" - }, - "628": { - "abstract_short": "One of the biggest differences, in the Python community, is its effort to improve diversity. I was fortunate enough to take part in nine different PyCon's. I always took note of experiences on how to improve diversity, that could be useful and replicable in my local community and would like to share at EuroPython. There are other reports, that also I would like to share, which are only beautiful stories of how Python reaches the most distant people and places you may never have imagined.", - "sub_title": "Nine Different PyCon's in Two Year's: Lessons on Diversity that I Learned", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@fmasanori, @pk_pacheco, @KatiaNakamura", - "id": 628, - "speakers": "Fernando Masanori Ashikaga, Paola Katherine Pacheco, K\u00e1tia Nakamura", - "title": "import community", - "have_tickets": [ - true, - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Community" - ], - "abstract_long": [ - "One of the biggest differences, in the Python community, in relation to other communities, is its effort to improve diversity. There is even a Diversity Statement at PSF: \"We have created this diversity statement because we believe that a diverse Python community is stronger and more vibrant. A diverse community where people treat each other with respect has more potential contributors and more sources for ideas.\" In last two years I was fortunate enough to take part in nine PyCon's in ten different countries: Namibia, UK, Japan, Brazil, Italy, Argentina, Uruguay, Germany, Canada and Spain. Some were not national conferences, but were EuroPython or PyConUS. I was coach in three Django Girls at PyCon Namibia, Argentina and Brazil. I always took note of experiences on how to improve diversity, that could be useful and replicable in my local community and would like to share at EuroPython. There are other reports that I also would like to share, which are only beautiful stories of how Python reaches the most distant people and places you may never have imagined.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Community" - ], - "emails": "fmasanori@gmail.com, pkcpweb@gmail.com, katia@kiwi.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/import-community", - "admin_type": "", - "companies": "FATEC S\u00e3o Jos\u00e9 dos Campos, Hadrons, Kiwi.com" - }, - "497": { - "abstract_short": "In this talk I will show how to build your own infrastructure-as-a-service on the example of \"Postgraas\", an open source postgres-as-a-service I wrote in python just for fun. With a simple curl request you can get your very own database, just like RDS on AWS. You will learn how easy it is to create such a remarkably useful service with hardly three hundred lines of flask, docker and some glue-code, a project for a rainy Sunday.", - "sub_title": "or how to write your very own database-as-a-service", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@sebineubauer", - "id": 497, - "speakers": "Sebastian Neubauer", - "title": "Infrastructure as Code: \"pip install\" your environment", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "PostgreSQL", - "Deployment/Continuous Integration and Delivery", - "Infrastructure", - "Docker", - "DevOps general" - ], - "abstract_long": [ - "Continuous Delivery, DevOps, Lean - all those movements have one thing in common: extending the process of software development along the whole value stream, ultimately to the customer. This simple requirement causes surprising serious difficulties on traditional operations workflows. All of a sudden, a single manual ticket to the operations team is a critical blocker in the delivery process. Therefore all parts of the infrastructure, storage, databases, identities, compute resources must be provided as a self service for the developers in order to be able to achieve this goal. What one may call \"the cloud\" (including self hosted ones like open stack) is such a successful model not least because they offer exactly this \"ticket-less\" self-service. But why should we wait for \"the cloud\" to offer what we really need? We are python developers, we are hackers!\r\n\r\nIn this talk I will show how to build your own infrastructure-as-a-service on the example of \"Postgraas\", an open source postgres-as-a-service I wrote in python just for fun. With a simple curl request you can get your very own database, just like RDS on AWS. You will learn how easy it is to create such a remarkably useful service with hardly three hundred lines of flask, docker and some glue-code, a project for a rainy Sunday. After the talk you will know how to amaze your colleagues by eliminating an annoying ticket or manual workflow with a simple flask app and some creativity.", - "", - "", - "" - ], - "abstract_extra": "My talk on last years EP:\r\nhttps://ep2015.europython.eu/conference/talks/a-pythonic-approach-to-continuous-delivery\r\n\r\nAnd maybe it wasn't even that bad, at least according to a review of that talk:\r\nhttps://tesarek.me/europython-2015\r\n\r\n> A Pythonic Approach to Continuous Delivery.\r\n> Sebastian presented CI and CD as one process of delivering value to the customer. He showed the whole process from beginning (the idea of a feature) to the end (the customer using the feature). He presented lots of useful tools that you can use but the basic idea is to start with the most lightweight but fully functional version and build on it.\r\n> We should automate as much as possible and continuously improve our automated processes.\r\n> This was the best presentation of Ci&CD I've ever seen. As to the topic, it was very explanatory and contained lots of useful tips and tricks.\r\n\r\n", - "tag_categories": [ - "Databases", - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "sebastian.neubauer@blue-yonder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/infrastructure-as-code-pip-install-your-environment", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "513": { - "abstract_short": "This talk covers the distributed architecture that Skyscanner built to solve the data challenges involved in the generation of images of all hotels in the world. Putting together a distributed system in Python, based on queues, surfing on the AWS Cloud.", - "sub_title": "How Skyscanner hotels built its image processing pipeline.", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@alevinval", - "id": 513, - "speakers": "Alex Vinyals", - "title": "Ingesting 35 million hotel images with python in the cloud.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "System Architecture", - "Big Data", - "Use Case", - "Distributed Systems" - ], - "abstract_long": [ - "This talk covers the distributed architecture that Skyscanner built to solve the data challenges involved in the generation of images of all hotels in the world. Putting together a distributed system in Python, based on queues, surfing on the AWS Cloud.\r\n\r\nOur goal? To build an incremental image processing pipeline that discards poor quality and duplicated images, scaling the final images to several sizes to optimise for mobile devices.\r\n\r\nAmong the challenges:\r\n\r\n1. Ingest all the input images that partners provide us.\r\n2. Detect and remove bad quality + duplicated images from reaching production.\r\n3. Resize all the generated images to optimise for mobile devices.\r\n4. Ensure the process scales and behaves in an incremental way.\r\n5. Ensure the whole process fits in a time constrained window.\r\n\r\nAmong the tools we used? Pillow, ImageHash, Kombu and Boto.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "Any feedback welcome if you think something is missing or could be improved. I can also answer any question you guys have.\r\n\r\nThanks.", - "tag_categories": [ - "DevOps", - "Data Science", - "Best Practice and Use Cases", - "DevOps" - ], - "emails": "alexandre.vinyals@skyscanner.net", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/ingesting-35-million-hotel-images-with-python-in-the-cloud", - "admin_type": "", - "companies": "Skyscanner" - }, - "739": { - "abstract_short": " \u201cNotebooks come alive when interactive widgets are used\u201d, but programming complex applications that rely entirely on widgets may end up being a painful and frustrating process. Shaolin is a new python project that aims to provide a framework for building interactive complex dashboards.", - "sub_title": "Introducing a new framework for interactive dashboards programming.", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@miau_db", - "id": 739, - "speakers": "Guillem Duran", - "title": "Interactive data Kung Fu with Shaolin", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Visualization", - "Jupyter/iPython Notebook", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Analytics" - ], - "abstract_long": [ - "You can read in The Project Jupyter web page that \u201cNotebooks come alive when interactive widgets are used\u201d, but programming complex applications that rely entirely on widgets may end up being a painful and frustrating process. Shaolin is a new python project that aims to provide a framework for building interactive complex dashboards.\r\n\r\nShaolin provides all the basic tools for building complex interactive data analysis applications using the pydata ecosystem. Arbitrary code can be embedded into a Dashboard -a class that works as a \u201cblack box\u201d that allows to easily define a GUI based on the ipywidgets package- to process any data in any form and then let you interactively define how to plot it using automatically generated widgets. Hierarchical combinations of Dashboards can be arranged then to build more complex applications.\r\n\r\nThe talk is divided in two sections. First one introduce the framework and its main features:\r\n\r\n - Custom syntax for defining widgets in a simplified way.\r\n - Dashboards: Syntax rules and capabilities.\r\n - Combining Dashboards to build complex applications.\r\n - Interactive plot creation.\r\n - Integration with pydata.\r\n\r\nSecond section will show how this framework can be used to analyse real data using Dashboards without writing any code. I will show how to transform market data time series into graphs using pandas and networkx, then plot it interactively using bokeh and Vpython.\r\n\r\n" - ], - "abstract_extra": "I think that here you will be able to find all the information related to my framework. https://github.com/HCsoft-RD/shaolin A detailed description of its main features can be found in the examples folder. The notebooks you will find there are self-explanatory.\r\n\r\n This is currently in alpha version. Everything there is online works, but I'm still testing like half of the Dashboards I have programmed, before uploading them. Expect thie beta version to be finished by the date of the talk.\r\n\r\n\r\nThere are no recordings of the talks I have already given, but you can find some info about the R&D work we are doing at HCSoft in this blog http://entropicai.blogspot.com.es/", - "tag_categories": [ - "Data Science", - "Python", - "Data Science", - "Data Science" - ], - "emails": "guillem.db@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/interactive-data-kung-fu-with-shaolin", - "admin_type": "", - "companies": "HCSoft programaci\u00f3n S.L." - }, - "450": { - "abstract_short": "aiohttp is asynchronous HTTP client and server library built on top of asyncio.\r\n\r\nThe intro describes basic programming patterns for both client\r\nand server API as well as more advanced techniques. \r\n\r\nThe main target of the talk is displaying an alternative to\r\npeople who want to avoid classic WSGI\r\nframeworks (Django/Flask/Pyramid etc) limitations but found\r\nTwisted and Tornado too cumbersome.", - "sub_title": "asyncio-based web programming fundamentals in 30 minutes", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@andrew_svetlov", - "id": 450, - "speakers": "Andrew Svetlov", - "title": "Introduction to aiohttp", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Best Practice", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "HTTP" - ], - "abstract_long": [ - "aiohttp is asynchronous HTTP client and server library built on top of asyncio.\r\n\r\nThe library allows to write user friendly code which looks like well-known\r\nlinear one (requests library for client and Django/Flask/Pyramid for\r\nserver) but utilizes the power of non-blocking sockets and\r\nsupports websockets natively.\r\n\r\nThe intro describes basic programming patterns for both client\r\nand server API as well as more advanced techniques. \r\nTips and tricks for writing asyncio-based code are included as well.\r\n\r\nThe main target of the talk is displaying an alternative to\r\npeople who want to avoid classic WSGI\r\nframeworks (Django/Flask/Pyramid etc) limitations but found\r\nTwisted and Tornado too cumbersome.\r\n\r\nDive into aiohttp usage with the library author." - ], - "abstract_extra": "I made similar talks in Caribbean PyCon and PyCon Hong Kong plus several times on several Russian-speaking conferences.", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Web", - "Web" - ], - "emails": "andrew.svetlov@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/introduction-to-aiohttp", - "admin_type": "", - "companies": "DataRobot" - }, - "427": { - "abstract_short": "Beginning programmers or Python beginners may find it overwhelming to implement a machine learning algorithm. Increasingly machine learning is becoming more applicable to many areas. This talk introduces key concepts and ideas and uses Python to build a basic classifier - a common type of machine learning problem. Providing some jargon to help those that may be self-educated or currently learning ", - "sub_title": "A novice's inquiry into classification.", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@loooorenanicole", - "id": 427, - "speakers": "Lorena Mesa", - "title": "Is that spam in my ham?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Education", - "Beginners", - "Case Study", - "Machine-Learning" - ], - "abstract_long": [ - "Supervised learning, machine learning, classifiers, big data! What in the world are all of these things? As a beginning programmer the questions described as \"machine learning\" questions can be mystifying at best.\r\n\r\nIn this talk I will define the scope of a machine learning problem, identifying an email as ham or spam, from the perspective of a beginner (non master of all things \"machine learning\") and show how Python can help us simply learn how to classify a piece of email.\r\n\r\nTo begin we must ask, what is spam? How do I know it \"when I see it\"? From previous experience of course! We will provide human labeled examples of spam to our model for it to understand the likelihood of spam or ham. This approach, using examples and data we already know to determine the most likely label for a new example, uses the Naive Bayes classifier.\r\n\r\nOur model will look at the words in the body of an email, finding the frequency of words in both spam and ham emails and the frequency of spam and ham. Once we know the prior likelihood of spam and what makes something spam, we can try applying a label to a new example.\r\n\r\nThrough this exercise we will see at a basic level what types of questions machine learning asks, learn to model \"learning\" with Python, and understand how learning can be measured." - ], - "abstract_extra": "This topic arose from a talk about a Naive Bayes white paper I did in Chicago (Papers We Love Chicago - May 2015 http://www.meetup.com/Papers-We-Love-Chicago/events/222024292/) that discussed the efficacy of Naive Bayes as well as what types of problems Naive Bayes performs well on. The learning curve was steep when reading this white paper, it was heavy on math and jargon for those that are not from the machine learning world. In fact I am a policy analyst who turned programmer just over two years ago (at the time of PyCon 2016). Most of my learning is self-taught or self-guided thus I find it important to be curious and use that curiosity to provide content in accessible formats to all.\r\n\r\nThis talk is not meant to be an exhaustive understanding of Naive Bayes but a focused talk on what machine learning questions look like and how Python can answer it.\r\n\r\nPast speaking experience:\r\n\r\nI performed this talk at PyOhio 2015 (http://www.pyvideo.org/video/3690/is-that-spam-in-my-ham-a-novices-inquiry-into-c) and received a good amount of feedback as well as additional questions to help me better direct the talk. \r\n\r\nI've taught quite a bit with the Girl Develop It Chicago chapter and as an original (and current) co-organizer and co-founder of PyLadies Chicago I've taught several of our workshops. For a listing of the workshops I've taught and the talks I've given can be found at - http://lorenamesa.com/pages/speaking.html. \r\n\r\nI spoke at PyTennessee in Feb 2016 on a similar beginner data collection and modeling exercise with some basic machine learning analysis. The talk had amazing feedback and I am now building out smaller workshops around it. I find that many beginner programmers have an overwhelming fear of trying to take on such topics and think that this would be a great talk for beginners to start learning.\r\n", - "tag_categories": [ - "Educational", - "Educational", - "Case Study", - "Data Science" - ], - "emails": "me@lorenamesa.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/is-that-spam-in-my-ham", - "admin_type": "", - "companies": "Sprout Social, Inc." - }, - "539": { - "abstract_short": "This talk shows the Python Descriptors, detailing their behaviour with a detailed practical example, so we can understand the power and flexibility they give. As a bonus track, class decorators are explained.", - "sub_title": "Get to know in the intimacy one of the most powerful and elegant corners of Python: Descriptors!", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@facundobatista", - "id": 539, - "speakers": "Facundo Batista", - "title": "It's not magic: descriptors exposed", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Python general" - ], - "abstract_long": [ - "This talk presents, using a detailed practical example, the Python Descriptos.\r\n\r\nThe behaviour of descriptors mechanisms is detailed, showing their power and flexibility.\r\n\r\nFinally, as a bonus track and to complete the used practical example, class descriptors are explained.\r\n\r\n" - ], - "abstract_extra": "I gave this talk in last PyCon Argentina, the result was awesome.\r\n\r\nAlso note that I created (and gave) this talk together with Joaquin Sorianello, but I can give it myself without any problem.", - "tag_categories": [ - "Python" - ], - "emails": "facundobatista@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/its-not-magic-descriptors-exposed", - "admin_type": "", - "companies": "Canonical" - }, - "545": { - "abstract_short": "There should be something for everyone in this whistle\u2013stop tour of iteration in Python setting off from `for`\u2013loops, and riding cross\u2013country to multiplexing coroutines!\r\n\r\nSee and hear the amazing sights and sounds of list comprehensions, and generators. Take in the amazing vistas from `itertools`, and be amazed at the magnificent `yield`!", - "sub_title": "A whistle\u2013stop tour of iteration in Python", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@sneeu", - "id": 545, - "speakers": "John Sutherland", - "title": "Iteration, iteration, iteration", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Beginners", - "Python general", - "Programming", - "Functional Programming" - ], - "abstract_long": [ - "There should be something for everyone in this whistle\u2013stop tour of iteration in Python setting off from `for`\u2013loops, and riding cross\u2013country to multiplexing coroutines!\r\n\r\nSee and hear the amazing sights and sounds of list comprehensions, and generators. Take in the amazing vistas from `itertools`, and be amazed at the magnificent `yield`!\r\n\r\nWe\u2019ll take detours to higher\u2013order functions, closures, and decorators. And cover the FP inspired builtins `map`, `filter`, and `reduce`, as well as the epitome of Pythonic programming, `enumerate`." - ], - "abstract_extra": "This talk was given at the \u201cPython Edinburgh Mini Conference\u201d in 2011 (http://sneeu.com/talks/pemc-2011/iteration/), but my plan is to completely rewrite the talk from scratch. Examples will be in Python 3.", - "tag_categories": [ - "Educational", - "Python", - "Programming", - "Programming" - ], - "emails": "john@sneeu.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/iteration-iteration-iteration", - "admin_type": "", - "companies": "FanDuel" - }, - "423": { - "abstract_short": "Sure you can do a chunk of scientific exploration and stuff in Jupyter in your choice of language supplemented with visuals and that's already awesome !\r\n\r\nBut let's head off the beaten track a little to look at other uses, especially command-line.\r\n\r\nWe'll look at some alternate uses of Jupyter ...\r\n", - "sub_title": "Sure you can do science, data analysis - but also CLI, tutorials, cheat sheats, blog, presentations", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@mjbright", - "id": 423, - "speakers": "Mike BRIGHT", - "title": "Jupyter for everything else", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Use Case", - "Jupyter/iPython Notebook", - "Docker", - "Command-Line" - ], - "abstract_long": [ - "Sure you can do a chunk of scientific exploration and stuff in Jupyter in your choice of language supplemented with visuals and that's already awesome !\r\n\r\nBut let's head off the beaten track a little to look at other uses, especially command-line.\r\n\r\nWe'll look at some alternate uses of Jupyter ...\r\n\r\n - Write command-line tutorials, cheat sheets in an easy to maintain format.\r\n - Perform visualization tasks for command-line tools\r\n - Write blog posts\r\n - Create interactive presentations (thanks Damian !)\r\n - Publish interactive books, articles and blog posts\r\n - HTML/js/css experimentation\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "**45 min version**\r\n\r\nI regularly use Jupyter to document my own creations\r\n\r\n - Command-line cheat sheets\r\n - Presentations via RISE\r\n - \"Command-line\" demos of any utility\r\n - I do Docker demos this way\r\n - I do Docker Build labs this way\r\n - PyMongo\r\n - HTML/JS/CSS experiments\r\n\r\nIt ain't rocket science, but it works for me .. .and maybe for you too.\r\n\r\nHere's my repo of past workshops.\r\n https://github.com/mjbright/jupyter_notebooks/\r\n\r\nObviously all talk (and lab) materials will be available on github as well as on your site.\r\n\r\n", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - "Python", - "DevOps", - "Programming" - ], - "emails": "europython@mjbright.net", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/jupyter-for-everything-else", - "admin_type": "", - "companies": "HPE" - }, - "662": { - "abstract_short": "We are using Python to help the National Grid in the UK to balance electricity production and usage. We do this by installing Python powered devices at customers sites that allow us to monitor and set control criteria to automatically turn on and off power consuming and producing devices when there is a mismatch between electricity supply and demand. \r\nIn this talk we will be talking about how and why we have used Python, as well as where in our system we would like to use Python.", - "sub_title": "Balancing the National Grid with Python and IoT", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 662, - "speakers": "Scott Reeve", - "title": "Keeping the Lights on with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Hardware/IoT Track", - "Case Study", - "Internet of Things (IoT)" - ], - "abstract_long": [ - "We are using Python to help the National Grid in the UK to balance electricity production and usage. We do this by installing Python powered devices at customers sites that allow us to monitor and set control criteria to automatically turn on and off power consuming and producing devices when there is a mismatch between electricity supply and demand. These devices talk to our Python powered cloud based system using the 3g network, giving us near real-time monitoring of our customers assets.\r\nOur entire infrastructure is written in Python, from our billing systems, data analytics systems and customer portal all the way through to our on site industrial system interfaces. In this talk we will be talking about how and why we have used Python, where we have had problems, as well as where in our system we would like to use Python and why we cannot. We will also be talking about what we are going to do next, moving our system from near real time monitoring to near real-time control, using Python for both system modelling and control. We will discuss how we are using Python to creating a system that monitors the balance between electricity supply and demand many times per second and is able to provide a corrective control based on the sum of the output of a dynamic set of our customer sites and the challenges that presents." - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Case Study", - "Hardware" - ], - "emails": "scott.reeve@limejump.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/keeping-the-lights-on-with-python", - "admin_type": "", - "companies": "Limejump Ltd" - }, - "488": { - "abstract_short": "El m\u00f3dulo itertools es una de las piedras angulares de la programaci\u00f3n avanzada en Python. Esta charla proporciona consejos pr\u00e1cticos del \u00e1lgebra de iteradores que pueden aplicarse de forma inmediata. Descubrir el m\u00f3dulo itertools supone arrancar el velo de nuestros ojos, y una vez usadas funciones como `repeat()`, `takewhile()`, `dropwhile()` o `product()` no hay marcha atr\u00e1s \u2014 es imposible volver al mundo de los meros mortales donde las soluciones son m\u00e1s complejas y necesitan m\u00e1s memoria.", - "sub_title": "Aumentando la letalidad y elegancia de nuestro c\u00f3digo gracias al m\u00f3dulo itertools.", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@pyctor", - "id": 488, - "speakers": "V\u00edctor Terr\u00f3n", - "title": "Kung Fu al amanecer con itertools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Clean Code", - "Best Practice", - "Functional Programming" - ], - "abstract_long": [ - "El m\u00f3dulo itertools es una de las piedras angulares de la programaci\u00f3n avanzada en Python. Parte de la biblioteca est\u00e1ndar, nos ofrece un \u00e1lgebra de iteradores que permite encadenar abstracciones de forma elegante, haciendo posibles soluciones sencillas a la par que m\u00e1s eficientes en su consumo de memoria.\r\n\r\nEl objetivo de esta charla es el de, ante todo, proporcionar consejos y lecciones claras que puedan aplicarse de forma inmediata. Ilustr\u00e1ndolo con numerosos ejemplos, los asistentes abandonar\u00e1n la charla habiendo asimilado como m\u00ednimo varios conceptos que mejorar\u00e1n indiscutible e irremediablemente su c\u00f3digo. El \u00e9nfasis se har\u00e1 en mostrar casos espec\u00edficos en los que una soluci\u00f3n tradicional puede ser mejorada una y otra vez con funciones del m\u00f3dulo itertools. \r\n\r\nSupongamos, por ejemplo, que queremos alternar indefinidamente entre dos valores: -1 y 1. El reci\u00e9n iniciado utilizar\u00eda una variable cuyo valor ir\u00eda modificando a cada paso y el usuario medio quiz\u00e1s optar\u00eda por un generador infinito. Ambas soluciones dignas y honorables, pero que palidecen ante la maestr\u00eda del artista marcial que que tan s\u00f3lo necesita `itertools.cycle()`. Porque el m\u00f3dulo itertools es as\u00ed: una vez ca\u00eddo el velo de nuestros ojos y descubiertas funciones como `repeat()`, `takewhile()`, `dropwhile()` o `product()`, no hay marcha atr\u00e1s. En esta charla vamos a aprender a reconocer cu\u00e1ndo pueden ser usadas, proporcion\u00e1ndonos en una \u00fanica l\u00ednea lo que para los meros mortales supone mucho m\u00e1s trabajo." - ], - "abstract_extra": "Tengo una enemistad personal con los ponentes aburridos, as\u00ed que me tomo muy en serio que mis charlas sean amenas y todo lo divertidas posibles \u2014 y por el momento, cruzo los dedos, parece que lo he logrado. Mis charlas en las PyConES se encuentran todos los a\u00f1os entre las que m\u00e1s reproducciones tienen en YouTube, si es que eso significa algo:\r\n\r\n- 2013: [https://www.youtube.com/watch?v=QZiX75rbkuI][1]\r\n- 2014: [https://www.youtube.com/watch?v=MgRdg3s8n3E][2]\r\n- 2015: [https://www.youtube.com/watch?v=8TDZsaATmqQ][3] [charla de clausura]\r\n\r\nEn ingl\u00e9s tan s\u00f3lo he dado una charla hasta la fecha, en 2015:\r\n[https://www.youtube.com/watch?v=oSOco7qQujU][4]\r\n\r\n [1]: https://www.youtube.com/watch?v=QZiX75rbkuI\r\n [2]: https://www.youtube.com/watch?v=MgRdg3s8n3E\r\n [3]: https://www.youtube.com/watch?v=8TDZsaATmqQ\r\n [4]: https://www.youtube.com/watch?v=oSOco7qQujU\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "quintanar@gmail.com", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/kung-fu-al-amanecer-con-itertools", - "admin_type": "", - "companies": "Google" - }, - "635": { - "abstract_short": "The itertools module is one of the cornerstones of advanced programming in Python. This talk offers practical advice about iterator algebra that can be put into practice immediately. Discovering the itertools module means taking the veil from our eyes, and once we use functions such as repeat(), takewhile(), dropwhile() or product(), there is no return \u2014 it is impossible to come back to the world of the mere mortals, where solutions are more complex and need more memory.", - "sub_title": "Increasing the lethality and elegance of our code with the itertools module.", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@pyctor", - "id": 635, - "speakers": "V\u00edctor Terr\u00f3n", - "title": "Kung Fu at Dawn with Itertools", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Clean Code", - "Best Practice", - "Functional Programming" - ], - "abstract_long": [ - "The itertools module is one of the cornerstones of advanced programming in Python. Part of the standard library, it provides an iterator algebra that allows us to elegantly chain abstractions, enabling solutions that are both simpler and more memory efficient.\r\n\r\nThe goal of this talk is to offer practical advice and clear lessons that can be immediately put into practice. Illustrating it with numerous examples, attendees will leave having assimilated at least several concepts that will improve their code undeniably and irremediably. Emphasis will be on showing specific cases where a traditional solution can be overhauled over and over with functions from the itertools module.\r\n\r\nLet\u2019s say, for example, that we want to alternate indefinitely between two values: -1 and 1. The novice would use a variable, updating its value at each step, and the average user would maybe opt for an endless generator. Both are worthy and honorable solutions, but they pale before the mastery of the martial artist who only needs itertools.cycle(). Because that is the nature of the itertools module: once the veil falls from our eyes and we come across functions such as repeat(), takewhile(), dropwhile() or product(), there is no return. In this talk we will learn to identify when they can be used, accomplishing with a single line of code what for the mere mortals takes much more effort." - ], - "abstract_extra": "I have a personal feud with boring speakers, so I do my best trying to make my talks as entertaining and funny as possible \u2014 and so far, I am crossing my fingers, it seems that I have succeeded. My talks at PyCon Spain are every year among the most viewed on YouTube, if that means anything:\r\n\r\n- 2013: [https://www.youtube.com/watch?v=QZiX75rbkuI][1] [Spanish]\r\n- 2014: [https://www.youtube.com/watch?v=MgRdg3s8n3E][2] [Spanish]\r\n- 2015: [https://www.youtube.com/watch?v=8TDZsaATmqQ][3] [closing keynote, Spanish]\r\n\r\nI have only given one talk in English so far, in 2015:\r\n[https://www.youtube.com/watch?v=oSOco7qQujU][4]\r\n\r\n [1]: https://www.youtube.com/watch?v=QZiX75rbkuI\r\n [2]: https://www.youtube.com/watch?v=MgRdg3s8n3E\r\n [3]: https://www.youtube.com/watch?v=8TDZsaATmqQ\r\n [4]: https://www.youtube.com/watch?v=oSOco7qQujU\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "quintanar@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/kung-fu-at-dawn-with-itertools", - "admin_type": "", - "companies": "Google" - }, - "588": { - "abstract_short": "Programming is one of the most important 21st-century skills and tons of different online and offline resources can help you to master it.\r\n\r\nOn the other hand, playing games is really effective way for us to learn and it's also the most fun.\r\n\r\nBut is it possible to learn real programming language like Python by playing a game? \r\n\r\nIn this talk I'll show you some projects that allow you to achieve that. I also want to inspire you to help such projects and to suggest ideas how to do that.", - "sub_title": "", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 588, - "speakers": "Liana Bakradze", - "title": "Learn Python The Fun Way", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Educational Track" - ], - "abstract_long": [ - "Programming is one of the most important 21st-century skills. It doesn't only provide promising career opportunities but teaches how to reason logically, systematically and creatively. \r\n\r\nCode readability, rich standard library, straightforward syntax and other features make Python a great language for teaching beginners how to program. Python community is very supportive and friendly to newcomers and does awesome work to make Python available to everyone. Tons of different online and offline resources can help you to master Python programming. Problem solving is the classical way of learning how to code. But it can be boring for some people, especially for kids.\r\n\r\nOn the other hand, playing games is really effective way for us to learn and it's also the most fun. You can find different games designed to teach basics of programming, but most of them use special visual environments and don't teach real text based languages. \r\n\r\nBut is it possible to learn programming language like Python by playing a game? \r\n\r\nIn this talk I'll show you a few projects for different age and levels that allow you to achieve that. I'll pay attention on methods that are used to teach programming.\r\n\r\nI also want to inspire you to help such projects and to suggest ideas how to do that." - ], - "abstract_extra": "", - "tag_categories": [ - "Educational", - ">>> Suggested Track" - ], - "emails": "liana.bakradze@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/learn-python-the-fun-way", - "admin_type": "", - "companies": "JetBrains" - }, - "716": { - "abstract_short": "What we learned along the way - processes, organization, technology and people - from 0 to 11 million students, 40 thousand courses and 20 thousand teachers.", - "sub_title": "", - "timerange": "2016-07-20 16:15:00, 2016-07-20 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@rbanffy", - "id": 716, - "speakers": "Ricardo B\u00e1nffy", - "title": "Lessons Learned after 190 Million Lessons Served", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Management", - "Django", - "Scaling" - ], - "abstract_long": [ - "What we learned along the way - processes, organization, technology and people - from 0 to 11 million students, 40 thousand courses and 20 thousand teachers.", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Development Methods", - "Application Frameworks", - "DevOps" - ], - "emails": "rbanffy@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/lessons-learned-after-190-million-lessons-served", - "admin_type": "", - "companies": "Udemy" - }, - "523": { - "abstract_short": "Web APIs that are easier to understand, develop, test and use, is a popular subject. \"An API is only as good as its documentation\". We decided to play with this proverb and leverage the power of documentation. We propose to use the code documentation and the type system to provide lots of free features: explorable APIs, better error messages, automatic testing. \r\n\r\nPython is perfect to explore code and documentation dynamically. We'll demonstrate what we came up to and the lessons we've learned.", - "sub_title": "The day you'll prefer writing documentation over code: automatic UI/API and tests from documentation", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 523, - "speakers": "Rudy Sicard", - "title": "Leveraging documentation power for better web APIs", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Django", - "Web Servers and MicroFWs (Flask/Tornado/Nginx/...)", - "APIs" - ], - "abstract_long": [ - "'Rich' web APIs that are easier to understand, develop, test and use, is a popular subject. There are a lot of new specification languages (e.g. swagger, apiblueprint ...) and libraries (django-rest-framework, drf ...) that provide features in this direction. Following the old proverb \"An API is only as good as its documentation\", we decided to play with these ideas and focus on leveraging the power of documentation. We propose to use the code documentation and the type system to provide: \r\n - browsable APIs, that are easy to interact with and visualize, reducing the need to provide custom UIs \r\n - verification of inputs/outputs along with precise error message if needed \r\n - automatic [de]-serialization of inputs/ouputs outside of the domain code\r\n - smart exception handling, e.g. exceptions that are not documented are automatically converted into internal errors\r\n - automatic testing, e.g. input, output and result including exceptions are tested ensuring the code works and the documentation is up-to-date. \r\n\r\n\r\nThis use case is one of the rare situation where introspection is desirable and unavoidable. And Python is a good language to explore/exploit code and documentation dynamically. The perfect excuse to spend some time on meta coding a first implementation while being at work. We'll demonstrate what we came up to, the advantages and limitations compared to other approaches. And we'll share the lessons we learned from this experiment.\r\n\r\n" - ], - "abstract_extra": "In my previous compagny I worked (design & implementation) on a functional language dedicated to web programming. I wrote one of the blog entry of the company.\r\nhttp://blog.opalang.org/2012/09/programming-tools-ux-when-statically.html\r\n\r\nI have written two articles in machine learning journals:\r\n* Rudy Sicard, T. Arti\u00e8res, E. Petit, Learning iteratively a classifier using the Bayesian Model Averaging Principle, Pattern Recognition, http://www.sciencedirect.com/science/article/pii/S0031320308004895\r\n* Rudy Sicard, Thierry Arti\u00e8res, Modelling sequences using pairwise relational features, to appear in Pattern Recognition, http://www.sciencedirect.com/science/article/pii/S0031320308004895\r\n\r\nand give several speech in machine learning conferences:\r\n* R. Sicard, Th. Arti\u00e8res, E. Petit : \u201cModeling On-line Handwriting Using Pairwise Relational Features\u201d, International Workshop on Frontiers in Handwriting Recognition, La Baule, France, pp. 267-274 (2006)\r\n* R. Sicard, Th. Arti\u00e8res, E. Petit : \u201cMod\u00e8lisation de l\u2019\u00e9crit en ligne \u00e0 l\u2019aide de reseaux bay\u00e9siens et de caract\u00e9ristiques relationnelles\u201d, Colloque International Francophone sur l'Ecrit et le Document (CIFED'06), Fribourg, Suisse (2006)\r\n* R. Sicard, Th. Arti\u00e8res : \u201cPatch Learning for Incremental Classifier Design\u201d, European Conference on Artificial Intelligence (ECAI 2006), Riva del Garda, Italie, pp. 807-808 (2006)\r\n* R. Sicard, Th. Arti\u00e8res : \u201cAn application of bayesian model averaging to histograms\u201d, Grenoble, France (2007)", - "tag_categories": [ - "Application Frameworks", - "Web", - "Web" - ], - "emails": "polux.moon@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/leveraging-documentation-power-for-better-web-apis", - "admin_type": "", - "companies": "Criteo" - }, - "590": { - "abstract_short": "Many times these logs are thrown away or just sit uselessly somewhere on disk. I would like to show you how you can make sense of all that data, how to collect and clean them, store them in a scalable fashion and, finally, explore and search across various systems.", - "sub_title": "Centralised logging for fun and profit.", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@honzakral", - "id": 590, - "speakers": "Honza Kr\u00e1l", - "title": "Log all the things!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Tooling", - "Infrastructure", - "Operations", - "DevOps general" - ], - "abstract_long": [ - "Centralized logging (and the ELK stack) is proving itself to be a very useful tool in managing a production infrastructure. When combined with other data sources (application logging, business data, ...) it can provide even more insight.\r\n\r\nThis talk is an introduction into the area with some overview of the motivation, tools and techniques that can prove useful. We will show how the open source ELK (Elasticsearch Logstash and Kibana) stack can be used to implement this.\r\n\r\nIt is geared towards people familiar with the DevOps concept that are looking to improve their lives by introducing smarter tools.", - "", - "", - "" - ], - "abstract_extra": "I have spoken at EuroPython before, including last year. This talk is an updated version of my talk from PyCon Australia since I assume there will be minimum overlap in audiences. Video of the talk: https://www.youtube.com/watch?v=i3rH5cU-Uz4", - "tag_categories": [ - "Programming", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "honza.kral@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/log-all-the-things", - "admin_type": "", - "companies": "Elastic" - }, - "415": { - "abstract_short": "Machine Learning is the next big thing. If you are a dummy in terms of Machine Learning, but want to get started with it... there are options.\r\n\r\nStill, thanks to the Web, Python and OpenSource libraries, we can overcome this situation and do some interesting stuff with Machine Learning.", - "sub_title": "If you're a Machine Learning dummy but are interested in the topic, this is for you.", - "timerange": "2016-07-18 16:30:00, 2016-07-18 17:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 415, - "speakers": "Javier Arias Losada", - "title": "Machine Learning for dummies with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Cython", - "Predictions", - "Deep Learning", - "Open-Source", - "Machine-Learning" - ], - "abstract_long": [ - "Have you heard that Machine Learning is the next big thing?\r\n\r\nAre you a dummy in terms of Machine Learning, and think that is a topic for mathematicians with black-magic skills?\r\n\r\nIf your response to both questions is 'Yes', we are in the same position.\r\n\r\nStill, thanks to the Web, Python and OpenSource libraries, we can overcome this situation and do some interesting stuff with Machine Learning." - ], - "abstract_extra": "I regularly speak at different venues:\r\n- Telefonica Developers conference\r\n- Python and Javascript meetups in Barcelona\r\n- Oscon amsterdam 2015: http://conferences.oreilly.com/oscon/open-source-eu-2015/public/schedule/detail/44008\r\n- NoSQL matters 2013 : https://2013.nosql-matters.org/bcn/index.html%3Fp=2344.html#abstract_266016455\r\n- MediterraneaJS 2015 - http://mediterraneajs.eu/people/javier_arias.html\r\n\r\nSome of my presentations: http://www.slideshare.net/javierarilos\r\n", - "tag_categories": [ - "Python", - "Data Science", - "Data Science", - "Open Source", - "Data Science" - ], - "emails": "javier.arilos@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-for-dummies-with-python", - "admin_type": "", - "companies": "Telefonica I+D" - }, - "642": { - "abstract_short": "In Machine Learning, the power of combining many models have proven to successfully provide better results than single models. \r\n\r\nThe primary goal of the talk is to answer the following questions:\r\n1) Why and How ensembles produce better output?\r\n2) When data scales, what's the impact? What are the trade-offs to consider? \r\n3) Can ensemble models eliminate expert domain knowledge?", - "sub_title": "United we stand, divided we fall", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@bargava", - "id": 642, - "speakers": "Bargava Subramanian", - "title": "Machine Learning: Power of Ensembles", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1 [PyData Track]", - "tags": [ - "Predictions", - "Machine-Learning", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "It is relatively easy to build a first-cut machine learning model. But what does it take to build a reasonably good model, or even a state-of-art model ?\r\n\r\nEnsemble models. They are our best friends. They help us exploit the power of computing. Ensemble methods aren't new. They form the basis for some extremely powerful machine learning algorithms like random forests and gradient boosting machines. The key point about ensemble is that consensus from diverse models are more reliable than a single source. This talk will cover how we can combine model outputs from various base models(logistic regression, support vector machines, decision trees, neural networks, etc) to create a stronger/better model output.\r\n\r\nThis talk will cover various strategies to create ensemble models.\r\n\r\nUsing third-party Python libraries along with scikit-learn, this talk will demonstrate the following ensemble methodologies:\r\n1) Bagging\r\n2) Boosting\r\n3) Stacking\r\n\r\nReal-life examples from the enterprise world will be show-cased where ensemble models produced better results consistently when compared against single best-performing models.\r\n\r\nThere will also be emphasis on the following: Feature engineering, model selection, importance of bias-variance and generalization.\r\n\r\nCreating better models is the critical component of building a good data science product. \r\n\r\nA preliminary version of the slides is available [here](https://speakerdeck.com/bargava/power-of-ensembles)", - "", - "", - "" - ], - "abstract_extra": "**Previous Presentations**\r\n\r\nOne version of the talk was previously presented at \r\n* [PyCon Ireland -2015 - Machine Learning - Power of Ensembles](http://lanyrd.com/2015/pyconie/sdrpqd/)\r\n\r\nThe speaker has presented at a number of conferences. Some of them are:\r\n\r\n* [PyCon Ireland 2015 - Workshop on Deep Learning](http://lanyrd.com/2015/pyconie/sdrpqd/)\r\n* [Pycon Poland 2015 - Workshop on Deep Learning](http://pl.pycon.org/2015/agenda_en.html)\r\n* [Fifth Elephant 2015, Bangalore India. India's largest data analytics conference -workshop on Deep Learning](https://fifthelephant.talkfunnel.com/2015/10-introduction-to-deep-learning)\r\n [talk](https://fifthelephant.talkfunnel.com/2015/11-visualising-multi-dimensional-data)\r\n* [IEEE International Conference on Cloud Computing for Emerging Markets - Tutorial on Deep Learning](http://conferences.computer.org/ccem/program.html)\r\n* [Bangalore Python Users Meetup Sep 2015 - Data Analysis workshop](http://www.meetup.com/BangPypers/events/210041222/)\r\n* [Scipy India 2015 - Workshop on Data Analysis](http://scipy.in/2015)\r\n( [PyCon India 2015 - Workshop on Statistics](https://in.pycon.org/2015/)", - "tag_categories": [ - "Data Science", - "Data Science", - "Data Science", - "Data Science", - "Data Science" - ], - "emails": "bargava@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/machine-learning-power-of-ensembles", - "admin_type": "", - "companies": "Cisco" - }, - "384": { - "abstract_short": "You will see several different walking robots controlled with Python in different ways, and learn how they were built and programmed.", - "sub_title": "Making Python run on robots", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 384, - "speakers": "Radomir Dopieralski", - "title": "Making robots walk with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Algorithms", - "Gadgets", - "Engineering", - "Hardware/IoT Track", - "Cross-Platform-Development" - ], - "abstract_long": [ - "Making a robot walk is not easy, especially when all it has for brains is a small microcontroller which you have to program in C. During this talk you will see different ways in which such a robot can be controlled in Python, either by using remote control, with the Python program running on a stationary computer, by putting a small computer, such as a Raspberry Pi on it, or by programming it with Micropython, a version of the Python language designed for microcontrollers. I will also explain the basic problems with walking robots and how Python can be used to overcome them. Finally, I will show some of the robots I have built.", - "", - "", - "" - ], - "abstract_extra": "I have shown those robots on several conferences already:\r\n\r\nA poster session at PyCon.US: https://us.pycon.org/2015/schedule/presentation/448/\r\nA talk at PyCon.PL: https://www.youtube.com/watch?v=-PisXGVe-lE\r\nA talk at DevConf.cz: http://sched.co/2BkO\r\n\r\nSince then I have made considerable progress, and things became even easier for hobbyists. There are more Micropython boards available, the Micropython language itself became better, there is a new, smaller, Raspberry Pi board, and there are lots of other innovations popping up constantly. We live in the future, and I will talk about some of the exciting new things too.\r\n\r\n", - "tag_categories": [ - "Data Science", - "Hardware", - "Everything Else", - ">>> Suggested Track", - "Python" - ], - "emails": "ep2016@sheep.art.pl", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/making-robots-walk-with-python", - "admin_type": "", - "companies": "" - }, - "734": { - "abstract_short": "Kubernetes is the Google Borg inspired control plane for Docker containers. It has a great API but needs a load of HTTP client code and JSON processing to use it from Python. This talk introduces Kube, a Python wrapper around the Kubernetes API that enables you to manage your Kubernetes cluster in a pythonic way while avoiding any Kubernetes API peculiarities. Programmers and operations folk who are interested in interacting with the Kubernetes API using Python.", - "sub_title": "Manage Kubernetes with Python using the open source, pythononic API wrapper we developed called Kube", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@cobecto", - "id": 734, - "speakers": "David Charles", - "title": "Managing Kubernetes from Python using Kube", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Operations", - "Infrastructure", - "Open-Source", - "python", - "System Administration" - ], - "abstract_long": [ - "## Abstract\r\nDocker has had a transformative influence on the way we deploy software and Kubernetes, the Google Borg inspired control plane for Docker-container- hosting-clusters, is gaining similar momentum. Being able to easily interact with this technology from Python will become an increasingly important capability in many organisations. I'll discuss what the motivations behind writing Kube. We'll dive into Kube using the Python interactive interpreter, getting connected to the API, and simple viewing and label update operations. Finally I'll discuss more advanced resource management activities like Kube's 'watch' API capability.\r\n\r\n## Objectives\r\nAttendees will learn about the key concepts in getting resource information out of their Kubernetes cluster using Kube.\r\n\r\n## Outline\r\n1. Setting the scene (3 minutes)\r\n1. Other Python kubernetes wrappers (2 minutes)\r\n1. Kubernetes concepts quick recap (5 minutes)\r\n1. Dive into Kube in the Python interactive interpreter (10 minutes)\r\n * Outline prerequisites\r\n * The entry point - a Cluster instance\r\n * Views and Items - two important Kube concepts\r\n * Item meta data: labels and versions\r\n1. More Kube features (5 minutes)\r\n * Creating and deleting resources\r\n * Using Kube's Watch API support\r\n * The cluster proxy attribute for when you need to get at the actual API.\r\n1. Q&A (5 minutes)" - ], - "abstract_extra": "## Additional\r\nThe Kubernetes interactions will be performed against a single node k-machine instance installed on a laptop. The talk essentially presents the quick-start portion of the Kube documentation.\r\n\r\n## Speaking experience\r\nThis would be the first time I have given a talk at a major conference but I regularly deliver talks at tech meet-ups. As CTO at Cobe.io, one of the EP2016 conference sponsors, a significant part of my job is delivering talks to prospective customers, clients and investors. A portion of the talk will be delivered performing simple operations in the python interactive shell and on the command line, but there's no complicated live coding.\r\n\r\nSome blog articles I've written:\r\nhttps://cobe.io/blog/authors/dave-charles/\r\n\r\nTech Tran Network video about monitoring: \r\nhttp://www.thettn.tv/headlines/a-brief-history-of-monitoring-david-charles.aspx", - "tag_categories": [ - "DevOps", - "DevOps", - "Open Source", - "", - "DevOps" - ], - "emails": "dave@cobe.io", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-kubernetes-from-python-using-kube", - "admin_type": "", - "companies": "Cobe.io" - }, - "406": { - "abstract_short": "Mocking is a valuable technique for writing tests but mocking effectively is often a stumbling block for many developers and can raise questions about its overall value as a technique.\r\n\r\nThere will be a brief introduction to mocking, then a look at features and techniques of Python\u2019s unittest.mock library and cover some useful tips and common scenarios, so this will be useful to those who have some experience mocking but would like to do so more effectively.", - "sub_title": "Better mocking with Python", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@helenst", - "id": 406, - "speakers": "Helen Sherwood-Taylor", - "title": "Managing Mocks", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Test Driven Development (TDD)", - "Testing" - ], - "abstract_long": [ - "Mocking is a valuable technique for writing tests but mocking effectively is often a stumbling block for many developers and can raise questions about its overall value as a technique.\r\n\r\nThe audience will have some familiarity with unit testing and may have tried mocking before, but some introduction will be provided for those who haven\u2019t. We will look at some features and techniques of Python\u2019s unittest.mock library and cover some useful tips and common scenarios, so this will be useful to those who have some experience mocking but would like to do so more effectively.\r\n\r\nSummary of proposed content:\r\n\r\n1. A short introduction to what mocking is and why it is useful.\r\n2. Tour of Python\u2019s mock library and how to make the most of it\r\n * Creating and manipulating Mock objects\r\n * Setting up return values and side effects to control test environment\r\n * Inspecting mocks - different ways to examine a mock object and find out what happened during the test\r\n * How and where to patch\r\n3. Common mocking situations - scenarios where mocking is particularly useful and/or tricky to get right. For example - date/time, filesystem, read only properties\r\n4. Some discussion of when mocking is and isn't helpful.\r\n\r\nFocus will be mainly on Python's unittest.mock module but we will also have a brief look at some other useful libraries." - ], - "abstract_extra": "I gave this talk previously at PyCon UK last year (https://www.youtube.com/watch?v=haXUaGTp8Bc) which was my first speaking experience.\r\n\r\nI received some encouraging feedback and some interesting suggestions for improvement. I'd like to combine this with my own learnings over the last few months so I can bring a better talk to a wide audience.", - "tag_categories": [ - "Testing", - "Testing" - ], - "emails": "helen@rrdlabs.co.uk", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/managing-mocks", - "admin_type": "", - "companies": "" - }, - "527": { - "abstract_short": "When standard Python syntax doesn't cut it, apply metaclasses to make it do what you want. Here I present our metaclass-based implementation of a declarative GUI layout syntax to inspire ideas for what to do when your goals don't fit the Python syntax.", - "sub_title": "Use the power of metaclasses to bend Python to your needs", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@sm6xmm", - "id": 527, - "speakers": "Anders Hammarquist", - "title": "Metaclasses for fun and profit: Making a declarative GUI implementation", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Meta Classes", - "Use Case" - ], - "abstract_long": [ - "When overhauling the user interface of Autolabel's labeling printers, \r\nwe wanted a clean way to describe the layout of the settings widgets.\r\nThe structure we came up with was a declarative class layout that\r\nleverages Python's metaclass concept to build the underlying GTK\r\nwidget structure.\r\n\r\nI will present the implementation to hopefully inspire you to apply\r\nmetaclass techniques to problems that standard Python syntax can't\r\nquite solve. If that fails, you will at least have a way to\r\ndeclaratively construct GTK GUIs.\r\n\r\nA short, non-exaustive, summary of concepts I will mention includes\r\nmetaclasses (obviously), class hierarchies, method resolution\r\norder, super(), and anecdotes of dealing with GTK.\r\n\r\nYou may find some similarities with my talk on Python as a domain\r\nspecific language at Europython 2006\r\nhttp://indico.cern.ch/event/44/session/41/contribution/35" - ], - "abstract_extra": "Previous talks:\r\n\r\nPython as a domain specific language, Europython 2006\r\nhttp://indico.cern.ch/event/44/session/41/contribution/35\r\n\r\nMulti-document concistency with MondoDB, Europython 2012\r\nhttps://ep2013.europython.eu/conference/talks/multi-document-consistency-with-mongodb", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases" - ], - "emails": "sm6xmm@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/metaclasses-for-fun-and-profit-making-a-declarative-gui-implementation", - "admin_type": "", - "companies": "Open End AB" - }, - "453": { - "abstract_short": "The BBC micro:bit is a \"moon-shot\" project to provide an open programmable device for kids. The PSF were a partner in the project: the device runs MicroPython ~ a full reimplementation of Python 3. \r\n\r\nThis practical demonstration will show what the device does, how to program it, and how to contribute and/or set the appropriate wheels in motion to adopt and adapt the project for their own purposes.\r\n\r\nA practical demo-led presentation... what could possibly go wrong? ;-)", - "sub_title": "A practical demonstration that can't possibly go wrong. What's the worst that could happen?", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@ntoll", - "id": 453, - "speakers": "Nicholas Tollervey", - "title": "MicroPython on the BBC micro:bit", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Gadgets", - "Educational Track", - "MicroPython", - "Internet of Things (IoT)" - ], - "abstract_long": [ - "The BBC micro:bit is a small programmable device for children. A million of them have been handed out to the UK's 11 and 12 years olds. The Python Software Foundation was a partner in this moon-shot scheme and, thanks to the efforts of Damien George, MicroPython (a full reimplementation of Python 3) runs on the device. All the assets needed to recreate this project have been release under open-source licenses.\r\n\r\nThis practical demonstration shows what can be done with the device and how to program it. I'll provide advice on how best to introduce the device to children and teachers in your own locale.\r\n\r\nThe only prerequisite you need is a passion for Python, education and playing with a cool IoT gizmo. My goal is simply to give attendees enough information to have fun and make cool things with a micro:bit." - ], - "abstract_extra": "I regularly speak at conferences and other tech-related events (including PyconUK, PyConUS, Europython, O'Reilly's EdFoo, OpenTech, Techhub and various \"open source\" related meet-ups). In the past year I have been a keynote speaker at PyCon India (https://www.youtube.com/watch?v=Q3kXXtlviiM) and PyCon Slovakia.\r\n\r\nI created PyCon UK's education track in 2012 and have been the organiser ever since although I stepped down last year so I couldn't become a single point of failure. I also created and have organised the London Python Code Dojo since 2009.\r\n\r\nI blog at http://ntoll.org/ and a large number of my Python related demos created during the development of the BBC micro:bit can be found here: https://www.youtube.com/channel/UC9FMO_qG2eE9I1rMaCEZu7A\r\n\r\nI've written three books for O'Reilly (most recently \"Python in Education\" - http://www.oreilly.com/programming/free/python-in-education.csp) and have also written articles for Computer Shopper, O'Reilly Radar and The Guardian.\r\n\r\nI am a fellow of the Python Software Foundation.", - "tag_categories": [ - "Educational", - "Hardware", - ">>> Suggested Track", - "Python", - "Hardware" - ], - "emails": "ntollervey@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/micropython-on-the-bbc-microbit", - "admin_type": "", - "companies": "" - }, - "730": { - "abstract_short": "Are we looking in the wrong direction for artificial intelligence and machine learning?\r\n\r\nI'll discuss an older but perhaps more satisfying approach, that has been neglected in recent years.\r\n\r\nIt begins with questions in logic and language, and can be explored using easy techniques. I'll use simple Python programs to explore three key notions in this AI research: **loops**, **self-reference** and **tangled hierarchies**, themselves directly reflected in important programming concepts.", - "sub_title": "Approaching artificial intelligence from another direction", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@EvilDMP", - "id": 730, - "speakers": "Daniele Procida", - "title": "Minds, machines and Python", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "The Answer to Life the Universe and Everything Else", - "Machine-Learning" - ], - "abstract_long": [ - "In recent years, we've seen interesting and spectacular successes in artificial intelligence and machine learning, made possible by leaps in computing power and techniques able to harvest vast quantities of data.\r\n\r\nThe results are uncanny. We see them everywhere, from the personal assistants built into smartphones to the neural networks that do an astounding job of recognising images. However, they're also susceptible to the criticism that they represent not intelligence but a mere simulation of it, and that producing a convincing simulacrum has become more important than a genuine search for intelligence or learning.\r\n\r\nAt the same time, another, perhaps deeper, approach has become neglected in recent decades, along with the questions it asks about the nature of mind, intelligence and learning. This approach begins with fundamental questions in logic and language, and can be explored using some of the simplest programming techniques.\r\n\r\nIn this talk, I'll use simple Python programs to explore three key notions in this strand of artificial intelligence research: *loops*, *self-reference* and *tangled hierarchies*. The way these concepts directly reflect important concepts in programming suggests that for the programmer, this approach could be more interesting and satisfying, and simply more **fun,** than using huge ontologies and big data to create mere simulacra of intelligence.\r\n\r\nThe examples I use will be concrete and easy to understand, even for novice programmers." - ], - "abstract_extra": "I'm very excited by this talk - after many years I feel I am succeeding in bringing together a number of questions in the subject together in a way that works extremely well for programmers, and can use insights from programming itself to illuminate questions about the nature of intelligence.\r\n\r\nI'll be drawing upon multiple sources and work in a range of fields. They include the work of Douglas Hofstadter, language theorists, programmers, even poets and artists.\r\n\r\nMy own academic background is in philosophy, and I've presented some of this material to different audiences, including to mathematicians. This talk however will be aimed firmly at the general Python audience of EuroPython.\r\n\r\nAbout me\r\n===========\r\n\r\nI am a member of the Django core team and the board of the Django Software Foundation.\r\n\r\nI was the chair of the organising committee of DjangoCon Europe in Cardiff in 2014, and have been involved in several other international community conferences, including PyCon Namibia.\r\n\r\nI've previously spoken at events including DjangoCon US, DjangoCon Europe, PyCon Ireland, PyCon UK, PyCon Slovakia and PyCon Italia.", - "tag_categories": [ - "Everything Else", - "Data Science" - ], - "emails": "daniele.procida@divio.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/minds-machines-and-python", - "admin_type": "", - "companies": "Divio" - }, - "503": { - "abstract_short": "Dutch startup MiniBrew intends to disrupt the beer market by introducing an easy-to-use beer brewing machine controlled by a mobile app and communicating with a Python backend. Users want real-time insights in their brewing process, which presented some challenges in terms of architectural design. In this talk Elements Interactive's Chesco discusses best practices and pitfalls of the IoT architecture of MiniBrew by diving into message queues, protocol buffers and full-session logging.", - "sub_title": "A use case of Python as the driver of an IoT architecture for MiniBrew", - "timerange": "2016-07-19 15:45:00, 2016-07-19 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@chescales", - "id": 503, - "speakers": "Francisco Igual", - "title": "MiniBrew: Brewing beer with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Hardware/IoT Track", - "Architecture", - "Internet of Things (IoT)", - "APIs", - "RESTful" - ], - "abstract_long": [ - "The number one alcoholic drink in the world is undoubtedly beer. With the rise of craft beers, also homebrewing has become very popular in recent years, although it is still a complex and expensive hobby. Dutch startup MiniBrew intends to change that with their revolutionary beer brewing machine, which is controlled by a mobile app and communicates with a Python API backend. \r\n \r\nIn this talk Chesco will share his ideas and experiences in utilizing Python in the backend architecture for the MiniBrew project he and his team are working on at MiniBrew's development partner Elements Interactive. \r\n \r\nAs many IoT projects, the ingredients for MiniBrew are a device with a limited chipset and internet connection, a backend to store the data acting as the mastermind and a mobile app to allow end users to control the brewing process. \r\n \r\nThe fact that we want users to know in real-time how their beer brewing process is doing presented some challenges which required us to come up with a competitive architecture that would both give real-time status updates and not saturate the server with continuous calls. \r\n \r\nChesco discusses best practices and pitfalls in designing and developing IoT architecture by diving into the RabbitMQ message broker, the MQTT protocol and protocol buffers. He will focus on the REST API and CMS site written in Python, elaborating on high frequency data in the apps, scalability, full-session logging and overcoming common architectural challenges.", - "", - "", - "" - ], - "abstract_extra": "For more information on Elements Interactive, please visit: https://www.elements.nl/\r\nFor more information on MiniBrew, please visit: http://www.minibrew.io/", - "tag_categories": [ - ">>> Suggested Track", - "Programming", - "Hardware", - "Web", - "Web" - ], - "emails": "chesco@elements.nl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/minibrew-brewing-beer-with-python", - "admin_type": "", - "companies": "Elements Interactive" - }, - "414": { - "abstract_short": "The OpenGL api is one of the oldest (and most used) graphics library in both the gaming and simulations world. In latest years the api has been extremely re-designed to support modern hardware features available in GPUs. \r\nCan we build realtime graphics application with Python using OpenGL ? Well, obviously Yes !", - "sub_title": "Learn how to use OpenGL to build your game or simulations using latest versions of the API", - "timerange": "2016-07-20 14:00:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 60, - "twitters": "@unbit", - "id": 414, - "speakers": "Roberto De Ioris", - "title": "Modern OpenGL with Python", - "have_tickets": [ - true - ], - "type": "Talk (60 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Game-Development" - ], - "abstract_long": [ - "The OpenGL api is one of the oldest (and most used) graphics library in both the gaming and simulations world. In latest years the api has been extremely re-designed to support modern hardware features available in GPUs. \r\nCan we build realtime graphics application with Python using OpenGL ? Well, obviously Yes !\r\n\r\nThe talk will introduce how 2D and 3D graphics works, which math is required for mastering them and why strong hardware cooperation and heavy optimizations have been required since the very beginning of gaming development history.\r\n\r\nOnce the theory is \"almost\" clear, we can start talking about OpenGL, which problems tries to solve and how it evolved in more than 20 years.\r\n\r\nThe last (and the biggest) part of the talk will show how to interface Python with OpenGL, how to draw simple 2D sprites and how to load and show 3D models using simple lighting models. \r\n\r\nWarning: OpenGL shaders (the custom code you upload in the GPU) are written in GLSL, a pseudo-c dialect, so expect a bit of lower-level programming\r\n", - "", - "", - "" - ], - "abstract_extra": "The talk will be very focused on coding and a bit of CG theory. Very few slides will be produced (mainly to explain some graphics pattern or pipeline). The vast majority of time will be in the IDE/editor.", - "tag_categories": [ - "Everything Else" - ], - "emails": "roberto@20tab.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/modern-opengl-with-python", - "admin_type": "", - "companies": "20tab" - }, - "625": { - "abstract_short": "Monkey-patching is a dynamic modification of a class or a module at runtime.\r\n\r\nThe Python gives developers a great opportunity to use monkey-patching almost everywhere. But should developers do it? Is it a magic trick or a powerful tool? In this talk we will try to give the answers to these questions and try to figure out pros and cons of using monkey-patching.", - "sub_title": "Pros and cons of using monkey-patching in projects", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@itsmyprototype", - "id": 625, - "speakers": "Elizaveta Shashkova", - "title": "Monkey-patching: a magic trick or a powerful tool?", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Debugging", - "Python general", - "Best Practice", - "Development", - "Programming" - ], - "abstract_long": [ - "Monkey-patching is a dynamic modification of a class or a module at runtime.\r\n\r\nThe Python gives developers a great opportunity to use monkey-patching almost everywhere. But should developers do it? Is it a magic trick or a powerful tool? In this talk we will try to give the answers to these questions and try to figure out pros and cons of using monkey-patching.\r\n\r\nFirst of all we will learn what is monkey-patching in Python and consider some basic examples of using it.\r\n\r\nOf course, monkey-patching may cause some problems in the code. We will consider bad ways to use it and try to learn different types of problems monkey-patching may lead to.\r\n\r\nDespite of some bugs that may appear in a patched program, monkey-patching is used in a real life rather often. There are some reasons and motives to do it. We will consider the examples of using monkey-patching in real projects like `gevent`, in some other libraries and in testing. Also we will learn some monkey-patch tricks that helps to solve real-life problems in the Python debugger which is a part of the PyCharm and the PyDev.\r\n\r\nAfter that we will compare using of monkey-patching in Python to using it in an another dynamic language Ruby. Are there any differences between them? Is our reasoning correct for Ruby? \r\n\r\nFinally we will conclude all our thoughts and examples and try to give the answer to the question from title." - ], - "abstract_extra": "", - "tag_categories": [ - "Testing", - "Python", - "Best Practice and Use Cases", - "Programming", - "Programming" - ], - "emails": "elizabeth.shashkova@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/monkey-patching-a-magic-trick-or-a-powerful-tool", - "admin_type": "", - "companies": "JetBrains" - }, - "386": { - "abstract_short": "The talk covers the complexity of managing an asset transformation pipeline through tools like Grunt and NodeJS, especially during deploy, test suites or when a new development environment has to be configured from scratch, and showcase how this complexity can be dodged by using tools like WebAssets and DukPy.\r\n\r\nNo more need to keep around two languages, two package management systems and manage your dependencies between them by youself. Just pip install your app and have it working.", - "sub_title": "How your CoffeScript, TypeScript, LESS or SASS can be compiled without using nodejs at all", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@__amol__", - "id": 386, - "speakers": "Alessandro Molina", - "title": "Moving away from NodeJS to a pure python solution for assets", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Deployment/Continuous Integration and Delivery", - "Operations", - "Infrastructure", - "NodeJS", - "Testing" - ], - "abstract_long": [ - "When working with WebApplications it is common to rely on an asset management pipeline to compile scripts, minify css or preprocess images.\r\n\r\nMost of the tools available today rely on JavaScript to perform those steps and always forced Python developers to rely on NodeJS to have grunt perform the pipeline tasks, coffee-script to compile their CoffeeScript or lessc to build their css. This causes longer setup times for projects newcomers, complex development environment, working with two package managers and dependencies that you use once a week but still need to be there.\r\n\r\nThe talk will showcase the DukPy project and focus on how it is possible to build a pure python asset pipeline relying on DukPy to run javascript tools and WebAssets framework to perform the most common tasks that usually Nodejs and tools like Grunt handle for us, greatly reducing the development environment complexity and making its setup as simple as \u2018pip install\u2019.\r\n\r\nThe talk aims at explaining the complexity of managing an asset transformation pipeline through tools like Grunt, especially during deploy, test suites or when a new development environment has to be created, and showcase how this complexity can be dodged by using tools like WebAssets and DukPy.\r\n\r\nNo more need to keep around two languages, two package management systems and manage your dependencies between them by youself. Just pip install your app and have it working.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "Web", - "Testing" - ], - "emails": "alessandro.molina@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/moving-away-from-nodejs-to-a-pure-python-solution-for-assets", - "admin_type": "", - "companies": "AXANT" - }, - "676": { - "abstract_short": "Music transcription allows to convert an audio recording to musical notation through mathematical analysis. In the talk we will focus on transcribing a monophonic audio input and see how we can modify it on the fly. To achieve that, we need to determine pitch and duration of each note, and then use these parameters to create a sequence of MIDI events.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@aniawsz", - "id": 676, - "speakers": "Anna Wszeborowska", - "title": "Music transcription with Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Algorithms", - "Use Case", - "Science Track", - "Scientific Libraries (Numpy/Pandas/SciKit/...)" - ], - "abstract_long": [ - "Music transcription allows to convert an audio recording to musical notation through mathematical analysis. It is a very complex problem, especially for polyphonic music - currently existing solutions yield results with approx. 70% or less accuracy.\r\n\r\nIn the talk we will focus on transcribing a monophonic audio input and see how we can modify it on the fly.\r\nTo achieve that, we need to determine pitch and duration of each note, and then use these parameters to create a sequence of MIDI events. MIDI stands for _Musical Instrument Digital Interface_ and it encodes commands used to generate sounds by musical hardware or software.\r\n\r\nLet's see how to play around with sounds using Python and a handful of its powerful libraries. And let's do it in real-time!" - ], - "abstract_extra": "I have led a couple of workshops at conferences, such as:\r\nPolyConf 2014 - A polyglot approach to building applications\r\nPyconPL 2014 - Web scraping\r\nPolyConf 2015 - Tandems. Workshops for mothers and children\r\nPyconPL 2015 - Introduction to TDD\r\n\r\nand presented PyLadies Poland organization at Lightning Talks on varied conferences as well as during discussion panels or interviews.\r\n\r\nI have also led a series of workshops under the shield of PyLadies Poland (which I am a founder of), Geek Girls Carrots as well as mentored for DjangoGirls.\r\n\r\nI happen to talk a lot, especially about the stuff I am deeply involved with :)", - "tag_categories": [ - "Data Science", - "Best Practice and Use Cases", - ">>> Suggested Track", - "Data Science" - ], - "emails": "anna.wszeborowska@ableton.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/music-transcription-with-python", - "admin_type": "", - "companies": "Ableton" - }, - "502": { - "abstract_short": "Visual data exploration, e.g. of social networks, can be ugly manual work. The talk will be an introduction for the combined usage of NetworkX and Bokeh in a Jupyter Notebook to show how easy interactive network visualization can be.", - "sub_title": "Network Manipulation Meets Interactive Visualization", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 502, - "speakers": "Bj\u00f6rn Meier", - "title": "NetworkX Visualization Powered by Bokeh", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Web General" - ], - "abstract_long": [ - "During some work with social network analysis my favoured tool to study the networks was NetworkX. It provides a wide set of features and algorithms for network analysis, all in Python. But the functionality to visualize networks is not very strong and not to mention the missing interactive manipulation. However during the exploration of data: exporting, feeding an extra tool for visualization and then manipulating data manually was a tedious workflow.\r\n\r\nAs I also had the optional target of presenting networks in a browser, I improved this workflow by creating a Flask web application providing interfaces to my networks. On the browser side I created a javascript client based on D3.js. In retrospective the required programming effort in Python and also in Javascript was too much for such a task. And exactly this target, interactive visualization in a browser (and as bonus in a Jupyter Notebook), can be achieved quiet easy now with Bokeh.\r\n\r\nThe talk will be a step by step introduction, starting with the basic visualization of a network using Bokeh, NetworkX and a Jupyter Notebook. Next, how to create interactions with your network which will be used to change a network structure, e.g. a leaving person. As we want to see directly the impact of these changes in a network I will finally show how to update networks and visualize directly how the importance of the remaining people changes. And all this can be achieved with Python and maybe a bit of Javascript.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Web" - ], - "emails": "bjoern@opentrash.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/networkx-visualization-powered-by-bokeh", - "admin_type": "", - "companies": "Blue Yonder GmbH" - }, - "685": { - "abstract_short": "This is an introductory talk to modern brain image analysis tools.\r\nI will show how to use nipy tools to process one resting-state fMRI subject, perform intra-subject registration, ICA analysis to extract and visualize resting-state networks.\r\nIf the time allows me I will introduce an anatomical brain atlas and how to perform non-linear registration to do atlas-based segmentation.\r\n", - "sub_title": "", - "timerange": "2016-07-22 10:30:00, 2016-07-22 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@alex_savio", - "id": 685, - "speakers": "Alexandre Savio", - "title": "Nipy on functional brain MRI", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Science" - ], - "abstract_long": [ - "This is an introductory talk to modern brain image analysis tools.\r\nI will show how to use nipy tools to process one resting-state fMRI subject, perform intra-subject registration, ICA analysis to extract and visualize resting-state networks.\r\nIf the time allows me I will introduce how to perform non-linear registration to to atlas-based segmentation.\r\n\r\nThe outline of the talk:\r\n1. Present the COBRE dataset and show its characteristics.\r\n2. Use nibabel to open a NifTI file and see the matrix/volume parameters.\r\n3. Use nilearn.plotting to show the anatomical image.\r\n4. Use nipy to co-register the anatomical image to the fMRI image.\r\n5. Use nilearn to perform CanICA and plot ICA spatial segmentations.\r\n\r\nIf time allows:\r\n7. Present a brain anatomical atlas and its template.\r\n8. Present the tools needed for non-linear registration.\r\n9. Show the result of an atlas-based segmentation result.\r\n10. Use nilearn to calculate the resting-state functional connectivity matrix of the subject.\r\n11. Plot it with Bokeh.\r\n", - "", - "", - "" - ], - "abstract_extra": "-", - "tag_categories": [ - "Sciences" - ], - "emails": "alexsavio@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/nipy-on-functional-brain-mri", - "admin_type": "", - "companies": "TUM, ACPySS" - }, - "601": { - "abstract_short": "Bokeh is a unique library in its genre that lets users create beautiful and complex visualizations from Python. \r\n\r\nThe talks shows a comprehensive overview of the most powerful and popular Bokeh features, like: the optimized websocket based server for performant python callbacks from actions on the browser, Javascript callbacks written in Python (YES!!), bokeh command that lets target different outputs from the same input, JS transforms from Python, high-level charts, Geo support, ...", - "sub_title": "From how to look into billions of points to writing JS callbacks.. we'll look at Bokeh power!", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@b_smoke", - "id": 601, - "speakers": "Fabio Pliger", - "title": "OMG, Bokeh is better than ever!", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Big Data", - "Use Case", - "Open-Source", - "HTML5" - ], - "abstract_long": [ - "Bokeh is a unique library in its genre that lets users create beautiful and complex visualizations from Python (and other languages) to the browser without actually writing Javascript or HTML. \r\n\r\nIn the last year the Bokeh team have added a large number of unique features that are extremely powerful. Fully optimized websocket based server that enables performant python callbacks from actions on the browser, Javascript callbacks written in Python (YES!!), bokeh command that lets target different outputs from the same input, JS transforms from Python, high-level charts, Geo support, ...\r\n\r\nAnyone interested in powerful and easy visualizations should take a look at it. :)", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Data Science", - "Best Practice and Use Cases", - "Open Source", - "Web" - ], - "emails": "fabio.pliger@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/omg-bokeh-is-better-then-ever", - "admin_type": "", - "companies": "Continuum Analytics" - }, - "422": { - "abstract_short": "ZeroDB is an end-to-end encrypted database that lets users operate on encrypted data without exposing encryption keys to the database server. The familiar client-server architecture is unchanged, but query logic and encryption keys are pushed client-side. Since the server has no insight into the nature of the data, the risk of data being exposed via a server-side data breach is eliminated.", - "sub_title": "Search, sort, query, and share ciphertext without exposing encryption keys to the database serve", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/newmichwill", - "id": 422, - "speakers": "Michael Egorov", - "title": "Operating on Encrypted Data with ZeroDB", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Infrastructure", - "Open-Source", - "Cryptography", - "Databases" - ], - "abstract_long": [ - "ZeroDB is an open-source end-to-end encrypted database that enables clients to operate on (search, sort, query, and share) encrypted data without exposing encryption keys or cleartext data to the database server. The familiar client-server architecture is unchanged, but query logic and encryption keys are pushed client-side. Since the server has no insight into the nature of the data, the risk of data being exposed via a server-side data breach is eliminated. Even if the server is successfully infiltrated, adversaries would not have access to the cleartext data and cannot derive anything useful out of disk or RAM snapshots. \r\n\r\nZeroDB provides end-to-end encryption while maintaining much of the functionality expected of a modern database, such as full-text search, sort, and range queries. Additionally, ZeroDB uses proxy re-encryption and/or delta key technology to enable secure, granular sharing of encrypted data without exposing keys to the server and without sharing the same encryption key between users of the database.\r\n\r\nZeroDB can be used by enterprises to securely outsource on-premise database and storage infrastructure to cloud environments. Enterprises can encrypt client-side and keep keys on-premise, so that they're only pushing encrypted data to the cloud.\r\n\r\nAdditionally, developers can easily write end-to-end encrypted applications with strong security and privacy guarantees." - ], - "abstract_extra": "Interview on The Changelog: https://changelog.com/190/\r\n\r\nBlog: https://medium.com/@ZeroDB_/\r\n\r\nWhite paper: http://arxiv.org/abs/1602.07168\r\n\r\nGitHub org: https://github.com/zero-db\r\n", - "tag_categories": [ - "Security", - "DevOps", - "Open Source", - "Security", - "Databases" - ], - "emails": "michwill@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/operating-on-encrypted-data-with-zerodb", - "admin_type": "", - "companies": "ZeroDB" - }, - "551": { - "abstract_short": "There's a ton of digital ink spent on the subject of productivity. Choosing the right tools, the right editor, plugins, the right OS, keyboard shortcuts, mouse gestures, etc.\r\n\r\nWell, this is not what this talk is about! It's about everything else around your computer that can boost your productivity. It's about communication, getting things done, working less while doing more, sleeping good, and ultimately, staying healthy. ", - "sub_title": "Staying productive beyond your keyboard", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@nzupan", - "id": 551, - "speakers": "Nejc Zupan", - "title": "Optimize Thyself", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Tooling", - "Python general", - "Development", - "Programming" - ], - "abstract_long": [ - "There's a ton of digital ink spent on the subject of productivity. Choosing the right tools, the right editor, the right plugins, the right OS, mapping keyboard shortcuts, using mouse gestures, the list goes on and on.\r\n\r\nThis is not what this talk is about! It's about everything else around your computer that can boost or kill your productivity. It's about efficient communication, getting things done, working less while doing more, sleeping good, keeping your blood sugar at optimal levels, and ultimately, staying healthy. \r\n\r\nHow should I know? I'm juggling my time between my lifetime addiction to windsurfing , being a father and running a successful Python shop. My working time is very limited and I need to make the most of it. In this talk I'll go through what works for me and point to research on the subject.\r\n" - ], - "abstract_extra": "I've been giving talks (and an occasional keynote) regularly on various (mostly Plone related) events since around 2010:\r\n* https://vimeo.com/110423315\r\n* https://www.youtube.com/watch?v=HsGLLGeXFOU\r\n* https://www.youtube.com/watch?v=egwnZUmR6CE\r\n* https://plone.org/events/regional/past-events/pssa/2012\r\n* http://www.slideshare.net/zupo", - "tag_categories": [ - "Programming", - "Python", - "Programming", - "Programming" - ], - "emails": "nejc.zupan@niteoweb.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/optimize-thyself", - "admin_type": "", - "companies": "NiteoWeb Ltd." - }, - "603": { - "abstract_short": "Ever wondered how Python works under the hood? One way to learn about Python-the-C-program is by exploring the C API for writing Python bindings to native C libraries. In this talk, we will walk through a simple example of making a C library callable from Python code and vice versa. Along the way, we will encounter some essential features of Python: reference counting, memory management, and the inner-workings of objects and modules.", - "sub_title": "A Beginner's Guide to C Extensions for Python", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 603, - "speakers": "Sophia Davis", - "title": "Peeking into Python\u2019s C API", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Data Structures", - "CPython" - ], - "abstract_long": [ - "We all love Python. It\u2019s so elegant and easy to use as a programming language that we forget about the giant, complicated C program executing our strings of white-space sensitive code. For many Python programmers, this side of Python is just a big black box. It works well, so thankfully we don\u2019t *need* to go messing around inside... but what if you *want* to look into the inner workings of this powerful tool? One way to dive into the C-program-side of Python is by exploring the C API for writing Python bindings to native C libraries. In this talk I will explore the basics of this API as I recount my journey to make a simple C library callable from Python code, and allow C code to invoke objects defined in pure Python. Along the way, we will encounter some essential features of Python: reference counting, memory management, and the inner-workings of objects and modules. ", - "", - "", - "" - ], - "abstract_extra": "This talk was originally presented at the Amsterdam Python Meetup in February 2016.", - "tag_categories": [ - "Programming", - "Python" - ], - "emails": "scdgrapefruit@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/peeking-into-pythons-c-api", - "admin_type": "", - "companies": "Optiver Services B.V." - }, - "743": { - "abstract_short": "In the intersection of mechanics, mathematics and \"cool stuff that travels through space\" lies Astrodynamics, a beautiful branch of physics that studies the motion of spacecraft. In this talk we will describe poliastro, a pure Python library we can use to compute orbital maneuvers, plot trajectories and much more. The role of JIT compiling (using numba) to drop the previously used FORTRAN algorithms will also be discussed, as well as the importance of open source in scientific discoveries.", - "sub_title": "Python for Astrodynamics or how to compute complicated orbits using open source", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@astrojuanlu", - "id": 743, - "speakers": "Juan Luis Cano", - "title": "Per Python ad Astra", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Science", - "Algorithms", - "Open-Source", - "Physics" - ], - "abstract_long": [ - "In the intersection of mechanics, mathematics and \"cool stuff that travels through space\" lies Astrodynamics, a beautiful branch of physics that studies the motion of spacecraft. Rocket launches have never been so popular thanks to companies like Space X, more and more investors pay attention to aerospace startups and amazing missions explore our planet and our Solar System every day. In this talk we will describe poliastro, a pure Python library we can use to compute orbital maneuvers, plot trajectories and much more. The role of JIT compiling (using numba) to drop the previously used FORTRAN algorithms will also be discussed, as well as the importance of open source in scientific discoveries." - ], - "abstract_extra": "Versions of this talk already delivered in SciPy Latin America 2015 and 6th International Conference on Astrodynamics Tools and Techniques:\r\n\r\n- https://speakerdeck.com/pybonacci/per-python-ad-astra\r\n- https://indico.esa.int/indico/event/111/session/32/contribution/5\r\n", - "tag_categories": [ - "Sciences", - "Data Science", - "Open Source", - "Sciences" - ], - "emails": "juanlu001@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/per-python-ad-astra", - "admin_type": "", - "companies": "Indizen" - }, - "657": { - "abstract_short": "Python is a great language. Easy to learn, friendly to use, widely used.\r\n\r\nIt is not, however, renowned for being fast. In a lot of situations that does not matter. Sometimes it really does. This talk will introduce you to some tools and techniques for making sure your Python code becomes fast enough \u2013 without turning into a maintenance nightmare. Warning: may contain small bits of other languages.", - "sub_title": "how to write good, fast, pythonic code", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 657, - "speakers": "Burkhard Kloss", - "title": "Performant Python", - "have_tickets": [ - false - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Clean Code", - "Science Track", - "Best Practice", - "Educational Track" - ], - "abstract_long": [ - "Python is a great language. Easy to learn, friendly to use, widely used.\r\n\r\nIt is not, however, renowned for being fast. In a lot of situations that does not matter. Sometimes it really does. This talk will introduce you to some tools and techniques for making sure your Python code becomes fast enough \u2013 without turning into a maintenance nightmare. Fast code does not have to be unreadable - and when you're writing Python, it really pays of to think \"pythonically\".\r\n\r\nThat does mean using the included batteries, and utilising the ecosystem of tools around the language, too.\r\n\r\n Warning: may contain small bits of other languages." - ], - "abstract_extra": "Speaking experience: \r\nI have given talks at Nordevcon (http://www.nordevcon.com/) and the ACCU Conference (http://accu.org/index.php/conferences) over the last few years.\r\n\r\nThis talk is an extended and revised version of the presentation I gave at Nordevcon in February this year, with additional material.", - "tag_categories": [ - "Educational", - "Educational", - ">>> Suggested Track", - "Best Practice and Use Cases", - ">>> Suggested Track" - ], - "emails": "burkhard.kloss@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/performant-python", - "admin_type": "", - "companies": "" - }, - "474": { - "abstract_short": "When a program is not fast enough, we call on the profiler to save us. But what happens when the program is hard to profile, like for instance the Python Debugger? In this talk we're going dive deep into Vmprof, a Python profiler, and see how it helps us find out why a debugger can be slow. Once we find the culprit, we'll use Cython to optimise things. \r\n", - "sub_title": "Using Vmprof to profile a Python debugger and then optimise it with Cython", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/DmitryTrofimov", - "id": 474, - "speakers": "Dmitry Trofimov", - "title": "Profiling the unprofilable", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Cython", - "Best Practice", - "Performance", - "Case Study", - "Open-Source" - ], - "abstract_long": [ - "Profile is the main way to find slow parts of your application, and it's often the first approach to performance optimisation. While there are quite a few profilers, many of them have limitations. In this talk we're going to learn about the new statistical profiler for Python called Vmprof that is actively being developed by the PyPy team. We'll see how it is implemented and how to use it effectively. We will apply it to an open source project, the Pydev.Debugger, a popular debugger used in IDE's such as Pydev and PyCharm, and with the help of Cython which we'll also dig into, we'll work on optimising the issues we find.\r\n\r\nWhether it's a Python debugger, a Web Application or any other kind of Python development you're doing, you'll learn how to effectively profile and resolve many performance issues.\r\n\r\n\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "**Outline**\r\n\r\n - INTRODUCTION (1 MINUTE)\r\n - About myself\r\n - How am I related to the topic and why is it important\r\n - THE PROBLEM WITH PERFORMANCE (3 MINUTES)\r\n - Introducing Pydev.Debugger, a Python debugger\r\n - Why is it slow? Seems that we need to use a profiler\r\n - FIRST PROFILING ATTEMPT (7 MINUTES)\r\n - Python profilers overview: CProfile, yappi, line_profiler (4 minutes)\r\n - Using CProfile to profile the debugger (2 minute)\r\n - Why doesn't it work? (1 minute)\r\n - SECOND PROFILING ATTEMPT (10 MINUTES)\r\n - Statistical profilers (1 minute)\r\n - Introducing Vmprof profiler (3 minutes)\r\n - Profiling the debugger with Vmprof (6 minutes)\r\n - OPTIMIZATION (15 MINUTES) \r\n - What is Cython (5 minutes)\r\n - Using Cython to optimize the slowest parts of the debugger (6 minutes)\r\n - Profiling Cython-optimized code (2 minutes)\r\n - Making Cython optional to support wider range of Python versions (2 minutes)\r\n - CONCLUSION (2 MINUTES)\r\n - Q & A (5 MINUTES)\r\n\r\n*Note*: the talk length can be reduced to 30 minutes. That will mean having no questions, and very limited introduction about into technologies used (Cython and Vmprof profiler). \r\n\r\n*My knowledge about the topic*\r\nThe project used as an example: Pydev.Debugger.\r\nI am one of the maintainers of the project in collaboration with Fabio Zadrozny. The Cython optimization shown in talk is a real optimization performed recently to make the debugger faster and was our collaborative effort.\r\nThe profiler introduced in the talk: Vmprof.\r\nI am not a direct committer to the project, but I have collaborated with the PyPy team for the last half of a year on making it available on Windows and Mac OSX. I am quite aware of the tool usage limitations as well as it's implementation details.\r\n\r\n*Audience*\r\nThe talk is supposed to be also intelligible for novice developers as they can get out of it some general concepts about profiling and optimization. While developers with intermediate experience will know about implementation details and learn some best practices.\r\n\r\n*Slides*\r\nWhile the main example in the talk will be a real Python debugger, I will avoid showing the real code on my slides. Instead there will be simplified snippets that are able to express the main idea of the optimization needed to perform and the resulting outcome. I tried this approach in my past talk 'Python Debugger Uncovered' and it proved to be a good approach.\r\nThe real project will be visible only during profiling phase in the form of visual call tree and probably other diagrams.\r\n\r\n*Past speaking experience*\r\nI gave a 30 minutes talk called \"Python Debugger Uncovered\" about implementation details of Python debugger at Europython 2014 in Berlin and at PyCon APAC 2015 in Taipei. There are video recordings of this talk: https://www.youtube.com/watch?v=DHf-6gW3-qs https://www.youtube.com/watch?v=HfzdM7rsKbU\r\nI gave a 30-minute talk 'Can Rust make your Python shine?' about Rust programming language and Python profiling at Europython 2015 in Bilbao: https://www.youtube.com/watch?v=weAxEoEfl0M&feature=youtu.be\r\nI presented a 45-minute live-demo about features of PyCharm IDE at Python Unconference 2015 in Hamburg\r\nI presented a 30-minute talk about PyCharm at PyCon Ukraine 2011\r\nI gave several lightning talks about PyCharm and other open-source projects at difference conference including PyCon and DjangoCon Europe.\r\n\r\n", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Programming", - "Case Study", - "Open Source" - ], - "emails": "trofimov.dmitry@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/profiling-the-unprofilable", - "admin_type": "", - "companies": "JetBrains" - }, - "613": { - "abstract_short": "Failures are the bane of scaling a modern web service and can cause serious pain for end users! Lucky for us, there are techniques that can help protect your product handle failures in subsystems gracefully. This talk will dive into one of these in depth, the Circuit Breaker pattern, and explore the options it gives us for keeping all our users safe. We will be focusing on several real-world problems and options for how to implement your circuit breaker setup in nice, readable python code.", - "sub_title": "Handling errors in production with shocking ease", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@scott_triglia", - "id": 613, - "speakers": "Scott Triglia", - "title": "Protect your users with Circuit Breakers", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web General", - "Distributed Systems", - "Web Track" - ], - "abstract_long": [ - "The inevitability of failures is the bane of scaling any modern web service and can cause serious pain for end users! Lucky for us, there are techniques that can help protect your product handle failures in subsystems gracefully. This talk will dive into one of these in depth, the Circuit Breaker pattern, and explore the options it gives us for keeping our users safe.\r\n\r\nWe will be focusing on several real-world problems and how they can be addressed by circuit breakers. You should expect to leave the talk with details on simple circuit breakers as well as understanding how they can be adapted for more complex situations. We\u2019ll also discuss some options for how to implement your circuit breaker in readable python.\r\n\r\n\r\n**Contrived FAQ time!**\r\n\r\n**I don\u2019t know what Circuit Breakers are, should I come?**\r\nDefinitely! We\u2019re going to start from scratch and work our way up. Only requirement is basic familiarity with backend services receiving and making HTTP requests.\r\n\r\n**I totally know what Circuit Breakers are, should I come?**\r\nDefinitely! After the intro, the main meat of the talk will be working through a series of more advanced situations and talking about how we can alter the basic circuit breaker setup to address them. \r\n\r\n**I want real-world advice, not made up hypotheticals!**\r\nWell that\u2019s not really a question, but you\u2019ll be happy to know that the examples we\u2019ll discuss come straight from my experience at Yelp. They should be very realistic and broadly applicable.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "I spoke at Europython, PyDX, PyconCA, and PyconAU in 2015. Videos are Europython (https://www.youtube.com/watch?v=z3_HorshzJ4), PyconAU (http://www.pyvideo.org/video/3964/arrested-development), and PyconCA (https://www.youtube.com/watch?v=RMt43wyg-zg).\r\n\r\nMy team at Yelp is focused on customer-to-business transactions, so we have a ton of experience with applying these types of patterns to safely minimize costly failures in production. I\u2019m excited to get a chance to share this specific technique with the EuroPython audience :)\r\n\r\nNot requirements, but ideal preferences for the talk time.\r\n* early in the conference schedule\r\n* not in the last session of any day", - "tag_categories": [ - "Web", - "DevOps", - ">>> Suggested Track" - ], - "emails": "scott.triglia@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/protect-your-users-with-circuit-breakers", - "admin_type": "", - "companies": "Yelp" - }, - "395": { - "abstract_short": "As developers we all love well-documented, well-tested packages. If we do the same for our code it is easier for others to re-use our hard work, and maybe even contribute. We will take a quick look on how to do this using popular tools and only a small investment of time. With Github and some simple tools, setting up a well-groomed package doesn't have to be difficult.", - "sub_title": "", - "timerange": "2016-07-21 14:00:00, 2016-07-21 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 395, - "speakers": "Marko Samastur", - "title": "Publish your code so others can use it in 5 easy steps", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Best Practice", - "PyPi", - "Open-Source", - "Community" - ], - "abstract_long": [ - "Every Python open-source developer wants their software to be used. As developers, we trust software that is tested and well-documented.\r\n\r\nIn this talk we'll go through 5 steps for how to do this for your own packages.\r\n\r\nWe will take a quick look on how to do this using popular tools and small investment of time:\r\n\r\n- Write a setup.py script for a pure Python package\r\n- Set up py.test, tox and coverage to test our package with multiple versions of Python\r\n- Configure Github to use Travis CI & coveralls.io to automatically test our package every time we commit\r\n- Register and publish our package to PyPI\r\n- Setup our documentation on ReadTheDocs\r\n\r\n" - ], - "abstract_extra": "**Objectives**\r\n\r\nMy goal is to inspire a newcomer to PyPI and the Github ecosystem with enough knowledge to get them off the ground in creating pure Python package. Using py.test, tox, and coverage combined with Travis CI and coveralls for solid testing with published results. Also show how easy it is to publish a package to PyPI, check requirements are up-to-date using requires.io, publish documentation on RTFD. \r\n\r\n\r\n**Talk outline**\r\n\r\nIntroduction (1min / 1min)\r\n\r\n- why you\u2019d want this\r\n- tools to use\r\n- there\u2019s a github repo with details (notes not necessary)\r\n\r\nBasics of setup.py (5min / 6min)\r\n\r\n- anatomy of a pure Python setup.py\r\n- setting requirements\r\n- specifying packages to include\r\n- maybe: quick overview of Trove identifiers\r\n- maybe: dealing with versions (have one place to set it)\r\n\r\nTesting locally (5 min / 11min)\r\n\r\n- py.test setup\r\n- checking test coverage\r\n- testing with various Python versions with tox\r\n\r\nCI with Travis (5min / 16min)\r\n\r\n- registering account on travis-ci.org and adding project\r\n- basic .travis.yml configuration\r\n\r\nAdding coverage check with coveralls.io (3min / 19min)\r\n\r\n- registering account and adding project\r\n- changes to .travis.yml (install coveralls package; publish with coveralls command)\r\n\r\nPublishing on PyPI (3min / 22min)\r\n\r\n- registering package\r\n- pushing changes\r\n\r\nPublishing on ReadTheDocs (5min / 27min)\r\n\r\n- registering Github project\r\n- Sphinx and sphinx-quickstart; RTD configuration tweaks\r\n- just some pointers to some docs on how to write reStructuredText\r\n\r\nConclusion (2min / 29min)\r\n\r\n- what wasn\u2019t covered (documentation, mixed packages\u2026)\r\n- where to get more information (cookie cutter package)\r\n\r\n**Previous experience**\r\nI've attended few EuroPythons, a number of DjangoCons and many local Python Meetups. I have presented to large audiences (500+) before, including on technical subjects (Web 2.0 Expo Europe 2008).\r\n\r\nBecause talk itself covers a lot of information that cannot be adequately presented in 30 minutes (or 45) it will be supported with a template repository on Github including cookiecutter script to produce a documented working setup for covered (and not covered) services.\r\n\r\nI have also already published a few packages on PyPI.\r\n\r\n", - "tag_categories": [ - "Educational", - "Best Practice and Use Cases", - "Python", - "Open Source", - "Community" - ], - "emails": "markos@gaivo.net", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/publish-your-code-so-others-can-use-it-in-5-easy-steps", - "admin_type": "", - "companies": "" - }, - "661": { - "abstract_short": "Pygame Zero is a new game engine for education, built on top of Pygame. It makes writing your first games extremely simple, while saving beginners from certain potential pitfalls. Daniel will introduce Pygame Zero, walk through creating a simple game, and discuss the background for Python in education and the design philosophy behind Pygame Zero.", - "sub_title": "A zero-boilerplate game framework", - "timerange": "2016-07-18 16:00:00, 2016-07-18 16:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@lordmauve", - "id": 661, - "speakers": "Daniel Pope", - "title": "Pygame Zero", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Educational Track", - "Game-Development" - ], - "abstract_long": [ - "Pygame Zero is a new game engine for education, built on top of Pygame. It makes writing your first games extremely simple, while saving beginners from certain potential pitfalls. This talk will introduce Pygame Zero, walk through creating a simple game, and discuss the background for Python in education and the design philosophy behind Pygame Zero.\r\n\r\nPygame is a powerful set of libraries for graphics, sound, input and more. But it is just a library: each program needs to import and set up the libraries, implement a game loop and load resources among numerous other concerns. While seasoned Pythonistas have no trouble with this, teachers told us that they found it difficult to teach with Pygame. There is simply too much boilerplate involved, and getting students to reproduce the boilerplate perfectly before useful lessons can begin takes too much time out of a 40-minute lesson.\r\n\r\nPygame Zero is simple enough that a lesson can be broken down into bitesize steps where meaningful progress can be made with just a couple of lines of code at a time." - ], - "abstract_extra": "This talk will be a revised version of a talk I've already given at the Raspberry Pi Birthday weekend and which has also been accepted for Pycon US.\r\n\r\nI gave a brief lightning talk at Europython 2015 and this will be an extended version that introduces several of the features of Pygame Zero\r\n\r\nI have spoken at various Python conferences including Europython, Pycon UK and lightning talks at Pycon US and the London Python Dojo. I am a two-time winner of the Pyweek games programming contest.", - "tag_categories": [ - "Educational", - ">>> Suggested Track", - "Everything Else" - ], - "emails": "lord.mauve@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pygame-zero", - "admin_type": "", - "companies": "Mauve Internet" - }, - "741": { - "abstract_short": "\r\n\r\n - New features of pytest's upcoming major version 3.0\r\n - Breaking changes and other important information\r\n - Recap of the first developer sprint in June, 2016\r\n - Thank you notes to all who have contributed to the fundraiser\r\n\r\n", - "sub_title": "Demonstration, New Features, Important Bugfixes & Sprint Recap", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@hackebrot", - "id": 741, - "speakers": "Raphael Pierzina", - "title": "Pytest 3.0", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Open-Source", - "Documentation", - "Testing", - "Community" - ], - "abstract_long": [ - "Pytest is a mature testing framework for Python that is developed by a thriving and ever-growing community of volunteers. Following the principle of \"no API is the best API\" it uses plain assert statements and regular Python comparisons. Writing tests with pytest requires little to no boilerplate code and powerful features allow easy parametrization and intelligent test selection.\r\n\r\nIn this talk we will have an in-depth look at new features of pytest 3.0 and live demo possible use cases. We will also learn about important bugfixes and other enhancements of the upcoming major release. Backwards-incompatible changes will be addressed and changes made to the documentation will be highlighted.\r\n\r\nIf you are already familiar with pytest, you will be happy to hear about significant improvements of the fixture and hook system but also what's in store for a better integration with tox, an important tool that allows testing across different Python versions.\r\n\r\nIn June, 2016 more than 25 Pythonistas from around the globe gather in Freiburg, Germany to work on the release and set the path for future developments of the core framework. This is a big step forward for the project made posssible by a fundraiser that reached 108% of it's initial goal.\r\n\r\nI will share our experiences from the developer sprint while they are still fresh and explain why these events are incredibly important for a community and give advice on how to organize your own." - ], - "abstract_extra": "For more information on the sprint see: https://www.indiegogo.com/projects/python-testing-sprint-mid-2016\r\n\r\nIf there are no more 45 min slots available, I can skip over live demos of new features to reduce the talks duration to 30 min.", - "tag_categories": [ - "Open Source", - "Programming", - "Testing", - "Community" - ], - "emails": "raphael.pierzina@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pytest-30", - "admin_type": "", - "companies": "FanDuel" - }, - "607": { - "abstract_short": "Todo programador tiene inter\u00e9s para que su software sea fiable y estable. Haremos una sencilla introducci\u00f3n a pytest con el caso de uso de un site internacional para el que generamos cientos de tests y redujimos dr\u00e1sticamente los errores en producci\u00f3n. Con este simple ejemplo demostraremos que no siempre necesitamos hacer TDD para disfrutar de las ventajas de un framework de testing.", - "sub_title": "O como un framework de testing puede substituir las p\u00edldoras para dormir", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@paurullan", - "id": 607, - "speakers": "Pau Ru\u0140lan Ferragut", - "title": "Pytest desde las trincheras", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Best Practice", - "Tooling", - "Case Study", - "Test Libraries (pyTest/node/...)", - "Testing" - ], - "abstract_long": [ - "Las metodolog\u00edas de desarrollo que incorporan la escritura de pruebas desde el momento cero tienden a generar c\u00f3digo m\u00e1s estable y fiable pero la realidad es que muchas veces no gozamos del privilegio ni del presupuesto para escribir tests para todas las caracter\u00edsticas de nuestro producto. Pero si tenemos a nuestra disposici\u00f3n herramientas de testing que nos permitan eliminar los errores evitables como romper enlaces en la p\u00e1gina de inicio nos quitaremos el miedo a hacer pases a producci\u00f3n y generaremos m\u00e1s valor al negocio.\r\n\r\nLa charla no tiene pretensi\u00f3n de ser ni una introducci\u00f3n al test driven development ni de las complejidades de qu\u00e9 es un buen o mal test. El objetivo es animar a todo aquel que todav\u00eda pruebe sus proyectos manualmente a intentar alg\u00fan grado de automatizaci\u00f3n. Para ello la estructura ser\u00e1 una presentaci\u00f3n de pytest, exponer algunos plugins altamente recomendados y centrarse en el caso de uso de una p\u00e1gina con presencia en ocho pa\u00edses donde automatizamos un mont\u00f3n de comprovaciones simples que nos permitieron reducir los errores evitables.\r\n" - ], - "abstract_extra": "Este charla tambi\u00e9n la he propuesto en ingl\u00e9s con el t\u00edtulo \u00abPytest from the trenches\u00bb", - "tag_categories": [ - "Best Practice and Use Cases", - "Programming", - "Case Study", - "Testing", - "Testing" - ], - "emails": "paurullan@gmail.com", - "language": "Spanish", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pytest-desde-las-trincheras", - "admin_type": "", - "companies": "APSL" - }, - "580": { - "abstract_short": "How does the experienced python programmer fair when faced with python's \"new\" way of doing async programming for the first time? \r\n\r\nThis talk details the different ways python provides for attacking the problem of asynchronous programming and focuses on the best practices for the future (as of python 3.4 and 3.5)", - "sub_title": "Do you need to be a wizard to use it?", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 580, - "speakers": "Nicolas Lara", - "title": "Python and Async programming", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Python 3", - "Best Practice", - "Go-Lang", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "How does the experienced python programmer fair when faced with python's \"new\" way of doing async programing in for the first time? Do we all know how and when to use Futures, yield from, asyncio, coroutines, the async and await keywords, eventloops, and others?\r\n\r\nA lot has changed in recent versions of Python when it comes to async programming, concurrency, and parallelism. We still have very different ways of approaching the problem in each version, but they are finally (as of python 3.4/3.5) converging to a standard. \r\n\r\nThis talk explores, from the perspective of an experienced python programmer with little to no experience in async programming, what the \"one obvious way\" to do async programming in Python is supposed to be. It does so but analysing examples of different categories of async problems we may want to solve and what the correct way to solve them with the latest versions of Python would be (along with the trade offs of different approaches).\r\n\r\nThe examples include generic CPU-bound problems, IO-bound problems, and \"both-bound\" problems; along with common tasks as building a simple server, scraping, deferring a web response, and traversing graphs.\r\n\r\nWhen useful, I compare the solutions with the approach we would take in languages that have been design for- and are known to be good at async programming like Javascript and Go. " - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Best Practice and Use Cases", - "Other Programming Languages", - "Programming" - ], - "emails": "nicolaslara@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-and-async-programming", - "admin_type": "", - "companies": "Lincoln Loop" - }, - "647": { - "abstract_short": "This talk explains how Ableton\u2019s developers use Python to build and test C, C++ and Objective-C code. Our \"build-system\" is a collection of Python scripts that simplify our workflows, and help us write better software. The top-level scripts share a common design which makes them easy to use, maintain and extend. This talk describes the essence of that design, so you can apply it to your own project.", - "sub_title": "", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 647, - "speakers": "Alain Martin", - "title": "Python as the keystone of building and testing C++ applications", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Software Design", - "Tooling", - "Case Study", - "C-Languages", - "Command-Line" - ], - "abstract_long": [ - "At Ableton, we make [Live][1], [Push][2] and [Link][3], unique software and hardware for music creation and performance. Live is a C++ desktop application built from a 15-year old code base. Push is an instrument embedding a multicolor display which renders a [Qt Quick][4] scene powered by [Qt][5]. Link is a technology that keeps music devices in time and is available to app developers as [LinkKit][6], an iOS SDK. \"But what does all that have to do with Python?\", you might ask. \r\n\r\nThis talk answers that question by explaining how our developers use Python to build and test C, C++ and Objective-C source code. Based on [GYP][7], what we call \"build-system\" is a collection of Python scripts that simplify our workflows, and help us write better software. The three top-level scripts, \"configure.py\", \"build.py\" and \"run.py\", share a common design which makes them easy to use by developers, as well as easy to maintain and extend. This talk describes the essence of that design, so you can apply it to your own project.\r\n\r\n[1]: https://www.ableton.com/live/\r\n[2]: https://www.ableton.com/push/\r\n[3]: https://www.ableton.com/link/\r\n[4]: https://www.qt.io/qt-quick/\r\n[5]: http://www.qt.io/\r\n[6]: https://ableton.github.io/linkkit/\r\n[7]: https://gyp.gsrc.io/", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Programming", - "Programming", - "Case Study", - "Other Programming Languages", - "Programming" - ], - "emails": "alain.martin@ableton.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-as-the-keystone-of-building-and-testing-c-applications", - "admin_type": "", - "companies": "Ableton" - }, - "536": { - "abstract_short": "Have you ever wondered how Django models work? I'll present a story of data structure transformation. I will talk about ideas from Django models that I used and how I rediscovered descriptor API. I will talk about printing, serializing, comparing data structures and some other examples, where descriptors excel at making declarative code easier to write.", - "sub_title": "How to use Python descriptor API and let testers skip the boring work", - "timerange": "2016-07-18 14:15:00, 2016-07-18 14:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 536, - "speakers": "Adrian Dziubek", - "title": "Python Descriptors for Better Data Structures", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Django", - "Case Study", - "Testing" - ], - "abstract_long": [ - "I worked as a developer of a testing framework for a C++ server. The framework tested binary protocol implemented by the server.\r\n\r\nMost of the work involved testers preparing test cases. The data format was primitive structures -- hard to read and easy to break. Field order and all the data had to be entered manually.\r\n\r\nAt the time, I have already seen the better world -- the models from Django. Have you ever wondered how those work? Step by step, I used the ideas from there to make the structures more friendly and on my way I rediscovered descriptors.\r\n\r\nI'll show in incremental steps, how:\r\n\r\n - used keyword arguments to lower signal to noise ratio,\r\n - order of definition for sorting the fields,\r\n - realized that `__call__` is used instead of assignment,\r\n - used `__setattribute__` as first step to extend primitive fields,\r\n - discovered that I'm actually reimplementing descriptors,\r\n\r\nand how it lead me to:\r\n \r\n - implement printing in a way that is friendly to regression testing,\r\n - use diff library for less code and better results,\r\n - implement more readable validation.\r\n\r\nI want to show how descriptors work in Python and how they enable declarative style of programming. By the end of the talk I want you to understand what is at the core of the magic behind field types used by object relational mappers like Django.\r\n\r\n" - ], - "abstract_extra": "That would be my first talk for a bigger audience. I have some experience from presenting at the university courses and playing guitar at school, so I'm hopeful about my stage fright. I'll be training with presenting this subject at my company's lightning talks and a local Python group.", - "tag_categories": [ - "Application Frameworks", - "Case Study", - "Testing" - ], - "emails": "adrian.dziubek+europython@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-descriptors-for-better-data-structures", - "admin_type": "", - "companies": "STX Next" - }, - "455": { - "abstract_short": "I would like to talk about modern Astronomy where I would give a brief history of Astronomy. I will answer some question: \r\nWhat do we use computers for today in astronomy? \r\nWhere is Python\u2019s place in today\u2019s science? \r\nIs Python is the best language for scientific computation? \r\nI would like to give a short introduction into AstroPy module. Finally I would like presents some result of my research where Python was used to create data.\r\n", - "sub_title": "", - "timerange": "2016-07-21 10:30:00, 2016-07-21 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 455, - "speakers": "S\u0142awomir Piasecki", - "title": "Python in Astronomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Science", - "Python general", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Physics" - ], - "abstract_long": [ - "For ages people have been watching the sky, and tried to learn something about all those mysterious lights. In ancient times, scientist used mostly their naked eyes to watch what happened in the night sky. Astronomy is one of the oldest fields in science. \r\nEverything changed when Galileo invented his lunette. Thanks to thi, we were able to proof Copernicus\u2019 new model of the solar system with the sun in the center. \r\n\r\nThe next big step in Astronomy was using computers. Where there are computers and Astronomy, there is a place for programming. For many years astronomers were mostly using Fortran and C/C++. Both are suited to numeric computation and scientific computing. Since they are structured programming language, that makes them very valuable for science.\r\n\r\nOver the past decade, Python has started to be used by more and more people in astronomy. But is there a place in Astronomy for Python, as it is not as fast as Fortran or C/C++? In Python there is a module called AstroPy which helps astronomers in their work. \r\n\r\nMatPlotLib is one of the most popular library use in astronomy. This tool helps created very sophisticated plots and graphs.\r\n\r\nFinally I would like talk about some research I did using Python. For research, we decided to use AUTO. It is a hybrid of Fortran and Python, to compute bifurcation points in mathematical models. In Python we introduce mathematical model, ODE and initial parameters. Fortran does all the computation.\r\n", - "", - "", - "" - ], - "abstract_extra": "I have been giving talk during my education career in Spain and USA. \r\nLast year (2015) I gave my first presentations about python in Polish PyCon. Since I got positive feedback I would like to try now in bigger event.", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Data Science", - "Sciences" - ], - "emails": "slawomir.piasecki@stxnext.pl", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/python-in-astronomy", - "admin_type": "", - "companies": "STX Next" - }, - "619": { - "abstract_short": "On February 11th 2016 Ligo-Virgo collaboration gave the announce of the discovery of Gravitational Waves, just 100 years after the Einstein\u2019s paper on their prediction.\r\nA brief introdutcion to data analysis methods used in Gravitational Waves (GW) communities \r\nPython notebook describing how to analyze the GW event detected on 14 September 2015. \r\n\r\n", - "sub_title": "", - "timerange": "2016-07-19 12:00:00, 2016-07-19 12:45:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@ElenaCuoco", - "id": 619, - "speakers": "Elena Cuoco", - "title": "Python in Gravitational Waves Research Communities", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Jupyter/iPython Notebook", - "Data Science" - ], - "abstract_long": [ - "On February 11th 2016 Ligo-Virgo collaboration gave the announce of the discovery of Gravitational Waves, just 100 years after the Einstein\u2019s paper on their prediction.\r\nAfter an introduction on Gravitational Waves, on Virgo Interferometric detector, I will go through the data analysis methods used in Gravitational Waves (GW) communities either for the detector characterization and data condition or for the signal detection pipelines, showing the use of python we make.\r\nAs practical example I will introduce a python notebook describing the GW event detected on 14 September 2015 and I will show a few of signal processing techniques.\r\n\r\n", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Python", - "Data Science" - ], - "emails": "elena.cuoco@ego-gw.it", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/pyhton-in-gravitational-waves-research-communities", - "admin_type": "", - "companies": "European Gravitational Observatory" - }, - "570": { - "abstract_short": "Approach to topics, evolution, correlations through the lyrics of some of the greatests rock bands of all times. We will talk about the different phases of this personal project, in which I approach to a passion through a scientific method. \r\n\r\nThis is a project that combine different techniques: \r\n- web crawling\r\n- NoSQL \r\n- Natural Language Processing \r\n- Data visualization", - "sub_title": "Analysing the lyrics of the greatest rock bands of all time", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "pydata", - "duration": 30, - "twitters": "@claudiaguirao", - "id": 570, - "speakers": "Claudia Guirao Fern\u00e1ndez", - "title": "Python, Data & Rock'n'Roll", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "Visualization", - "Natural Language Processing", - "MongoDB", - "Data Science", - "Beginners" - ], - "abstract_long": [ - "Have you ever wonder how David Bowie has evolved into the theme of his songs throughout their studio albums? Want to find out in what looks like Nirvana and Pink Floyd?\r\n\r\nApproach to topics, evolution, correlations through the lyrics of some of the greatests rock bands of all times. We will talk about the different phases of this personal project, in which I approach to a passion through a scientific method. \r\n\r\nThis is a project that combine different techniques: \r\n- Web crawling\r\n- NoSQL \r\n- Natural Language Processing \r\n- Data visualization\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Data Science", - "Databases", - "Data Science", - "Educational" - ], - "emails": "guirao.claudia@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/python-data-rocknroll", - "admin_type": "", - "companies": "Kernel Analytics" - }, - "736": { - "abstract_short": "Query Embeddings is an unsupervised deep learning based system, built using Python and open source libraries (Annoy, keyvi etc.) which recognizes similarity between queries and their vector representations, for a web scale search engine integrated within Cliqz browser [https://cliqz.com/en]. It improves recall for previously unseen queries and is one of the many key components of our search stack. The framework be utilized by other low latency systems involving vector representations.\r\n", - "sub_title": "Web Scale Search powered by Deep Learning and Python", - "timerange": "2016-07-18 11:15:00, 2016-07-18 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@codekee", - "id": 736, - "speakers": "Ankit Bahuguna", - "title": "Query Embeddings: Web Scale Search powered by Deep Learning and Python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Natural Language Processing", - "Deep Learning", - "Open-Source", - "Data", - "Machine-Learning" - ], - "abstract_long": [ - "A web search engine allows a user to type few words of query and it presents list of potential relevant results within fraction of a second. Traditionally, keywords in the user query were fuzzy-matched in realtime with the keywords within different pages of the index and they didn't really focus on understanding meaning of query. Recently, Deep Learning + NLP techniques try to _represent sentences or documents as fixed dimensional vectors in high dimensional space_. These special vectors inherit semantics of the document.\r\n\r\nQuery embeddings is an unsupervised deep learning based system, built using Python, Word2Vec, Annoy and Keyvi (https://github.com/cliqz-oss/keyvi) which recognizes similarity between queries and their vectors for a web scale search engine within Cliqz browser. (https://cliqz.com/en)\r\n\r\n![][1]\r\n\r\nThe goal is to describe how query embeddings contribute to our existing python search stack at scale and latency issues prevailing in real time search system. Also is a preview of separate vector index for queries, utilized by retrieval system at runtime via ANNs to get closest queries to user query, which is one of the many key components of our search stack.\r\n\r\n![][2]\r\n\r\nPrerequisites: Basic experience in NLP, ML, Deep Learning, Web search and Vector Algebra. Libraries: Annoy. \r\n \r\n[1]: https://sites.google.com/site/netankit/1.png\r\n[2]: https://sites.google.com/site/netankit/3.png" - ], - "abstract_extra": "**Talks:**\r\n - \"Deep Dive into Tensorflow\" as an Invited speaker at TensorFlow and Open AI Meetup, Stylight GmbH, Munich, March 2016. [https://www.youtube.com/watch?v=T0H6zF3K1mc]\r\n - \"Sentiment Analysis: Machine learning using Python Scikit-Learn\", delivered at FOSS-ASIA. March 2015 at NUS, Singapore. [https://speakerdeck.com/netankit/sentiment-analysis-machine-learning-with-python-scikit-learn]\r\n- \"Breaking the Wall of Building Effective Communities\" at Falling Walls Lab, Berlin, November 2014 [[https://www.youtube.com/watch?v=y6y-10BQg9o][1]]\r\n\r\n**Master Thesis / IDP :** \r\n- \"Deep Learning Methods for Sentiment Analysis\", conducted jointly at TU Munich and LMU Munich, Germany. October 2015\r\n\r\n**Publications [ACL Anthology]:**\r\n - Facilitating multi-lingual sense annotation: Human mediated lemmatizer, Estonia (GWC) 2014\r\n - HinMA: Distributed Morphology based Hindi Morphological Analyzer, India (ICON) 2014\r\n\r\n**Others:** \r\nOfficial contributor, Mozilla Project: www.mozilla.org/credits/\r\nMozilla Reps (REMO) Profile: https://reps.mozilla.org/u/netankit/\r\n\r\n [1]: https://www.youtube.com/watch?v=y6y-10BQg9o\r\n", - "tag_categories": [ - "Data Science", - "Data Science", - "Open Source", - "", - "Data Science" - ], - "emails": "ANKITBAHUGUNA@outlook.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/query-embeddings", - "admin_type": "", - "companies": "Cliqz GmbH" - }, - "614": { - "abstract_short": "GPIO Zero is a new friendly API for physical computing with Raspberry Pi. Like PyGame Zero, it's a minimal boilerplate module that lets you dive straight in and build things with physical components. The Pythonic API was designed for use in education, and was tried and tested with teachers. This talk is the story of how the library came about, how it was developed and I provide a close look at some of its cleverest features.", - "sub_title": "Developing a new friendly Python API for physical computing with Raspberry Pi", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@https://twitter.com/ben_nuttall", - "id": 614, - "speakers": "Ben Nuttall", - "title": "Raspberry Pi GPIO Zero", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Raspberry PI", - "Open-Source", - "Internet of Things (IoT)", - "Community" - ], - "abstract_long": [ - "I work at the Raspberry Pi Foundation and regularly give workshops on physical computing with Python to kids and teachers and we always found the existing GPIO library difficult to teach with due to its broad scope and verbose nature. Although technically possible to do all sorts of projects, it had a difficult learning curve and even the most basic of examples required explanation of code and electronics concepts.\r\n\r\nGPIO Zero is a new friendly API for physical computing with Raspberry Pi. Like PyGame Zero, it's a minimal boilerplate module that lets you dive straight in and build things with physical components. Simple interfaces are provided for everyday components with obvious features provided with guessable method names. The Pythonic API was designed for use in education, and was tried and tested with teachers. This talk is the story of how the library came about, how it was developed and I provide a close look at some of its cleverest features. The initial batch of work on the library was done by two people in different cities, with all features and changes discussed in length in a series of about 100 GitHub issues over 2 months, and additional features and expansions have been implemented since launch.\r\n\r\nGPIO Zero is now the Foundation's recommended method of interfacing with physical components, and comes pre-installed in the Raspbian Jessie image.\r\n\r\nDocumentation is provided at http://gpiozero.readthedocs.org/" - ], - "abstract_extra": "I wrote a blog post on this topic: http://bennuttall.com/gpio-zero-developing-a-new-friendly-python-api-for-physical-computing/\r\n\r\nI have given a number of talks on this subject to a range of audiences. At EuroPython, this will be the developer focused version of the talk, based on: https://speakerdeck.com/bennuttall/gpio-zero-developing-a-friendly-python-api-for-physical-computing-campug\r\n\r\nI spoke at EuroPython 2014 and 2015, PyConUK 2014 and 2015, PyCon Ireland 2014, and gave keynotes at PySS 2014 and EuroSciPy 2014.\r\n\r\nMy talks are documented at http://bennuttall.com/talks/\r\n\r\nNote: although this talk is related to Education, it's more focused at developers.", - "tag_categories": [ - "Educational", - "Hardware", - "Open Source", - "Hardware", - "Community" - ], - "emails": "ben@raspberrypi.org", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/raspberry-pi-gpio-zero", - "admin_type": "", - "companies": "Raspberry Pi Foundation" - }, - "640": { - "abstract_short": "As Armin Ronacher pointed out in a recent blog post, there is more to Python's regular expression module than meets the eye. His post made me wonder what other \u201chidden gems\u201d are stashed away in Python\u2019s `re`. In the talk I share what I\u2019ve learned about the inner workings of this extremely popular and heavily used module.", - "sub_title": "A look at the inner workings of the `re` module.", - "timerange": "2016-07-19 14:30:00, 2016-07-19 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 640, - "speakers": "Ilia Kurenkov", - "title": "re-Discovering Python's Regular Expressions", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Python general", - "CPython" - ], - "abstract_long": [ - "Anyone who has used Python to search text for substring patterns has at least heard of the regular expression module. Many of us use it extensively for parsers and lexers, extracting information .\r\nAnd yet we know surprisingly little about its inner workings, as Armin Ronacher demonstrated in his recent blog post, \u201cPython's Hidden Regular Expression Gems\u201d. Inspired by this, I want to dive deeper into Python\u2019s `re` module and share what I find with folks at EuroPython. My goal is that at the end of the day most of us walk away from this talk with a better understanding of this extremely useful module.\r\n\r\nHere are a few examples of the kinds of things I would like to cover:\r\n\r\n - A clear presentation of `re`\u2019s overall structure.\r\n - What actually happens behind the scenes when you \u201ccompile\u201d a regular expression with `re.compile`?\r\n - What are the speed implications of using a callable as the replacement argument to `re.sub`?\r\n - re.MatchObject interface: `group` vs. `groups` vs `groupdict`\r\n\r\nTo keep the talk entertaining as well as educational I plan to pepper it with whatever interesting and/or funny trivia I find about the module\u2019s history and structure.\r\n\r\nPrerequisites:\r\nIf you've ever used the `re` module, you should be fine :)\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Python", - "Python" - ], - "emails": "ilia.kurenkov@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/rediscovering-pythons-regular-expressions", - "admin_type": "", - "companies": "eGym" - }, - "677": { - "abstract_short": "Virtualenv is a great tool for the development environment but it's definitely not suitable for every use case. Also, Docker is great for running the application in production, but not everyone that use it in production tried to use it in the development environment. Why not use the same tool from the beginning of the project and until it hits the production in a uniform stack of tooling? This talk will show use cases of using Docker in the process of development as well.", - "sub_title": "Building real, immutable, and portable virtual environments using Docker", - "timerange": "2016-07-21 16:15:00, 2016-07-21 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@mishunika", - "id": 677, - "speakers": "Mihai Iachimovschi", - "title": "Real virtual environments without virtualenv", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Web General", - "Python general", - "Open-Source", - "Docker", - "Deployment/Continuous Integration and Delivery" - ], - "abstract_long": [ - "The process of developing using Python is very straightforward and easy. Still, each and every developer has his own style of developing and building his entire dev environment. Most of us use virtualenvs which are reliable and comfortable to use. But there are some issues. For instance, the repeatability and immutability of the built environment are not guaranteed. \r\n\r\nVirtualenv does a lot of work that targets the direction of somehow isolated and independent environments. They are *almost* *fully* repeatable. In any team, we can hear the notorious expression \"It works for me!\".\r\n\r\nFor some time now, I am using Docker instead of virtualenv for building custom and really-virtual environments that are entirely isolated. The containers are immutable and consistent, so this workflow guarantees repeatability. Using such technique, not only enables the user to have unique and immutable environments, it also allows de developer to create full app architecture that can then be tested and deployed as is. So the production version will be in identical conditions as the one from the development environment. These features are not provided by virtualenv at all.\r\n\r\nThe goal of this exercise is to try to use totally different tooling for building the application from its first line of code until the production. " - ], - "abstract_extra": "", - "tag_categories": [ - "Web", - "Python", - "Open Source", - "DevOps", - "DevOps" - ], - "emails": "mihai.iachimovschi@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/real-virtual-environments-without-virtualenv", - "admin_type": "", - "companies": "" - }, - "621": { - "abstract_short": "It is important to understand from the beginning how model API should look like.\r\nDo not repeat your friends\u2019 mistakes and make developers upset!\r\nThere are some simple rules that can make your API cooler - clean, safe and efficient.\r\n\r\nBased on both bad and good examples of REST APIs (I had to deal with) we will learn about best practices.", - "sub_title": "", - "timerange": "2016-07-22 14:30:00, 2016-07-22 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 621, - "speakers": "Malwina Nowakowska", - "title": "RESTful API - Best Practices.", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Best Practice", - "RESTful", - "APIs" - ], - "abstract_long": [ - "Nowadays building and integrating with Representational State Transfer web services is a very common thing. It seems that creating RESTful API is trivial - nothing could be more wrong.\r\nIn my previous projects I had to integrate with lots of APIs. Unfortunately only some of them were easy to work with. Most of the APIs did not follow the main rules of model API.\r\n\r\nIt is really important to understand how model REST API should look like.\r\nTo make developers happy we will learn best practices of creating REST API from the beginning.\r\n\r\nWe will start with quick introduction what REST is, why principle of REST is so amazing, talk about identifires and explain some key terms.\r\nWe will discuss about architectall constraints and properties.\r\n\r\nMistakes and best practices are based on my experience of developing and maintaining the projects. After this talk you will be able to create model RESTful API developers will be happy to work with.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Best Practice and Use Cases", - "Web", - "Web" - ], - "emails": "malwina.nowakowskaa@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/restful-api-best-practises", - "admin_type": "", - "companies": "STX Next" - }, - "543": { - "abstract_short": "Microservices offer an efficient way to only scale those parts of your application which are performance bottlenecks.\r\n\r\nWe will demo and explain open source tech which allows the easy scaling out across distributed devices. The audience will be able to donate processor cycles from their devices to our demo application (and win a hardware prize).\r\n\r\nThe demo uses [Crossbar.io][1], an open souce application router (written in Python), and all demo code is open source.\r\n\r\n [1]: http://crossbar.io", - "sub_title": "Easy distributed systems from mobiles to servers", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 543, - "speakers": "Tobias Oberstein", - "title": "Scaling Microservices with Crossbar.io", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Scaling", - "Architecture", - "Distributed Systems", - "Internet of Things (IoT)", - "Microservices" - ], - "abstract_long": [ - "Microservices offer an efficient way to only scale parts of your applications which are hotspots. Instead of running multiple instances of a monolithic application, with all the complexity and operational run-time overhead that entails, you can scale only the functionality which is a bottleneck. Today that increasingly means scaling out, not up.\r\n\r\nWe will go over open source technologies which allow the easy scaling out across distributed devices.\r\n\r\nA live demo will allow the audience to participate with its devices (including mobile phones) in an application. (There will be prizes for the donors.)\r\n\r\nThe demo uses [Crossbar.io,][1] an open source router for the open [Web Application Messaging Protocol (WAMP) ][2] written in Python. WAMP supports routed Remote Procedure Calls, and Crossbar.io uses these to implement various load-balancing strategies across endpoints which register a particular procedure.\r\n\r\nWAMP has a first-class library for Python ([Autobahn|Python][3]), but is cross-language, with support for a total of 11 languages. This allows you to implement polyglot and heterogenos microservices applications, from Python to Node.js to C# right into the browser. Microservices can run anywhere, since the outgoing connections to the router which WAMP uses avoid NAT problems.\r\n\r\nAll software used is open source, and all demo code is provided on GitHub under the MIT license.\r\n\r\n [1]: http://crossbar.io\r\n [2]: http://wamp-proto.org\r\n [3]: http://autobahn.ws/python", - "", - "", - "" - ], - "abstract_extra": "The talk will give a very brief overview of the advantages of microservices as a modern architectural approach, and then focus on the specific problem of scaling individual microservices. There will be a quick look at some established communication mechanisms and their disadvantages in this context, and an overview of the router Remote Procedure Calls that WAMP provides, their advantages and how Crossbar.io uses these to achieve simple scaling.\r\n\r\nThe demo will allow participants to connect with their own devices (laptops, tablets, mobile phones, remote servers) and donate processor cylces. The simplest way to do so is to call up a Web page in a browser which will connect to the application and provide a JavaScript implementation of the microservice to scale. (This also provides realtime feedback about audience participation.) We will also provide a Python client, and potentially clients in other languages for participants to run on their laptops.\r\n\r\nParticipation will be possible via conference wi-fi, a local dedicated wi-fi network or a mobile network - so problems with the conference wi-fi network (always a possibility) will not impact the demo.", - "tag_categories": [ - "DevOps", - "Programming", - "DevOps", - "Hardware", - "Programming" - ], - "emails": "tobias.oberstein@tavendo.de", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/scaling-microservices-with-crossbario", - "admin_type": "", - "companies": "Tavendo GmbH" - }, - "405": { - "abstract_short": "The server is developed in Python 3.4, using MySQL5.6 \r\nThe mobile device application is developed using Kivy.\r\nThe application in the IoT device is developed in C. \r\nThe IoT device is a hardware device using ATSAMD21 from Atmel, and wifi is made using ESP8266. The security used is sha256, standard in Python. And the IoT device using the crypto device ATECC508A, that generate also sha256.\r\n\r\n\r\n", - "sub_title": "Server for Communication of IoT devices and Mobile Devices using Wifi Network", - "timerange": "2016-07-22 14:00:00, 2016-07-22 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 405, - "speakers": "Joaquin Berenguer", - "title": "Server for IoT devices and Mobile devices using Wifi Network,", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Algorithms", - "Beginners", - "Agile", - "APIs", - "Analytics" - ], - "abstract_long": [ - "The server is developed in Python 3.4, the information is stored in a MySQL 5.6 database. \r\nAll IoT devices, Mobile Devices and Windows or Linux Desktop are registered in the database.\r\nAll type of messages that are understood by every type of device, is also registered.\r\nA map between which device could access which device is also stored in the database.\r\nWith this info, any mobile registered could send a message to a device. The message arrives to the server that resend the message to the IoT device, receive the answer and resend to the Mobile device. \r\nThe Mobile device and the IoT device, could be anywhere, as the server is public, have the registration of every device connected.\r\nThe mobile device application is developed using Kivy.\r\nThe application in the IoT device is developed in C. \r\nThe IoT device is a hardware device using ATSAMD21 from Atmel, and wifi is made using ESP8266. The security used is sha256, standard in Python. And the IoT device using the crypto device ATECC508A, that generate also sha256.\r\nThe server start a thread for every device connected, the communication between thread is made using queues. \r\nDuring the presentation, the server is going to be presented, and IoT device is shown, no demo is going to be made.\r\nA library to manage the database, is used for easy access to the database, and have database independence, also will be shown.\r\nPrerequites: Python 3.4, sha256, threading, queue, mysql.connector, relational database.\r\n", - "", - "", - "" - ], - "abstract_extra": "Owner of the company Berentec, from 2014\r\nExperience during many year in Database Environment, working at Sybase during 19 years.\r\n", - "tag_categories": [ - "Data Science", - "Educational", - "Development Methods", - "Web", - "Data Science" - ], - "emails": "chimo.berenguer@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/server-for-iot-devices-and-mobile-devices-using-wifi-network", - "admin_type": "", - "companies": "Berentec" - }, - "454": { - "abstract_short": "The Processing project demonstrated that computer art can attract a wider audience to programming. Python has a robust catalog of libraries, including two interfaces to OpenGL. However, none of these libraries replicate Processing\u2019s simplicity when drawing to the screen. I will present my solution to this problem: a re-implementation of VPython\u2019s visual module purely in python called PygletHelper.", - "sub_title": "", - "timerange": "2016-07-21 15:45:00, 2016-07-21 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@femion", - "id": 454, - "speakers": "Catherine Holloway", - "title": "Simplifying Computer Art in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Visualization", - "Teaching", - "Game-Development" - ], - "abstract_long": [ - "Processing is a programming language originally developed by the MIT media lab with the goal of allowing artists, educators, and many others develop striking computer generated or assisted projects without requiring deep knowledge of software engineering or computer graphics. Like Processing, Python has become a favourite language of users from diverse backgrounds, such as web development, education, and science. Unlike Processing, python lacks a simple and easy to use library for drawing shapes. Python\u2019s existing libraries for scientific computing and data analysis could be made even more awesome when combined with a simple drawing library.\r\n\r\nVPython contains a module called visual that established a simple API and convention for drawing shapes, however it was written in C++, prior to the development of pyglet, and thus is not entirely cross-platform. In this talk, I will demonstrate my solution to this problem: a re-implementation of visual purely in Python called PygletHelper. Pyglet, an existing python library, provides a python interface to OpenGL. PygletHelper is built on pyglet but obscures all of the OpenGL calls, such that the user can draw simple geometric shapes to the screen and animate them without needing to know about computer graphics terminology, memory usage, or C data types.\r\n\r\nI will also show some need visualizations of science and music in my talk, as well as the graphical glitches encountered implementing the library. " - ], - "abstract_extra": "PygletHelper is open source, and available at: https://github.com/CatherineH/pyglet_helper\r\nI have given many talks in the past about robotics or quantum computing, but this would be my second talk on python if accepted. In 2015 I gave a talk on the Robotics Operating System and Python at PyCon Canada:\r\n\r\nhttps://www.youtube.com/watch?v=oX294t9UYSw", - "tag_categories": [ - "Data Science", - "Everything Else", - "Everything Else" - ], - "emails": "milankie@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/simplifying-computer-art-in-python", - "admin_type": "", - "companies": "Qubitekk" - }, - "577": { - "abstract_short": "This talk is based on a recent consulting project the speaker ran to support the valuation of a Python startup company in the due diligence phase.\r\n\r\nBy following some of the advice from this talk, you should be possible to improve the valuation of your Python startup or consulting business in preparation for investment rounds or an acquisition.", - "sub_title": "Designing valuable software for fun and profit", - "timerange": "2016-07-19 16:15:00, 2016-07-19 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@malemburg", - "id": 577, - "speakers": "Marc-Andre Lemburg", - "title": "So you think your Python startup is worth $10 million...", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Databases", - "Use Case", - "Best Practice", - "Business Track", - "Software Design" - ], - "abstract_long": [ - "This talk is based on the speaker's experience running a Python focused software company for more than 15 years and a recent consulting project to support the valuation of a Python startup company in the due diligence phase.\r\n\r\nFor the valuation we had to come up with metrics, a catalog of criteria analyzing risks, potential and benefits of the startup's solution, as well as an estimate for how much effort it would take to reimplement the solution from scratch.\r\n\r\nIn the talk, I am going to show the metrics we used, how they can be applied to Python code, the importance of addressing risk factors, well designed code and data(base) structures.\r\n\r\nBy following some of the advice from this talk, you should be able to improve the valuation of your startup or consulting business in preparation for investment rounds or an acquisition.\r\n", - "", - "", - "" - ], - "abstract_extra": "Marc-Andre Lemburg is a regular speaker at Python conferences and has been giving Python talks ever since the first European Python Meeting in 2001.\r\n\r\nThe following page includes some of the talk he has given over the years:\r\n\r\nhttp://www.egenix.com/library/presentations/\r\n\r\nMarc-Andre also runs a local user group in D\u00fcsseldorf, together with Charlie Clark, where he regularly gives shorter or longer talks on various topics in German:\r\n\r\nhttp://www.egenix.com/library/pyddf/videos.html\r\n", - "tag_categories": [ - "Databases", - "Best Practice and Use Cases", - "Best Practice and Use Cases", - ">>> Suggested Track", - "Programming" - ], - "emails": "mal@europython.eu", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/so-you-think-your-startup-is-worth-10-million", - "admin_type": "", - "companies": "eGenix.com Software GmbH" - }, - "501": { - "abstract_short": "Having to deal with a monolith, an application which became far to big over the time, can be quite bothersome. On the other hand if you split it up and have to deal with lots of smaller components, you might end up in dependency hell. But not only the splitting of the monolith and the management of the dependencies afterwards can be a problem, but also the packaging of you python components itself. \r\n ", - "sub_title": "", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@tmuxbee", - "id": 501, - "speakers": "Patrick M\u00fchlbauer", - "title": "Split Up! Fighting the Monolith", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "System Architecture", - "Best Practice", - "Testing", - "Packaging" - ], - "abstract_long": [ - "Do you know this situation, where you and your team are facing this big monolith? An application which has grown far too\r\nbig over the years. Every time when you make a change, you have to fear the code might break at a totally different place, because lots of things\r\nare closely intertwined. But what to do if you are at such a point? Maybe you start thinking about microservices but then questions like\r\n\"Are they really the right thing for us?\" and \"How do we get there?\" arise.\r\n\r\nIn my talk I will show you how we are dealing with our monolith. A collection of multiple python packages without clear boundaries, forming the\r\nactual application - all living in a single monorepo.\r\n\r\nI will talk about how we split up the whole thing, making it more flexible for us and also easier to use individual components by other teams.\r\nAll this, of course, comes with a price: You have to think more about the dependencies between you components. You have to think about how\r\nyou can efficiently test everything, making sure your final application is still working correctly.\r\nDon't loosing yourself in dependency hell and packaging all components correctly becomes quite a challenge.\r\n\r\nThis talk will:\r\n\r\n - show you bad patterns to avoid, so that you don't end up in the above situation in the first place\r\n - give you ideas what to consider when tackling your monolith\r\n - explain how to package your python components and how to mange your dependencies\r\n\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "Best Practice and Use Cases", - "Testing", - "Python" - ], - "emails": "tmuxbiene@googlemail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/split-up-fighting-the-monolith", - "admin_type": "", - "companies": "Blue Yonder " - }, - "748": { - "abstract_short": "a", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 748, - "speakers": "Solomon Bisker", - "title": "Sponsored talk: Hired", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "python" - ], - "abstract_long": [ - "a" - ], - "abstract_extra": "", - "tag_categories": [ - "" - ], - "emails": "solomon@hired.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/sponsored-talk-hired", - "admin_type": "", - "companies": "" - }, - "524": { - "abstract_short": "In times of NoSQL databases and Map Reduce Algorithms it's surprising how far\r\nyou can scale the relational data model. At [Blue Yonder](http://blue-yonder.com)\r\nwe use SQLAlchemy in all stages of our data science workflows and handle tenth\r\nof billions of records to feed our predictive algorithms. This talk will dive\r\ninto SQLAlchemy beyond the Object Relational Mapping (ORM) parts and conentrate\r\non the SQLAlchemy Core API, the Expression Language and Database Migrations\r\nwith Alembic.", - "sub_title": "", - "timerange": "2016-07-20 11:15:00, 2016-07-20 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@peterhoffmann", - "id": 524, - "speakers": "Peter Hoffmann", - "title": "SQLAlchemy as the backbone of a Data Science company", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Big Data", - "SQL Alchemy", - "Data Science", - "Databases" - ], - "abstract_long": [ - "In times of NoSQL databases and Map Reduce Algorithms it's surprising how far\r\nyou can scale the relational data model. At [Blue Yonder](http://blue-yonder.com)\r\nwe use SQLAlchemy in all stages of our data science workflows and handle tenth\r\nof billions of records to feed our predictive algorithms. This talk will dive\r\ninto SQLAlchemy beyond the Object Relational Mapping (ORM) parts and conentrate\r\non the SQLAlchemy Core API and the Expression Language:\r\n\r\n- **Database Abstraction**: Statements are generated properly for different\r\n database vendor and type without you having to think about it.\r\n\r\n- **Security**: Database input is escaped and sanitized prior to beeing commited \r\n to the database. This prevents against common SQL injection attacks.\r\n\r\n- **Composability and Reuse**: Common building blocks of queries are expressed\r\n as SQLAlchemy selectables and can be reuesd in other queries.\r\n\r\n- **Testability**: SQLAlchemy allows you to perform functional tests against a database\r\n or mock out queries and connections.\r\n\r\n- **Reflection**: Reflection is a technique that allows you to generate a\r\n SQLAlchemy repesentation from an existing database. You can reflect tables,\r\n views, indexes, and foreign keys.\r\n\r\nAs a result of the usage of SQLAlchemy in Blue Yonder, we have implemented and\r\nopen sourced a SQLAlchemy dialect for the in memory, column-oriented database\r\nsystem [EXASolution](https://github.com/blue-yonder/sqlalchemy_exasol)" - ], - "abstract_extra": "", - "tag_categories": [ - "Data Science", - "Databases", - "Data Science", - "Databases" - ], - "emails": "peter.hoffmann@blue-yonder.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/sqlalchemy-as-the-backbone-of-a-data-science-company", - "admin_type": "", - "companies": "Blue Yonder" - }, - "477": { - "abstract_short": "System tests are an invaluable tool for verifying correctness of large scale online services. This talk will discuss best practices and tooling (pytest and docker-py) for writing maintainable system tests.\r\n\r\nDemonware has used System tests to verify online services for some of the biggest AAA video game launches as well as internal operational tools.\r\n\r\nMany folks who write software are familiar with unit testing, but far fewer with system testing.", - "sub_title": "", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@bobcatwilson, @mtomwing", - "id": 477, - "speakers": "Christie Wilson, Michael Tom-Wing", - "title": "System Testing with pytest and docker-py", - "have_tickets": [ - true, - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Best Practice", - "Distributed Systems", - "Test Libraries (pyTest/node/...)", - "Docker", - "Testing" - ], - "abstract_long": [ - "System testing a microservice architecture is challenging. As we move away from monolithic architectures, system testing becomes more important but also more complicated.\r\n\r\nIn the video game industry, if a game doesn\u2019t work properly immediately after launch, it will heavily impact game success. We have found system testing to be an important tool for pre launch testing of game services and operational tools, to guarantee quality of these services at launch.\r\n\r\nWe want to share with you best practices for system testing: when to write system tests, what to test and what not to, and common pitfalls to avoid. Using python\u2019s pytest tool and docker-py for setting up services and their dependencies has made it easier than ever to write complex but maintainable system tests and we\u2019ll share with you how we\u2019ve made use of them.\r\n\r\nDevelopers (senior and junior) and ops folks can walk away from this talk with practical tips they can use to apply system testing to their software.", - "", - "", - "" - ], - "abstract_extra": "Please note that I would be presenting with my colleague Michael Tom-Wing\r\n\r\nI founded and run PyLadies Vancouver, where I regularly speak at meetups.\r\n\r\nMichael Tom-Wing and I have together presented tutorials on unit testing at pydx (http://pydx.org/) and at several PyLadies Vancouver meetups (www.meetup.com/PyLadies-Vancouver/). We will be delivering this tutorial at PyCon this year as well. The content of the tutorial is available on github: https://github.com/keeppythonweird/catinabox#catinabox---intro-to-testing-and-test-automation-in-python", - "tag_categories": [ - "Best Practice and Use Cases", - "DevOps", - "Testing", - "DevOps", - "Testing" - ], - "emails": "bobcatfish@gmail.com, mtomwing@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/system-testing-with-pytest-and-docker-py", - "admin_type": "", - "companies": "Demonware" - }, - "648": { - "abstract_short": "A framework-agnostic approach to creating Python microservices with a tests-first approach.\r\nI'll show how to utilize Docker and Swagger to create service and contract tests that run your service as an independent process, as if it was running in production, giving you and your team a higher degree of confidence when introducing changes.\r\n\r\nA little bit of a broader microservice, TDD and work management context will also be given.", - "sub_title": "Docker, Swagger and Pytest to the rescue", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 648, - "speakers": "Micha\u0142 Bultrowicz", - "title": "TDD of Python microservices", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Test Driven Development (TDD)", - "Docker", - "RESTful", - "Web Track" - ], - "abstract_long": [ - "These will be my ideas on how to help a microservice-based (HTTP) project by integrating testing into the development process (TDD).\r\nI'll approach the testing pyramid presented in Martin Fowler's \"Microservice Testing\" as well as the test variants in \"Building Microservices\" (O'Reilly) and I'll show a way of how they can be translated to real-life Python.\r\n\r\nThe main focus will be on \"service tests\" (aka. out-of-process component tests) and contract tests. They both can be run relatively fast on a development machine and can give fast feedback to the developer, preventing many kinds of problems.\r\n\r\nService tests run the whole application process without any internal modifications, but have to present the service with a fake \"outside world\". I'll show how to fake external HTTP services with Mountebank (similar to WireMock). Instead of faking other systems (like databases) we can quickly spin up the real deal as a Docker container from within the tests.\r\n\r\nContract tests check if the contract (interface) of your service with the outside world is kept, so no external services should be broken by the changes you are introducing. It can also work the other way around, proving that your collaborators are keeping their part of the deal. In both cases, Swagger (a RESTful API description scheme) and a few clever tricks can be used for significant advantage." - ], - "abstract_extra": "I've worked as developer and then a technical team leader on one of the teams working on Intel's Trusted Analytics Platform - a solution based on microservices and PaaS.\r\n\r\nI've presented once before, during EuroPython 2015 . My talk title was \"Python microservices on PaaS done right\". This is a continuation of this talk, focusing more on testing and the experiences I had for the past year.", - "tag_categories": [ - "Testing", - "DevOps", - "Web", - ">>> Suggested Track" - ], - "emails": "michalbultrowicz@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/tdd-of-python-microservices", - "admin_type": "", - "companies": "N/A" - }, - "519": { - "abstract_short": "We will present the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), and how to execute it with [pytest-nodev][1] a test-driven search engine for Python code.\r\n\r\n [1]: http://pytest-nodev.readthedocs.io/en/stable/quickstart.html\r\n\r\nPytest-nodev and the other nodev tools that helps implement TDR for Python are rather new, in spite of that we will present several successful applications of the technique to more and more complex examples.", - "sub_title": "Its like test-driven development... without the development bit.", - "timerange": "2016-07-22 11:15:00, 2016-07-22 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@alexamici", - "id": 519, - "speakers": "Alessandro Amici", - "title": "Test-driven code search and reuse coming to Python with pytest-nodev", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Test Driven Development (TDD)", - "Educational Track", - "Test Libraries (pyTest/node/...)", - "Testing", - "Best Practice" - ], - "abstract_long": [ - "We will present the test-driven reuse (TDR) development strategy, a natural extension of test-driven development (TDD), and how to execute it with [pytest-nodev](http://pytest-nodev.readthedocs.io/en/stable/quickstart.html) an Open Source test-driven search engine for Python code.\r\n\r\nWhen developing new functionalities developers spend significant efforts searching for code to reuse, mainly via keyword-based searches, e.g. on StackOverflow and Google. Keyword-based search is effective in finding code that is explicitly designed and documented to be reused, e.g. libraries and frameworks, but typically fails to identify reusable functions and classes in the large corpus of auxiliary code of software projects.\r\n\r\nTDR aims to address the limits of keyword-based search with test-driven code search that focuses instead on code behaviour and semantics. Developing a new feature in TDR starts with the developer writing the tests that will validate candidate implementations of the desired functionality. Before writing any functional code the tests are run against all functions and classes of available projects. Any code passing the tests is presented to the developer as a candidate implementation for the target feature.\r\n\r\n[Pytest-nodev](https://github.com/nodev-io/pytest-nodev) and other nodev tools that help implement TDR for Python are newer than the JAVA counterparts, in spite of that we will present several applications of the technique to more and more complex examples." - ], - "abstract_extra": "Two open source projects will be demonstrated:\r\n\r\n- https://github.com/nodev-io/pytest-nodev\r\n- https://github.com/nodev-io/nodev.specs\r\n\r\nWe would love to announce the beta of an on-line test-driven code search service at EuroPython. No promises, though.", - "tag_categories": [ - "Testing", - ">>> Suggested Track", - "Testing", - "Testing", - "Best Practice and Use Cases" - ], - "emails": "a.amici@bopen.eu", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/test-driven-source-code-search-for-python-with-pytest-nodev", - "admin_type": "", - "companies": "B-Open Solutions srl" - }, - "486": { - "abstract_short": "In this session you will learn your way around Python 3\u2019s unittest.mock package through examples. You\u2019ll learn about the Mock class, sentinels and patching. You will see the benefits that mocks can bring and learn to avoid the pitfalls. Along the way I\u2019ll fill you in on some of the bewildering terminology surrounding mocks such as \u201cSUT\u201d, \u201cStub\u201d, \u201cDouble\u201d, \u201cDummy\u201d , \u201cmockist\u201d and more and I\u2019ll give a brief plug for my own mockextras package that can enhance your mock experience.", - "sub_title": "", - "timerange": "2016-07-22 15:45:00, 2016-07-22 16:15:00", - "sub_community": "", - "duration": 30, - "twitters": "@andrewburrows", - "id": 486, - "speakers": "Andrew Burrows", - "title": "Testing the untestable: a beginner\u2019s guide to mock objects", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Beginners", - "Testing" - ], - "abstract_long": [ - "Mock objects can be a powerful tool to write easy, reliable tests for the most difficult to test code. In this session you will learn your way around Python 3\u2019s unittest.mock package starting at the simplest examples and working through progressively more problematic code. You\u2019ll learn about the Mock class, sentinels and patching and how and when to use each of them. You will see the benefits that mocks can bring and learn to avoid the pitfalls. Along the way I\u2019ll fill you in on some of the bewildering terminology surrounding mocks such as \u201cSUT\u201d, \u201cStub\u201d, \u201cDouble\u201d, \u201cDummy\u201d , \u201cmockist\u201d and more and I\u2019ll give a brief plug for my own mockextras package that can enhance your mock experience." - ], - "abstract_extra": "I have given many presentations within my organisation to audiences of up to 100+ people but have no publicly referenceable examples. \r\n\r\nI am testing mentor for all Man AHL developers, especially new hires. I have given variants of this presentation numerous times within my workplace.\r\n\r\nI am the developer and maintainer of the mockextras library, which I will give a small plug for in the talk.\r\n\r\nhttp://mockextras.readthedocs.org/\r\nhttps://github.com/manahl/mockextras\r\nhttps://pypi.python.org/pypi/mockextras", - "tag_categories": [ - "Educational", - "Testing" - ], - "emails": "aburrows@ahl.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/testing-the-untestable-a-beginners-guide-to-mock-objects", - "admin_type": "", - "companies": "Man AHL" - }, - "745": { - "abstract_short": "CPython's GIL means your Python code can only run on one CPU core at a time. Can we remove it? Yes, we can... in fact we already have! But is it worth the cost?", - "sub_title": "Removing CPython's GIL", - "timerange": "2016-07-20 14:30:00, 2016-07-20 15:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@larryhastings", - "id": 745, - "speakers": "Larry Hastings", - "title": "The Gilectomy", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Performance", - "Multi-Threading", - "CPython" - ], - "abstract_long": [ - "CPython's \"Global Interpreter Lock\", or \"GIL\", was added in 1992. It was an excellent design decision. But 24 years is a long time--today it prevents Python from capitalizing on multiple CPUs. Many people want us to remove the GIL.\r\n\r\nIt turns out, removing the GIL isn't actually that hard. In fact, I already removed it, in my experimental \"gilectomy\" branch. But the GIL is one reason CPython is so fast! The \"gilectomy\" makes CPython shockingly slow.\r\n\r\nThis talk will discuss the history of the GIL, how the GIL helps make CPython fast, how the \"gilectomy\" removed the GIL, and some ways we might be able to make the \"gilectomy\" version fast enough to be useful." - ], - "abstract_extra": "I gave a version of this talk at PyCon 2016. The room was full five minutes before starting and many, many people were turned away at the door.", - "tag_categories": [ - "Programming", - "Programming", - "Python" - ], - "emails": "larry@hastings.org", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/the-gilectomy", - "admin_type": "", - "companies": "Python CoreDev" - }, - "683": { - "abstract_short": "I would like to indicate main keys to success, factors and features that help a developer to find himself on an independent career path.\r\nHow to create employee-friendly work environment for Python developers?\r\nWhich business model gives a chance to attract and keep more than 100 Python enthusiast?\r\nI will also gladly share some lessons learned working with dozens of clients, dozens of Python frameworks, and lots, lots of great developers.", - "sub_title": "", - "timerange": "2016-07-18 12:00:00, 2016-07-18 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@mdziergwa", - "id": 683, - "speakers": "Maciej Dziergwa", - "title": "The Journey from Python Developer to Python Company Owner", - "have_tickets": [ - false - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Business Track", - "Community" - ], - "abstract_long": [ - "Ten years ago I became a big Python fan, but at the time there were no jobs for Python developers in Poland. So, I decided to start my own Python company. Today, ten years later, this company employs more than 100 Python Developers in four cities.\r\n\r\nThere are a lot of Python enthusiasts in the world, many of them more skilled than I was at that time, but clearly not anyone can become a \u201ePython Business Developer\u201d. In this talk I would like to indicate main keys to success, factors and features that help a developer to find himself on an independent career path.\r\n\r\nMy goal is to answear these questions:\r\n\r\nHow to create employee-friendly work environment for Python developers?\r\n\r\nWhich business model gives a chance to attract and keep more than 100 Python enthusiast?\r\n\r\nI will also gladly share some lessons learned while working with dozens of clients, dozens of Python frameworks, and lots, lots of great developers. " - ], - "abstract_extra": "", - "tag_categories": [ - ">>> Suggested Track", - "Community" - ], - "emails": "mdziergwa@stxnext.pl", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-journey-from-python-developer-to-python-company-owner", - "admin_type": "", - "companies": "STX Next" - }, - "398": { - "abstract_short": "In this talk discusses some joyful exercises in simulation. I'll demonstrate it's usefulness but moreover I'll discuss the sheer joy. I'll discuss how to generate song lyrics, I'll discuss how to get better at casino games, how to avoid math, how to play monopoly or even how to invest in lego minifigures. No maths required; just a random number generator. ", - "sub_title": "Make a living selling lego mini-figures on ebay.", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@fishnets88", - "id": 398, - "speakers": "vincent warmerdam", - "title": "The Joy of Simulation: for Fun and Profit", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Education", - "Beginners", - "Algorithms", - "Data Science", - "Science" - ], - "abstract_long": [ - "In this talk discusses some joyful exercises in simulation. I'll demonstrate it's usefulness but moreover I'll discuss the sheer joy you can experience. \r\n\r\nI'll go over the following points (the short list):\r\n\r\n- I'll show how you can avoid math by simulating; I'll calculate the probability that two people in the live room have the same birthday. \r\n- I'll show how simulation can help you get better at many games. I'll start with simple card games and with the game of roulette. Most prominently I'll discuss how to determine the value of buying an asset in the game of monopoly (See blogpost: http://koaning.io/monopoly-simulations.html). \r\n- I'll demonstrate how you can simulate Red Hot Chilli Pepper lyrics. Or any other band. Or legalese. \r\n- I'll demonstrate the results of a scraping exercise which helped me to determine the value of investing in Lego Minifigures (See blogpost: http://koaning.io/lego-minifigs-stochastics-profit.html). \r\n\r\nDepending on the level of the audience I might also discuss how biased simulation can help you solve optimisation problems or even introduce bayesian statistics via sampling. I'll gladly leave this decision to the EuroPython committee. ", - "", - "", - "" - ], - "abstract_extra": "I am the founding committee member of PyData Amsterdam and I've spoken before at PyData events as well as EuroPython. You can find me on twitter or at my blog over at koaning.io. ", - "tag_categories": [ - "Educational", - "Educational", - "Data Science", - "Data Science", - "Sciences" - ], - "emails": "vincentwarmerdam@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/the-joy-of-simulation-for-fun-and-profit", - "admin_type": "", - "companies": "GoDataDriven" - }, - "599": { - "abstract_short": "This talk will teach you how Twisted or Tornado supplement asyncio, how asyncio can/is integrated with these frameworks, and makes a case for the continued development of new and existing selector-loop based frameworks. It will also paint a picture of the future direction of Twisted, why the original plan of asyncio as a standard API has not come to complete fruition, and what can be done about it. ", - "sub_title": "Why Twisted and Tornado Are Relevant In The Asyncio Age", - "timerange": "2016-07-18 14:45:00, 2016-07-18 15:30:00", - "sub_community": "", - "duration": 45, - "twitters": "@hawkieowl", - "id": 599, - "speakers": "Amber Brown", - "title": "The Report Of Twisted\u2019s Death", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Performance", - "ASYNC / Concurreny" - ], - "abstract_long": [ - "- Introduction (3 min)\r\n - I\u2019m Amber Brown, Twisted Release Manager\r\n - 3 years contributing to the Twisted Project\r\n- What is asynchronous I/O? (5 min)\r\n- How can it be implemented? (5 min)\r\n- The options (5 min)\r\n - Twisted, Tornado, asyncio\r\n- Asynchronous I/O on Python 3, in 2012 (2 min)\r\n - Tornado was only just ported\r\n - twisted, gevent, eventlet, etc were not ported\r\n- asyncio (7 min)\r\n - Designed as both a \u201ccommon API\u201d for async I/O frameworks, much like WSGI was for web servers\r\n - Built using ideas from Twisted\r\n- asyncio exists, so Twisted and Tornado can go away, right? (5 min)\r\n - asyncio is an \u201casync I/O thing\u201d, and twisted/tornado are \u201casync I/O things\u201d, so Twisted and Tornado aren\u2019t required now, right?\r\n- Twisted\u2019s Renaissance (5 min)\r\n - 450,000 LoC, fifteen years of legacy, supports many many major protocols\r\n - Twisted hits 50% on the port to Python 3\r\n - Pressure from asyncio providing renewed competition\r\n - The very existence of asyncio means we no longer need to have the \u201cwhy is asynchronous I/O a good idea\u201d\r\n- But It\u2019s Not Over Yet (5 min)\r\n - Twisted does not implement nor use the asyncio standard APIs, Twisted needs help and developer support to do this\r\n - Support on Windows is still subpar, as the asyncio IOCP proactor does not support UDP\r\n- The Future (8 min)\r\n - A Twisted You Can Use\r\n - WSGI 2\r\n - asyncio standardisation\r\n- Questions (5 min)\r\n", - "", - "", - "" - ], - "abstract_extra": "This is a talk which has been accepted for PyCon US 2016. The full abstract, as submitted to PyCon US, is available at https://dl.dropboxusercontent.com/u/14290114/Twisted%20and%20Tornado%20in%20The%20Age%20of%20Asyncio.pdf .\r\n\r\nI've previously given talks at DjangoCon AU (keynote 2015), PyCon AU (2014, 2015), PyCon CZ (keynote 2015), and Django Under The Hood (2015).", - "tag_categories": [ - "Programming", - "Programming" - ], - "emails": "hawkowl@atleastfornow.net", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/the-report-of-twisteds-death", - "admin_type": "", - "companies": "" - }, - "651": { - "abstract_short": "Mindfulness has proven to be a foundational skill that started as a pure buddhist practice. Nowadays mindfulness serves as the core technique of several western programs ranging from curing stress-induced medical problems to curricula for teaching successful business leadership, such as the Search Inside Yourself program developed at Google. \r\n\r\nThe aim of this seminar is to provide a practical experience of mindfulness with a short introduction to how it can be applied by digital workers.", - "sub_title": "", - "timerange": "2016-07-22 16:15:00, 2016-07-22 16:45:00", - "sub_community": "", - "duration": 30, - "twitters": "@https://twitter.com/ralhei", - "id": 651, - "speakers": "Ralph Heinkel", - "title": "The value of mindfulness and how it has arrived at Google", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [], - "abstract_long": [ - "Mindfulness has proven to be a foundational skill that started as a pure buddhist practice. Nowadays mindfulness serves as the core technique of several western programs ranging from curing stress-induced medical problems to curricula for teaching successful business leadership, such as the Search Inside Yourself (SIY) program developed at Google in 2002. \r\n\r\nMind is the root of all things. Neuroscience shows that attention is a fundamental function of the mind. Being able to direct attention to the present moment - and keep it there while performing daily tasks - is a great tool to navigate through life and its challenges with more engagement, more happiness, and more resilience. Focusing attention in a relaxed way enables us to disconnect from the overall noise found in a high-speed environment and get things done without feeling too overwhelmed by them. But being effective is not only about checking off more tasks - it is about how we are in resonance with our environment, how we interact with others, and how we face the increasing complexity in our professional life. \r\n\r\nThe aim of this seminar is to provide a practical experience of mindfulness with a short introduction to how it can be applied in a technology driven world as experience by digital workers." - ], - "abstract_extra": "", - "tag_categories": [], - "emails": "rh@ralph-heinkel.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/the-value-of-mindfulness-and-how-it-has-arrived-at-google", - "admin_type": "", - "companies": "Freelance Python Developer" - }, - "576": { - "abstract_short": "In recent years one of the ways people get introduced into Python is through its scientific stack. Although this is not bad, it may lead to learn solely one aspect of the language, while overlooking other idioms and functionality included in Python as well as some basic software development good practices. I will share some useful tricks, tools and techniques and software design and development principles that I find beneficial when working on a data processing / science project.", - "sub_title": "", - "timerange": "2016-07-20 12:00:00, 2016-07-20 12:45:00", - "sub_community": "", - "duration": 45, - "twitters": "@mfcabrera", - "id": 576, - "speakers": "Miguel Cabrera", - "title": "Things I wish I knew before starting using Python for Data Processing", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room", - "tags": [ - "Software Design", - "Python general", - "Best Practice", - "Data Science" - ], - "abstract_long": [ - "In recent years of the ways people get introduced into Python is through its scientific stack. Most people that learned Python this way are not trained software developers and many times it is the first contact with a programming language.\r\nAlthough this is not bad, it may lead to learn solely one aspect of the language while overlooking other idioms, standard and common libraries included in Python as well as some basic software development good practices. This may become a problem when a data science project is moved from an experimentation phase to an integration with technical environment. \r\n\r\nIn this talk I share some useful tricks, tools and techniques and as well as some software design and development principles that I find beneficial when working on a data processing / science project.\r\n\r\nThe talk is divided into two parts, one is Python centered, where I will talk about some powerful Python construct that are useful in data processing tasks. This include some parts collections module, generators and iterators among others. The other I will describe some general software development concepts including SOLID, DRY, and KISS that are important to understand the rationale behind software design decisions. \r\n" - ], - "abstract_extra": "I am been thinking in the idea for this talk for some time already . I gave a lighting talk on this subject during the [PyData Meetup in Berlin in 2015][1].\r\n\r\nAs speaker experience I have spoken in some meetups and talks including Munich Data Geeks, PyData Meetup, PyData Berlin 2015. I also gave a lighting talk at Europython 2015. \r\n\r\nSome of my slides can be found here: https://speakerdeck.com/mfcabrera\r\n\r\n [1]: https://speakerdeck.com/mfcabrera/pydata-berlin-meetup-nov-2015-some-of-the-things-i-wish-i-knew-before-starting-using-python-for-data-science\r\n", - "tag_categories": [ - "Programming", - "Python", - "Best Practice and Use Cases", - "Data Science" - ], - "emails": "mfcabrera@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/things-i-wish-i-knew-before-starting-using-python-for-data-processing", - "admin_type": "", - "companies": "TrustYou" - }, - "617": { - "abstract_short": "What systems and tools are useful for encrypting and securing email today? After discussing attack vectors we'll explore two user-side techniques for establishing end-to-end encryption, GPG and S/MIME. We then look at two projects which aim to provide ready-made email-server provisioning, Mail-in-a-box and LEAP and conclude with spotlights on ongoing EU-research projects aiming to improve email. ", - "sub_title": "", - "timerange": "2016-07-19 10:30:00, 2016-07-19 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@, @", - "id": 617, - "speakers": "holger krekel, Kali Kaneko", - "title": "Towards More Secure Emailing", - "have_tickets": [ - true, - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Security", - "Infrastructure", - "Best Practice" - ], - "abstract_long": [ - "Email has been declared dead several times but refuses to die. It remains the backbone of the web and remains the largest federated open social network to date. However, most people and organisations rely on a few big email operators which fund their operations through advertisements and user tracking. But is it neccessary to hand off email messaging operations to large operators? Is dealing with unsolicited email (SPAM) still too maintenance intensive to deploy it by yourself? Is handling secret keys to unlock encrypted mails still a nightmare? Are there somewhat secure email hosting solutions?\r\n\r\nIn recent years there have been renewed efforts to renovate the state of world wide email infrastructure with initiatives such as the \"Dark Mail Alliance\", \"FreedomBox\", \"Mailpile\", \"Mail-in-a-box\" and the \"LEAP encryption access project\". Some of them are using Python to provide security to users both from criminal, corporate and state level attacks and could use help from experienced python programmers.\r\n\r\nThe talk concludes with highlighting current ongoing research (Panoramix and NEXTLEAP) funded by the European Union over the next couple years. They try to ease and automate key management and provide \"encryption by default\" among other goals. After this talk you'll end up having a better understanding of how you can use existing technologies for yourself or your organisation and how you can possibly help to improve them and make life for users and activists safer world-wide.", - "", - "", - "" - ], - "abstract_extra": "I intend to give this talk with Kali Kaneko from Guatemala but didn't see a way to add him as co-speaker. ", - "tag_categories": [ - "Security", - "DevOps", - "Best Practice and Use Cases" - ], - "emails": "holger@merlinux.eu, bennomadic@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/towards-more-secure-emailing", - "admin_type": "", - "companies": "LEAP Encrypted Access Project, merlinux GmbH" - }, - "644": { - "abstract_short": "El ecosistema cient\u00edfico de python es extraordinario y saca m\u00fasculo con las \u00faltimas aportaciones de la comunidad cient\u00edfica. Revisaremos nuevas aproximaciones a la representaci\u00f3n de texto. \u00a1Tus cadenas de texto merecen algo m\u00e1s que una m\u00edsera bolsa de palabras! Veremos c\u00f3mo se aplica la representaci\u00f3n distribuida (word embeddings) en un caso pr\u00e1ctico de aprendizaje autom\u00e1tico, y daremos consejos para hacer experimentos replicables y obtener datos significativos.", - "sub_title": "\u201cNuevas\u201d aproximaciones a la representaci\u00f3n de texto para el procesamiento del lenguaje natural", - "timerange": "2016-07-19 11:15:00, 2016-07-19 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@maidotgimenez", - "id": 644, - "speakers": "Mai Gim\u00e9nez", - "title": "Un vector por tu palabra", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Educational Track", - "Science Track", - "PyLadies", - "Data Science", - "Deep Learning" - ], - "abstract_long": [ - "\u201cDime con quien andas y te dir\u00e9 c\u00f3mo eres\u201d Este dicho es una de las ideas m\u00e1s revolucionarias en PLN. Podemos saber muchas cosas de una palabra por su contexto. No es lo mismo un adorable gato que un gato mec\u00e1nico, pero por el contexto diferenciamos esta palabra polis\u00e9mica.\r\nHasta ahora la mayor parte de los modelos representan una frase como una bolsa de palabras. Por ejemplo, si queremos representar este conjunto de frases: [\u201cI love Python\u201d, \u201cI love NLP\u201d, \u201cPyladies are cool\u201d] tenemos un vocabulario de siete palabras: [\u201cI\u201d, \u201clove\u201d, \u201cPython\u201d, \u201cNLP\u201d, \u201cPyladies\u201d, \u201care\u201d, \u201ccool\u201d] esta representaci\u00f3n crea un vector de tama\u00f1o del vocabulario para cada frase, y pone a 1 si la palabra aparece y a 0 en el caso contrario : [[1,1,1,0,0,0,0], [1,1,0,1,0,0,],[0,0,0,0,1,1,1]] \u00a1Pero,se pierde el contexto y los vectores pueden ser gigantes y con much\u00edsimos 0s!\r\nRecientemente, hemos encontrado una forma mucho mejor de representar las palabras: La representaci\u00f3n distribuida -word2vec, por ejemplo- \r\nEn esta charla exploramos esta representaci\u00f3n y c\u00f3mo aplicarla en problemas de clasificaci\u00f3n utilizando textos de redes sociales. \r\nNavegaremos por el rico ecosistema cient\u00edfico en python, veremos c\u00f3mo crear gr\u00e1ficas significativas y hablaremos de la importancia de escribir experimentos bien dise\u00f1ados, replicables y con c\u00f3digo elegante y por supuesto de la importancia de difundir el conocimiento. Debemos inspirar a la siguiente generaci\u00f3n de cient\u00edficos y cient\u00edficas \u00a1Seamos extraordinarios!" - ], - "abstract_extra": "He dado charlas en la PyConES 2013 (https://youtu.be/8MRG6SixmeM), PyConES 2014 (https://youtu.be/k5-50FFCifw) y estuve en la sesi\u00f3n de posters de la PyCon 2014(https://us.pycon.org/2014/schedule/presentation/94/). He formado parte del equipo organizador de la PyConEs 2015.\r\nDoy charlas en Python Valencia, Betabeers y en pr\u00e1cticamente en cualquier evento que me dejen predicar sobre lo mol\u00f3n que es python, lo importante que es la diversidad en la comunidad y en definitiva compartir conocimiento. \r\n", - "tag_categories": [ - ">>> Suggested Track", - ">>> Suggested Track", - "Community", - "Data Science", - "Data Science" - ], - "emails": "mai@immutable.es", - "language": "Spanish", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/un-vector-por-tu-palabra", - "admin_type": "", - "companies": "" - }, - "703": { - "abstract_short": "I will describe a scientific application of python in the field of Astrophysics and Cosmology. How the publicly available package Monte Python is used to compare data from space satellite missions with theoretical models that attempt to describe the evolution and content of the Universe. The result is surprising, as it points towards a Universe which is mainly dark.", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@vpettorino", - "id": 703, - "speakers": "Valeria Pettorino", - "title": "Unveiling the Universe with python", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Visualization", - "Science", - "Python general", - "Scientific Libraries (Numpy/Pandas/SciKit/...)", - "Physics" - ], - "abstract_long": [ - "Python is widely used in Cosmology, which is the study of the Universe and all forms of energy in it. A large amount of data has been recently obtained through space satellite missions, such as Planck, financed by ESA/NASA. Planck has observed the radiation emitted about 13 billion years ago (the Cosmic Microwave Background, CMB), which gives us information on the content and space-time geometry of the Universe. Many competitive theoretical models have been proposed that aim at describing the evolution of the species contained in the Universe: therefore, cosmologists need a method to identify which theoretical model better fits the data. In order to compare data with theoretical predictions, cosmologists use Bayesian statistics and Monte Carlo simulations. Among the tools developed for the analysis, the package \u2018Monte Python\u2019 is publicly available and uses python to perform Monte Carlo simulations: this allows to determine the theoretical model that maximizes the likelihood to obtain the observed data. Such model is now the standard cosmological model and reveals a Universe that is very different from what scientists had ever expected. A Universe in which the atoms we are made of, constitute only 5% of the total energy budget. The rest is the so-called \u2018Dark Universe\u2019.\r\n\r\nI will illustrate the story of how cosmologists used python to analyse the data of the CMB and unveil the Dark Universe.", - "", - "", - "" - ], - "abstract_extra": "none", - "tag_categories": [ - "Data Science", - "Sciences", - "Python", - "Data Science", - "Sciences" - ], - "emails": "valeria.pettorino@me.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/unveiling-the-universe-with-python", - "admin_type": "", - "companies": "University of Heidelberg" - }, - "434": { - "abstract_short": "Python\u2019s double-underscore ('`__`') methods and attributes go by many names, including \u201cspecial\u201d, \u201cdunder\u201d, and \u201cmagic\u201d. You already use some, like `__init__`, but there are many more! \r\n\r\nIn this talk, we\u2019ll see how dunders can be useful, silly, dangerous, and fun! We\u2019ll trick Python\u2019s arithmetic and comparison operators. We\u2019ll make objects behave like dictionaries and containers. We\u2019ll reduce an object\u2019s memory usage, and speed up membership tests. We\u2019ll even try some naughty function hacks!\r\n", - "sub_title": "The world of special dunder magic", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@AnjanaVakil", - "id": 434, - "speakers": "Anjana Vakil", - "title": "Using and abusing Python\u2019s double-underscore methods and attributes", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Python 3", - "Python general", - "Programming" - ], - "abstract_long": [ - "The curious Python methods and attributes surrounded by double underscores ('`__`') go by many names, including \u201cspecial\u201d, \u201cdunder\u201d, and \u201cmagic\u201d. You probably use some of them, like `__init__`, every day. But that\u2019s just the tip of the iceberg! \r\n\r\nIn this talk, we\u2019ll explore the weird and wonderful world of the double-underscore, and find out how dunders can be useful, silly, dangerous, and just fun! We\u2019ll play pranks on Python\u2019s builtin operators for arithmetic and comparison. We\u2019ll make arbitrary objects behave like dictionaries and containers. We\u2019ll reduce an object\u2019s memory usage, and speed up tests for membership. We\u2019ll even try some naughty function hacks that we should never use in real life!\r\n\r\nYou'll get the most out of this talk if you're already comfortable writing object-oriented Python code. If you already use special dunder magic in your own code, that's excellent! You\u2019ll have a chance to share your tips & tricks with the rest of the audience at the end of the talk.\r\n" - ], - "abstract_extra": "Approximate timeline (30 minute talk):\r\n\r\n - :00 - Hello, who I am, gauge audience experience with dunders (1 min.)\r\n - :01 - Intro, familiar dunders (e.g. `__init__`, `__str__`) (2 min.)\r\n - :03 - Arithmetic and comparisons: (e.g. `__mod__`, `__eq__`) (4 min.)\r\n - :07 - Emulating dictionaries (`__getitem__`, etc.) and collections (`__len__`, `__contains__`) (5 min.)\r\n - :12 - Optimizations: `__contains__`, `__slots__` (4 min.)\r\n - :16 - Function hacks: implementing `__call__` on non-functions, replacing a function\u2019s `__defaults__` and `__code__` (4 min.)\r\n - :20 - Links to further reading; Audience members share their dunder tricks (5 min.)\r\n - :25 - Q&A (5 min.)\r\n\r\nI\u2019m submitting this as a standard 30-minute talk, but I think it\u2019s possible the topic could also work for an interactive session, with the audience participating in coding through the examples and coming up with ideas for fun and interesting hacks using these methods/variables. If you think it would work better in that format, please let me know.\r\n\r\nEven in the 30-minute talk format, I\u2019d really like to have an interactive tip-sharing session at the end of the talk, as mentioned in the long abstract and timeline. I imagine that this will probably merge with the Q&A and become a 10-minute discussion at the end of the talk. I hope this fits in nicely with the enhanced focus on interactivity for this year\u2019s conference, but if it\u2019s not desirable for whatever reason, I can easily replace the tip-sharing session with additional content (e.g. context managers with `__enter__` and `__exit__`) or examples. \r\n\r\nI haven't given a talk at EuroPython or another Python conference before, but I have public speaking experience in the form of several talks at academic conferences, on software and research for computational linguistics. A list of my previous talks is available at [https://vakila.github.io/talks/ ][1](links to slides are provided).\r\n\r\nIf you have any questions, need clarification, or have any other feedback on this proposal, please do get in touch! I\u2019m best reached by email, but I will be on holiday with limited internet access from February 29 to March 7.\r\n\r\n [1]: https://vakila.github.io/talks/ \r\n", - "tag_categories": [ - "Python", - "Python", - "Programming" - ], - "emails": "anjanavakil@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/using-and-abusing-pythons-double-underscore-methods-and-attributes", - "admin_type": "", - "companies": "Mozilla" - }, - "504": { - "abstract_short": "Let's compare the usage of three major **service discovery** technologies to build a dynamic and distributed python application !\r\n\r\nThis talk will be about **consul**, **etcd** and **zookeeper** and their python bindings and will feature code along with a live demo.", - "sub_title": "Concrete python usage of three Service Discovery technologies", - "timerange": "2016-07-20 10:30:00, 2016-07-20 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@ultrabug", - "id": 504, - "speakers": "Alexys Jacob", - "title": "Using Service Discovery to build dynamic python applications", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "System Architecture", - "Infrastructure", - "Distributed Systems", - "Scaling", - "DevOps general" - ], - "abstract_long": [ - "This talk will **showcase and compare** three Service Discovery technologies and their usage to **build a dynamic and distributed python application** :\r\n\r\n- consul\r\n- etcd\r\n- zookeeper\r\n\r\nAfter a short introduction to service discovery, we will **iterate and compare** how we can address the concrete and somewhat complex design of our python application using each technology.\r\n\r\nWe'll then be able to discuss their strengths, weaknesses and python bindings and finally showcase the application in a demo.\r\n\r\nAll the source code will of course be made available for the audience to benefit and start from for their own use !" - ], - "abstract_extra": "Yes, I'm crazy enough to sell a live demo. I have faith in you and... it worked well last year !", - "tag_categories": [ - "DevOps", - "DevOps", - "DevOps", - "DevOps", - "DevOps" - ], - "emails": "ultrabug@ultrabug.net", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/service-discovery-for-dynamic-python-applications", - "admin_type": "", - "companies": "Numberly" - }, - "404": { - "abstract_short": "Compare full text search engines for Python.\r\n", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:45:00", - "sub_community": "pydata", - "duration": 45, - "twitters": "@a_soldatenko", - "id": 404, - "speakers": "Andrii Soldatenko", - "title": "What is the best full text search engine for Python?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "PyCharm Room [PyData Track]", - "tags": [ - "PostgreSQL", - "Python 3", - "Elastic Search", - "Documentation" - ], - "abstract_long": [ - "Nowadays we can see lot\u2019s of benchmarks and performance tests of different web frameworks and Python tools. Regarding to search engines, it\u2019s difficult to find useful information especially benchmarks or comparing between different search engines. It\u2019s difficult to manage what search engine you should select for instance, ElasticSearch, Postgres Full Text Search or may be Sphinx or Whoosh. You face a difficult choice, that\u2019s why I am pleased to share with you my acquired experience and benchmarks and focus on how to compare full text search engines for Python.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Databases", - "Python", - "Databases", - "Programming" - ], - "emails": "andrii.soldatenko@gmail.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/what-is-the-best-full-text-search-engine-for-python", - "admin_type": "", - "companies": "Toptal" - }, - "557": { - "abstract_short": "Haskell community has made lots of small important improvements to packaging in 2015. What can Python community learn from it and how are we different?", - "sub_title": "A subtle introduction into Haskell packaging and differences to Python ecosystem", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 557, - "speakers": "Domen Ko\u017ear", - "title": "What Python can learn from Haskell packaging", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "DevOps general", - "System Administration" - ], - "abstract_long": [ - "Haskell community has been living in \"Cabal hell\" for decades, but Stack tool and Nix language have been a great game changer for Haskell in 2015.\r\n\r\nPython packaging has evolved since they very beginning of distutils in 1999. We'll take a look what Haskell community has been doing in their playground and what they've done better or worse.\r\n\r\nThe talk is inspired by Peter Simons talk given at Nix conference: [Peter Simons: Inside of the Nixpkgs Haskell Infrastructure][1]\r\n\r\n [1]: https://www.youtube.com/watch?v=TDnZsBxqeBM&list=PL_IxoDz1Nq2Y7mIxMZ28mVtjRbbnlVdmy&index=4\r\n\r\nOutline:\r\n\r\n- Cabal (packaging) interesting features overview \r\n - Cabal file specification overview\r\n - Interesting Cabal features not seen in Python packaging\r\n - Lack of features (introduction into next section)\r\n- Cabal hell \r\n - Quick overview of Haskell community frustration over Cabal tooling\r\n- Stack tool overview \r\n - What problem Stack solves\r\n - How Stack works\r\n - Comparing Stack to pip requirements\r\n- Using Nix language to automate packaging \r\n - how packaging is automated for Haskell\r\n - how it could be done for Python" - ], - "abstract_extra": "", - "tag_categories": [ - "DevOps", - "DevOps" - ], - "emails": "domen@dev.si", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/what-python-can-learn-from-haskell-packaging", - "admin_type": "", - "companies": "" - }, - "426": { - "abstract_short": "This talk covers the basics of what Object Orientation (OO) is really about. It focusses on the problem OO is aimed at solving and shows where the OO mechanisms of Python fit into this picture. This material can serve as an introduction to OO for beginners, but also as a homing signal for experienced programmers who are doubting whether they are reaping the benefits OO promises.", - "sub_title": "", - "timerange": "2016-07-21 11:15:00, 2016-07-21 12:00:00", - "sub_community": "", - "duration": 45, - "twitters": "@reahl", - "id": 426, - "speakers": "Iwan Vosloo", - "title": "What's the point of Object Orientation?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Software Design", - "Programming", - "Abstractions", - "Best Practice" - ], - "abstract_long": [ - "Object Orientation (OO) is often introduced in terms of how it is implemented by a specific language. However, understanding the theory underlying OO is not quite the same as understanding how OO concepts are supported by a particular language. It is insightful to understand the simple OO fundamentals and how these map to the particular implementation provided by Python.\r\n\r\nIn this talk I will first explain the very basics of OO from a language-neutral point of view with the aim of showing what OO can offer you and to give a glimpse of the simple mathematical theory underlying OO. I hope to give you enough information to help you distinguish between better and worse designs and to detect whether you\u2019re using OO as it was intended. I will also very briefly show how these fundamentals map to Python.\r\n\r\nThis talk is for anyone: whether you\u2019re new at Object Orientation, or a practitioner wondering whether OO is worth the effort you\u2019ve spent trying to use it." - ], - "abstract_extra": "Hi, I have given versions of this talk before at PyCon Namibia (not recorded) and [PyConZA (http://youtu.be/M1XL65qj2dU)][1]. People found it useful there, so I thought it may be worthwhile for people at EuroPython too.\r\n\r\nI am the main author of [Reahl (http://www.reahl.org)][2] and gave presentation on it last year at [EuroPython (https://ep2015.europython.eu/conference/talks/reahl-the-python-only-web-framework)][3]\r\n\r\n [1]: http://youtu.be/M1XL65qj2dU\r\n [2]: http://www.reahl.org\r\n [3]: https://ep2015.europython.eu/conference/talks/reahl-the-python-only-web-framework", - "tag_categories": [ - "Programming", - "Programming", - "Everything Else", - "Best Practice and Use Cases" - ], - "emails": "iwan@reahl.org", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/whats-the-point-of-object-orientation", - "admin_type": "", - "companies": "Reahl Software Services (Pty) Ltd" - }, - "521": { - "abstract_short": "We all know Python strength does not rely on its performance and speed when running programs. This plus the flexibility of it, can lead to build real slow and bad quality software.\r\n\r\nIn this talk you will discover a set of useful tools for diagnosing where the bottleneck is in your programs along with trips for quickly realizing which is the most needed resource.", - "sub_title": "", - "timerange": "2016-07-18 10:30:00, 2016-07-18 11:15:00", - "sub_community": "", - "duration": 45, - "twitters": "@", - "id": 521, - "speakers": "Manuel Miranda", - "title": "Where is the bottleneck?", - "have_tickets": [ - true - ], - "type": "Talk (45 mins)", - "status": "accepted", - "track_title": "A2", - "tags": [ - "Performance", - "Best Practice", - "Code Analysis" - ], - "abstract_long": [ - "Have you ever felt like your software is eating your resources and you have no clue why? Have you reviewed all the lines, debugged and printed everything but you still don't know what's wrong?\r\n\r\nIn this talk I will conduct a fast intro of a basic set of tools you can use to diagnose your software's performance and then we will go through a simple piece of code with different problems and solve them one by one, using those previously presented tools ending up with a decent and acceptable piece of code.\r\n\r\nThis set of tools will include basic ones given by the OS itself like `htop`, `lsof`, `ps` and more advanced ones that let you plot the memory usage for given functions like `memory_profiler`, check CPU usage and the call graph between functions like `cprofile` and `kcachegrind` and others.\r\n\r\nAlso, you will discover some bad practices and \"don't dos\" with python language that can slow you down.\r\n\r\nBy the end of the talk, you should have an idea of which are the most typical causes that can make your program slow and you will have a list of tools to search for and identify the source of the problems.\r\n" - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Best Practice and Use Cases", - "Programming" - ], - "emails": "manu.mirandad@gmail.com", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/where-is-the-bottleneck", - "admin_type": "", - "companies": "Skyscanner" - }, - "485": { - "abstract_short": "The LLVM Project provides an intermediate representation (LLVM-IR) that can be compiled on many platforms. LLVM-IR is used by analytical frameworks to achieve language and platform independence. What if we could add Python to the long list of languages that can be translated to LLVM-IR? This talk will go through the steps of wrestling Python into LLVM-IR with a simple, static one-pass compiler.", - "sub_title": "", - "timerange": "2016-07-22 12:00:00, 2016-07-22 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 485, - "speakers": "Anna Herlihy", - "title": "Wrestling Python into LLVM Intermediate Representation", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "Cross-Platform-Development", - "Compiler and Interpreters", - "Open-Source", - "Data Science", - "Analytics" - ], - "abstract_long": [ - "What is LLVM-IR?\r\n\r\nThe LLVM Compiler Infrastructure Project provides a transportable intermediate representation (LLVM-IR) that can be compiled and linked into multiple types of assembly code. What is great about LLVM-IR is that you can take any language and distill it into a form that can be run on many different machines. Once the code gets into IR it doesn\u2019t matter what platform it was originally written on, and it doesn\u2019t matter that Python can be slow. It doesn\u2019t matter if you have weird CPUs - if they\u2019re supported by LLVM it will run.\r\n\r\nWhat is Tupleware?\r\n\r\nTupleWare is an analytical framework built at Brown University that allows users to compile functions into distributed programs that are automatically deployed. TupleWare is unique because it uses LLVM-IR to be language and platform independent.\r\n\r\nWhat is PyLLVM?\r\n\r\nThis is the heart of the talk. PyLLVM is a simple, easy to extend, one-pass static compiler that takes in the subset of Python most likely to be used by Tupleware. PyLLVM is based on an existing project called py2llvm that was abandoned around 2011. \r\n\r\nThis talk will go through some basic compiler design and talk about how some LLVM-IR features make our lives easier, and some much harder. It will cover types, scoping, memory management, and other implementation details. To conclude, it will compare PyLLVM to Numba, a Python-to-LLVM compiler from Continuum Analytics and touch on what the future has in store for PyLLVM.", - "", - "", - "" - ], - "abstract_extra": "Hello!\r\n\r\nI am extremely excited to submit a proposal for EuroPython 2016! I\u2019ve been getting to know the Python community over the past year and a half and have been completely charmed. I\u2019m in my second year out of school and pretty new to speaking but I\u2019ve found the Python community to be supportive and welcoming.\r\n\r\nExperience with this talk\r\n====================\r\nThis talk was accepted at [PyCon 2016](https://us.pycon.org/2016/schedule/presentation/1420) in Portland, Oregon. When I submitted the talk proposal I was living in New York City, however now I live in Stockholm and am looking forward to meeting the European Python community! I don\u2019t think there will be too much audience overlap between the two conferences.\r\n\r\nI gave a version of this talk at PyGotham in August 2015. It was well received on Twitter (and another speaker, Eric Schles, mentioned in his talk that he thought everyone should watch the video!). I\u2019ve taken the feedback I got from this presentation and incorporated it into my new talk.\r\n\r\nThere were some technical difficulties with the A/V so I had to restart a few slides in, but the talk is almost fully recorded: \r\n\r\n[**Link to PyGotham video**](https://www.youtube.com/watch?v=_HdfEqSqI2M).\r\n\r\n[**Link to PyGotham slides**](https://github.com/aherlihy/PythonLLVM/blob/master/PyGotham%20Slides.pdf)\r\n\r\n[**Link to the paper that this talk is based on**](https://github.com/aherlihy/PythonLLVM/blob/master/Thesis.pdf)\r\n\r\nAnd if you\u2019re curious, the source code for the project itself is in the same repo!\r\n\r\nI also gave a much more technical version of this talk to the Brown University Computer Science department in 2014.\r\n\r\nOther Speaking Experience\r\n======================\r\nMost recently, I was invited to be a part of a panel organized by PyLadies and WriteSpeakCode called \u201cTales of Open Source: Five Contributors, Five Stories\u201d along with Ben Darnell, David Turner, Julian Berman, and Maia McCormick in October 2015 in NYC.\r\n[**Link to event page**](http://www.meetup.com/NYC-PyLadies/events/225696976)\r\n\r\nI spoke at OpenDataSciCon in Boston May 2015. I spoke about Monary, a fast, specialized MongoDB driver written in C and Python that copies data directly from MongoDB documents into NumPy arrays. \r\n[**Link to OpenDataSciCon talk**](http://bos2015.opendatascicon.com/schedule/monary-really-fast-analysis-with-mongodb-and-numpy). I tried to access this site just now (3/3) and it seems not to be working, but I'll leave the link there in case it is just temporarily down.\r\n\r\nI gave my first industry conference talk *ever* at PyData in NYC in November of 2014. I gave a talk similar to the OpenDataSciCon talk about Monary.\r\n[**Link to PyData video**](https://www.youtube.com/watch?v=E70AO8r5sMs)\r\n\r\nOpen Source Experience\r\n====================\r\nI am a contributor to PyMongo, Monary, MongoDB, and the MongoDB Ruby, C++, and C drivers. I currently maintain Mongo-Connector.", - "tag_categories": [ - "Python", - "Python", - "Open Source", - "Data Science", - "Data Science" - ], - "emails": "herlihyap@gmail.com", - "language": "English", - "level": "Advanced", - "url": "https://ep2016.europython.eu//conference/talks/wrestling-python-into-llvm-intermediate-representation", - "admin_type": "", - "companies": "MongoDB, Inc" - }, - "483": { - "abstract_short": "Presentation on how you can write faster Python in your daily work. I will briefly explain ways of profiling the code, discuss different code structures and show how they can be improved. You will see what is the fastest way to remove duplicates from a list, what is faster than a _for_ loop or how \u201casking for permission\u201d is slower than \u201cbegging for forgiveness\u201d.\r\n\r\n", - "sub_title": "", - "timerange": "2016-07-19 14:00:00, 2016-07-19 14:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@SebaWitowski", - "id": 483, - "speakers": "Sebastian Witowski", - "title": "Writing faster Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "A1", - "tags": [ - "Beginners", - "Performance", - "Best Practice" - ], - "abstract_long": [ - "Did you know that Python preallocates integers from -5 to 257 ? Reusing them 1000 times, instead of allocating memory for a bigger integer, can save you a couple of milliseconds of code\u2019s execution time. If you want to learn more about this kind of optimizations then, \u2026 well, probably this presentation is not for you :) Instead of going into such small details, I will talk about more _\"sane\"_ ideas for writing faster code.\r\nAfter a very brief overview of how to optimize Python code (rule 1: don\u2019t do this, rule 2: don\u2019t do this yet, rule 3: ok, but what if I really want to do this ?), I will show simple and fast ways of measuring the execution time and finally, discuss examples of how some code structures could be improved.\r\nYou will see:\r\n\r\n - What is the fastest way of removing duplicates from a list\r\n - How much faster your code is when you reuse the built-in functions instead of trying to reinvent the wheel\r\n - What is faster than the good ol\u2019 _for_ loop\r\n - If the lookup is faster in a list or a set (and when it makes sense to use each)\r\n - How the \u201cIt's better to beg for forgiveness than to ask for permission\u201d rule works in practice\r\n\r\nI will NOT go into details of _\"serious\"_ optimization, like using different Python implementation or rewriting critical code in C, etc.\r\n\r\n" - ], - "abstract_extra": "This is an extended and improved version of a presentation that I gave some time ago, as a part of Lightning Talks at CERN (slides and a link to the video are available here: [https://github.com/switowski/PythonPerformancePresentation][1]).\r\nThis time, less Dragon Ball pictures though :)\r\n\r\n [1]: https://github.com/switowski/PythonPerformancePresentation\r\n", - "tag_categories": [ - "Educational", - "Programming", - "Best Practice and Use Cases" - ], - "emails": "sebastian.witowski@cern.ch", - "language": "English", - "level": "Beginner", - "url": "https://ep2016.europython.eu//conference/talks/writing-faster-python", - "admin_type": "", - "companies": "CERN" - }, - "649": { - "abstract_short": "In this talk, I'll show you how to write redis using asyncio. You'll see how you can create a real world application using asyncio by creating a python port of redis.", - "sub_title": "", - "timerange": "2016-07-21 14:30:00, 2016-07-21 15:00:00", - "sub_community": "", - "duration": 30, - "twitters": "@jsaryer", - "id": 649, - "speakers": "James Saryerwinnie", - "title": "Writing Redis in Python with asyncio", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 2", - "tags": [ - "NoSQL", - "ASYNC / Concurreny", - "Databases" - ], - "abstract_long": [ - "Python has been adding more and more async features to the language. Starting with asyncio in python 3.4 and including the new async/await keywords in python 3.5, it's difficult to understand how all these pieces fit together. More importantly, it's hard to envision how to use these new language features in a real world application. In this talk we're going to move beyond the basic examples of TCP echo servers and example servers that can add number together. Instead I'll show you a realistic asyncio application. This application is a port of redis, a popular data structure server, written in python using asyncio. In addition to basic topics such as handling simple redis commands (GET, SET, APPEND, etc), we'll look at notifications using pub/sub, how to implement the MONITOR command, and persistence. Come learn how to apply the asyncio library to real world applications. " - ], - "abstract_extra": "This is an idea I started about a year ago. I wrote an initial blog post on the basic of writing redis in asyncio here: [Writing Redis in Python][1]\r\n\r\nHowever, this was all before the async/await keywords were added to the language and I found myself updating the code to reflect the latest changes to the python language and asyncio library.\r\n\r\nAt this point I think asyncio is at a nice and stable point where I can show the remaining work I've done for writing redis using asyncio.\r\n\r\nHere's a few places I've spoken in the past:\r\n\r\n* re:Invent 2015: https://www.portal.reinvent.awsevents.com/connect/sessionDetail.ww?SESSION_ID=1423&tclass=popup\r\n* OSCON: http://conferences.oreilly.com/oscon/open-source-2015/public/schedule/detail/42218\r\n* Pycon Canada: http://2013.pycon.ca/en/schedule/presentation/34/\r\n\r\n\r\n [1]: http://jamesls.com/writing-redis-in-python-with-asyncio-part-1.html", - "tag_categories": [ - "Databases", - "Programming", - "Databases" - ], - "emails": "js@jamesls.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/writing-redis-in-python-with-asyncio", - "admin_type": "", - "companies": "AWS" - }, - "656": { - "abstract_short": "There are many unit testing frameworks for C out there, but most of them require you to write your tests in C (or C++). While there might be good reasons to keep your implementation in C, those hardly apply to the tests. So wouldn't it be nice to use all the power of Python and its unit testing capabilities also for your C code? This talk will show you how.", - "sub_title": "", - "timerange": "2016-07-21 12:00:00, 2016-07-21 12:30:00", - "sub_community": "", - "duration": 30, - "twitters": "@", - "id": 656, - "speakers": "Alexander Steffen", - "title": "Writing unit tests for C code in Python", - "have_tickets": [ - true - ], - "type": "Talk (30 mins)", - "status": "accepted", - "track_title": "Barria 1", - "tags": [ - "Programming", - "C-Languages", - "Testing" - ], - "abstract_long": [ - "There are many unit testing frameworks for C out there, but most of them require you to write your tests in C (or C++). While there might be good reasons to keep your implementation in C (for example execution speed or resource consumption), those hardly apply to the tests. So wouldn't it be nice to use all the power of Python and its unit testing capabilities also for your C code?\r\n\r\nThis talk will show you how to combine CFFI and pycparser to easily create Python unit tests for C code, without a single line of C anywhere in the test cases. It will also cover creating mock functions in Python, that can be used by the C code under test to hide external dependencies. Finally, we will look at some of the challenges you might face when trying to mix Python and C and what to do about them." - ], - "abstract_extra": "", - "tag_categories": [ - "Programming", - "Other Programming Languages", - "Testing" - ], - "emails": "Alexander.Steffen@infineon.com", - "language": "English", - "level": "Intermediate", - "url": "https://ep2016.europython.eu//conference/talks/writing-unit-tests-for-c-code-in-python", - "admin_type": "", - "companies": "Infineon Technologies AG" - } - } -} diff --git a/ep2018/static/data/clean-talks.json b/ep2018/static/data/clean-talks.json deleted file mode 100644 index 2f2e323..0000000 --- a/ep2018/static/data/clean-talks.json +++ /dev/null @@ -1 +0,0 @@ -{"Poster sessions": {"287": {"id": 287, "abstracts": ["We learn best when we are relaxed, curious and enjoying ourselves. Without knowing a lot of Python, making a fun-to-play game is an achievable goal. Without knowing anything about programming, playing a game can be an accessible way to understand how programs work. The poster will invite people to consider the role of play in adult learning. (Much of it will also be relevent to teachers of younger people.) It will frame success and failure in the context of taking part, winning and losing.\r\n\r\nThe poster will give examples of games that are within the reach of a beginner programmer to design and build. It will explore what makes a well-designed game and how to develop good design elements simply. The goal is for people to identify resources for learning and developing Python skills based around building games. This will include: practice opportunities, Python libraries for game-building, and useful programming concepts.\r\n\r\nIf there are the facilities (small table and access to power) I will demonstrate **one** game during the poster session. The goal will be to illustrate the concepts, of good design and developing learning, introduced in my poster. It will have input and output interaction using a **Raspberry Pi** and basic electronics.\r\n\r\n"], "have_tickets": [false], "title": "Perceptions of Play: learning Python through games", "speakers": "Corinne Welsh", "track_title": "", "timerange": "", "duration": 90, "tags": ["Beginners", "pygame", "pyglet", "education", "games", "projects", "raspberrypi", "teaching", "learning", "fun", "Best Practice"]}, "141": {"id": 141, "abstracts": ["Inside [Aldebaran][1] company the goal of our team is to explore all the domains required for natural and efficient human-robot interaction. We mainly use python stack (scipy, numpy, scikit-learn) in our daily work as it provides a fast and efficient workflow to create and tune our robot behaviors.\r\n\r\nIn this presentation we will describe and demonstrate how we achieve real time sound event recognition on humanoids robots using python and scikit-learn. This work is funded by european project EARS in which our study case is a groom hotel robot that help customers : Two robots are waiting in a hotel lobby. They welcome people and give them relevant information. The robots detect and recognize sounds type such as: Door bell, phone ring, fire alarm, etc. New sounds could be easily learned by the robots.\r\n\r\nThe talk will be done by two human speakers followed by a live demonstration with NAO robots on the stage. Code and data will be published so everyone can experiments with sound recorded on the robots.", "Inside [Aldebaran][1] company the goal of our team is to explore all the domains required for natural and efficient human-robot interaction. We mainly use python stack (scipy, numpy, scikit-learn) in our daily work as it provides a fast and efficient workflow to create and tune our robot behaviors.\r\n\r\nIn this presentation we will describe and demonstrate how we achieve real time sound event recognition on humanoids robots using python and scikit-learn. This work is funded by european project EARS in which our study case is a groom hotel robot that help customers : Two robots are waiting in a hotel lobby. They welcome people and give them relevant information. The robots detect and recognize sounds type such as: Door bell, phone ring, fire alarm, etc. New sounds could be easily learned by the robots.\r\n\r\nThe talk will be done by two human speakers followed by a live demonstration with NAO robots on the stage. Code and data will be published so everyone can experiments with sound recorded on the robots.\r\n\r\nThe second speaker is [Alexandre Mazel][2].\r\n\r\n![][3]\r\n\r\n [1]: https://www.aldebaran.com/en\r\n [2]: https://ep2015.europython.eu/conference/p/alexandre-mazel\r\n [3]: http://studio.aldebaran-robotics.com/amazel/ears__sound_event_recognition/ears__sound_event_recognition.jpg\r\n", ""], "have_tickets": [false], "title": "Sound event recognition using python : application to humanoid robots with limited cpu", "speakers": "Laurent George", "track_title": "", "timerange": "", "duration": 90, "tags": ["robotics", "sound", "machine-learning", "scipy", "numpy", "sklearn"]}, "190": {"id": 190, "abstracts": ["We propose a web BI dashboard system developed for companies operating in the big market composed by several point of sales (POS) and providing services as stocking, distribution logistics, commercial support and promotional actions. \r\n\r\nWe have endowed the infrastructure with a set of statistical machine learning tools typical of high throughput bioinformatics, e.g., clustering procedures for time-series. Machine learning functionalities are actionable from on-line graphs, such as biclustering panels in which subset of retails and sales categories can be interactively selected. Currently 250 million entries are managed from the sales stream within the system. Network analysis (detection of community structure and co-occurrence patterns) combined with geospatial and socio-economic data are being developed as strategic tools.\r\n\r\nThe system is implemented as a web-based Django framework deployed on a AWS machine, using Celery and Redis to distribute tasks. This scalable framework can be accessed through a web interface from the strategic marketing and R&D departments and other directive figures; a similar and leaner interface is available for the individual POS owners. The web interface integrates Javascript libraries to obtain interactive displays connecting machine learning and data exploration (D3js, Highcharts, Sigma.js, Heatmap.js, leaflet, InCHlib). In particular we fork the django-highchart repository to improve functionalities available for the Django framework. Actionable dendrogram structures and sunburst plots allow the handling of big taxonomies typical of the category managment reference structures. Internally, the statistical machine learning methods are deployed as stored procedures for a PostgreSQL/PostGIS database, powered by the PL/R and PL/Python extensions. "], "have_tickets": [true], "title": "Actionable data analytics in retail marketing analysis", "speakers": "Ernesto Arbitrio", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "R", "data-science", "machine-learning", "visualization", "postgresql", "predictions", "django"]}, "125": {"id": 125, "abstracts": ["GR is an universal framework for cross-platform visualization applications. It offers developers a compact, portable and consistent graphics library for their programs. Its procedural graphics backend allows the presentation of continuous data streams. For object oriented environments such as graphical user interfaces a high level API has been implemented.\r\n\r\nIn this poster session, I will present PyGR, a companion module for GR that provides convenience functions for the interactive handling of real-time data, e.g. by zooming or panning. Using the QtGR module it is possible to easily integrate GR into GUI toolkits like Qt. It provides powerful widgets for 2D plotting and methods for embedding graphics into user interfaces based on PySide or PyQt.\r\n\r\nHowever, PyGR is not limited to a specific toolkit. The system\u2019s capabilities will be illustrated using concrete examples, e.g. NICOS, a network-based experiment and instrument control system used for neutron scattering experiments at FRM II in Munich.", "", ""], "have_tickets": [true], "title": "Embedding Visualization Applications with PyGR", "speakers": "Christian Felder", "track_title": "", "timerange": "", "duration": 90, "tags": ["visualization", "python"]}, "83": {"id": 83, "abstracts": ["Mongo-Board is a project focused on offering/building a graphical user interface to MongoDB replica set management and core-processes operations. The functionality is provided in two forms: a **standalone** core library that provides automation over MongoDB administrative operations and the **Mongo-Board UI**. A showcase in the form of an educational tool of its underlying library's possible usage where users can interact with a MongoDB cluster to perform various actions and view a log of all commands executed.\r\n\r\nCore features includes:\r\n\r\n-**MongoDB Instance Management** - connect to multiple remote servers, start/stop database instances, import/export database data\r\n\r\n -**Replica Set Management** - deploy, configure and maintain replica sets\r\n\r\nFirst, we developed a solution completely in PHP and currently we are in the middle of porting the back-end library into Python. I want to present our experience with MongoDB and discuss the architecture, challenges, solutions and open questions. \r\n\r\nThe poster will pose an interest to people passionate about client-server architecture, MongoDB management, administration and monitoring of processes, automation, as well as educational tools.\r\n\r\n [Article detailing some aspects of our initial project][1]\r\n\r\n[Video showcase][2]\r\n\r\n [1]: https://eastvisionsystems.com/mongoboard-replica-set-manager/\r\n [2]: https://eastvisionsystems.com/projects/#player4\r\n"], "have_tickets": [true], "title": "MongoBoard - A MongoDB replica set manager", "speakers": "Alex Porcescu", "track_title": "", "timerange": "", "duration": 90, "tags": ["automation", "mongodb", "learning", "linux", "system-administration"]}, "350": {"id": 350, "abstracts": ["DTOcean is a European collaborative project funded by the European Commission under the 7th Framework Programme for Research and Development. DTOcean that stands for Optimal Design Tools for Ocean Energy Arrays aims at at accelerating the industrial development of ocean energy power generation knowledge, and providing design tools for deploying the first generation of wave and tidal energy converter arrays. It gathers 18 partners from 11 countries (Ireland, Spain, United Kingdom, Germany, Portugal, France, Norway, Denmark, Sweden, Belgium and United States of America) under the coordination of the University of Edinburgh.\r\n\r\nDTOcean is developing an open source numerical tool using Python and many of the libraries developed for use with Python. This talk will discuss both the academic challenges of meeting the goals of the project and the technical challenges of organising and structuring a project consisting of many geographically dispersed partners with distinct tasks, but requiring close integration to solve the global optimisation problem.", "", ""], "have_tickets": [false], "title": "DTOcean: Optimal Design Tools for Ocean Energy Arrays", "speakers": "Mathew Topper", "track_title": "", "timerange": "", "duration": 90, "tags": ["science", "python", "data"]}, "68": {"id": 68, "abstracts": ["Parallel Programming Constructs and Techniques\r\nUsing an Embedded Flexible Language (EFL) for Python\r\n\r\nM. Goldstein , D. Dayan, D. Berlowitz, O. Berlowitz, Max Rabin, M. Nagar, D. Soudry, R. B. Yehezkael\r\n\r\nMulti-core CPUs are abundant and utilizing them effectively requires programmers to parallelize CPU-intensive code. To facilitate this, we have developed EFL, a deterministic parallel programming tool. \r\nThe parallel parts of a program are written as EFL-blocks, which are embedded into a sequential host language program. The sequential parts of the program are written in the host language, outside the EFL blocks. \r\nAn EFL pre-compiler translates EFL blocks into parallel Python code. EFL may be embedded in any host language by writing an appropriate pre-compiler. The EFL pre-compiler is being developed for other host programming languages (C++, Java, C#, Fortran, etc) as well as for other parallel platforms (DTM/MPI4PY, etc. ).\r\nHere we present the parallel programming constructs of EFL, such as parallel assignments, parallel for-loops, etc., and some examples of using EFL to implement Parallel Programming Design Patterns. \r\n", "", ""], "have_tickets": [true], "title": "Parallel Programming Constructs and Techniques Using an Embedded Flexible Language (EFL) for Python", "speakers": "Moshe Goldstein", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "Tooling", "Programming", "concurrency"]}, "337": {"id": 337, "abstracts": ["Rust is a new programming language from Mozilla, it has been announced as the successor of C and C++. \r\n\r\nIn this talk, I will show how to use Rust to extend Python via CFFI or ctypes because you want to optimize your code. But do you know we can integrate Python in Rust.\r\n\r\n* Brief introduction to Rust\r\n* Why Rust is a good candidate for the replacement of C\r\n* How to extend Python with Rust\r\n* How to interact with Python from Rust.", "", ""], "have_tickets": [true], "title": "Python, Rust, who extend who ?", "speakers": "Stephane Wirtel", "track_title": "", "timerange": "", "duration": 90, "tags": ["extending", "rust", "cpython"]}, "280": {"id": 280, "abstracts": ["Via several examples, this poster will present you how to handle quickly AsyncIO and how to build applications with [toolbox libraries][1] around AsyncIO.\r\n\r\nYou can create HTTP servers with AsyncIO, but also you can mixin several others server protocols like WebSockets, SSH, IRC, FastAGI or SIP.\r\n\r\nThis poster will show you that it can be easier to do than you think, AsyncIO ecosystem is beginner friendly.\r\n\r\n [1]: https://github.com/python/asyncio/wiki/ThirdParty"], "have_tickets": [false], "title": "AsyncIO ecosystem", "speakers": "Ludovic Gasc", "track_title": "", "timerange": "", "duration": 90, "tags": ["redis", "HTTP", "servers", "multi-processing", "aiohttp", "aiopg", "websockets", "python3", "asyncio"]}, "145": {"id": 145, "abstracts": ["Over the last fourteen years, Plone has had a remarkable journey: from just a wild idea by a few people to create a CMS which would combine the best technology with a vision of beauty and power to the reality of today: Plone is actively used by companies, governments, universities, nonprofits and other organizations of all sizes around the world.\r\n\r\nYet the vision behind it has stayed consistent. The Plone community chooses technology not for the sake of technology, but because it best solves the problems at hand. We value reliability, security and long-term stability, yet the community is agile enough to adapt where needed.\r\n\r\nThe poster will showcase Plone 5, a major new release which is a solid foundation for the challenges of today, while providing a good upgrade path for earlier versions. It can be used right away for installations of all sizes, but it is also flexible enough to serve as basis for specialized use cases. \r\nBut we do not stop there; the Plone community is already looking further into the future. In spring 2015, we have developed our roadmap forward into a future where themes like mobile-first play a much more important role. Plone will open up it's core strengths like rock-solid workflows, security, standards-compliance and multilingual support to modern ways of presenting these. And with Mosaic and other advances we put power - and fun! -, firmly into the hands of the users that want to create beautiful sites and applications.", "", ""], "have_tickets": [true], "title": "The current state & the future of Plone", "speakers": "Paul Roeland", "track_title": "", "timerange": "", "duration": 90, "tags": ["web", "Plone"]}, "82": {"id": 82, "abstracts": ["Creating a large-scale event processing system can be a daunting task. Especially if you want it \u201cstupid simple\u201d and wrapped around each client\u2019s needs. We built a straightforward solution for this using Python 3 and other open-source tools.\r\n\r\nMain issues to solve for a system that needs to be both performant and scalable:\r\n\r\n - handling a throughput of 1 million events per minute in a 4 cores AWS instance;\r\n\r\n - following the principle of least astonishment;\r\n\r\n - data aggregation and how Python's standard libraries and data structures can help;\r\n\r\n - failsafe and profiling mechanisms that can be applied to any Linux service in production;\r\n\r\n - addressing unexpected behaviors of Python\u2019s Standard Library; like reading from a file while it is written;\r\n\r\n - tackling a sudden spectacular cloud instance failure;\r\n\r\nThe alternative to this system would be to adopt existing technology stacks that might be too general, add more complexity, bloat, costs and which need extensive work to solve your specific problem. Moreover, our approach resulted in over 85% drop on hardware utilisation.\r\n\r\n[Context: Production Software \u2013 II (where good coding reduces the client\u2019s bill)][1]\r\n\r\n [1]: https://eastvisionsystems.com/production-software-part-ii-good-coding-reduces-clients-bill/\r\n", "", ""], "have_tickets": [true], "title": "Use Python to process 12mil events per minute and still keep it simple (Poster Session)", "speakers": "Teodor Dima", "track_title": "", "timerange": "", "duration": 90, "tags": ["bigdata", "performance", "architecture", "Development"]}, "219": {"id": 219, "abstracts": ["Python is a popular and widely used programming language but its use is limited in certain cases. Concurrency is one of those cases when people look for an alternative. It's actually what happened at the start-up I work at before I joined. The co-founders looked for a solution in a functional programming language and chose to use Clojure. Functional programming is now implemented in most programming languages and functional languages are getting more and more popular. For a junior developer learning a functional language as her/his second programming language completely make sense and I was up for the challenge! Clojure is not so different from Python in its readability and might be one of the easiest functional languages to learn for a Pythonista. I would like to share my tips and tools I used for learning and contributing to a code base in Clojure.\r\n\r\nThere are several online resources to understand the paradigm of functional programming. The same can be said regarding Clojure but a good way to learn aside from diving into a codebase is to take part in a community. The Clojurians are much fewer than the Pythonistas but they are equally friendly. They are looking forward to grow their community and their meetups and dojos are well suited to beginners. At some point you have to throw yourself into this sea of parentheses so you'd better be well equipped! In that aim Emacs is by far the best suited text editor. After customising it with the right tools you shall fear no orphan parens!\r\nThis experience will help you progress and focus on writing more concise code with short and clear functions. You will be more comfortable and curious about implementing the functional features of the Python language. Getting always closer to the Zen of Python: \" Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. .... \" "], "have_tickets": [true], "title": "From Python to Clojure", "speakers": "Eleonore Mayola", "track_title": "", "timerange": "", "duration": 90, "tags": ["python", "Lisp", "Clojure", "Functional Programming"]}, "263": {"id": 263, "abstracts": ["In this poster session I'm going to introduce Scrapinghub's new open source framework [Frontera][1]. Frontera allows to build real-time distributed web crawlers and website focused ones. \r\n\r\nOffering:\r\n\r\n - customizable URL metadata storage (RDBMS or Key-Value based),\r\n - crawling strategies management,\r\n - transport layer abstraction.\r\n - fetcher abstraction.\r\n\r\nAlong with framework description I'll demonstrate how to build a distributed crawler using [Scrapy][2], Kafka and HBase, and hopefully present some statistics of Spanish internet collected with newly built crawler. Happy EuroPythoning!\r\n\r\n [1]: https://github.com/scrapinghub/frontera\r\n [2]: http://scrapy.org/\r\n", "", ""], "have_tickets": [true], "title": "Frontera: open source large-scale web crawling framework", "speakers": "Alexander Sibiryakov", "track_title": "", "timerange": "", "duration": 90, "tags": ["scrapy", "kafka", "hbase", "webcrawling", "distributed-systems"]}}, "EuroPython sessions": {"367": {"id": 367, "abstracts": ["We need help with organizing and running EuroPython 2016.\r\n\r\nIn this session, we will explain how the EuroPython workgroup model works and where you could help.\r\n", "", ""], "have_tickets": [true, true], "title": "EuroPython 2016: Help us build the next edition!", "speakers": "Fabio Pliger, Marc-Andre Lemburg", "track_title": "Barria1 Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["conference", "EuroPython", "eps"]}, "368": {"id": 368, "abstracts": ["The EuroPython General Assembly.\r\n\r\nThis is where we give our reports and the EPS members can vote in a new EPS board.", "", ""], "have_tickets": [true, true], "title": "EPS General Assembly", "speakers": "Fabio Pliger, Marc-Andre Lemburg", "track_title": "Barria1 Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 16:15:00", "duration": 60, "tags": ["GA", "EuroPython", "eps", "assembly"]}}, "Talks": {"298": {"id": 298, "abstracts": ["The hook-based plugin system used by py.test and being made available\r\nas a stand alone package allows easy extensibility based on defined\r\nextension points which can be implemented using hook functions in the\r\nplugins. Plugins can themselves call these hooks as well as define\r\nfuture extension points allowing for a very flexible design.\r\n\r\npy.test itself uses this plugin system from the ground up with the\r\nentire application being implemented by built-in plugins. This\r\narchitecture has proven powerful and flexible over the years, on both\r\ncommand line tools as well as long running daemons. This talks will\r\ndescribe how the plugin system works and how it deals with passing\r\narguments and return values 1:N hook calls. It will also describe how\r\nto design an application consisting entirely of plugins. While not\r\nspecifically talking about py.test it will also give a solid\r\nunderstanding on how plugins work in py.test."], "have_tickets": [true], "title": "The hook-based plugin architecture of py.test", "speakers": "Floris Bruynooghe", "track_title": "A2 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["software-design", "architecture", "plugin"]}, "218": {"id": 218, "abstracts": ["The potential upside of microservices is significant and exciting. So much so that Yelp's Transaction Platform committed from the start to an architecture of small, cooperative microservices. This talk explores the inevitable complications that arise for Python developers in as the services grow larger and stretch both their own architecture and the developers responsible for them. Come hear tales of terror (tight coupling! low test coverage!), stories which will warm your heart (agility! strong interfaces!), and everything in between as we follow the adventures of our plucky team.\r\n\r\nThe talk will be focused on the functional, cultural, and reliability challenges which occur as a microservices-based project evolves and expands over time. Particular attention will be paid to where these diverge from the utopian way microservices are often described, and to the particular difficulties faced by Python developers trying to implement such systems. My goal is to share with attendees some mistakes we've made, some successful methods for growing gracefully, and Python-specific tools/libraries which can help with these problems.\r\n\r\nTo enjoy this talk, you should be aware of the basic vocabulary and concepts of HTTP-based services. Any additional awareness of distributed systems (and their failure modes) will be helpful."], "have_tickets": [true], "title": "Arrested Development - surviving the awkward adolescence of a microservices-based application", "speakers": "Scott Triglia", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["services", "distributed-systems", "HTTP"]}, "340": {"id": 340, "abstracts": ["An introduction to the devops culture by sharing our experience in a successfully French start-up.\r\n\r\nThe salt route talk presents some best practices and common mistakes that arise in everyday teamwork between developers and sysadmins using SaltStack for configuration management, server provisioning, orchestration and Django web applications deployment.\r\n\r\nAs an introductory talk there is no prerequisites required.\r\n\r\nThis talk will be presented by the dynamic duo Natal Ng\u00e9tal and Pablo Seminario, 2 co-workers at PeopleDoc Inc.", "", ""], "have_tickets": [true], "title": "The Salt Route", "speakers": "Pablo SEMINARIO", "track_title": "A2 Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["architecture", "ConfigurationManagement", "DevOps", "saltstack", "automation", "django", "deployment", "Best Practice"]}, "43": {"id": 43, "abstracts": ["gitfs is an open-source[1] filesystem which was designed to bring the full powers of Git to everyone, no matter how little they know about versioning. A user can mount any repository and all the his changes will be automatically converted into commits. gitfs will also expose the history of the branch you\u2019re currently working on by simulating snapshots of every commit.\r\n\r\ngitfs is useful in places where you want to keep track of all your files, but at the same time you don\u2019t have the possibility of organizing everything into commits yourself. A FUSE filesystem for git repositories, with local cache.\r\n\r\nIn this talk we will take a look at some of the crucial aspects involved in building a reliable FUSE filesystem, the steps that we took in building gitfs, especially in handling the git objects (http://git-scm.com/book/en/v2/Git-Internals-Git-Objects), what testing methods we have used for it and also we will share the most important lessons learned while building it.\r\n\r\nThe prerequisites for this talk are:\r\nA good understanding of how Git works\r\nBasic understaning of Operating Systems concepts\r\n\r\n[1] You can get the source here - https://github.com/PressLabs/gitfs; you cand find more details here - http://www.presslabs.com/gitfs/."], "have_tickets": [true], "title": "gitfs - building a filesystem in Python", "speakers": "Vlad Temian", "track_title": "Google Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["low-level", "FOSS", "cpython", "DevOps", "concurrency", "open-source", "linux", "fun", "pytest"]}, "208": {"id": 208, "abstracts": ["NumPy is the fundamental Python package for scientific computing. However, being efficient with NumPy might require slightly changing how you write Python code. \r\n\r\nI\u2019m going to show you the basic idioms essential for fast numerical computations in Python with NumPy. We'll see why Python loops are slow and why vectorizing these operations with NumPy can often be good. \r\n\r\nTopics covered in this talk will be array creation, broadcasting, universal functions, aggregations, slicing and indexing.\r\nEven if you're not using NumPy you'll benefit from this talk."], "have_tickets": [false], "title": "NumPy: vectorize your brain", "speakers": "Ekaterina Tuzova", "track_title": "Google Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:15:00", "duration": 45, "tags": ["numpy", "machine-learning"]}, "46": {"id": 46, "abstracts": ["CityBikes [1] started on 2010 as a FOSS alternative endpoint (and Android client) to gather information for Barcelona's Bicing bike sharing service. Later evolved as an open API [2] providing bike sharing data of any (mostly) service worldwide.\r\n\r\nFast forward today and after some C&D letters, there's support for more than 200 cities, more than 170M historical entries have been gathered for analysis (in approx. a year) and the CityBikes API is the main source for open bike share data worldwide. This talk will tour about how we got there with the help of python and the community [3].\r\n\r\nPS: We have a realtime map, it is awesome [4].\r\n\r\n [1]: http://citybik.es\r\n [2]: http://api.citybik.es\r\n [3]: http://github.com/eskerda/pybikes\r\n [4]: http://upcoming.citybik.es\r\n\r\n"], "have_tickets": [true], "title": "CityBikes: bike sharing networks around the world", "speakers": "Llu\u00eds Esquerda", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["redis", "nosql", "api", "data-science", "visualization", "bigdata", "mongodb", "flask", "open-source", "linux", "fun", "FOSS", "internationalization"]}, "224": {"id": 224, "abstracts": ["Lately, there's a lot of talk about microservices but not enough concrete examples and case studies. I want to change that by showing:\r\n\r\n - how thinking in PaaS terms can lead to robust and scalable designs;\r\n\r\n - what infrastructure and automation you need to set up to go along smoothly;\r\n\r\n - how to get real time metrics of your apps; \r\n\r\n - what makes Python good for microservices;\r\n\r\n - what is Python's performance relative to some alternatives.\r\n\r\n**Prerequisites for the talk:**\r\n\r\n - some experience with web development in Python;\r\n\r\n - basic knowledge of RESTful web services.\r\n\r\n"], "have_tickets": [true], "title": "Python microservices on PaaS done right", "speakers": "Micha\u0142 Bultrowicz", "track_title": "A2 Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["automation", "performance", "cloud", "metrics", "PaaS"]}, "93": {"id": 93, "abstracts": ["Finding a good structure for number-crunching code can be a problem, this especially applies to routines preceding the core algorithms: transformations such as data processing and cleanup, as well as feature construction.\r\n\r\nWith such code, the programmer faces the problem, that their code easily turns into a sequence of highly interdependent operations, which are hard to separate. It can be challenging to test, maintain and reuse such \"Data Science Spaghetti code\".\r\n\r\nScikit-Learn offers a simple yet powerful interface for data science algorithms: the estimator and composite classes (called meta-estimators). By example, I show how clever usage of meta-estimators can encapsulate elaborate machine learning models into a maintainable tree of objects that is both handy to use and simple to test.\r\n\r\nLooking at examples, I will show how this approach simplifies model development, testing and validation and how this brings together best practices from software engineering as well as data science.\r\n\r\n_Knowledge of Scikit-Learn is handy but not necessary to follow this talk._"], "have_tickets": [true], "title": "Using Scikit-Learn's interface for turning Spaghetti Data Science into Maintainable Software", "speakers": "Holger Peters", "track_title": "Barria1 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["python", "data-science", "machine-learning", "cleancode", "sklearn", "Best Practice", "Testing"]}, "159": {"id": 159, "abstracts": ["Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.\r\n\r\nIn this talk some advanced techniques will be shown based on how Scrapy is used at Scrapinghub.\r\n\r\nGoals:\r\n\r\n - Understand why its necessary to _Scrapy-ify_ early on.\r\n - Anatomy of a Scrapy Spider.\r\n - Using the interactive shell.\r\n - What are items and how to use item loaders.\r\n - Examples of pipelines and middlewares.\r\n - Techniques to avoid getting banned.\r\n - How to deploy Scrapy projects.\r\n\r\n\r\n"], "have_tickets": [true], "title": "Dive into Scrapy", "speakers": "Juan Riaza", "track_title": "Google Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["scrapy", "python", "open-source", "scraping"]}, "206": {"id": 206, "abstracts": ["From september 2015 Aarhus School of Engineering will offer the education Bachelor of Electronic Engineering, as a combined online and on campus education. In the talk I will describe the technical and pedagogical setup, we are working at to meet the challenges of having both on-site and remote students.\r\n\r\nI will also touch on how IPython Notebook, will be part of the technical setup, and how it can be incorporated into the teaching."], "have_tickets": [true], "title": "Online Education: challenges and opportunities for Staff and Students", "speakers": "Anders Lehmann", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["education", "ipython"]}, "293": {"id": 293, "abstracts": ["Do you know how a spreadsheet works? Can you imagine building one, from scratch, in Python? This talk will be a whirlwind overview of how to do just that. Based on the source code of Dirigible, a short-lived experiment in building a cloud-based Pythonic spreadsheet (now [open-sourced](https://github.com/pythonanywhere/dirigible-spreadsheet), for the curious).\r\n\r\nWe'll start from scratch, with a simple data representation for a two-by-two grid, and then gradually build up the functionality of our spreadsheet:\r\n- Cell objects, and the formula/value distinction\r\n- Evaluating cells, from simple arithmetic up to an Excel-like dialect\r\n- Building up the dependency graph, and the ensuing fun times with recursion (arg!)\r\n- Integrating custom functions and user-defined code.\r\n\r\nShowing and explaining code examples, and alternating with live demos (don't worry, I've done this before!)\r\n\r\nAnd it's all in Python! You'll be surprised at how easy it turns out to be, when you go step-by-step, each building on the last... And I promise you'll be at least a couple of moderately mind-blowing moments :)", "", ""], "have_tickets": [true], "title": "How to build a spreadsheet with Python", "speakers": "Harry Percival", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["Beginners", "data", "demo", "spreadsheet", "data-science"]}, "245": {"id": 245, "abstracts": ["You need to download data from lots and lots of URLs stored in a text file and then save them on your machine. Sure, you could write a loop and get each URL in sequence, but imagine that there are so many URLs that the sun may burn out before that loop is finished; or, you're just too impatient.\r\n\r\nFor the sake of making this instructive, pretend you can only use one box. So, what do you do? Here are some typical solutions: Use a single process that creates lots of threads. Use many processes. Use a single process and a library like asyncio, gevent or eventlet to yield between coroutines when the OS blocks on IO.\r\n\r\nThe talk will walk through the mechanics of each approach, and then show benchmarks of the three different approaches.\r\n", "", ""], "have_tickets": [true], "title": "Parallelism Shootout: threads vs asyncio vs multiple processes", "speakers": "Shahriar Tajbakhsh", "track_title": "A2 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["Parallelism"]}, "97": {"id": 97, "abstracts": ["\u00bfY si pudieras centrarte en la funcionalidad de tus\r\nservicios en lugar de programar la integraci\u00f3n entre ellos?\r\n\r\nlymph es un framework con personalidad propia para escribir\r\nservicios en Python que te permite hacer justo eso. Incluye\r\ndescubrimiento de servicios extensible, comunicaci\u00f3n v\u00eda\r\npetici\u00f3n-respuesta, comunicaci\u00f3n v\u00eda publicaci\u00f3n-subscripci\u00f3n\r\nextensible y gesti\u00f3n de procesos.\r\n\r\nA medida que crecen nuestros equipos de desarrollo, nos alejamos\r\ncada vez m\u00e1s de una arquitectura monol\u00edtica. Queremos empezar a\r\nescribir servicios sin tener que preocuparnos de los requisitos de\r\ninfraestructura. Queremos desarrollar de forma r\u00e1pida, centr\u00e1ndonos\r\nen nuestro trabajo.\r\n\r\nEn esta charla os ense\u00f1aremos lo f\u00e1cil que es desarrollar y\r\nejecutar servicios con lymph.\r\n\r\nEchad un ojo a http://lymph.io. Esperamos vuestros pull requests."], "have_tickets": [true], "title": "Deja de pegarte con tus servicios; import lymph", "speakers": "Alejandro Castillo", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["services", "zeromq", "events", "gevent", "web", "rpc", "open-source", "zookeeper", "rabbitmq", "framework"]}, "210": {"id": 210, "abstracts": ["\u201cCode shortening\u201d is the \u201csport\u201d where participants strive to achieve the shortest possible source code that solves a programming problem by exploiting all the tricks and quirks of the language.\r\n\r\nThe [SIZECON on SPOJ][1] is one of the oldest and most popular code shortening problems on the web with a bizarre twist, only character above ASCII value 32 are counted for the penalty. During the talk we will take a journey into some frightening depths of the Python language in order to write shorter and shorter solutions to SIZECON until, exploiting a number of truly mind-blowing tricks, we will reach the current record solution of 28 characters (above ASCII 32!).\r\n\r\nI promise I\u2019ll show you the most obfuscated, contrived and sick python code you have ever seen and (hopefully!) will ever see. I invite participants to give [SIZECON][1] a try and check their score against the [Python2][2] and [Python3][3] SPOJ rankings.\r\n\r\n [1]: http://www.spoj.com/problems/SIZECON/\r\n [2]: http://www.spoj.com/ranks/SIZECON/lang=PYTH%202.7\r\n [3]: http://www.spoj.com/ranks/SIZECON/lang=PYTH%203.2.3\r\n", "", ""], "have_tickets": [true], "title": "Solving the web most popular code shortening competition in Python.", "speakers": "Alessandro Amici", "track_title": "Barria2 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["competitions"]}, "288": {"id": 288, "abstracts": ["The talk would aim to introduce cryptography and security from the developer point of view, showing ways to encrypt information with Python scripts and more sensitive information in web applications using django.\r\n\r\nI will introduce to security in python ,showing some libraries that allow encryption and decryption like PyCrypto or M2Crypto,comparing theses libraries with the cryptography module.At the same time,I will show the main ciphers and hashing algorithms used in these libraries like AES,DES,RSA and some examples illustrating each case.I wil show other techniques like steganography for hiding information in files(images,documents,programs) with some libraries like Stepic or ezPyCrypto. \r\n\r\nFinally,I will comment OWASP Python Security Project where we can find some useful practices\r\nand secure coding guidelines for detecting potential security vulnerabilities in our applications like SQL injection or Cross-site scripting.\r\n"], "have_tickets": [true], "title": "Python Security & Cryptography", "speakers": "Jose Ortega", "track_title": "Barria1 Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["python", "algorithm", "best-practices", "django", "security", "cryptography"]}, "131": {"id": 131, "abstracts": ["At Blue Yonder, we've built a platform that can accept and process bulk amounts of data for multiple business domains (e.g. handling retail store location and sales data) using SQLAlchemy as a database abstraction layer.\r\nWe wanted to use as much of SQLAlchemy as possible, but we quickly found that the ORM (Object Relational Mapper) is not suitable for handling large amounts of data at once. At the same time, we did not want each team of developers working on individual business domains to have to handcraft their own SQL statements. To solve this problem, we built an application configuration that closely resembles an SQLAlchemy model, but also contains application-specific logic settings.\r\n\r\nIn this talk I will demonstrate:\r\n\r\n - an application architecture for multiple business domains\r\n\r\n - the structure of the domain configuration utilized in the generation of the SQLAlchemy model, SQLAlchemy core statements, and other application functionality\r\n\r\n - how the domain configuration is used throughout the application (consuming and parsing incoming data, storing it in a database and ensuring data quality)"], "have_tickets": [true], "title": "Building a multi-purpose platform for bulk data using sqlalchemy", "speakers": "Christian Trebing", "track_title": "Barria1 Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["bigdata", "SQLAlchemy"]}, "109": {"id": 109, "abstracts": ["This talk is about how python is used in cloud computing as well as used while configuring cloud infrastructure. It also gives brief about tools and technologies/libraries can be used for number of tasks while cloud development/execution. Developers and all python lovers are the perfect audience for this talk. They will get the brief about reliable stack of python based tools used in cloud development and also will be sharing the experience with python.\r\n\r\nSummary:\r\nPython in cloud. \r\nKind of services can be build with python.\r\nPython based tools used in deployment and configuration management for the cloud.\r\nFor every python lovers - How to create a python friendly cloud infrastructure with great reliable combination of many stable tools.\r\nStability.\r\nExperience sharing. "], "have_tickets": [true], "title": "Python for Cloud Services and Infrastructure Management", "speakers": "Bhaumik Shukla", "track_title": "Barria2 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["nosql", "python", "infrastructure", "REST", "mongodb", "DevOps", "configuration", "django", "deployment", "cloud", "fabric", "rabbitmq"]}, "281": {"id": 281, "abstracts": ["It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question \"How can we validate that our API is working as intended?\"\r\n\r\nIn this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design.\r\nI will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.\r\n\r\n"], "have_tickets": [true], "title": "TDD for APIs", "speakers": "Michael Kuehne", "track_title": "Barria1 Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["pytest", "django", "agile", "api", "tdd"]}, "60": {"id": 60, "abstracts": ["TDD is great, we all know that. But why is it so, and under which circumstances is it ineffective or even harmful?\r\n\r\nIn this talk I want to delve into the deeper meaning of testing to derive how to do it best.\r\nAll of this from the point of view of somebody who has profited but also struggled with testing and TDD.\r\n\r\nFor every experience level from beginner to advanced there is something to learn or ponder.\r\n"], "have_tickets": [true], "title": "TDD - the why, the how and the when not", "speakers": "Fabian Kreutz", "track_title": "Google Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["tdd", "Development", "Testing", "py.test"]}, "8": {"id": 8, "abstracts": ["Beginner's guide to Python code quality. I'll talk about the tools for code analysis, differences between them, extending them with new features and ways to running them automatically. In the end, I'll talk about reasons behind all of these tools and try to convince you to using them in your projects (but if you are against it - I'll gladly listen to your arguments).", "", ""], "have_tickets": [true], "title": "Code Quality in Python - tools and reasons", "speakers": "Rados\u0142aw Jan Ganczarek", "track_title": "Barria2 Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["automation", "python", "metrics"]}, "274": {"id": 274, "abstracts": ["Bring the continuous integration to a new level, through a platform/project independent framework able to give you unittest-like reports. Argus is a scenario-based application written in Python, driven by custom recipes under configurable environments, that can be used for testing a wide variety of small and big projects, with the ability of querying live data from the in-test application.\r\n\r\nUntil now, it's successfully used with [cloudbase-init][1] (a robust cloud initialization service for instances) under OpenStack and not only, due to its extensiveness and the ability to mimic different infrastructures. More details can be found on the package page: https://github.com/PCManticore/argus-ci.\r\n\r\nThe goals of this talk are to show its generic scalability, how simple is to create such kind of recipes, the relationship between scenarios, introspection and tests and, but not last, the unlimited freedom of creating very custom aspects of these entities which lead to relevant and in-depth ready for analysis logs. There are no major prerequisites to understand it, just to be familiar with Python and optionally have a focus on cloud infrastructures.\r\n\r\n[1]: https://github.com/stackforge/cloudbase-init"], "have_tickets": [true], "title": "Argus - the omniscient CI", "speakers": "Cosmin Poieana", "track_title": "A2 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["cloudbase-init", "continuous-integration", "argus", "devstack", "OpenStack", "open-source", "linux", "windows", "cloud", "Testing"]}, "117": {"id": 117, "abstracts": ["Defining a natural hierarchy of classes in Python can be challenging. Features like multiple inheritance, metaclasses, and classmethods can make such hierarchies significantly more powerful. However, these language features are complex and easy to use incorrectly. This talk will cover the best way to put the capabilities of classes to work so you can write Python programs more effectively.\r\n\r\nSpecifically, I'll cover these pieces of advice that I think you should follow:\r\n\r\n1. Initialize Parent Classes with `super`\r\n1. Use Multiple Inheritance Only for Mix-in Utility Classes\r\n1. Validate Subclasses with Metaclasses\r\n1. Register Class Existence with Metaclasses\r\n1. Use `@classmethod` Polymorphism to Construct Objects Generically\r\n\r\nWith each suggestion I'll use code examples to demonstrate why this is the best choice. When there are differences between Python 2 and Python 3, I'll highlight what's different. The goal is that intermediate programmers will learn some Python best practices, experienced programmers will gain confidence in their full use of Python's features."], "have_tickets": [true], "title": "How to Be More Effective with Classes", "speakers": "Brett Slatkin", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:15:00", "duration": 45, "tags": ["Practice", "Best"]}, "32": {"id": 32, "abstracts": ["One of the key aspect to keep in mind when developing a scalable application is its faculty to grow easily. But while we're used to take advantage of scalable backend technologies such as mongodb or couchbase, **scaling automatically our own application** core is usually another story.\r\n\r\nIn this talk I will **explain and showcase** a distributed web application design based on **consul** and **uWSGI** and its consul plugin. This design will cover the key components of a distributed and scalable application:\r\n\r\n - **Automatic service registration and discovery** will allow your application to grow itself automatically.\r\n\r\n - **Health checking and service unregistration** will allow your application to be fault tolerant, highly available and to shrink itself automatically.\r\n\r\n - A **distributed Key/Value storage** will allow you to (re)configure your distributed application nodes at once.\r\n\r\n - **Multi-Datacenter awareness** will allow your application to scale around the world easily.\r\n\r\n", "", ""], "have_tickets": [true], "title": "Designing a scalable and distributed application", "speakers": "Alexys Jacob", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 16:15:00", "duration": 60, "tags": ["technologies", "gevent", "management", "performance", "flask", "DevOps", "web", "automation", "configuration"]}, "269": {"id": 269, "abstracts": ["Bokeh is a Python interactive visualization library for large datasets that natively uses the latest web technologies. Its goal is to provide elegant, concise construction of novel graphics in the style of Protovis/D3, while delivering high-performance interactivity over large data to thin clients.\r\n\r\nThe talk will go through it\u2019s design providing details of the different API layers (bottom to top) concluding with a comprehensive showcase of examples to expose many of the features that make Bokeh so powerful and easy.", "", ""], "have_tickets": [true], "title": "Big data beautiful visualization on the browser with Bokeh", "speakers": "Fabio Pliger", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 16:15:00", "duration": 60, "tags": ["data-science", "visualization", "bigdata", "flask", "web", "django", "data", "html5"]}, "126": {"id": 126, "abstracts": ["Data Science is a hot topic, and most data scientist use either Python or R to do their jobs as main scripting language. \r\nBeing import.io data scientist for the last 2 years, all of them using Python, I've come across many different problems and needs on how to wrangle data, clean data, report on it and make predictions.\r\nIn this talk I will cover all main analytics and data science needs of a start-up using Python, numpy, pandas, and sklearn. For every use case I will show snippets of code using IPython notebooks and run some of them as live demos. "], "have_tickets": [true], "title": "Everyone can do Data Science in Python", "speakers": "Ignacio Elola", "track_title": "Google Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:15:00", "duration": 45, "tags": ["data-science", "machine-learning", "analytics", "pandas", "scipy", "sklearn"]}, "160": {"id": 160, "abstracts": ["Writing a Python script from scratch is fairly easy and you get on with very little boilerplate code in general. However starting a new Python project can be tiring if you decide to stick to best practices and plan on submitting it to PyPI. It requires great diligence and occasionally gets pretty cumbersome if you start new tools on a regular basis.\r\n\r\nWhy not just use a template for it? Cookiecutter is a CLI tool written in pure Python that enables you to do so. Not only is it working for Python code, but also markdown formats and even other programming languages. We will talk about the ideas behind Cookiecutter and go over how you can create your very own template, so you and others can benefit from your experience.\r\n\r\n\r\nGitHub: [https://github.com/hackebrot][1]\r\n\r\nTwitter: [https://twitter.com/hackebrot][2]\r\n\r\nBlog: [http://www.hackebrot.de/][3]", "", ""], "have_tickets": [true], "title": "Come to the Dark Side! We have a whole bunch of Cookiecutters!", "speakers": "Raphael Pierzina", "track_title": "Google Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["Cookiecutter", "Best Practice", "CLI", "community", "open-source", "Click", "pytest", "Kivy", "Jinja2", "cross-platform"]}, "66": {"id": 66, "abstracts": ["Seg\u00fan wikipedia:\r\n\"La metaprogramaci\u00f3n consiste en escribir programas que escriben o manipulan otros programas (o a s\u00ed mismos) como datos, o que hacen en tiempo de compilaci\u00f3n parte del trabajo que, de otra forma, se har\u00eda en tiempo de ejecuci\u00f3n. Esto permite al programador ahorrar tiempo en la producci\u00f3n de c\u00f3digo.\"\r\nEn esta charla veremos diferentes mecanismos que Python proporciona como:\r\n - Decoradores\r\n - Metaclasses\r\n - Descriptors\r\nA trav\u00e9s de varios ejemplos veremos como reutilizar c\u00f3digo en varias funciones y clases, como modificar como nuestras clases se generan, como se genera una clase (que funciones se llaman cuando una clase se crea) o como se genera una instancia.\r\nVeremos tambi\u00e9n que f\u00e1cilmente se nos puede ir de las manos y como utilizar con cuidado las herramientas que Python nos proporciona.", "", ""], "have_tickets": [true], "title": "Metaprogramaci\u00f3n en Python", "speakers": "Ra\u00fal Cumplido", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["metaclass", "metaprogramming", "python"]}, "42": {"id": 42, "abstracts": ["Using the automated documentation feature of Sphinx, you can make with ease the extensive documentation of Python program.\r\nYou just write python function documents (docstrings), Sphinx organizes them into the document, can be converted to a variety of formats.\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc and autosummary extensions.\r\n\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc, autosummary, coverage and doctest extensions.", "Abstract:\r\n\r\nUsing the automated documentation feature of Sphinx, you can make with ease the extensive documentation of Python program.\r\nYou just write python function documents (docstrings), Sphinx organizes them into the document, can be converted to a variety of formats.\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc and autosummary extensions.\r\n\r\nDescription:\r\n\r\nSphinx provides autodoc feature that generate document from docstring in your python sources.\r\nThe docstring that contains description and example of the use of function written near the program, makes doc easy to update.\r\nIn addition, the output of the Sphinx will make you understand what to write in docstring. As a result, this will improve your motivation of doc writing.\r\n\r\nTo use the autodoc, you must specify python modules to automodule directive one by one. This is a tedious task, hoswever autosummary extension automate this task.\r\nIn most cases, once developers have developed the API, you only need to run the make html of Sphinx, you get a nicely formatted document.\r\n\r\nSphinx also has coverage and doctest extentions.\r\nThese support writing the documentation to work with autodoc.\r\nThis allow you to check the APIs that have not been documented or you can verify each doctest part is correct or not.\r\n\r\nIf you use such autodoc-related extensions, you can create a Sphinx API documentation in the following procedure.\r\n\r\n1. make coverage; you can get the APIs that have not been documented.\r\n2. Write docstrings that includes the doctest format how to use the API.\r\n3. make doctest; you can verify each doctest part is correct or not.\r\n4. make html; you can generate the HTML or your favorite format.\r\n\r\nIn this session, I'll explain a documentation procedure that uses with sphinx autodoc, autosummary, coverage and doctest extensions.\r\n\r\n\r\nTarget:\r\n\r\n- Python programmer who is struggling with documentation.\r\n- Python library author who want to generate API docs automatically.\r\n- Python library author who want to create a clear documentation which contains python snippets.\r\n\r\nOutline:\r\n\r\n* Self introduction (2 min)\r\n\r\n* Sphinx introduction (2 min)\r\n\r\n * What is Sphinx?\r\n * Sphinx examples\r\n\r\n* Have you written API docs for your code? (2 min)\r\n\r\n * I don't know what/where should I write.\r\n * Docstrings is needed? Are there some specific format?\r\n\r\n* Getting start Sphinx (2 min)\r\n\r\n * How to install Sphinx\r\n * How to start a Sphinx project\r\n\r\n* Generate API docs from your python code (5 min)\r\n\r\n * setup autodoc extension\r\n * write docstrings for yuor python module\r\n * \"automodule & make html\" will generate API docs from python code\r\n * autodoc pros & cons: docs for many modules\r\n\r\n* Listing APIs automatically (5 mins)\r\n\r\n * setup autosummary extension\r\n * how to use autosummary directive\r\n * no more autodoc directive\r\n\r\n* Discovering undocumented APIs (5 min)\r\n\r\n * setup coverage extension\r\n * make coverage\r\n\r\n* Detect deviations of the impl and doc (5 min)\r\n\r\n * setup doctest extension\r\n * make doctest\r\n\r\n* Overall picture, tips, Q&A (10 min)\r\n\r\n * Overall picture of the process\r\n * Options for autodoc\r\n * translate them into other langs\r\n", ""], "have_tickets": [true], "title": "Sphinx autodoc: automated API documentation", "speakers": "Takayuki SHIMIZUKAWA", "track_title": "Google Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["automation", "autodoc", "documentation", "Sphinx"]}, "64": {"id": 64, "abstracts": ["A perspective of the impact of the PyconUK education track from the point of view of teachers and educators. \r\n\r\nHaving attended the education track at Pycon UK 2014 as a teacher, my talk will share both my experiences and those of other teachers attending. The education track bought educators and developers together in a way that allowed the teachers to get support and advice whilst developers get to support teachers in developing exciting & real applications for teaching computing. \r\n\r\nThe talk will focus on two aspects of the education track. The workshops delivered for teachers by python developers and how this helps build teachers confidence. But also the breakout sessions where educators and developers with common interests can work together to develop something. This might be a program / library or a teaching resource, some developers gave a hands on and bespoke training session to a group of teachers.\r\n\r\nIf we are to get more young people programming or at least having a positive experience of programming then we need to minimize obstacles to that experience. By having educators and developers working together we can identify those obstacles and eliminate them!", "", ""], "have_tickets": [false], "title": "Pycon - A teacher's perspective", "speakers": "James Robinson", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["education", "pyconuk", "raspberrypi", "teaching", "learning", "computing", "python3"]}, "339": {"id": 339, "abstracts": ["Microservices are popping up everywhere. This talk will explain what this fashionable new architecture is, including the pros and cons of adopting it, and then discuss an open-source framework that can help you do so -- [https://nameko.readthedocs.org][1].\r\n\r\nNameko assists you in writing services with well-defined boundaries that are easy to test. By leveraging some neat design patterns and providing test helpers, it also encourages good service structure and clean code.\r\n\r\n [1]: https://nameko.readthedocs.org"], "have_tickets": [true], "title": "Nameko for Microservices", "speakers": "Matt Bennett", "track_title": "Google Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:15:00", "duration": 45, "tags": ["architecture", "open-source", "Microservices"]}, "255": {"id": 255, "abstracts": ["Ever feel like your open source project could be better tested? Lack of tests holding you back from contributors but you don\u2019t know where to start? You\u2019re not alone.\r\n\r\n[\u201cAdopt pytest month\u201d][1] was held in April 2015. [Pytest][2] volunteers were paired with open source software projects, to find a path to better testing with pytest. Projects varied from libraries/command line utilities, to a browser, to a complex Django app. In some cases converting existing tests was necessary, in others writing the first tests in existence for non-trivial amounts of code. Two projects were open sourced specifically to take part in \u201cadopt pytest month\u201d. What began as an experiment in increasing software audience proved to be an interesting exercise in strengthening community and most valuable of all, provided a newcomer\u2019s perspective to veteran contributors.\r\n\r\nThis talk will discuss what worked well with \u201cadopt pytest month\u201d, what didn\u2019t, what we learned about pytest and what you could take away for your open source project, be it an improved testing environment or an improved contributor community. A basic knowledge of testing and pytest will be useful.\r\n\r\n [1]: http://pytest.org/latest/adopt.html\r\n [2]: http://pytest.org/latest/\r\n"], "have_tickets": [true], "title": "The realities of open source testing: lessons learned from \u201cAdopt pytest month\u201d", "speakers": "Brianna Laugher", "track_title": "Barria1 Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["tdd", "open source", "community", "open-source", "Testing", "pytest", "py.test"]}, "115": {"id": 115, "abstracts": ["At Yelp, we ship code multiple times a day and have maintained this pace as our team has grown to 300+ and our codebase to several million lines of Python code. This talk explores the pain points we experienced along the ways, how our service-oriented architecture alleviates them, and the infrastructure we built to develop, test, and deploy in this highly-distributed environment. As a case study, we\u2019ll be looking at the backend powering the new Yelp Business Owner Android and iOS apps.\r\n\r\nAt the start, most of the development at Yelp occurred in a single, monolithic web application, creatively named \u201cyelp-main\u201d (naming is hard!). As the company grew, our developers were spending increasing amounts of time trying to ship code. After recognizing this pain point, we started experimenting with a service oriented architecture to scale the development process, and so far it\u2019s been a resounding success. Over the course of the last three years, we\u2019ve gone from writing our first service to having over seventy production services. Along the way, we\u2019ve dabbled with Docker containers, Pyramid, SQLAlchemy, uWSGI, gevent, and virtualenv in an effort to build the next-generation service platform for our engineers."], "have_tickets": [true], "title": "Building mobile APIs with services at Yelp", "speakers": "Stephan Jaensch", "track_title": "Barria2 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["services", "distributed-systems", "REST", "docker", "swagger", "pytest", "Pyramid"]}, "67": {"id": 67, "abstracts": ["Do you deploy your Python services to Amazon EC2, or to Openstack, or even to HP cloud, joyent or Azure? Do you want to - without being tied into any one of them? What about local full stack deployments with lxc or kvm containers?\r\n\r\nEven if you're convinced you don't need \"the cloud\" because you manage your own servers, amazing technologies like Private clouds and MaaS, for dynamic server management on bare metal, may change your mind.\r\n\r\nFed up with the cloud hype? Let us rehabilitate the buzzword! (A bit anyway.)\r\n\r\nA fully automated cloud deployment system is essential for rapid scaling, but it's also invaluable for full stack testing on continuous integration systems. Even better, your service deployment and infrastructure can be managed with Python code? (Devops distilled)\r\n\r\nTreat your servers as cattle not as pets, for service oriented repeatable deployments on your choice of back-end. Learn how service orchestration is a powerful new approach to deployment management, and do it with Python! If any of this sounds interesting then Juju maybe for you!\r\n\r\nIn this talk we'll see a demo deployment for a Django application and related infrastructure. We'll be looking at the key benefits of cloud deployments and how service orchestration is different from the \"machine provisioning\" approach of most existing cloud deployment solutions."], "have_tickets": [true], "title": "To the Clouds: Why you should deploy to the cloud even if you don't want to", "speakers": "Michael Foord", "track_title": "Barria1 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["OpenStack", "DevOps", "linux", "go", "cloud", "ec2"]}, "233": {"id": 233, "abstracts": ["How to write a test so you would remember what it does in a year from now? How to write selective tests with different inputs? What is test? How to subclass tests cases and yet maintain control on which tests would run? How to extend or to filter inputs used in parent classes? Are you a tiny bit intrigued now? :)\r\n\r\nThis is not another talk about how to test, but how to organize your tests so they were maintainable. I will be using nose framework as an example, however main ideas should be applicable to any other framework you choose. Explaining how some parts of code works I would have to briefly touch some advanced python topics, although I will provide need-to-know basics there, so people with any level of python knowledge could enjoy the ride.\r\n"], "have_tickets": [true], "title": "Sustainable way of testing your code", "speakers": "Eugene Amirov", "track_title": "Google Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["nose", "unit-testing", "maintainability", "readability"]}, "196": {"id": 196, "abstracts": ["In static unit testing, the output of a function is compared to a precomputed result. Even though such unit tests may apparently cover all the code in a function, they might cover only a small subset of behaviours of the function. This potentially allows bugs such as heartbleed to stay undetected. Dynamic unit tests using fuzzing, which allows you to specify a data generation template, can make your test suite more robust.\r\n\r\nIn this talk, we demonstrate fuzzing using the hypothesis library.\r\nHypothesis is a Python library to automatically generate test data based on a template.\r\nData is generated using a strategy. A strategy specifies how data is generated, and how falsifying examples can be simplified. Hypothesis provides strategies for Python's built-in data types, and is easily customizable.Since test data is generated automatically, we can not compare against pre-computed results. Instead, tests are usually done on invariants of functions. We give an overview of such invariants.\r\n\r\nFinally, we demonstrate how we use fuzzing to test machine learning algorithms at Blue Yonder."], "have_tickets": [true], "title": "What's the fuzz all about? Randomized data generation for robust unit testing", "speakers": "Moritz Gronbach", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:15:00", "duration": 45, "tags": ["fuzzing", "hypothesis", "unit-testing"]}, "106": {"id": 106, "abstracts": ["Do you like visiting Python conferences like the EuroPython? Does it\r\nmake you to want something similar where you live too? This talk looks\r\ninto the effort, practical things and some good tips on how to\r\nbootstrap your own Python community where you live!\r\n\r\nIf you already run a local Python community, join this talk to share\r\nyour views and give your comments to those interested in building\r\ntheir first Python community.\r\n\r\nAfter the talk you have a good idea of what it takes to run your local\r\nPython community (spoiler: not much!) and how can you take it even further!"], "have_tickets": [true], "title": "How-To: Build a local Python community", "speakers": "Jyrki Pulliainen", "track_title": "Google Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["conferences", "organizer", "meetup", "community"]}, "336": {"id": 336, "abstracts": ["One point usually underestimated or omitted when dealing with \r\nmachine learning algorithms is how to write *good quality* code.\r\nThe obvious way to face this issue is to apply automated testing, which aims at implementing (likely) less-buggy and higher quality code.\r\n\r\nHowever, testing machine learning code introduces additional concerns that has to be considered. On the one hand, some constraints are imposed by the domain, and the risks intrinsically related to machine learning methods, such as handling unstable data, or avoid under/overfitting. On the other hand, testing scientific code requires additional testing tools (e.g., `numpy.testing`), specifically suited to handle numerical data.\r\n\r\nIn this talk, some of the most famous machine learning techniques will be discudded and analysed from the `testing` point of view, emphasizing that testing would also allow for a better understanding of how the whole learning model works under the hood.\r\n\r\nThe talk is intended for an *intermediate* audience.\r\nThe content of the talk is intended to be mostly practical, and code\r\noriented. Thus a good proficiency with the Python language is **required**.\r\nConversely, **no prior knowledge** about testing nor Machine Learning \r\nalgorithms is necessary to attend this talk.", "", ""], "have_tickets": [true], "title": "Machine Learning Under Test", "speakers": "Valerio Maggio", "track_title": "A2 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["data-science", "machine-learning", "nose", "py.test", "sklearn", "scipy", "numpy", "Testing"]}, "55": {"id": 55, "abstracts": ["When you see users starting to use your feature, you feel very proud and fulfilled. So why feel this only once every few weeks, why not feel it every day? In this talk I will show how we changed our workflow to automate deployment of code changes to production every time a feature is ready - sometimes even few times per day. I will present how to successfully combine open-source tools like Git, Jenkins, Buildout, Fabric, uWSGI, and South, in order to simplify the process and make it more reliable. I will discuss challenges that we faced implementing this workflow in a real project based on Django and how we resolved them. During this talk you will gain the knowledge required to implement Continuous Deployment in your own project."], "have_tickets": [false], "title": "Continuous Deployment for webapps based on Django", "speakers": "Wojciech Lichota", "track_title": "A2 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["case study", "Tooling", "django", "Best Practice", "deployment"]}, "372": {"id": 372, "abstracts": ["Scalability is a big problem for everyone who wants to grow. In order to handle the demand, appropriate infrastructure both in terms of software and hardware should be met. What if hardware was as dynamic as a service where CPU and RAM could have been acquired when only it's needed. Is there such an environment? How can you work with it? What you should be careful of? How your applications should evolve?\r\n", "", ""], "have_tickets": [true], "title": "Preparing Apps for Dynamic Scaling", "speakers": "roy simkes", "track_title": "Barria1 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["Scalability"]}, "45": {"id": 45, "abstracts": ["[Cython][1] is not only an excellent and widely used tool to speed up computational Python code, it's also a very comfortable way to talk to native code and libraries. The Cython compiler translates Python code to C or C++ code, and supports static type annotations to allow direct use of C/C++ data types and functions. The tight integration of all three languages makes it possible to freely mix Python features like generators and comprehensions with C/C++ features like native data types, pointer arithmetic or manually tuned memory management in the same code.\r\n\r\nThis talk by a core developer introduces the Cython compiler by interactive code examples and presents recent enhancements in the language that continue to make Cython the best choice for the development of fast and portable Python extensions.\r\n\r\n [1]: http://cython.org/\r\n"], "have_tickets": [true], "title": "Get native with Cython", "speakers": "Stefan Behnel", "track_title": "Barria1 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["Cython", "python", "c++", "ipython"]}, "231": {"id": 231, "abstracts": ["The terminal emulators we run so many of our programming tools in are more powerful than we remember to give them credit for, and the key to that power is understanding the interface. This talk will cover terminal colors and styles, writing to arbitrary portions of the screen, handling signals from the terminal, determining the terminal's dimensions and scrollback buffer behavior.\r\n\r\nTerminal programming can get hairy; along the way we'll deal with encoding issues, consider cross platform concerns, acknowledge 4 decades' worth of standards for terminal communication, and consider that humans at interactive terminals may not be the only users of our interfaces. By gaining an understanding of these issues, we'll be able choose from the abstractions over them offered by Python libraries Urwid, Blessings, and Python Prompt Toolkit.\r\n\r\nThis talk requires minimal Python knowledge, but does assume familiarity with command line tools in a unix environment.\r\n\r\nAn abbreviated version of this talk was presented at PyCon 2015 in Montr\u00e9al: https://www.youtube.com/watch?v=WAitSilLDUA With the additional time I'd hope to present more code examples, a more in-depth tour of existing libraries and more practical advice about writing programs that use the terminal, and an additional example of a difficult terminal details: dealing with reflowing of text in modern terminal emulators like GNOME Terminal and iTerm."], "have_tickets": [true], "title": "Terminal Whispering", "speakers": "Thomas Ballinger", "track_title": "Barria1 Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["terminal", "Urwid", "Blessings", "command-line", "REPL", "unix", "curses"]}, "352": {"id": 352, "abstracts": ["You've heard about Python's GIL. But what is it really? What does it do, both good and bad?\r\n\r\nCome learn all about the Python GIL. You'll learn about its history, all the problems it solves, all the problems it causes (that we know about!), and what it would take to remove the GIL.\r\n\r\nAttendees should be familiar with the terrors inherent in multithreaded programming, and be comfortable with a little C code in the slides.", "", ""], "have_tickets": [true], "title": "Python's Infamous GIL", "speakers": "Larry Hastings", "track_title": "Google Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["GIL", "cpython"]}, "63": {"id": 63, "abstracts": ["Python is the language of choice for the orchestration part of MySQL 5.6. \r\n\r\nAfter a brief introduction of MySQL replication architecture, the talk [Slides here][1] presents the python utilities released by MySQL: a set of drivers in pure-python, mysql-utilites for replication, management and failover, and fabric, a tool for scaling, sharding and provisioning new servers.\r\n\r\nYou will see how to create resilient configurations in minutes and use mysql-fabric to create high available infrastructures.\r\n\r\nAs a plus, we'll show how we implemented a fabric provider for provisioning new databases via docker\r\n\r\nPrerequisites: basic database knowledge, transactions, replication. MySQL specific concepts (eg: binary logs) are briefly introduced in the talk.\r\n\r\n [1]: http://www.slideshare.net/ioggstream/scaling-mysql-with-python", "Python is the language of choice for the orchestration part of MySQL 5.6. \r\n\r\nAfter a brief introduction of MySQL replication architecture, the talk [Slides here][1] presents the python utilities released by MySQL:\r\n\r\n - a set of drivers in pure-python \r\n - mysql-utilites for replication, management and failover\r\n - fabric, a tool for scaling, sharding and provisioning new servers\r\n\r\nYou will see how to:\r\n\r\n - create resilient configurations in minutes\r\n - use mysql-fabric to create high available infrastructures\r\n\r\nAs a plus, we'll show how we:\r\n\r\n - implemented a fabric provider for provisioning new databases via docker\r\n\r\n\r\n# Prerequisites\r\n\r\nBasic database knowledge, transactions, replication. \r\n\r\nMySQL specific concepts (eg: binary logs) are briefly introduced in the talk.\r\n\r\n\r\n [1]: http://www.slideshare.net/ioggstream/scaling-mysql-with-python", ""], "have_tickets": [true], "title": "Scaling MySQL with Python", "speakers": "Roberto Polli", "track_title": "Barria1 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["Database", "mysql", "case study", "docker", "linux"]}, "108": {"id": 108, "abstracts": ["My talk is meant to provide an overview of our current set of tools for storing data and how we arrived to these. Then, in the light of the current bottlenecks, and how hardware and software are evolving, provide a brief overview of the emerging technologies that will be important for handling Big Data within Python. Although I expect my talk to be a bit prospective, I won't certainly be trying to predict the future, but rather showing a glimpse on what I expect we would be doing in the next couple of years for properly leveraging modern architectures (bar unexpected revolutions ;).\r\n\r\nAs an example of library adapting to recent trends in hardware, I will be showing bcolz (https://github.com/Blosc/bcolz), which implements a couple of data containers (and specially a chunked, columnar 'ctable') meant for storing large datasets efficiently.\r\n"], "have_tickets": [true], "title": "New Trends In Storing Large Data Silos With Python", "speakers": "Francesc Alted", "track_title": "Barria1 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["Database", "bigdata", "python", "open-source", "data-science"]}, "272": {"id": 272, "abstracts": ["The popularity of Single Page Applications build with modern JavaScript frameworks is increasing, and more and more teams work on projects with separate frontend and backend components communicating over the network. At the same time, complex projects are evolving their architecture towards containerized microservices. However, most traditional batteries-included web frameworks are not designed for this paradigm.\r\n\r\nThis talk covers some best practices for building REST APIs for private use (in contrast to public ones), focusing on issues like authentication, error handling, validation, and serialization. It will also try to convince you that this might be a good moment to reconsider microframeworks like Flask instead of your favourite opinionated web framework."], "have_tickets": [true], "title": "Killer REST APIs for rich JS applications", "speakers": "Adam Byrtek", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["web", "flask", "HTTP", "api", "REST"]}, "65": {"id": 65, "abstracts": ["The Raspberry Pi weather station project introduces young people to using python programming to solve real and technical problems. The weather station consists of a range of sensors including:\r\nAnemometer\r\nRain gauge\r\nWind Vane\r\nTemperature Probe\r\nBarometer\r\nAir Quality Sensor\r\nHygrometer\r\n\r\n1000 kits are being given away to schools to take part in the project by following our schemes of work which will involve.\r\nProgramming basic interrupt based sensors\r\nAdvanced Sensors using ADC chips\r\nCreate a pygame based UI\r\nLogging data to MySQL and Oracle Apex\r\nPresenting data to a web app\r\nDeploying the weather station\r\nIntegrating Apex database\r\n\r\nWe would love feedback on the project from Python Developers and support in updating some libraries from python 2 to 3.", "", ""], "have_tickets": [false], "title": "Raspberry Pi Weather Station", "speakers": "James Robinson", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["education", "python3", "weather", "python2"]}, "265": {"id": 265, "abstracts": ["Kotti is a high-level, Pythonic web application framework based on Pyramid, SQLAlchemy and Bootstrap 3. It includes an extensible Content Management System called the Kotti CMS. Kotti is particularly well suited for building custom applications with object level security. It comes with complete user and group management and supports the concepts of global and local roles providing management views for each of those. \r\n\r\nThe talk will give an overview on Kotti, its philosophy, history and future. Target audience are people who want to learn what it is and can be used for. Because Kotti is just a rather small layer on top of its foundations, the talk might also give some interesting insights on how to build a solid (web) framework that suits your personal preferences.\r\n\r\nReferences:\r\n\r\n - http://kotti.pylonsproject.org/\r\n - http://kotti.readthedocs.org/en/latest/\r\n\r\n"], "have_tickets": [true], "title": "Standing on the Shoulders of Giants: The Kotti Web Application Framework", "speakers": "Andreas Kaiser", "track_title": "Barria1 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["wsgi", "web", "open-source", "SQLAlchemy", "Kotti", "Pyramid"]}, "271": {"id": 271, "abstracts": ["Generar documentaci\u00f3n de forma din\u00e1mica es relevante para los ingenieros de software porque ellos interact\u00faan con la data en el mismo donde est\u00e1 localizada. Es tambi\u00e9n relevante para los clientes porque la documentaci\u00f3n se puede presentar en un formato organizado y claro. En esta presentaci\u00f3n, hablaremos de c\u00f3mo usar un proceso unificado para generar din\u00e1micamente la documentaci\u00f3n de diversas fuentes de data incluyendo los wikis y los sistemas de rastreo de incidencias. \r\n\r\nIdealmente, nosotros como ingenieros deber\u00edamos interactuar solamente con una Fuente de informaci\u00f3n que nos dara como resultado una documentaci\u00f3n vigente y correspondiente al estado actual de un sistema. En el Presente, el cliente recibe documentos incompletos y sin actualizaci\u00f3n dando una incorrecta impresi\u00f3n del estado vigente de un Sistema. Usando un proceso unificado para generar documentaci\u00f3n de solo una Fuente de data permite presentar al cliente lo que se merece: artefactos actualizados y completos dando el real y mas reciente estado de un Sistema. El resto de esta presentaci\u00f3n se enfocara en c\u00f3mo lograr este Sistema.", "Generar documentaci\u00f3n de forma din\u00e1mica es relevante para los ingenieros de software porque ellos interact\u00faan con la data en el mismo donde est\u00e1 localizada. Es tambi\u00e9n relevante para los clientes porque la documentaci\u00f3n se puede presentar en un formato organizado y claro. En esta presentaci\u00f3n, hablaremos de c\u00f3mo usar un proceso unificado para generar din\u00e1micamente la documentaci\u00f3n de diversas fuentes de data incluyendo los wikis y los sistemas de rastreo de incidencias. \r\n\r\nLa documentaci\u00f3n especifica (documentos requeridos, documentos de dise\u00f1o, etc.) es un punto cr\u00edtico para el desarrollo de un Sistema. Desafortunadamente, desde el momento de su creaci\u00f3n los documentos quedan desactualizados a causa del r\u00e1pido desarrollo y mejoras de c\u00f3digo que ocurren actualmente en la industria. Con frecuencia, estas mejoras no son anotados en la documentaci\u00f3n. El resultado de esto son documentos que no sirven o que son creados con mucha prisa resultando en documentos mediocres. Adicionalmente hay diversas fuentes de data sin actualizar que causan tener distintas versiones de estado actual de un Sistema.\r\n\r\nIdealmente, nosotros como ingenieros deber\u00edamos interactuar solamente con una Fuente de informaci\u00f3n que nos dara como resultado una documentaci\u00f3n vigente y correspondiente al estado actual de un sistema. En el Presente, el cliente recibe documentos incompletos y sin actualizaci\u00f3n dando una incorrecta impresi\u00f3n del estado vigente de un Sistema. Usando un proceso unificado para generar documentaci\u00f3n de solo una Fuente de data permite presentar al cliente lo que se merece: artefactos actualizados y completos dando el real y mas reciente estado de un Sistema. El resto de esta presentaci\u00f3n se enfocara en c\u00f3mo lograr este Sistema.", ""], "have_tickets": [true], "title": "Incorporando administrado repositorios de informaci\u00f3n para generar documentaci\u00f3n on-demand", "speakers": "Todd Waits", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["process", "teams", "knowledge", "management", "documentation", "DevOps", "automation", "workflow"]}, "200": {"id": 200, "abstracts": ["This presentation introduces Flowy, a library for building and running distributed, asynchronous workflows built on top of different backends (such as Amazon\u2019s SWF). Flowy deals away with the spaghetti code that often crops up from orchestrating complex workflows. It is ideal for applications that do multi-phased batch processing, media encoding, long-running tasks, and/or background processing.\r\n\r\nWe'll start by discussing Flowy's unique execution model and see how different execution topologies can be implemented on top of it. During the talk we'll run and visualize workflows using a local backend. We'll then take a look at what it takes to scale beyond a single machine by using an external service like SWF."], "have_tickets": [true], "title": "Distributed Workflows with Flowy", "speakers": "Sever Banesiu", "track_title": "Barria2 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["SWF", "workflow", "AWS", "distributed-computing"]}, "316": {"id": 316, "abstracts": ["At some previous EuroPythons, I have taken advantage of people, while eating their food at the conference dinner, to extract money. But don't worry, it's all been in a good cause: in aid of the [Python Software Foundation][1], which defends the intellectual property of the Python language, and supports Python conferences. We are well represented in the list of the [top PSF donors][2]:\r\n\r\n- 53. EuroPython 2013 Sponsored Massage\r\n- 278. EuroPython 2012 Sponsored Massage\r\n- 499. EuroPython 2011 Sponsored Massage\r\n- 572. EuroPython 2010 Sponsored Massage\r\n- 1331. EuroPython Conference Dinner (sponsored massage)\r\n\r\nIn the early days, I could reasonably visit most tables, offering a shoulder massage in return for a donation. But now, there are too many diners, and not enough hands to do this on my own! **_I need lots of help_**:\r\n\r\n - Doing neck and shoulder massage\r\n - Collecting money in a wine bucket\r\n - Counting and bagging the money\r\n - Exchanging multiple currencies and getting it into the PSF account\r\n - Feeling good that you're doing something for the Python community\r\n\r\n**What do you need to join in?** For everything apart from the massage, common sense, honesty and a sense of humour! Given these, I will be running a short massage workshop. Learn how to relax your own neck and shoulders, with fewer headaches, and less stress from hours spent crouching over a laptop. Then find out the essentials of massaging someone else's neck, shoulders and back for three to four minutes. Become a more valuable member of your work team back home. Help others to relax!\r\n\r\n### Requirements:\r\n\r\n1. Please attend the workshop only if you are actually coming to the conference dinner.\r\n1. You don't need to have particularly strong thumbs and fingers (elbows make a good substitute). But you do need to be not afraid of touching people. Massage is not tickling!\r\n1. Lack of embarrassment about asking for money. More people will pay not to have a massage, than to be massaged -- and that's OK!\r\n1. Join in!\r\n\r\nIf you'd rather not give a massage to diners/donors, no problem: there are lots of other ways to help. But at least you need to join fully in the workshop, so that you experience something of what we'll be asking money for. **A workshop means no onlookers -- all participants!**\r\n\r\n [1]: https://www.python.org/psf/\r\n [2]: http://legacy.python.org/psf/donations/\r\n", "", ""], "have_tickets": [true], "title": "Sponsored massage training, in aid of the Python Software Foundation", "speakers": "Rob Collins", "track_title": "Exhibition Hall / Helpdesk ", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:30:00", "duration": 45, "tags": ["PSF", "massage", "relax", "REST"]}, "170": {"id": 170, "abstracts": ["Devpi is an open source PyPi-compatible package server. Its versatile features make it the Swiss Army knife of Python package and release management, enabling anyone to shape a custom release workflow.\r\n\r\nIn this talk, I will detail how we use our company-wide Devpi installation in order to share a large set of packages across teams, deploy binary packages to our application servers, and mix and mash open source packages with our own. With Devpi being a critical part of our release and deployment infrastructure, I will also cover our high-availability setup and how we perform major version updates with minimal downtime.\r\n\r\nWhile this talk is not meant to be an exhaustive introduction of all available Devpi features, it can offer insights on how Devpi can be used at a larger scale.", "", ""], "have_tickets": [true], "title": "Release Management with Devpi", "speakers": "Stephan Erb", "track_title": "Barria1 Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["case study", "deployment", "packaging", "Devpi"]}, "48": {"id": 48, "abstracts": ["Trying to find a good place to eat has become much easier and democratic with online reviews, but on the other hand, that creates new problems. Can you trust that 5 star review of fast food chain as much as the 1 star of a fancy restaurant because \"Toast arrived far too early, and too thin\"?\r\n\r\nWe all like enjoy things differently. Starting of on the assumption that the \"best pizza\" is not the same for everyone. Can we group users into people that has similar tastes? Can we identify reviews and restaurants to make sense of it? Can that lead us to a better way to find restaurants that you like?\r\n\r\nUsing some data handling techniques I walk you through my process and results that I've got from that idea. There are no requisites for this talk except basic python and math knowledge (matrices exist)\r\n\r\n "], "have_tickets": [true], "title": "Yak shaving a good place to eat using non negative matrix factorization", "speakers": "Adriano Petrich", "track_title": "Barria1 Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["visualization", "fun", "data-science"]}, "204": {"id": 204, "abstracts": ["There is a lot buzz about the Internet of things and how it's going to be the next big thing in computing. Python can power \"things\" and is used extensively in network applications, however there isn't much information out there about where Python can be used to build end-to-end IoT products.\r\n\r\nGoals :\r\nTo put into perspective the usefulness of Python in building IoT products.\r\nSpread awareness on possibilities of using Python on embedded hardware."], "have_tickets": [true], "title": "Python & Internet of Things", "speakers": "Ravi Vagadia", "track_title": "A2 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["wearables", "BlE", "IoT", "distributed-computing"]}, "349": {"id": 349, "abstracts": ["Python is a fantastic language for writing web scrapers. There is a large ecosystem of useful projects and a great developer community. However, it can be confusing once you go beyond the simpler scrapers typically covered in tutorials.\r\n\r\nIn this talk, we will explore some common real-world scraping tasks. You will learn best practises and get a deeper understanding of what tools and techniques can be used.\r\n\r\nTopics covered will include:\r\n- Crawling - single pages, websites, focussed crawlers, etc.\r\n- Data extraction - techniques for \u201cscraping\u201d data from from web pages (e.g. regular expressions, xpath, machine learning).\r\n- Deployment - how to run and maintain different kinds of web scrapers\r\n- Real world examples\r\n", "", ""], "have_tickets": [true], "title": "Advanced Web Scraping", "speakers": "Shane Evans", "track_title": "Google Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["scrapy", "scraping"]}, "289": {"id": 289, "abstracts": ["This case study show how to start from a simple distance search on elasticsearch and haystack and implement a production ready search like airbnb. \r\nThe talk will explain decay functions works with the different curves (linear, exponential, gauss) and how to send them with query scores to elasticsearch. With that you will be able to mix the distance, the price, the user activity, the number of picture and whatever you want. \r\n\r\n\r\nAdditionally I will show how to write a custom ElasticsearchSearchQuery and ElasticsearchSearchBackend because this is not yet supported by haybtacksearch.\r\n\r\nAll the code will be available on github soon\r\n\r\n"], "have_tickets": [true], "title": "From basic distance search to a complex multi criteria search", "speakers": "Antonin Lacombe", "track_title": "A2 Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:00:00", "duration": 30, "tags": ["web", "haystacksearch", "django", "elasticsearch"]}, "122": {"id": 122, "abstracts": ["Software development is all about writing code that delivers additional value to a customer. Following the agile and lean approach this value created by code changes should be continuously delivered as fast, as early and as often as possible without any compromise on the quality. \r\nRemarkably, there is a huge gap between the development of the application code and the reliable and scalable operation of the application. As an example, most of the tutorials about web development with Flask or Django end by starting a local \u201cdummy\u201d server, missing out all the steps needed for production ready operation of the web service. Furthermore, as there is no \u201crocket science\u201d in-between, many proposals to bridge that gap from both sides, operations and developers start with sentences like: \u201cyou just have to...\u201d, a clear indication that it will cause problems later on and also a symptom of a cultural gap between developers and operations staff.\r\nIn this talk I will go through the complete delivery pipeline from application development to the industrial grade operation, clearly biased towards the \u201cDevOps\u201d mindset. Instead of presenting a sophisticated enterprise solution, I will outline the necessary building blocks for continuous delivery and fill them up with simple but working poor man's solutions, so that it is equally useful for professional and non-professional developers and operations engineers. After the talk you will know how to build such a continuous delivery pipeline with open-source tools like \u201cAnsible\u201d, \u201cDevpi\u201d and \u201cJenkins\u201d and I will share some of my day-to-day experiences with automation in general. Although many of the concepts are language agnostic I will focus on the ins and outs in a python universe and outline the pythonic way of \u201cget this thing running\u201d.\r\n"], "have_tickets": [true], "title": "A Pythonic Approach to Continuous Delivery", "speakers": "Sebastian Neubauer", "track_title": "A2 Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["Operations", "ApplicationLifecycle", "ConfigurationManagement", "Devpi", "ContinuousDelivery", "Jenkins", "DevOps", "ansible"]}, "324": {"id": 324, "abstracts": ["Do you know what happens every time you use the **@** symbol in Python?\r\n\r\nIn this talk we will see the magic behind the _syntactic sugar_ of the decorators. To understand how they internally work we will see in detail Python's **scopes**, **namespaces** and **closures**, and finally we will manually apply our own handcrafted decorator.\r\n\r\nThis talk is an improved version (in English) of the talk I delivered at PyConES 2013 (the feedback was pretty positive): [https://www.youtube.com/watch?v=d9-yTnJgcg4 ][1]\r\n\r\nLevel:\r\nIntermediate. Attendees must have previous knowledge of Python and should be somehow familiar with the **'@'** notation to decorate a function.\r\n\r\n [1]: https://www.youtube.com/watch?v=d9-yTnJgcg4\r\n"], "have_tickets": [true], "title": "Decorators demystified", "speakers": "Pablo Enfedaque", "track_title": "A2 Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["namespaces", "scopes", "decorators", "closures"]}, "230": {"id": 230, "abstracts": ["OpenCV Python bindings provide several ready to use tools for camera calibration, image recognition and camera position estimation. This talk will show how to recognize a picture, from a library of known paintings, and compute the camera position with respect to the recognized picture using OpenCV and numpy. This is applied to a tourist guide application for Google Glass through the recognition of the paintings exposed in the museum.\r\n"], "have_tickets": [true], "title": "Image recognition and camera positioning with OpenCV. A tourist guide application.", "speakers": "Francesco Nazzaro", "track_title": "Barria1 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["python", "Google Glass", "ipython notebook", "image recognition", "numpy", "OpenCV"]}, "23": {"id": 23, "abstracts": ["In this talk I will describe how to use Apache Spark (PySpark) with some data from the World of Warcraft API from an iPython notebook. Spark is interesting because it speeds up iterative processes on your hadoop cluster as well as your local machine. \r\n\r\nI will give basic benchmarks (comparing it to numpy/pandas/scikit), explain the architecture/performance behind the technology and will give a live demo on how I used Spark to analyse an interesting dataset. I'll explain why you might want to use Spark and I'll also go in and explain when you don't want to use it. \r\n\r\nThe dataset I will be using is a 22Gb json blob containing auction house data from all world of warcraft servers over a period of time. The goal of the analysis will be to determine when and if basic economics still applies in a massively online game. \r\n\r\nI will assume that the everyone knows what the ipython notebook is and I will assume a basic knowledge of numpy/pandas but nothing fancy. The dataset has been chosen such that people who are less interested in Spark can still enjoy the analysis part of the talk. If you know very little about data science but if you love video games then you should like this talk.", "", ""], "have_tickets": [true], "title": "PySpark and Warcraft Data", "speakers": "vincent warmerdam", "track_title": "A2 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["data-science", "machine-learning", "bigdata", "analytics", "pandas", "numpy"]}, "59": {"id": 59, "abstracts": ["The author shows how to use the [SleekXMPP][1] library in order to write a small chatbot that connects to Google Hangouts and reminds you or someone else to take medication for instance. The secure and recommended OAuth2 protocol is used to authorize the bot application in the [Google Developers Console][2] in order to access the Google+ Hangouts API. The author will elaborate then on how to use an event-driven library to write a bot that sends scheduled messages, waits for a proper reply and repeats the question if need be. Thereby, a primer on event-driven architectures will be given.\r\n\r\n [1]: http://sleekxmpp.readthedocs.org/\r\n [2]: https://console.developers.google.com/\r\n"], "have_tickets": [true], "title": "\"It's about time to take your medication!\" or how to write a friendly reminder bot ;-)", "speakers": "Florian Wilhelm", "track_title": "Barria2 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["automation", "xmpp", "oauth2", "bot", "network", "hangouts"]}, "318": {"id": 318, "abstracts": ["Odoo is used by 2 millions of users, although relatively unknown in the python community, it has a vibrant community and is one of the most active python open source project.\r\n\r\nI will present you the Odoo framework and how it can help to be more productive when building web based business apps. I will highlight its advantages compared to more popular framework such as django.", "", ""], "have_tickets": [true], "title": "Odoo the underdog python killer app. A python framework for web based business apps.", "speakers": "Antony Lesuisse", "track_title": "Google Room", "timerange": "2015-07-22 12:30:00, 2015-07-22 13:15:00", "duration": 45, "tags": ["werkzeug", "HTTP.", "python", "javascript", "postgresql", "wsgi", "web", "django"]}, "213": {"id": 213, "abstracts": ["Have you ever developed a nice, well-working python program on one environment, only to have it blow up with exceptions and tracebacks when you run it on a different environment? Have no fear! This talk will show you how to write and maintain python code that is compatible across environments that may differ by python versions and/or operating systems.\r\n\r\nTechniques and tips will be drawn from lessons and experiences gained from making the AWS CLI, a python-based command line tool to manage AWS resources, compatible across a wide range of environments. In a case-study-like format, real-life compatibility issues encountered while developing the AWS CLI will be presented along with how we resolved each of them. These real-life examples will encompass, but will not be limited to, the following topics:\r\n\r\n\u2022 How to use functions and classes that may differ across python versions and/or operating systems\r\n\r\n\u2022 How to handle version-specific bugs\r\n\r\n\u2022 How to handle strings, bytes, and Unicode across python versions\r\n\r\n\u2022 How to handle differing locale settings\r\n\r\n\u2022 How to handle file operations across operating systems\r\n\r\n\u2022 How and when to vendor dependencies\r\n\r\n\u2022 How to write tests that are compatible across python versions and operating systems\r\n\r\n\u2022 How to create a testing environment that monitors compatibility of code across various environments\r\n\r\nUltimately, the goal of these examples is introduce to you some effective, real-world programming practices to overcome your current or next compatibility issue.\r\n"], "have_tickets": [true], "title": "It Works on My Machine: Writing Python Code for Any Environment", "speakers": "Kyle Knapp", "track_title": "Barria2 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["CLI", "packaging", "python2", "python3", "Best Practice", "Development", "Testing"]}, "294": {"id": 294, "abstracts": ["Docker has introduced a new model of deployment solving the infamous \"Deployment Matrix from Hell\" by using containers.\r\nBut this also brought the spotlight back on the Operating System side, and following the trails of CoreOS and Atomic Host, a new generation of Cloud Servers are born by using containers instead of traditional RPM/DPKG/tarball/whaterver packages model to deploy services. CoreOS/Atomic Host/Snappy Ubuntu and now VMWare Photon also provides transactional image-based OS focusing on security and built-in cluster management.\r\n\r\nDuring this talk, we'll present these next-gen OS, and their components and how they fit in. ", "", ""], "have_tickets": [true], "title": "The Lightweight Cloud Servers War Begins", "speakers": "Haikel Guemar", "track_title": "Barria1 Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["Photon", "Snappy", "atomic", "cloud", "Virtualization", "community", "docker", "infrastructure", "Best Practice", "CoreOS", "rocket"]}, "302": {"id": 302, "abstracts": ["The MongoDB aggregation framework provides a means to calculate aggregated values without having to use map-reduce. While map-reduce is powerful, it is often more difficult than necessary for many simple aggregation tasks, such as totaling or averaging field values.\r\n\r\nSee how to use the build-in data-aggregation-pipelines for averages, summation, grouping, reshaping. See how to work with documents, sub-documents, grouping by year, month, day, etc. \r\n\r\nThis talk will give many (live) examples how to make the most of your data with pymongo with a few lines of code.", "", ""], "have_tickets": [true], "title": "Data Analysis and Map-Reduce with mongoDB and pymongo", "speakers": "Alexander Hendorf", "track_title": "Google Room", "timerange": "2015-07-22 11:00:00, 2015-07-22 11:45:00", "duration": 45, "tags": ["pymongo", "bigdata", "python", "mongodb", "analytics"]}, "214": {"id": 214, "abstracts": ["A few months ago, Guido unfolded PEP 484, which was highlighted at PyCon 2015 as a keynote presentation. This proposal would introduce type hints for Python 3.5. While the debate is still roaring and without taking a side, I believe that there is much to learn from static type-checking systems.\r\n\r\nThe purpose of this talk is to introduce ways that could be used to fully take over the amazing power that comes with static types, inside a dynamic type language such as Python. The talk will go over what exactly a static type system is, and what kind of problem it tries to solve. We will also review Guido's proposal of type hinting, and what it could mean to you. Finally, I will present a few libraries that are available, such as Hypothesis or various QuickCheck-inspired library that tries to build more robust tests, how they achieve it and their limitations. Throughout the talk, a lot of examples will used to fully illustrate the ideas being explained. \r\n\r\nAt the end of this talk, you should have a better understanding of the wonderful world of type systems, and what it really means to you. It should help you decide wether using type hints will be helpful to you and also if an external library trying to fuzz your tests has its place inside your project "], "have_tickets": [true], "title": "Static type-checking is dead, long live static type-checking in Python!", "speakers": "Jean-Philippe Caissy", "track_title": "Google Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["python3", "type-hinting", "library", "static-analysis", "Testing"]}, "6": {"id": 6, "abstracts": ["Microservices are a fresh architecture trend. In this talk I will explain what a microservice is. I will answer WHY and HOW to build microservices using tooling from Python ecosystem. We will take a look at components that power microservices: web frameworks, task queues, databases, reporting & monitoring tools and also integration technologies.\r\n\r\nI will start from design & planning, go through implementation and deployment process and briefly cover internal communcation and MDM (master data management).\r\n\r\nFinally, I will present a brief overview of patterns and anti-patterns of microservice architectures, as well as cover few use cases and success stories.\r\n\r\nPrerequisites: be familiarized with at least one python web framework and have a general understanding of web stack."], "have_tickets": [true], "title": "Why should You consider microservices ?", "speakers": "Jacek Nosal", "track_title": "Barria2 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["HTTP.", "DevOps", "automation", "docker", "ansible", "Tooling"]}, "239": {"id": 239, "abstracts": ["Un proyecto hecho en Django durante dos a\u00f1os da para muchas an\u00e9cdotas y mucho aprendizaje. Esta charla es un repaso por las decisiones sobre lo humano y lo t\u00e9cnico que fuimos tomando durante el desarrollo del proyecto.\r\n\r\nSe\u00f1alar\u00e9 las buenas decisiones que tomamos en el equipo, y tambi\u00e9n las que no nos salieron bien y nos hicieron aprender por las malas. \r\n\r\nTanto las buenas como las malas decisiones nos ense\u00f1aron much\u00edsimo y aqu\u00ed las compilo junto con unos cuantos tips que pueden divertir y, ojal\u00e1, inspirar a la audiencia, especialmente a aquellas personas que se enfrentan por primera vez a un proyecto grande.\r\n", "", ""], "have_tickets": [true], "title": "Lecciones aprendidas en un proyecto grande de Django", "speakers": "Yamila Moreno", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["postgresql", "python", "django", "open-source", "Beginners"]}, "90": {"id": 90, "abstracts": ["At the beginning of this year I started working at Lyst and I was tasked with helping to replace their old and outdated web API with a modern RESTful replacement. \r\n\t\r\nAlong the way we encountered some interesting design decisions and now I\u2019m going to share what we learned about building a real RESTful API with Django and Django REST framework.\t\r\n\r\nI've been talking about how to build great RESTful APIs for the past year at various Python and Django conferences in Europe. Now I'd like to take some real world experiences from creating Lyst's new web API and share what I've learned along the way.\r\n"], "have_tickets": [true], "title": "What it's really like building RESTful APIs with Django", "speakers": "Paul Hallett", "track_title": "Google Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["HTTP.", "django", "api", "REST"]}, "184": {"id": 184, "abstracts": ["One of the problems programmers are most often faced with is the parsing and validation of command-line arguments. If you're new to Python or programming in general, you might start by parsing sys.argv. Or perhaps you might've already come across standard library solutions such as getopt, optparse or argparse in the official documentation. \r\nWhile these modules are probably preferable to parsing sys.argv yourself, you might wonder if there are more satisfactory solutions outside of the standard library. Well, yes there are!\r\n\r\nThis talk will give you an overview of some popular alternatives to the standard library solutions (e.g. click, docopt and cliff), explain their basic concepts and differences and show how you can test your CLIs."], "have_tickets": [true], "title": "Building nice command line interfaces - a look beyond the stdlib", "speakers": "Patrick M\u00fchlbauer", "track_title": "Google Room", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["docopt", "cliff", "Click", "CLI"]}, "71": {"id": 71, "abstracts": ["with modern_peripherals: \r\n Python and Flask\r\n\r\nAuto-scrolling sites, glance-following ads, and gesture friendly web pages are coming!\r\n\r\nOver the last few years three products emerged that enable interaction with computer in a new way: Myo Armband, Leap Motion Controller and EyeTribe. The Myo Armband is a device that uses the electrical activity in your muscles to wirelessly control your computer, phone, and tablet, which is especially useful when your hands are \"tied\" or dirty. This device will be used to navigate through the presentation. The Leap Motion Controller tracks both hands in front of the screen. From a web developer\u2019s perspective, both devices allows us to use gestures, previously restricted to touch devices, on desktops. EyeTribe is an affordable eye-tracking device. \r\n\r\nThe talk will briefly cover setting up SDKs and python wrappers, and then focus on possible uses in daily life, business and, of course, web app development. Code examples will be included. In addition, the trade-offs between processing this new type of input data in the client versus processing input on the server will be discussed.\r\n"], "have_tickets": [true], "title": "with modern_peripherals: Python and Flask", "speakers": "Piotr Dyba", "track_title": "A2 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["Beginners", "python", "technologies", "flask", "web", "python3", "socket", "communication"]}, "222": {"id": 222, "abstracts": ["Have you ever worried that your tests aren't as good because they're running against a fake or mock instead of the real thing?\r\nVerified fakes solve this problem.\r\nVerified fakes allow for simplified testing using fakes while still providing the assurance that code tested using a fake implementation will behave the same way when used with a real implementation.\r\n\r\nThe talk will begin with a case-study, demonstrating what it means to write a \"verified fake\" implementation of a public API.\r\nI will show how to write tests that verify a fake implementation of a well defined API\r\nand I will show how those same tests can be re-used to verify and test real implementations of the same API.", "Have you ever worried that your tests aren't as good because they're running against a fake or mock instead of the real thing?\r\nVerified fakes solve this problem.\r\nVerified fakes allow for simplified testing using fakes while still providing the assurance that code tested using a fake implementation will behave the same way when used with a real implementation.\r\n\r\nThe talk will begin with a case-study, demonstrating what it means to write a \"verified fake\" implementation of a public API.\r\nI will show how to write tests that verify a fake implementation of a well defined API\r\nand I will show how those same tests can be re-used to verify and test real implementations of the same API.\r\n\r\nThe talk will end with a proposal that more libraries should include verified fakes.\r\nI will show, with real-world examples, how verified fakes can be used by integrators\r\nand discuss how they are superior to ad-hoc, unverified, mocking.\r\n\r\nDuring the talk I will refer to various real world, Open Source examples. Including:\r\n\r\n* Flocker's Pluggable \"Block Device Backend\" [1]\r\n\r\n This API allows Flocker to manipulate file systems on OpenStack Cinder Blocks and AWS EBS devices.\r\n It also makes it easy for third parties to implement their own Flocker block device backends.\r\n\r\n* Eliot's Memory Logger - and its use in testing and verifying logged messages.\r\n* LibCloud's DummyNodeDriver - and its limitations.\r\n* Boto - as an example of a library that could benefit from a verified, introspectable fake.\r\n* Docker-py - as an example of a library for which we have written a verified fake.\r\n\r\nThere will be at least 5 minutes for discussion at the end of the talk.\r\n\r\n[1] Flocker is an Open Source Docker orchestration system written in Python by ClusterHQ\r\n", ""], "have_tickets": [false], "title": "Faking It - The Art of Testing Using Verified Fakes", "speakers": "Richard Wall", "track_title": "A2 Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["tdd", "AWS", "OpenStack", "docker", "api", "cloud", "Best Practice", "Testing", "linux"]}, "81": {"id": 81, "abstracts": ["Creating a large-scale event processing system can be a daunting task. Especially if you want it \u201cstupid simple\u201d and wrapped around each client\u2019s needs. We built a straightforward solution for this using Python 3 and other open-source tools.\r\n\r\nMain issues to solve for a system that needs to be both performant and scalable:\r\n\r\n - handling a throughput of 1 million events per minute in a 4 cores AWS instance;\r\n\r\n - following the principle of least astonishment;\r\n\r\n - data aggregation and how Python's standard libraries and data structures can help;\r\n\r\n - failsafe and profiling mechanisms that can be applied to any Linux service in production;\r\n\r\n - addressing unexpected behaviors of Python\u2019s Standard Library; like reading from a file while it is written;\r\n\r\n - tackling a sudden spectacular cloud instance failure;\r\n\r\nThe alternative to this system would be to adopt existing technology stacks that might be too general, add more complexity, bloat, costs and which need extensive work to solve your specific problem. Moreover, our approach resulted in over 85% drop on hardware utilisation.\r\n\r\n[Context: Production Software \u2013 II (where good coding reduces the client\u2019s bill)][1]\r\n\r\n [1]: https://eastvisionsystems.com/production-software-part-ii-good-coding-reduces-clients-bill/\r\n", "", ""], "have_tickets": [true], "title": "Use Python to process 12mil events per minute and still keep it simple (Talk)", "speakers": "Teodor Dima", "track_title": "Barria1 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["bigdata", "performance", "architecture", "Development"]}, "267": {"id": 267, "abstracts": ["As an engineer working on any web stack, you may have heard about Blocking and Non-Blocking IO. You may as well have used any framework or library that supports Non-Blocking IO. After all, they are very useful as you don't want to block execution of other tasks while one task is waiting to complete a network call to another service (like HTTP call to an API or may be a TCP call to your database). Non-Blocking IO while doing tasks and not wait for IO. This also helps us handle a lot many connections than we possibly could with Blocking IO. Python supports Non-Blocking IO, but we always use some existing 3rd party library that hides all the gory details and makes it all look like black magic to the uninitiated. But there is nothing like black magic.\r\n\r\nThis presentation will be an introductory talk focused at explaining how Non-Blocking IO works, which is the basis of libraries like Gevent, Tornado and Twisted. We will learn about how Non-Blocking IO can be implemented using the most basic modules that form the base for the above mentioned libraries. Hopefully after this talk, Non-Blocking IO will not be an unsolved mystery for you anymore."], "have_tickets": [false], "title": "Understanding Non-blocking IO", "speakers": "Vaidik Kapoor", "track_title": "Google Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["web", "asyncronous", "networking"]}, "4": {"id": 4, "abstracts": ["Knowing that your application is up and running is great. However in order to make informed decisions about the future, you also need to know in what state your application currently is and how its state is developing over time.\r\n\r\nThis talk combines two topics that are usually discussed separately. However I do believe that they have a lot of overlap and ultimately a similar goal: giving you vital insights about your system in production.\r\n\r\nWe'll have a look at their commonalities, differences, popular tools, and how to apply everything in your own systems while avoiding some common pitfalls.", "", ""], "have_tickets": [true], "title": "Beyond grep: Practical Logging and Metrics", "speakers": "Hynek Schlawack", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["logging", "metrics", "errors", "DevOps"]}, "261": {"id": 261, "abstracts": ["Elasticsearch has many use cases, some of them fairly obvious and widely used, like plain searching through documents or analytics. In this talk I would like to go through some of the more advanced scenarios we have seen in the wild. Some examples of what we will cover:\r\n\r\nTrend detection - how you can use the aggregation framework to go beyond simple \"counting\" and make use of the full-text properties of Elasticsearch.\r\n\r\nPercolator - percolator is reversed search and many people use it as such to drive alerts or \"stored search\" functionality for their website, let's look at how we can use it to detect languages, geo locations or drive live search.\r\n\r\nIf we end up with some time to spare we can explore some other ideas about how we can utilize the features of a search engine to drive non-trivial data analysis including Geo-enabled search with relevancy.\r\n", "", ""], "have_tickets": [true], "title": "Beyond the basics with Elasticsearch", "speakers": "Honza Kr\u00e1l", "track_title": "Google Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:15:00", "duration": 45, "tags": ["search", "bigdata", "open-source", "elasticsearch", "analytics"]}, "189": {"id": 189, "abstracts": ["Continuous Integration is a software development practice where members of a team integrate their work frequently, leading to multiple integrations per day. Each integration is verified by an automated process (including tests) to detect integration errors as quickly as possible.\r\n\r\nThis talk will introduce the basic principles for building an effective Continuous Integration system for Python-based projects. It will present the lessons learned from building a Jenkins-based CI system for an Open Source project with a distributed team of more than 340 core developers that ranks among the top 2% of all open source projects worldwide (Plone). "], "have_tickets": [true], "title": "The Butler and the Snake - Continuous Integration for Python", "speakers": "Timo Stollenwerk", "track_title": "Barria2 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["python", "ContinuousIntegration", "tdd", "ContinuousDelivery", "Testing"]}, "314": {"id": 314, "abstracts": ["With the Raspberry Pi, it's easy to do physical computing directly from Python code - rather than usual embedded hardware engineering in C or Assembler. \r\n\r\nIn this talk I'll show examples of physical computing projects that use Python on Raspberry Pi and demonstrate the sort of code used in such projects.\r\n\r\nPhysical computing with Python is very popular in education - as it's so engaging, and more interesting than printing to the screen.\r\n\r\nThis will be an informative session with learning possibilities to give those new to physical computing a change to get started.", "", ""], "have_tickets": [true], "title": "Physical computing with Python and Raspberry Pi", "speakers": "Ben Nuttall", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["education", "raspberrypi"]}, "216": {"id": 216, "abstracts": ["As Python programmers we're used to program without taking care about allocating\r\nmemory for our objects and later on freeing them, Python garbage collector\r\ntakes care of this task automatically for us.\r\n\r\nGarbage collection is one of the most challenging topics in computer science,\r\nthere are a lot of research around the topic and different ways to tackle\r\nthe problem.\r\n\r\nKnowing how our language does this process give us a better understanding\r\nof underlying interpreter and allow us to know why problems like cycles\r\ncan happen in CPython interpreters.\r\n\r\nSo, this talk aims to be and introduction to the topic and a walkaround\r\nthrough different approaches followed in CPython and PyPy:\r\n\r\n* Generational Reference counting with cycles detector on CPython.\r\n* Incremental version of the MiniMark GC on PyPy.\r\n"], "have_tickets": [true], "title": "Knowing your garbage collector", "speakers": "Francisco Fern\u00e1ndez Casta\u00f1o", "track_title": "Barria2 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["collection", "counting", "reference", "garbage", "cpython", "PyPy"]}, "14": {"id": 14, "abstracts": ["The Python compiler Nuitka has evolved from an absurdly compatible Python to C++ translator into a **statically optimizing Python compiler**. The mere peephole optimization is now accompanied by full function/module level optimization, with more to come, and only increased compatibility.\r\n\r\nWitness local and module **variable value propagation**, **function in-lining** with suitable code, and graceful degradation with code that uses the full Python power. (This is considered kind of the break through for Nuitka, to be finished for EP.) No compromises need to be made, full language support, all modules work, including extension modules, e.g. PyQt just works.\r\n\r\nAlso new is a plugin framework that allows the user to provide workarounds for the standalone mode (create self contained distributions), do his own type hinting to Nuitka based on e.g. coding conventions, provide his own optimization based on specific knowledge.\r\n\r\nUltimately, Nuitka is intended to grow the Python base into fields, where performance is an issue, it will need your help. Scientific Python could largely benefit from future Nuitka. Join us now.\r\n", "", ""], "have_tickets": [true], "title": "The Python Compiler", "speakers": "Kay Hayen", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["FOSS", "python", "performance", "scipy", "numpy"]}, "139": {"id": 139, "abstracts": [" **Stop doing the same thing but expecting different results**\r\n\r\nAs developers we put considerable effort into optimisation. We are always tinkering, trying to make things better, and striving to remove antipatterns from our code and our development processes. \r\n\r\nYet for some reason we have not been as good at applying this spirit of optimisation to the problem of increasing diversity, even though most people these days agree that, like good tests, agile methodologies, and virtual environments, diversity is a \"good thing\".\r\n\r\nMy position is that just as there is no single easy way to write good code there is no single easy way to increasing diversity. There are, however, several things that companies and organisations do which actually work against diversity. This talk will explore these antipatterns for diversity, including uncritical belief in meritocracy, lack of understanding of the realities of marginalisation, null processes, misunderstanding of \"culture fit\", and an unwillingness to change, as well as some ways that teams, companies, and organisations might work to combat them.\r\n\r\n"], "have_tickets": [true], "title": "Antipatterns for Diversity", "speakers": "Naomi Ceder", "track_title": "A2 Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["diversity", "inclusion", "Best Practice", "community"]}, "128": {"id": 128, "abstracts": ["The asyncio module introduced in Python 3.4 is a game-changer for I/O management and event-driven network programming in Python. Aiming to be a lower-level implementation of an asynchronous event loop, it intends that higher level frameworks like Tornado, Twisted or Gevent will build on top of it, taking advantage of the shared interface for writing concurrent event-driven code across different Python frameworks.\r\n\r\nThis talk connects theory with practice, presenting how Tornado can run in the asyncio event loop and take advantage of the subgenerator delegation syntax (yield from) to provide a high degree of concurrency while keeping the simplicity of sequential code. It explains the concept of coroutines, futures and ioloop, exposing Python 3 code for sample web tasks. The talk completes with a basic demo of running this code on Tornado, comparing its syntax and performance with popular asynchronous frameworks from other languages."], "have_tickets": [true], "title": "Better asynchronous code with Tornado and Python 3", "speakers": "Anton Caceres", "track_title": "Barria1 Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["web", "python3", "tornado", "asyncio"]}, "98": {"id": 98, "abstracts": ["One day our software will go in production, and so shortly we will pay dearly for our youthful mistakes. Without regression tests, we will be in deep trouble. If we have regression tests, but we did not have performed TDD, we should probably increase the effort in bug fixing and\r\nmaintenance, since we do not have enough code coverage and our tests come out complex.\r\n\r\nBy retracing the author youthful mistakes, we will see a complete development workflow, from the user story to the low-level tests, in order to highlight the differences between functional, integration and unit tests, the best practices, and the lessons learned by the author during the development of the [Sardinia Radio Telescope][1] control software.\r\n\r\n [1]: https://www.youtube.com/watch?v=zCL_tSMqsRg\r\n", "", ""], "have_tickets": [true], "title": "Lessons learned about testing and TDD", "speakers": "Marco Buttu", "track_title": "A2 Room", "timerange": "2015-07-21 11:45:00, 2015-07-21 12:30:00", "duration": 45, "tags": ["unit-te", "tdd", "Testing"]}, "238": {"id": 238, "abstracts": ["A Django project, developed for 2 years is a valuable source of anecdotes and wisdom. This talk is a review on the decissions, about human and tech, that my team took during the project. I'll point out the good decissions as well as the bad ones, those which made us learn \"the hard way\".\r\n\r\nBoth good and bad decissions taught us a lot, and here I compile them, together with a handful of tips which can amuse and, hopefully, inspire the audience, specially those who are facing for the first time a big project."], "have_tickets": [true], "title": "Learnt lessons in a big Django Project", "speakers": "Yamila Moreno", "track_title": "Barria1 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["postgresql", "python", "django", "open-source", "Beginners"]}, "169": {"id": 169, "abstracts": ["In this talk, people will get introduced to python threading and multiprocessing packages. This talk will cover multiprocessing/threaded development best practices, problems occurs in development, things to know before multiprocessing/multi-threading. After this talk attendees will be able to develop multiprocessing/threaded applications. \r\n\r\nThis talk will cover threads, global interpreter lock, thread pool, processes, process pool, synchronization locks - Lock & RLock , semaphores, events, condition, timer, pipes, queue, shared memory. This talk will also cover best practices and problems in multiprocessing and threaded application development. \r\n"], "have_tickets": [true], "title": "Python Multithreading and Multiprocessing: Concurrency and Parallelism", "speakers": "Hitul Mistry", "track_title": "Barria2 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["concurrency", "multi-processing", "Parallelism", "multi-threading", "linux", "Best Practice"]}, "127": {"id": 127, "abstracts": ["Traditional Python profiling tools have limitations. Standard tools like **cProfile** and most all third party tools (like **Python Tools** plugin for Microsoft Visual Studio) suffer from common flaws. First, the profiling overhead is high (up to 50%). Second, the information provided is \u201cfunction-level\u201d i.e. the tool shows how much time was spent within a function, but not actionable \u201cline-level\u201d information to show which exact lines are _the bottleneck_ in a function. Adding \u201cline-level\u201d information to most tools causes the application to run even slower. Third, some tools require modification of the application source code to enable profiling thus disrupting development.\r\n\r\nThis talk presents an experimental Python profiler. It typically has less than 15% overhead, shows line-level information and does not require modification of application source code. Experiments using it resulted in performance gains of 2x and more. Of course results vary by application, but in a typical application there may be quick optimizations easily identified by this type of profiler.\r\n\r\nThe talk will briefly describe the basics of what, why and how to profile. The profiler\u2018s use and results will be shown in the presentation with examples based on real-life applications. Previous experience of working with profilers and trying to optimize an application is a plus, but not required, to gain a better appreciation of the work presented.", "", ""], "have_tickets": [true], "title": "Tuning Python applications can dramatically increase performance", "speakers": "Vasilij Litvinov", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python", "visualization", "performance", "profiling", "metrics", "cpython", "Tooling", "Development"]}, "134": {"id": 134, "abstracts": ["Removing UneXploded Ordnance (UXO) from minefields at the end of a conflict is a very time-consuming and expensive operation. Advanced satellite image processing can detect changes and activities on the ground and represent them on a map that can be used by operators to classify more dangerous zones and safer areas, potentially reducing the time spent on field surveys.\r\n\r\nWe exploit space-borne radar Earth images together with thematic data for mapping activities on the ground using numpy, scipy and gdal. The Activity Map generation process to be shown will be implemented using IPython Notebook.", "", ""], "have_tickets": [true], "title": "Activity Map from space: supporting mine clearance with Python", "speakers": "Giuseppe Cammarota", "track_title": "A2 Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["visualization", "scipy", "ipython", "geodata", "numpy"]}, "11": {"id": 11, "abstracts": ["Python is an expressive general purpose programming language. Its syntax provides many ways to represent structure and minimise code repetition and boilerplate.\r\n\r\nBut Python not always expressible enough. Perhaps when you've built a complicated enough system with hard-to-express inter-relationships, the code required to construct or operate on it can become complicated, repetitive and unreadable. Or perhaps you have users unfamiliar with Python who need to understand or edit a system. In cases like these, stepping beyond the syntax and semantics of basic Python can be an advantage.\r\n\r\nDaniel will describe various ways you can implement your own Domain Specific Languages, languages perhaps completely unlike Python that can succinctly describe more complicated Python systems.\r\n\r\nThis talk will cover:\r\n\r\n* What and why of DSLs\r\n* Metaprogramming tricks\r\n* Writing simple parsers\r\n* The libraries PLY and PyParsing\r\n* Building tooling around your new DSLs"], "have_tickets": [true], "title": "The unabridged guide to Domain Specific Languages in Python", "speakers": "Daniel Pope", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 16:15:00", "duration": 60, "tags": ["python", "technologies", "Tooling"]}, "34": {"id": 34, "abstracts": ["Does your open source project need better documentation? Do you wish that new users could get started with your software more easily? Do you feel that your code contribution workflow isn't documented well enough, or that contributors are discouraged from documenting their code? How can you give your project docs the love they deserve?\r\n\r\nThis high-level talk aims to introduce the main principles of technical communication in the context of FOSS projects. It is intended for anyone who interacts with docs, whether your project is fresh off the dev environment or has been around since the dawn of Git. Topics include tone, style, process management, structure, and contribution workflow.", "", ""], "have_tickets": [true], "title": "FOSS DOCS 101 (keep it simple, present!)", "speakers": "Mikey Ariel", "track_title": "Google Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["FOSS", "documentation", "community", "open-source", "Sphinx", "communication", "Best Practice", "sphinxdocumentation"]}, "300": {"id": 300, "abstracts": ["NumPy and Pandas have revolutionized data processing and munging in the Python ecosystem. As data and systems grow more complex, moving and querying becomes more difficult. Python already has excellent tools for in-memory datasets, but we inevitably want to scale this processing and take advantage of additional hardware. This is where Blaze comes in handy by providing a uniform interface to a variety of technologies and abstractions for migrating and analyzing data. Supported backends include databases like Postgres or MongoDB, disk storage systems like PyTables, BColz, and HDF5, or distributed systems like Hadoop and Spark. \r\n\r\nThis talk will introduce the Blaze ecosystem, which includes: Blaze (data querying), Odo (data migration), Dask (task scheduler), DyND (dynamic, multidimensional arrays) and Datashape (data description).\r\n\r\nAttendees will get the most out of this talk if they are familiar with NumPy and Pandas, have intermediate Python programming skills, and/or experience with large datasets.", "NumPy and Pandas have revolutionized data processing and munging in the Python ecosystem. As data and systems grow more complex, moving and querying becomes more difficult. Python already has excellent tools for in-memory datasets, but we inevitably want to scale this processing and take advantage of additional hardware. This is where Blaze comes in handy by providing a uniform interface to a variety of technologies and abstractions for migrating and analyzing data. Supported backends include databases like Postgres or MongoDB, disk storage systems like PyTables, BColz, and HDF5, or distributed systems like Hadoop and Spark. \r\n\r\nThis talk will introduce the Blaze ecosystem, which includes:\r\n\r\n- Blaze (data querying): [http://blaze.pydata.org/en/latest/][1]\r\n\r\n- Odo (data migration): [http://odo.readthedocs.org/en/latest/][2]\r\n\r\n- Dask (task scheduler): [http://dask.pydata.org/en/latest/][3]\r\n\r\n- DyND (dynamic, multidimensional arrays): [https://github.com/libdynd/dynd-python][4]\r\n\r\n- Datashape (data description): [http://datashape.pydata.org/][5]\r\n\r\nAttendees will get the most out of this talk if they are familiar with NumPy and Pandas, have intermediate Python programming skills, and/or experience with large datasets.\r\n\r\n [1]: http://blaze.pydata.org/en/latest/\r\n [2]: http://odo.readthedocs.org/en/latest/\r\n [3]: http://dask.pydata.org/en/latest/\r\n [4]: https://github.com/libdynd/dynd-python\r\n [5]: http://datashape.pydata.org/\r\n", ""], "have_tickets": [true], "title": "Scale your data, not your process: Welcome to the Blaze ecosystem", "speakers": "Christine Doig", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:15:00", "duration": 45, "tags": ["Abstractions", "distributed-systems", "analytics", "bigdata", "dynd", "blaze", "odo", "spark", "dask", "open-source", "pydata", "datashape", "databases", "data", "numpy"]}, "278": {"id": 278, "abstracts": ["Do you know what your application did last night? Python logging can help you.\r\n\r\nThis talk you will show you how to implement a systematic logging approach without boilerplate code and how to set up the Python logging module for different needs in production systems. We will see how to work with log files and other logging endpoints. We will address the data protection concerns that come up when logging from application with personal information. We will also look at the performance implications of logging. We will then cover best practices - how to structure logging, what to include in a log message, and how to configure logging for different use cases.\r\n\r\nWe will use the Python standard logging module to implement logging. This talk is useful to beginners with some experience. An understanding of decorators is useful, but not required. Some experience in web programming is a plus."], "have_tickets": [true], "title": "A Deep Look at Logging", "speakers": "Stefan Baerisch", "track_title": "A2 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["web", "BestPractices", "logging"]}, "198": {"id": 198, "abstracts": ["The asyncio project was officially launched with the release of Python 3.4 in March 2014. The project was public before that under the name \"tulip\". asyncio is just a core network library, it requires third party library to be usable for common protocols. One year later, asyncio has a strong community writing libraries on top of it.\r\n\r\nThe most advanced library is aiohttp which includes a complete HTTP client but also a HTTP server. There are also libraries to access asynchronously the file system, resolve names with DNS, have variables local to tasks, read-write locks, etc. There are clients for AMQP, Asterisk, ElasticSearch, IRC, XMPP (Jabber), etc. (and even an IRC server!). There are asynchronous drivers for all common databases, and even for some ORMs. As expected, there are tons of new web frameworks based on asyncio. It's also possible to plug asyncio into Gtk, Qt, gevent, eventlet, gunicorn, tornado, etc.\r\n\r\nI will also discuss use cases of asyncio in production and benchmarks. Spoiler: asyncio is not slow.\r\n\r\nThe asyncio library also evolved to become more usable: it has a better documentation, is easier to debug and has a few new functions. There is also a port to Python 2: trollius.", "", ""], "have_tickets": [true], "title": "asyncio community, one year later", "speakers": "Victor Stinner", "track_title": "A2 Room", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["python3", "asyncio", "aiohttp", "networking"]}, "305": {"id": 305, "abstracts": ["The past few years, we have made large strides to welcome more diverse people into our community. You see better gender ratios in attendance numbers at Python conferences, the billed speakers, the amount of women-centric programs. We can see the benefits of outreach. But we're not done yet.\r\n\r\nWhile a lot of the Python community embraces the importance of being diverse, we haven't taken that mindset to our workplace. From recruiting, we still hear, \"sure, we wanted to recruit women, but we couldn't find them\" and \"we only focus on quality here, not gender!\" Within company cultures, we hear \"gender equality isn't a problem here!\" or \"women don't ask for a higher salary\" and to \"just lean in!\"\r\n\r\nThis talk will recount the diversity efforts of the past few years and quantify the effects on the Python community. But this talk will also address the not-so-low-hanging fruit; the deeper-rooted problems that still plague the community from inside where we work. And it will talk the audience through actionable items to improve one's work place that welcomes more diversity."], "have_tickets": [true], "title": "Diversity: We are not done yet", "speakers": "Lynn Root", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["social", "diversity", "equality", "community"]}, "77": {"id": 77, "abstracts": ["A d\u00eda de hoy usamos un enorme conjunto de bibliotecas y frameworks, adem\u00e1s los usamos con cierta libertad dentro de nuestro c\u00f3digo, y pasado el tiempo nos damos cuenta de que esa biblioteca, no cubre mis necesidades, o tiene alg\u00fan fallo, o no escala bien en proyectos m\u00e1s grandes... en resumen, hemos ca\u00eddo en una trampa. No se puede evitar caer en estas trampas, porque depende de nuestras necesidades y las bibliotecas que utilizamos, por lo tanto, solo podemos estar lo mejor preparados posibles para salir de ellas tan pronto como nos demos cuenta.\r\n\r\nComo soluci\u00f3n a esto, plantear\u00e9 varias v\u00edas (nada innovadoras, pero menos usadas de lo que deber\u00edan). Unit testing (TDD idealmente), arquitectura hexagonal, y algunas reglas b\u00e1sicas de clean code.", "", ""], "have_tickets": [true], "title": "Todo es una trampa", "speakers": "Jes\u00fas Espino", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python", "architecture", "tdd", "cleancode", "unit-testing"]}, "236": {"id": 236, "abstracts": ["Using an SQL database offers a bunch of advantages; first of all its maturity and that it is understood by almost every software developer. But it has at least one main disadvantage. As the data is structured, if you want to modify the structure, for example on a long-running project, you need a migration and therefore almost for sure, a downtime.\r\n\r\nWhen you have to make a migration, to modify the structure of data for a small amount of records, it is so fast that it never gets problematic. But if you think to modify the structure of tables containing millions or billions of records, the time required to simply apply the structural change is problematic.\r\n\r\nHere are some changes we are working on at orderbird to go towards zero downtime migrations using some of the latest improvements of PostgreSQL 9.4, mainly logical replication and mixing in a little magic of some python scripting with psycopg."], "have_tickets": [false], "title": "Bringing PostgreSQL towards zero downtime migration with Python", "speakers": "Matthieu Rigal", "track_title": "A2 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["Database", "postgresql", "psycopg"]}, "84": {"id": 84, "abstracts": ["The Baserock project is about creating system images from source code in a clean, reproducible way. All of the tooling is written in Python.\r\n\r\nIn this talk I'll explain a bit about the core idea of Baserock: declarative system definitions (expressed in YAML) that can be built and deployed in various ways.\r\n\r\nThen I'll go into more detail about the tools available, and some of the cool things that they can do: distributed building, atomic system updates, creating custom container images, and more.\r\n\r\nFind out more about the Baserock project at http://www.baserock.org/", "", ""], "have_tickets": [true], "title": "Introduction to Baserock", "speakers": "Sam Thursfield", "track_title": "Barria2 Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["python", "DevOps", "system-administration", "unix", "open-source", "docker", "linux"]}, "225": {"id": 225, "abstracts": ["While Python supports procedural, object-oriented, and functional programming, its functional features are not fully developed. Mochi is a Python-like functional language that compiles to Python 3 and PyPy 3 bytecode. It can use Python libraries and can be used from Python.\r\n\r\nMochi adds functional features such as tail recursion optimization, no re-assignments in function definitions, persistent data structures, pattern matching, algebraic data types, a pipeline operator, better anonymous functions, Erlang-style actors, Lisp-style macros as well as many useful builtin functions.\r\n\r\nThis talk presents what Mochi is, how it works, and what you can do with it. Functional programming can help to solve certain kind of problems elegantly. Done right, functional programs can be easily tested and provide more confidence that you program is really doing what you want. Mochi could be another tool in your toolbox. Functional programming can expand your horizon and can be a lot of fun. Mochi offers easy access to this new world because you can leverage your existing Python knowledge and libraries whenever needed. "], "have_tickets": [true], "title": "Functional Python with Mochi", "speakers": "Mike M\u00fcller", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:15:00", "duration": 30, "tags": ["Programming", "functional"]}, "96": {"id": 96, "abstracts": ["Given the dynamic nature of Python, some bugs tend to creep in our codebases. Innocents NameErrors or hard-to-find bugs with variables used in a closure, but defined in a loop, they all stand no chance in front of Pylint (http://pylint.org/).\r\nIn this talk, I'll present one of the oldest static analysis tools for Python, with emphasis on what it can do to understand your Python code. Pylint is both a style checker, enforcing PEP 8 rules, as well as a code checker in the vein of pyflakes and the likes, but its true power isn't always obvious to the eye of beholder. It can detect simple bugs such as unused variables and imports, but it can also detect more complicated cases such as invalid arguments passed to functions, it understands the method resolution order of your classes and what special methods aren't implemented correctly. Starting from abstract syntax trees, we'll go through its inference engine and we'll see how Pylint understands the logical flow of your program and what sort of type hinting techniques are used to improve its inference, including PEP 484 type hints. As a bonus, I'll show how it can be used to help you port your long-forgotten library to Python 3, using its new --py3k mode."], "have_tickets": [true], "title": "12 years of Pylint (or How I learned to stop worrying about bugs)", "speakers": "Claudiu Popa", "track_title": "Google Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["ast", "static-analysis", "lint", "typehinting"]}, "52": {"id": 52, "abstracts": ["Python has a great versatile ecosystem but the competition is getting better, this talk is about how Python can keep up with these new languages and where PyPy fits into this.\r\n\r\nRecently we've seen the rise of new technologies like Go, Node.js and Julia, those have the ability to build an ecosystem on a clean slate and thus be better than Python in some aspects. What would it take to be as good as those technologies on those aspects without loosing all the things we love about Python ? This talk will describe my perfect future where Python keeps getting better, gets to keep it's great set of libraries and where PyPy fits in that future.", "", ""], "have_tickets": [true], "title": "PyPy and the future of the Python ecosystem", "speakers": "Romain Guillebert", "track_title": "A2 Room", "timerange": "2015-07-24 15:15:00, 2015-07-24 15:45:00", "duration": 30, "tags": ["PyPy"]}, "345": {"id": 345, "abstracts": ["Case study of an In-Flight Entertainment system, built using Python.\r\n\r\nThis talk will show the basic requirements for the system and the architecture decisions we took.\r\n\r\nBesides, running software at 10.000 feet implies new unexpected challenges, different from the ones we encounter day-to-day. We'll focus on how we solved them."], "have_tickets": [true], "title": "Python in the Sky: In-Flight Entertainment with Python", "speakers": "David Arcos", "track_title": "A2 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["redis", "python", "distributed-systems", "postgresql", "aviation", "django", "api", "fabric", "celery"]}, "161": {"id": 161, "abstracts": ["pip is certainly one of the most used package in the Python ecosystem, but what actualy happens when you pip install foo ?\r\n\r\n - - how does it perform an installation and resolve dependencies ?\r\n - - how does pip find installation candidates and select the 'best' ?\r\n - - Some sneak peek on the (possible) plans for the future of pip (wheel caching, setup_requires control, etc)\r\n\r\n"], "have_tickets": [true], "title": "PIP Internals", "speakers": "Xavier Fernandez", "track_title": "Barria1 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["packaging", "internals"]}, "221": {"id": 221, "abstracts": ["This talk will be a general introduction to Numba. Numba is an open source just\u00ad-in-\u00adtime Python compiler that allows you to speed up numerical algorithms for which fast linear algebra (i.e. Numpy array operations) is not enough. It has backends for the CPU and for NVidia GPUs. After the talk, the audience should be able to understand for which use cases Numba is adequate, what level of performance to expect, and have a general notion of its inner working.\r\n\r\nA bit of familiarity with scientific computing and/or Numpy is recommended for optimal understanding, but the talk should otherwise be accessible to the average Python programmer. It should also be of interest to people who are curious about attempts at high-\u00adperformance Python.", "", ""], "have_tickets": [true], "title": "Numba, a JIT compiler for fast numerical code", "speakers": "Antoine Pitrou", "track_title": "Google Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["python", "data-science", "analytics", "performance", "JIT", "numpy"]}, "5": {"id": 5, "abstracts": ["Traditional methods of coping with concurrent programming problems are well-known and described in literature. Many programming languages, including Python, contain in their standard libraries tools and primitives such as semaphores and can spawn threads or subprocesses.\r\n\r\nHowever, in the face of increasing interest in service oriented architecture and building distributed systems, that span across many independent server nodes, emerges a need to adapt traditional solutions, so they can be applied in the new environment.\r\n\r\nIn this talk I will share my experiences gathered during building a modern contact center - highly concurrent system, which requires certain resources to be accessed exclusively by several self-contained components.\r\n"], "have_tickets": [true], "title": "Distributed locks with Python and Redis", "speakers": "Sebastian Buczy\u0144ski", "track_title": "Google Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["redis", "twisted", "concurrency"]}, "86": {"id": 86, "abstracts": ["Braintree is a Ruby shop. By default, we use Ruby and Rails for projects. We also use Ruby-based projects for much of our tooling, including puppet, capistrano, and rake. However, we strongly believe in using the right tool for the job. What that means has evolved over ti\r\nme, and I'll discuss what solutions we chose in the past as well as our current choices.\r\n\r\nSo what's it like doing Python at a Ruby shop? You get lots of jokes about language features Ruby has but Python lacks and lots of disbelief that Python will survive the 2/3 split. People also tend to apply the best practices and conventions of Ruby to Python code as if t\r\nhey were the same. Python's major inroad at Braintree has been, surprisingly enough, as a platform for high-concurrency situations. This is a direct result of the power of Tornado as a platform for asynchronous I/O. It also helps that many Python is very approachable and \r\nmany developers have at least some experience with it.\r\n\r\nBraintree has three pieces of our infrastructure using Python and Tornado -- an incoming request proxy; an outgoing request proxy; and a webook delivery service. They've served us well for 3+ years but all suffer from a number of problems. The outdated concurrency feature\r\ns of CPython / Python 2 as well as our lack of experience with and commitment to Tornado have always been an issue. As the meat of the talk, I'll speak in depth about the other issues we've encountered with each of the three applications and our short- and long- term solu\r\ntions to the problems.\r\n\r\nThe state as of the end of 2014 appeared dire for Python at Braintree. All the old Python code in our stack is on the way out, and Python has been specifically recommended agaist for new projects. Our Python client library is used by some of our largest merchants, and is \r\nready for the future by supporting Python 2.6+ and Python 3.3+ in a single codebase. We also have a vibrant Python community at Venmo, our sister company. Both Braintree and Venmo support Python by attending, hosting, sponsoring, and speaking at meetups, conferences, and \r\nother events in Chicago, New York, and elsewhere. At Braintree, our Data Science team uses Python almost exclusively and they're becoming a bigger part of our business every day. We also use Collings and custom tooling written in Python to manage our infrastructure.\r\n"], "have_tickets": [true], "title": "Python Not Recommended", "speakers": "Adam Forsyth", "track_title": "Barria1 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["data-science", "pandas", "tornado", "collins", "case study", "pika", "sklearn"]}, "212": {"id": 212, "abstracts": ["PEP 484 introduces type hints for Python 3. Type hints can increase readability of our code for both humans and tools and lead to better and safer outcomes. And we'll prove it in this talk!\r\n\r\nWe're going to take a closer look at type hints, see practical examples of where they can be used and the value they provide. We'll see that simple class types and built-in collection types are often enough for our public API's. We'll also discuss how you can benefit from type hinting stubs for third-party libraries and briefly cover more advanced scenarios like generic types."], "have_tickets": [false], "title": "How you can benefit from type hints", "speakers": "Andrey Vlasovskikh", "track_title": "A2 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["type-hinting", "python", "static-analysis"]}, "150": {"id": 150, "abstracts": ["Orain dela urte batzuk asi genuen bidea azalduko dut, Python San Sebastian elkartea nola sotu genuen eta hortik pixkanaka pixkanaka nola sortzen joan den EuroPython sortzeko grina. \r\n\r\nGendeari nahi izan eskero eta lan egin eskero EuroPython bezelako kongresu bat antolatzea posible dela erakustea du helburu hitzaldi honek."], "have_tickets": [true], "title": "Karakate magaletik EuroPythoneko tontorrera", "speakers": "oier etxaniz", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 15:45:00, 2015-07-22 16:15:00", "duration": 30, "tags": ["python", "MAL", "Euskara", "EuroPython", "Inspirational", "PySS"]}, "162": {"id": 162, "abstracts": ["Coding dojos are a very good way to share coding knowledge among members in a community, and, at the same time, introduce people into the language and community.\r\nSometimes, though, the typical approach to set coding dojos may prevent expert coders to join the session. This is the story of the pyBCN's dojos, so far.\r\n", "", ""], "have_tickets": [true, true], "title": "What dojos are and how we run these at pyBCN", "speakers": "N\u00faria Pujol, Ignasi Fosch", "track_title": "Barria1 Room", "timerange": "2015-07-20 15:45:00, 2015-07-20 16:15:00", "duration": 30, "tags": ["Beginners", "python", "tdd", "Functional Programming", "unit-testing", "learning", "fun"]}, "180": {"id": 180, "abstracts": ["Python is a language of choice for developers with wide range of experience, for some it is a first programming language, others switch to Python after years of experience. Python provides friendly syntax and smooth learning curve. This sometimes leads to developers lacking comprehension of some more advanced constructs. \r\n\r\nIt happens that experienced developers jump into using Python and sometimes miss less known Python language constructs. On the other hands people who purposefully learned Python sometimes lack practical ideas for how to apply those constructs.\r\n\r\nThis talk will be specifically focused on the practical usages of advanced Python constructs like iterators, generators, decorators and context managers. Goal of the talk is to share ideas about how those constructs can be used for practical purposes in real projects. Prior knowledge is not required, there will be a brief introduction to every construct being presented."], "have_tickets": [true], "title": "Practical usage of advanced Python constructs", "speakers": "Andrey Syschikov", "track_title": "Barria1 Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["python", "core"]}, "309": {"id": 309, "abstracts": ["Python and PostgreSQL, two tools we like to use for our projects but do you know everything about them?\r\n\r\nThe talk will give an overview of psycopg2, Peewee, SQLAlchemy, Alembic and multicorn, PL/Python, these libraries can be used with PostgreSQL.\r\n\r\n- psycopg2, the well known connector, this basic component is really useful, well documented and battle-tested and used by the most famous toolkits of the Python ecosystem.\r\n- Peewee, a minimalist ORM for Python, clear and brief, this ORM can be used if you want create a software with a minimalist ORM.\r\n- SQLAlchemy, a Python SQL toolkit and Object Relational Mapper, you can use this library to create your models and interact with them.\r\n- Alembic, a lightweight database migration tool for usage with SQLAlchemy, allows to create some migration scripts for your project.\r\n- multicorn is a Python wrapper over the Foreign Data Wrapper of PostgreSQL\r\n- PL/Python, a procedural language for PostgreSQL, allows to write functions in the Python language.\r\n\r\nYou can find this talk on https://speakerdeck.com/matrixise/python-and-postgresql-a-wonderful-wedding-english"], "have_tickets": [true], "title": "Python and PostgreSQL, a wonderful wedding", "speakers": "Stephane Wirtel", "track_title": "A2 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["python", "SQLAlchemy", "postgresql", "multicorn", "peewee", "dbapi"]}, "95": {"id": 95, "abstracts": ["What if you could focus on functionality rather than the glue code between services?\r\n \r\nLymph is an opinionated framework for writing services in Python. It features pluggable service discovery, request-reply messaging and pluggable pub-sub messaging. \r\n \r\nAs our development teams are growing, we're moving away from our monolithic architecture. We want to write services and not worry about the infrastructure's needs. We want development to be fast, quick and simply work.\r\n \r\nIn this talk we will show you how easy it is to write and run services with lymph.\r\nGo check http://lymph.io - we are accepting pull requests."], "have_tickets": [true], "title": "Stop trying to glue your services together; import lymph", "speakers": "Max Brauer", "track_title": "Google Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["werkzeug", "services", "zeromq", "events", "gevent", "web", "rpc", "open-source", "zookeeper", "rabbitmq", "framework"]}, "78": {"id": 78, "abstracts": ["MkDocs is a Python library for creating documentation with\r\nMarkdown. The primary goal of the project is to lower the barrier\r\nfor documentation writers and to help enable high quality prose\r\nbased documentation.\r\n\r\nThe primary maintainer of MkDocs will cover the following topics:\r\n\r\n- An introduction to MkDocs and the project goals.\r\n - How and why did the project start?\r\n - Who uses MkDocs today?\r\n\r\n- Discuss what we need to do to create great documentation and\r\n how MkDocs can help.\r\n\r\n- A tour of the key features currently in MkDocs\r\n - Adding MkDocs to your project.\r\n - Using themes in the documentation and making customisations\r\n - Publishing your documentation with ReadTheDocs and GitHub\r\n pages.\r\n\r\n- A look at the up and coming features in MkDocs and how you can\r\n help make these happen.\r\n\r\n- A comparison with Sphinx and why you should consider MkDocs."], "have_tickets": [true], "title": "MkDocs: Documenting projects with Markdown", "speakers": "Dougal Matthews", "track_title": "Barria1 Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["markdown", "open-source", "documentation", "mkdocs"]}, "53": {"id": 53, "abstracts": ["Locality sensitive hashing (LSH) is a technique for reducing complex data down to a simple hash code. If two hash codes are similar than the original data is similar. Typically, they are used for speeding up search and other similarity comparisons. \r\n\r\nIn this presentation I will discuss two ways of implementing LSH in python; the first method is completely stateless but only works on certain forms of data; the second is stateful but does not make any assumptions about the distribution of the underlying data. I will conclude the presentation by describing how we apply LSH to search at Lyst.\r\n", "", ""], "have_tickets": [true], "title": "Speeding up search with locality sensitive hashing", "speakers": "Maciej Kula", "track_title": "Barria2 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["data-science", "machine-learning", "bigdata", "search", "numpy", "sklearn"]}, "362": {"id": 362, "abstracts": ["PEP 484, \"Type Hints\", was accepted in time for inclusion in Python 3.5 beta 1. This introduces an optional standard for specifying types in function signatures. This concept was previously discussed as \"optional static typing\" and I similar to the way TypeScript adds optional type declarations to JavaScript.\r\n\r\nIn this talk I will discuss the motivation for this work and show the key elements of the DSL for describing types (which, by the way is backward compatible with Python 3.2, 3.3 and 3.4). Note: *Python will remain a dynamically\r\ntyped language, and I have no desire to ever make type hints\r\nmandatory, even by convention!*", "", ""], "have_tickets": [true], "title": "Type Hints for Python 3.5", "speakers": "Guido van Rossum", "track_title": "Google Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python"]}, "155": {"id": 155, "abstracts": ["RinohType is a document processor inspired by [LaTeX][1] and written in Python. It renders [reStructuredText][2] and [Sphinx][3] documents to PDF based on a document template and a style sheet. RinohType already implements many of the features that make LaTeX so great. Not stopping there, RinohType also tries to fix LaTeX's weaknesses; it should not only be easy to use, but easy to _customize_ and _extend_ as well. To minimize frustration when things go wrong, care is taken to provide descriptive warning and error messages. The powerful layout engine makes it easy to define custom page layouts. And the CSS-inspired stylesheets simplify the styling of document elements. At a lower level, Python makes the writing of extensions much more accessible when compared to TeX's rather arcane macro language.\r\n\r\nIn the talk, I would like to introduce RinohType to the Python community. No special prerequisite knowledge is required. \r\nReference: https://pypi.python.org/pypi/RinohType", "RinohType is a document processor inspired by [LaTeX][1] and written in Python. It renders [reStructuredText][2] and [Sphinx][3] documents to PDF based on a document template and a style sheet. RinohType already implements many of the features that make LaTeX so great. Not stopping there, RinohType also tries to fix LaTeX's weaknesses; it should not only be easy to use, but easy to _customize_ and _extend_ as well. To minimize frustration when things go wrong, care is taken to provide descriptive warning and error messages. The powerful layout engine makes it easy to define custom page layouts. And the CSS-inspired stylesheets simplify the styling of document elements. At a lower level, Python makes the writing of extensions much more accessible when compared to TeX's rather arcane macro language.\r\n\r\nIn the talk, I would like to introduce RinohType to the Python community. No special prerequisite knowledge is required. I will start off by discussing my motivation for starting RinohType development, its design goals and the currently available features. This will be followed by an example of how you can use RinohType to render a reStructuredText document to a neat PDF document, highlighting some of the features along the way. Next, we'll explore some of RinohType's internals such as the page layout engine and the style sheet system. We will explore how these can be used in a Python application to create a document from scratch.\r\n\r\nA first RinohType release was recently created. While this preview release is of alpha quality, it should be able to render most reStructuredText documents. It also includes a preliminary Sphinx builder. Please find more details in the package's description at [PyPI][4].\r\n\r\n [1]: http://en.wikipedia.org/wiki/LaTeX\r\n [2]: http://docutils.sourceforge.net/rst.html\r\n [3]: http://sphinx-doc.org\r\n [4]: https://pypi.python.org/pypi/RinohType", ""], "have_tickets": [true], "title": "RinohType, a document processor inspired by LaTeX", "speakers": "Brecht Machiels", "track_title": "Google Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["LaTeX", "reStructuredText", "PDF", "typesetting"]}, "227": {"id": 227, "abstracts": ["What if I told you that we\u2019ve built an open source \u201cWhatsApp\u201d-like RESTful API on the top of Pyramid? We've developed MAX: a real-time messaging service and activity stream that has become the key feature for a social intranet at the BarcelonaTech University\r\n\r\nWe will show how we designed and built MAX with performance in mind using state of the art Python technologies like Gevent, WSGI, and multi-threaded queue processing. We will also show you how we've managed to design a simple architecture guaranteeing both high scalability and performance, achieving connecting ratios over 30.000 students, teachers, and university staff.\r\n\r\nThe API is secured using oAuth 2.0 resource owner password credentials flow powered by our own oAuth server implementation (Osiris) also Pyramid-based. We are using MongoDB as general storage backend and RabbitMQ over websockets to support realtime and messaging."], "have_tickets": [true], "title": "MAX: Realtime messaging and activity stream engine", "speakers": "Carles Bruguera", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 11:45:00, 2015-07-22 12:30:00", "duration": 45, "tags": ["python", "restfull", "gevent", "REST", "open source", "mongodb", "wsgi", "web", "websockets", "api", "rabbitmq"]}, "135": {"id": 135, "abstracts": ["This talk is a sequel to \"Brainwaves for Hackers\" and illustrates some experiments you can do with a Neurosky Mindwave headset, a bluetooth enabled EEG device.\r\n \r\nI'll also talk some more about how to integrate the device with the IPython\r\nNotebook for real time viewing and how to use the Mindwave with the Raspberry Pi."], "have_tickets": [true], "title": "Brainwaves for Hackers 2.0", "speakers": "Andreas Klostermann", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["visualization", "biology", "Health-Science", "machine-learning"]}, "124": {"id": 124, "abstracts": ["When applications get deployed in enterprise environment or in large organizations, they need to support user accounts and groups that are managed externally, in existing directory services like FreeIPA or Active Directory, or federated via protocols like SAML. While it is possible to add support for these individual setups and protocols directly to application code or to Web frameworks or libraries, often it is better to delegate the authentication and identity operations to a frontend server and just assume that the application has to be able to consume results of the external authentication and identity lookups.\r\n\r\nIn this talk, we will look at Django Web framework and how with few small changes to the framework and to the application we can extend the functionality of existing RemoteUserMiddleware and RemoteUserBackend to consume users coming from enterprise identity management systems. We will focus on using proven OS-level components such as SSSD for Web applications, but will also show setup using federation.", "", ""], "have_tickets": [false], "title": "External authentication for Django projects", "speakers": "Jan Pazdziora", "track_title": "Barria2 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["django", "FreeIPA", "HTTP", "web", "Apache", "authentication", "sssd"]}, "229": {"id": 229, "abstracts": ["The quality of written code is an important factor in a final success of a software project.\r\nPerhaps there is no universal definition of high quality code, however usually it's characterized as clear and readable, well-designed, well tested and documented, easier to debug, maintain and extend, etc.\r\n\r\nPython was designed to be a highly readable language that would make it easier to develop high quality code. Nevertheless, programming language is only a tool in a software development process and in the end the quality of code depends mostly on its author's concept and decisions he make. \r\n\r\nIn this talk I would like to present some of ideas, techniques and tools for improving the quality of written code, tried out with a good result in everyday work on developing software in Python."], "have_tickets": [true], "title": "Writing quality code", "speakers": "Rados\u0142aw Jankiewicz", "track_title": "Google Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["python", "BestPractices", "Programming", "Coding"]}, "353": {"id": 353, "abstracts": ["Testing with purely random data on it's own doesn't get you very far. But\r\ntwo approaches that have been around for a while have new libraries that\r\nhelp you generate random input, that homes in on failing testcases.\r\n\r\nFirst **[Hypothesis][1]**, a Python implementation and update of the Haskell library\r\nQuickCheck. Known as property based testing, you specify a property of your\r\ncode that must hold, and Hypothesis does its best to find a counterexample.\r\nIt then shrinks this to find the minimal input that contradicts your\r\nproperty.\r\n\r\nSecond, **[American fuzzy lop][2]** (AFL), is a young fuzzing library that's already\r\nachieved an impressive trophy case of bug discoveries. Using\r\ninstrumentation and genetic algorithms, it generates test input that\r\ncarefully searches out as many code paths as it can find, seeking greater\r\nfunctional coverage and ultimately locating crashes and hangs that no other\r\nmethod has found. I'll be showing how with **[Python-AFL][3]** we can apply this\r\ntool to our Python code.\r\n\r\n [1]: https://hypothesis.readthedocs.org/en/latest/\r\n [2]: http://lcamtuf.coredump.cx/afl/\r\n [3]: http://jwilk.net/software/python-afl\r\n"], "have_tickets": [true], "title": "Testing with two failure seeking missiles: fuzzing and property based testing", "speakers": "Tom Viner", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 11:45:00, 2015-07-23 12:30:00", "duration": 45, "tags": ["fuzzing", "Testing"]}, "304": {"id": 304, "abstracts": ["The talk will show the architecture and inners of a cloud hosting service we are developing in the University of Cambridge based on python technologies, mainly django, ansible, and celery.\r\n\r\nThe users manage their hosts using a web panel, developed in django, with common options: ability to create a vhost, associate domain names to vhosts, install packages, recover from backups, make snapshots, etc. Interaction between the panel and the hosts are made using ansible playbooks launched asynchronously by celery tasks. The VM architecture has been designed to be VM platform agnostic and to provide disk replication and high availability.\r\n\r\nThe University of Cambridge central IT services (http://www.ucs.cam.ac.uk/) also provides other services to the rest of the university like domain name registration, authentication, authorisation, TLS certificates, etc. We link all these other services with the hosting service by using APIs while keeping a microservices architecture approach. Thus, enabling the use/link of other services within the same hosting service web application. "], "have_tickets": [false], "title": "Architecture of a cloud hosting service using python technologies: django, ansible and celery", "speakers": "Dr A. Martin-Campillo", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["hosting", "django", "cloud", "ansible", "celery"]}, "201": {"id": 201, "abstracts": ["2000 urtean CodeSyntax sortu zenetik Python erabili dugu gure lan ia guztiak egiteko. Lan horiek egitean izandako (r)eboluzioa azalduko dugu hitzaldi honetan: python script arruntetatik, Zope aplikazioen zerbitzarian nabigatzaile baten programatzetik, fitxategi sisteman programatzera pasatu gara, Turbogears ere ikutu dugu eta orain Plone, Django eta Pyramid darabilgu.\r\n\r\nSince the beginning of our company in year 2000 we have been using Python to do our work. We will explain the (r)evolution we faced working with python during this 15 years: small python scripts, browser-based-development using Zope Application Server, we touched Turbogears and now Plone, Django and Pyramid applications."], "have_tickets": [true], "title": "Python gure etxean: (r)eboluzioa atzo, gaur eta bihar", "speakers": "Mikel Larreategi", "track_title": "Barria2 Room (Local track)", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["web", "Plone", "django", "open-source"]}, "185": {"id": 185, "abstracts": ["Users and developers especially, hate waiting. Computing has adapted and we almost never wait for the computer for more then 10 seconds. One big exception is runnig a test suite which takes MINUTES on many projects. That is incredibly distracting, frustrating and dragging the whole concept of automated tests down. \r\n\r\nI present a technique and a tool (py.test plugin called \"testmon\") which automatically selects only tests affected by recent changes. Does it sound too good to be true? Python developers rightfully have a suspecting attitude towards any tool which tries to be too clever about their source code. Code completion and symbol searching doesn't need to be 100% reliable but messing with the test suite execution? I show that we can cut test suite execution time significantly but maintain it's reliability."], "have_tickets": [true], "title": "Mashing up py.test, coverage.py and ast.py to take TDD to a new level", "speakers": "Tibor Arpas", "track_title": "Barria2 Room", "timerange": "2015-07-21 15:45:00, 2015-07-21 16:15:00", "duration": 30, "tags": ["py.test", "Testing"]}, "228": {"id": 228, "abstracts": ["Passwords are a pain for us all - programmers, users and admins alike. How can we reduce that pain, or eliminate it entirely?\r\n\r\nThis talk will\r\n\r\n - Review research into techniques that improve the usability of password systems, and mitigate shortcomings\r\n - Introduce the new standards Universal Authentication Framework (UAF) & Universal Second Factor (U2F)\r\n - Describe how they streamline authentication, even eliminate passwords entirely\r\n - Show how to integrate UAF/U2F in Django and other Python frameworks\r\n - Summarize the state of support for UAF & U2F in browsers, devices, and the wider world\r\n - Introduce Sonipass - a project to replace passwords, even on existing websites\r\n"], "have_tickets": [true], "title": "Taking the pain out of passwords and authentication", "speakers": "Alex Willmer", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 16:15:00", "duration": 60, "tags": ["experience", "u2f", "web", "authentication", "2fa", "passwords", "security", "fido", "2-factor", "uaf"]}, "308": {"id": 308, "abstracts": ["Whatever you need to do with Python, you can probably import a library for it. But what exactly happens when you use that import statement? How does a source file that you've installed or written become a Python module\r\nobject, providing functions or classes for you to play with?\r\n\r\nWhile the import mechanism is relatively well-documented in the reference and dozens of PEPs, sometimes even Python veterans are caught by surprise. And some details are little-known: did you know you can import from zip archives? Write CPython modules in C, or even a dialect of Lisp? Or import from URLs (which might not be a good idea)?\r\n\r\nThis talk explains exactly what can happen when you use the import statement \u2013 from the mundane machinery of searching PYTHONPATH through subtle details of packages and import loops, to deep internals of custom importers and C extension loading.", "", ""], "have_tickets": [true], "title": "Import Deep Dive", "speakers": "Petr Viktorin", "track_title": "Barria1 Room", "timerange": "2015-07-24 15:45:00, 2015-07-24 16:15:00", "duration": 30, "tags": ["import", "core"]}, "211": {"id": 211, "abstracts": ["CeleraOne tries to bring its vision to Big Data by developing a unique platform for real-time Big Data processing. The platform is capable of personalizing multi-channel user flows, right-in time targeting and analytics while seamlessly scaling to billions of page impression. It is currently tailored to the needs of content providers, but of course not limited to.\r\n\r\n - The platform\u2019s architecture is based on four main layers:\r\n - Proxy/Distribution -- OpenResty/LUA for dynamic request forwarding\r\n - RESTful API -- several Python applications written using Pyramid web framework running under uWSGI server, which serve as an integration point for third party systems;\r\n - Analytics -- Python API for Big Data querying and distributed workers performing heavy data collection.\r\n - In-memory Engine -- CeleraOne\u2019s NoSql database which provides both data storage and fast business logic.\r\n\r\nIn the talk I would like to give insights on how we use Python in the architecture, which tools and technologies were chosen, and share experiences deploying and running the system in production.\r\n\r\n"], "have_tickets": [true], "title": "Building a RESTful real-time analytics system with Pyramid", "speakers": "Andrii Chaichenko", "track_title": "PythonAnywhere Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["bigdata", "Pyramid", "highload", "real-time", "analytics"]}, "188": {"id": 188, "abstracts": ["In this talk, Software Engineer Joao Santos will describe how the engineering team at Zalando has been migrating to local Git hooks to ensure that engineers can work autonomously and flexibly. Zalando---Europe\u2019s leading online fashion platform for men, women and children-- began shifting from SVN to Git in late 2013. Santos and his colleagues used Python to create a Git update hook that enabled the team to reject changes to a branch while still allowing changes to other branches. He\u2019ll explain why his team chose Python for this job instead of a bash script, point out mistakes made during the process (and solutions his team used to fix them), and the benefits generated by this migration. He\u2019ll also talk about turnstile: a set of open-source, configurable, optional local Git hooks, created by the Zalando team, that enables engineers to abide by internal rules for committing code while following their own coding style and workflow preferences."], "have_tickets": [false], "title": "Using Git Hooks to Help Your Engineering Teams Work Autonomously", "speakers": "Jo\u00e3o Santos", "track_title": "Barria2 Room", "timerange": "2015-07-21 12:30:00, 2015-07-21 13:00:00", "duration": 30, "tags": ["yaml", "git-hooks", "FOSS", "agile", "Git", "CLI", "open-source", "Development"]}, "100": {"id": 100, "abstracts": ["Take a big, non-multithreaded program, and run in on multiple cores!\r\n\r\nPyPy, the Python implementation written in Python, experimentally\r\nsupports Software Transactional Memory (STM). It runs without the\r\nGlobal Interpreter Lock (GIL).\r\n\r\nThe strength of STM is not only to remove the GIL, but to also enable\r\na novel use of multithreading, inheritently safe, and more useful in\r\nthe general case than other approaches like OpenMP. The main news\r\nfrom last year's presentation is that there is now a way to get\r\nreports about the \"STM conflicts\", which is essential to go past toy\r\nexamples. With it, you can incrementally remove conflicts from large\r\ncode bases until you see a benefit from PyPy-STM. The goal of the\r\ntalk is to give several concrete examples of doing that."], "have_tickets": [true], "title": "The GIL is dead: PyPy-STM", "speakers": "Armin Rigo", "track_title": "Google Room", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["PyPy", "GIL", "concurrency"]}, "7": {"id": 7, "abstracts": ["SaltStack is a thriving configuration management system written in Python that leverages YAML and Jinja2 which, by now, probably needs no introduction.\r\n\r\nThis talk will cover a brief summary of why we need configuration management tools, followed by a full dive into SaltStack, its features, pros and cons, how to use it and how to extend it. By the end of this talk you will have gone from knowing little or nothing about SaltStack, to being able to deploy your own setup.\r\n\r\nThis talk will be targeted to either seasoned Python developers who are taking their first steps in the system administration world, or established system administrators who secretly love Python and prefer to stay away of configuration management systems based on other languages.\r\nIts advisable that attendees have some familiarity with Python as well as with system administration concepts. Also, this presentation will be focused on GNU/Linux systems, so it is expected that attendees are comfortable with some of its concepts.", "", ""], "have_tickets": [true], "title": "Salting things up in the sysadmin's world", "speakers": "Juan Manuel Santos", "track_title": "Barria1 Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["saltstack", "management", "python", "configuration", "linux"]}, "21": {"id": 21, "abstracts": ["TDD is not about tests!\r\nWell, actually, it\u2019s not **just** about writing tests, or writing them before the code. This talk will show you how to use tests to really drive development by transforming business requirements into tests, and allowing your code to come as their natural consequence.\r\n\r\nToo often this key aspect is neglected and the result is that tests and code are somehow \u201cdisconnected\u201d. The code is not as short and efficient as it could be, and the tests are not as effective. Refactoring is not always easy, and over time all sorts of issues start to come out of the surface.\r\n\r\nHowever, we will show that when TDD is done properly, tests and code merge beautifully into an organic whole that fulfills the business requirements, and provides all sorts of advantages: your code is minimal, easy to amend and extend, readable, clean. Your tests will be effective, short and focused, and allow for light-hearted refactoring and excellent coverage.\r\n\r\nWe will provide enough information and examples to spark the curiosity of the novice, and satisfy the need of a deeper insight for the intermediate, and help you immediately benefit from this transformative technique that is still often underestimated and misunderstood."], "have_tickets": [true], "title": "TDD is not about tests!", "speakers": "Fabrizio Romano", "track_title": "A2 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python", "tdd", "agile", "Best Practice", "Development", "Testing", "Coding"]}, "348": {"id": 348, "abstracts": ["Python focuses a lot on writing readable code and also tries to make solutions obvious, but this doesn't necessarily mean that you cannot write unreadable code or design your code in ways which makes it hard to extend or maintain.\r\n\r\nThis talk will show some useful idioms to use when writing Python code, how to structure your modules and also goes into details on which techniques to use and which to think about twice, based on 20 years of experience writing Python."], "have_tickets": [true], "title": "Python idioms to help you write good code", "speakers": "Marc-Andre Lemburg", "track_title": "Google Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["python", "design", "idioms", "experience", "Best Practice", "Coding"]}, "286": {"id": 286, "abstracts": ["Meta classes are an advanced feature in python, in this talk i will try to explain what they are, how they work and i will show some code as well. \r\nThis talk is for anyone who would like to see what happens under the hood when you create a class in Python and how to intercept the class creation process and modify it.\r\n", "", ""], "have_tickets": [false], "title": "Python Advanced Basics (Meta Classes)", "speakers": "Nimrod Wandera", "track_title": "Barria1 Room", "timerange": "2015-07-24 14:30:00, 2015-07-24 15:15:00", "duration": 45, "tags": ["python"]}, "75": {"id": 75, "abstracts": ["I will explain how CPython objects are built, from simple objects\r\nlike int or None to complex ones like dict. To make it funnier, I\r\nwill play to change instance data directly using ctypes and do\r\n\"really bad things\" like truncating tuples."], "have_tickets": [true], "title": "Playing with CPython Objects Internals", "speakers": "Jes\u00fas Espino", "track_title": "PythonAnywhere Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["low-level", "python", "cpython"]}, "133": {"id": 133, "abstracts": ["The talk discusses the challenges of implementing a Citizen Science Paradigm in a Python-centric platform, and the solutions devised for the System for observation and monitoring of Marine Alien Species, currently used by the italian Institute for Environmental Protection and Research (ISPRA). \"Alien\" Species means species introduced into a natural environment where they are not normally found.\r\nTopics includes strategies for crowd-friendly forms, work-flow definition for collected data, choice of the best technologies for its components: app for android devices, web application for citizens and experts, webGIS for data browsing and web services for data exporting."], "have_tickets": [true], "title": "Citizen Science: Tracking Aliens with Python!", "speakers": "Alessio Siniscalchi", "track_title": "Barria2 Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 15:45:00", "duration": 30, "tags": ["Plone", "postgresql", "webGIS", "citizen-science"]}, "111": {"id": 111, "abstracts": ["Before its first major version, Elasticsearch was only used as a \"secondary\" database, and search engine.\r\nThe releases added a snapshort/restore feature, making it a great full featured database\r\n\r\nThis talk will focus on how we integrate Elasticsearch into our stack, and the multiple usage we make of it: from storing business events to IOT devices metrics."], "have_tickets": [true], "title": "Python and elasticsearch 101", "speakers": "Beno\u00eet Calvez", "track_title": "A2 Room", "timerange": "2015-07-20 16:45:00, 2015-07-20 17:15:00", "duration": 30, "tags": ["databases", "development-process", "elasticsearch"]}, "129": {"id": 129, "abstracts": ["[Apache Spark][1] is a computational engine for large-scale data processing. It\r\nis responsible for scheduling, distribution and monitoring applications which\r\nconsist of many computational task across many worker machines on a computing\r\ncluster.\r\n\r\nThis Talk will give an overview of PySpark with a focus on Resilient\r\nDistributed Datasets and the DataFrame API. While Spark Core itself is written\r\nin Scala and runs on the JVM, PySpark exposes the Spark programming model to\r\nPython. It defines an API for Resilient Distributed Datasets (RDDs). RDDs are a\r\ndistributed memory abstraction that lets programmers perform in-memory\r\ncomputations on large clusters in a fault-tolerant manner. RDDs are immutable,\r\npartitioned collections of objects. Transformations construct a new RDD from a\r\nprevious one. Actions compute a result based on an RDD. Multiple computation steps\r\nare expressed as directed acyclic graph (DAG). The DAG execution model is \r\na generalization of the Hadoop MapReduce computation model.\r\n\r\nThe Spark DataFrame API was introduced in Spark 1.3. DataFrames envolve Spark's\r\nRDD model and are inspired by Pandas and R data frames. The API provides\r\nsimplified operators for filtering, aggregating, and projecting over large\r\ndatasets. The DataFrame API supports diffferent data sources like JSON\r\ndatasources, Parquet files, Hive tables and JDBC database connections.\r\n\r\nResources:\r\n\r\n- [An Architecture for Fast and General Data Processing on Large Clusters][2] Matei Zaharia\r\n- [Spark][6] Cluster Computing with Working Sets - Matei Zaharia et al.\r\n- [Resilient Distributed Datasets][5] A Fault-Tolerant Abstraction for In-Memory Cluster Computing -Matei Zaharia et al.\r\n- [Learning Spark][3] Lightning Fast Big Data Analysis - Oreilly\r\n- [Advanced Analytics with Spark][4] Patterns for Learning from Data at Scale - Oreilly\r\n\r\n [1]: https://spark.apache.org\r\n[2]: http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf\r\n[3]: http://shop.oreilly.com/product/0636920028512.do\r\n[4]: http://shop.oreilly.com/product/0636920035091.do\r\n[5]: https://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf\r\n[6]: http://www.cs.berkeley.edu/~matei/papers/2010/hotcloud_spark.pdf\r\n\r\n"], "have_tickets": [false], "title": "PySpark - Data processing in Python on top of Apache Spark.", "speakers": "Peter Hoffmann", "track_title": "Google Room", "timerange": "2015-07-22 16:45:00, 2015-07-22 17:15:00", "duration": 30, "tags": ["bigdata", "distributed-systems", "data-science", "analytics"]}, "18": {"id": 18, "abstracts": ["An overview of the currently available Python game development libraries and frameworks and how is Python currently being used in the videogame industry.\r\n\r\nPresentation of Kobra, a modern open source Python game development framework with ECS (Entity Component System) architecture and C++ bindings."], "have_tickets": [true], "title": "Python Gamedev MLG", "speakers": "Alejandro Garcia", "track_title": "A2 Room", "timerange": "2015-07-22 14:30:00, 2015-07-22 15:15:00", "duration": 45, "tags": ["gamedev", "python", "OpenGL", "c++"]}, "80": {"id": 80, "abstracts": ["Mixins are a great way to keep an application decoupled. This talk is about building mixins and dissecting what's behing the mixin \"magic\" and that, in fact, there is no magic involved at all. The main focus will be on Django framework while digging into mixins. When using Django class-based views, mixins feel very natural.\r\n\r\n**Goal**: by the end of this talk, every developer should be confident about creating his or her own custom mixins.\r\n\r\n**Prerequisites:**\r\n - basic understanding of OOP principles and their application in Python\r\n - Django web framework\r\n\r\nGenerally mixins in Python are pretty straight-forward, easy to create and use. Nevertheless a lot of developers stay away from them. I think attendees of this talk will be interested to learn that mixins are not that complex and their benefit is tremendous."], "have_tickets": [true], "title": "Demystifying Mixins with Django", "speakers": "Ana Balica", "track_title": "Barria2 Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:00:00", "duration": 30, "tags": ["mixins", "OOP", "django"]}, "232": {"id": 232, "abstracts": ["So often, we've been encouraged to be smart in our development. \"Work smarter not harder!\" say the encouraging posters. But the desire to be smart, and be seen to be smart, is hurting. The design suffers, the code suffers, and it's hard to recruit developers smart enough to cope with the problems caused.\r\n\r\nIn this talk, I'm proposing an alternative to being smart: **_DumbDev_**. Let's use our brains for enjoyable, interesting things, rather than wrestling with code written for smart developers.\r\n\r\n**So what do I mean by _dumb_?**\r\n\r\nWell, I don't mean 'ignorant'. A clever person can be ignorant of some important information, and learn it. With ignorance, there is hope. I'm also not talking about its opposite, 'stupidity'. This occurs when someone is given the information or advice, and chooses to ignore it. Dumb isn't stupid. Nor is it silent, as in someone who can't speak.\r\n\r\nInstead, the picture I have is of one of the early computers: very small RAM, disk space measured in KB, and a woefully inadequate CPU. In other words, slow, with very little working memory and limited persistent storage. Hey, this describes my brain -- and I realise that's an asset! I will write better software if I take this into account.\r\n\r\nHere's the first **_DumbDev_** rule, putting a sensible limit on complexity:\r\n\r\n> **1. All diagrams must fit on a Noughts and Crosses (Tic-tac-toe) board**.\r\n\r\n> _One central class/concept and up to eight things linked. Larger structures need to be subdivided._\r\n\r\n [1]: http://www.phyast.pitt.edu/~micheles/python/plone-hierarchy.png\r\n [2]: http://www.artima.com/weblogs/viewpost.jsp?thread=246341\r\n", "So often, we've been encouraged to be smart in our development. \"Work smarter not harder!\" say the encouraging posters. But the desire to be smart, and be seen to be smart, is hurting. The design suffers, the code suffers, and it's hard to recruit developers smart enough to cope with the problems caused.\r\n\r\nIn this talk, I'm proposing an alternative to being smart: **_DumbDev_**. Let's use our brains for enjoyable, interesting things, rather than wrestling with code written for smart developers.\r\n\r\n**So what do I mean by _dumb_?**\r\n\r\nWell, I don't mean 'ignorant'. A clever person can be ignorant of some important information, and learn it. With ignorance, there is hope. I'm also not talking about its opposite, 'stupidity'. This occurs when someone is given the information or advice, and chooses to ignore it. Dumb isn't stupid. Nor is it silent, as in someone who can't speak.\r\n\r\nInstead, the picture I have is of one of the early computers: very small RAM, disk space measured in KB, and a woefully inadequate CPU. In other words, slow, with very little working memory and limited persistent storage. Hey, this describes my brain -- and I realise that's an asset! I will write better software if I take this into account.\r\n\r\nSo, I'm a **_DumbDev_**, which means I can't hold in my mind the infamous [Plone Site class hierarchy][1] (see [Michele Simionato's article][2]). Rather than beat myself up about this, I can say, \"Hold on, maybe deep inheritance is a bad idea...\" There is some debate about the number of things we can think about simultaneously: it may be 7, 9, 5, 4 or even only 3. We can learn some tricks to appear to cope with more, but most of us can't easily do 38. \r\n\r\nHere's the first **_DumbDev_** rule, putting a sensible limit on complexity:\r\n\r\n> **1. All diagrams must fit on a Noughts and Crosses (Tic-tac-toe) board**.\r\n\r\n> _One central class/concept and up to eight things linked. Larger structures need to be subdivided._\r\n\r\nThere are seven further rules for me to explain in this talk. I will demonstrate the benefits of the **_DumbDev_** approach, with good and bad examples. At the end of the presentation, I hope you will realise that you're a better developer than you thought at the start. The next time it takes you two hours to debug a simple exception, you'll know that it's not you. It's because the system wasn't written using **_DumbDev_** rules.\r\n\r\nLet's free our brains for more interesting things, like having ideas and solving problems. \r\n\r\nLet's do **_DumbDev_**.\r\n\r\n [1]: http://www.phyast.pitt.edu/~micheles/python/plone-hierarchy.png\r\n [2]: http://www.artima.com/weblogs/viewpost.jsp?thread=246341\r\n", ""], "have_tickets": [true], "title": "DumbDev -- eight rules for dumb development", "speakers": "Rob Collins", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["massage", "best-practices", "dumbdev", "unit-testing", "rules", "community", "software-design"]}, "39": {"id": 39, "abstracts": ["Reahl is a full-featured web framework with a twist: with Reahl you write a web application purely in Python. HTML, JavaScript, CSS and all those cumbersome web technologies (and a few other lower level concerns) are hidden away from you. As far as web frameworks go this is truly a paradigm shift: away from the cobwebs of all the different web technologies, template languages and low-level details -- towards being able to focus on the goals at hand instead, using a single language.\r\n\r\nIn this talk I will give you a brief idea of what Reahl is all about: why it is worthwhile doing, how it works, where we are and what still needs to be done. I hope to convince you that this is an important direction for web frameworks, and of how unique Reahl is. Developing such an abstract framework is an ambitious goal. I'd like to convey the message that what we have achieved so far, and the strategy lessons learnt along the way demonstrate this goal to be realistic and practical.\r\n\r\n"], "have_tickets": [true], "title": "Reahl: The Python-only web framework", "speakers": "Iwan Vosloo", "track_title": "Barria1 Room", "timerange": "2015-07-23 14:30:00, 2015-07-23 15:15:00", "duration": 45, "tags": ["web", "open-source"]}, "41": {"id": 41, "abstracts": ["[Ansible ][1]is the _new cool kid in town_ in the configuration management world. It is easy to learn, fast to setup and works great! In the first part of the talk, I will do a super-fast introduction to Ansible for the newcomers.\r\n\r\nIf you are a Pythonista, you can hack and leverage Ansible in many ways. In the second part of the talk, I will describe some options to extend and embed Ansible with Python:\r\n\r\n - Embedding Ansible with the Python API\r\n - Extending Ansible: creating modules, plugins and callbacks\r\n\r\nPrevious experience with Ansible is advised in order to get the most of this talk, but beginners to the tool will also get an overview of the capabilities of this kind of integration.\r\n\r\n [1]: http://www.ansible.com/home\r\n"], "have_tickets": [true], "title": "Extending and embedding Ansible with Python", "speakers": "Alejandro Guirao Rodr\u00edguez", "track_title": "A2 Room", "timerange": "2015-07-23 11:00:00, 2015-07-23 11:45:00", "duration": 45, "tags": ["management", "Tooling", "configuration", "DevOps", "ansible"]}, "70": {"id": 70, "abstracts": ["The talk is about the implementation of multibody simulation in the scientific python world on the way to a stage usefull for engineering and educational purposes.\r\nMultibody simulation (MBS) requires two major steps: first the formulation of the specific mechanical problem. Second step is the integration of the resulting equations.\r\nFor the first step we use the package sympy which is on a very advanced level to perform symbolic calculation and which supports already Lagrange's and Kane's formalism. The extensions we made are such that a complex mechanical setup can be formulated easily with several lines of python code. The functionality is analogous to well known MBS-tools, with that you can assemble bodies, joints, forces and constraints. Also external forces even in a cosimulation model can be added on top. The second step, the integration is done via ode-integrators implemented in scipy.\r\nFinally for visual validation the results are visualized with the vpython package and for further analytics with matplotlib.\r\n\r\nConclusion: not only highly constrained pendulums with many rods and springs but also driving simulation of passenger cars an be performed with our new extension using python packages off the shelf."], "have_tickets": [true], "title": "Multibody Simulation using sympy, scipy and vpython", "speakers": "Oliver Braun", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["Mechanics", "sympy", "Engineering", "vpython", "Physics", "visualization", "education", "scipy"]}, "19": {"id": 19, "abstracts": ["Times changed, with introducing asyncio to Python standard library many and many developers think about switching from previous solutions to aio stack. Talk will introduce aiohttp, aioredis & aiopg - cornerstones for building modern Python backends and show common problems & solutions while switching to aio stack.\r\n\r\nBut not only Python changed. In second part, I'll talk about what new happened in frontend development, how new ES6 features modified JavaScript, and what React.js & Flux means for Python developers. \r\n\r\nTalk will cover real-world web application, which used aio stack on backend and React.js & Flux approach on frontend and provide useful observations for other developers interested in these topics."], "have_tickets": [true], "title": "Asyncio Stack & React.js or Development on the Edge", "speakers": "Igor Davydenko", "track_title": "Google Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["es6", "aiohttp", "aiopg", "react.js", "flux", "api", "aioredis", "python3", "asyncio"]}, "99": {"id": 99, "abstracts": ["In this talk I'm going to introduce Scrapinghub's new open source framework [Frontera][1]. Frontera allows to build real-time distributed web crawlers and website focused ones. \r\n\r\nOffering:\r\n\r\n - customizable URL metadata storage (RDBMS or Key-Value based),\r\n - crawling strategies management,\r\n - transport layer abstraction.\r\n - fetcher abstraction.\r\n\r\nAlong with framework description I'll demonstrate how to build a distributed crawler using [Scrapy][2], Kafka and HBase, and hopefully present some statistics of Spanish internet collected with newly built crawler. Happy EuroPythoning!\r\n\r\n [1]: https://github.com/scrapinghub/frontera\r\n [2]: http://scrapy.org/\r\n"], "have_tickets": [true], "title": "Frontera: open source large-scale web crawling framework", "speakers": "Alexander Sibiryakov", "track_title": "A2 Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["scrapy", "kafka", "hbase", "webcrawling", "distributed-systems"]}, "279": {"id": 279, "abstracts": ["This talks is about automation and the use of Python scripts to speed up repetitive tasks.\r\n\r\nIt's for developers, sysops, devops, but also any kind of user that want improve his daily routine.\r\n\r\nI will talk about the use of Python with different tools for different platforms: Keyboard Maestro/Alfred/Hazel on OsX and Synapse/Kupfer/AutoKey on Linux.\r\n\r\nThere will be presented some sample script to give an idea of the potentiality of Python mixed with great tools, and these are some of the topics that I will cover:\r\n\r\n - text manipulation;\r\n - document template management;\r\n - clipboard management;\r\n - stuff internet activities (url shortening, web scraping, etc.);\r\n - list management.\r\n - etc.\r\n\r\n"], "have_tickets": [true], "title": "Python for IT specialists' tasks automation", "speakers": "Gianluca Nieri", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 11:45:00, 2015-07-20 12:30:00", "duration": 45, "tags": ["automation", "development-tools", "DevOps", "system-administration"]}, "101": {"id": 101, "abstracts": ["DEPOT ( http://depot.readthedocs.org/en/latest/ ) is a file storage framework born from the experience on a project that saved a lot of files on disk, until the day it went online and the customer system engineering team decided to switch to Heroku, which doesn't support storing files on disk.\r\n\r\nThe talk will cover the facets of a feature \"saving files\" which has always been considered straightforward but that can become complex in the era of cloud deployment and when infrastructure migration happens. \r\n\r\nAfter exposing the major drawbacks and issues that big projects might face on short and long terms with file storage the talk will introduce DEPOT and how it tried to solve most of the issues while providing a super-easy-to-use interface for developers. We will see how to use DEPOT to provide attachments on SQLAlchemy or MongoDB and how to handle problems like migration to a different storage backend and long term evolution.\r\n\r\nLike SQLAlchemy makes possible to switch your storage on the fly without touching code, DEPOT aims at making so possible for files and even use multiple different storages together."], "have_tickets": [true], "title": "Why storing files for the web is not as straightforward as you might think.", "speakers": "Alessandro Molina", "track_title": "Barria2 Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["web", "HTTP.", "mongodb", "cloud", "SQLAlchemy"]}, "147": {"id": 147, "abstracts": ["Haskell is very different from Python, and provide different tools to library and framework designers. As a result, its ecosystem is filled with libraries and frameworks that solve the same problems we try to solve in our favorite programming languages, but with a very different approach.\r\n\r\nThis talk is an exploration of the Haskell ecosystem, from the point of view of a Python developer. \r\nWe will review various popular Haskell libraries and frameworks, focusing on the library design. The goal is to provide the audience a sneak peak of some different ways to tackle problems, and hopefully to inspire library authors to explore some design space that we don't usually explore in Python.\r\n\r\nThis talk should be interesting to any intermediate Python programmer who is curious about other ways to solve problems. No Haskell knowledge is required from the audience."], "have_tickets": [true], "title": "Through the lens of Haskell: exploring new ideas for library design", "speakers": "Georges Dubus", "track_title": "A2 Room", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["design", "library", "Haskell"]}, "165": {"id": 165, "abstracts": ["As a web developer, I find myself being asked to make increasing numbers of data visualizations, interactive infographics, and more. d3.js is great, as are many other javascript toolkits that are out there. But if I can write more Python and less JavaScript... well, that makes me happy! \r\n\r\nBokeh is a new Python library for interactive visualization. Its origins are in the data science community, but it has a lot to offer web developers. In this mini-tutorial, I'll run through how to build a data visualization in Bokeh and how to hook it into your web application. This will be a real-world example, that was previously built in d3.js. \r\n\r\nAlong the way, I'll provide tips and tricks that I've discovered in my experience including how Bokeh works wonderfully with the iPython notebook which I use to prototype my visualizations, and many data science people use as their native way to explore data.\r\n\r\nFor those of you who already know a little Bokeh, I'll be covering the new \"actions framework\" that lets you write JS callbacks in your python code so you can do lots of interactions all on the client side.\r\n"], "have_tickets": [true], "title": "Getting started with Bokeh / Let's build an interactive data visualization for the web..in Python!", "speakers": "Sarah Bird", "track_title": "Barria2 Room", "timerange": "2015-07-20 11:00:00, 2015-07-20 11:45:00", "duration": 45, "tags": ["open-data", "data-science", "javascript", "visualization", "bigdata", "bokeh", "pandas", "web", "django", "open-source", "canvas", "data", "graphics"]}, "247": {"id": 247, "abstracts": ["Wrappers are an essential tool for interacting with web APIs. They reduce the amount of work needed to make requests and sometimes, only sometimes prevent the developer from dealing with extensive documentations. It\u2019s common to encounter libs that require not only the study of their own documentation, but also the APIs one, duplicating the needed work. This is caused because wrappers do not follow a design pattern, each developer creates it\u2019s own design, coding style and use their preferred tools. \r\n\r\n[Tapioca][1] is what can be called: \"a wrapper generator\u201d. Creating API wrappers with Tapioca is extremely easy and fast. For example, it took 1 hour to write the full wrapper for the [Parse.com][2] REST API. But this is not the more important thing, Tapioca libs have a similar interface so once understood how they work, developers can work with any other without the need to learn a new interface. \r\n\r\nTapioca is also thought to comply with REST features and takes HATEOAS (Hypermedia as the engine of application state) seriously, so \u201cfollowing\u201d links and pagination are natively supported. Explorability is also a key concept and developers are encouraged to play with Tapioca packages and find their way through APIs before writing their final code. Although there are some production ready [Tapioca wrappers][3], it is a work in progress, there are still many features to be explored.\r\n\r\n [1]: https://github.com/vintasoftware/tapioca-wrapper\r\n [2]: http://parse.com\r\n [3]: https://github.com/vintasoftware/tapioca-wrapper#tapioca-comes-in-many-flavours"], "have_tickets": [true], "title": "What is wrong with API wrappers and how can we do better", "speakers": "Filipe Ximenes", "track_title": "A2 Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:00:00", "duration": 30, "tags": ["HTTP", "ipython", "web", "api", "requests", "wrapper"]}, "195": {"id": 195, "abstracts": ["In this talk I will present some tools for working with Geographic Information Systems in Python.\r\n\r\nGeographic information Systems are widely used for managing geographic (map) data. As an example I will present how to use Open Street Map data (http://openstreetmap.org/), in routing, traffic planning and estimation of pollution emission.\r\n\r\nFor the purpose of the project EcoSense (http://ecosense.au.dk), GPS data from users smartphones are mapped to OSM roads. The map matching algorithm is written in Python and uses data from the database PostgreSQL, with the PostGIS extension. \r\n\r\nOne of the goals of the EcoSense project is to devise methods to improve the estimation of air quality in urban environments.\r\n"], "have_tickets": [true], "title": "How to GIS with Python", "speakers": "Anders Lehmann", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 16:45:00, 2015-07-23 17:15:00", "duration": 30, "tags": ["GIS", "bigdata", "Mapmatching", "PostGIS", "postgresql"]}, "296": {"id": 296, "abstracts": ["To accompany an upcoming O'Reilly book 'Data-visualisation with Python and Javascript: crafting a dataviz toolchain for the web' (see [here][1]) this talk aims to sketch out the toolchain by transforming some dry Wikipedia data (Nobel prize-winners) into a far more engaging and insightful web-visualisation. This transformative cycle uses Python big-hitters such as Scrapy, Pandas and Flask, the latter delivering data to Javascript's D3.\r\n\r\nWhile Python is fast becoming the goto language for data-processing/science, the visual fruits of that labour hit the wall of the web, where there is only one first-class language, Javascript. To develop a data-viz toolchain for the modern world, where web-presentation is increasingly mandated, making Python and Javascript play nicely is fundamental. This talk aims to show that the perceived wall between the two languages is actually a thin, permeable membrane and that, with a bare minimum of web-dev, one can get on with programming seamlessly in both.\r\n\r\n [1]: http://kyrandale.com/blog/data-visualization-python-javascript/\r\n"], "have_tickets": [true], "title": "Data-visualisation with Python and Javascript: crafting a data-viz toolchain for the web", "speakers": "Kyran Dale", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 14:30:00, 2015-07-21 15:15:00", "duration": 45, "tags": ["d3", "visualization", "matplotlib", "flask", "pandas", "web", "javascript", "scrapy"]}, "199": {"id": 199, "abstracts": ["Today, we almost exclusively think of code in software projects as a collection of text files. The tools that we use (version control systems, IDEs, code analyzers) also use text as the primary storage format for code. In fact, the belief that \"code is text\" is so deeply ingrained in our heads that we never question its validity or even become aware of the fact that there are other ways to look at code.\r\n\r\nIn my talk I will explain why treating code as text is a very bad idea which actively holds back our understanding and creates a range of problems in large software projects. I will then show how we can overcome (some of) these problems by treating and storing code as data, and more specifically as a graph. I will show specific examples of how we can use this approach to improve our understanding of large code bases, increase code quality and automate certain aspects of software development.\r\n\r\nFinally, I will outline my personal vision of the future of programming, which is a future where we no longer primarily interact with code bases using simple text editors. I will also give some ideas on how we might get to that future.\r\n\r\nMore information about me:\r\n\r\n- Github: https://github.com/adewes\r\n- Twitter: https://twitter.com/japh44\r\n- Website: http://www.andreas-dewes.de/en", "Today, we almost exclusively think of code in software projects as a collection of text files. The tools that we use (version control systems, IDEs, code analyzers) also use text as the primary storage format for code. In fact, the belief that \"code is text\" is so deeply ingrained in our heads that we never question its validity or even become aware of the fact that there are other ways to look at code.\r\n\r\nIn my talk I will explain why treating code as text is a very bad idea which actively holds back our understanding and creates a range of problems in large software projects. I will then show how we can overcome (some of) these problems by treating and storing code as data, and more specifically as a graph. I will show specific examples of how we can use this approach to improve our understanding of large code bases, increase code quality and automate certain aspects of software development.\r\n\r\nFinally, I will outline my personal vision of the future of programming, which is a future where we no longer primarily interact with code bases using simple text editors. I will also give some ideas on how we might get to that future.\r\n\r\nGoals:\r\n\r\n- Convince people that treating code primarily as text is a really bad idea.\r\n- Show which insights we can gain when treating code as data and storing it in a format that allows us to analyze and process it algorithmically.\r\n- Give people a vision on how the future of programming might look like and how we might get there.\r\n\r\nPrerequisites:\r\n\r\n- A basic understanding of programming concepts (files, compilers / interpreters, version control [not really necessary though]).\r\n- An interest in best practices and writing good code.\r\n\r\nOutline:\r\n\r\n- Introduction (who am I, why I'm here) - 3 mins\r\n- Short history of code storage formats - wires, punch cards, text, graphs and back to text (5 mins)\r\n- Why storing code as text is a bad idea - motivation and examples (5 mins)\r\n- Alternative ways to think about code - graphs and trees (5 mins)\r\n- Building a graph storage engine for Python code - principles and use cases (5 mins)\r\n- Demo time - visualizing the graph, tracking the evolution of code, finding duplicates and problems, automatically refactoring the graph (5 mins)\r\n- The future of programming - increase automation, decrease errors (5 mins) \r\n- Building the future - what we need and how to build it (5 mins)\r\n- Ending remarks (2 mins)\r\n\r\n(40 minutes total [probably less] + 5 minutes of Q&A)\r\n\r\nMy motivation:\r\n\r\nI talked about data-driven code analysis at the PyCon Montreal 2015, and many people said that they really enjoyed my talk and would like to learn more about data-driven code analysis and treating code as a graph. I'm happy to oblige and give a talk about this at the EuroPython!\r\n\r\nOther events I spoke at (selection):\r\n\r\n- 31C3 (Chaos Communication Congress) Hamburg: I gave a talk on quantum computing in front of 1.800 people, which received very positive feedback (https://www.youtube.com/watch?v=aXtE0Zeszho)\r\n- PyCon Montreal - I spoke about data-driven code analysis in front of 1.000 people. The talk received great interest and very positive feedback (https://us.pycon.org/2015/schedule/presentation/341/)\r\n\r\nMore information about me:\r\n\r\n- Github: https://github.com/adewes\r\n- Twitter: https://twitter.com/japh44\r\n- Website: http://www.andreas-dewes.de/en", ""], "have_tickets": [true], "title": "Code is not text! How graph technologies can help us to understand our code better.", "speakers": "Andreas Dewes", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 11:00:00, 2015-07-21 11:45:00", "duration": 45, "tags": ["python", "visualization", "bigdata", "Programming", "code", "graphdatabases", "futureofcoding", "Best Practice"]}, "343": {"id": 343, "abstracts": ["This is a talk for mediocre Python programmers by a mediocre programmer. PyPy\r\nis an alternative implementation of Python. It is notorious for being fast, but\r\nalso for using clever algorithms pertaining to advanced concepts such as type\r\ninference, garbage collection, just-in-time compilation, etc. So, can we,\r\nmediocre programmers, realistically use PyPy?\r\n\r\nYes, absolutely. In fact, PyPy developers did all that hard work so that we\r\nwouldn't have to. As we'll see, it runs most Python code exactly like CPython\r\ndoes, save that it magically makes it faster.\r\n\r\nPorting existing applications is always more involved than running a simple\r\nscript, so we'll also examine likely difficulties such as code relying on\r\nCPython implementation details, and dependencies on C extensions, and explore\r\nsimple principles to let PyPy run your code even faster.\r\n\r\nFinally, we'll have a glimpse of the future by looking at what's brewing in \r\nthe PyPy lair, such as software transactional memory, new speed optimisations,\r\nbetter support for Python 3 and NumPy, ...\r\n\r\n\r\n"], "have_tickets": [true], "title": "PyPy for mediocre programmers", "speakers": "Ronan Lamy", "track_title": "Barria1 Room", "timerange": "2015-07-24 11:00:00, 2015-07-24 11:45:00", "duration": 45, "tags": ["PyPy"]}, "156": {"id": 156, "abstracts": ["This talk introduces the asyncio module. I'll cover what it's for, how it works and describe how I used it to write a real-world networked application (a distributed hash table). We'll explore the event loop, coroutines, futures and networking with examples from my code. This won't be an exhaustive exposition. Rather, attendees will grasp enough of asyncio to continue with their own studies.\r\n\r\nBy the end of this introductory talk I hope attendees will want to learn more about asyncio and perhaps give it a try in their own projects."], "have_tickets": [false], "title": "Lessons learned with asyncio (\"Look ma, I wrote a distributed hash table!\")", "speakers": "Nicholas Tollervey", "track_title": "A2 Room", "timerange": "2015-07-22 15:15:00, 2015-07-22 15:45:00", "duration": 30, "tags": ["asyncio", "introduction"]}, "317": {"id": 317, "abstracts": ["Talk about mistakes we made and best practises we have elaborated while implementation Behave Driven Development into one of the projects. Great idea to coverage whole application with functional tests fall down in development chaos and reborn on new better foundations.\r\n\r\nProject referred is web-based big data management which main features are transcoding and file sharing. Thanks to Django and many Python frameworks we have web interface for it and we are able to run automation tests with Selenium.", "", ""], "have_tickets": [true], "title": "BDD: You\u2019re doing it wrong!", "speakers": "Rafa\u0142 Nowicki", "track_title": "Barria1 Room", "timerange": "2015-07-23 12:30:00, 2015-07-23 13:00:00", "duration": 30, "tags": ["test", "selenium", "django", "bdd"]}, "244": {"id": 244, "abstracts": ["You've been making packages for a while now. Everything works almost fine, however, lots of new features and tools have been developed recently. Some are really obscure. And there's a chance they can save you time and help you avoid _packaging-induced-pain_. I'm willing to bet couple of beers you haven't seen these features and/or tools before.\r\n\r\nThis talk is going to show you:\r\n\r\n- Patterns and tricks you can use in your `setup.py`.\r\n- Obscure pip/setuptools/virtualenv/python features you can use to improve your packaging experience (be it as a user of packages or a package author).\r\n- Fledgeling alternative tools.", "", ""], "have_tickets": [true], "title": "Less known packaging features and tricks", "speakers": "Ionel Cristian M\u0103rie\u0219", "track_title": "PythonAnywhere Room", "timerange": "2015-07-20 12:30:00, 2015-07-20 13:15:00", "duration": 45, "tags": ["virtualenv", "setuptools", "python", "packaging", "pip"]}, "29": {"id": 29, "abstracts": ["Data Structures is traditionally a \u201cbogeyman\u201d discipline in Computer Science courses and has a high degree of failure. In FATEC S\u00e3o Jos\u00e9 dos Campos we are adopting a hybrid approach, with C and Python languages. The failure rate decreased from 85% (2008) to 12% (2014). The talk will be extensively illustrated with code in C and Python, addressing the various concepts taught in this course: recursion, linked lists, queues, stacks, sorting algorithms.", "", ""], "have_tickets": [true], "title": "Data Structures with Python", "speakers": "Fernando Masanori Ashikaga", "track_title": "Barria2 Room (Education Summit)", "timerange": "2015-07-23 15:45:00, 2015-07-23 16:15:00", "duration": 30, "tags": ["education"]}, "333": {"id": 333, "abstracts": ["During this talk we will discuss how to manage your full stack development life cycle using python technologies plus Docker. \r\n\r\nWe will cover from, the project creation (using Pyramid web framework), to maintaining a consistent deployment infrastructure using buildout and docker containers. ", "Durante esta presentaci\u00f3n discutiremos como administrar el ciclo de vida de tu desarrollo usando tecnolog\u00edas Python m\u00e1s Docker.\r\n\r\nVamos a cubrir desde la creaci\u00f3n de tu proyecto (usando el framework Pyramid), hasta la mantenci\u00f3n de infraestructuras consistentes de instalaci\u00f3n usando buildout y contenedores docker. ", ""], "have_tickets": [true], "title": "Easy FullStack Deployments", "speakers": "Alvaro Aguirre", "track_title": "A2 Room", "timerange": "2015-07-23 15:15:00, 2015-07-23 15:45:00", "duration": 30, "tags": ["Buildout", "DevOps", "docker", "ansible", "fabric", "Pyramid"]}, "16": {"id": 16, "abstracts": ["Big Data - these two words are heard so often nowadays. But what exactly is Big Data ? Can we, Pythonistas, enter the wonder world of Big Data ? The answer is definitely \"Yes\".\r\n\r\nThis talk is an introduction to the big data processing using Apache Hadoop and Python. We'll talk about Apache Hadoop, it's concepts, infrastructure and how one can use Python with it. We'll compare the speed of Python jobs under different Python implementations, including CPython, PyPy and Jython and also discuss what Python libraries are available out there to work with Apache Hadoop.\r\n\r\nThis talk is intended for beginners who want to know about Hadoop and Python or those who are already working with Hadoop but are wondering how to use it with Python or how to speed up their Python jobs."], "have_tickets": [true], "title": "Big Data with Python & Hadoop", "speakers": "Max Tepkeev", "track_title": "Google Room", "timerange": "2015-07-24 11:45:00, 2015-07-24 12:30:00", "duration": 45, "tags": ["bigdata", "jython", "hadoop", "cpython", "etl", "PyPy"]}, "94": {"id": 94, "abstracts": ["Python is a powerful language that provides many tools for creating highly dynamic programs. It offers tools all across the complexity spectrum that library authors can use to make their libraries seem convenient to use for users.\r\n\r\nWhile it's true that there are a wealth of techniques with huge positive benefits, there are a number of common antipatterns which can deceptively cause a net-loss in flexibility, readability, and predictability for users.\r\n\r\nWe'll explore a few specific commonalities in this area of library and object API design, and talk about the ramifications they have on each of these programmer concerns."], "have_tickets": [true], "title": "Just Because You Can, Doesn't Mean You Should", "speakers": "Julian Berman", "track_title": "PythonAnywhere Room", "timerange": "2015-07-24 12:30:00, 2015-07-24 13:15:00", "duration": 45, "tags": ["case study", "Best Practice"]}, "306": {"id": 306, "abstracts": ["At Spotify, my team struggled to be awesome. We had a very loose understanding of what product/service our squad was responsible for, and even less so of the expectations our internal and external customers had for those services. Other than \u201cdoes our Facebook login work?\u201d, we had no understanding of how our services we\u2019re responsible for were doing. How many users actually sign up or log in with Facebook? How many users have connected their Spotify account with their Uber account? Do folks even use Spotify with Uber? \r\n\r\nWith a 2-month challenge period, my squad and I focused inward to establish those unanswered questions and to establish feedback loops and always-on dashboards. This talk will tell the story of how we chose which metrics are important for us to focus on, what technologies we have used and are using, and how we\u2019ve iterated over our feedback loops to fine-tune what metrics we care about. "], "have_tickets": [true], "title": "Metrics-driven development", "speakers": "Lynn Root", "track_title": "Google Room", "timerange": "2015-07-20 15:15:00, 2015-07-20 15:45:00", "duration": 30, "tags": ["servers", "metrics", "technologies", "real-time", "logging"]}, "164": {"id": 164, "abstracts": ["Rust is a new programming language from Mozilla. It is fast, safe and beautiful. It is also a very good option when needing performance. In this talk we're going to look at Rust and see what it offers and how we can leverage it as Python developers. And we'll do it with a case study: a statistical profiler for Python."], "have_tickets": [true], "title": "Can Rust make Python shine?", "speakers": "Dmitry Trofimov", "track_title": "Barria1 Room", "timerange": "2015-07-20 14:30:00, 2015-07-20 15:15:00", "duration": 45, "tags": ["performance", "profiling", "rust"]}, "140": {"id": 140, "abstracts": ["In this talk we would like to have a short introduction on how Python\r\nprograms are compiled and executed, with a special attention towards\r\njust in time compilation done by PyPy. PyPy is the most advanced Python\r\ninterpreter around and while it should generally just speed up your programs\r\nthere is a wide range of performance that you can get out of PyPy, ranging from\r\nslightly faster than CPython to C speeds, depending on how you write your\r\nprograms.\r\n\r\nWe will split the talk in two parts. In the first part we will explain\r\nhow things work and what can and what cannot be optimized as well as describe\r\nthe basic heuristics of JIT compiler and optimizer. In the next part we will\r\ndo a survey of existing tools for looking at performance of Python programs\r\nwith specific focus on PyPy.\r\n\r\nAs a result of this talk, an audience member should be better equipped with\r\ntools how to write new software and improve existing software with performance\r\nin mind.\r\n\r\nThe talk will be given by Antonio Cuni and Maciej Fijalkowski,\r\nboth long time PyPy core developers and expert in the area of\r\nPython performance.", "", ""], "have_tickets": [true], "title": "Python and PyPy performance (not) for dummies", "speakers": "Antonio Cuni", "track_title": "PythonAnywhere Room", "timerange": "2015-07-21 15:15:00, 2015-07-21 16:15:00", "duration": 60, "tags": ["profiling", "performance", "PyPy", "JIT"]}}, "Trainings": {"262": {"id": 262, "abstracts": ["The value that search functionality can add to a website is often underestimated, and many people fear that it is too complex or complicated. At the same time, it\u2019s not clear to many developers what a good search implementation should do.\r\n\r\nIn short, many developers - and the users of their websites - are missing out on important benefits.\r\n\r\nThis workshop will help them over the first hurdles to a solid search implementation using Django and Elasticsearch. It will cover basic steps like syncing the models to a search engine and setting up search views, as well as more advanced functionality such as faceted navigation.\r\n\r\nHonza will explain how search works and guide people through the process of customising their search and setting up analytics based on the data in their apps.", "", ""], "have_tickets": [true], "title": "Don't be afraid to search", "speakers": "Honza Kr\u00e1l", "track_title": "", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["search", "django", "elasticsearch", "databases"]}, "323": {"id": 323, "abstracts": ["If you want to get data from the web, and there are no APIs available, then you need to use web scraping! Scrapy is the most effective and popular choice for web scraping and is used in many areas such as data science, journalism, business intelligence, web development, etc.\r\n\r\nThis workshop will provide an overview of Scrapy, starting from the fundamentals and working through each new topic with hands-on examples.\r\n\r\nParticipants will come away with a good understanding of Scrapy, the principles behind its design, and how to apply the best practices encouraged by Scrapy to any scraping task.\r\n\r\nGoals:\r\n\r\n - Set up a python environment.\r\n - Learn basic concepts of the Scrapy framework.\r\n\r\n", "", ""], "have_tickets": [true], "title": "Scrapy Workshop", "speakers": "Juan Riaza", "track_title": "", "timerange": "2015-07-24 14:30:00, 2015-07-24 17:30:00", "duration": 180, "tags": ["scrapy", "python", "open-source", "scraping"]}, "207": {"id": 207, "abstracts": ["Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.\r\n\r\n*Audience*: Programmers with good basic Python knowledge. No previous\r\nknowledge in the field of optimization is required.\r\n\r\n*Objectives*: This tutorial will help you to get the most out of your optimization work.\r\nYou will learn useful techniques for details combined with an overall strategy\r\nfor the big picture.\r\n\r\n*Detailed Abstract*: Python is a great language. But it can be slow compared to other languages for certain types of tasks. If applied appropriately, optimization may reduce program runtime or memory consumption considerably. But this often comes at a price. Optimization can be time consuming and the optimized program may be more complicated. This, in turn, means more maintenance effort. How do you find out if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how to find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n\r\n*More Info*: You will need Python 2.7 or 3.4 installed on your laptop. Python 2.6 or 3.3 should also work. Very detailed installation instructions will be given to all participants well before the course.", "Optimization can often help to make Python programs faster or use less memory.\r\nDeveloping a strategy, establishing solid measuring and visualization techniques\r\nas well as knowing about algorithmic basics and datastructures are the foundation\r\nfor a successful optimization. The tutorial will cover these topics.\r\nExamples will give you a hands-on experience on how to approach efficiently.\r\n\r\n### Audience\r\n\r\nProgrammers with good basic Python knowledge. No previous\r\nknowledge in the field of optimization is required.\r\n\r\n### Objectives\r\n\r\nThis tutorial will help you to get the most out of your optimization work.\r\nYou will learn useful techniques for details combined with an overall strategy\r\nfor the big picture.\r\n\r\n### Detailed Abstract\r\n\r\nPython is a great language. But it can be slow compared to other languages\r\nfor certain types of tasks. If applied appropriately, optimization may reduce\r\nprogram runtime or memory consumption considerably. But this often comes at a\r\nprice. Optimization can be time consuming and the optimized program may be more\r\ncomplicated. This, in turn, means more maintenance effort. How do you find\r\nout if it is worthwhile to optimize your program? Where should you start?\r\nThis tutorial will help you to answer these questions. You will learn how\r\nto find an optimization strategy based on quantitative and objective criteria.\r\nYou will experience that one's gut feeling what to optimize is often wrong.\r\n\r\nThe solution to this problem is: \u201eMeasure, Measure, and Measure!\u201c. You will\r\nlearn how to measure program run times as well as profile CPU and memory.\r\nThere are great tools available. You will learn how to use some of them.\r\nMeasuring is not easy because, by definition, as soon as you start to measure,\r\nyou influence your system. Keeping this impact as small as possible is\r\nimportant. Therefore, we will cover different measuring techniques.\r\n\r\nFurthermore, we will look at algorithmic improvements. You will see that the\r\nright data structure for the job can make a big difference. Finally, you will\r\nlearn about different caching techniques.\r\n\r\n\r\n### Outline\r\n\r\n* How Fast is Fast Enough? (5 min)\r\n* Optimization Guidelines and Strategy (10 min)\r\n* Measuring run time\r\n * ``time``, ``timeit``, decorators for timing (5 min)\r\n * Wall Clock vs. CPU Time (2 min)\r\n* Profiling CPU Usage\r\n * cProfile (10 min)\r\n * A Picture is Worth a Thousand Words\r\n * RunSnakeRun (5 min)\r\n * SnakeViz (5 min)\r\n * Cachegrind (5 min)\r\n * Going Line-by-Line (5 min)\r\n * Exercise (10 min)\r\n* Profiling Memory Usage\r\n * Heapy (5 min)\r\n * Pympler (5 min)\r\n * Memory Usage Line-by-Line with memory_profiler (5 min)\r\n * Exercise (10 min)\r\n* Algorithms and Anti-patterns\r\n * String Concatenation (3 min)\r\n * List and Generator Comprehensions (5 min)\r\n * Think Global buy Local (5 min)\r\n * Exercise (5 min)\r\n* The Right Data Structure\r\n * Use built-in Data Types (2 min)\r\n * ``list`` vs. ``set`` (3 min)\r\n * ``list`` vs. ``deque`` (5 min)\r\n * ``dict`` vs. ``defaultdict`` (5 min)\r\n * Big-O notation and Data Structures (5 min)\r\n * O(1) vs. O(n) vs. O(n) (5 min)\r\n * Exercise (15 min)\r\n* Caching\r\n * Reuse before You Recalculate (5 min)\r\n * Deterministic caching (5 min)\r\n * Non-deterministic caching (5 min)\r\n * Least Recently Used Cache (5 min)\r\n * Memcached (5 min)\r\n * Exercise (10 min)\r\n\r\n### More Info\r\n\r\nYou will need Python 2.7 or 3.4 installed on your laptop. Python 2.6 or 3.3\r\nshould also work. Very detailed installation instructions will be given to all participants well before the course.\r\n", ""], "have_tickets": [true], "title": "Faster Python Programs - Measure, don't Guess", "speakers": "Mike M\u00fcller", "track_title": "", "timerange": "2015-07-24 14:30:00, 2015-07-24 17:30:00", "duration": 180, "tags": ["optimization", "profiling"]}, "28": {"id": 28, "abstracts": ["Tutorial interactivo, en *espa\u00f1ol*, y muy divertido para la gente, con los conceptos b\u00e1sicos de programaci\u00f3n en alguna otra lenguaje, y que no saben nada de Python. Vamos a hackear fotos de amigos de Facebook y tambi\u00e9n hackear m\u00f3dulos b\u00e1sicos y clases para obtener la \"respuesta a la \u00faltima pregunta de la vida, el universo, y todo\". Este tutorial asume que usted tiene algunos pocos conceptos b\u00e1sicos (entrada de dados, salida de dados, operadores booleanos, control de flujo, funciones, repeticiones). Vamos a cubrir, en Python 3.x: 1. El modo interactivo de Python 2. Variaciones en el juego de adivinar un n\u00famero aleat\u00f3rio 3. Hackear m\u00f3dulos b\u00e1sicos y clases para obtener la \"respuesta a la \u00faltima pregunta de la vida, el universo, y todo\". 4. Hacking de las fotos de los amigos de Facebook sin OAuth 5. Chuck Norris Nerd chistes y partidos de la Copa Mundial en seis l\u00edneas de c\u00f3digo. 6. Prueba selectiva del Hackaton Facebook en una l\u00ednea de c\u00f3digo. Nota importante: No soy un gur\u00fa de Python, s\u00f3lo un maestro apasionado!"], "have_tickets": [true], "title": "Python para Iniciantes (ESPA\u00d1OL)", "speakers": "Fernando Masanori Ashikaga", "track_title": "", "timerange": "2015-07-21 11:00:00, 2015-07-21 13:30:00", "duration": 150, "tags": ["iniciante", "programaci\u00f3n", "divertido"]}, "110": {"id": 110, "abstracts": ["Many programming paradigms are reaching us nowadays bringing the promise of being faster by leveraging more cores and more machines (and more system administration headaches, but this is rarely stated). Reality is that many times these paradigms do not take in account the increasing mismatch between memory speed and CPUs (see http://www.blosc.org/docs/StarvingCPUs-CISE-2010.pdf), and this is becoming utterly critical so as to get maximum performance out of your data handling applications.\r\n\r\nDuring my tutorial, I will introduce different data containers for handling different kind of data and will propose experimenting with them while explaining why some adapts better to the task at hand. I will start with a quick introduction for Python data containers (lists, dicts, arrays...), continuing with well-known in-memory NumPy and Pandas containers as well as on-disk HDF5/PyTables and ending with bcolz (https://github.com/Blosc/bcolz), a novel way to store and quickly retrieve data which uses chunking and compression techniques so as to leverage the memory hierarchy of modern computer architectures.\r\n\r\nPeople attending will need a working Python setup with IPython notebook, NumPy, pandas, PyTables and bcolz installed. Anaconda or Enthought Canopy distributions are recommended, but any other means of installing (e.g. pip) will do.", "", ""], "have_tickets": [true], "title": "Efficient Memory/Disk Data Containers With Python", "speakers": "Francesc Alted", "track_title": "", "timerange": "2015-07-22 11:00:00, 2015-07-22 13:30:00", "duration": 150, "tags": ["python", "data-science", "bigdata", "ipython", "open-source", "databases", "data"]}, "299": {"id": 299, "abstracts": ["This tutorial will offer a hands-on introduction to machine learning and the process of applying these concepts in a Kaggle competition. We will introduce attendees to machine learning concepts, examples and flows, while building up their skills to solve an actual problem. At the end of the tutorial attendees will be familiar with a real data science flow: feature preparation, modeling, optimization and validation. \r\n\r\nPackages used in the tutorial will include: IPython notebook, scikit-learn, pandas and nltk. We'll use IPython notebook for interactive exploration and visualization, in order to gain a basic understanding of what's in the data. From there, we'll extract features and train a model using scikit-learn. This will bring us to our first submission. We'll then learn how to structure the problem for offline evaluation and use scikit-learn's clean model API to train many models simultaneously and perform feature selection and hyperparameter optimization.\r\n\r\nAt the end of session, attendees will have time to work on their own to improve their models and make multiple submissions to get to the top of the leaderboard, just like in a real competition. Hopefully attendees will not only leave the tutorial having learned the core data science concepts and flow, but also having had a great time doing it.\r\n"], "have_tickets": [true], "title": "Beginner's Guide to Machine Learning Competitions", "speakers": "Christine Doig", "track_title": "", "timerange": "2015-07-20 14:30:00, 2015-07-20 17:30:00", "duration": 180, "tags": ["python", "competitions", "data-science", "machine-learning", "nltk", "predictions", "ipython-notebook", "ipython", "pandas", "natural-language-processing", "open-source", "sklearn"]}, "320": {"id": 320, "abstracts": ["[asyncio][1] is relative new library for asynchronous network programming.\r\n\r\n\r\n\r\nOn training session newcomers will learn how to:\r\n\r\n* develop asyncio-based WEB applications with help of aiohttp library and siblings\r\n* write tests for asynchronous code\r\n* make tiny but revealing asyncio library which shows all design concepts required for making good product for asyncio code\r\n\r\nA lot of tips and tricks will be explained. Development for asyncio is really easy (much easier than [Tornado][2] and [Twisted][3] coding) but requires to change you mind a bit.\r\n\r\n [1]: http://docs.python.org/3/library/asyncio.html\r\n [2]: http://www.tornadoweb.org/\r\n [3]: http://twistedmatrix.com"], "have_tickets": [true], "title": "Mastering asyncio applications", "speakers": "Andrew Svetlov", "track_title": "", "timerange": "2015-07-21 14:30:00, 2015-07-21 17:30:00", "duration": 180, "tags": ["HTTP", "aiohttp", "aiopg", "aioredis", "asyncio", "network"]}, "9": {"id": 9, "abstracts": ["Do you like playing lego? Do you want to know how Scrum works? Why not to combine having fun & learning? \r\n\r\nDuring my workshops you will get familiar with Scrum ceremonies by building a Lego city. In your team you will have a Scrum Master who should help you with a demanding Product Owner who will be me. \r\n\r\nCan you manage my requirements? Can you finish the sprint? Can you build the city I'm dreaming about? Try yourself and get Scrum experience!", "", ""], "have_tickets": [true], "title": "Lego for Scrum", "speakers": "Anna Kierczy\u0144ska", "track_title": "", "timerange": "2015-07-22 14:30:00, 2015-07-22 17:30:00", "duration": 180, "tags": ["lego", "management", "agile", "fun", "scrum"]}, "291": {"id": 291, "abstracts": ["**Description:** Over the course of the 2.5 hours of this workshop you will learn how to leverage both Python and MongoDB to build highly scalable, asynchronous applications based on microservices architecture. We will be building from scratch several different \"exotic\" services, using a variety of datasets, that together we can mashup into a consolidated application using our own laptops. \r\n\r\nWe will start by introducing several technologies that we will be using (e.g. Python, Flask, MongoDB, AngularJS) and take a ten-thousand foot overview of micro services architecture.\r\nIn the second half of the workshop, we will break into teams that will each take charge in implementing a microservice that will comprise our final application. \r\n\r\nThis a fully hands-on workshop.\r\n\r\n**Learning objectives:** \r\n\r\n - Benefits of microservice architectures\r\n\r\n - MongoDB schema design \r\n\r\n - MongoDB query optimization and profiling \r\n\r\n - Basic understanding of AngularJS \r\n\r\n - Flask as REST API platform\r\n\r\n**Target Audience:**\r\nThis workshop is recommended to software developers eager to understand more about MongoDB and how to build async calls. Coding skills and basic understanding of Python is required. Prior experience with AngularJS and Flask is welcomed.\r\n\r\n**Technical Requirement:**\r\nThe attendee should bring their own laptop with MongoDB and Python (>2.7) installed. One should have administration grants over their system because we will need to expose ports and other communications to the network. The datasets and project instructions will be provided on site.\r\n\r\n"], "have_tickets": [true], "title": "Building Async Microservices", "speakers": "Norberto Leite", "track_title": "", "timerange": "2015-07-22 11:00:00, 2015-07-22 13:30:00", "duration": 150, "tags": ["AngularJS", "mongodb", "flask", "api", "Microservices"]}, "292": {"id": 292, "abstracts": ["The aim is to cover the basics of setting up a simple Django site, but using full, rigorous TDD at every step along the way.\r\n\r\nThe tutorial is based on the first few chapters of my book, which is available (for free!) online for you to follow up with after the session, so that you can embed what you've learned. [www.obeythetestinggoat.com](http://www.obeythetestinggoat.com)\r\n\r\nWe'll learn:\r\n\r\n - how to set up functional tests with Selenium\r\n - how to set up Django\r\n - how to run Django unit tests\r\n - how TDD actually works in practice: the unit test / code cycle where we re-run the tests after each tiny, incremental change to the code\r\n - all the basics of Django like views, models and templates.\r\n\r\nWe'll talk about what to test, what not to test, what the point of all this testing is anyway, you'll get a real hands-on feeling for how it works, and I promise to make it all at least moderately entertaining!\r\n\r\nAnd it's all in Python 3 :)\r\n\r\n**Please come prepared!** you'll need:\r\n\r\n- Python 3.4\r\n- Firefox\r\n- Django 1.8\r\n- Selenium\r\n\r\nYou'll find full instructions [here](http://chimera.labs.oreilly.com/books/1234000000754/pr02.html) -- do email me if you have any problems, I'm happy to help. obeythetestinggoat@gmail.com", "", ""], "have_tickets": [true], "title": "TDD for web development, from scratch", "speakers": "Harry Percival", "track_title": "", "timerange": "2015-07-24 11:00:00, 2015-07-24 13:30:00", "duration": 150, "tags": ["tdd", "unit-testing", "selenium", "django", "python3", "Testing"]}, "326": {"id": 326, "abstracts": ["Do you know what happens every time you use the **@** symbol in Python? Do you know how to implement a decorator to be customisable at _decoration time_ or to internally store a state? \r\n\r\nAfter attending this training you will be able to answer _yes_ to all the previous questions!\r\n\r\nThe content of the session can be split in 3 main blocks:\r\n\r\n - 1/ Some Python basic concepts\r\n - Scopes\r\n - Namespaces\r\n - Closures\r\n - 2/ Implement and understand a basic decorator\r\n - 3/ Advanced decorators\r\n - Generators of decorators\r\n - Classes as decorators\r\n - Decoration of classes\r\n\r\nRequirements:\r\n\r\n - **Intermediate Python level**. Attendees must have previous knowledge of Python and should be somehow familiar with the notation @ to decorate a function or class.\r\n - Bring **your own laptop** with Python installed and ready to solve some coding exercises.\r\n\r\nPS: I also submitted a talk proposal which partially covers the first part of the training: [https://ep2015.europython.eu/conference/talks/decorators-demystified][1]\r\n\r\n [1]: https://ep2015.europython.eu/conference/talks/decorators-demystified\r\n", "", ""], "have_tickets": [true], "title": "Python decorators in detail", "speakers": "Pablo Enfedaque", "track_title": "", "timerange": "2015-07-24 11:00:00, 2015-07-24 13:30:00", "duration": 150, "tags": ["namespaces", "training", "python", "scopes", "decorators", "closures"]}, "373": {"id": 373, "abstracts": ["New to Python? Come along to the beginners' day! It\u2019s designed to give you a crash-course in Python, and the ecosystem around it, to give you the context you need to get the most out of EuroPython. Suitable for total beginners, as well as people who already know a little programming. Bring your laptop, as a large part of the day will be devoted to learning Python on your own PC.\r\n\r\n*This session will be presented in English (although a few of the coaches do speak basic Spanish, French and Italian). Note there are also some Spanish-language Beginner sessions scheduled for day 2 of the conference.*\r\n\r\n**Morning:**\r\n\r\n - 11AM-11:30AM Intro to Python and programming.\r\n - 11:30AM-1PM Self-directed learning with coaches. Tutorials provided for beginner and experienced programmers.\r\n - 1PM-1:30PM Q&A and recap\r\n\r\n**Afternoon:**\r\n\r\n - 3:15PM: Intro to the Python ecosystem: some topics and bits of jargon that are bound to come up this week: open source, free software, github, packages, pip, pypi, scientific computing, scipy, numpy, pandas, ipython notebook, web frameworks, django, flask, asyncio, the BDFL, the Zen of Python, etc etc. What are the tools, areas of interest, in-jokes, people of note.\r\n - 4:30PM: More self-directed learning with coaches.\r\n - 5PM: \"How to get the best out of the conference\" session -- suggested talks, tips on asking questions, FAQs like what are open spaces / sprints / birds-of-a-feather sessions, etc.\r\n\r\nWe need to get an idea of numbers for this session, so if you are interested in attending, please drop a quick email to obeythetestinggoat@gmail.com\r\n\r\n"], "have_tickets": [true], "title": "Beginners' Day", "speakers": "Harry Percival", "track_title": "Room B Terrace", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 180, "tags": ["python", "introduction"]}, "243": {"id": 243, "abstracts": ["Learn how to use docker-compose and docker to create a development environment that you can use to mimic your production environment. \r\n\r\nLearn how to:\r\n\r\n* create a Dockerfile\r\n * What is a Docker File\r\n * How to utilize Docker's caching to optimize docker build\r\n * How to abstract common components to other docker images\r\n* use Docker-Hub\r\n * create auto builds\r\n * use web-hooks\r\n* use docker-compose\r\n * When to use a prebuilt image vs building from scratch\r\n* deploy your container to a VM\r\n\r\nClass will be mostly informational. BUT you are encouraged to play along. \r\n\r\nHardware requirements: \r\n\r\n* Computer that can run VirtualBox. \r\n\r\nSoftware requirements:\r\n\r\n* Docker CLI 1.6+\r\n* Docker Machine (latest)\r\n* Docker Compose 1.2+\r\n\r\nIf you plan on playing along, please make sure that you have all these installed already. "], "have_tickets": [true], "title": "Intro to Web Development with Docker", "speakers": "Nick Lang", "track_title": "", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 150, "tags": ["web", "development-process", "docker", "Development"]}, "376": {"id": 376, "abstracts": ["Workshop time: 2:00pm - 7:00pm\r\n\r\nThis is a half-day version of the SRE Classroom event that has been run successfully at Google offices and conferences around the world. We expect this event to appeal to senior and experienced engineers.\r\n\r\nThe workshop problem will be a real-world large-scale engineering problem that requires some distributed-systems knowhow to tackle. Attendees will work in groups with Googlers on the problem, trying to come up with:\r\n\r\n - A high-level design that scales horizontally\r\n - Initial SLIs, SLOs\r\n - Estimates for hardware required to run each component\r\n - If time permits, monitoring design and disaster testing scenarios\r\n\r\nAttendees will be provided with a workbook that guides them through tackling a problem like this, with some worked examples, so junior attendees should be able to make progress and learn too. \r\n\r\nSign-up here (seats are limited.)", "", ""], "have_tickets": [true], "title": "SRE Classroom", "speakers": "Sidnei da Silva", "track_title": "Room B Terrace", "timerange": "2015-07-21 14:00:00, 2015-07-21 17:00:00", "duration": 180, "tags": ["cloud", "google", "class"]}, "105": {"id": 105, "abstracts": ["Become a data wrangler with Python! This course will introduce you to the core concepts of data analysis with Python. We'll cover libraries that allow you to easily clean and set up your initial dataset, importing data from all different file types and standards. We'll introduce some basic libraries to help with statistics and analysis and then cover how to document and explore your findings. \r\n\r\nIt's assumed you have a working understanding of Python and it's data types and structures, and that you've used and understand Python for basic scripting. It's also assumed you haven't done much in terms of data analysis, and you'd like to learn more. If this is you, welcome! ", "", ""], "have_tickets": [true], "title": "Introduction to Data Analysis", "speakers": "Katharine Jarmul", "track_title": "", "timerange": "2015-07-23 11:00:00, 2015-07-23 13:30:00", "duration": 150, "tags": ["Beginners", "scraping", "data-science", "analytics", "Database", "e-gov", "pandas", "api", "oauth2", "data", "Coding"]}, "130": {"id": 130, "abstracts": ["Transducers \u2013 a portmanteau of \u2018transform reducers\u2019 \u2013 are a new functional programming concept, which were first introduced into the Clojure programming language. Although transducers are actually pretty straightforward in retrospect, wrapping your brain around them can be challenging. \r\n\r\nTransducers allow us to fuse multiple data processing operations together so they can be applied in a single pass over a data series \u2013 similar to how Python generator functions allow us to process iterable series. However, unlike generator functions they are completely decoupled from the data series abstraction and can be used on eager sequences, lazy iterables, coroutine-based push events and events such as those modelled by Reactive Extensions for Python (RxPy). \r\n\r\nIn this workshop, we introduce transducers by implementing them from scratch in Python 3. We\u2019ll start with the familiar staples of functional programming, map(), filter() and reduce(), and derive transducers from first principles. We\u2019ll work towards a set of general tools which works with eager collections, lazy \u2018pull\u2019 sequences, and coroutine \u2018push\u2019 event streams and RxPy. Along the way we\u2019ll cover stateful transducers and transducer composition, demonstrating that transducers are both more general, and more fundamental, than the functional programming tools baked into Python and many other languages.\r\n\r\nThere are no prerequisites for this workshop as we stick to core Python 3 language features although an enthusiasm for a functional programming style will be sure to help attendees get the most out of this session.", "", ""], "have_tickets": [true], "title": "Functional Programming with Transducers in Python", "speakers": "Austin Bingham", "track_title": "Room A4", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["python", "functional", "fun", "Functional Programming"]}, "331": {"id": 331, "abstracts": ["It is very hard to be a scientist without knowing how to write code, \r\nand nowadays **Python** is probably the programming language of \r\nchoice in many research fields.\r\nThis is mainly because the Python ecosystem includes a lot of tools and libraries \r\nfor many research tasks: `pandas` for *data analysis* , \r\n`networkx` for *social network analysis*, `nltk` for *natural language processing*,\r\n`scikit-learn` for *machine learning*, and so on.\r\n\r\nMost of these libraries relies (or are built on top of) `numpy`.\r\nTherefore, `numpy` is a crucial component of the common Python\r\nstack used for numerical analysis and data science.\r\n\r\nOn the one hand, NumPy code tends to be much cleaner (and faster) than \r\n\"straight\" Python code that tries to accomplish the same task. \r\nMoreover, the underlying algorithms have \r\nbeen designed with high performance in mind.\r\n\r\nThis training will be organised in two parts: the first part is \r\nintended to provide most of the essential concepts \r\nneeded to become confident with NumPy data structures and functions.\r\n\r\nIn the second part, some examples of data analysis libraries and code\r\nwill be presented, where NumPy takes a central role.\r\n\r\nHere is a list of software used to develop and test the code examples presented\r\nduring the training:\r\n\r\n* Python 3.x (2.x would work as well)\r\n* iPython 2.3+ (with **notebook support**): `pip install ipython[notebook]`\r\n* numpy 1.9+\r\n* scipy 0.14+\r\n* scikit-learn 0.15+\r\n* pandas 0.8+\r\n\r\nThe training is meant to be mostly introductory, thus it is perfectly suited\r\nfor **beginners**. However, a good proficiency in Python programming is (at least)\r\nrequired."], "have_tickets": [true], "title": "Numpy arrays: the weapons of a data scientist", "speakers": "Valerio Maggio", "track_title": "", "timerange": "2015-07-21 11:00:00, 2015-07-21 13:30:00", "duration": 150, "tags": ["scipy", "numpy", "data-science", "analytics"]}, "175": {"id": 175, "abstracts": ["The py.test tool presents a rapid and simple way to write tests for your Python code. This training gives a quick introduction with exercises into some distinguishing features. We'll do exercises where we get existing non-pytest test suites to run with pytest and discuss migration strategies. We'll finish with discussing topics and questions of participants related to their own test suites and usages.\r\n\r\nThis is the planned outline:\r\n\r\n- (30 minutes) pytest feature walkthrough: automatic test discovery, assert\r\n statement, modular parametrizable fixtures, 150 plugins\r\n\r\n- (60 minutes) pytest fixture mechanism: dependency injection, declaring\r\n and using function/module/session scoped fixtures, using fixtures\r\n from fixture functions, parametrizing fixtures. Exercises.\r\n\r\n- (30 minutes): running nose/unittest/trial/Django suites with pytest.\r\n Discussing advantages and limitations. Exercise with a select\r\n existing real-life open source project.\r\n\r\n- (30 minutes): Strategies for a) migrating to pytest b) using\r\n \"autouse\" fixtures in conjunction with XUnit-based\r\n setup/tearodwn methods. Exercise.\r\n\r\n- (30 minutes): open space for questions and interactively solving\r\n pytest/unittest integration problems on real-life problems\r\n as time permits.\r\n", "", ""], "have_tickets": [true], "title": "pytest - simple, rapid and fun testing with Python", "speakers": "Florian Bruhin", "track_title": "", "timerange": "2015-07-20 14:30:00, 2015-07-20 17:30:00", "duration": 180, "tags": ["automation", "test", "pytest"]}, "120": {"id": 120, "abstracts": ["[OpenStack][1] es un conjunto de herramientas de software que permiten la construcci\u00f3n y mantenimiento de plataformas de _cloud computing_ para nubes p\u00fablicas y privadas. Permite a sus usuarios desplegar m\u00e1quinas virtuales y otras instancias que manejan diferentes tareas para la administraci\u00f3n de un entorno de _cloud computing_ _on the fly_. Considerando la complejidad de la arquitectura del c\u00f3digo que hace de esto una realidad, establecer el entorno de desarrollo y comenzar a contribuir puede ser una tarea agobiante.\r\n\r\nPero empezar a ser un contribuyente no deber\u00eda ser un proceso dif\u00edcil si comienzas con el pie derecho. Hay algunos detalles que, si los pudieras conocer de antemano, har\u00edan que dar tus primeros pasos no sea una tarea tan complicada.\r\n\r\nEn esta presentaci\u00f3n daremos una explicaci\u00f3n breve de cu\u00e1les son las herramientas usadas por la comunidad de OpenStack y c\u00f3mo debes configurarlas para empezar a contribuir. Adem\u00e1s cubriremos c\u00f3mo el proceso de desarrollo funciona, incluyendo c\u00f3mo encontrar y arreglar un _bug_, c\u00f3mo hacer una nueva propuesta de desarrollo, c\u00f3mo probar tus cambios antes de enviar un parche y c\u00f3mo funciona el proceso de revisi\u00f3n.\r\n\r\nHaremos todo esto usando un _script_ que automatiza el despliege del entorno de desarrollo llamado [DevStack][2]. Mientras que el _script_ es ejecutado y descarga/configura todas las dependencias, explicaremos cada uno de los pasos para empezar a contribuir. Finalmente, con el entorno de desarrollo listo, repasaremos las listas de bugs y empezaremos a analizar el c\u00f3digo.\r\n\r\nPara el final del taller, tendr\u00e1s todos las herramientas y conocimientos necesarios para poder comenzar a contribuir a un proyecto de OpenStack.\r\n\r\nRequerimientos m\u00ednimos: Procesador de 1 gigahertz (GHz) o m\u00e1s 32-bit (x86) o 64-bit (x64), 4GB RAM, 10GB HD\r\nRequerimientos recomendados: Procesador de 1 gigahertz (GHz) o m\u00e1s 32-bit (x86) o 64-bit (x64), 8GB RAM, 20GB HD\r\n\r\nTambi\u00e9n aconsejamos que los participantes tengan una herramienta de virtualizaci\u00f3n preinstalada y, si es posible, que inicien una instancia con Ubuntu 14.04 LTS.\r\n\r\n [1]: https://www.openstack.org/\r\n [2]: http://docs.openstack.org/developer/devstack/", "", ""], "have_tickets": [true], "title": "Manos a la obra con OpenStack: La gu\u00eda paso a paso para comenzar a contribuir a OpenStack", "speakers": "Victoria Martinez de la Cruz", "track_title": "", "timerange": "2015-07-21 14:30:00, 2015-07-21 17:30:00", "duration": 180, "tags": ["python", "cloud", "open-source", "linux", "OpenStack"]}, "202": {"id": 202, "abstracts": ["A workshop introducing participants to physical computing with Python and Raspberry Pi.\r\n\r\nLearn how to build applications with Python that interact with the physical world - using the Pi's GPIO (general purpose input & output) pins and its camera module and their respective Python libraries.\r\n\r\nWe'll start simple - flashing LEDs, using push buttons, basic use of the camera module, then introduce sensors such as infra-red motion detectors, temperature sensors and light sensors, then we'll build interactive applications (embedded apps, desktop apps and web apps) using the sensors and camera module for a variety of different purposes.\r\n\r\nEmbedded or physical computing is not just for C programmers or hardcore Linux engineers - I'll show you how to get up and running with your first physical world application and show how easy it is to control GPIOs and the camera module from the language you know and love (and can read). This will prepare you for making your own hardware project idea a reality - build a security system, a robot or a home automation system.\r\n\r\nThis workshop is well suited to beginners with a basic understanding of Python code, but is also suitable for those more experienced with Python but with little or no experience with physical computing.", "", ""], "have_tickets": [true], "title": "Explore physical computing with Python and Raspberry Pi", "speakers": "Ben Nuttall", "track_title": "", "timerange": "2015-07-23 14:30:00, 2015-07-23 17:30:00", "duration": 180, "tags": ["education", "raspberrypi"]}, "171": {"id": 171, "abstracts": ["This tutorial explores some real-world solutions to make your Python code run on different processes, possibly on different computers. \r\n\r\nTools like Pyro, Celery, Python-RQ will be discussed. Ways to run your Python code on a supercomputer/cluster using a batch job scheduler and packages for local parallelism such as multiprocessing and concurrent.futures will be touched upon as well. \r\n\r\nThe emphasis is on practical examples and lessons learned. The assumption is that the attendee is familiar with Python and basic OOP concepts.", "", ""], "have_tickets": [true], "title": "Distributed Programming With Python", "speakers": "Francesco Pierfederici", "track_title": "", "timerange": "2015-07-23 11:00:00, 2015-07-23 13:30:00", "duration": 150, "tags": ["redis", "amqp", "distributed-systems", "performance", "concurrency", "computing", "cloud", "rabbitmq", "celery"]}, "153": {"id": 153, "abstracts": ["Highly-constrained, large-dimensional, and non-linear optimizations are found at the root of most of today\u2019s forefront problems in statistics, quantitative finance, risk, operations research, materials design, and other predictive sciences. Tools for optimization, however, have not changed much in the past 40 years -- until very recently. The abundance of parallel computing resources has stimulated a shift away from using reduced models to solve statistical and predictive problems, and toward more direct methods for solving high-dimensional nonlinear optimization problems.\r\n\r\nThis tutorial will introduce modern tools for solving optimization problems -- beginning with traditional methods, and extending to solving high-dimensional non-convex optimization problems with highly nonlinear constraints. We will start by introducing the cost function, and it\u2019s use in local and global optimization. We will then address how to monitor and diagnose your optimization convergence and results, tune your optimizer, and utilize compound termination conditions. This tutorial will discuss building and applying box constraints, penalty functions, and symbolic constraints. We will then demonstrate methods to efficiently reduce search space through the use of robust optimization constraints. Real-world inverse problems can be expensive, thus we will show how to enable your optimization to seamlessly leverage parallel computing. Large-scale optimizations also can greatly benefit from efficient solver restarts and the saving of state. This tutorial will cover using asynchronous computing for results caching and archiving, dynamic real-time optimization, and dimensional reduction. Next we will discuss new optimization methods that leverage parallel computing to perform blazingly-fast global optimizations and n-dimensional global searches. Finally, we will close with applications of global optimization in statistics and quantitative finance.\r\n\r\nThe audience need not be an expert in optimization, but should have interest in solving hard real-world optimization problems. We will introduce the [_mystic_][1] optimization framework -- then begin with a walk through some introductory optimizations, learning how to build confidence in understanding your results. By the end of the tutorial, participants will have working knowledge of how to use modern constrained optimization tools, how to enable their solvers to leverage high-performance parallel computing, and how to utilize legacy data and surrogate models in statistical and predictive risk modeling.\r\n\r\n*PREREQUISITES*: This tutorial will assume attendees have basic knowledge of _python_ and _numpy_, and is intended for scientific developers who are interested in utilizing optimization to solve real-world problems in statistics, quantitative finance, and predictive sciences. The tutorial will require _python_, _numpy_, and _mystic_ to be installed, and optionally installs of _matplotlib_, _scipy_, _pathos_, and _klepto_. All packages can be installed under _Anaconda_ or _Canopy_, or with _setuptools_ or _pip_.\r\n\r\n [1]: https://github.com/uqfoundation\r\n", "Highly-constrained, large-dimensional, and non-linear optimizations are found at the root of most of today\u2019s forefront problems in statistics, quantitative finance, risk, operations research, materials design, and other predictive sciences. Tools for optimization, however, have not changed much in the past 40 years -- until very recently. The abundance of parallel computing resources has stimulated a shift away from using reduced models to solve statistical and predictive problems, and toward more direct methods for solving high-dimensional nonlinear optimization problems.\r\n\r\nThis tutorial will introduce modern tools for solving optimization problems -- beginning with traditional methods, and extending to solving high-dimensional non-convex optimization problems with highly nonlinear constraints. We will start by introducing the cost function, and it\u2019s use in local and global optimization. We will then address how to monitor and diagnose your optimization convergence and results, tune your optimizer, and utilize compound termination conditions. This tutorial will discuss building and applying box constraints, penalty functions, and symbolic constraints. We will then demonstrate methods to efficiently reduce search space through the use of robust optimization constraints. Real-world inverse problems can be expensive, thus we will show how to enable your optimization to seamlessly leverage parallel computing. Large-scale optimizations also can greatly benefit from efficient solver restarts and the saving of state. This tutorial will cover using asynchronous computing for results caching and archiving, dynamic real-time optimization, and dimensional reduction. Next we will discuss new optimization methods that leverage parallel computing to perform blazingly-fast global optimizations and n-dimensional global searches. Finally, we will close with applications of global optimization in statistics and quantitative finance.\r\n\r\nThe audience need not be an expert in optimization, but should have interest in solving hard real-world optimization problems. We will introduce the [_mystic_][1] optimization framework -- then begin with a walk through some introductory optimizations, learning how to build confidence in understanding your results. By the end of the tutorial, participants will have working knowledge of how to use modern constrained optimization tools, how to enable their solvers to leverage high-performance parallel computing, and how to utilize legacy data and surrogate models in statistical and predictive risk modeling.\r\n\r\nintroduction to optimization (30 min)\r\n-------------------------------------\r\n - the cost function\r\n - local and global optimization\r\n - monitoring and diagnosing convergence and optimization results\r\n - solver tuning and compound termination conditions\r\n - Exercise(s)\r\n\r\npenalty functions and constraints (30 min)\r\n------------------------------------------\r\n - box constraints\r\n - applying penalty functions\r\n - reducing search space with constraints\r\n - applying symbolic constraints\r\n - Exercise(s)\r\n\r\nleverage asynchronous and parallel computing (30 min)\r\n-----------------------------------------------------\r\n - parallel function evaluations and solver iterations \r\n - solver restarts and saving state\r\n - dynamic real-time optimization\r\n - automated dimensional reduction\r\n - Exercise(s)\r\n\r\nensemble optimization and global searches (30 min)\r\n--------------------------------------------------\r\n - blazingly-fast global optimization\r\n - using global search to find all minima, maxima, and turning points\r\n - building a surrogate model through optimal surface interpolation\r\n - Exercise(s)\r\n\r\noptimization in parameter sensitivity, statistics, and risk modeling (30 min)\r\n-----------------------------------------------------------------------------\r\n - the cost metric\r\n - statistical and probabilistic constraints\r\n - information constraints from surrogate models and legacy data\r\n - application to quantitative finance and statistics\r\n - Exercise(s)\r\n\r\nPREREQUISITES:\r\nThis tutorial will assume attendees have basic knowledge of _python_ and _numpy_, and is intended for scientific developers who are interested in utilizing optimization to solve real-world problems in statistics, quantitative finance, and predictive sciences. The tutorial will require _python_, _numpy_, and _mystic_ to be installed, and optionally installs of _matplotlib_, _scipy_, _pathos_, and _klepto_. All packages can be installed under _Anaconda_ or _Canopy_, or with _setuptools_ or _pip_.\r\n\r\n [1]: https://github.com/uqfoundation", ""], "have_tickets": [true], "title": "Modern optimization methods in Python", "speakers": "Michael McKerns", "track_title": "", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 150, "tags": ["optimization", "predictions", "framework", "data-science", "analytics"]}, "374": {"id": 374, "abstracts": ["Django Girls is a free, one-day workshop for women who are new to programming. During the workshop, our participants will learn how to build their first Web application using Python, Django, HTML, and CSS. Participants were selected in advance for the workshop, and our coaches are all EuroPython attendees who volunteered to mentor the participants through the process.\r\n\r\nThis year's workshop is organized by [Mikey Ariel][1] and [Petr Viktorin][2], with support from the [Django Girls][3] global organization. Since the first Django Girls workshop was held at EuroPython 2014, this workshop also marks our first birthday! After the workshop, we will operate a booth in collaboration with PyLadiesES throughout the conference, so come say hello!\r\n\r\nOfficial website: [http://djangogirls.org/europython2015/][4]\r\n\r\nTwitter: [@DjangoGirlsEP15][5]\r\n\r\n [1]: https://twitter.com/thatdocslady\r\n [2]: https://twitter.com/EnCuKou\r\n [3]: http://djangogirls.org/\r\n [4]: http://djangogirls.org/europython2015/\r\n [5]: https://twitter.com/DjangoGirlsEP15\r\n"], "have_tickets": [true], "title": "Django Girls Workshop", "speakers": "Mikey Ariel", "track_title": "Room C1", "timerange": "2015-07-20 11:00:00, 2015-07-20 13:30:00", "duration": 180, "tags": ["workshop", "django-girls"]}, "166": {"id": 166, "abstracts": ["This training is about how to keep all your software stack under control using mainly Python technologies.\r\n\r\nWe will run some full stack deployment examples using things like Pyramid, Buildout, Ansible and Docker. \r\n\r\nWe will try to apply the Zen of Python into our DevOps infrastructure in order to make happy all stakeholders in your company/organization.\r\n\r\nThe session is divided in two sections, the first one we will cover full stack development strategies, and we will discuss subjects like design patterns, code organization and web servers, among others. We will compare how other \u201cde facto\u201d or \u201centerprise\u201d technologies in the industry are doing. \r\n\r\nIn the second part we will see how to prepare your application and power your deployments using Docker containers (www.docker.com) and Buildout (www.buildout.org).\r\n\r\nEach part of the training session is accompanied by runnable source code and documentation.", "Este curso es acerca de como mantener tu stack de software bajo control usando principalmente tecnolog\u00edas Python.\r\n\r\nVamos a ejecutar algunos ejemplos completos de c\u00f3digo que abarquen todas las capas de desarrollo e instalaci\u00f3n usando cosas como Pyramid, Buildout, Ansible y Docker.\r\n\r\nVamos a tratar de aplicar de aplicar el Zen de Python en nuestra infraestructura DevOps con el fin the hacer felices a todos los involucrados en tu empresa/organizaci\u00f3n.\r\n\r\nLa sesi\u00f3n se divide en dos secciones, la primera abarcar\u00e1 estrategias de desarrollo 'full stack' y discuteremos temas como patrones de dise\u00f1o, organizaci\u00f3n de c\u00f3digo, y servidores web, entre otros. Vamos a comparar como otras tecnolog\u00edas \"de facto\" o \"empresariales\" lo est\u00e1n haciendo en la industria.\r\n\r\nEn la segunda parte vamos a ver como preparar tu aplicaci\u00f3n y tus instalaciones usando contenedores docker (www.docker.com) y buildout (www.buildout.org)\r\n\r\nCada parte del entrenamiento es acompa\u00f1ada por c\u00f3digo ejecutable y documentaci\u00f3n.", ""], "have_tickets": [true], "title": "Full Stack + DevOps using Pyramid, Buildout and Docker", "speakers": "Alvaro Aguirre", "track_title": "", "timerange": "2015-07-22 14:30:00, 2015-07-22 17:30:00", "duration": 180, "tags": ["redis", "ansible", "Buildout", "Virtualization", "Enterprise", "DevOps", "docker", "SQLAlchemy", "fabric", "elasticsearch", "Pyramid"]}}, "Keynotes": {"365": {"id": 365, "abstracts": ["In this keynote, Ola and Ola will take you on a fantastic journey to the magical world of little Liz, who is totally enchanted by technology. The story of Liz will show that with a little bit of magic, curiosity, courage and hard work, you can defeat all the obstacles standing in your way. You'll discover with her that making big and scary things is easier when you're not doing them alone. Because sometimes, one magical spell, the helpful hand of a friend or this shiny sparkle is all it takes to make a dent in one's universe.", "", ""], "have_tickets": [true, true], "title": "Keynote: It's Dangerous To Go Alone, Take This: The Power of a Community", "speakers": "Ola Sitarska, Ola Sendecka", "track_title": "Google Room", "timerange": "2015-07-20 09:30:00, 2015-07-20 10:30:00", "duration": 60, "tags": ["diversity", "python", "community"]}, "366": {"id": 366, "abstracts": ["You've solved the issue of process-level reproducibility by packaging up\r\nyour apps and execution environments into a number of Docker containers.\r\nBut once you have a lot of containers running, you'll probably need to\r\ncoordinate them across a cluster of machines while keeping them healthy and\r\nmaking sure they can find each other. Trying to do this imperatively can\r\nquickly turn into an unmanageable mess! Wouldn't it be helpful if you could\r\ndeclare to your cluster what you want it to do, and then have the cluster\r\nassign the resources to get it done and to recover from failures and scale\r\non demand?\r\n>\r\nKubernetes (http://kubernetes.io) is an open source, cross platform cluster\r\nmanagement and container orchestration platform that simplifies the complex\r\ntasks of deploying and managing your applications in Docker containers. You\r\ndeclare a desired state, and Kubernetes does all the work needed to create\r\nand maintain it. In this talk, we\u2019ll look at the basics of Kubernetes and\r\nat how to map common applications to these concepts. This will include a\r\nhands-on demonstration and visualization of the steps involved in getting\r\nan application up and running on Kubernetes.", "", ""], "have_tickets": [true], "title": "Keynote: So, I have all these Docker containers, now what?", "speakers": "Mandy Waite", "track_title": "", "timerange": "", "duration": 60, "tags": ["python", "cloud", "docker"]}, "361": {"id": 361, "abstracts": ["This is *your* keynote! I will have some prepared remarks on the state of the Python community and Python's future directions, but first and foremost this will be an interactive Q&A session.", "", ""], "have_tickets": [true], "title": "Keynote: Python now and in the future", "speakers": "Guido van Rossum", "track_title": "Google Room", "timerange": "2015-07-21 09:30:00, 2015-07-21 10:30:00", "duration": 60, "tags": ["python"]}, "364": {"id": 364, "abstracts": ["The problem of introducing children to programming and computer science has\r\nseen growing attention in the past few years. Initiatives like Raspberry\r\nPi, Code Club, code.org, (and many more) have been created to help solve\r\nthis problem. With the introduction of a national computing curriculum in\r\nthe UK, teachers have been searching for a text based programming language\r\nto help teach computational thinking as a follow on from visual languages\r\nlike Scratch.\r\n\r\nThe educational community has been served well by Python, benefiting from\r\nits straight-forward syntax, large selection of libraries, and supportive\r\ncommunity. Education-focused summits are now a major part of most major\r\nPython Conferences. Assistance in terms of documentation and training is\r\ninvaluable, but perhaps there are technical means of improving the\r\nexperience of those using Python in education. Clearly the needs of\r\nteachers and their students are different to those of the seasoned\r\nprogrammer. Children are unlikely to come to their teachers with\r\nfrustrations about the Global Interpreter Lock! But issues such as\r\nusability of IDEs or comprehensibility of error messages are of utmost\r\nimportance.\r\n\r\nIn this keynote, Carrie Anne will discuss existing barriers to Python\r\nbecoming the premier language of choice for teaching computer science, and\r\nhow learning Python could be helped immensely through tooling and further\r\nsupport from the Python developer community.\r\n", "", ""], "have_tickets": [true], "title": "Keynote: Designed for Education: A Python Solution", "speakers": "Carrie Anne Philbin", "track_title": "Google Room", "timerange": "2015-07-23 09:30:00, 2015-07-23 10:30:00", "duration": 60, "tags": ["python"]}, "363": {"id": 363, "abstracts": ["In this talk, I'll discuss the recent rise of immutable state concepts in languages and network protocols. And how the advent of hash-based data structures and replication strategies are shaking the client/server web service paradigm which rests on managing mutable state through http. By contrast, building on git, bittorrent and other content addressed data structures provides for a more secure, efficient decentralized communication topology. There are projects, thoughts and talk to create new web standards to bring such technologies to mass deployment and fuel a new wave of decentralization. What can Python bring to the table? ", "", ""], "have_tickets": [true], "title": "Keynote: Towards a more effective, decentralized web", "speakers": "Holger Krekel", "track_title": "", "timerange": "", "duration": 60, "tags": ["python"]}}, "Other sessions": {"371": {"id": 371, "abstracts": ["Recruiting sponsors presentation.", "", ""], "have_tickets": [false], "title": "Recruiting sponsors presentation", "speakers": "To be announced", "track_title": "Google Room", "timerange": "2015-07-21 16:45:00, 2015-07-21 17:30:00", "duration": 45, "tags": ["recruiting"]}}, "Help desks": {"334": {"id": 334, "abstracts": ["Scrapy is an open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way.\r\n\r\nThis helpdesk is run by members of Scrapinghub, where Scrapy was built and designed.", "", ""], "have_tickets": [true], "title": "Scrapy Helpdesk", "speakers": "Juan Riaza", "track_title": "", "timerange": "2015-07-21 10:00:00, 2015-07-21 13:00:00", "duration": 180, "tags": ["scrapy", "python", "scraping"]}, "248": {"id": 248, "abstracts": ["For this helpdesk session, I will be here to help people on ansible, be it for beginner usage or more advanced use cases ( or even bug reporting/fixing ).\r\n\r\nPrerequisite are simply to have a computer ( if needed by the question ) and familliarity with command line on a unix system ( but the more, the better )."], "have_tickets": [true], "title": "Ansible helpdesk", "speakers": "Michael Scherer", "track_title": "", "timerange": "2015-07-23 10:00:00, 2015-07-23 13:00:00", "duration": 180, "tags": ["yaml", "Operations", "CLI", "system-administration", "open-source", "linux", "ansible"]}, "369": {"id": 369, "abstracts": ["Plone help desk", "", ""], "have_tickets": [true], "title": "Plone help desk", "speakers": "Paul Roeland", "track_title": "", "timerange": "2015-07-21 10:00:00, 2015-07-21 13:00:00", "duration": 180, "tags": ["web", "Plone", "CMS"]}, "47": {"id": 47, "abstracts": ["Bring us your broken README files, your cryptic API references, and your disheveled Wiki projects! Or, just come and chat with us about life, the universe, and everything docs. \r\n\r\nOur doc(tor)s are happy to assist with all things docs: from proofreading and restructuring content, optimizing contribution workflows, to automating API docs and L10N, implementing scalable and testable markup languages, and more! \r\n\r\nThe clinic will be staffed by:\r\n\r\n* [Mikey Ariel][1] , senior technical writer at Red Hat, community lead at Write the Docs EU, documentation evangelist, agile coach, has coffee - will travel.\r\n\r\n* [Maciej Szlosarczyk][2], senior technical writer at Symantec, Linux user in rehab, experiments with Django, Swagger, and Ember.js, can talk craft beer for hours.\r\n\r\n* [Paul Roeland][3] , open source and non-profit activist, fluent in Plone and conversational in Sphinx and Robot-screenshots, mixes a mean Martini.\r\n\r\n [1]: https://twitter.com/thatdocslady\r\n [2]: https://twitter.com/icejam_\r\n [3]: https://twitter.com/polyester"], "have_tickets": [true], "title": "The doc(tor)s are in! (Documentation Helpdesk)", "speakers": "Mikey Ariel", "track_title": "", "timerange": "2015-07-22 10:00:00, 2015-07-22 13:00:00", "duration": 180, "tags": ["Plone", "api", "autodoc", "education", "Best Practice", "agile", "documentation", "community", "communication", "django", "fun", "Sphinx", "translation", "internationalization", "i18n", "sphinxdocumentation"]}}} \ No newline at end of file diff --git a/ep2018/static/index.js b/ep2018/static/index.js deleted file mode 100644 index 746739c..0000000 --- a/ep2018/static/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * jQuery scrollintoview() plugin and :scrollable selector filter - * - * Version 1.8 (14 Jul 2011) - * Requires jQuery 1.4 or newer - * - * Copyright (c) 2011 Robert Koritnik - * Licensed under the terms of the MIT license - * http://www.opensource.org/licenses/mit-license.php - */ -(function(f){var c={vertical:{x:false,y:true},horizontal:{x:true,y:false},both:{x:true,y:true},x:{x:true,y:false},y:{x:false,y:true}};var b={duration:"fast",direction:"both"};var e=/^(?:html)$/i;var g=function(k,j){j=j||(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(k,null):k.currentStyle);var i=document.defaultView&&document.defaultView.getComputedStyle?true:false;var h={top:(parseFloat(i?j.borderTopWidth:f.css(k,"borderTopWidth"))||0),left:(parseFloat(i?j.borderLeftWidth:f.css(k,"borderLeftWidth"))||0),bottom:(parseFloat(i?j.borderBottomWidth:f.css(k,"borderBottomWidth"))||0),right:(parseFloat(i?j.borderRightWidth:f.css(k,"borderRightWidth"))||0)};return{top:h.top,left:h.left,bottom:h.bottom,right:h.right,vertical:h.top+h.bottom,horizontal:h.left+h.right}};var d=function(h){var j=f(window);var i=e.test(h[0].nodeName);return{border:i?{top:0,left:0,bottom:0,right:0}:g(h[0]),scroll:{top:(i?j:h).scrollTop(),left:(i?j:h).scrollLeft()},scrollbar:{right:i?0:h.innerWidth()-h[0].clientWidth,bottom:i?0:h.innerHeight()-h[0].clientHeight},rect:(function(){var k=h[0].getBoundingClientRect();return{top:i?0:k.top,left:i?0:k.left,bottom:i?h[0].clientHeight:k.bottom,right:i?h[0].clientWidth:k.right}})()}};f.fn.extend({scrollintoview:function(j){j=f.extend({},b,j);j.direction=c[typeof(j.direction)==="string"&&j.direction.toLowerCase()]||c.both;var n="";if(j.direction.x===true){n="horizontal"}if(j.direction.y===true){n=n?"both":"vertical"}var l=this.eq(0);var i=l.closest(":scrollable("+n+")");if(i.length>0){i=i.eq(0);var m={e:d(l),s:d(i)};var h={top:m.e.rect.top-(m.s.rect.top+m.s.border.top),bottom:m.s.rect.bottom-m.s.border.bottom-m.s.scrollbar.bottom-m.e.rect.bottom,left:m.e.rect.left-(m.s.rect.left+m.s.border.left),right:m.s.rect.right-m.s.border.right-m.s.scrollbar.right-m.e.rect.right};var k={};if(j.direction.y===true){if(h.top<0){k.scrollTop=m.s.scroll.top+h.top}else{if(h.top>0&&h.bottom<0){k.scrollTop=m.s.scroll.top+Math.min(h.top,-h.bottom)}}}if(j.direction.x===true){if(h.left<0){k.scrollLeft=m.s.scroll.left+h.left}else{if(h.left>0&&h.right<0){k.scrollLeft=m.s.scroll.left+Math.min(h.left,-h.right)}}}if(!f.isEmptyObject(k)){if(e.test(i[0].nodeName)){i=f("html,body")}i.animate(k,j.duration).eq(0).queue(function(o){f.isFunction(j.complete)&&j.complete.call(i[0]);o()})}else{f.isFunction(j.complete)&&j.complete.call(i[0])}}return this}});var a={auto:true,scroll:true,visible:false,hidden:false};f.extend(f.expr[":"],{scrollable:function(k,i,n,h){var m=c[typeof(n[3])==="string"&&n[3].toLowerCase()]||c.both;var l=(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(k,null):k.currentStyle);var o={x:a[l.overflowX.toLowerCase()]||false,y:a[l.overflowY.toLowerCase()]||false,isRoot:e.test(k.nodeName)};if(!o.x&&!o.y&&!o.isRoot){return false}var j={height:{scroll:k.scrollHeight,client:k.clientHeight},width:{scroll:k.scrollWidth,client:k.clientWidth},scrollableX:function(){return(o.x||o.isRoot)&&this.width.scroll>this.width.client},scrollableY:function(){return(o.y||o.isRoot)&&this.height.scroll>this.height.client}};return m.y&&j.scrollableY()||m.x&&j.scrollableX()}})})(jQuery); - -$(function() { - var current = 0; - - var $sponsors = $('footer ul.sponsors li'); - - window.setInterval(function() { - if (current < $sponsors.length) { - current += 1; - } else { - current = 0; - } - - $sponsors.eq(current).scrollintoview({ - duration: 500, - direction: "vertical", - }); - }, 4000); -}); diff --git a/ep2018/static/jquery-2.1.4.min.js b/ep2018/static/jquery-2.1.4.min.js deleted file mode 100644 index 49990d6..0000000 --- a/ep2018/static/jquery-2.1.4.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){ -return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*\s*$/g,ia={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("