Resources

Using Python with RStudio Team

Using Python with RStudio Team Led by David Aja, Solutions Engineer at RStudio 00:30 - Overview of RStudio Team - RStudio Workbench, RStudio Connect, RStudio Package Manager 2:38 - Use case of RStudio Package Manager with Python packages 4:29 - RStudio Workbench (ability to use RStudio, Jupyter Notebook, JupyterLab, VS Code) 5:48 - VS Code running on RStudio Workbench 11:50 - Deploying a Streamlit app to RStudio Connect 14:00 - Pause for questions 18:55 - Jupyter on RStudio Workbench 19:41 - Extension in Jupyter that gives you push-button publishing from RStudio Workbench 20:35 - Publishing with source code vs. publishing only the finished document 21:10 - Hiding the code that is generated when publishing Jupyter to RStudio Connect 23:30 - Creating a custom url in RStudio Connect for your content 24:30 - Adding viewers / collaborators to your content in RStudio Connect 25:18 - Scheduling your Notebooks to run repeatedly 25:54 - Stepping back to describe the differences between RStudio open-source IDE and RStudio Workbench *please note that this meetup will cover our enterprise product, RStudio Team but all who are interested in joining are welcome! Many Data Science teams today are bilingual, leveraging both R and Python in their work. While both languages have unique strengths, teams frequently struggle to use them together: ⬢ Data Scientists constantly need to switch contexts among multiple environments. ⬢ Data Science Leaders wrestle with how to share results consistently and deliver value to the larger organization, while providing tools for collaboration between R and Python users on their team. ⬢ DevOps engineers and IT Admins spend time and resources attempting to maintain, manage and scale separate environments for R and Python in a cost-effective way. Join David Aja in this meetup, which will highlight how other data science teams are able to solve these problems with RStudio Team by: ⬢ Combining R and Python in a single data science project. ⬢ Launching and managing RStudio, Jupyter Notebooks, JupyterLab, and VS Code from the RStudio Workbench environment ⬢ Sharing Jupyter Notebooks, Python APIs via Flask, Dash, Streamlit, Bokeh, FastAPI, Shiny, R Markdown, etc. with the business through RStudio Connect. ⬢ Controlling and distributing Python and R packages with RStudio Package Manager. A few helpful links shared and mentioned during the call: ⬢ Examples David used: https://lnkd.in/g8bdbj7Q ⬢ Example usage patterns of Using Python with RStudio: https://lnkd.in/gek3BhgW ⬢ Helpful place for questions about using Python in RStudio: https://lnkd.in/gWRV2rbG ⬢ Model Management with Python example: https://lnkd.in/gyX2YVvi Product / Conference Questions: ⬢ More info on RStudio Team: https://lnkd.in/gv4YQj2G ⬢ If you’re starting to champion data science at your company: rstudio.com/champion ⬢ If you’d like to chat about RStudio Team: rstd.io/chat-with-rstudio ⬢ RStudio Conference: https://lnkd.in/dcrz79y ⬢ System Admin Workshop at RStudio Conference: ​​https://lnkd.in/eB9FZt-c

Jun 1, 2022
47 min

image: thumbnail.jpg

Transcript#

This transcript was generated automatically and may contain errors.

Awesome. So let's start from the beginning. It's a very good place to start. Okay. Perfect. So let's pretend I just introduced you. Everything is working out perfectly. Welcome to everyone to the meetup. And now, David, it looks great on Zoom. There you go.

Okay. So from the top, right, I think the goal here is to provide an overview of the different components of RStudio Team and how they can support the work you're doing in Python. So I'll give a quick sort of overview of those three components, and then we'll jump into sort of trying to solve some problems that you might confront as a data scientist with them.

And so just to outline what they are, and again, I'll stress that they do work independently. So you should feel free to consider the ones that work specifically for your collection of problems, right? RStudio Workbench is going to give you IDs, right? So places to develop and build that code, right? So the RStudio IDE, which you can use to edit Python code, there's some functionality that's been built in there to support doing that, as well as more Python-native editors like Jupyter or VS Code, right? So that's going to give you all of those options. Connect is going to be where you share things with people who you wouldn't expect to be working in a development environment. So applications you built with Shiny or Python frameworks like Dash or Streamlit.

