Actually, I think everyone should know via the email that you can go to the website, look at your exam, look at the exam questions, exam solutions and your grade and I'll leave it to you to check, find out where you went wrong, especially check that I've added up the marks correctly. Sometimes my marking at least is not very neat on there, you see a quick tick or a cross, but on the front page you should see your scores for individual questions, make sure it's added up to the total correctly and make sure the total on the front of your exam is the same one that's on the website, because it's in fact the one on the website that eventually will impact on your final score. So I need to transfer from the paper exam to the website, make sure I haven't made a mistake. I try to check but you can double check. I'll say a little bit more about the statistics of the exam in a moment. I have some slides, any questions? Anyone have any specific questions or issues with the mid-term exam? Everyone happy with their score? I know some people will be, others may not be. We'll see some statistics and you, in fact even from Moodle, if you follow this link you'll see your score and I don't have it here, but if you select your grades you can see your rank for your exam, where you rank in the entire class in both sections. So you can see how you went compared to others. We'll come back to the assignment towards the end. The other thing, what else about the exam? The other thing was the course, course, the feedback that you gave online just before the exam. So let's quickly go through that. So there was a set of questions about the online quiz, mainly about the quiz, the difficulty and how it works for you. So if you haven't seen the results let's quickly go through them. There were, of the entire class, about half of the people responded. The first one was how can we improve the lectures? And in fact there were two questions and most people said more example questions here, more example questions, more in-class exercises. So, well, that's at least over the remainder of the semester. I'll try and give a few more examples in the class. We'll talk about those examples shortly. Remember the examples that I go through, I may go through on the board or on the screen. Sometimes I'll go through and there's actually printed notes on the website that you can download and that reminds me the new set of lecture notes are available in the copy centre. We're starting a new topic from tomorrow morning. So we'll try and give a few more examples throughout the lectures. So, what did you expect to get in the midterm exam? So, what half of the students said 60 to 80 percent, that was your own judgement. What were the actual scores? 3 percent got between 80 and 100. Between 60 and 80, maybe 16 percent. So people didn't go as well as they expected, at least, which is not unusual. Maybe this wasn't what you expected, but what you hoped for, for some students. So to shift down a little bit, but I hope all of the students can shift that up for the midterm and get closer to what we see here. Okay, this is not very accurate, less than 50 percent. The time of the quiz, okay, most people said usually it's about 10 minutes for the quiz, some have been longer most, or well, either too slightly short or okay. And the quizzes are supposed to be put you under a little bit of pressure, so they need to have some time limit.  So there will be a time limit, but I'll probably extend it a little bit on each quiz to maybe add an extra few or five minutes, as opposed to what I did before the midterm. Just make them a bit longer. Sometimes it's hard to me to judge how long it will take you to do each question. So I'll try and add a few more minutes to each quiz. How many attempts do you want? Currently we have three, some people want more, some wanted unlimited attempts. I don't think that will help many people learn having unlimited attempts. Let's maybe go for four attempts. I know some people had trouble with internet access, getting the units correct or the notation that the software accepts correct. So I don't think four attempts will be much different from three attempts, but if it gives you a chance to try one more time, then that may be okay. So let's keep it similar to before. We had five quizzes, I think, before the midterm, around five. I think we'll have the same again after, at least five after the midterm. We also have an assignment. Rate the difficulty of the quiz. Most people said okay. Well, okay in that they are difficult, but you may be able to answer most of the questions. I don't want them to be too easy. I don't want them such that no one can answer any questions too hard, so that's not too bad. In fact, they will continue to be a range of difficulties. They'll try to be a few easy ones, but most of them will try and push the majority of the students. That is, I don't expect everyone to get 100% in those quizzes. There will be some hard ones. We'll come back to that when we see a few other comments. How do people take the quiz? Okay, starting on their own, fine. Study with other students, then take the quiz on their own good. The only suggestion I can make there is, if you're working with other students, at least do the first attempt on your own. You have four attempts now. Do the first one without talking to your friends, without even asking them what's in the quiz. Study, do the first attempt, and then you can see the answers, and then you can maybe talk with your friends and see, well, how do I solve this problem? What's my approach here? Or even talk to me if you have questions. So at least do the first attempt on your own. And a bit, the other questions are about the website. How useful is the course website? Useful for the lecture notes and maybe, I think most of you, the past exams. It's not easy to find them because the websites are everywhere, but if you follow the links eventually you'll find exams from previous years, even quizzes from previous years, in some cases. If you haven't noticed, most of the examples, at least the ones I draw on the screen, I will post the images on the website. So if you cannot follow and copying here, you can go and look at my notes there after the lecture, and some are even typed up. So the examples that we go through are also on the website. Videos, OK, some people have seen them, some don't care, that's fine. Those that have seen them or are interested in this topic, from the same YouTube site you can see some other videos related to this course, but not things that we'll cover in detail about Linux command line, wireless LANs, how to intercept wireless LAN packets, security of Wi-Fi. Have a look at them if you're interested in computer networking and wireless LANs especially. You see your IT students, so next semester most of you, what do we have? IT security, ITS 335, I'll teach you IT security next semester and we'll definitely use Linux command line and see aspects of network security. And of course you gave, had a chance to fill in some, your own written feedback. I've just grabbed a few of them because many people provided similar trends in their comments and I tried to collect them. So one was about the examples that I go through in class versus what you get in the online quiz. And this is just four of the ones I selected, there were more, but the trend was that people were saying that the examples in the class are easy. The quiz questions are hard, OK. So that's what some of the people said. True, that is true. The examples, so the quiz questions are different from what we go through in the class and what are in the lecture notes. That's intended. I will try, as I said before, add a few more examples in the class which should be similar to the quiz questions now after the semester, after the midterm. But yes, that's true. The examples you need to be able to not just follow a template to solve a problem. Many students expect to receive a template. Here's an example and if they can follow that exact set of steps, they'll be able to answer the quiz question, answer an exam question. You need to be able to understand what's happening in the examples and then apply that knowledge to solve other problems. It's always the same techniques and concepts that are being tested, but as you see in the quizzes, there are different types of questions, worded differently, set up differently. And I would like you to get exposure to those questions so you can improve your problem solving. So just a reminder, the purpose of those quizzes, the online ones, are to encourage you to study on a regular basis every week to do some study. Of course, evaluate your own progress so you know how you're going and practice for the exam. So yes, the quizzes will continue to be hard and different. Some people think online quiz 10 minutes. I just sit there for 10 minutes, answer the questions and easy. No. Just because it's an online quiz, it's a quiz, doesn't mean it's like a quiz in the lecture that you have some other courses that you just take 10 minutes and done. You should study before the quiz and between attempts. Okay, so here's a guess by me. A 10 minute quiz may require maybe two hours of study. It doesn't require 10 minutes of just sitting there and then you're done. You need to study, take the quiz for 10 minutes, study the answers, try again if you weren't successful in the first time. So don't think just because it's a 10 minute quiz, it's only going to take you 10 minutes of your time. You need to study a bit more. Treat it as an assignment, a mini assignment, some homework where you need to do some extra study. And just a summary from before, let's have four attempts, maybe a bit more time for each quiz and we'll try a few more examples in the class. So many comments from students about that issue. The other one was about the using the Moodle software, the online quiz itself and how it's hard to use. For example, how many decimal places do I give in the answer? How do I type the units? Is it M, meter, uppercase, M, lowercase, M and so on? What if I have trouble with the internet? My quiz, I lose my quiz attempt. The interface of getting some feedback. So there are a number of comments from students about not so much about the difficulty of the quiz, but using the software to take the quiz, which is true. I think there are some issues there. I think the practical advice I can give you is don't worry too much about the accuracy in numbers, the number of decimal places. Most questions are set up if you have to give a number as an answer, there's some tolerance, plus or minus 2% or something. So whether it's 21.3 or 21.30567, it will be marked correct in either case. And if it's not, and you think it's close enough, or if it's, you give an answer of 21, and the answer is 21.3 and it's marked incorrect, then you should just let me know and in most circumstances I would mark that answer correct. Spelling, again, of course you need the right units, but sometimes the questions are set up such that only one specific answer is accepted and marked correct. But there may be other valid answers. And over time I'm adding those valid answers, but until I add them all, the software will automatically mark you wrong if you don't give a valid answer. In which case, you should just notify me and I'll manually mark your quiz and change your mark from incorrect to correct. That's a limitation of this online automatic checking that it's not feasible to automatically correct all possible answers. So let me know if you want your quiz marked manually. That's quite easy to do. And okay, if there's some bad user interface, or if since we're doing an online quiz, then try and work around the fact that yes, you need internet access. If you're trying on your mobile phone to do the quiz, and it's an unstable connection, then maybe you should come and try here on campus one day and do the quiz here. If you cannot get an internet connection that lasts for 10 minutes, then try and do it here during a lunch break, for example. But the main thing, let me know if you want something marked manually there. That's easy. All right, this was one comment and probably others would have the same feeling that some of the mathematics is, I don't don't say too hard, but things that you don't remember. Like this comment, it's something that I forgot about in high school, I should teach a bit of mathematics at the start. Well, my answer is no. I think all of you are third year ITCS students or similar. You've taken several mathematics courses already in university, not high school primary school, but university mathematics. So here are some of them. So you're capable in mathematics. The mathematics that we use in this course usually are these operators, addition, subtraction, multiplication, division, raising something to a power, exponentiation and logarithms. These are not university mathematics. They are high school mathematics, maybe even primary school mathematics in some cases. So you need to refresh your memory. I'm not going to help you with these basic operations. So if you cannot remember logarithms, then go on Wikipedia or go somewhere, find some resource just to refresh your memory, even take the online practice to get up to speed so that the examples that we go through are much easier for you to follow. This is a comment, sometimes feels bored and feels sleepy in class. So do I in some cases when students are sleeping. In fact, the IT section is much better than the CS section. I don't know why, but I find in the CS section, especially Wednesday mornings before we have our lecture, most of them are falling asleep in the first 10 minutes. What can we do? I can try and improve my lectures, make more fun and so on. But you can also try and participate. If you're falling asleep or you're not following, try and do something to wake up, maybe ask a question. Try and do something to avoid the boredom, the sleepiness during a lecture. I'll try and do something as well. Some of the comments from the feedback, if you did the feedback, you can see all of those online. Any questions or any suggestions about the online quizzes? You have a chance to influence how they are set up for the last five or six quizzes up until the final exam. Any preferences or things you would like with the online quiz? Easy? It's mixed? Okay, I'll try and continue that. There should be some easier ones, which most people can do and some hard ones which take a lot of study. That's the idea. Any problems? How was your exam? Why? I don't know. Did you find the past exams, exams from past years? Last year's exam was easier than this one. Possibly, yes. Last year's exam may have been easier than this one, but of course that's easy to say when you've seen the exam before sitting it, but sometimes there's some variations, yes. I try to take that into account when working out the final grade. I'll talk about it in a moment. Yeah, let's talk about the midterm exam. Not go through the exam, but just look at some statistics and then we'll be done today. Okay, scores ranged out of 100 from about 10 up to almost full marks, 97.5. So, two people got above 80, and that's no very good scores for that exam. And you're right that from memory, and I can't remember the exact values, but from last year that there were more students getting at least higher scores in this range. I can't remember if the average was different, but there was a higher number of students getting 80, 85, 90, 95 last year. So, yeah, probably it was harder than last year. I hope I want this to shift two positions this way at least so that these two are here and these move here by the end of the semester, so with a final exam included as well. If you, of course, if you got above 80, excellent. If you got above 50, okay, you're going quite well, you're understanding most of the things, you probably made some, you may have made some simple mistakes that you could have improved your score with, so keep going. If you got below 50, then you want to try and improve a fair bit for the final exam. If you got in this 20 or 30 area here, then you need to work hard, okay, to get a good grade at the end of the semester. And if you don't know how to do that, then talk to me about different ways or strategies to try and improve this grade. So the last thing is okay, because people want to know how well they're going and how, what grade they're going to get. How is your grade determined at the end of the semester? You get a score out of 100, which is worth, which is calculated from the quizzes, the one assignment. Most people should be able to get 15 percent or very close for the quizzes. Okay, there's no reason why you cannot get 15 percent or 13 percent if you've missed a couple of quizzes even. And the assignment, if you work hard, it's a group assignment. Most people get good scores above 10 from past years. Midterm exam, you know what you've got. Final exam is the main thing worth 40 percent. So you need to go better in your final exam if you want to improve your grade. So I'll sum up those, give you a total score, and then I'll determine cut-offs between the grades based on different factors. For example, the distribution of the scores, the ranking and so on, how I compare the assessment items from this year to previous years. For example, the midterm was harder. Therefore I may expect the cut-off to be slightly lower, but we'll see about the final exam. Of course, we need to meet the SIT grading regulations. No more than 20 percent A's, no more than 20 percent S's won't be a problem. This is, I looked briefly at the cut-offs that I'd used in previous years. Okay, each year varies of course. What this means is, for example, in the previous, I don't know, it was three or four years, the cut-off to get an A range from 78 to 83. So in one year it was 78. If you got above 78 percent, you got an A. In another year it was 83, above 83, and it ranged between those values. So, and then similar for the other grades. Maybe look at this column, the first column. What that means is in previous years, if someone got above 46, but below 55, they got a C plus in one case. Below a D is an F. Now, of course, this is previous years. This year may be different, but you can expect it's similar in the range. You can expect it somewhere near these numbers, the cut-offs. It may not be the same, it may be higher or lower, but you expect it's in these ranges or near these ranges. And I think for most of you, not a problem, but for some other students, usually in the previous years, about three students received an F or they withdrew at the right time. But I don't want anyone here to get an F. That's not my desire. Any questions about the grading? So there's no, I cannot give you a formula for determining what you're predicting, your grade, but you can determine your, sorry, your, or you can predict maybe your quiz score, you know your midterm score. Before we do the final exam, you'll know your assignment score and you can predict what you need, for example, in your final exam to get a total score and approximately use these ranges to give an indication of what grade you may be looking at. Whether you're on track for a D or an A. Any questions? The last thing I just want to look at is the assignment very briefly, but not long. So any questions on the exam or quizzes? Okay, good. The assignment. Instructions are on the website. You have a look at them, read them. That was the midterm. Let's have a look briefly about the structure of the assignment. Some of the details we'll describe over the subsequent lectures. So as several tasks, three tasks, so you'll see one of them involves doing some experiments with audio recordings. Very simple. Get your computer, record some audio for one minute and save it using different codecs. And then do some analysis comparing the different codecs. How big the file sizes are, how much compression is used, maybe even what quality each one saves the audio as. So there's some more description down below, but in fact it's something you can start straight away. Once you have your group, you can easily get your laptop, record through your microphone for a minute, some audio and save it as a WAV file. And then try and save it using different codecs. MP3, FLAC, any codec that you choose. And do some comparison between them. Then there are two tasks about using wireless LANs, wireless local area networks. IEEE 802.11 wireless LANs. So for example laptop to access point, we're using wireless LAN as the technology. For these tasks you need to again do some experiments. So in your group you'll need some computers with wireless LAN capabilities, say a laptop, maybe a mobile phone in some cases. And you'll need to connect direct between devices. For example between two laptops to transfer a file. We will not use access points because you may not have access to an access point. So I'll ask you in a group to say have two laptops and transfer a file wirelessly direct from one laptop to another. So first thing we'll work out how to do that. It depends upon the operating system. Okay so different operating systems have different software to do that setup. If you don't have access to laptops that can do this, in the third floor of this building there's the Apple Mac IT lab. And there's what 30 or 40 new iMacs in there and all of them have Wi-Fi. Okay even though they're desktop computers they have Wi-Fi. So you can use them to do the tasks with the assignment if you need to. If you really want I have some wireless adapters that you you can borrow. We will talk more about those wireless LAN tasks maybe tomorrow and possibly next week and give you more hints of how to get started. But at least you can get started on task one which is the audio recording. Okay I don't want to go through the tasks in detail here. I want you to read the instructions. It gives a brief description of what I ask you to do for each of those tasks and you need to submit a report at the end. And I give here just a an example of what you need to submit or what you'll produce. For example in this task you'll record some audio. What's the output? Some audio files. Okay I may ask you to submit them. Task A3 you compare some codecs. What's the output? What do you submit to me? You submit a report maybe including a table that compares the codecs. Maybe a few paragraphs of text explaining their advantages and disadvantages. So some hints as what I expect in terms of the submission there. And that applies for 2.2 and 2.3 the wireless LAN tasks. Group assignment. So form a group of three and tomorrow I'll bring a piece of paper where you can mark your names listed on and you can mark your groups of three there. So you need to do it before next Monday but earlier the better to form a group. I think we have enough students so we'll well I think we'll have almost all groups of three there maybe one student left over or a group of two left over we'll see but try and form a group of three. You can mix between CSIT that's fine. Everyone needs to participate in this assignment there's all three students and I think the rest you can read and at the end you submit a report. I may ask you to upload some files but the main thing will be a report several pages long reporting on each of those tasks. Currently due on the 16th of September so about a month about four weeks to do that. So your task for this week form a group read the instructions and probably you should be able to get started on the audio experiments and then you'll be ahead and then you'll be able to move on to the wireless LAN experiments in the subsequent weeks. I'll leave it to you to read through that I'll not go through it here once you've read it you can ask more detailed questions. That's all I want to cover today. Any questions or comments? There's so few of us here I can ask individuals if there's any questions or comments any problems?  What score in the exam did you get what you expected? 77 is good okay that's that's very good for a hard exam you should aim to get 95 or 100 in the final though everything okay any problems about this batch of four people any problems just improve your exam score okay no problems exam okay all right enough for today let's start the new topic tomorrow and there's a new handout I think is that correct yes there's a new set of handouts in the copy center if you don't have them we're going to start from here tomorrow okay tomorrow morning we'll see you then thanks for coming for this last lecture today


