Skip to main content

How I can share my Azure Notebook with another person from my team?

The Azure team is offering a service where you can run code and develop Jypyter notebook called Azure Notebooks. Azure Notebooks is allowing us to build our notebooks in multiple languages (e.g. R, Python 2/3, F#) and run them automatically inside our Azure Subscriptions. We don't need anymore to spin up the resources, manage them and think about how we can deploy the notebook from our machine to different environments.

One of the most common questions that I receive is 
How I can share my Notebook with another person from my team?

In most of the cases, you are not the only one that is working on a notebook, you might have a team of people that would like to work on a collection of notebooks from the same project. In other cases, the client would like to own the notebook project and allow external teams to use the notebooks. 

The reality is that at this moment in time, sharing notebooks is limited. Why? Let see below.
A notebook project can be private or public.
  • Public - Anybody can access it using the public URL
    • e.g. 
  • Private - The notebook it is not publicly accessible to anybody. The only person that can access the project is the owner of the project.

You might be now a little bit confuse because as you can see in the above picture, we have a share button with the ability to share it via email or link. There are two things that you might not be so obvious:
  1. Share button even it is available and works for both Public and Private projects the URL to the notebook project works only for public ones. For private projects, users will receive an error when they want to access it.
  2. There is no mechanism at this moment in time (June 2020) to provide access to another person to a private notebook project.
Another feature that could be used is the ability to upload a GitHub repository to Azure Notebooks.
It means that in theory, we could create a private GitHub repo with our notebooks that could be imported inside Azure Notebooks. The problem is that only public GitHub repos can be imported. For private ones, there is no ability to import them.

At this moment in time, there is no support of a REST API or CLI that would allow us to manage projects and notebooks from a script. Once we have a REST API for management, we could build script that would clone a project automatically, do the merging and other similar things that would enable collaboration. 

Azure Notebooks are great to build and play with Jupyter notebooks. The lack of sharing capability for private notebooks makes them almost impossible to be used by organisations. The current sharing ability can be used only for public projects that limit the ability to use them in commercial projects. 
What we are missing at this moment in time? A notebook sharing capability based on AD or integration with private GitHub repos. Why not even support inside Azure DevOps.


Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…

GET call of REST API that contains '/'-slash character in the value of a parameter

Let’s assume that we have the following scenario: I have a public HTTP endpoint and I need to post some content using GET command. One of the parameters contains special characters like “\” and “/”. If the endpoint is an ApiController than you may have problems if you encode the parameter using the http encoder.
using (var httpClient = new HttpClient()) { httpClient.BaseAddress = baseUrl; Task<HttpResponseMessage> response = httpClient.GetAsync(string.Format("api/foo/{0}", "qwert/qwerqwer"))); response.Wait(); response.Result.EnsureSuccessStatusCode(); } One possible solution would be to encode the query parameter using UrlTokenEncode method of HttpServerUtility class and GetBytes method ofUTF8. In this way you would get the array of bytes of the parameter and encode them as a url token.
The following code show to you how you could write the encode and decode methods.