APIs, so if you're trying to facilitate machine-to-machine communication, or reports or documents that you want to share, perhaps on some kind of regular schedule. And then supporting those two services, and where we'll start kind of walking through how these things can be used as package manager, which is going to give you the ability to bring those open-source repositories inside your network, which solves an important networking kind of constraint that some teams have.

It gives you the ability to serve your own internal packages. So if you've already got a development ecosystem of those things, then you can serve those from package manager. And it's going to make it possible for you to impose some reproducibility governance.

Package manager and reproducibility

And so I think the first thing that I'll sort of focus on, right, is using some of the functionality that exists in package manager to have an easier time reproducing your project when something unexpected happens. And the example I want to use to highlight that is thinking about this kind of change that happened last week in Streamlit, where one of the underlying libraries that supports Streamlit, called Protobuf, sort of made a change. And that change resulted in lots of breaking Streamlit applications. And people had to kind of figure out that they needed to pin their dependencies to a version of Protobuf that doesn't sort of have the change behavior.

And so that's one way of going about solving the problem of specifying an environment that's going to work for your project. The thing I want to show in package manager is that you have some other options for reusing functionality that we built for R to make your project easier to reproduce. In particular, I'm talking about this kind of date-based snapshotting model that we make available. If I select today, the latest date, which is today, then what we're going to get is just PyPI as it exists at the moment.

And so if we wanted to, say, be able to reproduce the error as people were experiencing it on the 26th, then we can use sort of this date-based snapshot. And so when we call pip install, if we were to call it in this way with this index URL pointing to this date-based snapshot of the repository, then that request is going to be resolved by package manager as if it were the 26th. And so you'll see that in a library where we have that configured, we're actually going to end up with the same breakage that other people were experiencing. But a nice thing that we can do is roll configure our repository so that it points to a previous week, and that's going to give us a little bit more, it's going to unblock us from getting our project out and deployed.

RStudio Workbench and VS Code

And so I'm going to jump over to RStudio Workbench to show you what that looks like. This is kind of the landing page for RStudio Workbench. If you wanted to start up additional sessions, you would be sort of opening up this launcher pane. You have the ability to select from those different editors, as I mentioned. Another thing I won't spend as much time on today, but you have the option of running your sessions in the context of some external cluster resource manager. And in this case, we're using Kubernetes, and that gives us a little bit of finer grain control over the resources available to an individual session. But also this thing that I find really convenient is the ability to select different images for that workload.

And so that, you know, you can imagine if you have, say, like, operating system level reproducibility requirements, which is a thing that happens sometimes, or if you just have workloads that are different enough that it's useful to express them as different container images, then this can be a nice way of making those things available in the Workbench context.

And so I'll open up, in this case, VS Code. And what I'll show you is, right, like, if you've used VS Code locally on your desktop, the experience you're seeing here is going to be pretty similar. So I opened up a new terminal window. I'll make this a little bit bigger.

And I've opened up a new terminal window. What we're going to see, right, is, you know, we've got the code for a Streamlit app. When I opened up this terminal, I automatically activated this virtual environment. The thing I'll also show you here is I've created a virtual environment that specifically has my PyPI repository set to install packages as if it were the 26th.

And so if I activate that virtual environment instead and attempt to Streamlit run my app, right, what we're going to see is we're going to have the app sort of blow up on that same protobuf error that people were experiencing, right? And so the way you can tell that the pip configuration is set that way, in this case, is I'm going to call pip config. And I've set the site configuration, which just means it's configured for this virtual environment. I'll type a list, right? And what you should see is that the global index URL is going to be set for PyPI on that specific date, right? So, you see global index URL, colorado.rstudio.com, which is where we keep our server, right, pointing to that date.

I'll get rid of that virtual environment. So, no problem. And so let's activate our standard virtual environment.

And so now if I try to streamlets run the application, and I think I actually have the streamlet running application here, right, then you'll see that we kind of get the startup you're expecting. But if we want to view this application before we start thinking about pushing it anywhere, and this is kind of a workbench extension that we provide for working with VS Code, one of the things that's going to be different from doing development in this browser context as opposed to doing it locally is that, you know, lots of things when you're doing this local development expect to be able to kind of call themselves on a locally running web server. And we have to do a little bit of extra work to make sure that you can find those applications in the context of that remotely running server. And so this proxied servers view in RStudio workbench just sort of finds when you start an application and then serves its location up to you here so that when I click it, it's going to redirect me out to the streamlet application that should be loading there.

