It has been a while since I had the time to write another blog post. As you
might have noticed, I’m an organizer of 2014’s EuroPython in Berlin. My job as
the web team leader requires some responsibility I’m eager to fulfill,
especially for a conference where we expect up to 1.200 attendees. Furthermore,
this job is a sideline to my regular job, being a computer science student.
About a month ago, however, I took the time to attend the DjangoCon Europe.
After an incredible circus edition 2013 in Warsaw, this year’s organizers
stepped up to the plate to host another amazing conference. While everybody
knew DjangoCon Europe 2014 was going to be in France from the beginning, it
took some months until the announcement was made that the event would happen
somewhere on the Côte d’Azur. The community, though, was kept in the dark about
the exact location for a few more months. Eventually the Île des Embiez, a
small island between Toulon and Marseille, was announced and djangoisland born.
Getting to this little island on Monday before official conference start was
kind of a challenge for me. Although I’m living in Berlin, there are not many
(fast) ways to get to a bigger city in southern France. I took a flight via
Brussels in the early morning at about 7am and arrived in Marseille at about
12pm plus some waiting time at baggage claim. That’s actually not that bad. But
getting from Marseille to this little island in the middle of nowhere was hard:
From the Marseille Provence Airport (MRS) to Marseille Saint-Charles train
station by bus. Unfortunately the shuttle bus we could have taken if the plane
hasn’t been delayed was already gone.
From Saint-Charles we took a one hour train ride to Toulon train station. Sadly
we missed the connection bus there which would have taken us to the harbor in
La Brusc by a few minutes. But having about 2 hours free time in Toulon wasn’t
that bad. We walked through the city to the harbor and grabbed some lunch.
Back at the central bus station we met quite a lot other DjangoCon attendees
travelling with us to the port in La Brusc where the ferry brought us to the island.
At about 6pm we arrived at the hotel. After I checked into my room I had an
amazing view from the balkony.
[The Île des Embiez] has a surface area of 0.9 square kilometres (0.35 sq
mi), with a coastline of 6 kilometres (3.7 mi). The island is 57 metres
(187 ft) high at its highest point. [WIKI]
The sunny and warm weather animated me and many others to explore the island.
Here are some photos that capture some nice views.
There were many talks spanning all kinds of topics, database related topics
next to front-end recommendations. Explaining where to look for performance
optimizations and why Django is not necessarily a monolithic web-framework.
The complexity covered by those talks varied quite a log. There were talks for
beginners giving hints on how to work with generic classed based views and
talks for experts on what one might experience when ripping out some parts of Django.
It was an amazing conference and I’m glad I was able to attend. I met many
people from the community. Having interesting discussions on all kind of
topics, both Django and not Django related.
As highlight at the end of the conference, my pull-request for #21905 got
Last weekend the web team met in Berlin (and was supported by one member
remotely) in the rooms of Veit Schiele Communications GmbH in order to bring the
EuroPython 2014 website software forward. The team under the leadership of
Markus Holtermann implemented the following new features:
- A short while ago we made some heavy changes to the main menu. Unfortunately
the user experience wasn’t the way we expected it to be. Thus we got some
comments on the EuroPython mailing list. It took us some time to decide how
to change the way the menu should work. Eventually, a click on a main menu
item only toggles the menu as of now (GitHub issue #103)
- We want to generate the badges (and other stuff for the conference) directly
from the user data you provide on the website. This presented us with some
kind of challenge as you will see in the next bullet point, too. We decided
that the singe point of truth for the user data is the user profile. We
therefore added a field where you can enter your interests. (GitHub issue
- As said before, the single point of truth for the user data is and will be the
user profile. Unfortunately, during the purchase process of a ticket, we only
have information about the buyer, not any of the intended ticket users.
Although we didn’t change this part in the update (and we won’t change it in
the future), you are now able to assign a ticket to another user. This is
incredible useful for those buyers ordering multiple tickets, eg. for their
colleagues or friends. To assign the ticket to somebody else, ask him/her for
the user name and assign the ticket to him/her from your purchase view. If
the intended user doesn’t have a account yet, ask him to create one. All
tickets that are not assigned to somebody will use the first and last name
given during purchase. (GitHub issue #101)
- Since many attendees are not from Germany, we looked for a way to hand out SIM
cards. Due to legal restrictions this is not that simple in Germany (you
normally need to present a photo ID). Fortunately we found a reseller where we
become some kind of reseller ourselves (it’s a bit more complicated than that
;) ). Hence we will offer SIM cards within the next days that you can buy
beforehand and you can pick up during check-in (more details soon). (GitHub
- When you modify your profile and try to upload a new avatar, but there are
errors in some other fields, the avatar gets lost. We solve this by adding
front-end validation to this and many other forms. (GitHub issue #47)
- If you are looking for a job (in your real live, not the one on the internet
:D), or if you think about getting a new job for whatever reason, you can now
opt-in (and later opt-out) of job offers by our sponsors. We will not hand
over any of your data to the sponsors. The sponsors have to give us their
offer and we will send it only to those users interested in job offers.
(GitHub issue #78)
- The list of your purchases now shows canceled purchases too. (GitHub issue
Apart from those changes interesting to you as an attendee, loads of other
changes made it into production. If you are interested, have a look at our
repository on GitHub: https://github.com/EuroPython/djep
All new features went into production today with an update of the portal software.
Thanks a lot to the web team and all other sprinters for their dedicated work on
the EuroPython 2014 web software.
Source: blog.europython.eu, Mar 30, 2014, 20:30pm CEST
The next EuroPython conference will be held from July 21 - 27, 2014 at the bcc
Berlin Congress Center in the heart of Berlin. The EuroPython conference is the
second largest global conference for the popular programming language Python,
after the PyCon US conference in North America. The bcc is located at the
central Alexander Square. It offers ideal facilities for a developer conference
on 3,000 m2. The organizers are expecting up to 1,200 participants, continuing
the growth of the EuroPython conference series. The very successful EuroPython
this year attracted almost 900 Python enthusiasts. It was hosted in Florence,
Italy for the third time running.
Berlin offers ideal conditions for a large international developer conference.
The city with its about 2,500 young businesses has a large and fast-growing
start-up scene. 300 universities, polytechnics, research institutes and
technology parks underline Berlin’s importance as one of Europe’s leading
science and research locations. Thanks to its rich cultural landscape with
around 180 museums, renowned international art collections and precious works
of art as well as a lively art and music scene, Berlin is one of the most
vibrant and vividly creative metropolitan centers in Europe. Its attractions
and excellent national and international transport links have already put
Berlin among the top three in the international conference and congress region rankings.
The conference will be organized locally by the Python Software Verband e.V.,
the Python Users Berlin, the Django User Group Berlin and the PyLadies Berlin,
in cooperation with the EuroPython Society for the Python community. With five
lecture tracks and two tutorial tracks running in parallel, the EuroPython
conference offers an attractive schedule for all attendees.
The EuroPython 2014 logo expresses what is on the organizer’s minds, which is
getting people from very different areas of expertise together to communicate.
Python is used as a programming language in industrial and service enterprises
as well as in research and education. The EuroPython brings together developers
who work together on fascinating tasks and as a result have found unique
solutions to their problems.
Python is an interpreted high-level language. In the TIOBE index Python has
featured among the top 10 of favorite programming languages for years. Python
is ideal for development. It is a lean language that is easy to learn for both
developers and users. The language was created in the late 1980s by Guido van
Rossum. Today, the language is developed by a large open source community and
backed by the Python Software Foundation (PSF), which owns the copyright to Python.
About the Python Software Verband e.V.
The Python Software Verband e.V. represents the interests of the
German-speaking Python community. It is a German non-profit organization that
focuses on promoting the Python programming language and supports activities of
different Python interests groups. Its members are involved in a wide range of
Python activities including Python core development and many Open Source projects.
About the EuroPython Society
The EuroPython Society (EPS) is a Swedish non-profit organization which holds
the rights to the EuroPython conference series and trademarks. It coordinates
with local organizers to run EuroPython conferences. The EPS was formed in 2004
with the mission to turn EuroPython into a successful Python conference series
for the years to come.
About the Python Users Berlin
Founded in 2002, Python Users Berlin holds monthly meetings for presentations
and talks about all facets of the Python programming language. Python Users
Berlin currently has around 330 members.
About the Django User Group Berlin
The Django User Group Berlin was founded in 2009. Its approximately 130 members
meet monthly for talks related to the Python web framework Django.
About the PyLadies Berlin
PyLadies is an international movement that motivates and supports women to
engage with and take an active role within the Python community as developers.
PyLadies Berlin has around 100 members.
Source: ep2014.europython.eu, Dec 12, 2013, 11:30pm CET
It has been some time since my last blog post. So here’s an update. This is
about a great event I participated in last weekend, the djangodash 2013.
The djangodash is an coding contest where teams have 48 hours time to start and
sprint a project. As this dash is called djangodash, the Django must be used.
Furthermore the teams are limited to at most 3 members and a couple of other
So, what project were my friend and I working on? It’s called bakery. You can
find it on github as well as a live version at
djangodash2013.webshox.org. But what does bakery actually do and what is
it? In simplified terms bakery is an index for cookiecutter templates. In
longer terms, bakery offers an API to create, find, modify, update and share
cookiecutter templates at a central point to clear up the mess with manually
updated readme files providing an incomplete list of templates. Additionally
bakery offers some neat features such as forking a template to your own
github account or voting a template up. We are working on many more planned
features, e.g. automatically updating the index, directly editing the
cookiecutter.json file on the index.
So, what are these cookiecutter templates and what is cookiecutter?
cookiecutter itself is a tool that, given a project template, bootstraps a
project with its directory structure and files (including their content) based
on a set of context variables. To see what these templates (aka cookiecutters)
look like, just have a look at the list of available cookiecutters.
Yesterday evening I gave a lightning talk at the Python User Group Berlin
called "Showing BVG Departures In Your Office". You can download the slides
The whole idea to the project came up when our student organization
(Freitagsrunde) had to relocate to a new building at the end of 2012.
Since our new student organization meeting room is quite near to the next bus
stop (bee-line), but the actual distance is way longer and we have to cross
several doors, waiting in the room and heading to the bus stop when the bus
arrives is not going to work.
As computer scientists we had to come up with a solution to somehow grab the
departures of the bus stop and show them in the room.
At first the information retrieval was hard-coded and it was only possible to
get the departures for a single bus stop. After a short time we got the feature
request to also display the departures of nearby subways and other public
transport. We ended up rewriting the entire application and created a library
we then called bvg-grabber.
The quite simple API allows us to use both information provided by the BVG:
the actual departures which, in that days, only returned departures about
busses, and the scheduled departures as they are written on the time tables:
A class inheriting from QueryApi must implement a call() function that
returns a Response object.
"""Performs the requests to the data source"""
"""Needs to return a Response"""
raise NotImplementedError("The inheriting class needs to "
"implement the call() method!")
A Response object must contain a state (True/False for success/failed
request) and, for a successful request, the departing station and a list of
Departures, or, for a failed request, the error that occurred.
"""Returned by a QueryApi, contains list of Departures"""
def __init__(self, state, station=None, departures=None,
self._state = state
self._departures = [(station, departures)]
self._error = error
Finally, a Departure defines when a certain line leaves at a certain
start station and at which station the ride will end.
"""Start and end station, next departure time"""
def __init__(self, start, end, when, line, since=None,
# Some magic happens here
As we are using the actual and the scheduled information from the BVG as you
can see above, here are 2 short examples how to use them:
In : from bvggrabber.api.actualdeparture import ActualDepartureQueryApi
In : resp = ActualDepartureQueryApi("Ernst-Reuter-Platz").call()
In : resp.departures
[Start: Ernst-Reuter-Platz, End: S+U Zoologischer Garten, when: 13:56, now: 13:54, line: Bus 245,
Start: Ernst-Reuter-Platz, End: S+U Zoologischer Garten, when: 14:01, now: 13:54, line: Bus X9,
Start: Ernst-Reuter-Platz, End: S+U Zoologischer Garten, when: 14:05, now: 13:54, line: Bus M45,
Start: Ernst-Reuter-Platz, End: Johannesstift, when: 13:54, now: 13:54, line: Bus M45,
Start: Ernst-Reuter-Platz, End: Flughafen Tegel, when: 13:55, now: 13:54, line: Bus X9,
Start: Ernst-Reuter-Platz, End: Johannesstift, when: 14:01, now: 13:54, line: Bus M45])]
In : from bvggrabber.api.scheduleddeparture import ScheduledDepartureQueryApi
In : resp = ScheduledDepartureQueryApi("Ernst-Reuter-Platz").call()
In : resp.departures
[Start: Ernst-Reuter-Platz, End: Johannesstift (Berlin), when: 13:54, now: 13:54, line: Bus M45,
Start: Ernst-Reuter-Platz, End: Hertzallee (Berlin), when: 13:56, now: 13:54, line: Bus 245,
Start: Ernst-Reuter-Platz, End: S+U Pankow (Berlin), when: 13:56, now: 13:54, line: U2,
Start: Ernst-Reuter-Platz, End: Hertzallee (Berlin), when: 13:57, now: 13:54, line: Bus M45,
Start: Ernst-Reuter-Platz, End: U Theodor-Heuss-Platz (Berlin), when: 13:58, now: 13:54, line: U2])]
I’m looking forward to your ideas and feature requests.