At the beginning of May of this year I attended PyDays Vienna for the first time. It is a fairly new conference that originates from the LinuxWochen Vienna conference. They have been held simultaneously at the same location, this year being the second edition of the conference. I was quite impressed how well everything was organized.
The conference was free for everyone to attend by subscribing on the homepage (there where no tickets, so organizers required just a ruff number of participants) but this was only possible because of the sponsors and all the volunteers, so a big THANK YOU from my side here for all the efforts put into managing the event. The sponsors also provided lots of cool swag (pens, stickers, bags, t-shirt) and of course details for new products, services and jobs. I found out that Red Hat has a really interesting tool for deploying containerized applications called Open Shift, which looks very promising. There where also lots of Python stickers, and I made sure to take more than enough so I can share them with colleagues at work.
The talks where held mostly in English, but there were also a few in German (some of those were held in English on request of the attendees where the speaker was fine with it). Most of the time on two tracks and at some points there were additional tracks for the workshops.
“Diversity” is a good keyword for this conference. There was something for everyone. From beginners to advanced users in different fields: web development, data science and also machine learning, as this topic is pretty popular in the python community.
I will try to summarize the talks I attended during these two days filled with awesome python stuff. I also added links to the page of the talk where links to slides, repositories and hopefully videos can be found.
Day 1 - 4 May 2018
ZODB: A graph database for Python Developers
Speaker: Christopher Lozinski
https://cfp.linuxwochen.at/de/LWW18/public/events/752
I liked the concept of building the database as a graph and the ability to relate the available nodes in the database. I’m used to relational databases where a schema is defined and tables are connected to each other. ZODB (http://www.zodb.org/en/latest/) is more of an NoSQL approach that is based on Graph Theory. Relational databases are using CRUD operations (Create, Read, Update, Delete) but ZODB uses something called an Extended CRUD, as it brings some additional operations because of the nature how data is stored. According to the speaker, this database is great for chat applications by using MQTT and there is also a module available for Flask (https://flask-zodb.readthedocs.io/en/latest/).
Guidance for Successful SaaS Architecture in Python
Speaker: Armin Ronacher
https://cfp.linuxwochen.at/de/LWW18/public/events/849
This talk was held by the creator of Flask. He presented some things that everyone should have in mind when it comes to building a SasS application.
The first introduced concept was the Tenant (that is to say more or less the customer) which should be isolated and receive only the data related to the Tenant in the running request. This can be achieved by storing the current user into the current thread and use this object into all query filters when getting data from the server. This is an important step for security and also for running the software into a managed cloud on multiple instances. Also he mentioned the importance of logs, that is crucial when it comes to multiple instances of the same code running.
Database migrations are a process that can become tricky or even a nightmare sometimes. Always make sure they are bidirectional, as some features may turn out not being that great in production, in which case the application may need a rollback.
Speaking of features in production, a good idea is to use feature flags. This will allow to enable options only for certain customers (like early adopters) and even to separate code that was tested and has to be enhanced or removed in a future release.
Python and Web Sockets
Speaker: Anton Caceres
https://cfp.linuxwochen.at/de/LWW18/public/events/777
I believe everybody enjoyed the speakers analogy of websockets with communication between human beings (where each participant talks) and long polling as a romantic relation (where on side speaks and then there is a long pause).
There are several frameworks that can be used to use websockets in python: Twisted, Tornado, Django Chanels, Websockets python lib.
Tracking Reproducible Revisions in PostgreSQL with Psycopg2
Speaker: Miroslav Šedivý
https://cfp.linuxwochen.at/de/LWW18/public/events/666
I found this talk interesting, mostly because it relates to a project that some of my colleagues started for Django (Link to django changesets). Since I use Django, I also used PostgreSQL by default, but I always learn new things by attending this kind of talks. I knew that Django models can have defined ranges for queries or where values are stored, but there are fields in PostgreSQL that allow storing a date range or integer range directly. It is also possible to apply queries for dates or number between those ranges, which makes this very powerful and useful for storing revisions.
Pyware - A generic Pythonic REST API client
Speaker: Duc-Hung Le
https://cfp.linuxwochen.at/de/LWW18/public/events/710
I was looking a few years ago for something similar and ended up building my own implementation, which now lives in some proprietary code. Pyware brings some amazing features and allows to quickly consume a REST API in python code. The only problem at the moment is that the project will be release in a few months, so there is no way to test it in the real world right now. I like the idea that it uses WADL to autogenerate the models that the client uses to call the endpoints of the API.
Pragmatic Introduction to Python Unit Testing (Workshop)
Speaker: Peter Kofler
https://cfp.linuxwochen.at/de/LWW18/public/events/841
This was nice to refresh my knowledge about unit testing, what exactly a unit means and why it is important to keep clean code in tests. I left this workshop as this was really intended for beginners. I read afterwards on twitter that the workshop was well organized.
Gnu Radio
Speaker: Pero Krivic
https://cfp.linuxwochen.at/de/LWW18/public/events/713
After I left the unit test workshop, I arrived to see a part of this talk and I just catched the live demo where the speaker demonstrated how he uses and antena to receive radio signals. He used it to demonstrate how he can receive GMS signals. He then got a step further and used this data to figure out from which networks this signals are coming from. Quite amazing :)
Open Election Data API with Django (Offene Wahlen AT)
Speaker: Stefan Kasberger
https://cfp.linuxwochen.at/de/LWW18/public/events/792
Having the possibility to access all data of the elections (of course anonymized) sounds really democratic for me. Practical as well, as tons of cool stuff can be done by using this data. The speaker showed how he took the available data and imported it into Django, then he created a REST API by using Django Rest Framework. I am familiar with all of this, but I still caught something of which I never taught before. Apparently the browsable API of DRF allows to configure a custom logo. Thinking about it now, makes me realize that this is the kind of things that customers notice, as their brand is integrated and they feel that the software is bound to their business.
Python in Game Development
Speaker: Thomas Perl
https://cfp.linuxwochen.at/de/LWW18/public/events/670
I’m not really a big gamer, I like to try something out from time to time and I also have a PS3 under my desk, but since this was the last talk of the day I decided to stay before I left to my apartment, which I don’t regret. Thomas Perl presented some nice games build during the past years and also the main concept of porting a game to different platforms.
I was very impressed by the API he build to access the PlayStation Move controller using python (https://github.com/thp/psmoveapi). He just demonstrated live how quick someone can connect to the controller and started to change the color of the top led in just a simple python REPL session. Since I own one of this controllers, I will definitely give it a shot, as this also allows to map the buttons and position, so it can be used in a Python application.
Another great thing he showed was a level editor built in python to create levels for an iOS game. The main idea behind it is to have something that allows to quickly create levels and just try them in the game instead of programming them, as this will discourage to trough them away after spending so much time in the creation process. I didn’t know that python can be the language of choice for creating such applications.
Day 2 - 5 May 2018
Industrial Machine Learning
Speaker: Alejandro Saucedo
https://cfp.linuxwochen.at/de/LWW18/public/events/720
Machine learning has become a real hype over the past year and it spread mostly in the python community as there are many tools for this. This talk center on how to scale an application that is used to predict the value of crypto currency (https://github.com/axsauze/crypto-ml) by using Rabbit MQ, Cellery with Flower UI and Airflow.
Enterprise CMS mit Plone 5.1
Speaker: Jens W. Klein
https://cfp.linuxwochen.at/de/LWW18/public/events/697
The name of the CMS is not new for me, although I never tried it before. It appears that this is good for enterprise applications, as it allows to replicate complex editorial workflows. It has also a nice and extensible content type system. There are some goodies for developers, such as a CLI that help create modules, run development server and tests. After the talk, me and a group of people asked some questions and it appears that version 5.2 will come with a build it Rest API. I also got introduced to a new ui testing framework integrated in Plone called Robot (http://robotframework.org/).
Feeding a real-time user interface
Speaker: Vita Smid
https://cfp.linuxwochen.at/de/LWW18/public/events/727
Crypto currency is besides machine learning, very popular in the python community. Vita Smid showed in his talk how their application for exchanging currency started as a simple webpage that always pulled the data from the REST API, and becoming inefficient as the user base has started to grow. In order to bring better performance in the application, they had to minimize the operations in the server and client side. A good first step was to use websockets, so the users only receive the updates from the server. In order to get diffs on objects in python, they have built a library (https://github.com/qntln/difftrack) meant to allow subscribing on changes. By using Apache Avro (https://avro.apache.org/) they send the data serialized as binary (probably Typed Arrays (https://caniuse.com/#feat=typedarrays)) in order to feed the application. It appears that the data send in this format is proceeds about 10% faster by JS.
Teaching AI about Human Knowledge
Speaker: Ines Montani
https://cfp.linuxwochen.at/de/LWW18/public/events/680
This talk gives some valuable insights for those who want to start doing machine learning. The main idea was to teach a computer human language and what is required to achieve this. The main idea was to be careful how the data model is trained. Best example was to avoid cheap data sources that pollute the research (like online surveys where people get paid a few cents). If possible, try to use pretrained models but, be careful that they focus on the terminology of the business. It’s better than starting from scratch, and it can save lots of hours. Always keep training data separated from evaluation data. This way the evolution of the model can be always verified.
Deploying Python with Docker, CircleCI, and Kubernetes (Workshop)
Speaker: Matt Nicolls
https://cfp.linuxwochen.at/de/LWW18/public/events/842
The Workshop was the last event I attended.I would say it was well done and great for all of those who just start with docker. I was introduced to a new approach of creating docker images and automatically push them to docker hub by using CircleCI (link). I was sad that because of some technical issues the whole Kubernetes part has not worked on my machine, but I will for sure retry this at a later time.