And so that's how we can sort of do some of the development work that we would be sort of doing normally on a local context. So that's, you know, package manager sort of behind the scenes, right, supporting you being able to configure different development environment, different sort of virtual environments that have, you know, sort of different database snapshots. And that's going to make things a lot easier to deal with.

Deploying to RStudio Connect

Once we've got the application in a place where we're ready to share it with people, then the next thing we're going to want to think about doing is deployment. And so I'll walk through what the process of using the command line interface that is distributed on PyPI called rsconnect-python. If you wanted to get that on your machine, you would pip install rsconnect-python. And that's going to give you this rsconnect command line interface. If I type help, right, then we're going to get a bunch of information about the different things that this command line interface can do.

And so, yeah, we've got a bunch of different things, these top level commands, right? We can enter, we can set the command line interface up to interact with a bunch of different servers. So in this case, if I list the configured servers, I have, you know, one connection set up to the server we'll be deploying to. Then I could have, you know, additional servers. If I had a development server or pre-production server where I needed to deploy things for user acceptance testing or things of that nature.

If I look at the help for deploy, right, then we're going to see a bunch of information about, again, the different types of content that are supported by Connect for deployment, right? So API and FastAPI are going to give you synchronous and asynchronous Python servers, respectively. They're not totally general, right? But for lots of Flask apps or if you're building things based on like FastAPI or Starlet, if you're familiar with that, or Quartz or Sanic, there are a couple of different options that we support on the API side to make it possible for you to deploy lots of different kinds of things. Bokeh, Dash, and Streamlet are going to be, you know, those application frameworks that make it easy for you to share visualizations and things like that.

The command line interface also supports behind the scenes the deployment of Jupyter Notebooks, which I'll show from Jupyter in a second. And then one kind of nice bonus, right, is that if you have a manifest file, which is kind of our Connect specific deployment artifact, and I'll show you what that looks like here. It has a bit of information about what you need to get your application deployed. But if you have one of those in the repository already, then you can use the command line interface to deploy those things. And the nice thing about that is that that works with content, even if that content is R only, you can use the command line interface to get that deployed.

So, in this case, I'm going to deploy Streamlet application and get the help for Streamlet. And so, we're just going to need a couple of things to get this off our machine and shared with everybody else, right? And so, in particular, we're going to need to provide the directory, right, where this lives. There are going to be a couple of extra files here. We're going to need to provide the name of the target server. And then we're also going to specify the path to the Python interpreter, just to make it sort of explicit where we're getting our dependencies from. So, I'm going to deploy Streamlet's current directory to the target server with a specified Python interpreter.

And so, the process we're going through here to get this deployed is going to be kind of conceptually similar, no matter what you're deploying to connect, right? Which is we're going to create a bundle of the files we've specified and something that enumerates the requirements that we have to build this on the server, right? In this case, that's going to be the requirements file, right, which lays out what I, you know, what dependencies I need in order to rebuild this application on the Connect server. So, we're going to turn those things into a bundle. We're going to send them to the Connect server. Connect receives the bundle and is going to use that to rebuild the environment. And it's going to rebuild that environment in an isolated way, which is going to be very convenient for you, because, you know, it supports deploying things built with multiple versions of Python, potentially conflicting packages, right?

You can have different versions, say, applications built with different versions of Streamlet, and those can all live simultaneously on the Connect server. So, it's going to give you a lot of freedom in terms of experimentation and just, like, being able to deploy things without worrying about taking other things down.

So, it's going to give you a lot of freedom in terms of experimentation and just, like, being able to deploy things without worrying about taking other things down.

And so, this is going to take a second to deploy. While that happens, let me pause. Rachel, any questions I should answer, or should I keep going?

Q&A: Conda, Django, and the examples repository

Yeah, let me check over to the Slido and to YouTube here. Thank you all again for switching over with us and bearing with us through any technical difficulties here. As a reminder, you can also ask questions anonymously through Slido.

One question I just had, David, if people want to follow along with some of these examples that you're sharing, where's the best place to get those? Or can you share that GitHub link?

