 Thank you. Welcome everyone. My name is Ben. I'm the Raspberry Pi community manager working at the Raspberry Pi Foundation in Cambridge. I'm the creator of GPIO Zero, a Python library for interacting with the GPIO pins on Raspberry Pi. I'm going to be talking about it in the talk. I write a column for opensource.com, a community project that does all sorts of tutorials and articles and things. It's well worth checking out. There's lots of great material on there. There's my GitHub handle and Twitter handle on there as well. You can reach me by email. We've sold over 14 million Raspberry Pi's around the world now. Things are going really well. I was looking back at some of the slides I made at the first EuroPython I spoke at. We were about 3 million at that point. That was seeming really big. We've made a real big impact in the early days. It's great to see how far we've come. Similarly, the actual number of staff on the foundation team has grown rapidly over the last couple of years. There was a slide I had with three or four people that were the foundation at the time. Now we've grown to this great. This is from just a week or so ago. We had an old staff to get together. It's great to see all the great things that we've been doing. We were founded in 2009. We only started hiring people around 2011-2012. The Raspberry Pi Foundation incorporates three organisations now. The trading company that makes and sells the Raspberry Pi computers. There are people who work in the foundation that are purely on the education side of things. There's also Code Club and Coded Dojo to sub-organisations that we've run in providing opportunities for young people to get involved in programming, learning about technology, learning about computers and digital making all around the world. The Raspberry Pi trading company operates as a way to feed their profits into funding our educational programmes. That's how our business model works and it's doing really well, as you can see. The Raspberry Pi Foundation's mission is about putting the power of digital making into the hands of people all over the world so that people are capable of understanding and shaping an increasingly digital world. Able to solve problems that matter to them both as makers and entrepreneurs and equipped for jobs of the future. That doesn't just mean people learning to be software developers, go and work for Google and Intel and people like that, but actually preparing people for a better understanding of technology, whatever field they end up going into work in. We do this by providing low-cost, high-performance computers. We run education programmes and do a lot of outreach activities. We provide free resources for everybody and provide teacher training both in person so people can apply to come on one of our training courses and we actually deliver training online so anybody can join in. We're not limited to the number of people delivering the training in the team. Take a look at the current models of Raspberry Pi. Again, this is something we've come a long way since my first EuroPython talk, but the Raspberry Pi 3 is our main headline product. It's a 64-bit quad-core ARMv8 running at 1.2 GHz with a gig of RAM and that's our $35 product. The main product that we sell has always been $35 so over the years we've improved the quality and the power and the spec of that main headline device. This is about keeping the price the same so that's what we've got on the main product. A couple of years ago we introduced the Pi Zero which is a $5 version of the Raspberry Pi. It uses the Raspberry Pi 1 chip at a faster clock speed so you've got a gig of hertz there rather than the 700 meg that the original Pi ran at. It's got half a gig of RAM and that one's $5. It's not as powerful as the Pi 3 but certainly really useful in certain maker products and projects that you want to embed the Pi inside. We recently introduced a $10 variant which has Wi-Fi and Bluetooth so a lot more scope for connectivity in your projects as well. That's where we're at on the product side. In terms of the software, again in 2012 when the Pi came out we went to a place where we had a bog standard LXD theme that looked really traditional Linux desktop. We've done a lot of work recently on improving that and making that skin look really nice but still be really performant. It's a very basic sort of thing. There's no 3D acceleration or anything special going on there. It's just doing what it does well, providing you with access to the education tools and some of the software and things in there. It's looking really nice, a nice set of icons and things. We also recently released this operating system for desktop PCs. We provide an x86 image you can download, you can run in virtual box or stick it on a USB stick and actually run a live image on a laptop or PC or Mac. You can actually boot this up and get the sort of near enough of the same experience you'd get in terms of software on the Raspberry Pi without the additional hardware and the physical computing I'm going to be talking about. But actually get access to things like Python and other software tools and other programming tools in this isolated environment that you can boot from a USB stick. If you really like it, you can install it as your main operating system. We've talked for a long time about moving on from idle, which is the main education focused editor provided. It's actually sort of bundled with Python if you download Python from the Python website. So we've talked for a long time about moving on from this and finding a replacement, finding something more suitable. We've, as an intermediate measure, we've introduced a new ID called THONI, which is now pre-installed in Raspbian. IDOL is still there, as a lot of textbooks and things sort of point to that. It does work to a certain extent, so it's still useful, but there's an alternative there. It's a Python 3 only editor, there's no options, which is really helpful for education. It's got some great debugging tools and various other features. On the longer term, we're investing in developing the Mew editor that Nicholas Tollovey has been working on. We're working with Nick with a list of specifications from our feedback from teachers and some of the teachers that we have on staff that are feeding into what a Python editor should look like for education. It's something that kids and teachers will start with and they may move on to more complicated, more complex IDEs, but we hope that this is a great start. You can read about that on Nick's website as well. Going into physical computing, the main aspect that makes the Raspberry Pi different from regular computers is the GPIO pins. That's the general purpose input output. There's a bank of 40 pins and you can see there's a little port label there that labels the pins that have different purposes. Physical computing is all about connecting up flashy lights, motors, robots, sensors, photo, video, enabling you to get into the internet of things, do home automation and physical projects. If you take a look at that bank of GPIO pins, this is what it looks like. This is a little handy guide from a website called pinout.xyz, which is a really useful reference if you're hacking with a Raspberry Pi. There are mostly three-volt pins. There's two five-volt pins. If you want to do something with robotics and motors, you'll probably want a five-volt supply. The GPIO pins are all numbered, so you can individually trigger certain pins by their number to go high or low. They're variable 3V3, they're 3.3 volts. There's also a set of other protocols you can use that for high-speed data transfer buses and things like that that allow you to do more complicated than just turning individual pins high and low. You can actually do a lot more by sending data of high speeds down the pins using these different protocols. There's various ways you can access the pins. You can either wire things directly to the pins or use a breadboard. Actually make up your electronic circuits by connecting things directly to the pins using jumper cables, so you can do something like this. People also make accessories that actually place on top of the pins that sit neatly on a bit like an Arduino shield if you're familiar with that kind of thing. We have this standacle hat, which means hardware attached on top, and it's for the 40-pin header, and it sits neatly on the pie with mounting holes in the right place. It's designed to just be a sort of standard way of providing add-ons. You're expected to have an e-prom on a hat, which is a way of programming a device to tell the pie in the device tree what is attached so that it can do something according to what hardware is attached. If you've used any GPIO in the early days of Raspberry Pi, there's a library called RPi GPIO in Python. It's a very low-level library, and it was used for three or four years as the main way, the canonical way of doing GPIO programming from everything from flashing LEDs to robotics and IoT home automation stuff. It's quite verbose, lots of boilerplate code, and so one of the things that I worked on was this GPIO0 library which abstracts away the components and the devices into these classes that you can easily write code which talks about what you're doing with the devices rather than what you're doing with the pins. This makes it a lot easier, so you get something like this rather than the sort of sending pin numbers that you keep passing around, high and low, actually talk about what you're doing to the device, in this case the LED. And then you even get into things like this where you have a blink thread running in the background, which just means you can hack on more devices much more easily and get going with your project. The GPIO0 library supports all sorts of different devices, everything from basic components, buttons, LEDs, ultrasonic distance sensors, analog digital converters, remote control sockets, traffic lights, robots, motors, servos, and a few different bespoke hats and add-on boards that we provide composite device classes for. So this isn't even in the latest version actually, but the device hierarchy in GPIO0 is quite interesting, it's all in the documentation if you want to take a look. So one of the great things about the way that GPIO0 allows you to get started is you can start with really simple code that's very easy to read and write and understand. So if I wanted to get an LED connected up to a button so that the button actually activates the LED, and I'm starting with a child or a teacher who's doing this for the first time, I would write something like this. It's very simple to understand procedural code. You can progress on to other paradigms, so looking at event-driven programming, you do the exact same setup where you've created your LED, you've created your button, but you have it fire off these events based on when these things happen. So when the button is pressed, it fires the LED.on method, when released, LED.off, and then you can go off and do something else, you're not stuck in a while loop. You can even progress on to an even shorter version of code where you're using the declarative paradigm, and again all of this just happens in the background in threads. Setting the source of the LED to the values of the button does the exact same as both of these other examples, but it's in a declarative way you've declared in one line how the devices should behave. There's some really interesting stuff you can do with this paradigm. So just to explain how that works, we've got a device like a PDU MLED is actually just a regular LED that you configure to use pulse width modulation to control the brightness rather than just turning it on and off. And if we inspect LED.value, we can see that that's zero, so rather than being true or false like a regular LED would be, a PDU MLED has a zero to one value, which is the level of brightness. If we run LED.on, we actually change that, and then we inspect the value, it's now changed to one, but you can also set that to zero, which will do the same as running LED.off. So that's what .value is, and what you find is that if you have two components that have the same value set, so like zero to one, so a potentiometer connected to it like a rotary dial connected to an analog digital converter chip, the MCP308, they both have a value zero to one, so things like LED and button both have true false values, you can pass one into the other. So doing this LED.value equals pot.value sets it once so that the LED brightness matches wherever the dial is at that given time. And what you end up doing is writing while loops like this to say, oh, I always want the brightness of the LED to be controlled by the potentiometer. And so this is where the source values thing comes in. So everything has a .value, whether it's an input or an output. And then they also have a .values plural, which is just a generator constantly yielding the current value. So every time you ask for it, the next one you get the .value. Devices that can have their state set, their value set have a .source, and that's just a way of saying, where do I get my values from? So you can pass in like the most obvious cases to pass in the .values because it just takes any iterator. So in this case an infinite generator yielding the value of the device into the other device. And it just means that they're connected, which makes this work. You can also process values in between as they come out of one device into the other. So you can write your own function to do something in between. We also provide a set of commonly used tools, so things like negated is an easy example. So negate the .value as it comes out of the button, pass that into the LED. It means you have reverse logic of when the button is not pressed, the LED is on when the button is pressed, it's off. You can also combine values. For instance, if you have two buttons and an LED, and you want the LED to be on if both buttons are pressed, then you take both sets of values and them essentially using this all values function, and you can do this with any number of devices. And as long as all of them are true, or both of them in this case are true, then the LED's value is true. It's a really neat way of creating an AND logic gate using GPIO components and just a few lines of code. A couple of other examples using the same sort of paradigm. We have an LED bar graph class, so that's the idea that you would have several LEDs in a row, and as well as just being able to... There's a class called the LED board, which is just an arbitrary series of LEDs. LED bar graph is one where you can set its value from zero to one, and rather than arbitrarily index LEDs, you set the value zero to one, and it lights up that many LEDs up to the maximum. So if you set it to 0.5, half of them will be up in a bar graph sort of sense. And so we have another class called CPU temperature. So there's a few classes in the library that are what we call internal devices rather than GPIO components, but they have the same properties and they can connect up to other devices. So CPU temperature, you can read the temperature like it's a temperature sensor actually get the Celsius value. But you also get a dot value of that, which is a zero to one on the scale that you've provided on the unit. So if it's halfway between 50 and 90, for instance, then your LED bar graph will be half lit, and you can see that go up and down as you do things on the device as the CPU temperature is going up and down. And similarly, what one called Ping Server, which just runs a ping and returns a true or false value of how the ping went. So you create a Ping Server on Google.com. Another thing you can do is set the source delay, which means how often it goes and looks for the next value. If you don't want to be pinging Google as much as many times as you would be reading a potentiometer value or something. If you just want to do this once a minute, you'd set the source delay to 60. Set the value of the green LED to equal the Google values and set the red to be the opposite of the green LED. So as well as doing negated Google values, instead of negated Google values, I'm just negating the actual LED rather than looking at that up twice. So either the green is on or the red is on according to whether it can ping Google successfully. Just a little status monitor. There's an add-on board called Energenie, which is a little remote control socket that the add-on board talks to via radio. This is at home, I have a pet tortoise. This is another internal device class, the time of day that you set up and say this time of day is active between 8am and 8pm. Then you say the lamp which is connected to the Energenie socket should be on between those times. Again, you could use a procedural paradigm for this and just say, while true, keep checking or something like that. I use the event-based, when this time is activated, then run this function, but there's another way of doing it. Another thing that we do is support multiple pin libraries. So when I said before about RPI GPIO, this is the one that people were choosing to use. Previously, if you wanted to use a different library because it had a specific feature that one of the other ones didn't, you would have to rewrite your code into that library. What we do is we provide multiple backends that you just elect which pin library you use and you get the features of that library. So RPI GPIO is the default, it's sort of the most commonly used and in some ways the most stable. That's installed by default in Raspian, so that's the one that's by default elected to be used. There's a couple of other GPIO libraries that we support. We also provide a native pin implementation, which is kind of experimental, but it works for basic things. But it's fallback if you haven't got anything else. There's also a mock interface, which we use in our test suite, but it is quite handy for being able to just test that your code is sort of valid. Both of these, the native and the mock pin, are included in the library. You don't need an extra module like you do with the others. So Pi GPIO is one of the libraries that's implemented in C and runs as a demon on the Pi. It will allow remote socket connections that control the GPIO pin. So using the GPIO API and the nice code you can write, you can actually control the Pi over the network and actually run this from your PC as GPIO zero could be installed on any machine because it can be used in this way. It doesn't have to be a Raspberry Pi, but it can control the GPIO pins of a Pi using the Pi GPIO demon. So for instance, there's one way of doing it is if you use the Pi GPIO factory to create a connection to a Pi that has the demon running. Rather than creating an LED just on a pin number, you associate it with that device, with that pin factory. So the code is exactly the same. Alternatively, with some code that would, like on the right here, that would be used normally for running the pins directly on the Pi, you can actually, with that exact code that unchanged just with some environment variable set, you can actually have it execute the GPIO commands over the network. So you could change that, the IP address there before you run it again, and it would execute the same code unchanged on a different device. Here's just an example of using mock pin. So I do this quite a lot on my laptop just to test some code over it and some documentation or something is accurate. So if you launch the pin factory mock and then open your Python shell, you can import something from GPIO zero, create an LED. Here's an example where I've just said LED.blink. I've inspected the value and then a second or so later inspected it again and you can see that in the background it's doing all the things that the devices should be doing. We use this in our test suite but it is quite handy just to be able to test your own code without wiring up components. Another thing you can do is you can drive the input pins. So if you create a device which is using an input pin, you can tell it because there's no way of actually pressing a button that you've created in this connector to a mock pin. But if you access the pin and drive it high or low, you can actually affect the state of that button. So again, this is how we test things in the library but really handy just to be able to test out. So in the next release of GPIO zero, we'll come with this handy pin out command line tool as well. So one of the things we do is inspect the device you're on. Find out some information about it and what sort of pins you have, what hardware you have, and we'll warn you if you can't do something, if you try to access the pin that your model doesn't have or something like that. And we use that bank of information to provide this command line tool. So regardless of what model pi you're on, it will show you the pin out for that particular device and a little ASCIIART diagram of the pi itself. You can also request to look at other models by looking at their revision code and seeing what the pin out or what the spec of one of the other devices is, one of the other models. And so one of the most popular hats out there is one that we make called the sense hat. We made this especially for an educational program. There are two Raspberry Pis on the International Space Station with one of these centre boards attached. They're in these great space grade aluminium cases. They went up with British astronaut Tim Peake for this astro pi mission. This was an opportunity for children in schools in the UK and later all around Europe to write code in Python which would be run on the space station. The board has a bunch of sensors so you can look at the temperature, pressure, humidity, pressure, accelerometer, gyroscope, magnetometer and there's an LED matrix that you can program and there's a little joystick that you can use as input as well. So it's a really great board for all sorts of different purposes. So it just goes on the pi directly like that. That's what we were talking about hats earlier. So just a couple of examples so you can write scroll text across these LEDs. Or show letters or show information on there or just arbitrarily access the pixels individually and make your own patterns and icons. You can easily get access to the sensor data just by reading the properties on the object. You can do stuff like this where you show a value of one of the sensors in terms of which LEDs are lit. So have a kind of a bar graph if you like of LEDs according to something like the temperature or the humidity. And so the AstroPy program will be in its third year this year and we will be on our third astronaut that's run the program. So a Tim Peake from the UK to Mar Pesquet from France and then there'll be another European astronaut running the program in the next term. So this is a competition that any kids from schools in Europe can enter and there's various different levels of what they can do. They don't have to do anything too complicated but anything from tiny little scripts which interact with the astronauts or show them messages or read the sensors and tell them something or a game that they can play or something that they can interact with. We've had some really interesting entrants and some of them are doing some really cool science experiments and actually logging the data and then running the experiments again at home to compare the results and actually learning about thinking about space. We actually have two emulators for this. This is one of the things we did to try and engage more people into the program actually without having to buy a Raspberry Pi without having to buy sensors or even if a classroom only has one or two that are real hardware they can use the rest of the class can participate in this. So on the website trinket.io which is really great on its own for doing Python stuff in the browser. There's actually a special mode of it that if you import the Sense Hat module it brings up an emulation of what the Sense Hat looks like and you can program the LEDs using exactly the same API or using the Python in the browser. You can also use the sliders. So this is a really good way of just testing your code as well that if you write some code that says when the temperature gets over 80 degrees this should happen. There's no way of easily getting your Pi to read over 80 degrees so in order to just test it you can do something like this. There's also a desktop emulator that comes in Raspbian but you can install this on your PC as well, run it offline. Again you can access the joystick and the sensors and control the LEDs, really good way of testing your code out and having a go at doing something like a science experiment without having access to the hardware. So you can enter the competition with just having used this freely available software or the trinket web service. The Pi camera is one of the other really interesting things about the Pi. So the Pi has a CSI port for connecting up a camera module because the Pi originally came from a mobile phone chip and it had access to two cameras for the front and back facing camera. And so using one of the sort of camera modules you would get in a mobile phone you can actually access the camera and do photo and video in 1080p full HD photography but actually use your programming to control when pictures are taken or change their configuration and settings in real time according to sensor data and things like that. There's a basic command line interface that you can use and a brilliant Python library that has really nice API for controlling the camera. As an example just some Python code that would capture an image and record video. And if you want to hook it up with some GPIO components say wait for a button to be pressed before taking a picture again it's just very straightforward. It should feel very familiar if you've used any sort of Python APIs before. There's a lot of interesting stuff in the library that you can access that the Pi camera gives you that are really interesting to play with so there's a whole list of image effects that it allows you to use so you can do interesting stuff like this, use all these different image effects. You can also stream over the web quite easily so one of the recipes in the Pi camera documentation shows you how to do this and there's a sort of more complex version in this GitHub project that's a really interesting way of being able to stream your camera footage over the web. So again this is the second project that I have on the Pi that's connected to my torches table. And there's a lot of people doing really interesting stuff with Pi Camera and OpenCV so this blog PiImageSearch.com is full of tutorials and set up guides and things on how to do facial recognition and object recognition and actually learn about that kind of area using the Raspberry Pi and OpenCV using Pi Camera. So do take a look at the documentation for some of those projects. The GPR0 docs are on ReadTheDocs and you've got the Sense Hat library and Sense EMU is the desktop emulator and then Pi Camera as well on ReadTheDocs. They all have really good documentation. So we have a magazine called the MagPi, you may be familiar and we once gave away the Pi Zero on the front cover of the magazine. It was the first time a computer magazine had ever given away a free computer with the magazine. And we do some really interesting stuff with the magazine as well. It's out every month and there's projects and articles and interviews and things. 100 pages every month and it's really great. But we do some really interesting things like the giveaway with the Pi Zero and one of the things we did recently was we teamed up with Google and they made a hat called the Voice Hat and you've got this cardboard foldable container that you put the Raspberry Pi, the hat and a speaker inside. It has a big button on the top and you essentially make your own Google Home Assistant. So you can speak into this and have it process your thing. Use the Google Assistant to give you an answer the same way you would ask your phone or ask one of these devices at home. Ask it a question or ask it to use something, some web service or something. But you can also write Python code which processes the voice commands and you can use custom commands to do stuff which could include say GPIO stuff or camera stuff. So turn the lights on or make the robot go forward, take a picture, that kind of thing. So some really interesting projects, people have been doing that with that recently. And you can check out the Stuff On Our blog and in the MagPies blog and some follow up articles in the MagPies as well. And on the AIY projects website. That stands for AI Yourself, Artificial Intelligence Yourself. It was a really great project that Google did. So one of the things I just want to mention briefly is a little side project that I've been working on. I gave a lightning talk on it yesterday. You can check out my slides online. Based around the problem that PyPy doesn't support uploading ARM wheels so when you actually, Python wheels if you're not familiar the way of providing pre-built binaries for your Python packages and you can upload pre-built versions to PyPy but if they're written in C then they have to be, when they're built they're compiled for the architecture they were built on. And so you have to provide one for each type of architecture. You want to support Windows 32, Windows 64, Mac, Linux 32, 64 and so on. And ARM is a completely different platform. So even though you can actually build wheels for ARM that run on the ARM architecture yourself you can't distribute them easily using PyPy. So what I've done is written some software which automates building of all the packages on PyPy and provides them in a repository that you can install from. So yeah, to check out the more details in my speaker deck or come and speak to me about it if that sounds interesting to you. So there's lots of different ways you can get involved in all the stuff I've been talking about. So one of the great things is if you have Raspberry Pi's at home or if you choose to buy them, anything you do with it, making projects or just learning stuff yourself or getting into the electronic side and the physical computing side is really great. And we love to see more people learning things that they wouldn't otherwise be learning and actually doing some really interesting stuff. You can also contribute to some of these libraries that I've been talking about. It'd be great to cast some more eyes over some of these projects and help other people upgrade their modules to Python 3. That's a real problem for us sometimes in the education world when we're trying to use Python 3 and we end up getting stuck in having to go back to Python 2 for a specific module that hasn't been ported. There's been some really interesting open source projects in Python libraries for Raspberry Pi things like PyCamera. Anything like that that you're interested in making, we can end up using it in our educational resources because that's where the inspiring projects come from. Do take a look at the source code for some of these libraries and if you want to take a look at contributing, that would be really great. As I say, I mentioned the MagPi, so this is a magazine you can buy in the shops but you can also download for free. It's one of the things we do, try to get the stuff that we do, the educational programs, the hardware and the software out to as many people as possible. It's why we write the emulators, it's why we provide the x86 image of our distro. We provide free PDFs of the MagPi as well and we do a series of books that we also sell. We encourage people to try and pay for them if they're able to because it helps fund down our educational programs the same way the Raspberry Pi sales help. You can also download them for free, so they're freely available. If you want to run workshops, you want to go and do something like this in the community, this kind of thing is a great resource as well as the resources on our website. One of the things I'm involved in a lot lately is the network of Raspberry Jams. These are free community events that anyone's allowed to set up, so they're completely independent from the foundation. We just promote and support them. There's a lot of family-friendly events, so they're not necessarily tech user groups, like maybe you have Python user groups at home. Some of them are, which is great as well, but a lot of them are focused around not just kids learning, but for anyone to get access to having a go and learning some programming skills and learning about technology through digital making. There's a guidebook available that I've put together that helps people start their own Raspberry Jams, and you can contact me about setting one up as well and get some support from us. Do take a look at the Raspberry Jam page on the website, which has a map of where all the Jams take place around the world. Have a look if there's one near you or if there has been one near you and maybe you could go along to it or if you have kids, and learn with them and actually work together. There's some really interesting stuff that you see a lot of families doing together at these events. Daniel will be pleased to see a few of those in Africa as well. Code club is one of our projects, so this is a really easy way of doing some volunteering that has a really big impact on local children. If you have kids in school, you can go along to their school and say, I'd like to run a code club. There's projects provided, so you don't have to write your own materials. You can use some materials that have been created by educators at the foundation. There's training support provided. If you just want to try and do your bit to try and help kids learn, write their first lines of code and do some really interesting projects, then this is a great way to get involved. There's information on the code club and on the world website about the different initiatives in different countries around the world. We also provide a means for you to contribute translations so we can actually reach more people with our materials as well. Again, you can get involved with. That's all. Thank you very much. Thank you very much for the talk. We have a few minutes for questions, so any questions? Do you know off the top of your head of any specific projects that need help porting to Python 3? That's just being ported with just really good news. I can't think off the top of my head. We're getting better, aren't we? That's good. We should perhaps make a sort of hall of shame type thing for Raspberry Pi specifics. Do you know of some industrial projects, including the Raspberry Pi? Or would you recommend to do that? Yeah. We sort of sell Raspberry Pi to three main markets. The industrial market, where people are using them in automation in factories and things like that, into the hobbyist community, people making projects at home, sort of thing you'd see at Make Affair and into education. So three very distinct and very interesting communities. In industry, you see, so we actually use Raspberry Pi in the Raspberry Pi factory to test Raspberry Pi's. Make sure it's come out right. Arduino actually do the very same thing. So they have a Raspberry Pi at the end of the production line and they do some electronic test on the Arduino to do the same thing. And we see all the people doing similar things with their own products. You see a lot of people actually building a product around the Raspberry Pi, either the single board computer that you would buy $35 on or the industrial compute module Raspberry Pi chip on a sort of embeddable form factor that you can build your own I-O board and if you're building a smart TV or something and you want it, you want a well supported sort of Linux platform in the TV then you can build a base board and have as many HDMI ports or whatever else it is that you want and put them in exactly where you want them. Build your products around it and then buy the compute module and just slot that in and you've got sort of Raspberry Pi for free. So there's lots of people doing things like that. So one that comes to mind is a big company called NEC who make big stadium TV displays. They're actually shipping like, you know, 70, 80, 90, 100 inch TVs with the compute module embedded inside them. And one of the things about that is that you can design a board like that for today's Raspberry Pi whatever the model is at the time and any future upgrades of Raspberry Pi when the compute module becomes available you can start shipping those ones instead without having to change anything. So it's just essentially a sodium like RAM connector. So the device, the module just slots in to a base board that supports that sort of well supported hardware component. There's lots of things like that, yeah. Can we have time for one more quick question? An extension to the last question. What about real time programming with a Raspberry Pi, I guess with Linux and especially with Python you are not able to fulfil hard real time requirements. So is there any alternative that you know is typically used or is other plans in this direction or is this completely out of scope? No, so there's definitely a ways that you can use a Raspberry Pi in a project where you need the real time you need real time stuff. So a good way of doing that is pairing it up with something like an Arduino. So if you sort of want to be able to write your programs in Python or something like that, something high level or maybe they talk to some internet some web services or do something like that that you couldn't necessarily easily do with an Arduino on its own. So you can write all that logic and all that programming on the Raspberry Pi but then send off the bits that you need doing real time to the Arduino or any microcontroller. So that's something you see a lot of people do is they say I did all this, this and this in the Raspberry Pi but the certain search things like Neopixel grids or something where you need precise timing and if you've got loads of other programs running there's a chance that the time will go off whereas ship it off to an Arduino tell about what to do and let that do the sort of heavy lifting on that part of the project but actually still controlled by all the stuff and written in high level languages like Python on the Pi. So that's one option. A lot of people prototype with stuff like this as well and then perhaps they'll do a proof of concept using a Pi but then the real product will use something else so there's a few different options. OK, we have the time. Thank you very much for talking in.