My name is Tomislav Ozelec and I make video games entirely in Python, which is sort of my claim to fame and why I'm here today with you. And the idea is to have a discussion about whether making video games entirely in Python is in fact a viable proposition for us. And I have three guests with me joining us. There's Roberto, who is the author of the Unreal Engine Python plugin. I get that right. He's also a lecturer at the Italian Academy of Video Games. We get Emmanuel. He's the author of the plugin for, well, no, it's a wrapper for the Godo Engine. It's a Python wrapper for the Godo Engine.  So guys, my question, and I'm thinking, I was thinking how to start this, was to sort of take this from the back end, let's sort of start with some strong statements and then we'll try to defend them later. And so just try to pose this question immediately and ask you to give me an answer on like one to ten. Making these games in Python, mission impossible, one to ten and then why and then we'll try to see. Hi, everyone. So from my point of view, the most important thing is making some kind of difference between indie game and a AAA game. They are pretty different from the result to the money spent on them. In my opinion, making indie games with Python, with only Python is absolutely possible. On the other side, making a AAA game only with Python could be a really, really hard challenge. Oh, it's really hard even to define what an indie team is. Nowadays we have indie teams with a lot of money. Four or five people with really thousands of dollars invested in them. So for an indie team, I mean something less than 10 persons and with zero money. For me, an indie team is something that does not have money. An indie team works only with patience. This is my own opinion. I think it really depends on what you're defining when you say entirely in Python because if you dig enough in the end, you always end up finding some C somewhere. So the only question is what is the sweet spot between the part you are doing in C and the part you are doing in Python? So I think it's entirely doable to have a lot of your game logic written in Python, like they do in the EVE online, for example. So yeah, I would say if you're thinking making a game means making game logic and not writing a game engine, I think it's entirely doable into Python. And that's why I want to prove by putting Python into Goddum. And I should give a mark. So I would say eight out of ten. So I would give it a ten if you give me ten million euro. Of course, it depends what you want to do. If you want to create a triple A game, no, unfortunately not.  Unfortunately. But for an indie game, I think there is some chance. If you say I want to make a game for macOS, for Linux, Linux user don't pay for games, okay, sometimes I do. And Windows then, okay. I was in the game industry some years ago and it's really like this Mac users, they spend most money on games. So I would make a Mac game, put it in the Apple store and there I'm sure there would be a big interest. If the game is good, if it's an indie game, yeah, I would give it a seven. Now the question is why would I use Python to create that game? Is it really necessary? Wouldn't it be cheaper to just buy a license of Unity 3D or any other engine? So if I go to investor, I think he would say no, please take Unity or whatever. If it's me, I would like to use Python, okay. But we have to think about that too. So it depends what, ranging from one to ten. Okay, so that's a broad range of answers. I have to sort of admit that I agree with Martin that it's a bit of a stretch to do everything in Python, which incidentally is what I do in my games, implement the whole rendering and all of that in Python for various reasons, which I hope will have time to cover that doesn't, it's really hard to do. But I can gather from you guys that there is hope. So maybe sort of try to be informative and describe everybody. Each one of us has been doing some approach. Roberto, you've been doing Unreal Engine. You have been working on Godot, which has similarities with Unity. Obviously Martin and I have had approaches which is more like directly working with OpenGL. So just a few quick words on each approach so that people who don't necessarily know what it entails to work with each one. So just a few quick words on everybody's approach. It's a strange term, hope for me, because it's like saying, is there hope for using Python as the language for your browser instead of JavaScript? Making a game or generally making a software does not necessarily requires a single technology. There are technologies better suited than others and so on. From my point of view, there are some parts of building a game and its game engine that can be done in a really good way with Python and other parts, especially from the engine side, that not came out so good when using such a high-level language. Last year, the Eurovide on in Bilbao, I gave a talk about OpenGL all in Python. Absolutely, it is something that we can do. But nowadays, there are a lot of technologies, high-level technologies. I'm thinking about the NVIDIA technologies, like VRWords, the simulation of clothes, hair, and so on, that are really performance-intensive. From these kind of tasks, we cannot expect a higher-level language like Python, JavaScript, every higher-level language can be used in this day. We can hope, in the sense that future computers can be way more powerful than nowadays computers, so we can even use less fast language instead of relying on languages like C or C++ for doing high CPU-intensive tasks. This is the only hope, I think, we can have better hardware for using software that is not so fast. I just wanted to ask before we move on. Sure, a big engine like Unreal packs a lot of punch, it does physics, it does all these simulations, and it's kind of difficult to imagine all of this intensive CPU-side code being done in Python. But what about the future in which all these little systems sort of exist as well-defined Python modules? I know it's fanciful, but just in theory, couldn't that be a future that exists? Yeah, it could be. My company released a bunch of years ago a Python wrapper for a Ballet Physics library. I don't know if you know it, it's a pretty famous physics library user team in GTA. So yes, it could be something we can do. I don't remember what was the question in the first place. Oh yeah, I think, yeah, like you said, there is really two like schools. There is the one who wants to make, to use Python as really the first language and write everything inside Python. And the other one who kind of plug from an existing engine has just one to extend this engine with Python. So I'm part of the second school. And the great thing with Godot is the code is clean enough to just separate the engine and what should be the scripts system. And so you can really write your scripts with multiple language. And the great thing is maybe you can even think about Python like a part of your development process. And it won't be in the final product because you find it's too slow maybe. But during the development, if you could use Python to just try really fast some ideas, I think it could be really like boost the development, like trade new ideas and so on. And you end up in the end rewriting everything in C++ in the last months of the development of your game. Yeah, I used the approach to use OpenGL bindings. So OpenGL is a very old standard of computer graphics. Every big GPU supports it like NVIDIA, AMD and so on Intel. And I think it's possible to create good games using pure OpenGL bindings. So pure Python with OpenGL bindings. Okay, it's not pure anymore, but we call these things and it works. However, the problem is, as I mentioned before, if I create a big game project and I want to submit it to an app store, iOS, Android, et cetera, then I will fail with that approach. And that's something I want to ask you to what would you think about that? If in future, I mean if I publish a game, I don't know if it's a big success. And the next step is I want to publish it to the app store. So what do I do? And that's my big question about that. If I do it entirely with Python, then I'm limited in that. Well, I can tell you that since we're making a game and publishing it on Steam, obviously on Steam, it's a PC platform. You don't really have limitations on Python. You're fine.  At the time that I released our biggest game, it was a question like whether we want to move to iOS. And technically, it was possible to put everything on iOS.  I understand that at this point, it's not a problem. It's allowed. But perhaps someone in the audience will know more up-to-date information. Because I don't know, for example, on the PlayStation, does this work? A lot of these stores and ecosystems are not really happy about interpreted code and bringing stuff in. So, yeah, it could be a risk. And I think you can say, guys, it's sort of, I think a more fundamental question then is why use Python? I mean, if you want to make a game, you could use other languages. Obviously, we're here at the Python conference. That's what we're interested. But I think if you're talking to somebody who just wants to make games, there's a question of why Python. And there are good reasons, I know, but we'll talk about them. I just wanted to ask any people who work in video games with us right now? There's one. I know. Just two? Three? Okay. This is what it is for a Python conference this time. I hope there will be more. And so I think there are other things in a video game company that Python gets used for. And, you know, Roberto, you have things to say about that. So I think we can just discuss it because the big appeal of Python is that it gets used throughout the development process. And that's why it would be perhaps good to put more of it into the actual gameplay. So, yes, in the video game industry, Python is basically one of the reference script languages you use, especially from the artist point of view, where they used to my other 3ds Max Blender and so on. Basically, I still have to met animators that do not script their pipeline work. Well, from, again, from my point of view, programming is a lot about automating tasks. So, personally, it's not a huge problem for me that I cannot script my engine with a higher level language. But it is very important for me that I can use a higher level language, which I don't need to compile with a lot, having a strange error, having to pay attention to any single line I write and so on. Having the possibility to use such a language to automate and simplify my work is really, really important. More important than the ability to use it for every part of my work. Okay, so that's one part of it. A lot of people who already work in the industry will know the language. And as a looking, I have a list of things that you can use. Sure, you can script your asset pipeline. That's very useful. You're testing. A lot of people use it for server-side applications for games, which are, depending on what your game is, that can be really important. One thing that I've done and Martin, you're a bit of an expert for is we import a lot of geographic data. If your game is on a map, that will happen. So, as part of a broader question, which is, you know, how is Python beneficial? Because it gives you access to a lot of tools that are in the Python system. So, yeah, it's a bit of a question for you, Martin. You work with Geo. So, you can use that in your game. It opens up a lot of possibility, doesn't it? Yes, for data processing, Python is really one of the best ways to go. So, I developed a virtual globe some years ago, similar to Google Earth. And there we had to process a lot of data. And we used Python on a high-performance computing system. And we processed all the data there. And it was really great. And the code is really maintainable. But that's not for actually the rendering. The rendering was done in the web browser using WebGL. So, that's pity. But it's like it is. But for the data processing part, it's cool. There are many libraries like GDAL, the Geo data abstraction library, for example, where you can load the different data sets, et cetera, et cetera. It's really a cool way. Please go on. I need to fix that. Change back to... Okay. And for the data processing part in general, I recommend using Python for the visualization part. We had to use WebGL because it ran in the web browser. Very simple for that project. Okay. So, when we discussed... I also saw an interesting demo on your own talk, which, again, because you were importing Python into Unreal Engine, you were able to access OpenCV. So, could you talk a little bit more about that and just the possibilities that it gives you just by importing stuff unrestricted from the Python system? I think one of the advantages of using Python in a game development pipeline is the amount of third-party libraries that are available, especially in the scientific area. Artificial intelligence, big data management, and so on. Libraries that generally are not available in other languages or became really painful to use using lower-level languages. Embedding Python virtual machine into a professional game engine allowed me and the users to import that libraries and use them into something visually really powerful. This morning, we had seen a talk about... A keynote about data visualization. I was already thinking about how much better could be that data into Unreal Engine. We are seeing straight-liners, trees. In my mind, we can reproduce the whole earth with trees, with the real sides, with the right kind of tree, and so on. So, something way more big in the scale that we can do now. So, the real advantage now of using Python into an engine, Unreal Engine, it's possible to use this kind of libraries. I don't know if you want to... I think it's something really interesting because it means that you are bringing game engine to people using Python, which means that you are bringing it to scientists, people that are used to, in the past, use R and then they go to Python now. And so, yeah, it means really new possibility for them, I think. I'm personally working in my day job with people from the scientific background and always, like, they want a new way to show the data. And for the moon, they don't even think about game engine because it's for game, it's not for working. I just wanted to ask, you guys sort of represent the faction here that sort of takes an existing, very capable game engine. In your case, it's a free engine, Godot. In your case, it's like an industry standard, top of the line engine, not free, but super. And so, you represent this faction and sort of I get it that it's wonderful. I sort of do the other thing, but I have to, like, okay, you guys defend your side, but it's wonderful. But in both of your talks, I noticed that there are, like, considerable technical difficulties in making that work because both projects are recently less than a year old.  They're like two garbage collectors, I think, in both projects. Then there's the issue of, you know, performance. Do we want to go with JIT or the Wi-Fi? So a lot of issues sort of come up with that. And so maybe just shed some light on that. Is this, are we sort of condemned to that?  Does this really have to be? Just some input on that. Well, I think we have been both really unlucky because we are pioneers. We have the first people trying to do something like that. I suppose now that a real engine by the plug-in is way more mature. A lot of wrapper for the languages will come out because now I've made a lot of research for them so they can start working on their wrappers. And the same for the Godot wrapper. I suppose now we will see a lot of more scripting languages that will come out. Yes, we are condemned, but now we have some tech info. We have some kind of literature to allow other people to do this work without so much pain that we have to do. I think the trouble was, Python was added to an existing engine. But I mean, it would be really simple thing to just create an engine in C++ when syncing. That's a high level scripting will be due in Python from the beginning, like it's doing a Pandas 3D. I didn't try it personally, but I think if somebody has experience with it, it would be really interesting. Pandas 3D. Okay. Pandas 3D is another engine, used a lot by Disney in the past. Now Disney has moved to other engine. It's allowed to be scripted in Python from the beginning. So it's architecture allowed for high interaction with Python. It is a pretty specific case. I have to say that the epic stuff the guys making Unreal Engine has been very supportive with me.  And even the Godot engine added new features to allow big features to allow integration with other languages. Pandas 3D loses a bit of traction nowadays that we have Unity, Unreal, Godot that are way more powerful. But as far as I know, Pandas is one of the first big engine with a strong Python support. Does anyone know the situation with Unity and Python? I heard that some guy working on PyPy has just started to work on Unity and Python. But he's not in the room, unfortunately. But if you find some PyPy guys, you can ask him directly. But it's just a really start for the moment. But maybe it will go somewhere eventually. I'm really curious about how they can do it without sources. Because both Unreal Engine and Godot have sources. So how could they do with the Unity? It would be really interesting to know this. By the way, Unity up to the fourth version came with a Python-like language Boo. I don't know if you ever okay. Then they removed the support because no one used it. They don't want to use some subversion of Python. Okay, so Martin, you and I are on the side where we want to do everything in Python. We create our own rendering loop. We call naked openGL functions. And we send our data, our buffers and textures and have it all rendered. You know, the last of the romantics. I think that the fact that there are not many games out there that do that sort of speaks for the fact that it's not straightforward to do. But we chatted before Martin and you said that a big part of the appeal of doing all of that in Python is the sort of instructional value. Because you also teach. So in my experience, I taught myself openGL by developing in Python. So maybe talk a little bit about that. OpenGL is really hard to learn especially today. OpenGL is old. The first version came out in the early 1990s. It was a time there were no GPUs yet. You could also use only use the CPU for rendering. And this standard is actually still the same today. However, there are many extensions and new versions. And the current version 4.5 has many new things. And if you want to learn version 4.5 today, you have to program maybe, let me say, three to 500 lines of code just to render one single triangle. You don't only have to program in Python. You have to learn shading languages. OpenGL shading language. You have to understand the concepts there. You have to understand there. You have to learn many mathematics. You have to be good in vector math and matrix multiplication and projections and so on. It's really very, very hard to get into. And it's not possible to learn that in half an hour. And that's a really big issue. And learning OpenGL today is, as I said, even harder than it was before. So the best way would be to start learning the old version and then propagate. But that's not really a good solution. So you need time. And I'm teaching computer graphics and I know the difficulties. Sometimes I also don't know where to start. Do you start with the OpenGL shading language? Or do you start with OpenGL basics? It's really a tough, so you don't need much time to invest if you want to create your own render engine. So the best way to go in my opinion today is get Unity or another engine and learn principles there. And then if you understand the basic principles of transformations of all these things, then you can try to create your own thing in OpenGL. That's my advice today. But it doesn't seem that the future is getting any simpler. We have a new API, the Vulkan API. And I don't know how many of you are following the developments there. The Vulkan API is designed to be the new standard by the Kronos group, the same group that developed OpenGL. And it's an even more low level API which gives you a lot of information. And I suppose it's even more difficult to learn. And again, I'm thinking, I think you worked with the Python bindings for it. I understand it's very complex. I didn't work with it. But again, we're going to need a good teaching tool just to grasp the complexities of it. It's a really big, nasty piece of code. Yeah, the Vulkan API is even harder than the Python OpenGL 4.5 to learn. You need even maybe 100 lines more code to render one single triangle. But if you understand these principles, then it's easy. So to make two triangles, you need only 501 lines of code, for example. So it gets easier. But all the it's a low level API. So you have to do all things yourself. You have to create your models, your projection systems and so on. It's really very low. So to get started, I don't recommend using Vulkan API at the moment, especially not using Python. We have to wait maybe next year or in two years when there's stable binding available. Are you saying there's an issue with the binding? Because I think that there's an issue with the drivers themselves, but the drivers are not very stable at the moment. We have to wait a little bit until the big graphics companies distribute new versions. And then we can start creating a good binding. There are I think two bindings available at the moment, but they are not very good maintained. Python bindings they're not very well maintained. So someone has to step up and say, yes, I create a binding and I will maintain this for the next 5 to 10 years. Okay. So I think on our side the kind of people who want to really do everything in Python, the answer is still OpenGL no matter the complexity. And then to complete the whole application, you would need either Pygame or myself I use PySDL too. PySDL is a high quality library that handles events and all related stuff. The wrapper is really straightforward so you can use PySDL too that gives you portability on all platforms. And because I've used Python I would say that it's a little bit more low level, but it's really good and I'd recommend it over Pygame. It's just a touch more complexity. But I would say that if you want to do this kind of an approach, that's the solution right now. Yes, I would recommend starting with 2D games, using Pygame, creating really simple games to understand the principles how a game actually works.  Okay. My takeaway, although everybody's optimistic I think everybody's a little bit more optimistic on the plugin side of things. This seems to me that right now it's a more realistic approach to get Python into an existing engine and have really nice plugins that will give you access to the whole ecosystem. And I understand, Roberto, you've been doing work with AAA studios that use your plugin but not necessarily for gameplay events, so could you maybe somebody is using it? You'd know if they're using it. You don't have to mention names, just yes, maybe. As far as I know none of the AAA studios that is using the plugin is using it for the gameplay. They are not even using blueprints in Unreal Engine. It's a visual scripting tool. They still prefer to use the C++ because it is an industry that is fond to C++ by Beckons, so it's really hard to remove this kind of mindset and they do not even see a reason to remove C++ from their gameplay logic because they have good programmers with it and they have performance that are very important for them. For all of the other side of the development pipeline they use the plugin and they use it heavily, even for customizing the editor completely. If you are able to see the desktop of a person working with Unreal Engine in a AAA studio generally, you do not recognize that it is Unreal Engine. They customize it totally. We are talking about pipeline with hundreds of people, so I find it pretty normal to customize your main software to the team needs. But as far as I know there is not really a company using Python for the gameplay. Unless we speak about the server side, if you have a game that with its mail lodging on the server using Python with other engines, with other technologies and so on. I think I actually know an example. EVE Online is a famous game that uses a stackless Python for a lot of its game logic. But that is one and I have been from time to time I Google and it is hard to come up with a lot of commercial games that use Python for gameplay. There was a lot of stuff that was used before, used it for some scripting and events and modding. And here and there it will pop up but it is not a big thing yet, necessarily. So I think this sort of covers everything we sort of chatted before. We have time for a Q&A. Maybe some questions from the audience. At the end you mentioned a stackless Python. Would that be something you have tried or would recommend to, let's say I want to build a game in Python, should I use stackless or can I use stackless? I think EVE Online uses stackless Python not for the game but for the server. Even stackless for the client part. Honestly I do not know how they are using it. I'm not that into details of stackless. I suppose the issue would be performance. I really don't see a huge issue with, I'm making it 3D game. It's a turn based game, not a fall game. I don't know what to answer. I don't know if someone knows about it. It's a turn based game, not a fall action game. It has slightly slower real-time requirements. I don't see huge slowdowns from Python. It doesn't have a huge performance effect. It's doable. I'm not sure about stackless. No specific info. But that helps. There is another question. From what you are speaking about, it seems that graphics is like the 99% of the problem in here. The games mostly consist of graphics. What about other parts of the game? Or even, I don't know sound, music, are there no problems in there? Or is it just the graphic is such a big problem that we start with that? Until we have solved this, we don't even try anything else. We are talking 99% about graphics because that's the most compute-intense part of games. Music needs a little bit CPU. In the whole system, the GPU takes most parts. And if you look at the compute power that we see today, NVIDIA GTX 1080 has this power of if you look maybe 20 years ago, you had to spend billions for the compute power you have in a GTX 1080. So graphics is the compute-intense part. And compared to that, music and sound doesn't really take too much away. Do you want to hear his opinion? The audio engine just has been remade into Godot so I saw some talk about it. The really big problem with audio engine is the lag. Audio engine must really have no lag otherwise you go out of the game. Writing audio engine in Python, I would say every time you have a little garbage it won't be visible if you do frame rendering because most of the time they spend into the graphical code but for audio engine you will really see it, feel it really fast. Well, yes, graphics is the main part wasting your CPU power. Regarding the pure game logic, we still use artificial intelligence. In games we still don't use the real from the academic point of view artificial intelligence. We still use cheap tricks like finite state machine, behavior tree, something that works perfectly in Python. They are not heavy in resources. So from my point of view I would say it's a good example of the graphics part. So in the demo I showed yes, the Python works flowless because the rendering part was done with the engine. But building the AI part or the pure game logic part it could be absolutely doable. And a best majority of it's game play logic, the best majority of it's game play logic has been done in LISP, in a LISP dialect. Left for dead is another one using squirrel. I think it's another high level scripting language and so on. It is very common for game designer to use a scripting language. Even Timbal with park, you know it? By the same author of them. Okay, you don't remember? So it works for C and SDL for the rendering part and they use squirrel I think for the scripting part. For a game designer it is way more proficient to use an L level language. So yes it is the rendering part the most heavy one to invest on. So a different take on that. I saw a presentation by one of game developer and they were working on this game and they were working on this game. So the game has real war happening in real time and if you have 1,000 or 2,000 or something objects and they need to act in every single frame which is 60 frames a second that means that you have about 20 instructions that you can execute per thinker and that's only possible but coming under that is there any experience on using actually Scython? So you could start by doing your logic in Python and then you find the hotspots and then you rewrite them in Scython? I did try personally so I can give you that answer. I don't it might be a matter of personal preference so I'm not terribly into Scython probably a personal preference it's like another syntax you'd learn and already know Python and C so as long as I'm doing it might as well just jump into C. I'm actually holding high hopes for using PyPy in this context. It seems to me the way to go we didn't discuss the gil here but there seems to be some potential there for eliminating the gil as well so I think if you can live with Scython as a sort of separate Python-like language could be the solution but there could be other if you need performance other ways to do it you could separate your small functionality into some small library you could paralyze it in some way or you could use JIT so if you really, really need performance you could use the basic Python, perhaps will not do I hope this helps Have you ever considered code transpilation from Python to another language for the game logic part in order to embed the result into an engine or something I mean you asked why using Python for game development what if you like so much the syntax of Python you could afford to not using advanced features of Python with just some basics and then to another language yeah why I like Python for game answer this part first if for example a new developer comes into the team it's much easier if we program Python, if a new developer comes with little experience in C++ he can really mess it up with the whole application I experienced that two times so that really someone messes up creates memory leaks and after no one really knows where these memory leaks were created etc so using Python solves that a little bit not fully but it's much better and then the part about transpilation I'm not a big fan of transpilation the problem is at some point you will have to transpile this is really hard so that's not I personally would not do that if we see that project is not suitable for use of Python I would recommend using another language in the first place that's much better than transpiling in my opinion but then you have to know that if you have a new developer who doesn't really speak you have a risk thank you looks like we don't have any more questions I'd like to thank my co-panelists I'd like to thank the audience hope we have this talk again it's not the end of Python and games maybe it's just the beginning thank you all see you next time