That's an excellent leading question. That's the next link I have here. So, all of the examples, there are a bunch of, as I mentioned, different types of things you can deploy to connect that are Python-based. And so, we have this repository, GitHub.com slash Solange Python examples. And that's just going to give you all of these different types of content. So, Streamlit apps, Flask apps, Reticulated apps. So, that's apps where you say you have a Shiny front end, but a lot of the work is being done by Python, FastAPI, Flask. We've really got sort of everything there. So, feel free to fork this repo. The examples, we try as hard as we can to keep them deployable. So, if you need, say, something to test on your Connect server and fork the repo and deploy it to your Connect server just as a way of understanding the different capabilities that Connect has for supporting Python content.

Awesome. There's a few questions that came through Slido. And one was, I configure my Python environment using Conda. Can I use Conda with RStudio Connect?

The answer is sort of. So, I think Connect's focus is on where Connect does the best is with packages that are on PyPI. So, you can use Conda to manage your environments. And if the packages that you're using are available on PyPI, then it should be reasonably straightforward to restore. There are ways of getting Connect to restore packages that might not be available from PyPI that's a little bit more involved. It's going to involve some collaboration and coordination with your administrator to make that work. So, yeah, I think sort of our workflow is pretty PyPI centered at the moment.

Okay. Thank you. And one other question that came through was, will Django be supported?

Um, I am not the right person to ask about whether Django will be supported. What I would say is that, you know, I think Django tries to do a much bigger set of things than is like the modal or the typical thing that a data scientist is trying to build an app to do. Part of what Connect makes so easy is some of the concerns around user management or things like that, where Django is trying to be a truly sort of full stack web framework. So, you know, people ask occasionally. And I think it's something that we can sort of monitor the interest in. But right now, I'd say it's not something we're thinking about in the immediate collection of priorities.

Jupyter on RStudio Workbench

So, yeah, like I mentioned, there are a bunch of different Python examples that we have available in the repository. So, one of the things I'll just do is jump back to Workbench and open up Jupyter, right, which is going to give you, again, if you're, I'm going to use the classic notebook interface for this example. JupyterLab is also a supported option.

And so, in this case, I've got an example. It's pretty bare bones. It just runs a couple of visualizations and is going to give you some plots that you could share. And so, I think the lesson here is, or the takeaway, right, is that if you're somebody who likes to use Jupyter to do your data science work, right, the experience that you're going to have, right, it should not be substantially different on Workbench. And so, it's going to continue to be that familiar home for you to do some of that development work. There are really only two extensions right now that we provide in, say, the Jupyter classic interface. One of them is just going to take you back to the Workbench homepage. And then the other one is going to support the publishing workflow, that mirrors pretty closely what it looks like to use the push button publishing workflow from the RStudio IDE.

And so, that's just going to mean that, you know, you've done some interactive development in the notebook. You're ready to share those results with other people, and we're going to give you an easy way to push that notebook to a remote server.

So, you can see, right, I've already configured my, I've configured sort of the target server where this is going to be deployed. I'm going to call this presentation notebook.

And then for all kinds of documents that you publish to Connect, and this is, excuse me, both on the R and Python side, you're going to have the option of either publishing the document with source code, and that's going to unlock a lot of the power to have Connect serve, take custody of the document, execute it on a schedule. But also, you know, if you have, say, either dependency conflicts that are too complicated to resolve on the Connect server, or you just, you know, you don't actually want to make the source code available, you can just render the document locally and then push it to the Connect server.

The reason I'm going to call this presentation notebook is that one of the things we enable you to do as you're publishing is specify that you don't actually want people to be able to see the code in the notebook, right? So, this hide all input code cells, and there's a corresponding flag in the command line interface. We'll just make it be the case that, you know, when this notebook is deployed, what we'll see is just the plots, but we won't actually see the code that generated them. And so, for things that you intend to be for, you know, sharing, but not necessarily, you know, a walkthrough of how you got the results, being able to hide those cells is really useful, and you can also hide specific cells if you tag them.

And so, I'll hit publish, right? In this case, I'm getting the new location, right, new title, presentation notebook, and then I'm going to publish this. And so, again, the process I described as we went through deploying a Streamlit application is going to be the same, right, which is we're going to make sure we have an accounting of the files we need. In this case, it's the Python notebook files, the requirements that we have for re-executing this environment, right? So, in addition to, say, Jupyter, right, there's also some NumPy manipulation taking place in this file, and so we need to make sure that that library is installed. In addition to the Jupyter libraries, we're going to push that over to the Connect server. Connect rebuilds this notebook in an isolated environment, and then you can see we're going through the process of rendering the notebook, and once that's done, we'll have something that's ready to present and share with other people.

