A Jupyter Enhancement Proposal Story
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Silva, Raniere
Monroy, Tania Sanchez
A Jupyter Enhancement Proposal Story [EuroPython 2018 - Talk - 2018-07-25 - Fintry [PyData]] By Raniere Silva, Tania Sanchez Monroy Python users should be familiar with the concept of Python Enhancement Proposals (PEPs), the way that the Python language evolves over time. In a similar fashion, the Jupyter project has Jupyter Enhancement Proposals (JEPs). This talk with cover the proposer first-hand experience when submiting JEP 23 - Add Template as Metatada enhancement proposal from it's beginning, during EuroPython 2017, up to its current status. We will, in addition, present efforts made as part of the OpenDreamKit project to perform Jupyter notebooks conversions using custom metadata, templates, and exporters, in a programmatic way. Outline 0:00 - 0:05 Who are we? We are impostors! 0:05 - 0:10 Our previous experience with Jupyter Notebook. We will talk about the time that Software Carpentry used Jupyter Notebook for their lesson creation and OpenDreamKit Jupyter notebook programmatic notebooks conversion. 0:10 - 0:15 You are not alone. We will talk how the idea for the Jupyter Enhancement Proposals (JEPs) borned at EuroPython 2017 Help Desk 0:15 - 0:20 Writing our first Jupyter Enhancement Proposals. We will cover our steps to create the pull request required by the Jupyter Project. 0:20 - 0:25 What is the current status of the Jupyter Enhancement Proposals? We will cover any progress from the time of this talk proposal submission and the date of it presentation. 0:25 - 0:30 Time for questions License: This video is licensed under the CC BY-NC-SA 3.0 license:-nc-sa/3.0/ Please see our speaker release agreement for details:-release-agreement/
 Thank you. So Tanya sent her apologies. She was double-bucketed, so she couldn't come. So my name is Hania Eri Silva. Most of the time online, I use RGIACS as my username, so if you're looking to find me online, that's my username. And Tanya, that's her contact. If you want to find her online, she's pretty active on Twitter. So how this triple-layer proposal kind of starts was last year on this same city in Edinburgh. So there was a project from Arizona 2020 that's a big grand project from the European Union. And one project on the data umbrella is the Open Enduring Kit. So the idea for this project is to work on infrastructure for researchers. And one of the goals is to strengthen virtually research and environment. So for example, Jupyter's notebooks and all the Jupyter ecosystems. And last year, as I was saying, we had a meeting that was a computational mathematics with Jupyter at the International Center for Mathematical Science. So the institute, the software sustainability institute where I work, we have some fellows and one of the fellows is Alexander Konalov. And he's one of the co-investigators for the Open Enduring Kit project. So he kindly invited me to join the teams for this one week, half talks, half hockey day, which was quite nice. So during all the conversation that people was having, we started talking about how to develop the lessons because most of the people that was interested in that. So at some point, it was like, we want to have lessons in a website that looks nice, not exactly as nice as this one because this is an old one. But I got involved in software carpentry. That's a nonprofit organization that teaches people in academia how to code in Python and version control that software. And this is a screenshot for how that lesson was looking like in 2014. What you can see on the screen is that they have a title for this lesson, so it's making choices and they have a little below a series of objectives for that lesson. So for example, readers suppose you know how to create a single image made out of color blocks at the end of that lesson. So it's not too long lesson, but you can see some codes at the first section. So image grades, you can see some Python codes in some cells. So the idea that was discussing on the workshop was like, it will be really nice to end up with some lessons that has this kind of look, a little more professional, and with some colors that make readers find things easily, but that you could write the lesson in Jupyter's notebook because if there's some code and some output, you don't want to copy and paste every time that you change, especially if you have 100 cells on your lesson. So we was looking on Jupyter, so this is the same lesson that doesn't have the title, but you can see that the objectives are the same and the same Python codes. So this is Jupyter at that time, 2014. We didn't use the word Jupyter, it was a Python notebook at that time. So it's the same notebook that was generated in that previous image, but just on Jupyter. And it was like, so this is how we have on Jupyter and this is how we're writing, which most people on academia that use that too is already familiar with, but this, when you're trying to export this, you can choose someone that's going to read the lesson, you can say, oh, I can use NBVIL, that's a nice tool, I just need to send a link, and this is how you're going to see on NBVIL, which is okay, but as you see, you still have the numbers of the cells here, which as you see, start on six on this example, and why they really can think, why start on six and not one if they start with the lesson? And there is no color, so it can be a little hard for people to follow the lesson because it doesn't make very highlighting things. And it was keeping these discussions like, okay, so what you can do? And if you ever use Jupyter notebook, you might have come across with the option to download your notebook in different formats, so you can download this, the notebook itself, but you can also download as a Python script, that was something that I mentioned yesterday on the beginner's day for someone, that person was asking, like, if I want to get just a script from the notebook, so you can just go and download, you can download as an HTML file or a markdown or a restructuring text or lay tech or get a PDF via lay tech, so there's a couple of options. And it was like, okay, so let's see how and up if you decide to download as an HTML, because you can upload the HTML to many websites and they just render and looks exactly as NBVIL, because that's basically what NBVIL was doing. And it's like, okay, we still have this kind of same problems, you want to remove some things and add some things. So keep on that discussion, another thing that people kind of phrase was like, sometimes you have one lesson, but you want to split the lesson in sub-lessons, so maybe once you split in like day one and day two, because it's a two-day workshop, or morning or afternoon, and you might have extra contents, not just Jupyter notebooks, you might have Python script because you explain for people how they're going to use scripts, or you might have some file formats that you want to download because you have some chemistry files that people need to read and so on, and you want to make it easy for people to download all these files, so you want to organize all the lessons in some format. So this screenshot was something that Tanya was, ended up working during that week, one year and a half ago, here in Edinburgh, and it's kind of a good nice prototype. You can actually use, but still was discussing how you can use better Jupyter notebooks. And the main thing that was like, why do you want to use Jupyter notebooks? Because the environment is familiar to authors, and it's part, at this moment, more, 40 program languages, so it's not just Python. If someone is writing a lesson in R, they can use the same infrastructure. If someone is writing a lesson in C, the same thing, they just can build on top of what everyone else already contributed. And what pieces of the pipeline, we kind of was building on top, so there's NB Convert. Can you raise your hand if you know what NB Convert X is? So let's half of the room. So NB Convert is what's behind all that options that I was showing before on Jupyter Notebook that you can download the notebook in different formats, and there are things that start generating like Sphinx, Hugo, or Jacko. So that was the two pieces of work that you need to build on top. And Tanya was, again, working on other ideas, mixing Jupyter notebooks and Jacko, so that's one of the Git repositories. And first, for words, a little bit, this is the time machine from Dr. Hu. So you are in England, so I want to put this image. I ended up in Europe last year, so that's the photo of some discussions, not on the discussion, but some of the people was closed by. So Thomas is in the back. Here and I was in one of the helping desk, and someone showed up saying, so can you help me with something on Jupyter Notebook? And he's like, yes. So what do you need? And that attend was like, so I have to create some reports, but every time I need to put some logo on my reports, because my boss needs those reports to be archiving something. And all the analysis for the reports are on Jupyter Notebooks, but at the end, I just want to include the logo, and I want to save time, because I don't want to keep doing that every time. That then was like, because at the moment, I generate the later code, and then I need to edit the later code. So I don't want to keep editing the files every time, because as you might know as a software developer, if you need to keep doing things every time again, it's a whole problem, so that's why you want to automate. And at that time on the table, I was like, yeah, you could create a latex class and try to avoid to do most of the editing. And someone was like, oh, no, but you can have custom templates for NB Convert, and I was like, oh, yeah, that's true. So that was like, it's funny, because I never, I was using that option a long time ago, but I kind of forgot what was. So this is demo time just to give you an idea of how NB Convert and the custom templates work. So we're going to do this on the shell. I think it's a little bit. It's OK for people on the audience to read. So there's a few files here. The 04 minus con.ipi NB is just a Jupyter notebook. So if I do less on that file, it's just JSON format. If you have an open-net file without, it's just a plain text. So there's nothing extra spatial in that one. And there is a template here, this full template that I basically just downloaded from the source code, from the NB Convert. So it's exactly the same file. And they use Ginger 2. So if you ever added any of the Ginger files to templates, so you're going to be familiar with these instructions, Extend. So it's just saying that's Extend one previous template, and those blockers and so on, and not going to tip on this one. But it can create, can use that template to generate the HTML file from the Ipyton notebook. So I can type Jupyter NB Convert, and I can pass the file. I can use template, and I can pass the file. So full TPL, and I can pass the file name. And it's going to generate, saying that it Convert, so I'm just going to switch the screen to open on the browser. So this one, yeah. So that's the output. I just refresh so you can see. And it's pretty similar of one of the screens that I showed you before on the Jupyter notebook. But if I want to say, oh, I want to add some extra information, I can build on top of the template. So I have a cursor A here, and I'm just going to show you a tip so you can see what I make the change. So full TMP and cursor A TMP. So I just add this line. So it's just saying, Europe I turn 2018. So it's just before all the notebook information, and I can use Jupyter again, NB Convert template, and now I'm going to change the template to custom A.tpl. And I want output as 04.con custom A and the notebook itself. So it's, sorry, there's a typo here. It's using now the template, my custom template, and converting the notebook. So it's writing, and I'm going to open on the browser. So this is the new one. Just refreshing so be sure that's going there. So there is a Europe I turn 2018 here on the top. So as any minimal example, I can do something. I can customize at my template, and then I want to do something more interesting, just like not just a text. I can maybe add an image. So that's the second one. So the difference between the foo and the custom B. So I just add an image here. So you can see here. So just a HTML tag with the image. And you can convert using the same command. Just changing the template here. This one. And I'm going to switch to the other one. So then I have the logo of the Europe I turn 2018 here. So the idea is like if I can do this with just changing one line of code, I might be able to add any other kind of information that my employee might want to have on the report, the load, the address, any email, or anything. So that's what Thomas had suggested to her to use just fit through from any big convert. And it was like, this looks very good. But it's kind of that uses just accessing the Jupyter notebook and see some at the top of the iceberg. And that's just 10%. The 19% of everything is under the water. And no one's kind of seeing. That was the case of that attending. And the same attending that was like yesterday on the beginning of the day. It was like maybe you can see if you can prove that and make that more visible in terms of templates and so on. And that's what I end up talking with Thomas on last year. It's like, what I can do. And it was like, maybe you can send a proposal. And I was like, OK. I know that Python has proposals. They have the PAPs. And I was already kind of familiar. I read a few of them. PAP 8, that's about coding formats. It's like, OK. Thomas told me that there is Jupyter enlistment proposals. So I started looking online. And it's like, OK. There's a Git repository that's from the Jupyter organization. It's called enlistment proposals. And it's like, reading the readme. And it's like, yeah, that's the procedure if you want to just something. You can copy one of your files, create one directory, open a pull request. So that's what I decided to do. I decided to open a pull request. And like, can you add templates as metadata? And this is an enlistment proposal for this pull request. And you can see that Thomas had a comment just left to me. So my idea was, because I want to reuse the same template over and over again every time that they're going to export is it's supposed to be saved somewhere. So that's why it needs to be something on the notebook format, not just the Jupyter interface. So that's why I end up sending the proposal. And there was a few comments below. And I include like an image, a screenshot, or like, this is how I envision the idea. You can go to the Jupyter interface. And you can say, this is I want to set a template. That's my template. Go to some template that I want to use. And later, you can just go and download that. At the end, we had some discussions on the issue. But I ended up being too busy to just portion and get like a kind of prototype and explore more of the ideas. And if you propose something, can you really not able to take forward with lots of time? It's kind of keep open. People was very welcome from everyone from the Jupyter community, sending feedbacks and so on. So it's kind of my fault to not have too much time. But that was what I want to share with you today. I want to thank Spaceship Thomas for all their contributions and pushed me to share this. And if you have questions, I hope you're having questions. Now, if you want to make questions later on Twitter or anything, that's my AD and Tanya's ID. Thank you very much to listen. APPLAUSE Thanks, are there any questions? No? What kind of... You said you ran out of time to fully implement it. How big of a job do you think it is to implement one of these proposals? This proposal? The main challenge was just like, learn how the insides of how NB Convert works and the order that it reads files. Because the challenge is like, if I start the name of the template that I want to use, it's inside the notebook. But NB Convert, he started doing something before opening the notebook. So I was changing this part. It's not super trivial. You need to open the notebook. And at that moment, you pass that. And later you can say, OK, I have that piece of information. And now I need to go back and change the default one. So that was the most time consuming that I didn't have time to default too much. Is it all written in Python? Yeah, NB Convert is in Python. It's fully Python. The templates, they have a series of templates. And those templates are in danger too. OK, yeah. That's your Python. And is the Jupyter Notebook, is that fully Python? No, Jupyter Notebook. There's lots of JavaScript using the face. Yeah, makes sense. Anyone any questions before we wrap up? OK, welcome. Thank you. Thank you very much. Thank you for listening. Enjoy. Thank you.
 Thank you.  So Tanya sent her apologies.  She was double-bucketed, so she couldn't come.  So my name is Hania Eri Silva.  Most of the time online, I use RGIACS as my username, so if you're looking to find me  online, that's my username.  And Tanya, that's her contact.  If you want to find her online, she's pretty active on Twitter.  So how this triple-layer proposal kind of starts was last year on this same city in Edinburgh.  So there was a project from Arizona 2020 that's a big grand project from the European Union.  And one project on the data umbrella is the Open Enduring Kit.  So the idea for this project is to work on infrastructure for researchers.  And one of the goals is to strengthen virtually research and environment.  So for example, Jupyter's notebooks and all the Jupyter ecosystems.  And last year, as I was saying, we had a meeting that was a computational mathematics with  Jupyter at the International Center for Mathematical Science.  So the institute, the software sustainability institute where I work, we have some fellows  and one of the fellows is Alexander Konalov.  And he's one of the co-investigators for the Open Enduring Kit project.  So he kindly invited me to join the teams for this one week, half talks, half hockey  day, which was quite nice.  So during all the conversation that people was having, we started talking about how to  develop the lessons because most of the people that was interested in that.  So at some point, it was like, we want to have lessons in a website that looks nice,  not exactly as nice as this one because this is an old one.  But I got involved in software carpentry.  That's a nonprofit organization that teaches people in academia how to code in Python and  version control that software.  And this is a screenshot for how that lesson was looking like in 2014.  What you can see on the screen is that they have a title for this lesson, so it's making  choices and they have a little below a series of objectives for that lesson.  So for example, readers suppose you know how to create a single image made out of color  blocks at the end of that lesson.  So it's not too long lesson, but you can see some codes at the first section.  So image grades, you can see some Python codes in some cells.  So the idea that was discussing on the workshop was like, it will be really nice to end up  with some lessons that has this kind of look, a little more professional, and with some  colors that make readers find things easily, but that you could write the lesson in Jupyter's  notebook because if there's some code and some output, you don't want to copy and paste  every time that you change, especially if you have 100 cells on your lesson.  So we was looking on Jupyter, so this is the same lesson that doesn't have the title,  but you can see that the objectives are the same and the same Python codes.  So this is Jupyter at that time, 2014.  We didn't use the word Jupyter, it was a Python notebook at that time.  So it's the same notebook that was generated in that previous image, but just on Jupyter.  And it was like, so this is how we have on Jupyter and this is how we're writing, which  most people on academia that use that too is already familiar with, but this, when you're  trying to export this, you can choose someone that's going to read the lesson, you can say,  oh, I can use NBVIL, that's a nice tool, I just need to send a link, and this is how  you're going to see on NBVIL, which is okay, but as you see, you still have the numbers  of the cells here, which as you see, start on six on this example, and why they really  can think, why start on six and not one if they start with the lesson?  And there is no color, so it can be a little hard for people to follow the lesson because  it doesn't make very highlighting things.  And it was keeping these discussions like, okay, so what you can do?  And if you ever use Jupyter notebook, you might have come across with the option to  download your notebook in different formats, so you can download this, the notebook itself,  but you can also download as a Python script, that was something that I mentioned yesterday  on the beginner's day for someone, that person was asking, like, if I want to get just a  script from the notebook, so you can just go and download, you can download as an HTML  file or a markdown or a restructuring text or lay tech or get a PDF via lay tech, so  there's a couple of options.  And it was like, okay, so let's see how and up if you decide to download as an HTML, because  you can upload the HTML to many websites and they just render and looks exactly as NBVIL,  because that's basically what NBVIL was doing.  And it's like, okay, we still have this kind of same problems, you want to remove some  things and add some things.  So keep on that discussion, another thing that people kind of phrase was like, sometimes  you have one lesson, but you want to split the lesson in sub-lessons, so maybe once  you split in like day one and day two, because it's a two-day workshop, or morning or afternoon,  and you might have extra contents, not just Jupyter notebooks, you might have Python  script because you explain for people how they're going to use scripts, or you might  have some file formats that you want to download because you have some chemistry files that  people need to read and so on, and you want to make it easy for people to download all  these files, so you want to organize all the lessons in some format.  So this screenshot was something that Tanya was, ended up working during that week, one  year and a half ago, here in Edinburgh, and it's kind of a good nice prototype.  You can actually use, but still was discussing how you can use better Jupyter notebooks.  And the main thing that was like, why do you want to use Jupyter notebooks?  Because the environment is familiar to authors, and it's part, at this moment, more, 40 program  languages, so it's not just Python.  If someone is writing a lesson in R, they can use the same infrastructure.  If someone is writing a lesson in C, the same thing, they just can build on top of what  everyone else already contributed.  And what pieces of the pipeline, we kind of was building on top, so there's NB Convert.  Can you raise your hand if you know what NB Convert X is?  So let's half of the room.  So NB Convert is what's behind all that options that I was showing before on Jupyter Notebook  that you can download the notebook in different formats, and there are things that start generating  like Sphinx, Hugo, or Jacko.  So that was the two pieces of work that you need to build on top.  And Tanya was, again, working on other ideas, mixing Jupyter notebooks and Jacko, so that's  one of the Git repositories.  And first, for words, a little bit, this is the time machine from Dr. Hu.  So you are in England, so I want to put this image.  I ended up in Europe last year, so that's the photo of some discussions, not on the  discussion, but some of the people was closed by.  So Thomas is in the back.  Here and I was in one of the helping desk, and someone showed up saying, so can you help  me with something on Jupyter Notebook?  And he's like, yes.  So what do you need?  And that attend was like, so I have to create some reports, but every time I need to put  some logo on my reports, because my boss needs those reports to be archiving something.  And all the analysis for the reports are on Jupyter Notebooks, but at the end, I just  want to include the logo, and I want to save time, because I don't want to keep doing that  every time.  That then was like, because at the moment, I generate the later code, and then I need  to edit the later code.  So I don't want to keep editing the files every time, because as you might know as a  software developer, if you need to keep doing things every time again, it's a whole problem,  so that's why you want to automate.  And at that time on the table, I was like, yeah, you could create a latex class and try  to avoid to do most of the editing.  And someone was like, oh, no, but you can have custom templates for NB Convert, and  I was like, oh, yeah, that's true.  So that was like, it's funny, because I never, I was using that option a long time ago, but  I kind of forgot what was.  So this is demo time just to give you an idea of how NB Convert and the custom templates  work.  So we're going to do this on the shell.  I think it's a little bit.  It's OK for people on the audience to read.  So there's a few files here.  The 04 minus con.ipi NB is just a Jupyter notebook.  So if I do less on that file, it's just JSON format.  If you have an open-net file without, it's just a plain text.  So there's nothing extra spatial in that one.  And there is a template here, this full template that I basically just downloaded from the  source code, from the NB Convert.  So it's exactly the same file.  And they use Ginger 2.  So if you ever added any of the Ginger files to templates, so you're going to be familiar  with these instructions, Extend.  So it's just saying that's Extend one previous template, and those blockers and so on, and  not going to tip on this one.  But it can create, can use that template to generate the HTML file from the Ipyton notebook.  So I can type Jupyter NB Convert, and I can pass the file.  I can use template, and I can pass the file.  So full TPL, and I can pass the file name.  And it's going to generate, saying that it Convert, so I'm just going to switch the screen  to open on the browser.  So this one, yeah.  So that's the output.  I just refresh so you can see.  And it's pretty similar of one of the screens that I showed you before on the Jupyter notebook.  But if I want to say, oh, I want to add some extra information, I can build on top of the  template.  So I have a cursor A here, and I'm just going to show you a tip so you can see what I make  the change.  So full TMP and cursor A TMP.  So I just add this line.  So it's just saying, Europe I turn 2018.  So it's just before all the notebook information, and I can use Jupyter again, NB Convert template,  and now I'm going to change the template to custom A.tpl.  And I want output as 04.con custom A and the notebook itself.  So it's, sorry, there's a typo here.  It's using now the template, my custom template, and converting the notebook.  So it's writing, and I'm going to open on the browser.  So this is the new one.  Just refreshing so be sure that's going there.  So there is a Europe I turn 2018 here on the top.  So as any minimal example, I can do something.  I can customize at my template, and then I want to do something more interesting, just  like not just a text.  I can maybe add an image.  So that's the second one.  So the difference between the foo and the custom B.  So I just add an image here.  So you can see here.  So just a HTML tag with the image.  And you can convert using the same command.  Just changing the template here.  This one.  And I'm going to switch to the other one.  So then I have the logo of the Europe I turn 2018 here.  So the idea is like if I can do this with just changing one line of code, I might be  able to add any other kind of information that my employee might want to have on the  report, the load, the address, any email, or anything.  So that's what Thomas had suggested to her to use just fit through from any big convert.  And it was like, this looks very good.  But it's kind of that uses just accessing the Jupyter notebook and see some at the top  of the iceberg.  And that's just 10%.  The 19% of everything is under the water.  And no one's kind of seeing.  That was the case of that attending.  And the same attending that was like yesterday on the beginning of the day.  It was like maybe you can see if you can prove that and make that more visible in terms of  templates and so on.  And that's what I end up talking with Thomas on last year.  It's like, what I can do.  And it was like, maybe you can send a proposal.  And I was like, OK.  I know that Python has proposals.  They have the PAPs.  And I was already kind of familiar.  I read a few of them.  PAP 8, that's about coding formats.  It's like, OK.  Thomas told me that there is Jupyter enlistment proposals.  So I started looking online.  And it's like, OK.  There's a Git repository that's from the Jupyter organization.  It's called enlistment proposals.  And it's like, reading the readme.  And it's like, yeah, that's the procedure if you want to just something.  You can copy one of your files, create one directory, open a pull request.  So that's what I decided to do.  I decided to open a pull request.  And like, can you add templates as metadata?  And this is an enlistment proposal for this pull request.  And you can see that Thomas had a comment just left to me.  So my idea was, because I want to reuse the same template over and over again  every time that they're going to export is it's supposed to be saved somewhere.  So that's why it needs to be something on the notebook format,  not just the Jupyter interface.  So that's why I end up sending the proposal.  And there was a few comments below.  And I include like an image, a screenshot, or like,  this is how I envision the idea.  You can go to the Jupyter interface.  And you can say, this is I want to set a template.  That's my template.  Go to some template that I want to use.  And later, you can just go and download that.  At the end, we had some discussions on the issue.  But I ended up being too busy to just portion and get like a kind of prototype  and explore more of the ideas.  And if you propose something, can you really not  able to take forward with lots of time?  It's kind of keep open.  People was very welcome from everyone from the Jupyter community,  sending feedbacks and so on.  So it's kind of my fault to not have too much time.  But that was what I want to share with you today.  I want to thank Spaceship Thomas for all their contributions  and pushed me to share this.  And if you have questions, I hope you're having questions.  Now, if you want to make questions later on Twitter  or anything, that's my AD and Tanya's ID.  Thank you very much to listen.  APPLAUSE  Thanks, are there any questions?  No?  What kind of...  You said you ran out of time to fully implement it.  How big of a job do you think it is to implement one of these proposals?  This proposal?  The main challenge was just like, learn how the insides of how  NB Convert works and the order that it reads files.  Because the challenge is like, if I start the name of the template  that I want to use, it's inside the notebook.  But NB Convert, he started doing something before opening the notebook.  So I was changing this part.  It's not super trivial.  You need to open the notebook.  And at that moment, you pass that.  And later you can say, OK, I have that piece of information.  And now I need to go back and change the default one.  So that was the most time consuming that I didn't have time to default too much.  Is it all written in Python?  Yeah, NB Convert is in Python.  It's fully Python.  The templates, they have a series of templates.  And those templates are in danger too.  OK, yeah.  That's your Python.  And is the Jupyter Notebook, is that fully Python?  No, Jupyter Notebook.  There's lots of JavaScript using the face.  Yeah, makes sense.  Anyone any questions before we wrap up?  OK, welcome.  Thank you.  Thank you very much.  Thank you for listening.  Enjoy.  Thank you.
Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_0_275.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_276_623.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_624_1967.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_1968_3203.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_3204_6827.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_6828_8963.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_8964_9311.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_9312_11075.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_11076_11903.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_11904_12803.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_12804_13151.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_13152_15995.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_15996_16559.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_16560_16667.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_16668_17291.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_17292_17531.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_17532_19307.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_19308_19391.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_19392_19883.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_19884_21611.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_21612_21803.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_21804_21887.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_21888_22391.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_22392_23351.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_23352_23399.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_23400_24119.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_24120_27347.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_27348_28535.png Raniere_Silva__Tania_Sanchez_Monroy_-_A_Jupyter_Enhancement_Proposal_Story_G_OFsgPhtB0_28536_32150.png