 Well, hello, everybody, and welcome to another OpenShift Commons briefing. This time, my colleague Graham Gumbelton from Down Under is going to be talking to us about deploying Jupiter Hub on OpenShift, and we're really thrilled to have Graham doing this because many of you are using Jupiter Notebooks, a lot of you are using data science workloads and ML workloads on OpenShift and testing the waters out in this, and we think that Jupiter Hub is a great project and I'm thrilled to have this backgrounder on what to do at what Jupiter Notebooks are and what Jupiter Hubs is by one of my compatriots. So Graham, I'm going to let you take it away and introduce yourself, and we'll get running here. Okay, thanks, Diane. So, yeah, Graham Gumbelton, as Diane says, so I'm actually based in Sydney in Australia. My background is as a Python developer from a long, long, long way back, and I have a particular interest in the problem of deploying web applications or services to make them available on the Internet, and Jupiter has been one of these ones which has always intrigued me. I'm not actually a user of the Jupiter Notebooks and products myself, but I like playing with them as a technical challenge to work at how to get them working and how to get them working well in a platform-to-service type environment. The purpose of this talk today is to talk a little bit about what Jupiter Notebooks are and how you can get them deployed in different ways on your own box as a software-to-service or software-to-option, and then talk about how you can run these things up on OpenShift rather than trying to do it all yourself. So, Jupiter, if you're already watching this, you're probably well aware of what it is, but it's an interactive web environment you can get in and work on documents which can include text, media, code, and that code can be used to actually pull down data, analyze it, chop it up in bits and pieces and then present it in a graphical form so you can look at it and it can be charting and so on. People who are interested in using Jupiter Notebooks, you have individuals who use it for self-teaching, so there are various notebooks out there, especially in the Python space for learning about Python, for example. It can be used by a team of people in an organization who work together in analyzing data from their organization and trying to get value from that. One example is in financial institutions where they might use Jupiter Notebooks as a way of analyzing stock trading data from a previous day to actually try and work out new algorithms for their trading system. And finally, it can be used in teaching environments. So, if you have a large class of students who themselves are learning about data analytics, then you can use Jupiter Notebooks as a mechanism for teaching them. One of the cutest use cases or uses I've ever come across for Jupiter Notebooks was actually one from Singapore, and I love visiting Singapore, so it's twice a bit of a favorite. Singapore has a very good public transport system, but one of the rail lines they have there or underground lines, the trains would keep stopping, and they didn't quite know why, and they managed to accumulate all these different data about where all the stoppages were, which train it was, what time of day, and so on. And they had a team there who took that data and put it into a Jupiter Notebook and started trying to analyze it. And it was a really interesting use case. What they found was that it wasn't caused by, it wasn't one particular train that was always stopping. The locations would appear to be random, different times of the day, and it was a tough nut to work out. But eventually they used Jupiter Notebooks to actually work out what was going on. And it was actually caused by one single train as it passed around the network. That one train never stopped. But whenever it passed a train in another tunnel, the interference from that one train could interfere with the electronics of the other one, cause the other one to stop. So this is a sort of example where you can take data, get it into a Jupiter Notebook, and do arbitrary analysis on it, and present that data, and come to the conclusion of what's going on. So it can be really good in a company environment where you don't have existing applications to work with your data, and you do want to do things piecemeal. Now, the topic of this talk is not just Jupiter Notebooks, it's also this thing called Jupiter Hub. And this particular comes into play when we talk about a teaching environment, but also can be inside an organization where you have a small team. Jupiter Hub is a means of running up instances of Jupiter Notebooks in an environment where users can just log into Jupiter Hub and they'll be given an instance of Jupiter Notebooks as long as they can use. That may be an empty notebook or pre-populated with data and their notebook files. Now, why that is important, we'll see in a moment as we go through and look at all the problems and issues that come up when you actually try and deploy Jupiter Notebooks yourself. So with the Jupiter Hub, one last point on Jupiter Hub to point out is that it is actually going to give each person an individual Jupiter Notebook themselves to work with, and that is handled out of Jupiter Hub with this thing called the Spawner component. And that can actually be deployed in a lot of different ways, be it on one single host or spawned out onto multiple hosts or even using a system like Kubernetes to spawn that out. And obviously Kubernetes is used in OpenShift and why this is of interest to us. So getting started with Jupiter Notebooks by themselves. If you're going to do this on your own box as an individual, then if you've got Python installed on your computer, then to get a Jupiter Notebook up and running it's a simple case of going using the PIP package manager from Python to install Jupiter, and then you can run it and you get yourself an empty notebook and you can start working in that. You can upload your notebook files into it for the Web interface or if you run up the Jupiter Notebook inside a directory which already has those notebooks, they'll be already visible in there. And once you have that, you can then click on any of the notebook files you have and you get your actually interactive notebook where you can start working away. If you need additional Python packages, which is pretty well going to be always the case because you want all these packages that exist out there for pythons, just NumPy, SciPy, Matplotlib, and many, many others. And that is one of the reasons why Jupiter Notebooks are so attractive. Python, if you want to do something, there's generally a package out there for doing it and they're easy to get installed. But you do need to install them and you can get a terminal up inside of Jupiter Notebooks to actually install the extra packages you need in your notebooks. So running Jupiter Notebooks locally, why are they good? You are working in your local computer, so it means that all your work is saved locally. You don't have to worry about how you're going to back these things up. Just as long as you've got your own computer backed up, you're fine. You can make the decision about what version of Python you want to use, what distribution of Python, and get the packages you installed in there. And they'll be there once you install them and between runs of notebooks. Why running Jupiter Notebooks is not so good on your own computer system is that if you want to then share your notebooks with other people, you relying on the other person to be able to duplicate the same environment that you were running. So they may very well need the same operating system. They'll need to have the same Python distribution and version. And when we talk about different Python distributions, there is the main one from the Python Software Foundation, which is CPython. And there's also the Anaconda Python distribution. As they have different package indexes, the downloading packages and those package indexes aren't quite the same as well. So you can run the differences there. But overall trying to do it yourself on your own box from scratch can be a lot of effort to set up and maintain. So what's the next option? The next option you can use is to run Docker on your own computer. Now Docker provides a means of running applications inside what's called a container and it isolates that container from other applications to running on your box. But more importantly, what you get with Docker is the ability to bring in an image file which contains all the bits and pieces you need to run your application already in it. So the Jupyter ProTip people make available a whole bunch of Jupyter Notebook images. A minimal Notebook one is just a Jupyter Notebook. They have one called SciPy Notebook which has pre-installed in it a whole bunch of different packages suitable for data analytics and NumPy, SciPy, Matplot and lots, lots more. The SciPy Notebook and some of the other ones that drive from it also have the option of being able to use Python 2 or Python 3. So it gives you that flexibility and choice to use them. So it can be a great way of starting up notebooks very, very quickly. You just need to, as long as you've got Docker running, you can pull down that Docker image and start it up and you've got an environment without doing too much extra work. And that's just by done by running Docker Run command. So that's good because it comes with everything you need. It's a particular Python distribution. So if you want to have someone else use your notebooks, then you just need to say, go run this Docker image and you're off to get the good enough to go. These images are read only, which means that you can't really destroy them. You can't muck them up because once you stop them, they will, you lose all the work that you've done inside of them. But it means you can't wreck them up, run them up again next time and it will be back to where it was before. It's a nice little environment so you've got no problems with interfering with other things and you don't need to maintain these things because people are providing them for the Jupyter Pro book so you can use them. These Docker images are harder to customize. And though, if you want to add in additional packages, you either have to create your own Docker image, which derives from it and adds the extra bits or every time you start up, you're going to have to install those extra packages. These packages can be very large. If you're on a really slow internet connection like everyone in Australia, then you're going to have a problem pulling these images down. Some of those images are 1.5 gigabytes in size and I wait a long time to pull them down over our really slow internet here. And that is because they might have multiple Python versions in there. They can have all these different packages that you don't really need in there. So, yeah, any problem. Because these images, when you run them up or run in a container, it doesn't mean they're isolated, but that means also that all your work is lost when you stop it. It means you do have to fiddle around with trying to mount volumes into the Docker image so that your work is going to be written back into your local computer and be saved away. Otherwise, you have to configure the Jupyter Notebook to use a custom contents manager and store those files elsewhere, such as on S3 or Google Talks and so on. And one last issue with Docker images always you have to be concerned about is that when you start them up, is the access to them secure enough? Because you're starting up a web server from this Docker image. If that web application becomes exposed outside of your box and you don't secure it properly so only you can access it, then it means that people can get into that Notebook instance from outside of your box and potentially do things with your work. So, what other options have we got if we can't? We don't want to run it on our own system then. And this is where we can start to look at software as a service or hosted options. Now, one popular way of very quickly having a look at Notebook if you've just got Notebook off the internet, you want to have a quick look at is thing called Tempen B. This is a project which is done by the Jupyter Project people and hosted up on Rackspace. You can go here and what will happen is that as soon as you hit the page there, it will give you an instance of a Jupyter Notebook. Now, because they can't know in advance what you may need, it's a very, very, very fat image. So, it has multiple Python versions or different language versions. Python, Ruby, Haskell, R and for the different language run times, it may have a whole lot of packages which are pre-installed. But it does give you a way of very quickly getting up a Notebook running. But that is all ephemeral. After a while, it will go away, you'll lose all your work. So, great for looking at something read-only. Not great if you want to actually use it for developing a Notebook and working in it. The next option is to go look at people like Microsoft and Google and the services they provide. And these aren't the only ones available. There are others. This is a place where you can create an account with these people. You get in there, you get your own little space where you can work in. And usually they will have integration with their storage system so that automatically when you save work, it's saved away and it's backed up by them. So, they're the two main options you'll find for those. Now, these are really good because someone else is looking after them for you. You don't have to set them up yourself. And they are designed for useful multiple users. So, my understanding is that you can with these save your work away and you do have the ability to have someone else log into that system as well and you can share your Notebook with them through the system as I understand it. Why these are not quite so good though is they are still a shared resource. Multiple different people are going to get in there. So, you don't have any visibility of how the system is implemented underneath. And one would hope that they are all secured so that your own little work is separate but you are potentially competing for resources on the one system. But the whole system is essentially out of your control. You don't know how reliable is your relying on them to actually keep the system that's working and you probably have a limited ability to customize it or a limited ability to select which versions of software you want to use with it. Being a system run by someone else and not on your own premise, you have to worry about information security. Obviously, this is not something a bank is going to use if you want to work with share trading information or other confidential information from your customers. And finally, there is a concern here with vendor lock-in. These services also have a free tier and what they're relying on is they're using open source software as an on-ramp for you to use their other paid services. So, you may want a database product to store all your data in. They'll quite happily start selling that to you. It then means you are started locked into their architecture. It's a bit harder to move off. So, what about self-hosting? This is where you run it on your own machine. Now, this is what you're doing with Jupyter Notebook directly when you're installed. But in this case, what we want to look at is how you can install a system which can be used by multiple users at the same time and not just yourself. And the main option here is a project called Jupyter Hub. And that, again, is from the Jupyter project team. This provides a system where you can log into it and you'll get a Jupyter Notebook instance to play with. Now, this is essentially very, very similar to what 10pmb is set up. 10pmb is actually a separate project, but it's actually simple to create a version of 10pmb using Jupyter Hub. You just need to disable the authentication. You'll see how I do that later. So, you can install this as open source software, so you can customer however you want, modify it for your particular way you want to do it, set up it to use your particular authentication mechanism using your organization. You can use it to set up so that when you run up your Notebooks, they have persistent storage and so on, or use your custom images. And there are many, many deployment options. You can create one big machine and run everything on the one machine, but will be limited, therefore, by how many things you can run, or you can actually start to farm out the Notebook instances across machines in a cloud-like environment. Because you're running this yourself, you do have to set it up from scratch. You're going to have to dedicate infrastructure to it usually, because you're going to take over those machines just to run this, and there's a lot of effort there to setting it up and keeping it running. And that's okay if you've got an IT department, but if you don't have an IT department there who's going to do all this work for you, you have to do it yourself. You then become an IT operations department of your own, which may not be what you really want to be doing. The next one is Binder. Now, this actually is really a software as a service. Again, it's something you can actually go out onto the internet. You can go to mybinder.org and give it a URL for repository which contains the Notebooks you want to use. So this works actually a little bit different to the Tempen B service in that Tempen B would just give you an empty workspace with a whole lot of stuff pre-installed. Binder allows you to actually give it a repository and it will build for you on the fly an image which incorporates all of your Notebooks that you want to actually work with and also install all the different Python packages that you want to be installed which you need in your Notebook. So it might take a little bit of time the first time it does that because it does need to build that image and get up, but this is something where you can go to mybinder.org and use that and it will give you that ability. Now, the reason I've dropped in here and self-hosted is that underneath it's actually using a project called Binder Hub and also Jupyter Hub. It also actually relies on a whole bunch of others including Kubernetes Home and all these other bits and pieces under the covers. So you can go to there, get down the Binder Hub software and you can start to install with yourself. Now, it is going to be a lot of work. But it gives you that capability to do it. Now, find yourself a service again because it is a software as a service. You have an ability to customize the image because it can take the contents of a Git repository and build it into an image for you now. But it's still a service that's owned by someone else. So you have all those problems you had before with information security to shared service, how reliable is and so on. You can install it yourself because it is open source software. But again, it can be complicated to set up. You have to ensure that in an environment even in your own organization you set up all the authentication security correctly. Now, one of the things with Binder Hub when I look at it is that, well, isn't this reinventing a path? You think about what a platform as a service is. It's the idea that you can have a Git repository somewhere which has a whole bunch of source code in it for your application and you can tell that platform as a service. Here's my source code. You go build it into a image or some other format for me and get it up and running for me and I don't really care. Now that's what Binder Hub is doing. And it's doing that by essentially taking a whole bunch of other components such as Kubernetes and adding in components of its own like Binder Hub, repo to Docker and all these other bits to invent its own paths. Well, is that a problem? Well, we have passes and that's what OpenShift is. So let's have a look at how we can do things instead of we're running Jupyter on OpenShift. So OpenShift itself is a pass as I mentioned and it's actually more than a pass. It's also what's called a container as a service or CAS so you can take an existing container image and you can get up and running OpenShift or you can tell it here is the source code and build it in past style and get it up and running as well. So I can for example, if I have a notebook image for Jupyter it's very, very simple to get that up and running and I don't have to do any extra work. I can just log into my existing OpenShift instance and say here is my image which I might have up on Docker Hub and you can get it up and running and I haven't had to do any extra work as long as you've got the quota and resources in the account with it. You can log into existing count and get it up and running and it'll all go. Now we all see you can do that but we want to make this somewhat easier. Now we can do this through templates. Now in the case of Binder Hub it was using Kubernetes and using a template insisting called Helm to do it. Now Helm is not necessarily the simplest thing to work with and can require admin rights to actually get it installed and running. So getting it running and OpenShift is not necessarily a simple task but OpenShift does has a simple template mechanism itself and I've got a whole bunch of templates here which I've written which allows me to do different things. So I can install a Jupyter notebook from an existing image. I can already be using the existing capabilities of OpenShift build up my image from a repository containing all my notebooks and packages I want list which are all the packages I want to install. And I can do all that for this very simple template so I can just click on it and it's very simple to get them up and loaded. But I can do the same thing with Jupyter. I can install Jupyter up and say run existing Jupyter notebook image or I can actually say go and build me a new Jupyter notebook image and get it up and running. So building a customized notebook image very simple you just click on the template you can say what base image you want to build from and you give it a git repository and away I'll go build that image and get it up and running. And that is using this thing called source to image in OpenShift that is that capability of taking that git repository running it through this builder image and in this case I've got a builder image I've built up to specifically create images for Jupyter notebooks and it will then go off and deploy it. Note for Jupyter hub deployment similar thing I'm very quickly click on template give it the notebook image I've already created and get it deployed. So show that in action and show how simple it is. I'll do a quick demo and then we'll wrap up and we'll see what Diane's got any questions or anyone else has joined in. So I've got a completely blank OpenShift account. So this is if I had access to my existing OpenShift account inside of an organization and I'm totally empty I'm not admin or anything. I don't need to do any any special access to do this. So if I need to start off and get things going then I need to do a couple of things here. Now the first thing for extra security reasons I'm going to just makes a little bit bigger create a special service account which I'm going to run Jupyter hub under in particular Jupyter hub needs to be able to run up extra notebook instances and this service account is just going to allow me to do that by giving it access to the API of OpenShift be able to create things. So I've created a service account and all I have to now do is I've got a set of resources which define all of my templates but it was also going to go off and build me all my images. So if I jump back to my user interface now I can go in here and see it's going to go off and build all those and that'll take a few minutes so I'm not going to hang around for it. I've got some already pre-done. So I get over to my other demo there. So they've already built there. The quick ones took a minute and a half the longer ones took a bit longer. The bottom ones are SciPy notebook and TensorFlow notebook. So I'm emulating what Jupyter project does there and creating some new book images which have a whole lot of stuff pre-installed which you can use. But I want to actually deploy that now. So if I want to deploy it I just go to my catalog search up for my templates for Jupyter Hub and I can just deploy a notebook. I'm going to deploy a minimal notebook. I'll give it a password so it has a bit of security in there and that's enforced by the template and that's going to run up an instance of my notebook. So very quickly I've gone from having OpenShift with nothing in it, a normal account and I've got my notebook image up and running. I'm using a soft certificate here so I'll just have to accept that and it's going to come up and that's all fairly quick. So few minutes there to get things running. So in under five minutes I can be up and running. Now that's an empty one so that's a bit boring. So what we can do instead we can go back to our catalog and I can obviously build up an image from a repository. So what I'll do this time is rather than actually building a notebook image I'm going to go straight on to Jupyter Hub. So if I go to Jupyter Hub and I want to do a quick start version I'm just going to start up a version of Jupyter Hub. I'm going to get the Git repository URL for a set of notebooks already and I'm going to get Jake Van Der Plust as an excellent set of notebooks for his book and I'm going to just drop that in there as a URL and I don't need to touch anything else. It's going to start deploying Jupyter Hub and at the same time as doing that it's going to start building that custom image that I want which has all of Jake's work in. Again that'll take a few minutes so we'll skip that and go straight to a running instance. So here's the one I already have running and this time I've got a little custom URL on it so if you are on the call and have a web browser handy you can go to this address tempnb.getwalk.org on HTTPS and it will get you into the Jupyter notebook. So I'm going to do that and it's going to start me up an instance. So if I drop back to the web console you can see how it's already started me up at my own Jupyter notebook instance and then anyone who comes into this now I've set this up like tempnb so there is no password but anyone who could come into this address would get their own instance of a notebook and in this case it has all of those notebooks from Jake's wonderful book and I can just go in here and select one, run it up and I'm off and going and we'll see if there's anyone else no one else has jumped on so that's okay and I'll see then could just run this you know run for all my cells work on that and do what I think I would normally need to do. So that was very very quickly both getting a Jupyter notebook running but also building an image from custom repository files or even just running up Jupyter hub and for me that is a much simpler way than doing it and going and often using Jupyter Direct Jupyter does have an ability to work with Kubernetes because that means you have to set up Kubernetes you have to actually work ahead I figured all here before OpenShift I'll provide a very nice simple template where you can just drop in the template and you're going straight away. That was a very quick demo. So just to look then why what the benefits are of using OpenShift for Jupyter why I think it's probably a better option if you already have OpenShift available and that is that it's much more accessible to developers and non-technical users I don't need to be an IT operations person here if I have an OpenShift account in an instance already then as long as I have the quota to be able to set up the size of Jupyter hub instance that I already that I want for the number of users I need I can install without any help from IT operations people I still have the ability to customize that deployment the way that the template to set up is that you can drop in a custom Jupyter Hub config file and through the template or you could even actually have it in a repository and itself use the source to image mechanism to build up a custom Jupyter Hub image which has the custom configuration so that you can set up your authentication your requirements for persistence storage and so on you can set all those of up so it's not a fixed way of doing things it's not like a software as a service there's still a great level of customization you can do in there and because it's simple to do and I'll provide I will be down the track provide all instructions and documentation as a site for doing all this I think it's a good choice for collaborators in a company or even people in education where they might have an OpenShift instance already in that institution they can get access to it and start working with it and do these things themselves very easily now with it being OpenShift and OpenShift being a container as a service and a platform as a service you don't have to dedicate your OpenShift instance to running your Jupyter Hub notebooks and Jupyter Hub or Jupyter Hub service you can start to deploy other workloads in here one example of this is some work theme done for another project looked after by Red Hat called Red Analytics they're doing a lot of work with being able to run Spark clusters inside of OpenShift so you can potentially in the one OpenShift instance very, very easily deploy a Spark cluster and then people will be using notebooks which run up with Jupyter Hub which are communicating with that cluster but you can basically anything you can run inside a container you can get running inside of OpenShift and so this becomes a shared resource for you to use and not just amongst yourselves but with other people in your organization as well which means that it's not dedicated infrastructure you can share infrastructure costs and make better utilization of the resources for the company and as I said you can do whatever you want as long as you've got the quotas and limits on what you need to do and of course all this is open source so you can get to an OpenShift origin you can install it yourself and do it that way or if you are interested in the support from Red Hat you can get OpenShift container platform for Red Hat subscription and so finally at the moment where I'm playing around all this and my repositories for it they are up on GitHub in an organization called Jupiter on OpenShift so if you are interested in that you can go there I have posted various blog posts on the OpenShift blog about getting Jupyter running in OpenShift and I'm for sure will be doing more and as far as this briefing you can find a lot more than this as part of OpenShift Commons as well Diane's been organizing a lot of different people coming in and talking about a lot of different things to do with machine learning and artificial intelligence and so on so this will go up in there as well but there are a bunch of other talks as well and you can find various of those on the common site or you can actually go off to our OpenShift blog as well and look through the tag for machine learning and you'll find them all linked off there and finally there you also see the RadAnalytics project and you're all for that and that is providing a lot of things for machine learning I don't know everything they're providing but there's various bits and pieces in there for using Spark but also different ways of deploying Jupyter notebooks as a means of visualizing the data from that as well and so that's about it Great job, Graham I think that was really a great tour de force on all things Jupyter related and you really do see that there's lots of different options for this what we're seeing in the OpenShift Commons is folks from both the EDU side of things the education, the universities and enterprises that are doing interesting things with machine learning and AI and all kinds of fun stuff as well as all of our old friends from the Python communities and the SciPy and NumPy folks using Jupyter stuff so it'll be interesting to see the evolution of Jupyter Hub I had a quick question because I know we talked about deploying this on your own OpenShift or OpenShift Origin or on OCP are there any limitations to running this on OpenShift Online or OpenShift Dedicated? Yeah, OpenShift Online you're not going to have sufficient resources in the starter tiers it is possible to get a single Jopin notebook instance up but they tend to be very memory hungry when you start to actually work with your own notebooks and data so the starter tier not quite enough resources it's useful to just spin it up, try it out but yeah, if you're going to do any serious work you're probably going to need more resources that provide that's where the Pro Tier comes in and you can get this up and running on Pro Tier although I put a little caveat on that there's a funny little configuration mistake in the Pro Tier at the moment which I've been trying to get fixed because it causes a little bit of a problem so it's not quite so simple to get them up and running but I'm working on getting that fixed but yes, you can run it in Pro so technically if you have the resources in there you could run this and run a small Jupyter Hub cluster for a small group of people and get up and running there now one comment you made about the future Jupyter Hub I have it disabled but one of the things actually is quite exciting in the Jupyter space at the moment is that they are overhauling the web interface for Jupyter Notebooks so they've got this project coming along called Jupyter Lab which totally overhauls the web interface for Jupyter Notebooks such that you aren't restricted any longer for having a single notebook on a page at a time you can have multiple Notebooks and in a tabbed environment within the actual user interface I have had that running and it looks quite interesting but I disabled it at the moment but that's a quite interesting thing that's coming along with Jupyter Notebooks but it does work as well so the interesting thing to me and it's just between the paid Jupyter Hub things that are on that's on Microsoft Azure or the Datalab on Google's cloud would it be possible for someone just to take the work that you've done and convert that into their own Jupyter Hub offering? I mean it seems doable and you could just customize it that if someone were so wanting to create their own version of Datalab is that something that people might do or a university might do for themselves? The Jupyter Hub software is quite configurable so I didn't in my demo have a thing with authentication but you can also put in your own authentication system so you might have to construct a little bit of a web interface separately for you actually signing up and creating it but you can have SSO hooked into Jupyter Hub so that if you're already logged in by the separate system first then the SSO works as soon as you go to Jupyter Hub instance and it'll fire a notebook so there's no reason why this can't be used as a base for creating your own little mini service internally to organization or if you actually do want to do something which are more commercial basis. Yeah so I'm going to look to see because I think I've gotten a few folks especially from the EDU side and then some of the folks in the financial services side of things that have been quite interested in doing something with Jupyter Hub and they may have already done it on their own without using OpenShift under the hood but what was interesting to me was really describing it as you can have Jupyter Hub and then you can do your other workloads too on OpenShift and I know these folks all have OpenShift already running so I'll be interested to see there goes the dog that must be the alarm clock for ending this system on. Hang on a second while I quiet him down. I had a question. Well, I'm seeing in the market there's a lot of data analytics without the data scientists and they know that they can't do it. They can't do the big stuff without data science but they don't want to have to call a data scientist in every time you want to do a model. This seems like it would be something to put in the toolkit for that. Could you build up a reasonable data analytics piece without who understands the business than the data analytics part? If I understand where the question is coming from you're dropping in a bit out so I didn't quite get all that. The intent of what I'm doing here is to provide a way of doing things in OpenShift where you have much more control over how you're doing things compared to say a software as a service. The idea that you can run additional workloads in there to support what you're doing and customize it and this is where you can bring in that RadAnalytics project or any other project which are providing the sort of capabilities you need and using it in conjunction with this. So I'm viewing as like a toolkit approach as opposed to a software as a service where it's locked down and works only particular way. So I think that whole approach to things is sort of satisfying what you think you're talking about because you can start to add in these extra bits which have that better domain knowledge of what you need to do. I think Rob, that's one of the beauties of Jupyter Notebooks is that you could create something that's specific to a business organization Jupyter Notebook and share it amongst them and they could tweak it or add things into it and make it that company's data analytics notebook or whatever their data source is and have all the hooks and bells and whistles into that shared Jupyter Notebook and then they could customize it and share it and tweak it out and that's really one of the wonderful things about Jupyter Notebooks and then Jupyter Hub lets them collaborate on these things. So it's a really wonderful platform. It's been really taking advantage of a lot by folks in academia and folks at I think it came out of Berkeley originally but now it's been adopted pretty widely in the FSI industry as well. So it's caught on and I think as an open source project it's getting a lot of attention these days. There's a scenario I always like to target is the idea that the manager could come in in the morning just go to a particular URL and they get a new custom notebook for that day which has been generated overnight and customized based on business data that may have been produced the previous day and they're going to have to know how to deploy anything. All the system can be automated behind the covers by using the functionality of OpenShift with jobs to fire off tasks overnight to build new notebooks or new sets of data and they just come in and it's there for them as soon as they log in and they don't have to worry about it. Some pretty cool use cases. So I hope to get some of the folks in the different industry sectors to showcase what they're doing with Jupyter and share their best practices too. So hopefully we'll have a few more follow-ons with this as well as bring in the right analytics folks and get them to show off some of what they're doing as well. There's been a whole bunch of talks on Spark, on TensorFlow and using Jupyter notebooks to analyze data with those. There's tons more coming. There's a new project and community developing around Kubernetes and machine learning. That's what that machine learning special industry is all about. So there's lots more to come. So thank you very much, Graham, for taking the time to do this session. I'm sure people will find it useful. I'll post it up on blog.openship.org.com rather with the slides shortly and we're going to have our first machine learning special interest group I think January 19th. So if people are interested in joining that, click on this below and I'm sure Jupyter Hub will come up in those conversations as well. So thanks again, Graham. And we'll talk to you all soon.