Sharing and scheduling content on Connect

So, that covers sort of the process of getting things from the development environment to Connect where they're going to be shared, and so the last couple of things I want to do is just show you some of the possibilities once you've deployed a document to Connect, right? So, in this case, you can see, right, the code required to generate these plots not being shown, right? So, you've got a notebook that's presentation ready.

One of the first things you might want to do, right, is make this a little bit easier to find, right? So, when you deploy a piece of content to Connect, you're going to get, you know, it deployed at this unique URL, which is not necessarily the most memorable thing in the world. So, one of the things we enable you to do is set a custom content URL, and that's just going to make it, you know, really simple, give you a memorable, a place with a more memorable name to share that notebook. And the nice thing about that is once, you know, once you've generated that URL, if you open up a new window and you share the notebook with someone there, right, then they're just seeing that content, right? They don't even see any of the sort of Connect UI, right? And so, for, you know, stakeholders who aren't, say, on your data science team, right, this is going to be probably a presentation that they much prefer, right? You know, you're insulating them from, like, the deployment details, and you just get them to focus on the results.

The other thing you're going to have control over is who's allowed to see this notebook, and since Connect sort of integrates with, it can be integrated with whatever enterprise authentication system you're using, right, I could say add the rest of the members of the solutions engineering team as viewers of this content. I could add specific people. I can give them collaborator permissions, which is going to mean that they have the ability to come in and make further modifications to that document. I can make the document more permissive and say, okay, you know, anybody who reaches this server can view this document, but they have to log in first, so you get a really wide range of ways that you can share this content with people in your enterprise.

The other nice thing that you get on the document side is going to be the ability to set things to run on a schedule, right? So, say that rather than a notebook that's just kind of read once, you have something that you want to run repeatedly. This is going to, you know, because you are fetching external data, that might be a nice way to sort of have, say, some monthly reporting or, you know, on whatever schedule is going to work for you, and you can set that to sort of run on a schedule and then be emailed to people you're collaborating with or other viewers.

Q&A: Workbench editors and enterprise setup

Yeah, quick question. I love that now we're making this very interactive here. Somebody asked, they said, I'm a bit actually a lot confused. They expected to see the usual RStudio, like I imagine RStudio on their desktop, but we're curious, what environment is this work being done in?

So, and yeah, if I was not clear enough about that, I'm sorry, right? So, Workbench, right, is gives you the option of starting lots of different editors. So, the Streamlit applications I was working with, right, I'm working with in VS Code, which is, you know, a pretty popular sort of editor for doing lots of kinds of code editing and management. Jupyter is going to support doing a lot of that sort of notebook style development. You can edit Jupyter notebooks in VS Code as well. That's actually my preferred workflow. And then, again, the RStudio IDE is also sort of available to you in Workbench. And so, you get the full sort of range of different things, right? It's a, right, when we talk about it being a home for R and Python, right, it's because you have the ability to run both R as well as like different Python editors. They're, you know, they have access to the same files if you do configuration for access to databases. All that information is going to be sort of consolidated in one place.

Awesome. Thank you. I think also for anybody who's never even seen RStudio Workbench 2, it might be helpful to just cover what's the difference between Workbench and maybe the open source RStudio IDE.

So, you know, Workbench has a few different flavors, right? Or sorry, RStudio has a few different flavors, right? There's the desktop IDE, right, which is the open source one that lots of people use. I used it for a long time before I worked here, right? And that's just going to run on whatever, you know, that runs on Mac OS. That's going to run on Windows. That'll run on Linux desktop if you're that kind of person. And then, there's the open source RStudio server, which gives you the same kind of browser-based capability that I was talking about.

There are a few differences in terms of features and functionality that the professional version of the IDE supports. Some of them are around, like, you know, auditing, just like things that are going to be single sign-on configuration, things that are going to be much more important to enterprise users. And that's where Workbench comes in. So, there are lots of open source ways of running, like, the RStudio IDE. There are, like, Docker images from the Rocker project that make that really easy. I think once people find that they need to run those things in an enterprise context, then Workbench is where they tend to go. And so, Workbench supports, you know, running those multiple editors, the things I was mentioning earlier about running in these different computing contexts. So, if you need to work in Kubernetes or Slurm or some other external resource manager, then that's when you'd be looking for some of the functionalities that Workbench provides.

