# What's a user-friendly way to setup repositories for Jupyter notebook tutorials?

**URL:** <https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532>\
**Category:** General Usage\
**Tags:** tutorials\
**Created:** [November 23, 2016, 11:46pm UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532 "2016-11-23T23:46:31Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [November 23, 2016, 11:46pm UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532/1 "2016-11-23T23:46:31Z")

</div>

Jupyter notebooks are a good way for doing tutorials, and I already use them like this:

> **[GitHub - SciML/SciMLTutorials.jl: Tutorials for doing scientific machine...](https://github.com/SciML/SciMLTutorials.jl)**
>
> Tutorials for doing scientific machine learning (SciML) and high-performance differential equation solving with open source software. - GitHub - SciML/SciMLTutorials.jl: Tutorials for doing scienti...

or here:

> **[GitHub - UCIDataScienceInitiative/IntroToJulia: A Deep Introduction to Julia...](https://github.com/UCIDataScienceInitiative/IntroToJulia)**
>
> A Deep Introduction to Julia for Data Science and Scientific Computing - GitHub - UCIDataScienceInitiative/IntroToJulia: A Deep Introduction to Julia for Data Science and Scientific Computing

Another example is this:

> **[GitHub - JuliaPlots/ExamplePlots.jl: Collection of examples and recipes for...](https://github.com/JuliaPlots/ExamplePlots.jl)**
>
> Collection of examples and recipes for Plots.jl. Contribute to JuliaPlots/ExamplePlots.jl development by creating an account on GitHub.

While these types of tutorial repositories play very well with online rendering, problems occur when one wants to start using them interactively. I give users a set of instructions for how to open them and play with them locally, but since the changes are tracked as a Github repo, using the notebooks will dirty the repo, so when future changes occur they cannot `Pkg.update()` for the changes.

Does anyone have a good way around this? If you add the notebooks to .gitignore, they wouldn’t update in that case either, right?

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [November 23, 2016, 11:56pm UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532/2 "2016-11-23T23:56:39Z")

</div>

You can tell them to make sure that for each notebook they do “make a copy” from the file menu, and only work on that copy.

This could alternatively be done with a script to change all the names automatically, and even put them in a sub-folder called “live” or whatever. (I agree that it’s not ideal.)

EDIT:

```julia
mkdir live
cp *.ipynb live
cd live

```

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [November 24, 2016, 1:34am UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532/3 "2016-11-24T01:34:50Z")

</div>

I think this is **exactly** what [Binder](http://docs.mybinder.org/users-overview) is for.

> Version control and social coding sites like GitHub make it simple to share code, and projects like the Jupyter notebook provide interactive interfaces for language-agnostic analysis. But executing that code remains a hurdle — dependencies, data, and system configuration are less portable than code, and are more difficult to specify. Binder has two primary goals: to make it easy to construct reproducible environments, even without knowledge of containerization technology; and to make these environments available for instantaneous deployment in the browser.

I haven’t tried deploying to it myself yet.

But I have tried out a [few examples](http://mybinder.org/repo/binder-project/example-requirements),  
it seems to spin up a new jupyter instance just for me, to run that demo in

I can edit what I want to test things out.  
Seem pretty cool.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [November 24, 2016, 1:46pm UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532/4 "2016-11-24T13:46:00Z")

</div>

I don’t know if doing it on the cloud is the right way to go. I think a lot of users do it locally to check that their installation is correct as they learn the commands. This gets more important when binary dependencies are involved.

---

<div class="post-metadata">

**Author:** ![Arnim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/arnim/32/205_2.png) [@Arnim](https://discourse.julialang.org/u/Arnim)\
**Post date:** [October 20, 2017, 3:09pm UTC](https://discourse.julialang.org/t/whats-a-user-friendly-way-to-setup-repositories-for-jupyter-notebook-tutorials/532/5 "2017-10-20T15:09:22Z")

</div>

There is now also a working [https://beta.mybinder.org/v2/gh/yuvipanda/simplejl/master](https://beta.mybinder.org/v2/gh/yuvipanda/simplejl/master)

Based on [https://github.com/sje30/simplejl](https://github.com/sje30/simplejl)

See discussion on github [https://github.com/jupyter/repo2docker/issues/23#issuecomment-312419028](https://github.com/jupyter/repo2docker/issues/23#issuecomment-312419028)

I certainly like this way of making repos executable
