EuroPython 2014: July 24, 2014 - Lightning Talks
EuroPython
Lightning Talks: netaddr: Stefan Nordhausen, Pyxie Dust: Josie Zec, Tina Zec, Webcamp: Aljosa, Who watches the watchmen? Dima Tisnek, Config management for humans: Torsten Rehn, Some magic for class factories: Harut Dagesyan, The great Python design flaw: zefciu, Some cool stuff: Richard Jones, RESTful Microservices with Python: Antonio Ognio, Teaching Python to kids with Minecraft: Danilo Bargen, Record your Web Service: kkuj, PyCon Brazil: Fernando Masanori Ashikaga, PyMove3D translations: PeterK, PyCon Poland: Filip Kłębczyk, State of Jython: Jim Baker, How to make Python more sexy, Actors in Python: Anton Blomberg, Keysigning Intro: Thomas Waldmann, Data driven code quality management/automation: Christoph Neumann
. Nevertheless, we're going to have another 90 minutes of lightning talks, and it's going to be packed. I want you to stay after the lightning talks, though. There is something the organizers want you to be here for, and I'm not allowed to say anything more, except that having more people is better. Mysterious. Anyway, let's get started with the lightning talks. The first one is Stefan Nothausen, and he's going to talk about NetAdder. Hi, everybody. My name is Stefan Nothausen, and I will give you a quick introduction to NetAdder, which is a library that helps you to handle IP addresses, MAC addresses, and more. I'm one of the main contributors, and you can find the code on GitHub and also on PyPI. But first of all, I would like to show you a new build-in that was added in Python 3.3. You can now import IP address and IP network, and then you can do stuff with IP addresses and IP networks because there are now objects for that. So you can check if an IP address is in a certain network. And there's more goodies. You can do iterating, slicing, you can get the broadcast addresses, NetMass, you can even do IP arithmetic. NetAdder provides the same for you. We also have an IP address object, an IP network object, and you can do pretty much the same thing as with the IP address built-in of Python 3.3. So why would you install NetAdder? Well, first of all, it supports Python 2.4 and Python 3.0 because not everybody has Python 3.3 yet. And there's no further dependencies, no C-magic, nothing. Second of all, there's more than just IP addresses and IP networks. For example, there's IP ranges. NetAdder provides you with an IP range network object. And you can just say, I have an range that starts here, ends there, and then you can do operations like, is the IP address in the cluster? You can iterate over the hosts in your range, stuff like that. There's also an object for handling MAC addresses called the EOI because that's the official name of MAC addresses, extended unique identifier. And the funny thing about these is that there are so many different formats. Upper case, lower case, different kinds of separators. Some people leave out the leading zeros, but as you see in the example below, it's all the same for the EOI object. They all get parsed the same. That's the input. How about the output? Maybe you want your MAC address to look in a certain way. That's why NetAdder provides so-called dialects for you. One is the MAC Cisco dialect. And you can just instantiate your MAC address, set the dialect to Cisco, and then stringify it, and it will look like a MAC address that the Cisco systems are using. More such dialects are available. Customization is, of course, possible. There's OUI, organizationally unique identifiers, which are basically the first three bytes of a MAC address. And you can ask a MAC address for its OUI and the interesting part about the OUI is the registration information. So in the example you see on the screen, the registration says it's the Intel company from Malaysia. Always good to know stuff like this. And by the way, this works without Internet Access, the database is built in. Then there's sets of IP addresses. Wait a minute. Set is a Python built in. Why would you bother? Well, there's stuff like 10.0.0.0.8 and FE80.64, which are just really big networks. And you don't want to add two to the 64 objects to a Python set. That's not really fun. Here, IP set comes to the rescue. You import the IP set, you instantiate it, and then you can add IP networks, you can add IP ranges, you can add individual IP addresses, and you can mix IPv6 and IPv4 as you please. And then do the usual set operations. Check for membership, for example. Or in the second part, remove an address from the IP set. And even though that splits the IP range that was inserted in two pieces, let IP set take care of it. You don't have to. One disclaimer, though, your distribution may ship NetAdri already, but please use version 0.7.11 or higher, otherwise you will have a bad time. So to reiterate, the code is on GitHub, but also on PyPI. PyPI also has a link to the documentation and to a very nice tutorial. And that's it. Thanks for your attention. APPLAUSE The next speaker is Alex Apolsky about antifragile, and after that, Josie, you're next then. APPLAUSE OK. So I wonder how many of you have read any books or articles by Nesim Taleb, like the Black Swan or antifragile. OK, I see some hints in the audience. And I'm going to give a talk, a kind of more philosophical approach to Python. Well, Nesim Taleb is a kind of intellectual thinker who speaks about probability theory, about risk management, and how we can gain from instability from an unstable world. So the first book of his, of him, was Black Swan. It's about rare events that occur in our life and can change it completely, and that these events are not predictable, but we somehow should prepare for such events. And the second book of him is antifragile, is specifically about algorithm, how to deal with things that we cannot predict. There must be some way how to survive in unpredictable future. And in programming, we can speak about some problems that can occur to our code, to our system, and to our product in general. So three terms that he uses are fragile, antifragile, and robust. So fragile is a system that can break, and if it does not break now, it will break later and will cause a lot of, it will cause a lot of problems. So there must be a way to prepare, and we can think about what properties of such systems could be at the level of code, at the level of, say, Python module, at the level of application at all. So, for instance, ORM porting is fragile because if you, for example, change ORM, you have to redo all the application. If you do a product in a non-agile way, it's a problem too. Suddenly customer asks you to do something and you cannot deliver the product instantly. So, and if you write some code and do not keep in mind that there is some context of product stability, like you need login, you need error tracing, it's not fragile. So please use some login, et cetera. So what is robust? Robust is login, robust is transactions, robust is when your application falls back gracefully, for example, nice error displays, or if a part of your applications go away, still some front page will be working and your customer will be notified. And antifragile application is something that's not totally robust, but is kind of good enough. So what I'm speaking about is in Alex Martelis terms good enough, but I have ported into Nesim-Telib's concept of fragile, antifragile and robust. So he, one of the main strategies that he uses is the strategy of what's this heavyweight instrument is called, I forgot, barbell. Yes, the barbell strategy. Basically this means that you have to do very robust things and not to do some new things at all if they can break the system. But if something new and something cool does not break the system, you should exercise it and add it to your system. For instance, do not run for new things, do something that looks very simple, very stable and very understandable. But if new changes and cool changes do not cost too much, well, feel free to do them especially if they do not affect big parts of the system. So exercise new stuff in limited contexts and do very stable and simple things in general. So this metaphor is especially good for new programmers. As they come to a company, I used it to explain to middle and junior programmers how they can fit various ways of thinking about the system they build together in terms of fragile, anti-fragile and robust... All right. After Josie talked about Pixie Desk to us, there will be more coverage. All right. I see you. Do you want to use that microphone? If you look at that screen, you can see that everything is fine and they just need to switch it. Come on, guys, wake up. We are ready. Thank you. Hello, everybody. My name is Josie. I'm 13 years old. I come from Zagreb, Croatia. I got a scholarship from the Django Girls. So this is how I'm here. This is my group from the Django Girls project on the first day. And what is Pixie Desk? It is my idea to help girls from 13 to 18 start from being consumers to becoming producers of technology. So I think the big problem with technology for girls and teenagers my age is that we love it so much that we overuse it and we do not try to produce. So the consuming and producing would be 90, 10% and not 50, 50, which should be. I sometimes have this problem. I can be on multiple screens at one time and get lost in it for hours and then at the end of the day I feel so guilty that I didn't spend my weekend or day very well. My mom knows to call me a technology zombie because I can't get my eyes off of the screen. I'm just like, where am I? What am I doing here? So my solution would be bringing these girls from smaller countries because I'd like to start small than to big places because a lot of these companies have great ideas but start very big. They want to add big details, big, you know, get press and everything. And then they lose the money and go bankrupt, which I don't think anyone wants. So it's better to start small and grow, level up. So the resources that I need would be teachers, slash experts, sponsors and of course hosts. Yes, so this is my story and anyone can be a part of it. Thank you. Thank you. Dima Tijne, are you there? Excellent. For everybody who just joined, the organizers would like to stay you after the lightning talks. They want to do something and they need to be here. The more the better. Hi, everybody. I'm here to invite you to WebCamp. It's a conference in Zagreb, Croatia. It's organized by local user communities. And it's pretty awesome. So at this point, everybody asked me where I was. So it's in Europe. It's not far away and it's generally good enough connections to get there. So what's going on there? So in October, we will have for the third year in a row WebCamp conference. There is no specific topic, but all local user groups like Python, JavaScript, PHP, Ruby is involved. And I would like to suggest to you to submit your talk because it ends next week. And it's a great environment. Last year we had around 600 people. This year we are expecting around 800 people. So there are two parts of WebCamp conference. The first part is a week of WebCamp where local user groups have their meetups, smaller conferences and talks. And it's generally really relaxed. And I think everybody would enjoy it there. And the main event is WebCamp conference, which is something that everybody wants. You can expect talks about Elixir, Erlang, Go, Clojure, Python, JavaScript. Everybody can find something interesting. So once again, call for papers ends next week. So if you want to come, submit it. There are two places where we have this thing. First, smaller, for around 150 people is in the first picture. And the main event is like in a congress center similar to this one. And you can expect an audience of about 800 people this year. So just to confirm that it's a cool event, you can expect any kind of stuff to happen. And please consider coming. It's one of those small communities that are building a nonprofit conference and it's really cool. So see you in October. That's it. Thank you. APPLAUSE The next one after that will be Tosten Rehn. Are you around? Oh, there. OK. My name is Dimitri Snick and I hate testing. I know it's not a popular thing to say, but I'm here. We are pretty cool stage start-up. We are hiring in Bosnia. And I live in Bosnia now, which is really close to Berlin. We've got awesome developer Python club stuff. Please check us out. So now to the actual thing. So I had testing, but I'll leave that for later because I've got a lot to cover. First of all, let's see some code. So it's a real code. All names will change to protect the innocent. And as you can see, it has 100% code coverage. And first I have to say that coverage.py is awesome. It's at least five years old and it survived a lot. It is still being maintained. Now let's see what was the unit test that actually created this 100% code coverage. It works like this. In other words, only the function signature is tested at all. So what can we do about this? There is a formal thing called mutation testing. Unfortunately, it's not that great in Python, but it exists. There are two packages, PyMuteTester and MutePy. I hope I pronounce them right. PyMuteTester is dead. It's for Python 2 only and it doesn't work for me at all. MuteTester, on the other hand, is workable. It does work. It does work. It's only for Python 3. It produces results in very unintelligible format. And it requires unit test case which nobody should use anymore. So let's see how it works. First, let's have some simple test. Let's say this is code. We are testing it somewhere. We've got a decorator. We've got a context manager. We've got some logical operations. We've got a branch. And then let's run it. We give a magic command. Get a lot of output. What does it say? It says it tried 15 combinations of how to change my code and test it if my unit test still pass. 14 of them were killed by this unit test. So these changes were invalid. One of them survived, which means there is an alternative bit of code that still passes my test and that is a problem. Let's see how it looks like. So apparently, removing this decorator doesn't change anything, which I sort of expected. On the other hand, this lock is not tested anywhere either, but it didn't find it. So this tool is not perfect, but it exists. Moving on. In an ideal world, let's build a system that connects to a GitHub, takes your code, and if all your unit tests pass, or in fact all of your tests pass, it changes the code. It could do it in any way. It could be exhaustive search. It could be artificial intelligence, mechanical torque, whatever. But if your code is simple and the test pass, let's just issue a pull request right away and let the developer figure out whether the simplified code is actually better or maybe they need better tests. So I hate testing. Now for some fun. Amazonbee. You've seen this image at a keynote talk. I'm not a corporate drone. I'm a different kind of a zombie. I'm a zombie for a reason. I like brains. In fact, I believe that programs have brains and people that work with have brains and they're actually smart enough and we should not be constrained to some ridiculous systems. We chose a dynamic language for a reason. So while on the subject of keynote, both with polito's push for type annotation is completely misguided. Nobody said anything but whatever. Okay. If you want to get in touch with me, just remember my nickname. It's Jimo QQ. Jimo GitHub, whatever. It searches the Googles. That's it. Thank you. Thank you. Hi, everyone. So by now people get annoyed when you use tag lines that end in for humans. So there I fixed it. But I really want to talk about config management. There are a lot of config management tools out there. The most popular ones are probably Chef, Puppet and Ansible. And they're really great. They're really the workhorses of DevOps and have made config management in general somewhat popular. But I wanted a pony. A pony that is a tool rather than a solution, if that makes any sense. For example, I didn't want to maintain a server component. Also, having to install an agent on each node before you can start to bring that under management is kind of a pain, especially when dealing with legacy systems. And the same goes for SSH. I really want to use that as a transport and authentication mechanism because it's already there. Beyond that, I was also wishing for an interactive mode and a nicer command line UI that allows me to carefully review and pick each change that I make to an existing important critical system. And I really wish that PyPen was the only language I needed to know in order to use it. Last but not least, there's item level parallelism. This is a big one, actually. What that means is I wanted to continue working on small things like config files while it's installing, for example, a system scratch on the same node. I don't think any system currently does this. They all just work out a linear order and then go step by step. So about two years ago, I started hacking on this just for fun. And roughly 12 or 13 months ago, I threw it all away and started from scratch. So for the past year, a friend and I have been working on this and we're really trying to design a config management system that is extremely minimal and probably dangerously dynamic. Here goes. What we see here is just a file that has a dictionary in it that tells us there is a node called TARDIS and it has the MOTD bundle. Easy. Within that bundle, we have a file called Etsy MOTD with some inline content. You can also use templates, of course. Now, this is all just Python, which makes it very easy, perhaps too easy, to import and inject any data you like. It also makes for an interesting learning curve because you start out as a command line tool with a sort of JSON-ish configuration. But it quite fluidly transitions to feel more like a framework once you start to build these dictionaries dynamically. This is interactive mode. You get a nice color diff for this change in a file and can carefully view what you're doing. There's so much more features and bells and whistles to this that I can't show you right now. But just a few days ago, I tagged 1.0 of our tool called BundleWrap. After about 16, I think, alpha and beta releases. You can find out all about it on bundlewrap.org. There's more information, a quick start tutorial, and just generally everything you want to know. If any of this is even vaguely interesting to any of you, please come talk to me. If you just want to yell at me for reinventing some parts of Ansible, that's cool too. I'm here until Friday. You can find me as Tirain on GitHub and Twitter. Thank you very much. Simon Piazki, are you around? You ready? Yes. So I want to talk about a trick that helps us to keep code more clean. So sometimes we want to have to write such strange classes that if you see they are quite similar and the code is almost identical. So what we can do with that, actually this is a SQL alchemy class and SQL alchemy allows us to write this code by inheritance using the declared utter decorator. But I don't like this because it is too verbose. So let's revert and let's see what we can do with that. So as we know, Python classes created, its body is executed, and the result of that execution is passed to type. And the main difference between the function and class bodies is that function body can be executed many times. And so we can just move body from function, from class to function and call type in decorator. So here it is. This decorator do some trivial stuff. It just calls constructor and passes value to type. And returns to class. But there are some things that I don't like. For example, return locals. And I want just to remove it. Can I do this? Yes, I can. So. Revolved. Here is. And it's working. I just create two classes by decorator. These functions look like class. They behave like class. Probably they are class. So how I done this? I never met this before. It is a decorator that actually executes a function and extracts local variables at the end of execution. So I don't want to tell about how it works. So and we use it in real life. Like that. Here we have models. And we create similar models for different languages with little distinction. So here it is. Okay. No, I don't. Sorry. Simon Richard. It's your turn. Okay. So I would just like to tell you about some design flow that is with get at with the default argument and also has at. And why you shouldn't rely on these functions too much. We created a nice base class which is called character. And we created a function that is called get quote. It nicely formats some quote of this character. We also subclassed it. And we can see that it works here very well. We also think about ourselves. We are so smart because we can handle the situations where there is no quote. We know that Sir Ilympain isn't very talkative for some reasons. And here we handle it. Sir Ilympain won't say anything. So it's okay. Then we can add another characters. It also works very well. And we are very happy. But then we want to do something more. We just think that there are too many good quotes by Tyrion Lannister that we don't want to choose one of them. So we use the random module and we use random choice to select one of these quotes. We are doing this and what happened? Okay. Who saw this coming? Who saw that this would behave like this? Exactly. Not a lot of you. Okay. Who can tell me now what really happened here? Yes, there is a typo. But can we see from the behavior of this program that there was a typo? We can't. This typo here would raise attribute error. This attribute error would be silence. It would be called by this get-at. And we got our error silenced. This is something completely against Zen of Python. And this is something that makes it very hard to debug. This example here is super simple. But you could have this error raised some 10 frames deeper and you could spend two hours on debugging sometimes. It happened to me. So this is not a good way to do it. Now let's see if we change this just a little bit. Here we don't rely on get-at. We just set quote in our base class to none. And we check if it's still none or if it was changed in the inherited class. And now we can see, oh, snap. I made the typo. There is choice, not just. And if we... This is a thing that we can fix in two seconds and it works now. So if you don't have really, really good reasons, just don't rely on get-at and has-at because it can produce these kinds of very, very hard to debug problems. Thank you. APPLAUSE Antonio Ognio, are you around? All right. Richard, was it okay that I did not write your talk for you? Where is the... Oh, there it is. Okay. Where is it? Oh, there it is. Wow. Now I have to... Oh, wrong way. I think that screen is on your left side. Your down... Oh, got it. All right. So much for changing the plan at the last minute. Okay. That was a great idea. All right. Everyone can see that? Is that big enough? Yeah. All right. Good. So... Oh, that's the wrong one. So what I was going to start with was this... Oh, you want to... Cheers. So I was going to start with this golden rules of lightning talk thing, which was going to be really, like, ironic because, like, the first rule we all know, don't go over five minutes. The second rule, don't do live demos. But then everyone's been doing live demos. So... Well, I'm going to do my live demo now. Don't forget a piece of paper. That's rule three. Okay. So I'm going to show you a couple of... Just a few little things, however much I can fit in the five minutes. The first one is a module called E. Who's heard of the module called E? You don't count. You wrote part of it. Okay. So pip install E. All right. Off we go. So E is a rather funny little module. It's designed for the minus M command. So Python dash me. It's got some basic functionality. It can do evaluation of the pass... What the... Oh. This is why you don't do live demos, eh? All right. Let's try that again. Pip install E. All right. There we go. So it evaluates expressions you pass on the command line. It can do all sorts of stuff like import this and things like that. So that's really neat. One of the other things it can do which is kind of nice is say we're doing some Flask development and often when you're doing something like Flask development or whatever, you get a bit lost in the documentation. You have to kind of poke inside Flask to figure out how things are working. So one of the things that the E module will do is tell you where Flask is. So dash me and a module name and it gives you the location of that module. And so we ask for the Flask.config, for example. It will tell us where that is. You can also then say less and it will fire up less with the module so you can then have a look at it. Or if you say Vim, you know, it's in an editor which is kind of nice. It's just very handy if you then need to like insert and debugging into Flask to find out what the hell is going on to your program. So that's really neat. Now, who noticed some funniness when I was doing the pip installs there? Did anybody see how, I don't know, blazingly fast that went for a computer that's not even online? So the magic there is a thing called DevPy. Who went to Holger's talk today? For the rest of you, you should have gone to Holger's talk. DevPy is really cool. So you pip install DevPy and it's spelled pip install DevPy. It's already there. So it's going to say whatever. Okay. That installs, I've got plenty of time. Okay. So then you run DevPy server. Actually, I think it's already running. So, yeah, it's already running because I'm using it. So I'm going to stop it. Okay. When you start it up, it says cool, running, and there's a URL. You then run a command which is, oops, sorry, flip thing, DevPy use set config. This is all in the very basic startup help. You don't need to remember this. And that URL. Let's grab that. Okay. And that sets all of the configuration things that need to be set so that your pip commands and everything else will now start using your local DevPy server. What that means is it's a proxying cache which basically means every pip command you do, anything you install will be cached by DevPy locally. So subs will install commands, use the local version. Really, really, really fast. And it's trivial to use like I just showed. I've got 48 seconds. I'm going to show one more thing. All right. This, all right. So one of the other things that I do is I volunteer running the Python events calendar and Python user group calendar. And what I thought would be interesting yesterday was I grabbed all the calendar entries because I realized we were getting kind of busy lately. I grabbed the calendar entries and I grabbed the locations and I plotted them on a map. That's all the py commons. That's the, that are in the calendar. I chucked the user groups on there as well just for laugh. There's a few of us now. And that's my time.ику how enrollment. in the Yeah, what is it taking such a long time? Yeah, well I showed them. Do you have it? Yeah. Yeah, so that's what I asked. Okay. Okay. Okay. Yeah. Okay. Hello, my name is Antonio. I've come all the way from Peru, South America to this conference. I'm very happy to be here. And I want to talk about wrestle microservers with Python. So we need to ask first what is res anyway. Not everybody knows that answer very well. What is a microservice architecture? And what is it a good idea to write or build this kind of thing with Python? So what is res? Res stands for representational state traffic that doesn't tell us very much. In practice what res is is a way of taking full advantage of the existing web-related protocols and technologies. I mean something like web proxies, application firewall, client libraries and stuff like that. In order to manipulate objects remotely. That's what it is in practice. Taking consideration that res was not invented. It was reverse engineered after the existing weapon knowledge in 2000 by Roy Fielding, one of the original authors of the HTTP 101 specification. It requires for you to include links so your API is browsable. And most importantly, it requires you to respect the actual semantic of each verb. Like for example, you can never just get in order to make a change in the server side. If you are thinking that res is only mapping the crude actions to an HTTP web-ware, you are wrong. It's more than that. Please educate yourself a little bit. There's a lot of information on Google about this. So for example, there are more than 15 status codes that you should regularly be returning. Not just 200 or 404. In order to know if you're doing this right, for each resource, which is for each unique entity in your problem domain, you should be having only one URL. For example, you should be including a home document. A home document with links to all the other available resources. There are many rules like that, including hyperlinks. For example, if you make a search and you don't find the date in your search report, you should not return 404. You should return 200 with our resources explaining that there are no available results. So for learning more about these status codes, this is a website that really helps a lot, HTTP status.es. Please grab your copy of Roy Fielding's dissertation. It's a PDF. It's very easy to read, actually. I really like it because it compares this architectural style to others, and takes many chapters to justify why REST is a good idea. I also have a talk about this in English. REST for the rest of the fact. Just please Google it if you're interested. And these two books that other speakers have been mentioning during this conference are really good. So microservices. Basically, microservice is building a larger system or larger service, piecing together smaller services. Very much like doing a match up using APIs from Twitter, Facebook, and the like. The most important thing about this is that they have to be highly reusable, self-contained, conceptually simple, and easy to maintain. Instead of making a big monolithic system and having different people with different skills to agree on a system, you basically build cross-functional teams, like for each department. Each department builds its own web service, and you just use them together. And each one can have its own agile development cycle independently. So even when you deploy that, instead of having one huge process with all this functionality, you can have each functionality in a different process, which is far better for reliability issues. So what are the advantages of microservices? The most important thing is that once that you have defined an API, you can build the internals. You can rebuild the actual implementation without breaking anything. Other than that, only one developer can maintain the code because it's really simple. Martin Fowler, the very famous Martin Fowler, has been written about this. There's also a conference coming this November in London, which is very interesting about this. And why Python? Well, the most important thing about Python is productivity. You really have to prototype these web services. Camille, are you around? Excellent. You're next. And again, a reminder, at 5.30, there's a small surprise happening here. One note would be to keep some battery life in your computers. That would be nice. All right. I'm from Switzerland, and I'm actually not here to show you something, but to ask something from you. So we recently founded a new hacker space in my town. And one of our goals was to improve education and to, like, get children into technology. And one way to do that is in Switzerland, many primary and secondary schools offer something like a vacation program for children. So they get a vacation pass where they have many activities to choose from during the vacations. And we want to offer one of these programs, and I want to offer a programming workshop. So we thought about how to do this. So, um... Probably most of you know Minecraft, and probably even more children know Minecraft than you. There's actually something called Minecraft Pi Edition, and it's free. And if you have a Raspberry Pi, you can just download the binary and run it. And one of the good things is it's actually scriptable, so you can program the tiles. You can create a new block at a specific position. And the good thing is if you give one of the kids a Raspberry Pi and install that down there, you can actually go home, take the Raspberry Pi with him, and continue programming it. So my question is, if you have any experience with this kind of workshop, if you have good ideas, if you want to know more, then please contact me. And basically that's it. Thank you. Fernando Massanori, are you around? You'll be up. Good to have you after that. You ready? Yeah. All right. Hi. I would like to tell you about a tool, a tool for developers which I created. This tool records requests of web services. A basic idea of this tool is that all the time we call web services, we have to XMLs like request and reply. And to record them, to use them or record them, we can use XSLT transformation. There's web service. If we work with web service, there can be many times inaccessible. They're not, especially if you work with developer web services. So this can be really helpful if you use it in Dev mode. How it works. When you use web services, one, it's already working. It's record to the saved samples based on the config files. And when there is problem with web service, you can use service mode to use web service without noticing that it's not there. Right now, I will show you short demo. And here is three calls to the web services. This web service is really simple. It's just changing request to the reply. And I will call here. It creates this file which is recorded sample. Here is this response for this service. In the configuration for this message, we need to configure based on which parameters we want to create reply. Which parameters will be used in creating reply based on request. And all of them are used in this other sequence conditions. If you call more request, this file enlarges and there are other parts of it. If to prove that it's already serving from this. I hope. If we call web service again, it serves with changed files. As well, if you want, if web service has some errors, you can fix it in this sample files. Okay. Come back. I created a few configuration modes. Mostly, it's mix of recording and serving. And there is also transparent mode when it looks like there is no recording at all. So, what I'm already working on is implementing more, implementing XPAP2 functions which are not present in XML. But they can be very helpful if you create configuration file with this nodes. But it's just library only for the functions, not for them. And also, to not use whole blocks of XML, you can use nested nodes. So, it could be more complicated configuration file. In the future, it would be nice to create some support for rest and JSON. But unfortunately, JSON and Dress don't have such mature standards for XPAP or XSLT. Yeah. That's it. All right. Peter, are you here? Somebody is missing. Peter? Yeah. So, if Peter isn't here, then the next one would be Philip Kledzik. That's you. Excellent. Hi. I'm from Brazil. For the first time, by ComBrasil, it will be on the beach. Porto de Galinhas was voted by Magazine Best Beach in Brazil for 10 times consecutive. This is the venue of conference. The other thought. This is the Python community. Some speakers. And I invited you to submit call for papers are open. Thank you. Thank you. Jim Baker. Okay. I see you. I'm getting a little tired sitting and just for as a recommendation for you, just everybody, stand up once. Please stand up once. Stretch a little bit. We've been sitting for an hour consecutively. I don't want the other speakers to think we've all fallen asleep. All right. Some yawning. Okay. Thank you. Okay. Hi. I'm Philip Kłębczyk. I come from Poland. I wanted to talk about Python PL. Another Python. A little bit of history, but very fast because we don't have much time. Mostly photos. It started in my home city. We already had on the first edition over 100 attendees. Then we moved it into remote locations like mountains where weather in October is different depending on the year. We had a lot of attendees. Well-known people like from projects like PyPy. There's a very good atmosphere on the conference. We have three days of talks currently even four. We have different one-on-one speakers on the conference. We also have anniversaries. We do a barbecues in things like that. Yeah. Eyebrothers. And now we scaled up up to 300 attendees. We also have all the meals together because they are included in the price of conference. So let's talk about the current edition. So it has three to four days depending which option will you choose. It has three tracks, one full English track. We are ready for up to 500 attendees. We have parties and discussions all the time because all the attendees are in one place, in one hotel, which is awesome. And the prices are very low, I would say. And that includes accommodation and meals. So where the hell is Sturk? We always choose places that have difficult names because we love tongue twisters when people from US say, It's Sturk. So it's in the center of Europe. Look on this map. And near the border of Czech Republic and Slovakia. It's actually Besky mountains. It's southern Poland. How to reach? So there are nearest airports are Katowice, Krakow and Ostrava in Czech Republic. Ostrava is the closest one but has only flights to London and Paris. There are also Euro city, Euro night trains. You can also take a bus if you prefer buses with Wi-Fi on board. We will have over 50 talks and workshops. And at least half of them will be in English. Here you will have some of the speakers but the screen is too small to have them all on one slide. We don't have call for proposals because we've ended it two weeks ago but we have call for workshops proposals. So you can still send as a workshop proposal and if you will be accepted you will get a free ticket. There will be also communities from other countries on Pycom PL, some from Czech Republic, Slovakia, Ukraine and Belarus. I want to add that Pycom Belarus is the first Pycom in Belarus. So I recommend to support ladies that are organizing the Pycom Belarus. So we have an offer. If you are organizer of Pycom you can get one free ticket. It doesn't matter if it's Pycom Brazil, Finland or whatever or Pycom Germany. You can get a free ticket with accommodations and meals. So please contact us at Pycom PL at Pycom.org. And follow us on the web, so on Facebook, Google, Twitter, YouTube, so on the social services. That's all. I've made it. APPLAUSE I'm being totally naughty. If you are an organizer of a Pycom, please send the details of your conference to the Python Events calendar that can be in the calendar and everyone can know about it. APPLAUSE I got it. Are you around? Oh, well done. All right. APPLAUSE Can you see me? Hi, so I'm Jim Baker and I'm going to be talking about the state of Jethon. And I have 22 slides in less than five minutes. But I'm going to be talking about the state of Jethon. Because we've been doing so much work. It's under extremely active development right now as we're trying to close to get to final release by Q4. So I found in this development, along with all the other core devs and committers, that the language changes were pretty easy. It's the run time in libraries that we've definitely spent our work on. We can way more pages on the A and the script. The internet micro system is our current focus. Some stuff we're talking around GIB. You need to use Java 7. We have some interesting functionality. For instance mix Python and Java types. for interesting efficiencies, so on and so forth. There's this new work called Socket Reboot which re-implements the standard Python socket module as well as adding support for SSL and real support for select using NetE4, which is quite a really good event loop package for Java. And I would hope we would eventually use it for async.io support as well. So here's a good example of what we're using to actually provide socket support today. You can see it's actually just Python code binding to this NetE package. It actually is able in a very small function which is slightly cut off here to handle all differences between non-blocking and blocking with any timeouts for a given socket. This enables requests. So you can now use with the latest version of Jython, certainly what's in trunk, this popular client. And since it's used by PIP, this is really good. PIP used to work, but because of this change to using request and also the support for SSL that is now required when working with PYPI, this was important for us to do. We almost have this complete and it should be in the next release of PIP. Regular expressions used to have some problems and were slow. I heard someone talking about a potential cherry pie performance. I don't know about your specific case, but this might actually fix it for you. It was really cool to see this great commit by someone who contributed this, Indra Tullip. We are now also developing stuff outside the usual release schedule in Jython. So for instance, I'll talk a little bit about Clamp and Jiffy. There's also this new fireside, WISGI bridge to work with several containers. We've had that in the past, but this knows about site packages and is PIP compatible and is really nice in that fashion. Clamp allows you to directly import Python classes into Java. What does that look like? Let's say I had this Python class that extends some Java interfaces. Really simple. It's really implementing the callable interface. You add two lines here in terms of being able to say from Clamp import this Clamp base, Meta-class factory, use that Meta-class factory function to generate your bar base and then you add this bar base to your list of bases for that class. And now with just one more step in terms of in your set of tools using Clamp, you can go and this is now Java code. Sorry to show this to all of you here. That here you are directly importing a Python class into your Java code without any additional work. Just one line. How's that? It's pretty awesome. And Darius and I, he did a great job working out this with, you know, it was fun. So Jiffy were planning to provide CFFI support. There's this interesting patois. Jainai is a project that allows C extension API support. There's going to be a sprint on this in auction on Monday. We're also having a sprint on Saturday about Clamp. Again we're planning to get a beta four out. Release Canada is as needed. Mostly this is about going and there's obviously if you, for what we want to do, Java integration is key. Java nine is going to add some additional support. And what about Jython3a.exe? I'll let you guys read this as my time runs out. And some blomberg, are you here? Excellent. You next. Peter Koppatz, did you arrive here by accident or purpose in between? I'm going to pass it over to him, yeah. There you go. Okay, Paul. Okay. Can you give me the system settings? It should be. I mean, it doesn't have an html. It just has this one. Yeah, yeah, yeah, that's okay. Yeah. That's okay. That's okay. Yeah, yeah, yeah. Yeah, yeah. Yeah, yeah. Is it built in digital? No, it's not digital. This is HDMI. Do you have another adapter? I think I have one. It was just a matter of time. Yeah, yeah, yeah. Yeah, that's good. What do you mean? Yeah, analog. That's code of conduct. Okay, hello guys, I'm Agata, and I just want to have a short talk about how to make Python more sexy. The idea is pretty simple. We just have to improve Python to be more sexy. So let's start from the beginning. We can just simply improve packaging. Just guys use Python gems. And of course, improve parallelism, like replace the Jil with V8 and use more callbacks. What about the style of Python? Adopt an explicit Java-like naming convention because readability counts. And of course, guys, it's really simple. Just use more globals. No imports. Use file includes. And just build in carrying. And after all this stuff, I just want to say you one more thing. I was just kidding. Python is as sexy as it can be. And it cannot be more sexy, guys. And I want to thank you so much to inviting us for our Europe Python conference. And we just love you. And I hope to see you next year. And of course, I hope to see you in a shterk because Python Poland is waiting for you. Thank you very much. Thank you. Thank you. Thomas, you're after that. And again, there will be something at 5.30 where you need your computers. So save battery or plug in. I hope you've got the mobile phone and the tablet with you. We'll put those to some good use later. You're ready? Yep. All right. Hey, guys. My name is Anton Blomberg. I'm in my Swedish distributed systems gig. And I want to talk about parallel execution. Well, everybody knows there's a gel in Python. And therefore, as Pythonists, we're not very used to dealing with this concept. And, well, if you actually could do parallel execution, why would you? Well, of course, increase the speed of your program and reduce the latency. And maybe why would you not? Single-fared programs, they're easy. Multiple threads, it's really hard. And why is this? It's because you introduce concurrency into your programs. It leads to race conditions, deadlocks, and all sorts of nasty problems. They're really hard to debug. So what you do, you add locking, synchronizing, and then your code base is so hard to understand. But there is an alternative to program systems that's running concurrently. It's the actor model, which is a very old way, has been around for ages, where you do parallel concurrency without locks. So this is not your regular threaded model, where you acquire a lock and do your stuff, release the lock. Everything is done in independent share-nothing tasks. This is a bit similar to all the G event tasks with libraries, Node.js, blah, blah, blah. But this is more a way to organize your code to make it easier not to lead you into callback help. So what you do is you communicate by passing messages between these actors. And every actor is in itself like a process. It has a shared nothing with all the other actors. The only way to communicate is to send a message. And all messages are sent asynchronously and put on the queues for incoming messages for all the other actors. Since each actor can only execute one piece of code at once, you cannot go into race conditions because everything is in itself atomic. An actor can only receive one message at once and process it. So what you get with this is execution transparency, network transparency. As a coder, you don't need to know where your code is executing, in how many parallel threads it executes, or if it actually executes on another system, on another machine. So what you actually get is distributed systems for free. So if you want to, if you like Python, then maybe this is bad news for you. But the PyPy SDM, it actually has potential to bring this into Python. What it adds is parallel execution if there are no conflicts. And in an actor system, there is a shared nothing architecture, which means no conflicts. This means you can run Python code fully parallel on all cores. So what I did yesterday after having a couple of beers, was actually try to implement this in a Python only implementation to make use of an actor system in a fully distributed parallel environment on PyPy SDM. And well, it kind of worked. So it's not a library, it's a proof of concept. What they basically did was implement Actress, a multi-threaded, fully parallel event loop. A lot of buzzwords, but it's not your G event event loop that you execute in synchronicity, but sharing the time between tasks. You actually execute fully in parallel. Since actors share nothing, you can process the cues of the received messages in parallel and do all the actors on all cores. So what they did was basically give the application developer a generator statement and receive a new message with a yield and built into the language. You can now receive a message in a synchronous manner and execute fully in parallel. So it works in C Python. It's totally regular Python code and it shines on PyPy SDM, well, kind of. The overhead is still high on SDM, but it actually improves the more cores you add. So as a fun exercise, I also implemented pure Python-efficient immutable data structures like an immutable dictionary which gives copy and write semantics but doesn't actually copy anything. So you can find this at if you go to deadlock.se where there's a link to the GitHub so you don't need to remember it. And if you like distributed systems and see the potential for Python to actually run stuff in parallel in the future, donate huge amount of cash to the PyPy SDM guys and give these guys a round of applause. Christoph Neumann, are you around? All right. Can you make it in four minutes? All right, that's excellent. I have two announcements to make. It's both related to having private email. And to begin with, we'll make a GPG, PGP key signing. It's right after the lightning talks and surprise thing. So we meet at 1745 in the basement in the lounge area where there was so far and that stuff is. And just look for me and for Arnold Grille, we'll kind of lead this. And if you need another motivation after the first keynote, and if you still think you have nothing to hide, this is the slide for you. So what can we do if you don't use any GPG yet? Maybe in reality, you don't have private email yet because they are reading your email. It's not because they are especially interested in you, but just because they are reading all email. That's not encrypted. It's easier than you think. If you want to start right here at Europe, Python, we will have another event and it will be in the bar camp. And we will have a small crypto party. You just come there with your laptop, have Thunderbird installed, and we'll help you to get GPG going and to create your keys and so on. Just meet us there. We'll try to make a session about this. You can also use another email client. Just make sure there is some sort of GPG support for it. So for the key signing for the event today at 1745, what do you need? You need a PGP key, of course. It's a key signing. You need your name, email and key ID and fingerprint, for example, on such paper strips or on your business card. Alternatively, you can also have this data just on your laptop screen if you don't have any paper with you. Then you need a valid passport or ID card. So the procedure will be about like this. We will just row up in a kind of circle, but it will be a flattened circle. So everybody is facing somebody else. And then one guy will just verify the passport of the other guy. And we will compare the identities on the paper strip. And if everything is okay, you just take the paper strip and you can sign the keys later at home. You don't need to do it here. Then we just rotate right by one and the next verification step happens. And we repeat this until we all have checked everybody else. If you have no paper strips, you need this. Either you have a mobile client maybe on your Android phone or whatever. You can just show the key info page of the GPG implementation. Usually the info page shows your key fingerprint and then the other one can just make a photo of it so you don't need to exchange any paper. Also, if you have a laptop, you can just enter that command to print your key IDs, your email addresses, your name and also your fingerprint. Then just copy and paste it into a world processor and make it full screen so it's easy to photograph it. And then the other guy will just make a photo of it instead of taking the paper strip. What you need later is a tool called CAFF. If you run Debian or Ubuntu, it's in the package called Signing Party. And if you have a lot of keys to sign, that will save you a lot of work. You need a lot of work to set up that tool once because you need a local email server or at least some sort of relay agent. But it will save you a lot of work if you have done it once. Alternatively, you can also do it manually, but then you have more manual work. And the tool is rather easy. You just say CAFF and key ID, then it downloads the other guy's key from the server. You can also use the fingerprint so you can compare with the paper or the photo you have taken. Then you can sign each of his email. And the tool will automatically create multiple emails for all the email addresses you wanted to sign and sends each signature to the corresponding email. Yeah, this is the final slide for everybody who has maybe not seen it yet. It's from Germany. Thank you. So I'd like to get an overview of how many computers we have in here. Who has at least one computer with him? All right, that's a fair standard. You don't have to show me the computer. Who's got two? And computers, anything that has a CPU in it? Who has three? Okay, now that's the computer or smartphone in a tablet who's got four. So the fourth one, does that have network connectivity? Who has four with network? James, you are awesome. We need you. You're going to be a workhorse here in a minute. Ready? Ready. Let's go. Hi. My name is Christoph. I'm co-founder of Quantified Code. And what we do is we do data-driven code quality management. So we develop software, data-driven software that helps you monitor and improve your source code. And we are lucky we got a funding from the German government. And so we can, for the next year, spend our time without a lot of business pressure to build a great product. And I'm here today to ask you to help us to give us feedback and to check out our first alpha version because we want to build something that really matters and that really is going to be used by the community. So what we are striving for is basically we want you to check in your repository on our website. Then we will offer you continuous check and monitoring of your code quality. And finally, we want to not only check the code, of course, but we want to display results. We want to give you suggestions. And in the final state also offer you automatic improvements to the code. How do we do that? Basically, we apply machine learning algorithms to a lot of source code. Basically, to most of the source code you can find open source and GitHub. Where are we right now? So as I said, we introduced an alpha version. So we can already check the source code of open source, public Python repositories on GitHub. And you will already get commit by commit a report of what has changed. Did you add bugs or did you fix bugs? So let me show you the website. So this is basically our alpha version. So what you see here, if you visit our website, is basically you get a list of all the projects we already crawled on GitHub. So you can let's go into one of them. There is, by the way, no sign up needed. You don't need to do anything. It's all the projects can be used right away. And now you get an analysis of the mistakes and errors in your code. How did we do this? As I said, again, it's an alpha version. It is the first step. So what we did is we used common linters, pyflakes, PEP8, and so on. We checked if the messages, they give you a relevant. We categorized these messages. And here you can filter whether the message or the error is a critical one, a potential bug, et cetera. Let's zoom into one. So you click here and then you go directly to the piece of code where this issue occurred. So now what I really love to get from you or anyone who's interested in static code analysis, code management, code quality management, or any programaries, now this is a simple alpha version. It has functionality. It gives you a few of your code, but I would like to know what are the features you really need? What do you need in terms of workflows? Where do we need to integrate into Jenkins or any other systems? What are the common mistakes you get from other linters which you would like to see solved? Yeah. Just reach out to us. We want to develop the product with you. All this is here free and will ever stay free for open source. And also, as I said, we got a government funding. We have free slots there. So if you're interested in working with us for the next few months on the cool product, then get in touch with me. Thanks. All right. Was that a good set of lightning talks today? Was it? Thank you.
.  Nevertheless, we're going to have another 90 minutes of lightning  talks, and it's going to be packed. I want you to stay after  the lightning talks, though. There is something the organizers  want you to be here for, and I'm not allowed to say anything  more, except that having more people is better.  Mysterious. Anyway, let's get started with the  lightning talks. The first one is Stefan Nothausen, and he's  going to talk about NetAdder.  Hi, everybody. My name is Stefan Nothausen, and I will give you  a quick introduction to NetAdder, which is a library that  helps you to handle IP addresses, MAC addresses, and more.  I'm one of the main contributors, and you can find the code on  GitHub and also on PyPI. But first of all, I would like to show  you a new build-in that was added in Python 3.3. You can now  import IP address and IP network, and then you can do stuff  with IP addresses and IP networks because there are now  objects for that. So you can check if an IP address is in a  certain network. And there's more goodies. You can do  iterating, slicing, you can get the broadcast addresses,  NetMass, you can even do IP arithmetic. NetAdder provides  the same for you. We also have an IP address object, an IP  network object, and you can do pretty much the same thing as  with the IP address built-in of Python 3.3. So why would you  install NetAdder? Well, first of all, it supports Python 2.4  and Python 3.0 because not everybody has Python 3.3 yet.  And there's no further dependencies, no C-magic, nothing.  Second of all, there's more than just IP addresses and IP  networks. For example, there's IP ranges. NetAdder provides you  with an IP range network object. And you can just say, I  have an range that starts here, ends there, and then you can do  operations like, is the IP address in the cluster? You can  iterate over the hosts in your range, stuff like that. There's  also an object for handling MAC addresses called the EOI  because that's the official name of MAC addresses, extended  unique identifier. And the funny thing about these is that  there are so many different formats. Upper case, lower case,  different kinds of separators. Some people leave out the  leading zeros, but as you see in the example below, it's all  the same for the EOI object. They all get parsed the same.  That's the input. How about the output? Maybe you want your  MAC address to look in a certain way. That's why NetAdder  provides so-called dialects for you. One is the MAC Cisco  dialect. And you can just instantiate your MAC address, set  the dialect to Cisco, and then stringify it, and it will  look like a MAC address that the Cisco systems are using.  More such dialects are available. Customization is, of course,  possible. There's OUI, organizationally unique  identifiers, which are basically the first three bytes of a  MAC address. And you can ask a MAC address for its OUI and the  interesting part about the OUI is the registration information.  So in the example you see on the screen, the registration says  it's the Intel company from Malaysia. Always good to know  stuff like this. And by the way, this works without Internet  Access, the database is built in. Then there's sets of IP  addresses. Wait a minute. Set is a Python built in. Why would you  bother? Well, there's stuff like 10.0.0.0.8 and FE80.64, which  are just really big networks. And you don't want to add two to  the 64 objects to a Python set. That's not really fun. Here,  IP set comes to the rescue. You import the IP set, you  instantiate it, and then you can add IP networks, you can add  IP ranges, you can add individual IP addresses, and you can  mix IPv6 and IPv4 as you please. And then do the usual set  operations. Check for membership, for example. Or in the second  part, remove an address from the IP set. And even though that  splits the IP range that was inserted in two pieces, let IP  set take care of it. You don't have to. One disclaimer, though,  your distribution may ship NetAdri already, but please use  version 0.7.11 or higher, otherwise you will have a bad  time. So to reiterate, the code is on GitHub, but also on  PyPI. PyPI also has a link to the documentation and to a very  nice tutorial. And that's it. Thanks for your attention.  APPLAUSE  The next speaker is Alex Apolsky about antifragile, and after  that, Josie, you're next then.  APPLAUSE  OK. So I wonder how many of you have read any books or  articles by Nesim Taleb, like the Black Swan or antifragile.  OK, I see some hints in the audience. And I'm going to give  a talk, a kind of more philosophical approach to Python.  Well, Nesim Taleb is a kind of intellectual thinker who  speaks about probability theory, about risk management, and  how we can gain from instability from an unstable world.  So the first book of his, of him, was Black Swan. It's about  rare events that occur in our life and can change it completely,  and that these events are not predictable, but we somehow  should prepare for such events. And the second book of  him is antifragile, is specifically about algorithm,  how to deal with things that we cannot predict. There must be  some way how to survive in unpredictable future. And in  programming, we can speak about some problems that can occur  to our code, to our system, and to our product in general.  So three terms that he uses are fragile, antifragile, and  robust. So fragile is a system that can break, and if it  does not break now, it will break later and will cause a lot  of, it will cause a lot of problems. So there must be a way  to prepare, and we can think about what properties of such  systems could be at the level of code, at the level of, say,  Python module, at the level of application at all. So, for  instance, ORM porting is fragile because if you, for example,  change ORM, you have to redo all the application. If you  do a product in a non-agile way, it's a problem too. Suddenly  customer asks you to do something and you cannot deliver  the product instantly. So, and if you write some code and do  not keep in mind that there is some context of product  stability, like you need login, you need error tracing, it's  not fragile. So please use some login, et cetera. So what is  robust? Robust is login, robust is transactions, robust is when  your application falls back gracefully, for example, nice  error displays, or if a part of your applications go away,  still some front page will be working and your customer will  be notified. And antifragile application is something that's  not totally robust, but is kind of good enough. So what I'm  speaking about is in Alex Martelis terms good enough, but I  have ported into Nesim-Telib's concept of fragile, antifragile  and robust. So he, one of the main strategies that he uses is  the strategy of what's this heavyweight instrument is called,  I forgot, barbell. Yes, the barbell strategy. Basically this  means that you have to do very robust things and not to do some  new things at all if they can break the system. But if  something new and something cool does not break the system,  you should exercise it and add it to your system. For instance,  do not run for new things, do something that looks very simple,  very stable and very understandable. But if new changes  and cool changes do not cost too much, well, feel free to do  them especially if they do not affect big parts of the system.  So exercise new stuff in limited contexts and do very stable  and simple things in general. So this metaphor is especially  good for new programmers. As they come to a company, I used it  to explain to middle and junior programmers how they can fit  various ways of thinking about the system they build together  in terms of fragile, anti-fragile and robust...  All right. After Josie talked about Pixie Desk to us, there will be  more coverage. All right. I see you.  Do you want to use that microphone?  If you look at that screen, you can see that everything is fine  and they just need to switch it. Come on, guys, wake up.  We are ready. Thank you.  Hello, everybody. My name is Josie. I'm 13 years old.  I come from Zagreb, Croatia. I got a scholarship from the  Django Girls. So this is how I'm here. This is my group from  the Django Girls project on the first day. And what is Pixie Desk?  It is my idea to help girls from 13 to 18 start from being  consumers to becoming producers of technology. So I think the big  problem with technology for girls and teenagers my age is that  we love it so much that we overuse it and we do not try to produce.  So the consuming and producing would be 90, 10% and not 50, 50,  which should be. I sometimes have this problem.  I can be on multiple screens at one time and get lost in it for  hours and then at the end of the day I feel so guilty that I didn't  spend my weekend or day very well.  My mom knows to call me a technology zombie because I can't get my  eyes off of the screen. I'm just like, where am I? What am I doing  here? So my solution would be bringing these girls from smaller  countries because I'd like to start small than to big places because  a lot of these companies have great ideas but start very big.  They want to add big details, big, you know, get press and everything.  And then they lose the money and go bankrupt, which I don't think  anyone wants. So it's better to start small and grow, level up.  So the resources that I need would be teachers, slash experts,  sponsors and of course hosts. Yes, so this is my story and anyone  can be a part of it. Thank you.  Thank you.  Dima Tijne, are you there? Excellent.  For everybody who just joined, the organizers would like to stay you  after the lightning talks. They want to do something and they need  to be here. The more the better.  Hi, everybody. I'm here to invite you to WebCamp. It's a conference  in Zagreb, Croatia. It's organized by local user communities.  And it's pretty awesome. So at this point, everybody asked me where  I was. So it's in Europe. It's not far away and it's generally good  enough connections to get there. So what's going on there?  So in October, we will have for the third year in a row WebCamp  conference. There is no specific topic, but all local user groups  like Python, JavaScript, PHP, Ruby is involved. And I would like to  suggest to you to submit your talk because it ends next week.  And it's a great environment. Last year we had around 600 people.  This year we are expecting around 800 people. So there are two  parts of WebCamp conference. The first part is a week of WebCamp  where local user groups have their meetups, smaller conferences  and talks. And it's generally really relaxed. And I think everybody  would enjoy it there. And the main event is WebCamp conference, which is  something that everybody wants. You can expect talks about Elixir,  Erlang, Go, Clojure, Python, JavaScript. Everybody can find  something interesting. So once again, call for papers ends next  week. So if you want to come, submit it. There are two places where  we have this thing. First, smaller, for around 150 people is in the  first picture. And the main event is like in a congress center  similar to this one. And you can expect an audience of about  800 people this year. So just to confirm that it's a cool event,  you can expect any kind of stuff to happen. And please consider coming.  It's one of those small communities that are building a nonprofit  conference and it's really cool. So see you in October. That's it.  Thank you.  APPLAUSE  The next one after that will be Tosten Rehn. Are you around?  Oh, there. OK.  My name is Dimitri Snick and I hate testing. I know it's not a  popular thing to say, but I'm here. We are pretty cool  stage start-up. We are hiring in Bosnia. And I live in Bosnia now,  which is really close to Berlin. We've got awesome developer  Python club stuff. Please check us out. So now to the actual thing.  So I had testing, but I'll leave that for later because I've got a lot to cover.  First of all, let's see some code. So it's a real code. All names  will change to protect the innocent. And as you can see, it has 100%  code coverage. And first I have to say that coverage.py is awesome.  It's at least five years old and it survived a lot. It is still being  maintained. Now let's see what was the unit test that actually  created this 100% code coverage. It works like this. In other words,  only the function signature is tested at all. So what can we do about this?  There is a formal thing called mutation testing. Unfortunately, it's not that great in  Python, but it exists. There are two packages, PyMuteTester and MutePy. I hope I  pronounce them right. PyMuteTester is dead. It's for Python 2 only and it doesn't  work for me at all. MuteTester, on the other hand, is workable. It does work.  It does work. It's only for Python 3. It produces results in very  unintelligible format. And it requires unit test case which nobody should  use anymore. So let's see how it works. First, let's have some simple test.  Let's say this is code. We are testing it somewhere. We've got a decorator.  We've got a context manager. We've got some logical operations. We've got a branch.  And then let's run it. We give a magic command. Get a lot of output. What does it say?  It says it tried 15 combinations of how to change my code and test it if my unit  test still pass. 14 of them were killed by this unit test. So these changes were  invalid. One of them survived, which means there is an alternative bit of code that  still passes my test and that is a problem. Let's see how it looks like. So apparently,  removing this decorator doesn't change anything, which I sort of expected. On the  other hand, this lock is not tested anywhere either, but it didn't find it. So this  tool is not perfect, but it exists. Moving on. In an ideal world, let's build a  system that connects to a GitHub, takes your code, and if all your unit tests pass,  or in fact all of your tests pass, it changes the code. It could do it in any  way. It could be exhaustive search. It could be artificial intelligence, mechanical  torque, whatever. But if your code is simple and the test pass, let's just  issue a pull request right away and let the developer figure out whether the  simplified code is actually better or maybe they need better tests. So I hate  testing. Now for some fun. Amazonbee. You've seen this image at a keynote talk. I'm  not a corporate drone. I'm a different kind of a zombie. I'm a zombie for a reason.  I like brains. In fact, I believe that programs have brains and people that  work with have brains and they're actually smart enough and we should not be  constrained to some ridiculous systems. We chose a dynamic language for a reason.  So while on the subject of keynote, both with polito's push for type annotation  is completely misguided. Nobody said anything but whatever. Okay. If you want to  get in touch with me, just remember my nickname. It's Jimo QQ. Jimo GitHub,  whatever. It searches the Googles. That's it. Thank you.  Thank you.  Hi, everyone. So by now people get annoyed when you use tag lines that end in for humans.  So there I fixed it. But I really want to talk about config management. There are  a lot of config management tools out there. The most popular ones are probably  Chef, Puppet and Ansible. And they're really great. They're really the workhorses  of DevOps and have made config management in general somewhat popular. But I wanted  a pony. A pony that is a tool rather than a solution, if that makes any sense. For  example, I didn't want to maintain a server component. Also, having to install an  agent on each node before you can start to bring that under management is kind of  a pain, especially when dealing with legacy systems. And the same goes for SSH. I really  want to use that as a transport and authentication mechanism because it's already  there. Beyond that, I was also wishing for an interactive mode and a nicer  command line UI that allows me to carefully review and pick each change that I make  to an existing important critical system. And I really wish that PyPen was the only  language I needed to know in order to use it. Last but not least, there's item level  parallelism. This is a big one, actually. What that means is I wanted to continue  working on small things like config files while it's installing, for example, a system  scratch on the same node. I don't think any system currently does this. They all just  work out a linear order and then go step by step. So about two years ago, I started  hacking on this just for fun. And roughly 12 or 13 months ago, I threw it all away  and started from scratch. So for the past year, a friend and I have been working on  this and we're really trying to design a config management system that is extremely  minimal and probably dangerously dynamic. Here goes. What we see here is just a file  that has a dictionary in it that tells us there is a node called TARDIS and it has  the MOTD bundle. Easy. Within that bundle, we have a file called Etsy MOTD with some  inline content. You can also use templates, of course. Now, this is all just Python,  which makes it very easy, perhaps too easy, to import and inject any data you like.  It also makes for an interesting learning curve because you start out as a command line  tool with a sort of JSON-ish configuration. But it quite fluidly transitions to feel  more like a framework once you start to build these dictionaries dynamically. This is  interactive mode. You get a nice color diff for this change in a file and can carefully  view what you're doing. There's so much more features and bells and whistles to this  that I can't show you right now. But just a few days ago, I tagged 1.0 of our tool called  BundleWrap. After about 16, I think, alpha and beta releases. You can find out all about  it on bundlewrap.org. There's more information, a quick start tutorial, and just generally  everything you want to know. If any of this is even vaguely interesting to any of you,  please come talk to me. If you just want to yell at me for reinventing some parts of  Ansible, that's cool too. I'm here until Friday. You can find me as Tirain on GitHub  and Twitter. Thank you very much.  Simon Piazki, are you around?  You ready?  Yes. So I want to talk about a trick that helps us to keep code more clean. So sometimes  we want to have to write such strange classes that if you see they are quite similar and  the code is almost identical. So what we can do with that, actually this is a SQL alchemy  class and SQL alchemy allows us to write this code by inheritance using the declared  utter decorator. But I don't like this because it is too verbose. So let's revert and let's  see what we can do with that. So as we know, Python classes created, its body is executed,  and the result of that execution is passed to type. And the main difference between the  function and class bodies is that function body can be executed many times. And so we  can just move body from function, from class to function and call type in decorator. So  here it is. This decorator do some trivial stuff. It just calls constructor and passes  value to type. And returns to class. But there are some things that I don't like. For example,  return locals. And I want just to remove it. Can I do this? Yes, I can. So. Revolved. Here  is. And it's working. I just create two classes by decorator. These functions look like class.  They behave like class. Probably they are class. So how I done this? I never met this  before. It is a decorator that actually executes a function and extracts local variables at  the end of execution. So I don't want to tell about how it works. So and we use it in real  life. Like that. Here we have models. And we create similar models for different languages  with little distinction. So here it is. Okay.  No, I don't. Sorry.  Simon Richard. It's your turn. Okay. So I would just like to tell you about some  design flow that is with get at with the default argument and also has at. And why you shouldn't  rely on these functions too much. We created a nice base class which is called character.  And we created a function that is called get quote. It nicely formats some quote of this  character. We also subclassed it. And we can see that it works here very well. We also  think about ourselves. We are so smart because we can handle the situations where there is  no quote. We know that Sir Ilympain isn't very talkative for some reasons. And here we handle  it. Sir Ilympain won't say anything. So it's okay. Then we can add another characters.  It also works very well. And we are very happy. But then we want to do something more. We  just think that there are too many good quotes by Tyrion Lannister that we don't want to choose  one of them. So we use the random module and we use random choice to select one of these  quotes. We are doing this and what happened? Okay. Who saw this coming? Who saw that this  would behave like this? Exactly. Not a lot of you. Okay. Who can tell me now what really  happened here? Yes, there is a typo. But can we see from the behavior of this program that  there was a typo? We can't. This typo here would raise attribute error. This attribute error  would be silence. It would be called by this get-at. And we got our error silenced. This is  something completely against Zen of Python. And this is something that makes it very hard  to debug. This example here is super simple. But you could have this error raised some 10  frames deeper and you could spend two hours on debugging sometimes. It happened to me. So  this is not a good way to do it. Now let's see if we change this just a little bit. Here  we don't rely on get-at. We just set quote in our base class to none. And we check if  it's still none or if it was changed in the inherited class. And now we can see, oh, snap.  I made the typo. There is choice, not just. And if we... This is a thing that we can fix  in two seconds and it works now. So if you don't have really, really good reasons, just  don't rely on get-at and has-at because it can produce these kinds of very, very hard  to debug problems. Thank you.  APPLAUSE  Antonio Ognio, are you around? All right. Richard, was it okay that I did not write your  talk for you? Where is the... Oh, there it is. Okay.  Where is it? Oh, there it is. Wow. Now I have to... Oh, wrong way.  I think that screen is on your left side. Your down...  Oh, got it. All right. So much for changing the plan at the last minute. Okay. That was  a great idea. All right. Everyone can see that? Is that big enough? Yeah. All right. Good.  So... Oh, that's the wrong one. So what I was going to start with was this... Oh, you want  to... Cheers. So I was going to start with this golden rules of lightning talk thing, which  was going to be really, like, ironic because, like, the first rule we all know, don't go  over five minutes. The second rule, don't do live demos. But then everyone's been doing  live demos. So... Well, I'm going to do my live demo now. Don't forget a piece of paper.  That's rule three. Okay. So I'm going to show you a couple of... Just a few little things,  however much I can fit in the five minutes. The first one is a module called E. Who's  heard of the module called E? You don't count. You wrote part of it. Okay. So pip install  E. All right. Off we go. So E is a rather funny little module. It's designed for the minus  M command. So Python dash me. It's got some basic functionality. It can do evaluation of  the pass... What the... Oh. This is why you don't do live demos, eh? All right. Let's try  that again. Pip install E. All right. There we go. So it evaluates expressions you pass  on the command line. It can do all sorts of stuff like import this and things like that.  So that's really neat. One of the other things it can do which is kind of nice is say we're  doing some Flask development and often when you're doing something like Flask development  or whatever, you get a bit lost in the documentation. You have to kind of poke inside Flask to figure  out how things are working. So one of the things that the E module will do is tell you where  Flask is. So dash me and a module name and it gives you the location of that module. And  so we ask for the Flask.config, for example. It will tell us where that is. You can also  then say less and it will fire up less with the module so you can then have a look at it.  Or if you say Vim, you know, it's in an editor which is kind of nice. It's just very handy  if you then need to like insert and debugging into Flask to find out what the hell is going on  to your program. So that's really neat. Now, who noticed some funniness when I was doing the  pip installs there? Did anybody see how, I don't know, blazingly fast that went for a computer  that's not even online? So the magic there is a thing called DevPy. Who went to Holger's talk  today? For the rest of you, you should have gone to Holger's talk. DevPy is really cool. So  you pip install DevPy and it's spelled pip install DevPy. It's already there. So it's going to  say whatever. Okay. That installs, I've got plenty of time. Okay. So then you run DevPy  server. Actually, I think it's already running. So, yeah, it's already running because I'm  using it. So I'm going to stop it. Okay. When you start it up, it says cool, running, and  there's a URL. You then run a command which is, oops, sorry, flip thing, DevPy use set  config. This is all in the very basic startup help. You don't need to remember this. And  that URL. Let's grab that. Okay. And that sets all of the configuration things that need  to be set so that your pip commands and everything else will now start using your local DevPy  server. What that means is it's a proxying cache which basically means every pip command  you do, anything you install will be cached by DevPy locally. So subs will install commands,  use the local version. Really, really, really fast. And it's trivial to use like I just  showed. I've got 48 seconds. I'm going to show one more thing. All right. This, all right.  So one of the other things that I do is I volunteer running the Python events calendar and Python  user group calendar. And what I thought would be interesting yesterday was I grabbed all  the calendar entries because I realized we were getting kind of busy lately. I grabbed  the calendar entries and I grabbed the locations and I plotted them on a map. That's all the  py commons. That's the, that are in the calendar. I chucked the user groups on there as well  just for laugh. There's a few of us now. And that's my time. ику how enrollment. in the  Yeah, what is it taking such a long time?  Yeah, well I showed them.  Do you have it?  Yeah.  Yeah, so that's what I asked.  Okay.  Okay.  Okay.  Yeah.  Okay.  Hello, my name is Antonio.  I've come all the way from Peru, South America to this conference.  I'm very happy to be here.  And I want to talk about wrestle microservers with Python.  So we need to ask first what is res anyway.  Not everybody knows that answer very well.  What is a microservice architecture?  And what is it a good idea to write or build this kind of thing with Python?  So what is res?  Res stands for representational state traffic that doesn't tell us very much.  In practice what res is is a way of taking full advantage of the existing web-related  protocols and technologies.  I mean something like web proxies, application firewall, client libraries and stuff like that.  In order to manipulate objects remotely.  That's what it is in practice.  Taking consideration that res was not invented.  It was reverse engineered after the existing weapon knowledge in 2000 by Roy Fielding,  one of the original authors of the HTTP 101 specification.  It requires for you to include links so your API is browsable.  And most importantly, it requires you to respect the actual semantic of each verb.  Like for example, you can never just get in order to make a change in the server side.  If you are thinking that res is only mapping the crude actions to an HTTP web-ware, you are wrong.  It's more than that.  Please educate yourself a little bit.  There's a lot of information on Google about this.  So for example, there are more than 15 status codes that you should regularly be returning.  Not just 200 or 404.  In order to know if you're doing this right, for each resource, which is for each unique entity in your problem domain,  you should be having only one URL.  For example, you should be including a home document.  A home document with links to all the other available resources.  There are many rules like that, including hyperlinks.  For example, if you make a search and you don't find the date in your search report,  you should not return 404.  You should return 200 with our resources explaining that there are no available results.  So for learning more about these status codes, this is a website that really helps a lot,  HTTP status.es.  Please grab your copy of Roy Fielding's dissertation.  It's a PDF.  It's very easy to read, actually.  I really like it because it compares this architectural style to others,  and takes many chapters to justify why REST is a good idea.  I also have a talk about this in English.  REST for the rest of the fact.  Just please Google it if you're interested.  And these two books that other speakers have been mentioning during this conference are really good.  So microservices.  Basically, microservice is building a larger system or larger service,  piecing together smaller services.  Very much like doing a match up using APIs from Twitter, Facebook, and the like.  The most important thing about this is that they have to be highly reusable,  self-contained, conceptually simple, and easy to maintain.  Instead of making a big monolithic system and having different people with different skills to agree on a system,  you basically build cross-functional teams, like for each department.  Each department builds its own web service, and you just use them together.  And each one can have its own agile development cycle independently.  So even when you deploy that, instead of having one huge process with all this functionality,  you can have each functionality in a different process, which is far better for reliability issues.  So what are the advantages of microservices?  The most important thing is that once that you have defined an API,  you can build the internals.  You can rebuild the actual implementation without breaking anything.  Other than that, only one developer can maintain the code because it's really simple.  Martin Fowler, the very famous Martin Fowler, has been written about this.  There's also a conference coming this November in London, which is very interesting about this.  And why Python?  Well, the most important thing about Python is productivity.  You really have to prototype these web services.  Camille, are you around? Excellent. You're next. And again, a reminder, at 5.30, there's a small surprise happening here.  One note would be to keep some battery life in your computers. That would be nice.  All right.  I'm from Switzerland, and I'm actually not here to show you something, but to ask something from you.  So we recently founded a new hacker space in my town.  And one of our goals was to improve education and to, like, get children into technology.  And one way to do that is in Switzerland, many primary and secondary schools offer something like a vacation program for children.  So they get a vacation pass where they have many activities to choose from during the vacations.  And we want to offer one of these programs, and I want to offer a programming workshop.  So we thought about how to do this.  So, um...  Probably most of you know Minecraft, and probably even more children know Minecraft than you.  There's actually something called Minecraft Pi Edition, and it's free.  And if you have a Raspberry Pi, you can just download the binary and run it.  And one of the good things is it's actually scriptable, so you can program the tiles.  You can create a new block at a specific position.  And the good thing is if you give one of the kids a Raspberry Pi and install that down there,  you can actually go home, take the Raspberry Pi with him, and continue programming it.  So my question is, if you have any experience with this kind of workshop,  if you have good ideas, if you want to know more, then please contact me.  And basically that's it.  Thank you.  Fernando Massanori, are you around? You'll be up. Good to have you after that.  You ready?  Yeah.  All right.  Hi. I would like to tell you about a tool, a tool for developers which I created.  This tool records requests of web services.  A basic idea of this tool is that all the time we call web services,  we have to XMLs like request and reply.  And to record them, to use them or record them, we can use XSLT transformation.  There's web service.  If we work with web service, there can be many times inaccessible.  They're not, especially if you work with developer web services.  So this can be really helpful if you use it in Dev mode.  How it works.  When you use web services, one, it's already working.  It's record to the saved samples based on the config files.  And when there is problem with web service, you can use service mode to use web service  without noticing that it's not there.  Right now, I will show you short demo.  And here is three calls to the web services.  This web service is really simple.  It's just changing request to the reply.  And I will call here.  It creates this file which is recorded sample.  Here is this response for this service.  In the configuration for this message, we need to configure based on which parameters  we want to create reply.  Which parameters will be used in creating reply based on request.  And all of them are used in this other sequence conditions.  If you call more request, this file enlarges and there are other parts of it.  If to prove that it's already serving from this.  I hope.  If we call web service again, it serves with changed files.  As well, if you want, if web service has some errors, you can fix it in this sample files.  Okay.  Come back.  I created a few configuration modes.  Mostly, it's mix of recording and serving.  And there is also transparent mode when it looks like there is no recording at all.  So, what I'm already working on is implementing more, implementing XPAP2 functions which are  not present in XML.  But they can be very helpful if you create configuration file with this nodes.  But it's just library only for the functions, not for them.  And also, to not use whole blocks of XML, you can use nested nodes.  So, it could be more complicated configuration file.  In the future, it would be nice to create some support for rest and JSON.  But unfortunately, JSON and Dress don't have such mature standards for XPAP or XSLT.  Yeah.  That's it.  All right.  Peter, are you here?  Somebody is missing.  Peter?  Yeah.  So, if Peter isn't here, then the next one would be Philip Kledzik.  That's you.  Excellent.  Hi.  I'm from Brazil.  For the first time, by ComBrasil, it will be on the beach.  Porto de Galinhas was voted by Magazine Best Beach in Brazil for 10 times consecutive.  This is the venue of conference.  The other thought.  This is the Python community.  Some speakers.  And I invited you to submit call for papers are open.  Thank you.  Thank you.  Jim Baker.  Okay.  I see you.  I'm getting a little tired sitting and just for as a recommendation for you, just everybody, stand up once.  Please stand up once.  Stretch a little bit.  We've been sitting for an hour consecutively.  I don't want the other speakers to think we've all fallen asleep.  All right.  Some yawning.  Okay.  Thank you.  Okay.  Hi.  I'm Philip Kłębczyk.  I come from Poland.  I wanted to talk about Python PL.  Another Python.  A little bit of history, but very fast because we don't have much time.  Mostly photos.  It started in my home city.  We already had on the first edition over 100 attendees.  Then we moved it into remote locations like mountains where weather in October is different depending on the year.  We had a lot of attendees.  Well-known people like from projects like PyPy.  There's a very good atmosphere on the conference.  We have three days of talks currently even four.  We have different one-on-one speakers on the conference.  We also have anniversaries.  We do a barbecues in things like that.  Yeah.  Eyebrothers.  And now we scaled up up to 300 attendees.  We also have all the meals together because they are included in the price of conference.  So let's talk about the current edition.  So it has three to four days depending which option will you choose.  It has three tracks, one full English track.  We are ready for up to 500 attendees.  We have parties and discussions all the time because all the attendees are in one place, in one hotel, which is awesome.  And the prices are very low, I would say.  And that includes accommodation and meals.  So where the hell is Sturk?  We always choose places that have difficult names because we love tongue twisters when people from US say,  It's Sturk.  So it's in the center of Europe.  Look on this map.  And near the border of Czech Republic and Slovakia.  It's actually Besky mountains.  It's southern Poland.  How to reach?  So there are nearest airports are Katowice, Krakow and Ostrava in Czech Republic.  Ostrava is the closest one but has only flights to London and Paris.  There are also Euro city, Euro night trains.  You can also take a bus if you prefer buses with Wi-Fi on board.  We will have over 50 talks and workshops.  And at least half of them will be in English.  Here you will have some of the speakers but the screen is too small to have them all on one slide.  We don't have call for proposals because we've ended it two weeks ago but we have call for workshops proposals.  So you can still send as a workshop proposal and if you will be accepted you will get a free ticket.  There will be also communities from other countries on Pycom PL, some from Czech Republic, Slovakia, Ukraine and Belarus.  I want to add that Pycom Belarus is the first Pycom in Belarus.  So I recommend to support ladies that are organizing the Pycom Belarus.  So we have an offer. If you are organizer of Pycom you can get one free ticket.  It doesn't matter if it's Pycom Brazil, Finland or whatever or Pycom Germany.  You can get a free ticket with accommodations and meals.  So please contact us at Pycom PL at Pycom.org.  And follow us on the web, so on Facebook, Google, Twitter, YouTube, so on the social services.  That's all. I've made it.  APPLAUSE  I'm being totally naughty.  If you are an organizer of a Pycom, please send the details of your conference to the Python Events calendar  that can be in the calendar and everyone can know about it.  APPLAUSE  I got it. Are you around?  Oh, well done. All right.  APPLAUSE  Can you see me?  Hi, so I'm Jim Baker and I'm going to be talking about the state of Jethon.  And I have 22 slides in less than five minutes.  But I'm going to be talking about the state of Jethon.  Because we've been doing so much work.  It's under extremely active development right now as we're trying to close to get to final release by Q4.  So I found in this development, along with all the other core devs and committers, that the language changes were pretty easy.  It's the run time in libraries that we've definitely spent our work on.  We can way more pages on the A and the script.  The internet micro system is our current focus.  Some stuff we're talking around GIB.  You need to use Java 7.  We have some interesting functionality.  For instance mix Python and Java types.  for interesting efficiencies, so on and so forth.  There's this new work called Socket Reboot which re-implements the standard Python socket  module as well as adding support for SSL and real support for select using NetE4, which  is quite a really good event loop package for Java.  And I would hope we would eventually use it for async.io support as well.  So here's a good example of what we're using to actually provide socket support today.  You can see it's actually just Python code binding to this NetE package.  It actually is able in a very small function which is slightly cut off here to handle all  differences between non-blocking and blocking with any timeouts for a given socket.  This enables requests.  So you can now use with the latest version of Jython, certainly what's in trunk, this  popular client.  And since it's used by PIP, this is really good.  PIP used to work, but because of this change to using request and also the support for  SSL that is now required when working with PYPI, this was important for us to do.  We almost have this complete and it should be in the next release of PIP.  Regular expressions used to have some problems and were slow.  I heard someone talking about a potential cherry pie performance.  I don't know about your specific case, but this might actually fix it for you.  It was really cool to see this great commit by someone who contributed this, Indra Tullip.  We are now also developing stuff outside the usual release schedule in Jython.  So for instance, I'll talk a little bit about Clamp and Jiffy.  There's also this new fireside, WISGI bridge to work with several containers.  We've had that in the past, but this knows about site packages and is PIP compatible  and is really nice in that fashion.  Clamp allows you to directly import Python classes into Java.  What does that look like?  Let's say I had this Python class that extends some Java interfaces.  Really simple.  It's really implementing the callable interface.  You add two lines here in terms of being able to say from Clamp import this Clamp base,  Meta-class factory, use that Meta-class factory function to generate your bar base and then  you add this bar base to your list of bases for that class.  And now with just one more step in terms of in your set of tools using Clamp, you can  go and this is now Java code.  Sorry to show this to all of you here.  That here you are directly importing a Python class into your Java code without any additional  work.  Just one line.  How's that?  It's pretty awesome.  And Darius and I, he did a great job working out this with, you know, it was fun.  So Jiffy were planning to provide CFFI support.  There's this interesting patois.  Jainai is a project that allows C extension API support.  There's going to be a sprint on this in auction on Monday.  We're also having a sprint on Saturday about Clamp.  Again we're planning to get a beta four out.  Release Canada is as needed.  Mostly this is about going and there's obviously if you, for what we want to do, Java integration  is key.  Java nine is going to add some additional support.  And what about Jython3a.exe?  I'll let you guys read this as my time runs out.  And some blomberg, are you here?  Excellent.  You next.  Peter Koppatz, did you arrive here by accident or purpose in between?  I'm going to pass it over to him, yeah.  There you go.  Okay, Paul.  Okay.  Can you give me the system settings?  It should be.  I mean, it doesn't have an html.  It just has this one.  Yeah, yeah, yeah, that's okay.  Yeah.  That's okay.  That's okay.  Yeah, yeah, yeah.  Yeah, yeah.  Yeah, yeah.  Is it built in digital?  No, it's not digital.  This is HDMI.  Do you have another adapter?  I think I have one.  It was just a matter of time.  Yeah, yeah, yeah.  Yeah, that's good.  What do you mean?  Yeah, analog.  That's code of conduct.  Okay, hello guys, I'm Agata, and I just want to have a short talk about how to make Python more sexy.  The idea is pretty simple.  We just have to improve Python to be more sexy.  So let's start from the beginning.  We can just simply improve packaging.  Just guys use Python gems.  And of course, improve parallelism, like replace the Jil with V8 and use more callbacks.  What about the style of Python?  Adopt an explicit Java-like naming convention because readability counts.  And of course, guys, it's really simple.  Just use more globals.  No imports.  Use file includes.  And just build in carrying.  And after all this stuff, I just want to say you one more thing.  I was just kidding.  Python is as sexy as it can be.  And it cannot be more sexy, guys.  And I want to thank you so much to inviting us for our Europe Python conference.  And we just love you.  And I hope to see you next year.  And of course, I hope to see you in a shterk because Python Poland is waiting for you.  Thank you very much.  Thank you.  Thank you.  Thomas, you're after that.  And again, there will be something at 5.30 where you need your computers.  So save battery or plug in.  I hope you've got the mobile phone and the tablet with you.  We'll put those to some good use later.  You're ready?  Yep.  All right.  Hey, guys.  My name is Anton Blomberg.  I'm in my Swedish distributed systems gig.  And I want to talk about parallel execution.  Well, everybody knows there's a gel in Python.  And therefore, as Pythonists, we're not very used to dealing with this concept.  And, well, if you actually could do parallel execution, why would you?  Well, of course, increase the speed of your program and reduce the latency.  And maybe why would you not?  Single-fared programs, they're easy.  Multiple threads, it's really hard.  And why is this?  It's because you introduce concurrency into your programs.  It leads to race conditions, deadlocks, and all sorts of nasty problems.  They're really hard to debug.  So what you do, you add locking, synchronizing, and then your code base is so hard to understand.  But there is an alternative to program systems that's running concurrently.  It's the actor model, which is a very old way, has been around for ages, where you do parallel concurrency without locks.  So this is not your regular threaded model, where you acquire a lock and do your stuff, release the lock.  Everything is done in independent share-nothing tasks.  This is a bit similar to all the G event tasks with libraries, Node.js, blah, blah, blah.  But this is more a way to organize your code to make it easier not to lead you into callback help.  So what you do is you communicate by passing messages between these actors.  And every actor is in itself like a process.  It has a shared nothing with all the other actors.  The only way to communicate is to send a message.  And all messages are sent asynchronously and put on the queues for incoming messages for all the other actors.  Since each actor can only execute one piece of code at once,  you cannot go into race conditions because everything is in itself atomic.  An actor can only receive one message at once and process it.  So what you get with this is execution transparency, network transparency.  As a coder, you don't need to know where your code is executing, in how many parallel threads it executes,  or if it actually executes on another system, on another machine.  So what you actually get is distributed systems for free.  So if you want to, if you like Python, then maybe this is bad news for you.  But the PyPy SDM, it actually has potential to bring this into Python.  What it adds is parallel execution if there are no conflicts.  And in an actor system, there is a shared nothing architecture, which means no conflicts.  This means you can run Python code fully parallel on all cores.  So what I did yesterday after having a couple of beers,  was actually try to implement this in a Python only implementation  to make use of an actor system in a fully distributed parallel environment on PyPy SDM.  And well, it kind of worked.  So it's not a library, it's a proof of concept.  What they basically did was implement Actress, a multi-threaded, fully parallel event loop.  A lot of buzzwords, but it's not your G event event loop that you execute in synchronicity,  but sharing the time between tasks.  You actually execute fully in parallel.  Since actors share nothing, you can process the cues of the received messages in parallel  and do all the actors on all cores.  So what they did was basically give the application developer a generator statement  and receive a new message with a yield and built into the language.  You can now receive a message in a synchronous manner and execute fully in parallel.  So it works in C Python.  It's totally regular Python code and it shines on PyPy SDM, well, kind of.  The overhead is still high on SDM, but it actually improves the more cores you add.  So as a fun exercise, I also implemented pure Python-efficient immutable data structures  like an immutable dictionary which gives copy and write semantics but doesn't actually copy anything.  So you can find this at if you go to deadlock.se where there's a link to the GitHub so you don't need to remember it.  And if you like distributed systems and see the potential for Python to actually run stuff in parallel in the future,  donate huge amount of cash to the PyPy SDM guys and give these guys a round of applause.  Christoph Neumann, are you around? All right. Can you make it in four minutes?  All right, that's excellent.  I have two announcements to make. It's both related to having private email.  And to begin with, we'll make a GPG, PGP key signing.  It's right after the lightning talks and surprise thing.  So we meet at 1745 in the basement in the lounge area where there was so far and that stuff is.  And just look for me and for Arnold Grille, we'll kind of lead this.  And if you need another motivation after the first keynote, and if you still think you have nothing to hide, this is the slide for you.  So what can we do if you don't use any GPG yet? Maybe in reality, you don't have private email yet because they are reading your email.  It's not because they are especially interested in you, but just because they are reading all email.  That's not encrypted. It's easier than you think.  If you want to start right here at Europe, Python, we will have another event and it will be in the bar camp.  And we will have a small crypto party. You just come there with your laptop, have Thunderbird installed,  and we'll help you to get GPG going and to create your keys and so on.  Just meet us there. We'll try to make a session about this.  You can also use another email client. Just make sure there is some sort of GPG support for it.  So for the key signing for the event today at 1745, what do you need?  You need a PGP key, of course. It's a key signing. You need your name, email and key ID and fingerprint,  for example, on such paper strips or on your business card.  Alternatively, you can also have this data just on your laptop screen if you don't have any paper with you.  Then you need a valid passport or ID card. So the procedure will be about like this.  We will just row up in a kind of circle, but it will be a flattened circle.  So everybody is facing somebody else. And then one guy will just verify the passport of the other guy.  And we will compare the identities on the paper strip.  And if everything is okay, you just take the paper strip and you can sign the keys later at home.  You don't need to do it here. Then we just rotate right by one and the next verification step happens.  And we repeat this until we all have checked everybody else.  If you have no paper strips, you need this. Either you have a mobile client maybe on your Android phone or whatever.  You can just show the key info page of the GPG implementation.  Usually the info page shows your key fingerprint and then the other one can just make a photo of it so you don't need to exchange any paper.  Also, if you have a laptop, you can just enter that command to print your key IDs, your email addresses, your name and also your fingerprint.  Then just copy and paste it into a world processor and make it full screen so it's easy to photograph it.  And then the other guy will just make a photo of it instead of taking the paper strip.  What you need later is a tool called CAFF.  If you run Debian or Ubuntu, it's in the package called Signing Party.  And if you have a lot of keys to sign, that will save you a lot of work.  You need a lot of work to set up that tool once because you need a local email server or at least some sort of relay agent.  But it will save you a lot of work if you have done it once.  Alternatively, you can also do it manually, but then you have more manual work.  And the tool is rather easy. You just say CAFF and key ID, then it downloads the other guy's key from the server.  You can also use the fingerprint so you can compare with the paper or the photo you have taken.  Then you can sign each of his email.  And the tool will automatically create multiple emails for all the email addresses you wanted to sign  and sends each signature to the corresponding email.  Yeah, this is the final slide for everybody who has maybe not seen it yet.  It's from Germany.  Thank you.  So I'd like to get an overview of how many computers we have in here.  Who has at least one computer with him?  All right, that's a fair standard.  You don't have to show me the computer.  Who's got two?  And computers, anything that has a CPU in it?  Who has three?  Okay, now that's the computer or smartphone in a tablet who's got four.  So the fourth one, does that have network connectivity?  Who has four with network?  James, you are awesome.  We need you. You're going to be a workhorse here in a minute.  Ready?  Ready.  Let's go.  Hi.  My name is Christoph.  I'm co-founder of Quantified Code.  And what we do is we do data-driven code quality management.  So we develop software, data-driven software that helps you monitor and improve your source code.  And we are lucky we got a funding from the German government.  And so we can, for the next year, spend our time without a lot of business pressure to build a great product.  And I'm here today to ask you to help us to give us feedback and to check out our first alpha version  because we want to build something that really matters and that really is going to be used by the community.  So what we are striving for is basically we want you to check in your repository on our website.  Then we will offer you continuous check and monitoring of your code quality.  And finally, we want to not only check the code, of course, but we want to display results.  We want to give you suggestions.  And in the final state also offer you automatic improvements to the code.  How do we do that?  Basically, we apply machine learning algorithms to a lot of source code.  Basically, to most of the source code you can find open source and GitHub.  Where are we right now?  So as I said, we introduced an alpha version.  So we can already check the source code of open source, public Python repositories on GitHub.  And you will already get commit by commit a report of what has changed.  Did you add bugs or did you fix bugs?  So let me show you the website.  So this is basically our alpha version.  So what you see here, if you visit our website, is basically you get a list of all the projects we already crawled on GitHub.  So you can let's go into one of them.  There is, by the way, no sign up needed.  You don't need to do anything.  It's all the projects can be used right away.  And now you get an analysis of the mistakes and errors in your code.  How did we do this?  As I said, again, it's an alpha version.  It is the first step.  So what we did is we used common linters, pyflakes, PEP8, and so on.  We checked if the messages, they give you a relevant.  We categorized these messages.  And here you can filter whether the message or the error is a critical one, a potential bug, et cetera.  Let's zoom into one.  So you click here and then you go directly to the piece of code where this issue occurred.  So now what I really love to get from you or anyone who's interested in static code analysis, code management,  code quality management, or any programaries, now this is a simple alpha version.  It has functionality.  It gives you a few of your code, but I would like to know what are the features you really need?  What do you need in terms of workflows?  Where do we need to integrate into Jenkins or any other systems?  What are the common mistakes you get from other linters which you would like to see solved?  Yeah.  Just reach out to us.  We want to develop the product with you.  All this is here free and will ever stay free for open source.  And also, as I said, we got a government funding.  We have free slots there.  So if you're interested in working with us for the next few months on the cool product, then get in touch with me.  Thanks.  All right.  Was that a good set of lightning talks today?  Was it?  Thank you.
Lightning_Talks3_0_2519.png Lightning_Talks3_2520_7583.png Lightning_Talks3_7584_7859.png Lightning_Talks3_7860_8615.png Lightning_Talks3_8616_10367.png Lightning_Talks3_10368_11159.png Lightning_Talks3_11160_11243.png Lightning_Talks3_11244_12239.png Lightning_Talks3_12240_12359.png Lightning_Talks3_12360_12551.png Lightning_Talks3_12552_13607.png Lightning_Talks3_13608_14615.png Lightning_Talks3_14616_16439.png Lightning_Talks3_16440_16547.png Lightning_Talks3_16548_16703.png Lightning_Talks3_16704_17111.png Lightning_Talks3_17112_18035.png Lightning_Talks3_18036_19967.png Lightning_Talks3_19968_20675.png Lightning_Talks3_20676_22679.png Lightning_Talks3_22680_27347.png Lightning_Talks3_27348_28319.png Lightning_Talks3_28320_28427.png Lightning_Talks3_28428_28607.png Lightning_Talks3_28608_29123.png Lightning_Talks3_29124_29219.png Lightning_Talks3_29220_29267.png Lightning_Talks3_29268_29711.png Lightning_Talks3_29712_32075.png Lightning_Talks3_32076_32735.png Lightning_Talks3_32736_33287.png Lightning_Talks3_33288_33443.png Lightning_Talks3_33444_37859.png Lightning_Talks3_37860_43043.png Lightning_Talks3_43044_43835.png Lightning_Talks3_43836_44495.png Lightning_Talks3_44496_46451.png Lightning_Talks3_46452_49163.png Lightning_Talks3_49164_50783.png Lightning_Talks3_50784_53315.png Lightning_Talks3_53316_56987.png Lightning_Talks3_56988_57551.png Lightning_Talks3_57552_58691.png Lightning_Talks3_58692_58811.png Lightning_Talks3_58812_59087.png Lightning_Talks3_59088_65267.png Lightning_Talks3_65268_66083.png Lightning_Talks3_66084_66143.png Lightning_Talks3_66144_66395.png Lightning_Talks3_66396_78023.png Lightning_Talks3_78024_80735.png Lightning_Talks3_80736_83519.png Lightning_Talks3_83520_83735.png Lightning_Talks3_83736_83807.png Lightning_Talks3_83808_83951.png Lightning_Talks3_83952_84179.png Lightning_Talks3_84180_84251.png Lightning_Talks3_84252_84599.png Lightning_Talks3_84600_84647.png Lightning_Talks3_84648_84947.png Lightning_Talks3_84948_85295.png Lightning_Talks3_85296_85343.png Lightning_Talks3_85344_85463.png Lightning_Talks3_85464_86615.png Lightning_Talks3_86616_86675.png Lightning_Talks3_86676_86723.png Lightning_Talks3_86724_86831.png Lightning_Talks3_86832_87779.png Lightning_Talks3_87780_88115.png Lightning_Talks3_88116_89459.png Lightning_Talks3_89460_91679.png Lightning_Talks3_91680_91979.png Lightning_Talks3_91980_92939.png Lightning_Talks3_92940_93047.png Lightning_Talks3_93048_95783.png Lightning_Talks3_95784_96383.png Lightning_Talks3_96384_96647.png Lightning_Talks3_96648_97619.png Lightning_Talks3_97620_98675.png Lightning_Talks3_98676_99227.png Lightning_Talks3_99228_101687.png Lightning_Talks3_101688_103739.png Lightning_Talks3_103740_105395.png Lightning_Talks3_105396_105635.png Lightning_Talks3_105636_106235.png Lightning_Talks3_106236_106523.png Lightning_Talks3_106524_106571.png Lightning_Talks3_106572_107723.png Lightning_Talks3_107724_109739.png Lightning_Talks3_109740_109859.png Lightning_Talks3_109860_110159.png Lightning_Talks3_110160_110387.png Lightning_Talks3_110388_112667.png Lightning_Talks3_112668_117719.png Lightning_Talks3_117720_118991.png Lightning_Talks3_118992_129407.png Lightning_Talks3_129408_130319.png Lightning_Talks3_130320_130391.png Lightning_Talks3_130392_133283.png Lightning_Talks3_133284_133727.png Lightning_Talks3_133728_136727.png Lightning_Talks3_136728_137112.png
. Nevertheless, we're going to have another 90 minutes of lightning talks, and it's going to be packed. I want you to stay after the lightning talks, though. There is something the organizers want you to be here for, and I'm not allowed to say anything more, except that having more people is better. Mysterious. Anyway, let's get started with the lightning talks. The first one is Stefan Nothausen, and he's going to talk about NetAdder. Hi, everybody. My name is Stefan Nothausen, and I will give you a quick introduction to NetAdder, which is a library that helps you to handle IP addresses, MAC addresses, and more. I'm one of the main contributors, and you can find the code on GitHub and also on PyPI. But first of all, I would like to show you a new build-in that was added in Python 3.3. You can now import IP address and IP network, and then you can do stuff with IP addresses and IP networks because there are now objects for that. So you can check if an IP address is in a certain network. And there's more goodies. You can do iterating, slicing, you can get the broadcast addresses, NetMass, you can even do IP arithmetic. NetAdder provides the same for you. We also have an IP address object, an IP network object, and you can do pretty much the same thing as with the IP address built-in of Python 3.3. So why would you install NetAdder? Well, first of all, it supports Python 2.4 and Python 3.0 because not everybody has Python 3.3 yet. And there's no further dependencies, no C-magic, nothing. Second of all, there's more than just IP addresses and IP networks. For example, there's IP ranges. NetAdder provides you with an IP range network object. And you can just say, I have an range that starts here, ends there, and then you can do operations like, is the IP address in the cluster? You can iterate over the hosts in your range, stuff like that. There's also an object for handling MAC addresses called the EOI because that's the official name of MAC addresses, extended unique identifier. And the funny thing about these is that there are so many different formats. Upper case, lower case, different kinds of separators. Some people leave out the leading zeros, but as you see in the example below, it's all the same for the EOI object. They all get parsed the same. That's the input. How about the output? Maybe you want your MAC address to look in a certain way. That's why NetAdder provides so-called dialects for you. One is the MAC Cisco dialect. And you can just instantiate your MAC address, set the dialect to Cisco, and then stringify it, and it will look like a MAC address that the Cisco systems are using. More such dialects are available. Customization is, of course, possible. There's OUI, organizationally unique identifiers, which are basically the first three bytes of a MAC address. And you can ask a MAC address for its OUI and the interesting part about the OUI is the registration information. So in the example you see on the screen, the registration says it's the Intel company from Malaysia. Always good to know stuff like this. And by the way, this works without Internet Access, the database is built in. Then there's sets of IP addresses. Wait a minute. Set is a Python built in. Why would you bother? Well, there's stuff like 10.0.0.0.8 and FE80.64, which are just really big networks. And you don't want to add two to the 64 objects to a Python set. That's not really fun. Here, IP set comes to the rescue. You import the IP set, you instantiate it, and then you can add IP networks, you can add IP ranges, you can add individual IP addresses, and you can mix IPv6 and IPv4 as you please. And then do the usual set operations. Check for membership, for example. Or in the second part, remove an address from the IP set. And even though that splits the IP range that was inserted in two pieces, let IP set take care of it. You don't have to. One disclaimer, though, your distribution may ship NetAdri already, but please use version 0.7.11 or higher, otherwise you will have a bad time. So to reiterate, the code is on GitHub, but also on PyPI. PyPI also has a link to the documentation and to a very nice tutorial. And that's it. Thanks for your attention. APPLAUSE The next speaker is Alex Apolsky about antifragile, and after that, Josie, you're next then. APPLAUSE OK. So I wonder how many of you have read any books or articles by Nesim Taleb, like the Black Swan or antifragile. OK, I see some hints in the audience. And I'm going to give a talk, a kind of more philosophical approach to Python. Well, Nesim Taleb is a kind of intellectual thinker who speaks about probability theory, about risk management, and how we can gain from instability from an unstable world. So the first book of his, of him, was Black Swan. It's about rare events that occur in our life and can change it completely, and that these events are not predictable, but we somehow should prepare for such events. And the second book of him is antifragile, is specifically about algorithm, how to deal with things that we cannot predict. There must be some way how to survive in unpredictable future. And in programming, we can speak about some problems that can occur to our code, to our system, and to our product in general. So three terms that he uses are fragile, antifragile, and robust. So fragile is a system that can break, and if it does not break now, it will break later and will cause a lot of, it will cause a lot of problems. So there must be a way to prepare, and we can think about what properties of such systems could be at the level of code, at the level of, say, Python module, at the level of application at all. So, for instance, ORM porting is fragile because if you, for example, change ORM, you have to redo all the application. If you do a product in a non-agile way, it's a problem too. Suddenly customer asks you to do something and you cannot deliver the product instantly. So, and if you write some code and do not keep in mind that there is some context of product stability, like you need login, you need error tracing, it's not fragile. So please use some login, et cetera. So what is robust? Robust is login, robust is transactions, robust is when your application falls back gracefully, for example, nice error displays, or if a part of your applications go away, still some front page will be working and your customer will be notified. And antifragile application is something that's not totally robust, but is kind of good enough. So what I'm speaking about is in Alex Martelis terms good enough, but I have ported into Nesim-Telib's concept of fragile, antifragile and robust. So he, one of the main strategies that he uses is the strategy of what's this heavyweight instrument is called, I forgot, barbell. Yes, the barbell strategy. Basically this means that you have to do very robust things and not to do some new things at all if they can break the system. But if something new and something cool does not break the system, you should exercise it and add it to your system. For instance, do not run for new things, do something that looks very simple, very stable and very understandable. But if new changes and cool changes do not cost too much, well, feel free to do them especially if they do not affect big parts of the system. So exercise new stuff in limited contexts and do very stable and simple things in general. So this metaphor is especially good for new programmers. As they come to a company, I used it to explain to middle and junior programmers how they can fit various ways of thinking about the system they build together in terms of fragile, anti-fragile and robust... All right. After Josie talked about Pixie Desk to us, there will be more coverage. All right. I see you. Do you want to use that microphone? If you look at that screen, you can see that everything is fine and they just need to switch it. Come on, guys, wake up. We are ready. Thank you. Hello, everybody. My name is Josie. I'm 13 years old. I come from Zagreb, Croatia. I got a scholarship from the Django Girls. So this is how I'm here. This is my group from the Django Girls project on the first day. And what is Pixie Desk? It is my idea to help girls from 13 to 18 start from being consumers to becoming producers of technology. So I think the big problem with technology for girls and teenagers my age is that we love it so much that we overuse it and we do not try to produce. So the consuming and producing would be 90, 10% and not 50, 50, which should be. I sometimes have this problem. I can be on multiple screens at one time and get lost in it for hours and then at the end of the day I feel so guilty that I didn't spend my weekend or day very well. My mom knows to call me a technology zombie because I can't get my eyes off of the screen. I'm just like, where am I? What am I doing here? So my solution would be bringing these girls from smaller countries because I'd like to start small than to big places because a lot of these companies have great ideas but start very big. They want to add big details, big, you know, get press and everything. And then they lose the money and go bankrupt, which I don't think anyone wants. So it's better to start small and grow, level up. So the resources that I need would be teachers, slash experts, sponsors and of course hosts. Yes, so this is my story and anyone can be a part of it. Thank you. Thank you. Dima Tijne, are you there? Excellent. For everybody who just joined, the organizers would like to stay you after the lightning talks. They want to do something and they need to be here. The more the better. Hi, everybody. I'm here to invite you to WebCamp. It's a conference in Zagreb, Croatia. It's organized by local user communities. And it's pretty awesome. So at this point, everybody asked me where I was. So it's in Europe. It's not far away and it's generally good enough connections to get there. So what's going on there? So in October, we will have for the third year in a row WebCamp conference. There is no specific topic, but all local user groups like Python, JavaScript, PHP, Ruby is involved. And I would like to suggest to you to submit your talk because it ends next week. And it's a great environment. Last year we had around 600 people. This year we are expecting around 800 people. So there are two parts of WebCamp conference. The first part is a week of WebCamp where local user groups have their meetups, smaller conferences and talks. And it's generally really relaxed. And I think everybody would enjoy it there. And the main event is WebCamp conference, which is something that everybody wants. You can expect talks about Elixir, Erlang, Go, Clojure, Python, JavaScript. Everybody can find something interesting. So once again, call for papers ends next week. So if you want to come, submit it. There are two places where we have this thing. First, smaller, for around 150 people is in the first picture. And the main event is like in a congress center similar to this one. And you can expect an audience of about 800 people this year. So just to confirm that it's a cool event, you can expect any kind of stuff to happen. And please consider coming. It's one of those small communities that are building a nonprofit conference and it's really cool. So see you in October. That's it. Thank you. APPLAUSE The next one after that will be Tosten Rehn. Are you around? Oh, there. OK. My name is Dimitri Snick and I hate testing. I know it's not a popular thing to say, but I'm here. We are pretty cool stage start-up. We are hiring in Bosnia. And I live in Bosnia now, which is really close to Berlin. We've got awesome developer Python club stuff. Please check us out. So now to the actual thing. So I had testing, but I'll leave that for later because I've got a lot to cover. First of all, let's see some code. So it's a real code. All names will change to protect the innocent. And as you can see, it has 100% code coverage. And first I have to say that coverage.py is awesome. It's at least five years old and it survived a lot. It is still being maintained. Now let's see what was the unit test that actually created this 100% code coverage. It works like this. In other words, only the function signature is tested at all. So what can we do about this? There is a formal thing called mutation testing. Unfortunately, it's not that great in Python, but it exists. There are two packages, PyMuteTester and MutePy. I hope I pronounce them right. PyMuteTester is dead. It's for Python 2 only and it doesn't work for me at all. MuteTester, on the other hand, is workable. It does work. It does work. It's only for Python 3. It produces results in very unintelligible format. And it requires unit test case which nobody should use anymore. So let's see how it works. First, let's have some simple test. Let's say this is code. We are testing it somewhere. We've got a decorator. We've got a context manager. We've got some logical operations. We've got a branch. And then let's run it. We give a magic command. Get a lot of output. What does it say? It says it tried 15 combinations of how to change my code and test it if my unit test still pass. 14 of them were killed by this unit test. So these changes were invalid. One of them survived, which means there is an alternative bit of code that still passes my test and that is a problem. Let's see how it looks like. So apparently, removing this decorator doesn't change anything, which I sort of expected. On the other hand, this lock is not tested anywhere either, but it didn't find it. So this tool is not perfect, but it exists. Moving on. In an ideal world, let's build a system that connects to a GitHub, takes your code, and if all your unit tests pass, or in fact all of your tests pass, it changes the code. It could do it in any way. It could be exhaustive search. It could be artificial intelligence, mechanical torque, whatever. But if your code is simple and the test pass, let's just issue a pull request right away and let the developer figure out whether the simplified code is actually better or maybe they need better tests. So I hate testing. Now for some fun. Amazonbee. You've seen this image at a keynote talk. I'm not a corporate drone. I'm a different kind of a zombie. I'm a zombie for a reason. I like brains. In fact, I believe that programs have brains and people that work with have brains and they're actually smart enough and we should not be constrained to some ridiculous systems. We chose a dynamic language for a reason. So while on the subject of keynote, both with polito's push for type annotation is completely misguided. Nobody said anything but whatever. Okay. If you want to get in touch with me, just remember my nickname. It's Jimo QQ. Jimo GitHub, whatever. It searches the Googles. That's it. Thank you. Thank you. Hi, everyone. So by now people get annoyed when you use tag lines that end in for humans. So there I fixed it. But I really want to talk about config management. There are a lot of config management tools out there. The most popular ones are probably Chef, Puppet and Ansible. And they're really great. They're really the workhorses of DevOps and have made config management in general somewhat popular. But I wanted a pony. A pony that is a tool rather than a solution, if that makes any sense. For example, I didn't want to maintain a server component. Also, having to install an agent on each node before you can start to bring that under management is kind of a pain, especially when dealing with legacy systems. And the same goes for SSH. I really want to use that as a transport and authentication mechanism because it's already there. Beyond that, I was also wishing for an interactive mode and a nicer command line UI that allows me to carefully review and pick each change that I make to an existing important critical system. And I really wish that PyPen was the only language I needed to know in order to use it. Last but not least, there's item level parallelism. This is a big one, actually. What that means is I wanted to continue working on small things like config files while it's installing, for example, a system scratch on the same node. I don't think any system currently does this. They all just work out a linear order and then go step by step. So about two years ago, I started hacking on this just for fun. And roughly 12 or 13 months ago, I threw it all away and started from scratch. So for the past year, a friend and I have been working on this and we're really trying to design a config management system that is extremely minimal and probably dangerously dynamic. Here goes. What we see here is just a file that has a dictionary in it that tells us there is a node called TARDIS and it has the MOTD bundle. Easy. Within that bundle, we have a file called Etsy MOTD with some inline content. You can also use templates, of course. Now, this is all just Python, which makes it very easy, perhaps too easy, to import and inject any data you like. It also makes for an interesting learning curve because you start out as a command line tool with a sort of JSON-ish configuration. But it quite fluidly transitions to feel more like a framework once you start to build these dictionaries dynamically. This is interactive mode. You get a nice color diff for this change in a file and can carefully view what you're doing. There's so much more features and bells and whistles to this that I can't show you right now. But just a few days ago, I tagged 1.0 of our tool called BundleWrap. After about 16, I think, alpha and beta releases. You can find out all about it on bundlewrap.org. There's more information, a quick start tutorial, and just generally everything you want to know. If any of this is even vaguely interesting to any of you, please come talk to me. If you just want to yell at me for reinventing some parts of Ansible, that's cool too. I'm here until Friday. You can find me as Tirain on GitHub and Twitter. Thank you very much. Simon Piazki, are you around? You ready? Yes. So I want to talk about a trick that helps us to keep code more clean. So sometimes we want to have to write such strange classes that if you see they are quite similar and the code is almost identical. So what we can do with that, actually this is a SQL alchemy class and SQL alchemy allows us to write this code by inheritance using the declared utter decorator. But I don't like this because it is too verbose. So let's revert and let's see what we can do with that. So as we know, Python classes created, its body is executed, and the result of that execution is passed to type. And the main difference between the function and class bodies is that function body can be executed many times. And so we can just move body from function, from class to function and call type in decorator. So here it is. This decorator do some trivial stuff. It just calls constructor and passes value to type. And returns to class. But there are some things that I don't like. For example, return locals. And I want just to remove it. Can I do this? Yes, I can. So. Revolved. Here is. And it's working. I just create two classes by decorator. These functions look like class. They behave like class. Probably they are class. So how I done this? I never met this before. It is a decorator that actually executes a function and extracts local variables at the end of execution. So I don't want to tell about how it works. So and we use it in real life. Like that. Here we have models. And we create similar models for different languages with little distinction. So here it is. Okay. No, I don't. Sorry. Simon Richard. It's your turn. Okay. So I would just like to tell you about some design flow that is with get at with the default argument and also has at. And why you shouldn't rely on these functions too much. We created a nice base class which is called character. And we created a function that is called get quote. It nicely formats some quote of this character. We also subclassed it. And we can see that it works here very well. We also think about ourselves. We are so smart because we can handle the situations where there is no quote. We know that Sir Ilympain isn't very talkative for some reasons. And here we handle it. Sir Ilympain won't say anything. So it's okay. Then we can add another characters. It also works very well. And we are very happy. But then we want to do something more. We just think that there are too many good quotes by Tyrion Lannister that we don't want to choose one of them. So we use the random module and we use random choice to select one of these quotes. We are doing this and what happened? Okay. Who saw this coming? Who saw that this would behave like this? Exactly. Not a lot of you. Okay. Who can tell me now what really happened here? Yes, there is a typo. But can we see from the behavior of this program that there was a typo? We can't. This typo here would raise attribute error. This attribute error would be silence. It would be called by this get-at. And we got our error silenced. This is something completely against Zen of Python. And this is something that makes it very hard to debug. This example here is super simple. But you could have this error raised some 10 frames deeper and you could spend two hours on debugging sometimes. It happened to me. So this is not a good way to do it. Now let's see if we change this just a little bit. Here we don't rely on get-at. We just set quote in our base class to none. And we check if it's still none or if it was changed in the inherited class. And now we can see, oh, snap. I made the typo. There is choice, not just. And if we... This is a thing that we can fix in two seconds and it works now. So if you don't have really, really good reasons, just don't rely on get-at and has-at because it can produce these kinds of very, very hard to debug problems. Thank you. APPLAUSE Antonio Ognio, are you around? All right. Richard, was it okay that I did not write your talk for you? Where is the... Oh, there it is. Okay. Where is it? Oh, there it is. Wow. Now I have to... Oh, wrong way. I think that screen is on your left side. Your down... Oh, got it. All right. So much for changing the plan at the last minute. Okay. That was a great idea. All right. Everyone can see that? Is that big enough? Yeah. All right. Good. So... Oh, that's the wrong one. So what I was going to start with was this... Oh, you want to... Cheers. So I was going to start with this golden rules of lightning talk thing, which was going to be really, like, ironic because, like, the first rule we all know, don't go over five minutes. The second rule, don't do live demos. But then everyone's been doing live demos. So... Well, I'm going to do my live demo now. Don't forget a piece of paper. That's rule three. Okay. So I'm going to show you a couple of... Just a few little things, however much I can fit in the five minutes. The first one is a module called E. Who's heard of the module called E? You don't count. You wrote part of it. Okay. So pip install E. All right. Off we go. So E is a rather funny little module. It's designed for the minus M command. So Python dash me. It's got some basic functionality. It can do evaluation of the pass... What the... Oh. This is why you don't do live demos, eh? All right. Let's try that again. Pip install E. All right. There we go. So it evaluates expressions you pass on the command line. It can do all sorts of stuff like import this and things like that. So that's really neat. One of the other things it can do which is kind of nice is say we're doing some Flask development and often when you're doing something like Flask development or whatever, you get a bit lost in the documentation. You have to kind of poke inside Flask to figure out how things are working. So one of the things that the E module will do is tell you where Flask is. So dash me and a module name and it gives you the location of that module. And so we ask for the Flask.config, for example. It will tell us where that is. You can also then say less and it will fire up less with the module so you can then have a look at it. Or if you say Vim, you know, it's in an editor which is kind of nice. It's just very handy if you then need to like insert and debugging into Flask to find out what the hell is going on to your program. So that's really neat. Now, who noticed some funniness when I was doing the pip installs there? Did anybody see how, I don't know, blazingly fast that went for a computer that's not even online? So the magic there is a thing called DevPy. Who went to Holger's talk today? For the rest of you, you should have gone to Holger's talk. DevPy is really cool. So you pip install DevPy and it's spelled pip install DevPy. It's already there. So it's going to say whatever. Okay. That installs, I've got plenty of time. Okay. So then you run DevPy server. Actually, I think it's already running. So, yeah, it's already running because I'm using it. So I'm going to stop it. Okay. When you start it up, it says cool, running, and there's a URL. You then run a command which is, oops, sorry, flip thing, DevPy use set config. This is all in the very basic startup help. You don't need to remember this. And that URL. Let's grab that. Okay. And that sets all of the configuration things that need to be set so that your pip commands and everything else will now start using your local DevPy server. What that means is it's a proxying cache which basically means every pip command you do, anything you install will be cached by DevPy locally. So subs will install commands, use the local version. Really, really, really fast. And it's trivial to use like I just showed. I've got 48 seconds. I'm going to show one more thing. All right. This, all right. So one of the other things that I do is I volunteer running the Python events calendar and Python user group calendar. And what I thought would be interesting yesterday was I grabbed all the calendar entries because I realized we were getting kind of busy lately. I grabbed the calendar entries and I grabbed the locations and I plotted them on a map. That's all the py commons. That's the, that are in the calendar. I chucked the user groups on there as well just for laugh. There's a few of us now. And that's my time.ику how enrollment. in the Yeah, what is it taking such a long time? Yeah, well I showed them. Do you have it? Yeah. Yeah, so that's what I asked. Okay. Okay. Okay. Yeah. Okay. Hello, my name is Antonio. I've come all the way from Peru, South America to this conference. I'm very happy to be here. And I want to talk about wrestle microservers with Python. So we need to ask first what is res anyway. Not everybody knows that answer very well. What is a microservice architecture? And what is it a good idea to write or build this kind of thing with Python? So what is res? Res stands for representational state traffic that doesn't tell us very much. In practice what res is is a way of taking full advantage of the existing web-related protocols and technologies. I mean something like web proxies, application firewall, client libraries and stuff like that. In order to manipulate objects remotely. That's what it is in practice. Taking consideration that res was not invented. It was reverse engineered after the existing weapon knowledge in 2000 by Roy Fielding, one of the original authors of the HTTP 101 specification. It requires for you to include links so your API is browsable. And most importantly, it requires you to respect the actual semantic of each verb. Like for example, you can never just get in order to make a change in the server side. If you are thinking that res is only mapping the crude actions to an HTTP web-ware, you are wrong. It's more than that. Please educate yourself a little bit. There's a lot of information on Google about this. So for example, there are more than 15 status codes that you should regularly be returning. Not just 200 or 404. In order to know if you're doing this right, for each resource, which is for each unique entity in your problem domain, you should be having only one URL. For example, you should be including a home document. A home document with links to all the other available resources. There are many rules like that, including hyperlinks. For example, if you make a search and you don't find the date in your search report, you should not return 404. You should return 200 with our resources explaining that there are no available results. So for learning more about these status codes, this is a website that really helps a lot, HTTP status.es. Please grab your copy of Roy Fielding's dissertation. It's a PDF. It's very easy to read, actually. I really like it because it compares this architectural style to others, and takes many chapters to justify why REST is a good idea. I also have a talk about this in English. REST for the rest of the fact. Just please Google it if you're interested. And these two books that other speakers have been mentioning during this conference are really good. So microservices. Basically, microservice is building a larger system or larger service, piecing together smaller services. Very much like doing a match up using APIs from Twitter, Facebook, and the like. The most important thing about this is that they have to be highly reusable, self-contained, conceptually simple, and easy to maintain. Instead of making a big monolithic system and having different people with different skills to agree on a system, you basically build cross-functional teams, like for each department. Each department builds its own web service, and you just use them together. And each one can have its own agile development cycle independently. So even when you deploy that, instead of having one huge process with all this functionality, you can have each functionality in a different process, which is far better for reliability issues. So what are the advantages of microservices? The most important thing is that once that you have defined an API, you can build the internals. You can rebuild the actual implementation without breaking anything. Other than that, only one developer can maintain the code because it's really simple. Martin Fowler, the very famous Martin Fowler, has been written about this. There's also a conference coming this November in London, which is very interesting about this. And why Python? Well, the most important thing about Python is productivity. You really have to prototype these web services. Camille, are you around? Excellent. You're next. And again, a reminder, at 5.30, there's a small surprise happening here. One note would be to keep some battery life in your computers. That would be nice. All right. I'm from Switzerland, and I'm actually not here to show you something, but to ask something from you. So we recently founded a new hacker space in my town. And one of our goals was to improve education and to, like, get children into technology. And one way to do that is in Switzerland, many primary and secondary schools offer something like a vacation program for children. So they get a vacation pass where they have many activities to choose from during the vacations. And we want to offer one of these programs, and I want to offer a programming workshop. So we thought about how to do this. So, um... Probably most of you know Minecraft, and probably even more children know Minecraft than you. There's actually something called Minecraft Pi Edition, and it's free. And if you have a Raspberry Pi, you can just download the binary and run it. And one of the good things is it's actually scriptable, so you can program the tiles. You can create a new block at a specific position. And the good thing is if you give one of the kids a Raspberry Pi and install that down there, you can actually go home, take the Raspberry Pi with him, and continue programming it. So my question is, if you have any experience with this kind of workshop, if you have good ideas, if you want to know more, then please contact me. And basically that's it. Thank you. Fernando Massanori, are you around? You'll be up. Good to have you after that. You ready? Yeah. All right. Hi. I would like to tell you about a tool, a tool for developers which I created. This tool records requests of web services. A basic idea of this tool is that all the time we call web services, we have to XMLs like request and reply. And to record them, to use them or record them, we can use XSLT transformation. There's web service. If we work with web service, there can be many times inaccessible. They're not, especially if you work with developer web services. So this can be really helpful if you use it in Dev mode. How it works. When you use web services, one, it's already working. It's record to the saved samples based on the config files. And when there is problem with web service, you can use service mode to use web service without noticing that it's not there. Right now, I will show you short demo. And here is three calls to the web services. This web service is really simple. It's just changing request to the reply. And I will call here. It creates this file which is recorded sample. Here is this response for this service. In the configuration for this message, we need to configure based on which parameters we want to create reply. Which parameters will be used in creating reply based on request. And all of them are used in this other sequence conditions. If you call more request, this file enlarges and there are other parts of it. If to prove that it's already serving from this. I hope. If we call web service again, it serves with changed files. As well, if you want, if web service has some errors, you can fix it in this sample files. Okay. Come back. I created a few configuration modes. Mostly, it's mix of recording and serving. And there is also transparent mode when it looks like there is no recording at all. So, what I'm already working on is implementing more, implementing XPAP2 functions which are not present in XML. But they can be very helpful if you create configuration file with this nodes. But it's just library only for the functions, not for them. And also, to not use whole blocks of XML, you can use nested nodes. So, it could be more complicated configuration file. In the future, it would be nice to create some support for rest and JSON. But unfortunately, JSON and Dress don't have such mature standards for XPAP or XSLT. Yeah. That's it. All right. Peter, are you here? Somebody is missing. Peter? Yeah. So, if Peter isn't here, then the next one would be Philip Kledzik. That's you. Excellent. Hi. I'm from Brazil. For the first time, by ComBrasil, it will be on the beach. Porto de Galinhas was voted by Magazine Best Beach in Brazil for 10 times consecutive. This is the venue of conference. The other thought. This is the Python community. Some speakers. And I invited you to submit call for papers are open. Thank you. Thank you. Jim Baker. Okay. I see you. I'm getting a little tired sitting and just for as a recommendation for you, just everybody, stand up once. Please stand up once. Stretch a little bit. We've been sitting for an hour consecutively. I don't want the other speakers to think we've all fallen asleep. All right. Some yawning. Okay. Thank you. Okay. Hi. I'm Philip Kłębczyk. I come from Poland. I wanted to talk about Python PL. Another Python. A little bit of history, but very fast because we don't have much time. Mostly photos. It started in my home city. We already had on the first edition over 100 attendees. Then we moved it into remote locations like mountains where weather in October is different depending on the year. We had a lot of attendees. Well-known people like from projects like PyPy. There's a very good atmosphere on the conference. We have three days of talks currently even four. We have different one-on-one speakers on the conference. We also have anniversaries. We do a barbecues in things like that. Yeah. Eyebrothers. And now we scaled up up to 300 attendees. We also have all the meals together because they are included in the price of conference. So let's talk about the current edition. So it has three to four days depending which option will you choose. It has three tracks, one full English track. We are ready for up to 500 attendees. We have parties and discussions all the time because all the attendees are in one place, in one hotel, which is awesome. And the prices are very low, I would say. And that includes accommodation and meals. So where the hell is Sturk? We always choose places that have difficult names because we love tongue twisters when people from US say, It's Sturk. So it's in the center of Europe. Look on this map. And near the border of Czech Republic and Slovakia. It's actually Besky mountains. It's southern Poland. How to reach? So there are nearest airports are Katowice, Krakow and Ostrava in Czech Republic. Ostrava is the closest one but has only flights to London and Paris. There are also Euro city, Euro night trains. You can also take a bus if you prefer buses with Wi-Fi on board. We will have over 50 talks and workshops. And at least half of them will be in English. Here you will have some of the speakers but the screen is too small to have them all on one slide. We don't have call for proposals because we've ended it two weeks ago but we have call for workshops proposals. So you can still send as a workshop proposal and if you will be accepted you will get a free ticket. There will be also communities from other countries on Pycom PL, some from Czech Republic, Slovakia, Ukraine and Belarus. I want to add that Pycom Belarus is the first Pycom in Belarus. So I recommend to support ladies that are organizing the Pycom Belarus. So we have an offer. If you are organizer of Pycom you can get one free ticket. It doesn't matter if it's Pycom Brazil, Finland or whatever or Pycom Germany. You can get a free ticket with accommodations and meals. So please contact us at Pycom PL at Pycom.org. And follow us on the web, so on Facebook, Google, Twitter, YouTube, so on the social services. That's all. I've made it. APPLAUSE I'm being totally naughty. If you are an organizer of a Pycom, please send the details of your conference to the Python Events calendar that can be in the calendar and everyone can know about it. APPLAUSE I got it. Are you around? Oh, well done. All right. APPLAUSE Can you see me? Hi, so I'm Jim Baker and I'm going to be talking about the state of Jethon. And I have 22 slides in less than five minutes. But I'm going to be talking about the state of Jethon. Because we've been doing so much work. It's under extremely active development right now as we're trying to close to get to final release by Q4. So I found in this development, along with all the other core devs and committers, that the language changes were pretty easy. It's the run time in libraries that we've definitely spent our work on. We can way more pages on the A and the script. The internet micro system is our current focus. Some stuff we're talking around GIB. You need to use Java 7. We have some interesting functionality. For instance mix Python and Java types. for interesting efficiencies, so on and so forth. There's this new work called Socket Reboot which re-implements the standard Python socket module as well as adding support for SSL and real support for select using NetE4, which is quite a really good event loop package for Java. And I would hope we would eventually use it for async.io support as well. So here's a good example of what we're using to actually provide socket support today. You can see it's actually just Python code binding to this NetE package. It actually is able in a very small function which is slightly cut off here to handle all differences between non-blocking and blocking with any timeouts for a given socket. This enables requests. So you can now use with the latest version of Jython, certainly what's in trunk, this popular client. And since it's used by PIP, this is really good. PIP used to work, but because of this change to using request and also the support for SSL that is now required when working with PYPI, this was important for us to do. We almost have this complete and it should be in the next release of PIP. Regular expressions used to have some problems and were slow. I heard someone talking about a potential cherry pie performance. I don't know about your specific case, but this might actually fix it for you. It was really cool to see this great commit by someone who contributed this, Indra Tullip. We are now also developing stuff outside the usual release schedule in Jython. So for instance, I'll talk a little bit about Clamp and Jiffy. There's also this new fireside, WISGI bridge to work with several containers. We've had that in the past, but this knows about site packages and is PIP compatible and is really nice in that fashion. Clamp allows you to directly import Python classes into Java. What does that look like? Let's say I had this Python class that extends some Java interfaces. Really simple. It's really implementing the callable interface. You add two lines here in terms of being able to say from Clamp import this Clamp base, Meta-class factory, use that Meta-class factory function to generate your bar base and then you add this bar base to your list of bases for that class. And now with just one more step in terms of in your set of tools using Clamp, you can go and this is now Java code. Sorry to show this to all of you here. That here you are directly importing a Python class into your Java code without any additional work. Just one line. How's that? It's pretty awesome. And Darius and I, he did a great job working out this with, you know, it was fun. So Jiffy were planning to provide CFFI support. There's this interesting patois. Jainai is a project that allows C extension API support. There's going to be a sprint on this in auction on Monday. We're also having a sprint on Saturday about Clamp. Again we're planning to get a beta four out. Release Canada is as needed. Mostly this is about going and there's obviously if you, for what we want to do, Java integration is key. Java nine is going to add some additional support. And what about Jython3a.exe? I'll let you guys read this as my time runs out. And some blomberg, are you here? Excellent. You next. Peter Koppatz, did you arrive here by accident or purpose in between? I'm going to pass it over to him, yeah. There you go. Okay, Paul. Okay. Can you give me the system settings? It should be. I mean, it doesn't have an html. It just has this one. Yeah, yeah, yeah, that's okay. Yeah. That's okay. That's okay. Yeah, yeah, yeah. Yeah, yeah. Yeah, yeah. Is it built in digital? No, it's not digital. This is HDMI. Do you have another adapter? I think I have one. It was just a matter of time. Yeah, yeah, yeah. Yeah, that's good. What do you mean? Yeah, analog. That's code of conduct. Okay, hello guys, I'm Agata, and I just want to have a short talk about how to make Python more sexy. The idea is pretty simple. We just have to improve Python to be more sexy. So let's start from the beginning. We can just simply improve packaging. Just guys use Python gems. And of course, improve parallelism, like replace the Jil with V8 and use more callbacks. What about the style of Python? Adopt an explicit Java-like naming convention because readability counts. And of course, guys, it's really simple. Just use more globals. No imports. Use file includes. And just build in carrying. And after all this stuff, I just want to say you one more thing. I was just kidding. Python is as sexy as it can be. And it cannot be more sexy, guys. And I want to thank you so much to inviting us for our Europe Python conference. And we just love you. And I hope to see you next year. And of course, I hope to see you in a shterk because Python Poland is waiting for you. Thank you very much. Thank you. Thank you. Thomas, you're after that. And again, there will be something at 5.30 where you need your computers. So save battery or plug in. I hope you've got the mobile phone and the tablet with you. We'll put those to some good use later. You're ready? Yep. All right. Hey, guys. My name is Anton Blomberg. I'm in my Swedish distributed systems gig. And I want to talk about parallel execution. Well, everybody knows there's a gel in Python. And therefore, as Pythonists, we're not very used to dealing with this concept. And, well, if you actually could do parallel execution, why would you? Well, of course, increase the speed of your program and reduce the latency. And maybe why would you not? Single-fared programs, they're easy. Multiple threads, it's really hard. And why is this? It's because you introduce concurrency into your programs. It leads to race conditions, deadlocks, and all sorts of nasty problems. They're really hard to debug. So what you do, you add locking, synchronizing, and then your code base is so hard to understand. But there is an alternative to program systems that's running concurrently. It's the actor model, which is a very old way, has been around for ages, where you do parallel concurrency without locks. So this is not your regular threaded model, where you acquire a lock and do your stuff, release the lock. Everything is done in independent share-nothing tasks. This is a bit similar to all the G event tasks with libraries, Node.js, blah, blah, blah. But this is more a way to organize your code to make it easier not to lead you into callback help. So what you do is you communicate by passing messages between these actors. And every actor is in itself like a process. It has a shared nothing with all the other actors. The only way to communicate is to send a message. And all messages are sent asynchronously and put on the queues for incoming messages for all the other actors. Since each actor can only execute one piece of code at once, you cannot go into race conditions because everything is in itself atomic. An actor can only receive one message at once and process it. So what you get with this is execution transparency, network transparency. As a coder, you don't need to know where your code is executing, in how many parallel threads it executes, or if it actually executes on another system, on another machine. So what you actually get is distributed systems for free. So if you want to, if you like Python, then maybe this is bad news for you. But the PyPy SDM, it actually has potential to bring this into Python. What it adds is parallel execution if there are no conflicts. And in an actor system, there is a shared nothing architecture, which means no conflicts. This means you can run Python code fully parallel on all cores. So what I did yesterday after having a couple of beers, was actually try to implement this in a Python only implementation to make use of an actor system in a fully distributed parallel environment on PyPy SDM. And well, it kind of worked. So it's not a library, it's a proof of concept. What they basically did was implement Actress, a multi-threaded, fully parallel event loop. A lot of buzzwords, but it's not your G event event loop that you execute in synchronicity, but sharing the time between tasks. You actually execute fully in parallel. Since actors share nothing, you can process the cues of the received messages in parallel and do all the actors on all cores. So what they did was basically give the application developer a generator statement and receive a new message with a yield and built into the language. You can now receive a message in a synchronous manner and execute fully in parallel. So it works in C Python. It's totally regular Python code and it shines on PyPy SDM, well, kind of. The overhead is still high on SDM, but it actually improves the more cores you add. So as a fun exercise, I also implemented pure Python-efficient immutable data structures like an immutable dictionary which gives copy and write semantics but doesn't actually copy anything. So you can find this at if you go to deadlock.se where there's a link to the GitHub so you don't need to remember it. And if you like distributed systems and see the potential for Python to actually run stuff in parallel in the future, donate huge amount of cash to the PyPy SDM guys and give these guys a round of applause. Christoph Neumann, are you around? All right. Can you make it in four minutes? All right, that's excellent. I have two announcements to make. It's both related to having private email. And to begin with, we'll make a GPG, PGP key signing. It's right after the lightning talks and surprise thing. So we meet at 1745 in the basement in the lounge area where there was so far and that stuff is. And just look for me and for Arnold Grille, we'll kind of lead this. And if you need another motivation after the first keynote, and if you still think you have nothing to hide, this is the slide for you. So what can we do if you don't use any GPG yet? Maybe in reality, you don't have private email yet because they are reading your email. It's not because they are especially interested in you, but just because they are reading all email. That's not encrypted. It's easier than you think. If you want to start right here at Europe, Python, we will have another event and it will be in the bar camp. And we will have a small crypto party. You just come there with your laptop, have Thunderbird installed, and we'll help you to get GPG going and to create your keys and so on. Just meet us there. We'll try to make a session about this. You can also use another email client. Just make sure there is some sort of GPG support for it. So for the key signing for the event today at 1745, what do you need? You need a PGP key, of course. It's a key signing. You need your name, email and key ID and fingerprint, for example, on such paper strips or on your business card. Alternatively, you can also have this data just on your laptop screen if you don't have any paper with you. Then you need a valid passport or ID card. So the procedure will be about like this. We will just row up in a kind of circle, but it will be a flattened circle. So everybody is facing somebody else. And then one guy will just verify the passport of the other guy. And we will compare the identities on the paper strip. And if everything is okay, you just take the paper strip and you can sign the keys later at home. You don't need to do it here. Then we just rotate right by one and the next verification step happens. And we repeat this until we all have checked everybody else. If you have no paper strips, you need this. Either you have a mobile client maybe on your Android phone or whatever. You can just show the key info page of the GPG implementation. Usually the info page shows your key fingerprint and then the other one can just make a photo of it so you don't need to exchange any paper. Also, if you have a laptop, you can just enter that command to print your key IDs, your email addresses, your name and also your fingerprint. Then just copy and paste it into a world processor and make it full screen so it's easy to photograph it. And then the other guy will just make a photo of it instead of taking the paper strip. What you need later is a tool called CAFF. If you run Debian or Ubuntu, it's in the package called Signing Party. And if you have a lot of keys to sign, that will save you a lot of work. You need a lot of work to set up that tool once because you need a local email server or at least some sort of relay agent. But it will save you a lot of work if you have done it once. Alternatively, you can also do it manually, but then you have more manual work. And the tool is rather easy. You just say CAFF and key ID, then it downloads the other guy's key from the server. You can also use the fingerprint so you can compare with the paper or the photo you have taken. Then you can sign each of his email. And the tool will automatically create multiple emails for all the email addresses you wanted to sign and sends each signature to the corresponding email. Yeah, this is the final slide for everybody who has maybe not seen it yet. It's from Germany. Thank you. So I'd like to get an overview of how many computers we have in here. Who has at least one computer with him? All right, that's a fair standard. You don't have to show me the computer. Who's got two? And computers, anything that has a CPU in it? Who has three? Okay, now that's the computer or smartphone in a tablet who's got four. So the fourth one, does that have network connectivity? Who has four with network? James, you are awesome. We need you. You're going to be a workhorse here in a minute. Ready? Ready. Let's go. Hi. My name is Christoph. I'm co-founder of Quantified Code. And what we do is we do data-driven code quality management. So we develop software, data-driven software that helps you monitor and improve your source code. And we are lucky we got a funding from the German government. And so we can, for the next year, spend our time without a lot of business pressure to build a great product. And I'm here today to ask you to help us to give us feedback and to check out our first alpha version because we want to build something that really matters and that really is going to be used by the community. So what we are striving for is basically we want you to check in your repository on our website. Then we will offer you continuous check and monitoring of your code quality. And finally, we want to not only check the code, of course, but we want to display results. We want to give you suggestions. And in the final state also offer you automatic improvements to the code. How do we do that? Basically, we apply machine learning algorithms to a lot of source code. Basically, to most of the source code you can find open source and GitHub. Where are we right now? So as I said, we introduced an alpha version. So we can already check the source code of open source, public Python repositories on GitHub. And you will already get commit by commit a report of what has changed. Did you add bugs or did you fix bugs? So let me show you the website. So this is basically our alpha version. So what you see here, if you visit our website, is basically you get a list of all the projects we already crawled on GitHub. So you can let's go into one of them. There is, by the way, no sign up needed. You don't need to do anything. It's all the projects can be used right away. And now you get an analysis of the mistakes and errors in your code. How did we do this? As I said, again, it's an alpha version. It is the first step. So what we did is we used common linters, pyflakes, PEP8, and so on. We checked if the messages, they give you a relevant. We categorized these messages. And here you can filter whether the message or the error is a critical one, a potential bug, et cetera. Let's zoom into one. So you click here and then you go directly to the piece of code where this issue occurred. So now what I really love to get from you or anyone who's interested in static code analysis, code management, code quality management, or any programaries, now this is a simple alpha version. It has functionality. It gives you a few of your code, but I would like to know what are the features you really need? What do you need in terms of workflows? Where do we need to integrate into Jenkins or any other systems? What are the common mistakes you get from other linters which you would like to see solved? Yeah. Just reach out to us. We want to develop the product with you. All this is here free and will ever stay free for open source. And also, as I said, we got a government funding. We have free slots there. So if you're interested in working with us for the next few months on the cool product, then get in touch with me. Thanks. All right. Was that a good set of lightning talks today? Was it? Thank you.
it. Thank you. Thank you. Dima Tijne, are you Unfortunately, it's not that great in Python, but end in for humans. So there I fixed it. But I you. APPLAUSE Antonio Ognio, are you around? All papers are open. Thank you. Thank you. Jim Baker. southern Poland. How to reach? So there are latest version of Jython, certainly what's in your list of bases for that class. And now with Python more sexy. The idea is pretty simple. We much. Thank you. Thank you. Thomas, you're after guys. My name is Anton Blomberg. I'm in my more a way to organize your code to make it Python to actually run stuff in parallel in the Christoph Neumann, are you around? All right. Can analysis, code management, code quality