I mean, that is the, like, I think the core of the workflow, right? We've seen, right, there's, you know, you get the ability to manage packages from package manager. You, you know, Workbench gives you a collection of different editing environments that you can use to get your work done in a way that feels comfortable for you. And it's going to support your team and their diverse preferences really well. And then Connect is going to, you know, be able to run and make it easy for you to share things, whether they're built with Shiny or Dash or Streamlit or what have you. So, I'm happy to just take questions for the remaining time we have here because I think that covers sort of the basic flow.

Further Q&A

I see somebody asked on Slido, can I publish an application with, I'm going to, I'm not sure if I pronounced this right, IPy widgets to allow collaborators to change settings and rerun the notebook?

So, not currently. So, right now, Jupyter, the Jupyter support in Connect is limited to what you think of as the static document model, right? So, there's no running Python process behind the document. I know that that's something we're thinking about in terms of trying to make sure we're supporting the full range of Python sort of interactive use cases. But right now, if you deploy a notebook, then you can do sort of the client-side interactivity I illustrated earlier, but sort of interacting with a running Python process isn't supported today.

Thank you. And I see someone else asked on YouTube, is VS Code just on the latest version of RStudio Workbench? Because I think they have Workbench, but they don't have that yet.

So, yeah, VS Code support would have gone out in beta for like Juliet Rose, which was like 1.4.17. We've since switched to calendar versioning, and you should install the latest anyway. So, if you're running a version that's older than 1.4, it's unlikely that you have VS Code. And I would say that the more recent versions are where that support is going to be the best. So, if you're interested in upgrading, I would just sort of go for the most recent version.

One other question that's on Slido is, is there a substantial difference in configuration when setting up Workbench to allow editing on all the platforms, R or Python, or is that a fairly standard setup?

There is a little bit more configuration to do. So, you know, you go from just installing R, right, to having to install Python, and then the Python packages that support doing these different styles of editing. For Jupyter, for VS Code, you're installing another kind of binary. So, there are a few more steps. It's not, I think, terribly involved. There is some additional work required to get an installation that's fully featured up and running. And then, you know, if you decide you want to, you know, there may be additional complexity depending on like how many instances you want to run of Workbench and if you're trying to cluster them or things like that.

So, somebody asked on YouTube, just a clarification about RStudio team and if that was a name for the triple threat combo of Workbench, Package Manager, and Connect. And yes, that is absolutely correct. So, RStudio team is RStudio Workbench, Package Manager, and RStudio Connect.

Someone asked anonymously, what switches are you using on your mechanical keyboard? They are, excuse me, they are Kelly Golds. Yeah, I have a ErgoDocs split keyboard and Kelly Golds, which is, I'm glad you can tell.

I thought someone was going to ask if they had to use virtual environments, and the answer is yes. You always have to use a virtual environment. Always.

I thought someone was going to ask if they had to use virtual environments, and the answer is yes. You always have to use a virtual environment. Always.

Solutions site and reticulate examples

David, what's your favorite example that highlights Python that's on solutions on the solution site?

Do I have a favorite example? I love all my children equally. I think the reticulate examples are kind of interesting. There's a collection of several of them. And I think for there are often like reticulate is sometimes a little bit difficult to get configured correctly. But if you do get that configuration correct, it's very powerful because it stops you needing to rewrite a lot of things. So, we have some examples there where I think there's an image classification example where the UI is written basically in Shiny and then the image classification is being handled by a PyTorch model. And so, if you're trying to spare yourself, and I mean, there are bindings to Torch. So, it's not like you couldn't do things in a single language stack. But if you do find yourself needing to go that cross language route, then I think the fact that Connect makes it really easy to deploy these reticulated things is pretty nice.

Awesome. And I know I asked that question with just thinking that people would know what the solution site is. And I was wondering if you would be able to just share that with everyone on the screen too, just so they're aware of it.

Yeah. We have a collection of different resources, just ways of, you know, summaries of best practices or problems we see people coming up against repeatedly. We try to document some of those things at solutions.rstudio.com. And so, in this case, the image classification thing that I mentioned, right, where you have a Shiny UI PyTorch backend. I think this is an example that I think is an interesting way, if that's a problem you're confronting.

Thank you. I always love pointing to Alex's bike share example on here too, even if it's not necessarily a Python example. But I love that it shows the whole workflow too.

