 Like a hundred seats empty at the front and everyone's going to be standing at the back and it'll be a mess So come further forwards the further forwards are the more you enjoy the lightning talks You can see people better if you've got any like Rotten tomatoes you can throw them at the speakers more easily from the front Like all of these sorts of things hooray. Oh, thanks everyone Actually people doing what i'm suggesting that's amazing There you go, uh, no, they'll be all right If you're giving a lightning talk, you know It's even better if you're sitting at the front. That's a good idea Yeah, yeah, well i'll come over and look at it every soften Guys come close to the front the closest the front you come the more easy it will be for loads of people to come in Leica Look at all this lovely front row that's empty here if you were sitting in the front row you would enjoy the lightning talks so much So much more than in those bad seats at the back. Come on come forwards come forwards. It'll be better No, they'll be fine Come forwards everyone come forwards close to the front It'll make it much easier to fill the room Think of it as helping out the people who are going to arrive late Here we go Lightning talks are you excited about that lightning talks are like the best part of the whole conference come on obviously Apart from the meeting people and solving their problems and learning new things Lightning talks then regular talks then then all the socializing that's terrible. I hate that Thank you guys that's excellent. You can have the actual front row the front row too is really good Brave guy there. There you go. All right the front row nothing bad will happen. I promise there's no audience participation Conference it's time to tweet them or text them now saying the lightning talks are going to start the lightning talks are the best bit Come on in here Who here has never been to lightning talks at a tech conference One two three All right plenty of people all right guys This is like the best bit totally really short talks about really odd things sometimes really boring things Sometimes really exciting things usually really exciting things sometimes very strange things sometimes funny things Sometimes demos that go atrociously wrong All of this can more anything could happen at this point anything It's magical. How's everyone been enjoying the conference so far? Yeah Sorry, we'll wait for more people to come in the room and we'll do that again. That will call that a practice That was pretty good. There you go How'd you guys enjoy Ola and Ola's keynote this morning? Like that is Yeah Yeah, that was like refreshingly different. I have to say like that's just absolutely wonderful Come for front everyone. Yay. The front is the best place to see the lightning talks. Hooray Okay So start preparing like the first person I've got on my list over here is austin bingham austin. Where are you? Okay I'm gonna come up here and maybe wire up your laptop. Just make sure it works the next person after that is Fran Fernandez No, we swapped them there you go max tepki if Max tepki if I apologize for mangling your name Actually, I've practiced all of the names in all the different foreign languages So whenever you hear me pronounce someone's name, you should know that's exactly how it is pronounced. Absolutely true So tepki if Max come to the front so that you're like really easily ready to start for the next thing Oh Lightning talks are great. They're like five minute talks about exciting topics interspersed with about five more minutes of faffing around going Oh, why doesn't the dongle work? I just it's a map. I don't know why what's the resolution Where's the window for where you change what displays on which so like and that's five minutes in between each one It's a sort of repetitive relaxing routine Yeah All right, am I on there you go so that seems like it works Looks good enough. All right. It's as good as it's going to get We'll probably give them a couple more minutes. I have five minutes. Is that the five minutes is the Uh, yeah, I might be cheating next time. Ah, don't do that. Oh my god No, but I have five minutes for the talk. Yeah, you have five minutes for the talk We're just gonna let a few more people come in and then we'll kick off All right, welcome everyone come to the front. There's like a whole row of seats at the front There'll be amazing seats come forwards come forwards. It'll make the people behind you find seats more easily Hooray lightning talks you've come to the right room This is going to be the best thing of the whole conference yet apart from over a notice talk and all the people that you met And all the other talks that were actually better and all the bits where you didn't have to listen to the sound of my annoying voice Hooray Come in come in come in come in come in quick quick quick Walk fast, but safely Lots of seats in the front row here. Yay the front row. Come on Crane your neck feel like you're part of the conference get right up and intimate and in touch with it all Again, please Exactly you're not Jacob. So please come and sit in the front row and heckle harder Come in everyone there's loads of seats at the front quick quick quick come on come on come on We're gonna start it's gonna be amazing. Hooray, but we were waiting just for you guys We can't start without you, but now the party can begin All right, and I think that might be pretty much it. All right, how is everyone enjoying their conference so far? Okay, amazing. Well, thanks all of you for being here. Thanks for coming to the lightning talks the lightning talks The best part of the whole conference apart from all the other bits that you like Um, so without any further ado, let us introduce austin bingham. Who's going to tell us about? Cosmic ray mutation testing for python. Hi. I'm austin. Um, I've only got a few minutes. So let's kick it off What is mutation testing? Some of you might have heard of this It's an idea that's been around for a long time 30 40 years in various researchy forms and is a really interesting thing So The idea behind mutation testing is that you take your existing code base that you presume works to some degree And you make small controlled changes to it in a sense in some sense random random changes, but not random But random s you then run your test suite which presumably passed before you made the small change to your code base And then you see if your test suite fails The idea is that if it doesn't fail then you've got a test suite that's not adequate to detect all the possible things It could break in your code. This is the theory of mutation testing Really one of three classes of things can happen when you do this one what they call killed your your test We can detect the change and fail in which case they say you've killed the mutant Another possibility is that you get what's called an incompetent mutant which goes into for example an infinite loop You make a change that causes it to spin forever This is one that Your test suite hasn't really failed but it has no chance to detect that The change has been made because the the the test never ends The final thing that can happen, of course, is this is what you don't want to happen is that your test suite Doesn't detect the change and we say that the mutant survived and the goal of mutation testing is to Calculate a survival rate essentially you want that to be zero You would like in principle for your test suite to detect all possible changes to your code And this is what mutation testing does systematically Mutates your code and then runs your test suite to find these kinds of problems. So this is not This is not unique to python. This has been done in many languages most notably job It has a very powerful mutation testing tool when I learned about mutation testing Of course my natural instinct was to make it work for python. So I set out to do that The basic approach is pretty simple. You have adam. He's my he's my My my package of choice. Of course you want to mutate adam the the first person depending on What religion you are and then you have a bunch of mutation operators and these are predefined things like deleting arithmetic Parts of sub trees of arithmetic operations or replacing break with continue things like that So these are the flavor of the kinds of mutations that you might apply And finally you have some test suite there at the end that you run So it's kind of a triply nested loop you have for each module in your package a b and c in this case And for each mutation operator and for each potential site each place where that operator can be applied You have this sort of triply nested loop you then run your test suite and this of course can take a very very long time But this is that's the basic algorithm of mutation operation So how do I do this in python? What was really joyous about this entire project? Because I found really all the pieces were in place already I was when I approached it. I thought this is either going to be impossible or actually really fun And it turned out to be really fun because all the little bits and pieces you need to do this exist in the standard library or in really accessible third-party libraries The ast module obviously is what we use for manipulating the abstract syntax tree. So we actually recompile on the fly The modules that we're mutating and then we walk the syntax tree and just start ripping things out and mutating them and throwing them away And that's how we mutate the code sort of in real time We use the compile command to recompile abstract syntax trees into modules and we stick them back into place in the sys modules map We use multiprocessing Primarily for sandboxing this guarantees that no matter what the mutation does it can't somehow bork the rest of your program And so multiprocessing doesn't is not what we use for concurrency. We just use it for sandboxing We use a library called pica for concurrency, which is an actor implementation in python It's a wonderful library. You've never used pica try it the author might be here and you can pick his brains about it But it's a really really wonderful library that i've used multiple times to great effect Um, I mentioned, uh, well, I didn't mention sys metapath But we have to manipulate sys metapath to put in our own loader Finders and loaders are parts of the import subsystem if you don't know about them You can learn about them. They're really interesting Maybe not from a practical point of view, but if you want to know the guts of python and how a lot of the import stuff Works you can read about this in the various peps And finally we use unit tests for test discovery. We essentially say there's the test directory just scan it and find all the tests um We plan to support more test systems. We do support py test at least nominally right now I'm pretty sure it works, but i'm not positive because I don't use it all that often But it was something that was requested quite widely. So unit test and pi dot test both supported right now um It works interestingly it actually seems to do its job We have a a reasonably sophisticated test suite that uh seems to keep us in check and we've run it over really large code bases for instance the hypothesis uh unit test or the hypothesis testing system and other Other tools one of the problems with mutation testing is it takes a very very very very long time for any A significant sort of code base and so some of the future work is going to be in Improving that tying the mutation testing algorithm to coverage analysis tools saying okay We've only changed this bit of code So we only need to run these tests which we know touch that bit of code and that sounds easy But it's actually incredibly difficult because how do you know the mutation didn't cause the test to now Touch this bit of code you don't so yeah, okay, that's it join in you can download it there All right Thank you often amazing And then Can I have whose next fran uh fernandez preparing up at the front fran? Where are you excellent? All right That was great. Okay. So lightning talk rules We have exactly five minutes and what i'm going to do is to try and encourage the speakers to finish If they hit their five minute rule I put up one hand And they then have to finish their current sentence And then finish the talk and the way we do that is when I put up one hand I want you guys to start clapping with your fingers. Can we practice that now just to make like this noise? Just with the fingers See and then the speaker will hear that go. Oh, I'd better finish and then when I put up both hands you can full clap Try that now And then the speaker has to finish because no one can hear you anymore There you go That'll be great fine How are you getting on and we're ready straight away. You didn't have to hear any bad jokes amazing There you go max take it away. You're gonna tell us all about So, uh, hi everyone instructions um instructions are everywhere They help us to do things right if we follow them as we should Sometimes bad things can happen if we don't follow them the properly As programmers we write instructions every day using python to make a program do what we wanted to do But the problem is that sometimes we have to write a lot of code to solve even simple tasks For example imagine that you need to find all strings with a length of three inside a list The most straightforward approach would be to write a simple for loop nothing fancy here Just check if an item is a string and its length is three then this is what we are looking for We can also write list comprehension to make it look neater Now what if our list also contains a list which also contains a list smells like a recursion Um, we can write okay, you can write a recursive function to solve this task and it will work But the problem is that not all people understand recursion because to understand recursion you have to understand recursion, right? So while it's a very simple task we need to write quite a lot of code to solve it We also need to take into consideration different python versions Like if we want our code to be portable And the thing is the thing is that we are writing this code again and again every day We are searching for some values inside iterable data structures And I just decided that maybe it's it's time to write some kind of a library which will do that for us And I called it as you might expect instructions So let's have a look at how our task can be solved with instructions At first we do the import and because I'm a lazy person I like to use the I alias because it allows me to type less And then it's as easy as to speak English. I must get instructions to find a string with a length of three inside a container The results are returned as a generator object to be memory efficient. So we have to cast it to list to see the actual results Now let's have a look at our more complex example Our container with a lot of listing site the code will be absolutely the same Instructions will inspect all the nested iterable data structures And it doesn't matter how deep they are or what type do they have? I mean, whether it's at least a tuple or dig to something Instructions allows you to control how deep it should search how much results to return and what data types to ignore during the search An instruction is formed from a few simple concepts a command a data type a filter and filter arguments and filter options Now when we understand these concepts, we can have a look at other examples This is how you can find the string with the length of greater than or equal to three Find any numeric meaning an integer if load and so on that is between five and ten Count how many integers are there that are divisible by two Find only the first list that contains both foo and bar Find last tuple which has at least one string that contains a substring bear and so on and so forth What we've seen so far was an example of an instructions basic mode But there is also an advanced mode which allows you to construct more powerful instructions Here we want to count how many strings are there inside a container which starts with foo and with bar But don't contain yalla And as expected the result is one Instructions can be installed as usual from pi pi or clone from github Instruction supports c python from two point six to three point four pi pi and pi pi three It doesn't have any external dependencies Extensive documentation is hosted to treat the docs Already comes with more than 100 instructions included Instructions has 100 percent test coverage, but this is not just a number while the package itself contains approximately 400 lines Tests have more than 3,600 lines of code Unit tests are awesome So instructions supports, uh, almost all python basic data types It also tries its best to be clever and abstract differences between python versions from you And it also has aggregated data types like numeric iterable and more common in next versions So this is it. I hope you're as excited as I am and maybe you'll give this package a try And who knows maybe you'll never return to write in loops anymore. Thanks All right, and my instructions are that fran should come up on the stage and prepare his talk And then the next person after that is gonna be Smart field mirchea Are you around here somewhere? Are you close enough to the front to be able to run up? Are you prepared? Are you ready? Are you excited? It's gonna be amazing all right Fine so the pirate programmer walks into a bar and he's got like a parrot on his shoulder and uh The parrot's going pieces of seven pieces of seven pieces of seven And the barman goes I think there's something wrong with your parrot and the pirate programmer says yeah, he's got a parity error And then the barman says yeah, I thought he was a bit off Thank you. I'm here all week All right, and give a big hand to fran who's going to tell us about the gdb Hi Gdb is your friend. I find very interesting debugging how python works. So I'll try to explain in five minutes How can we explore how how c python works? so for do that We have to compile python that is very very easy probably you cannot see the The flags that you have to enable debugging flags that some of them are only available on Gdb version 7 and so on so we configure, okay Checks a lot of things I have to buy a new computer so slow now we compile using It's fast And we install But I find a very interesting way of learning the internals of python just look in this screen and you learn a lot but At least you know, there's a lot of things there takes less Now let's say that we're interested in knowing for example How list is implemented in c python. So one option is just merging around the files over Over the source code and we're interested in knowing how append works on list So we know is this file is list object dot c and the name of the function is listappend Okay, we have some information. This is one way that we can start so we run The python binary using this flag to not load all the things and make the debugging more pleasant Okay, we have an interpreter here. We can interrupt and this is basic gdb probably most of you know how this This work and we create a breakpoint on this object We have autocomplete even Okay, and we continue Yeah, and we will append some some stuff here So we enter in the breakpoint we can explore The back trace is probably is not quite readable there, but We can know where is the entrance point on on python is in file python python dot c line 69 And we can trace back how how the for example How it works and we can go layer by layer and trying to go deeper There we can also okay. We are in this function And we will check what happens there We are in another function now And we can go step by step and understand better what's happening there For example here it gets the size of the list to get the Where we need to append it checks it does a lot of checks because you see Okay Job being in my talk here the garage collection is also taking care We can go deeper and deeper Yeah, and pretty much that thank you Thank you friend welcome lecture all right, so I wonder if I can use you while mitchell is setting up to like exercise a little fantasy of mine, which is that I always wished that I was a drum and bass mc, but I'm kind of like the wrong social class and skin color to really do that properly and convincingly But since I've got a captive audience here I think I might try it A drum and bass mc for people not from the uk is a bit like a rapper Except that they have absolutely nothing interesting or of value to say and instead their purpose is just to hype up a crowd So in the next section, we'll do the drum and bass mc europe hyphen lightning talk skit But first mitchella who's going to tell us all about Smart feeds. So hi guys first europe hyphen presentation for me I'm gonna talk about social media aggregation okay, we Most of us do that or some of us do that, but the question is then what? I have this is my my background And smart feeds is actually a social media aggregation project where we gather messages from multiple sources like You know twitter instagram facebook youtube and so on we aggregate them we display them in a single field feed and present them in the Unified interface like the one that you might have seen on the hallways on some of the tv's Our setup is python only or actually almost we run jango for the fronten app We run it with celery celery beat rabbit mq. We have distributed q specialized workers Aggregate them into post grass with elastic search uisg n gnex and the fun part is that we process this we use nltk heavily we put the data In a neural network where and process that data using cassandra and spark We have moderation and this is where some of the nltk stuff comes in in handy We try to filter out unappropriate content Um, yeah for conferences. This is not it's not the case because the crowd is quite quite friendly here We have also manual moderation we and we also Are implementing a way to exclude for instance nudity from Images and we're thinking about having that on videos as well Um Okay, so what exactly can you do with all this data that you gather you have an event like this one Then what do you do with it? What we are trying to do is actually identify the people Try to track them and try to group them together and see what they like What they do not like Um, we create we have a neural network that matches everything and Based on that we can for instance predict how a specific brand will behave to changes What's the current mood of the people who like or dislike that brand based on changes that they do? And what can be improved we use the same system for instance in gamification purposes like you know, um internally for for Even for this event We'll see who had the most tweets the most retweets will provide this data Back to the to the organizers and yeah provide analytics aggregations with elastic search and That's pretty much it We love questions. So if you have any questions about the project Please approach me on the hallway Stay tuned because part of these projects will be made open source. So everyone will be able to to use that That's it. Thanks Thank you All right. Hey all the people at the back. Why don't you come and sit down at the front? There's like six or seven seats over here. There's about eight or nine down there If you come forwards, you'll get a seat. Come on. Come on. Come on. Come on Okay, who's next on our little schedule? We have String pausing by peter peter jabbo jabbo you're here come on up and sit up And while peter's getting ready is rob collin somewhere nearby Are you where are you hiding rob? Okay, are you ready? Would you want to come to the front? There you go guys. We sit in the second row for hey floris Hi guys Hey, you guys sitting at the back. Come on come to the front. There's loads of seats to the front I promise that there'll be no audience participation. You don't have to answer any questions or anything. There you go all right fine So are you ready for the drum and bass mc bit? I have to pretend to have a microphone. It goes a bit like this Me Oh my gosh Euro python massive everybody in the house Oh big enough all my programmer crew all my asparagus syndrome autistic staring at their feet hyper intelligent crew All my ladies crew all my science crew all my web development crew All my two people doing kivi mobile development crew all of you're massive. Are you having a good time tonight? Make some noise Talk selector hands up who thinks I should switch career and move into John Mason sing. Yeah, definitely right? Yeah. Yeah. Yeah. Yeah I hope I can I hope you can read all my slides In here and if you understand everything then you can relax for the next five ten twenty minutes Um, so i'm going to talk about uh, some aspects of string parsing and the best practices I have discovered In the last couple of decades So first Zero If you have a library To parse your input then use the library like the standard json library in python Or find the library before you implement your own parser especially for html If in doubt use regex like don't try to split call split lines and split and things like that Use the regex, but it can cover much your syntax much better most of the time Use the row string syntax Raise your hand if you know what this r means Okay for the rest of you The r makes it interpretation of the backslash different. So python when you have a string Um It interprets the backslash as an escape character But also backslash is a Special character in regex So it prevents python from interpreting the backslash and the backslash goes directly to the regex library in here Use a re dot Find iter and things like that to find all the matches And re dot sub for Substitution replacement. Those are standard ideas, but eventually By the end of the slide they will become complicated Or they will see how to solve the complicated problems with that Also, it's a lesser known feature that if you compile a regex the search method and Match method have an extra argument Which you can specify the First index of the string where to match. So you match the beginning of the string Then you can match the rest of the string With another regex That that's how it works. You just have to remember the index That's very useful if you have an sd structure like Blocks or or parenthesis in Within each other or like xml tags within each other don't Even try with regex that that would want to fail So you either need to maintain a stack yourself or find a real parser Which is beyond the scope of this talk And the most important thing I discovered is that Things tend to break or we get incorrect result Results unless we pack all the syntax into a single regex So I can show you how The example is how to remove a c comments from a c source file. So comments are between these two Symbols So this is a comment also at the end of the line After slash slash Till the end of the line. That's also a comment So we can remove the second type of comment with the regex substitution But unfortunately doesn't remove the first type. So we first remove the second type And on the output We remove the first type But it will break Don't don't try because it violates rule number seven Because we have two regex So it will break if there is a single line comment within a multi line comment So how do and it will remove the word bar and it shouldn't Um, so how do we do that? We merge those regex with an or Into a single regex and remove them together That's the that's the basic idea And now there is a problem if there is a slash slash within a string literal So between double quotes, we don't want to remove comments within strings So how do we do that? We add even more kinds of tokens to the regex So we first have in here the single line comment The second part here is the multi line comment This one is the character literal like starting with an apostrophe and the last Last part of the regex is the string literal starting with an Sorry starting with a double quote And what happens if we have a backslash and a backslash and a backslash and a double quote Depending on the odd or even number of backslashes But everything is covered in in the middle here Again, we have the backslash singly and the non backslash singly separated by an or So everything is covered and the the solution is uh, finally correct And I have hidden a space in the replacement string Um, and that's uh, uh, because uh, if I remove It has to be a long long sentence from now For this one this one has to be replaced by a space And uh, it's an homework how to figure out where to insert the space and where not I don't know about you guys, but I don't care if I've got like a hundred thousand lines of code I think I would have done that by hand rather than try to understand that regex. That was amazing So rob and Fabian Creutz Fabian Creutz, where are you? Okay, you're gonna set up. I think at the same time as as rob Okay Excellent All right Rob's Rob's actually gonna do the first talk while fabian sets up So give it to Rob Curse it dongles Could one of the little prongs be slightly bent Come on out, Rob. Do you want a bit of help? Oh Look at him there with his chair Oh, Rob. You look tired Oh, I don't like flying to get to the airport and Worry about which terminal you've got to go to once I went to the wrong terminal and then Having to get to the gate and they give you about 20 minutes From the flight being announced to the gate closing and you've got to get a train in that time and supposing You get the wrong train and it's all very very stressful and I find I really like staying at home but Too much work, you know, I've worked for weeks and weeks sat at the computer crouching over getting more and more stressed Trying to get a project finished before coming to euro python and I think What I need is a way to relax and not be so stressed, but I'm at a computer conference and there's no opportunity. I mean we're sitting in comfortable seats, but it's still lots of programs to attend at the right time you've got to be there and It's all more stress. So what I really would like is To have some opportunity for a nice relaxing massage But there isn't an opportunity at a computer conference, is there? No, but Hey, wait a minute that might well be possible because on Wednesday evening There is a meal And possibly Thursday and Friday Lunchtimes in the break there might be an opportunity for a massage A sponsored massage in aid of the python software foundation All you need is a few expert people able to do neck and shoulder massage Somebody such as fabian who is going to demonstrate while i'm explaining what we're doing Now it's just uh, perhaps. Oh, that's nice. Oh Oh Your muscles between the shoulder blades particularly get very tense And it's months of sitting in front of the computer that even a three or four minute massage can really help And the problem is that there's too many people here for me to do it on my own So I need some people to help and tomorrow at a quarter to five in the exhibition area We will be having a massage training session So if you're interested to find out about massage and how it relates to computer programming come along Be prepared to join in Fabian not only uses his thumb and fingers, but he will demonstrate using his elbow So if you have weak thumbs and fingers You've no need to think That you can't do it because elbows are very good. My wife uses her elbow like that because her thumb's not strong enough So come and find out and help raise money for the python software foundation We don't just need people who are able to do Massaging we also need people who are able to help Raise the money to go and talk to people. Please don't stop Able to go around the tables say give us some money and more people May request not to have a massage and pay for the privilege of not having a massage Then they would actually having a massage and that's fine because python software foundation will benefit anyway So please come along and find out why massage is such a good fit and find out also Why python software foundation that protects our intellectual property in python Is a really good cause to be able to support in that practical way. Thank you I did rob's massage course maybe two or three years ago And I really encourage you guys to go and check that out. He'll teach you how to do a really simple back massage It only takes about five minutes to learn you can really help people You can use this skill at home or with your significant other. I definitely recommended 445 tomorrow. Is that right rob? Yep, there you go which room In the exhibition area 445 learn how to do the massage and later help money raise money for the psf, which we all love There you go Are you ready flora? Yes Okay, you can hear me Okay, I'm telling a short story about extreme Internationalization and I start with a shameless pluck Um, my name is Fabian quotes. I'm a newly baked intrapreneur And I'm working on a storytelling road playing game platform I'm at the moment suffering a little bit from doing it all a loneliness So I'm also looking for for a partner and um, and that includes not technical partners But the story that I'm telling you I Didn't even realize that that meant that No, no, no, no, no, that's not what I mean Um my my project is um Basically has three Three concepts. There is of course the code itself Which is un uh, which is in java script, which is not a nice language, but at least um, it It supports utf 8 completely And if you use libraries, you'll immediately end up with using english a lot Um, then as road playing games go. There are different rule sets and the rules have their Original language like for example german for a road playing game called the schwarze auger. Does anybody know that for example? Nobody Okay, but it doesn't even matter what the original language is because it's translated into different languages And then of course we have the adventure text itself What the the part that isn't even part of the platform, but it is the content that is served by the platform And some author will write it in some language and I don't know which language that might be and of course While this second language the the one of the rules is the is the locale of the application that you're installing You can download content of other languages as well and they would then run in the language of the rules And of course the adventure content is not only text but also some commands which use an api And did I mention that there should also be a web interface which also is internationalized So we have now here one language two languages. Well, this doesn't really count. I realized that only later Uh, three languages four languages But although that looks a bit complicated. It isn't really that complicated. It is nicely separatable The big question is now in which language should I do the api? No, seriously, that's there was my my big problem Um, some people would use Some people would use english simply because it's a de facto standard But i'm a bit rebellious in these things. So instead of using english, I use Sorry, that's the wrong flag. I didn't use finish. They would be stupid because finish is spoken only by five million people So instead I use asperanto, which is also spoken only by five million people but spread all over the world And when I when I did that I realized that That this language barrier creates a very nice clean separation in the same way as separating html and css as completely different languages if you imagine CSS could also be an xml dialect and it would look basically just like html But it wouldn't be it wouldn't give you the same separation So as you can see here in my code, I have quite frequently the construction of my api As having the key in asperanto and then the function value would be somewhere in the code Which is mostly english And the nice thing as you can also see somewhere when there are lots of dots You see immediately the border when you go over into the into the api So from active adventure variables context vc tinta suddenly you realize oh, I just slipped over the border And I found this really great and my And so my my suggestion for you is use asperanto in your apis All right amazing. What have we got left? Oh fantastic. We have exactly one talk left So daniel, where are you at the daniel pope? Yay Okay, and that is going to take us exactly into the next slot, which is the Beer slot. So that'll do just fine Hey, everyone the back if you want to come and sit down for exactly five minutes. There are great seats up at the front here So I have a joke that takes about 15 minutes to tell I could start telling it you now and then if I do a little bit more lightning talks Tomorrow as if anyone would invite me back I could tell you a joke that's like meant to take ages and really waste your time And I could actually spin that out over three days who would like that You idiots everybody else in here hates you now Okay, so this is a story about a russian watchmaker who's uh nearing retirement Um, and he invites some of his watchmaker friends back and he says oh, I'm retiring So I thought we try and decide what the most beautiful object in my shop is Why don't you have a look around the shop and see all these old watches that I've got and see which one You think the most beautiful is or what the most beautiful part is? And so they're looking around checking out all the watches Um, and eventually one of them goes, uh, hi found it and the russian watchmaker comes over and goes What have you found? What have you found? He goes, oh, um, I like the bracelet on this watch here And the watchmaker goes. Ah, yes, that is gregor the bracelet This is how all russian people speak. Um the gregor the bracelet is a fine bracelet. Why don't you tell me why you like it? Um, and the guy goes well, you know, um, I like the way it's like got silver links alternating with golden links And uh, I like the shape of the bracelet and after all if you don't have a bracelet the watch would fall off your wrist It's just not a watch. It's an essential part of a watch. That's why I think it's the most beautiful thing in the shop And the watchmaker goes. Yes, gregor is a very beautiful bracelet bit I think not the most beautiful object in the shop. Are you ready dan? Okay That means you get more joke everyone Not the most beautiful object in the shop and the second friend of his pipes up and he goes, ah, I know why It's because this is the most beautiful object in the shop And he points at a different watch and the watchmaker comes over and he says Now, what are you pointing out my friend? You guys? I like the dial on this watch. He goes. Ah, yes That is vanya the dial Vanya is a mighty fine dial. Why don't you tell me why you like it? Um, and he says well, I like the the fact that it's uh, you know got roman numerals Instead of like normal numerals. I think that's classic. I like you where you've got little diamonds encrusted at least on the cardinal points I like the plain black and white design and you know if you don't have a dial you can't tell the time And that's why I think it's the most beautiful object and uh, the Russian watchmaker goes Yes, vanya is a very fine dial, but I think not the most beautiful object in the shop Um, and then I oh, okay, right. Well, so you obviously have an opinion What do you think is the most beautiful object in the shop? And he goes come with me and he takes him to the back of the shop and he shows them like a very old Common-looking watch. It doesn't look like anything special and they're like what and he goes look at this watch look closely You see you see and they're like no, what are you pointing at? He goes I am pointing at the second hand ticking around its name is Olaf Olaf the second hand I think it is the most beautiful object in the shop because it's the first second hand I ever made and without the second hand you cannot tell the time and that is why the most beautiful object And you'll hear the rest of the story a little bit later Take it right down. Okay. Um, okay, so sorry battery trouble. Um Uh, I guess talk about a library called pi game zero, which is a zero boilerplate Games programming framework for education that I've written over the past few months So to start talking about this I'm going to briefly cover the background Uh, there is a games programming competition called pi week. Who's heard of pi week? Okay, so this is a week long games programming competition. Um, it runs twice a year, but Uh, I won it in October 2014 Thank you And uh, for various reasons it hasn't run yet this year. So I'm still the champion. Yeah Um, my winning game was called legend of goblet and it's an adventure game and uh One of the things that came out of this was like I wrote a scripting language because you got like sort of tons of content to enter So, uh, this is a scripting language that is behind that game I'm going to be talking on friday about some of the like writing domain specific Domain specific languages in python So to hear more about this kind of thing come to that talk but Now to show you the other thing that came out of The other thing that came out of this was um I started this this game Using Some ideas that have been kicked around through the education track at pycon uk Speaking to teachers They told me That Pygame was too difficult to teach So like uh, the basic your most basic python program pygame program is is like about 15 lines of python So I tried to Take all of that out. So here's an empty file Uh the so That has been written as down here at py I could run it It runs it does nothing because it's an empty file But at least it's some you know does you can demonstrate that you've got it installed And then we might write a function called say draw Okay I will run that And it's still done that did nothing but because it's for education. It's got a I don't know if you can speak to see that It's got a spellchecker But if I fix that mistake then There's two lines of code and I've got a a program that does something else um, and so Uh, then you could do I could add something else. I could say uh screen Hey, I've got an alien And where did that come from it's in the images directory as alien dot ping Um, so, um, I'm going to be sprinting on this in the in the sprints. Um I think the the message here is that if you are targeting education You have to make things stupidly simple. You have to remove every line of boilerplate you can You have to uh add things like spellcheckers and you have to pay attention to the the stack traces and the the feedback that's going to allow beginner programmers to uh to You know to advance One of the other things about this is That it is just pygame under the hood So there is the potential to progress from this like sort of training wheels approach to something that is uh That you could write something like legend of gobleton So what to say Thank you dan Ladies and gentlemen, that is the end of the lightning talk So could you please give a massive round of applause to all of the speakers? Coming up next is a coming up next is a drinks reception Uh and refreshments out in the main exhibition area any organizers Is there anything else I have to announce at this point or can we all get on nothing no announcements? Everything is fine. We probably need more volunteers. Actually, that's a good point. You need more session chairs and room managers We definitely need that So if you want to do session chairing or room managing if you want to help run this conference Just for half a day go and find the registration desk ask the organizers It's volunteered to do a session chairing or room managing. We really appreciate it Thanks for coming to this amazing conference. Enjoy this evening four more days to go It's amazing. Don't forget to stay for the sprints. Uh, be kind to each other Tip the waitress. Uh, enjoy the pinch us All of these things keep programming big love If anyone's found a red nexus 5 phone Uh, uh, please hand it in red nexus 5 phone. Anyone found that? Yep. There you go Last property registration desk There you go python python python python python. Oh, it's over there. Look they've found it over there. Look look Red phone red phone red phone There you go Okay. Oh, yeah, we'll tell you the rest of the joke tomorrow. All right. Take the red register to the registration desk, please We take it to the registration desk. Thanks very much