Yeah. And we've actually, we've just updated that to, you know, take advantage of some of the newer things that are happening at RStudio in terms of sort of how we think about building documents, what it looks like to share pinned models in an easier way. And so, this collection of examples gives the end-to-end flow of, say, picking up some data from the APIs provided by Lyft for the capital bike share in DC. And then, you know, through the process of, I'm trying to understand how many bikes will be available at the station of my choosing at a given point in the day. And so, we go through the exercise of trying to model those things and showing you how you can break that app down into a bunch of different pieces and have those pieces live on Connect.

Awesome. Thank you. A few other questions on Slido, and one was, can RStudio Workbench be integrated with Google Cloud? So, like RStudio Workbench on GCP?

It can, yeah. So, you can run, you could run, and we have customers who run Workbench in, you know, oh gosh, what are their VMs called? Google Compute Engine, right? So, if you have, you know, if you need to run Workbench in GC, you can do that. If you want to use the launcher with GKE, that's an option for you as well. So, yeah, I mean, the requirements for Workbench are really, like, you need a Linux server, and you need to be able to get access, and you need to install the R language on it, but you can run it pretty much anywhere.

Awesome. And someone just followed up with, is that the same with RStudio team? Yeah. Yeah. So, all the product, the requirements for all the products, those are listed at docs.rstudio.com, but in general, as long as you're trying to install to one of our supported Linux distributions, it should be pretty straightforward to get them running in the cloud of your choosing.

Great. And just to confirm, because I didn't read the whole question out, that could be either in the cloud or on your own premise, if your team prefers that, too. Yep. In your own data center, in Google Cloud, on Linode, like, wherever you feel like putting it.

Great. Let's see. One other question. Someone just asked a very broad question. Is C better, or Python, for problem solving? No, I, yeah, like, no. Sorry, that's, I think, yeah, they, you can, you know, Python is, Python calls a lot of C code. You could write, I think it's just, it's a question of, like, what you're comfortable programming in. And if you're comfortable programming in C and Python, and you want to know, like, I don't, I don't have an answer to that question. I can't write C.

Were there any questions that you really thought we were all going to throw at you today and we didn't ask?

Thanks, David. Let me just go check one more time to see if there are any other questions that we missed. Let's see. I will put a short plug in for something that I'm very excited about. So, I've been at RStudio for over four and a half years, and I used to be on the sales team, and I would so often meet with people who were trying to advocate for using RStudio at their company, and were maybe running into roadblocks or just didn't know how to work with IT or start those conversations. And so, we finally got to make this new site, which is rstudio.com champion, and it is there to help you advocate for data science, whether that's R or Python at your organization, so how to build a business case, how to maybe grow a data science community.

But also, how to kick off the conversations with IT as well, and so, there's so many amazing people from the community out there who have shared tips here with us, so this is all because of them, but really, if you're in that position, I would recommend that you go and check it out, too.

Awesome. I put that link in the chat. I do see a few more questions on YouTube, so I'll go ask those, too. One was, is it better to run a Python file from R or read in the functions?

I'd say it's hard to give a general answer to that question, so it probably depends on what you're trying to accomplish.

Okay. Thank you, and if you ever want to talk to us about what you're trying to accomplish, feel free to reach out, too. That would be a great question to spell out in more detail on community. So, yeah, if you go to community.rstudio.com and you ask that question, I think that would be a good place to sort of get into a discussion about, like, what are you trying to achieve and which of those workflows is going to make the most sense.

Great. Thank you. I'm not sure if you will know the answer to this question, but I saw one I missed earlier. Will the testing or posted environment that you mentioned for RStudio team be available for the admin workshop at the conference?

I don't know if we've decided, like, we've landed on exactly what the infrastructure for the admin workshop is going to look like yet, so I don't know.

Okay. And then just a short plug for anyone who is interested in checking out those workshops. We do have the conference coming up July 25th through the 28th. But thank you so much, David, for answering all of our questions and just going with the flow here today. Really appreciate it. Thank you all so much for bearing with us as well and jumping over from one platform to another. Sorry for the technical difficulties there, but we are all human. Even after the best testing, sometimes this happens. So, thank you all so much. Really appreciate your time and all the great questions as well. As a reminder, right when this event is over, the recording will be available here, too. But thank you all, and a huge thank you to you, David. Really appreciate it. Thank you for having me. Have a good rest of the day.