You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by zj...@apache.org on 2021/07/01 04:27:02 UTC

[zeppelin] branch master updated: [ZEPPELIN-5286]. Unable to run some tutorial notes in zeppelin docker container

This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new ad96136  [ZEPPELIN-5286]. Unable to run some tutorial notes in zeppelin docker container
ad96136 is described below

commit ad96136c3ec16750bc0ce4b0ce3a1a0e3bc50916
Author: Jeff Zhang <zj...@apache.org>
AuthorDate: Sun Jun 27 22:14:48 2021 +0800

    [ZEPPELIN-5286]. Unable to run some tutorial notes in zeppelin docker container
    
    ### What is this PR for?
    
    2 notes needs to be updated:
    * Python Tutorial/2. IPython Visualization Tutorial_2F1S9ZY8Z.zpln . Add the following 2 lines to ignore warning message. Otherwise there will be many warning message in frontend.
    ```
    import logging
    logging.getLogger("params").setLevel(logging.ERROR)
    ```
    * Python Tutorial/3. Keras Binary Classification (IMDB)_2F2AVWJ77.zpln.  Add one paragraph to install keras & tensorflow, because we didn't install in it in docker container
    * Specify number & holoviews version, otherwise ipython visualization won't work
    * Add files log4j2.properties & log4j2_docker.properties, otherwise flink interpreter log will be missing because flink use log4j2
    
    ### What type of PR is it?
    [Improvement ]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-5286
    
    ### How should this be tested?
    * Manually tested
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zj...@apache.org>
    
    Closes #4078 from zjffdu/ZEPPELIN-5286 and squashes the following commits:
    
    2c7765f197 [Jeff Zhang] remove channel pyviz
    fea92da3fa [Jeff Zhang] [ZEPPELIN-5286]. Unable to run some tutorial notes in zeppelin docker container
---
 .../1. IPython Basic_2EYDJKFFY.zpln                | 169 ++++++++----
 .... IPython Visualization Tutorial_2F1S9ZY8Z.zpln | 303 ++++++++++++---------
 ...ras Binary Classification (IMDB)_2F2AVWJ77.zpln | 207 +++++++++-----
 notebook/R Tutorial/1. R Basics_2BWJFTXKJ.zpln     | 162 ++++++-----
 notebook/R Tutorial/2. Shiny App_2EZ66TM57.zpln    |  66 +++--
 scripts/docker/zeppelin/bin/Dockerfile             |   6 +-
 .../docker/zeppelin/bin/env_python_3_with_R.yml    |  29 +-
 scripts/docker/zeppelin/bin/log4j2.properties      |  49 ++++
 .../docker/zeppelin/bin/log4j2_docker.properties   |  49 ++++
 9 files changed, 697 insertions(+), 343 deletions(-)

diff --git a/notebook/Python Tutorial/1. IPython Basic_2EYDJKFFY.zpln b/notebook/Python Tutorial/1. IPython Basic_2EYDJKFFY.zpln
index 83ee583..cbf4669 100644
--- a/notebook/Python Tutorial/1. IPython Basic_2EYDJKFFY.zpln	
+++ b/notebook/Python Tutorial/1. IPython Basic_2EYDJKFFY.zpln	
@@ -4,16 +4,18 @@
       "title": "Introduction",
       "text": "%md\n\nIPython is more powerful than the default python interpreter with extra functionality. You can use IPython with Python2 or Python3 which depends on which python you set `zeppelin.python`. This tutorial will teach you how to use IPython and what kind of fancy feature IPython provides for you. ",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:16:03.242",
+      "dateUpdated": "2021-06-15 03:29:36.362",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
-          "language": "text",
-          "editOnDblClick": false,
-          "completionKey": "TAB"
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB",
+          "completionSupport": false
         },
         "colWidth": 12.0,
-        "editorMode": "ace/mode/text",
+        "editorMode": "ace/mode/markdown",
         "fontSize": 9.0,
         "editorHide": true,
         "results": {},
@@ -34,19 +36,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128399_1705920905",
       "id": "20180118-105449_1130638270",
       "dateCreated": "2020-02-05 14:12:08.399",
-      "dateStarted": "2020-02-05 14:12:44.213",
-      "dateFinished": "2020-02-05 14:12:45.639",
+      "dateStarted": "2021-06-15 03:29:03.431",
+      "dateFinished": "2021-06-15 03:29:05.931",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Prerequisite\n\nFirst you need to use Zeppelin 0.8.0 or afterwards. You need to install the following 2 packages to make IPython work in Zeppelin.\n\n* jupyter `pip install jupyter`\n* grpcio `pip install grpcio`\n* protobuf `pip install protobuf`\n\nIf you have anaconda installed, then you just need to install `grpcio` and `protobuf` as Jupyter is already included in anaconda.\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:15:41.332",
+      "dateUpdated": "2021-06-15 03:29:06.031",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -75,19 +79,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128401_-91751836",
       "id": "20180118-105734_546968647",
       "dateCreated": "2020-02-05 14:12:08.401",
-      "dateStarted": "2020-03-11 14:15:39.160",
-      "dateFinished": "2020-03-11 14:15:39.805",
+      "dateStarted": "2021-06-15 03:29:06.037",
+      "dateFinished": "2021-06-15 03:29:06.059",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# How to use IPython\n\nAfter you get the above prerequisite installed, you can use IPython in Zeppelin via `%python.ipython` or `%spark.ipyspark`. If you want to make IPython as your default interpreter via `%python` or `%spark.pyspark`, then you can configure `zeppelin.python.useIPython` as `true` in python\u0027s interpreter setting or `zeppelin.pyspark.useIPython` as `true` in spark\u0027s interpreter setting. So that Zeppelin will use IPython as the default pyt [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:16:19.699",
+      "dateUpdated": "2021-06-15 03:29:06.135",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -116,19 +122,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128402_-1251111399",
       "id": "20180118-112614_44484642",
       "dateCreated": "2020-02-05 14:12:08.402",
-      "dateStarted": "2020-03-11 14:16:17.945",
-      "dateFinished": "2020-03-11 14:16:17.968",
+      "dateStarted": "2021-06-15 03:29:06.138",
+      "dateFinished": "2021-06-15 03:29:06.148",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# IPython Help\n\nThere\u0027re 2 approaches to for getting python help in IPython. \n* Use `?` after the python object,\n* Use `help` function",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.402",
+      "dateUpdated": "2021-06-15 03:29:06.238",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -152,22 +160,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython Help\u003c/h1\u003e\n\u003cp\u003eThere\u0026rsquo;re 2 approaches to for getting python help in IPython.\u003cbr/\u003e* Use \u003ccode\u003e?\u003c/code\u003e after the python object,\u003cbr/\u003e* Use \u003ccode\u003ehelp\u003c/code\u003e function\u003c/p\u003e\n\u003c/div\u003e"
+            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython Help\u003c/h1\u003e\n\u003cp\u003eThere\u0026rsquo;re 2 approaches to for getting python help in IPython.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003e?\u003c/code\u003e after the python object,\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ehelp\u003c/code\u003e function\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c/div\u003e"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128402_-1077704099",
       "id": "20180118-111958_1561079624",
       "dateCreated": "2020-02-05 14:12:08.402",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:06.243",
+      "dateFinished": "2021-06-15 03:29:06.257",
+      "status": "FINISHED"
     },
     {
       "title": "Get Python Help (1)",
       "text": "%python.ipython\n\nimport sys\n\nsys?",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:17:03.133",
+      "dateUpdated": "2021-06-15 03:29:06.341",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -191,22 +203,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "\u001b[0;31mType:\u001b[0m        module\n\u001b[0;31mString form:\u001b[0m \u003cmodule \u0027sys\u0027 (built-in)\u003e\n\u001b[0;31mDocstring:\u001b[0m  \nThis module provides access to some objects used or maintained by the\ninterpreter and to functions that interact strongly with the interpreter.\n\nDynamic objects:\n\nargv -- command line arguments; argv[0] is the script pathname if known\npath -- module search path; path[0] is the script directory, else \u0027 [...]
+            "data": "\u001b[0;31mType:\u001b[0m        module\n\u001b[0;31mString form:\u001b[0m \u003cmodule \u0027sys\u0027 (built-in)\u003e\n\u001b[0;31mDocstring:\u001b[0m  \nThis module provides access to some objects used or maintained by the\ninterpreter and to functions that interact strongly with the interpreter.\n\nDynamic objects:\n\nargv -- command line arguments; argv[0] is the script pathname if known\npath -- module search path; path[0] is the script directory, else \u0027 [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128402_-688763859",
       "id": "20180118-112246_474555672",
       "dateCreated": "2020-02-05 14:12:08.403",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:06.346",
+      "dateFinished": "2021-06-15 03:29:11.522",
+      "status": "FINISHED"
     },
     {
       "title": "Get Python Help (2)",
       "text": "%python.ipython\n\nimport sys\n\nhelp(sys)",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:17:10.004",
+      "dateUpdated": "2021-06-15 03:29:11.549",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -230,22 +246,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "Help on built-in module sys:\n\nNAME\n    sys\n\nMODULE REFERENCE\n    https://docs.python.org/3.6/library/sys\n    \n    The following documentation is automatically generated from the Python\n    source files.  It may be incomplete, incorrect or include features that\n    are considered implementation detail and may vary between Python\n    implementations.  When in doubt, consult the module reference at the\n    location listed above.\n\nDESCRIPTION\n    This modu [...]
+            "data": "Help on built-in module sys:\n\nNAME\n    sys\n\nMODULE REFERENCE\n    https://docs.python.org/3.8/library/sys\n    \n    The following documentation is automatically generated from the Python\n    source files.  It may be incomplete, incorrect or include features that\n    are considered implementation detail and may vary between Python\n    implementations.  When in doubt, consult the module reference at the\n    location listed above.\n\nDESCRIPTION\n    This modu [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128403_-2022546282",
       "id": "20180118-112905_1540839273",
       "dateCreated": "2020-02-05 14:12:08.403",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:11.552",
+      "dateFinished": "2021-06-15 03:29:11.659",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# IPython magic function\n\nAll the IPython magic functions are avalible in Zeppelin, here\u0027s one example of `%timeit`, for the complete IPython magic functions, you can check the [link](http://ipython.readthedocs.io/en/stable/interactive/magics.html) here.\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.404",
+      "dateUpdated": "2021-06-15 03:29:11.752",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -269,22 +289,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython magic function\u003c/h1\u003e\n\u003cp\u003eAll the IPython magic functions are avalible in Zeppelin, here\u0026rsquo;s one example of \u003ccode\u003e%timeit\u003c/code\u003e, for the complete IPython magic functions, you can check the \u003ca href\u003d\"http://ipython.readthedocs.io/en/stable/interactive/magics.html\"\u003elink\u003c/a\u003e here.\u003c/p\u003e\n\u003c/div\u003e"
+            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython magic function\u003c/h1\u003e\n\u003cp\u003eAll the IPython magic functions are avalible in Zeppelin, here\u0026rsquo;s one example of \u003ccode\u003e%timeit\u003c/code\u003e, for the complete IPython magic functions, you can check the \u003ca href\u003d\"http://ipython.readthedocs.io/en/stable/interactive/magics.html\"\u003elink\u003c/a\u003e here.\u003c/p\u003e\n\n\u003c/div\u003e"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128404_-1445116404",
       "id": "20180118-112924_1945597351",
       "dateCreated": "2020-02-05 14:12:08.404",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:11.757",
+      "dateFinished": "2021-06-15 03:29:11.775",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n\n%timeit range(1000)",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:17:30.821",
+      "dateUpdated": "2021-06-15 03:29:11.856",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -308,22 +332,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "242 ns ± 7.71 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n"
+            "data": "161 ns ± 8.17 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)\n"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128405_-1093651105",
       "id": "20180118-113325_2018867273",
       "dateCreated": "2020-02-05 14:12:08.405",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:11.860",
+      "dateFinished": "2021-06-15 03:29:25.005",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Tab completion\n\nTab completion, especially for attributes, is a convenient way to explore the structure of any object you’re dealing with. Simply type `object_name.\u003cTAB\u003e` to view the object’s attributes. See the following screenshot of how tab completion works in IPython Interpreter.\n![alt text](https://user-images.githubusercontent.com/164491/34858941-3f28105a-f78e-11e7-8341-2fbfd306ba5b.gif \"Logo Title Text 1\")\n\n\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:17:56.326",
+      "dateUpdated": "2021-06-15 03:29:25.069",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -352,19 +380,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128405_-1429375020",
       "id": "20180118-113333_768199475",
       "dateCreated": "2020-02-05 14:12:08.405",
-      "dateStarted": "2020-03-11 14:17:54.626",
-      "dateFinished": "2020-03-11 14:17:54.749",
+      "dateStarted": "2021-06-15 03:29:25.072",
+      "dateFinished": "2021-06-15 03:29:25.086",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n\n# Visualization\n\nOne big advangae of notebook is that you can inline visualize with your code in notebook. There\u0027re many awesome visualization libraries in Python, you can use most of them in Zeppelin.\nRefer this `IPython Visualization Tutorial` in Zeppelin for how to use Python visualization libraries in Apache Zeppelin.\n\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:19:38.401",
+      "dateUpdated": "2021-06-15 03:29:25.172",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -393,19 +423,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128405_-1181474830",
       "id": "20180118-114439_1191932175",
       "dateCreated": "2020-02-05 14:12:08.405",
-      "dateStarted": "2020-03-11 14:19:36.246",
-      "dateFinished": "2020-03-11 14:19:36.254",
+      "dateStarted": "2021-06-15 03:29:25.177",
+      "dateFinished": "2021-06-15 03:29:25.186",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Use ZeppelinContext \n\n`ZeppelinContext` is a utlity class which provide the following features\n\n* Dynamic forms\n* Show DataFrame via builtin visualization\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.405",
+      "dateUpdated": "2021-06-15 03:29:25.275",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -429,27 +461,32 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eUse ZeppelinContext\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eZeppelinContext\u003c/code\u003e is a utlity class which provide the following features\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003eDynamic forms\u003c/li\u003e\n  \u003cli\u003eShow DataFrame via builtin visualization\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e"
+            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eUse ZeppelinContext\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eZeppelinContext\u003c/code\u003e is a utlity class which provide the following features\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDynamic forms\u003c/li\u003e\n\u003cli\u003eShow DataFrame via builtin visualization\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c/div\u003e"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128405_440264383",
       "id": "20180118-114841_1750411156",
       "dateCreated": "2020-02-05 14:12:08.405",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:25.278",
+      "dateFinished": "2021-06-15 03:29:25.285",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n\nz.input(name\u003d\u0027my_name\u0027, defaultValue\u003d\u0027hello\u0027)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.405",
+      "dateUpdated": "2021-06-15 03:29:25.378",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
           "editOnDblClick": false,
-          "completionKey": "TAB"
+          "completionKey": "TAB",
+          "completionSupport": true
         },
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -458,7 +495,9 @@
         "enabled": true
       },
       "settings": {
-        "params": {},
+        "params": {
+          "my_name": "hello"
+        },
         "forms": {
           "my_name": {
             "type": "TextBox",
@@ -479,22 +518,27 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128405_746444677",
       "id": "20180118-115612_471385279",
       "dateCreated": "2020-02-05 14:12:08.405",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:25.381",
+      "dateFinished": "2021-06-15 03:29:25.442",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n\nimport pandas as pd\ndf \u003d pd.DataFrame({\u0027name\u0027:[\u0027a\u0027,\u0027b\u0027,\u0027c\u0027], \u0027count\u0027:[12,24,18]})\nz.show(df)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.406",
+      "dateUpdated": "2021-06-15 03:29:25.481",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
           "editOnDblClick": false,
-          "completionKey": "TAB"
+          "completionKey": "TAB",
+          "completionSupport": true
         },
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -601,36 +645,59 @@
         "msg": [
           {
             "type": "TABLE",
-            "data": "count\tname\n12\ta\n24\tb\n18\tc\n"
+            "data": "name\tcount\na\t12\nb\t24\nc\t18\n"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128406_-1787806183",
       "id": "20180118-122136_1299905608",
       "dateCreated": "2020-02-05 14:12:08.406",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:25.485",
+      "dateFinished": "2021-06-15 03:29:25.895",
+      "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 14:12:08.406",
-      "config": {},
+      "dateUpdated": "2021-06-15 03:29:25.985",
+      "progress": 0,
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
       "settings": {
         "params": {},
         "forms": {}
       },
+      "results": {
+        "code": "SUCCESS",
+        "msg": []
+      },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580883128406_130649699",
       "id": "20180118-122149_878709973",
       "dateCreated": "2020-02-05 14:12:08.406",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:29:25.988",
+      "dateFinished": "2021-06-15 03:29:26.044",
+      "status": "FINISHED"
     }
   ],
-  "name": "IPython Basic",
+  "name": "1. IPython Basic",
   "id": "2EYDJKFFY",
   "defaultInterpreterGroup": "spark",
   "version": "0.9.0-SNAPSHOT",
@@ -640,5 +707,7 @@
   "config": {
     "isZeppelinNotebookCronEnable": false
   },
-  "info": {}
+  "info": {
+    "isRunning": false
+  }
 }
\ No newline at end of file
diff --git a/notebook/Python Tutorial/2. IPython Visualization Tutorial_2F1S9ZY8Z.zpln b/notebook/Python Tutorial/2. IPython Visualization Tutorial_2F1S9ZY8Z.zpln
index 4689e69..b5180e6 100644
--- a/notebook/Python Tutorial/2. IPython Visualization Tutorial_2F1S9ZY8Z.zpln	
+++ b/notebook/Python Tutorial/2. IPython Visualization Tutorial_2F1S9ZY8Z.zpln	
@@ -4,7 +4,8 @@
       "title": "Overview",
       "text": "%md\n\n\nThere\u0027re many visualization libraries availabel in python world. Visualization is tremendous useful in notebook enviroment, most of them could be used in Jupyter Notebook. And most of them can also be used in Apache Zeppelin Notebook, but maybe a little difference for some libraries. This tutorial will teach you how to use these popular visualization libraries in Apache Zeppelin. To be noted, you need to use IPython interpreter to make these libraries work in [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:13.727",
+      "dateUpdated": "2021-06-15 03:29:57.450",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -34,19 +35,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482808_420748092",
       "id": "20180117-220147_1889980489",
       "dateCreated": "2020-02-05 14:34:42.808",
-      "dateStarted": "2020-03-11 14:24:13.753",
-      "dateFinished": "2020-03-11 14:24:13.799",
+      "dateStarted": "2021-06-15 03:29:57.483",
+      "dateFinished": "2021-06-15 03:29:57.496",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Matplotlib\n\nMatplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. The usage of Matplotlib in Zeppelin is the same as Jupyter Notebook. The key is to put `%matplotlib inline` before using Matplotlig. Below is one simple example, for more usage of Matplotlib, you can refer this [link](https://matplotlib.org/).",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:13.858",
+      "dateUpdated": "2021-06-15 03:29:57.583",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -75,19 +78,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482810_-1147533206",
       "id": "20180118-090246_2126121401",
       "dateCreated": "2020-02-05 14:34:42.810",
-      "dateStarted": "2020-03-11 14:24:13.866",
-      "dateFinished": "2020-03-11 14:24:13.879",
+      "dateStarted": "2021-06-15 03:29:57.630",
+      "dateFinished": "2021-06-15 03:29:57.641",
       "status": "FINISHED"
     },
     {
       "title": "Matplotlib Example",
       "text": "%python.ipython\n\n%matplotlib inline\n\nimport matplotlib.pyplot as plt\n\nplt.plot([1,2,3,4])\nplt.ylabel(\u0027some numbers\u0027)\nplt.show()\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:13.971",
+      "dateUpdated": "2021-06-15 03:29:57.728",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -111,24 +116,26 @@
         "msg": [
           {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xV9f3H8dcHCHvvMMLeBBXDcNQ9UFFE0Vpb60ZbWzt+CogDFevusLWKWLVordUS9nDgnihQyWCGJXtKwgpZn98f99rGGMgFc3Nyc9/PxyMP7r3ne+/9fD3xvnPG/Rxzd0REJH5VC7oAEREJloJARCTOKQhEROKcgkBEJM4pCERE4lyNoAs4Us2bN/eOHTsGXYaISExZuHDhDndvUdqymAuCjh07smDBgqDLEBGJKWa27lDLtGtIRCTOKQhEROKcgkBEJM4pCERE4py [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmEUlEQVR4nO3dd3xV9f3H8dcHCHsbRhhhb4KIYTjqHoAo4mitra1aRa3+OhUQtahYd4etVcSqldbaWsKS4d5boJLBDEv2lIQVsj6/P+7194sxkBvIzcnNfT8fjzy499zvvfdzPJg355zv+Rxzd0REJH7VCroAEREJloJARCTOKQhEROKcgkBEJM4pCERE4lydoAuoqMTERO/cuXPQZYiIxJRFixbtdPdWZb0Wc0HQuXNnFi5cGHQZIiIxxczWH+41HRoSEYlzCgIRkTinIBARiXMKAhGROKcgEBGJc1EPAjOrbWb [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482810_-1322704841",
       "id": "20180117-220535_590781730",
       "dateCreated": "2020-02-05 14:34:42.810",
-      "dateStarted": "2020-03-11 14:24:13.981",
-      "dateFinished": "2020-03-11 14:24:20.570",
+      "dateStarted": "2021-06-15 03:29:57.751",
+      "dateFinished": "2021-06-15 03:29:58.567",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Pandas\n\nPandas provide high level api for visualization on DataFrame. It uses Matplotlib for its visualization underlying, so the usage is the same as Matplotlib. ",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:20.572",
+      "dateUpdated": "2021-06-15 03:29:58.651",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -157,19 +164,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482811_125744258",
       "id": "20180118-090527_1578553673",
       "dateCreated": "2020-02-05 14:34:42.811",
-      "dateStarted": "2020-03-11 14:24:20.589",
-      "dateFinished": "2020-03-11 14:24:20.595",
+      "dateStarted": "2021-06-15 03:29:58.686",
+      "dateFinished": "2021-06-15 03:29:58.692",
       "status": "FINISHED"
     },
     {
       "title": "Pandas Example",
       "text": "%python.ipython\n\n%matplotlib inline\n\nimport pandas as pd\nimport numpy as np\n\nts \u003d pd.Series(np.random.randn(1000), index\u003dpd.date_range(\u00271/1/2000\u0027, periods\u003d1000))\nts \u003d ts.cumsum()\nts.plot()",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:20.690",
+      "dateUpdated": "2021-06-15 03:29:58.787",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -193,28 +202,30 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "\u003cmatplotlib.axes._subplots.AxesSubplot at 0x11cdbfa20\u003e\n"
+            "data": "\u003cAxesSubplot:\u003e\n"
           },
           {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEECAYAAADNv0QiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2dd3gc1dX/v2e7Vl2W3HvBYBswtmmmGgw2EDCEJC8plCTvS0ggjfzeBF5SSKiBQBICCTEhpJEQEkISOthUExuwjXHBvWG5SVaXVtvv74+ZO3t3d7Zpq1bn8zx6NDszOzOrWX3n3HNPISEEGIZhmPLEUuwLYBiGYfIHizzDMEwZwyLPMAxTxrDIMwzDlDEs8gzDMGUMizzDMEwZYyv2Bag0NjaKiRMnFvsyGIZhBhVr1qw5IoRoMttWUiI/ceJErF69utiXwTAMM6ggor2 [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEECAYAAADNv0QiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/BElEQVR4nO3deXxcVd348c/JTGayb03SJmlL971lC2VfKvuiVfDBqgj6qIg/VEQRRcAHFZDlUR9xQYrijiwiuxQoW1laSkv30iXd0zRN2uzbJJOc3x9z782dyUy2WTP5vl+vvDpz752ZO7npd86c8z3fo7TWCCGESE4p8T4BIYQQ0SNBXgghkpgEeSGESGIS5IUQIolJkBdCiCQmQV4IIZKYM9ovoJS6CPgV4AD+oLW+J9SxhYWFetKkSdE+JSGESCpr1649orUuCrYvqkFeKeUAfgucD1QCHyilntNabw12/KR [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482811_-1394723261",
       "id": "20180117-220828_1751137554",
       "dateCreated": "2020-02-05 14:34:42.811",
-      "dateStarted": "2020-03-11 14:24:20.706",
-      "dateFinished": "2020-03-11 14:24:21.587",
+      "dateStarted": "2021-06-15 03:29:58.807",
+      "dateFinished": "2021-06-15 03:29:59.175",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Seaborn\n\nSeaborn is a Python visualization library based on matplotlib. It provides a high-level interface for drawing attractive statistical graphics. Its usage in Zeppelin is the same as in Jupyter. For seaborn usage please refer this [link](https://seaborn.pydata.org/)\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:21.643",
+      "dateUpdated": "2021-06-15 03:29:59.207",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -243,19 +254,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482811_1702400931",
       "id": "20180118-091931_1235694337",
       "dateCreated": "2020-02-05 14:34:42.811",
-      "dateStarted": "2020-03-11 14:24:21.651",
-      "dateFinished": "2020-03-11 14:24:21.668",
+      "dateStarted": "2021-06-15 03:29:59.229",
+      "dateFinished": "2021-06-15 03:29:59.241",
       "status": "FINISHED"
     },
     {
       "title": "Seaborn Example",
       "text": "%python.ipython\n\n%matplotlib inline\n\nimport seaborn as sns\nsns.set(style\u003d\"ticks\")\n\n# Load the example dataset for Anscombe\u0027s quartet\ndf \u003d sns.load_dataset(\"anscombe\")\n\n# Show the results of a linear regression within each dataset\nsns.lmplot(x\u003d\"x\", y\u003d\"y\", col\u003d\"dataset\", hue\u003d\"dataset\", data\u003ddf,\n           col_wrap\u003d2, ci\u003dNone, palette\u003d\"muted\", size\u003d4,\n           scatter_kws\u003d{\"s\": 50, [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:21.752",
+      "dateUpdated": "2021-06-15 03:29:59.329",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -279,28 +292,30 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "/Users/jzhang/anaconda3/lib/python3.7/site-packages/seaborn/regression.py:546: UserWarning: The `size` paramter has been renamed to `height`; please update your code.\n  warnings.warn(msg, UserWarning)\n\u003cseaborn.axisgrid.FacetGrid at 0x1a1f769e10\u003e\n"
+            "data": "/opt/conda/envs/python_3_with_R/lib/python3.8/site-packages/seaborn/regression.py:580: UserWarning: The `size` parameter has been renamed to `height`; please update your code.\n  warnings.warn(msg, UserWarning)\n\u003cseaborn.axisgrid.FacetGrid at 0x7fa6da179880\u003e\n"
           },
           {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAI0CAYAAAAKi7MDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdaWBU5d338e+ZySxJJiHsuxAXiqi4y02VoKgVEEUEcQGEWov19qlb3XAhgKVa61ZF24LegqAt4IZKRUGqKFKsVlnEDU3YkgAhhGQyyazX8yISRMKemTOT/D5vCGfOnPOf1F785jrXYhljDCIiIiIpzGF3ASIiIiKHS4FGREREUp4CjYiIiKQ8BRoRERFJeQo0IiIikvIUaERERCTlKdDIIVuwYAGjRo3a73lTpkxh0aJFcanhmmuuoays7LCuMWrUKBYsWNBAFYnITo2 [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAJFCAYAAADTfoPBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABhIElEQVR4nO3deXhTdd7//2eaNmkL1lLoCmVRQUFEkE0ZFgUBFWQTV0RUGHW8FZfx5+h8HR0Rx+GeuQGVYVxGBRVRkBHZBBVUcANcEVFBRSh0A9rSNUmTnN8fKaWlKRRoc7K8Htd1X5ecnCZvQu4zr75yzudYDMMwEBEREYlwUWYPICIiIhIMFIpEREREUCgSERERARSKRERERACFIhERERFAoUhEREQEUCiSRvLAAw8wa9Yss8cQkRCjY4cEE4UiCbiJEyeyePHikH2djRs3MnDgwEZ/XhE5unA7dgTq7yMNp1A [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482811_576440533",
       "id": "20180117-220708_660528060",
       "dateCreated": "2020-02-05 14:34:42.811",
-      "dateStarted": "2020-03-11 14:24:21.762",
-      "dateFinished": "2020-03-11 14:24:25.565",
+      "dateStarted": "2021-06-15 03:29:59.363",
+      "dateFinished": "2021-06-15 03:30:01.537",
       "status": "FINISHED"
     },
     {
       "title": "Plotnine",
       "text": "%md\n\n# Plotnine\n\nplotnine is an implementation of a grammar of graphics in Python, it is based on ggplot2. The grammar allows users to compose plots by explicitly mapping data to the visual objects that make up the plot.\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:25.600",
+      "dateUpdated": "2021-06-15 03:30:01.564",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -330,19 +345,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885213779_377546255",
       "id": "paragraph_1580885213779_377546255",
       "dateCreated": "2020-02-05 14:46:53.782",
-      "dateStarted": "2020-03-11 14:24:25.612",
-      "dateFinished": "2020-03-11 14:24:25.677",
+      "dateStarted": "2021-06-15 03:30:01.588",
+      "dateFinished": "2021-06-15 03:30:01.598",
       "status": "FINISHED"
     },
     {
       "title": "Plotnine Example (1)",
       "text": "%python.ipython\n\n%matplotlib inline  \n\nfrom plotnine import *\nfrom plotnine.data import mtcars\n\n(ggplot(mtcars, aes(\u0027wt\u0027, \u0027mpg\u0027))\n + geom_point())\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:25.719",
+      "dateUpdated": "2021-06-15 03:30:01.688",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -365,33 +382,31 @@
         "code": "SUCCESS",
         "msg": [
           {
-            "type": "TEXT",
-            "data": "/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/scales/scale.py:93: MatplotlibDeprecationWarning: \nThe iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n  if cbook.iterable(self.breaks) and cbook.iterable(self.labels):\n/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/utils.py:553: MatplotlibDeprecationWarning: \nThe iterable function was deprecated in Matplotlib 3.1 and will be removed  [...]
-          },
-          {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAG0CAYAAAD6ncdZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXwUhf3/8ffslYSQYDAJASFcAgJSBEQOlYBUigeHoEC5pCoFLD5s/dUDH/VsqEdpBUEkxFr5VgFtoVap1rbEcitgW29UhADKGUxMSAJ7ze8PHmy7BBoIm8zO7Ov5ePh4uJPJ7Hv5ZLPvzMzOGqZpmgIAALAJl9UBAAAAzgblBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2IrH6gCStGDBAm3dulXV1dVKS0vTkCFDNGb [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAG0CAYAAAD6ncdZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2v0lEQVR4nO3deXxUhf39/3NnDQkJBENIEAOKIEtRgVIW2Vw+LB8lgAtaBLVWi3xqW/ptayUVBQS1SC2URcCqUAXUVoqVqrUFy9qCoiIKFBARWkIhNGlWklnu7w9+TDsGNA4zuXPvvJ6Ph3/cm8vNie9JcnK3MUzTNAUAAGATLqsDAAAAfBmUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCseqwNI0vz58/XOO++opqZGmZmZGjJkiMaMGSNJuuuuu1RWViaX61T [...]
           },
           {
             "type": "TEXT",
-            "data": "\u003cggplot: (7551962821)\u003e"
+            "data": "\u003cggplot: (8772142395880)\u003e"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885221038_719317105",
       "id": "paragraph_1580885221038_719317105",
       "dateCreated": "2020-02-05 14:47:01.038",
-      "dateStarted": "2020-03-11 14:24:25.796",
-      "dateFinished": "2020-03-11 14:24:27.043",
+      "dateStarted": "2021-06-15 03:30:01.714",
+      "dateFinished": "2021-06-15 03:30:02.984",
       "status": "FINISHED"
     },
     {
       "title": "Plotnine Example (2)",
       "text": "%python.ipython\n\n(ggplot(mtcars, aes(\u0027wt\u0027, \u0027mpg\u0027, color\u003d\u0027factor(gear)\u0027))\n + geom_point()\n + stat_smooth(method\u003d\u0027lm\u0027)\n + facet_wrap(\u0027~gear\u0027))",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:27.139",
+      "dateUpdated": "2021-06-15 03:30:03.023",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -414,42 +429,41 @@
         "code": "SUCCESS",
         "msg": [
           {
-            "type": "TEXT",
-            "data": "/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/scales/scale.py:93: MatplotlibDeprecationWarning: \nThe iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n  if cbook.iterable(self.breaks) and cbook.iterable(self.labels):\n/Users/jzhang/anaconda3/lib/python3.7/site-packages/numpy/core/fromnumeric.py:2389: FutureWarning: Method .ptp is deprecated and will be removed in a future version. Use numpy.ptp in [...]
-          },
-          {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHCCAYAAAD1muGYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXxU9b0//tc5Z/YlOxDWBCEJhDVQrisVxaLVFsT9W5XSRbQ/be+9pa21rdV6odqrrXXX2muxVbG1UuteFTcUwbJvWQg7SYAkZJv1zJxzfn8MiRlmn0wyk8nr6YM/MnOWd8Yzk/d8zvvz/giapmkgIiIiIsoCYroDICIiIiJKFSa3RERERJQ1mNwSERERUdZgcktEREREWYPJLRERERFlDSa3RERERJQ1mNwSERERUdZgcktEREREWYPJLRERERFlDV26A+gPdXV16Q6 [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHCCAYAAAD1muGYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB49ElEQVR4nO3deXxb1Zk38N+59+perd5jx1mdkMRZSIgTwhLCGvZAFgiUAQqUlwJ96bSdYTpM6QJloDBvmem0LIW2Q+m0LIUSdijQACEQlgayJ7azb3bi3da+3fv+odiJo8WSLFuy/PvOJ5+OpXuvHotj6dHRc54jDMMwQERERESUB6RsB0BERERElClMbomIiIgobzC5JSIiIqK8weSWiIiIiPIGk1siIiIiyhtMbomIiIgobzC5JSIiIqK8weSWiIiIiPIGk1siIiIiyhtKtgMYCPX19dkOgYa5KVOmxL2P45O [...]
           },
           {
             "type": "TEXT",
-            "data": "\u003cggplot: (7554154900)\u003e"
+            "data": "\u003cggplot: (8772142159562)\u003e"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885791251_758930573",
       "id": "paragraph_1580885791251_758930573",
       "dateCreated": "2020-02-05 14:56:31.251",
-      "dateStarted": "2020-03-11 14:24:27.154",
-      "dateFinished": "2020-03-11 14:24:28.290",
+      "dateStarted": "2021-06-15 03:30:03.058",
+      "dateFinished": "2021-06-15 03:30:03.833",
       "status": "FINISHED"
     },
     {
       "title": "",
-      "text": "%md\n\n# bokeh\n\n[Bokeh](https://bokeh.pydata.org/en/latest/) is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications [...]
+      "text": "%md\n\n# bokeh\n\n[Bokeh](https://bokeh.pydata.org/en/latest/) is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications.\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:28.395",
+      "dateUpdated": "2021-06-15 03:30:03.858",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
-          "language": "text",
-          "editOnDblClick": false,
-          "completionKey": "TAB"
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB",
+          "completionSupport": false
         },
         "colWidth": 12.0,
-        "editorMode": "ace/mode/text",
+        "editorMode": "ace/mode/markdown",
         "fontSize": 9.0,
         "editorHide": true,
         "results": {},
@@ -465,24 +479,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ebokeh\u003c/h1\u003e\n\u003cp\u003e\u003ca href\u003d\"https://bokeh.pydata.org/en/latest/\"\u003eBokeh\u003c/a\u003e is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming dataset [...]
+            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ebokeh\u003c/h1\u003e\n\u003cp\u003e\u003ca href\u003d\"https://bokeh.pydata.org/en/latest/\"\u003eBokeh\u003c/a\u003e is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming dataset [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482814_1997313050",
       "id": "20180118-092227_1380687854",
       "dateCreated": "2020-02-05 14:34:42.814",
-      "dateStarted": "2020-03-11 14:24:28.408",
-      "dateFinished": "2020-03-11 14:24:28.420",
+      "dateStarted": "2021-06-15 03:30:03.886",
+      "dateFinished": "2021-06-15 03:30:03.892",
       "status": "FINISHED"
     },
     {
       "title": "Bokeh Example (1)",
-      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, show\nfrom bokeh.plotting import figure\nimport bkzep\n\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n\nfig \u003d figure()\nfig.line([1,2], [3,4])\nshow(fig)\n\n",
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, show\nfrom bokeh.plotting import figure\n\noutput_notebook()\n\nfig \u003d figure()\nfig.line([1,2], [3,4])\nshow(fig)\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:37.775",
+      "dateUpdated": "2021-06-15 03:30:03.985",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -506,36 +522,38 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.pydata.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"2782\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n\n"
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1002\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) { [...]
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
           },
           {
             "type": "HTML",
-            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"fd18080a-e159-4443-9954-641d529816e6\" data-root-id\u003d\"2783\"\u003e\u003c/div\u003e\n\n"
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"5aebd7c3-b20b-40be-9ee5-a444d783f68d\" data-root-id\u003d\"1003\"\u003e\u003c/div\u003e\n\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"e625caa8-f3cc-4bf7-a0af-6387d379314f\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2792\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"2796\",\"type\":\"Grid\"},{\"id\":\"2801\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"2797\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"2818\",\"type\":\"GlyphRenderer\"}], [...]
+            "data": "\u003cscript\u003e (function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"585798c5-3da4-4198-949f-497992f6846a\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1037\"}],\"title\":{\"id\":\"1039\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482814_278965699",
       "id": "20180118-092433_377794298",
       "dateCreated": "2020-02-05 14:34:42.814",
-      "dateStarted": "2020-03-11 14:24:37.818",
-      "dateFinished": "2020-03-11 14:24:37.938",
+      "dateStarted": "2021-06-15 03:30:04.017",
+      "dateFinished": "2021-06-15 03:30:04.434",
       "status": "FINISHED"
     },
     {
       "title": "Bokeh Example (2)",
       "text": "%python.ipython\n\nfrom bokeh.server.server import Server\nfrom bokeh.application import Application\nfrom bokeh.application.handlers.function import FunctionHandler\nfrom bokeh.plotting import figure, ColumnDataSource\n\ndef make_document(doc):\n    fig \u003d figure(title\u003d\u0027Line plot!\u0027, sizing_mode\u003d\u0027scale_width\u0027)\n    fig.line(x\u003d[1, 2, 3], y\u003d[1, 4, 9])\n\n    doc.title \u003d \"Hello, world!\"\n    doc.add_root(fig)\n\n# Set up the  [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:29.037",
+      "dateUpdated": "2021-06-15 03:30:04.517",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -559,24 +577,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv class\u003d\u0027bokeh_class\u0027 id\u003d\u0027da7988bea8f647e9b42543d168699099\u0027\u003e\n\u003cscript src\u003d\"http://localhost:60688/autoload.js?bokeh-autoload-element\u003d1156\u0026bokeh-absolute-url\u003dhttp://localhost:60688\" id\u003d\"1156\"\u003e\u003c/script\u003e\u003c/div\u003e\n"
+            "data": "\n\u003cscript id\u003d\"1163\"\u003e\n  var xhr \u003d new XMLHttpRequest()\n  xhr.responseType \u003d \u0027blob\u0027;\n  xhr.open(\u0027GET\u0027, \"http://localhost:34335/autoload.js?bokeh-autoload-element\u003d1163\u0026bokeh-absolute-url\u003dhttp://localhost:34335\u0026resources\u003dnone\", true);\n  \n  xhr.onload \u003d function (event) {\n    var script \u003d document.createElement(\u0027script\u0027),\n    src \u003d URL.createObjectURL(event.target.res [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580886029142_1541635661",
       "id": "paragraph_1580886029142_1541635661",
       "dateCreated": "2020-02-05 15:00:29.143",
-      "dateStarted": "2020-03-11 14:24:29.046",
-      "dateFinished": "2020-03-11 14:24:29.162",
+      "dateStarted": "2021-06-15 03:30:04.539",
+      "dateFinished": "2021-06-15 03:30:04.656",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%md\n\n# Holoviews\n\nHoloViews is an open-source Python library designed to make data analysis and visualization seamless and simple. With HoloViews, you can usually express what you want to do in very few lines of code, letting you focus on what you are trying to explore and convey, not on the process of plotting. Compared to bokeh, HoloViews is a high level visualization library. Refer this [link](http://holoviews.org/) for more usage tutorial of HoloViews.\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:29.253",
+      "dateUpdated": "2021-06-15 03:30:04.739",
+      "progress": 0,
       "config": {
         "tableHide": false,
         "editorSetting": {
@@ -605,19 +625,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482815_870528203",
       "id": "20180120-131737_1287341499",
       "dateCreated": "2020-02-05 14:34:42.815",
-      "dateStarted": "2020-03-11 14:24:29.266",
-      "dateFinished": "2020-03-11 14:24:29.273",
+      "dateStarted": "2021-06-15 03:30:04.760",
+      "dateFinished": "2021-06-15 03:30:04.766",
       "status": "FINISHED"
     },
     {
       "title": "Holoviews example",
-      "text": "%python.ipython\n\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension(\u0027bokeh\u0027)\n\nfrom bokeh.plotting import figure\nfrom bokeh.io import show,output_notebook\nimport bkzep\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n",
+      "text": "%python.ipython\n\nimport logging\nlogging.getLogger(\"params\").setLevel(logging.ERROR)\n\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension(\u0027bokeh\u0027)\n\nfrom bokeh.plotting import figure\nfrom bokeh.io import show,output_notebook\n\noutput_notebook()\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:29.365",
+      "dateUpdated": "2021-06-15 03:30:04.860",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -641,39 +663,41 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_timeout \u003d Date.n [...]
           },
           {
             "type": "HTML",
-            "data": "\n\u003clink rel\u003d\"stylesheet\" href\u003d\"https://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css\"\u003e\n\u003cstyle\u003ediv.hololayout {\n  display: flex;\n  align-items: center;\n  margin: 0;\n}\n\ndiv.holoframe {\n  width: 75%;\n}\n\ndiv.holowell {\n  display: flex;\n  align-items: center;\n}\n\nform.holoform {\n  background-color: #fafafa;\n  border-radius: 5px;\n  overflow: hidden;\n  padding-left: 0.8em;\n  padding-right: 0.8em;\n  padding-t [...]
+            "data": "\u003cscript\u003e \nif ((window.PyViz \u003d\u003d\u003d undefined) || (window.PyViz instanceof HTMLElement)) {\n  window.PyViz \u003d {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n    function JupyterCommManager() {\n    }\n\n    JupyterCommManager.prototype.register_target \u003d function(plot_id, comm_id, msg_handler) {\n      if (window.comm_manager || ((window.Jupyter !\u003d\u003d undefined) \u0026\u0026 (Jupyter.notebook.kerne [...]
           },
           {
             "type": "HTML",
-            "data": "\u003cscript\u003e function HoloViewsWidget() {\n}\n\nHoloViewsWidget.prototype.init_slider \u003d function(init_val){\n  if(this.load_json) {\n    this.from_json()\n  } else {\n    this.update_cache();\n  }\n}\n\nHoloViewsWidget.prototype.populate_cache \u003d function(idx){\n  this.cache[idx].innerHTML \u003d this.frames[idx];\n  if (this.embed) {\n    delete this.frames[idx];\n  }\n}\n\nHoloViewsWidget.prototype.process_error \u003d function(msg){\n}\n\nHoloViewsW [...]
+            "data": "\n\u003cdiv class\u003d\"logo-block\"\u003e\n\u003cimg src\u003d\u0027data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAB+wAAAfsBxc2miwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA6zSURB\nVHic7ZtpeFRVmsf/5966taWqUlUJ2UioBBJiIBAwCZtog9IOgjqACsogKtqirT2ttt069nQ/zDzt\ntI4+CrJIREFaFgWhBXpUNhHZQoKBkIUASchWla1S+3ar7r1nPkDaCAnZKoQP/D7mnPOe9/xy76n3\nnFSAW9ziFoPFNED2LLK5wcyBDObkb8ZkxuaoSYlI6ZcOKq1eWFdedqNzGHQBk9RMEwF [...]
           },
           {
             "type": "HTML",
-            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.pydata.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1157\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n\n"
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1164\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) { [...]
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482815_131583170",
       "id": "20180120-131731_1558753626",
       "dateCreated": "2020-02-05 14:34:42.815",
-      "dateStarted": "2020-03-11 14:24:29.375",
-      "dateFinished": "2020-03-11 14:24:31.324",
+      "dateStarted": "2021-06-15 03:30:04.883",
+      "dateFinished": "2021-06-15 03:30:07.327",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nstation_info \u003d pd.read_csv(\u0027https://raw.githubusercontent.com/holoviz/holoviews/master/examples/assets/station_info.csv\u0027)\nstation_info.head()\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:31.333",
+      "dateUpdated": "2021-06-15 03:30:07.392",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -701,18 +725,20 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885453474_1167659991",
       "id": "paragraph_1580885453474_1167659991",
       "dateCreated": "2020-02-05 14:50:53.474",
-      "dateStarted": "2020-03-11 14:24:31.424",
-      "dateFinished": "2020-03-11 14:24:32.678",
+      "dateStarted": "2021-06-15 03:30:07.718",
+      "dateFinished": "2021-06-15 03:30:08.228",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nscatter \u003d hv.Scatter(station_info, \u0027services\u0027, \u0027ridership\u0027)\nscatter",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:32.764",
+      "dateUpdated": "2021-06-15 03:30:08.318",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -735,23 +761,25 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv id\u003d\u00271224\u0027 style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"7f0d5a1f-6e3c-4e74-94c3-abacae70aa73\" data-root-id\u003d\"1224\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"d1757c5f-59ab-4e30-99ee-e82336d5e1f0\":{\"roots\":{\"references\":[{\"a [...]
+            "data": "\u003cdiv id\u003d\u00271165\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"2b2fd01d-ac51-4c95-9436-60c1d74dc6e3\" data-root-id\u003d\"1165\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"dd4330d6-c6b6-4fc8-a439-bf3a4d82874a\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HS [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885519951_-291252209",
       "id": "paragraph_1580885519951_-291252209",
       "dateCreated": "2020-02-05 14:51:59.951",
-      "dateStarted": "2020-03-11 14:24:32.791",
-      "dateFinished": "2020-03-11 14:24:32.855",
+      "dateStarted": "2021-06-15 03:30:08.340",
+      "dateFinished": "2021-06-15 03:30:08.466",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nlayout \u003d scatter + hv.Histogram(np.histogram(station_info[\u0027opened\u0027], bins\u003d24), kdims\u003d[\u0027opened\u0027])\nlayout",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:32.887",
+      "dateUpdated": "2021-06-15 03:30:08.540",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -774,24 +802,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv id\u003d\u00271439\u0027 style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"f846b454-8b39-4af9-88c9-210478cd4b2a\" data-root-id\u003d\"1439\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"6daaed82-50ac-4103-b793-369e71bb9dc5\":{\"roots\":{\"references\":[{\"a [...]
+            "data": "\u003cdiv id\u003d\u00271285\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"57c1a84c-9324-43e8-abbd-e94b3e898025\" data-root-id\u003d\"1285\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"97d217fa-9f44-4bac-94b6-fd3e4ed1edb2\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"1386\",\"type\":\"Union [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885548751_1272982082",
       "id": "paragraph_1580885548751_1272982082",
       "dateCreated": "2020-02-05 14:52:28.751",
-      "dateStarted": "2020-03-11 14:24:32.907",
-      "dateFinished": "2020-03-11 14:24:33.343",
+      "dateStarted": "2021-06-15 03:30:08.561",
+      "dateFinished": "2021-06-15 03:30:09.022",
       "status": "FINISHED"
     },
     {
       "title": "HvPlot",
       "text": "%md\n\n# HvPlot\n\n[HvPlot](https://hvplot.holoviz.org/) is a high-level plotting API for the PyData ecosystem built on HoloViews.\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:33.415",
+      "dateUpdated": "2021-06-15 03:30:09.062",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -821,18 +851,20 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580884482945_-1037962389",
       "id": "20180119-091845_1603850480",
       "dateCreated": "2020-02-05 14:34:42.945",
-      "dateStarted": "2020-03-11 14:24:33.438",
-      "dateFinished": "2020-03-11 14:24:33.444",
+      "dateStarted": "2021-06-15 03:30:09.083",
+      "dateFinished": "2021-06-15 03:30:09.087",
       "status": "FINISHED"
     },
     {
-      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook\nimport bkzep\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n\n\nimport pandas as pd, numpy as np\n\n\nidx \u003d pd.date_range(\u00271/1/2000\u0027, periods\u003d1000)\ndf  \u003d pd.DataFrame(np.random.randn(1000, 4), index\u003didx, columns\u003dlist(\u0027ABCD\u0027)).cumsum()\n\nimport hvplot.pandas\ndf.hvplot()",
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook\noutput_notebook()\n\nimport pandas as pd, numpy as np\n\n\nidx \u003d pd.date_range(\u00271/1/2000\u0027, periods\u003d1000)\ndf  \u003d pd.DataFrame(np.random.randn(1000, 4), index\u003didx, columns\u003dlist(\u0027ABCD\u0027)).cumsum()\n\nimport hvplot.pandas\ndf.hvplot()\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:33.540",
+      "dateUpdated": "2021-06-15 03:30:09.182",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -855,31 +887,33 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.pydata.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1697\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n\n"
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1687\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) { [...]
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
           },
           {
             "type": "HTML",
-            "data": "\u003cdiv id\u003d\u00271704\u0027 style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"bfc1a135-0a44-4a8a-afc0-ac18b29602a3\" data-root-id\u003d\"1704\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"70eca58e-0266-4db4-9230-e477676f378f\":{\"roots\":{\"references\":[{\"a [...]
+            "data": "\u003cdiv id\u003d\u00271688\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"f8ac7163-7f4b-46cb-9442-9a25ed107056\" data-root-id\u003d\"1688\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"6001bd2d-5b2e-480a-857a-ad7280354b51\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"1729\",\"type\":\"AllLa [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885707198_-1652524072",
       "id": "paragraph_1580885707198_-1652524072",
       "dateCreated": "2020-02-05 14:55:07.198",
-      "dateStarted": "2020-03-11 14:24:33.612",
-      "dateFinished": "2020-03-11 14:24:35.377",
+      "dateStarted": "2021-06-15 03:30:09.203",
+      "dateFinished": "2021-06-15 03:30:09.788",
       "status": "FINISHED"
     },
     {
-      "text": "%python.ipython\n\nfrom hvplot.sample_data import us_crime\n\ncolumns \u003d [\u0027Burglary rate\u0027, \u0027Larceny-theft rate\u0027, \u0027Robbery rate\u0027, \u0027Violent Crime rate\u0027]\n\n\nus_crime.plot.violin(y\u003dcolumns, group_label\u003d\u0027Type of crime\u0027, value_label\u003d\u0027Rate per 100k\u0027, invert\u003dTrue)\n",
+      "text": "%python.ipython\n\nfrom hvplot.sample_data import us_crime, airline_flights\n\ncrime \u003d us_crime.read()\nprint(type(crime))\ncrime.hvplot.line(x\u003d\u0027Year\u0027, y\u003d\u0027Violent Crime rate\u0027)\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:35.469",
+      "dateUpdated": "2021-06-15 03:30:09.803",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -901,24 +935,30 @@
         "code": "SUCCESS",
         "msg": [
           {
+            "type": "TEXT",
+            "data": "\u003cclass \u0027pandas.core.frame.DataFrame\u0027\u003e\n\n"
+          },
+          {
             "type": "HTML",
-            "data": "\u003cdiv id\u003d\u00272252\u0027 style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"1653f290-bdc1-48ab-9620-5c5c2384fa6c\" data-root-id\u003d\"2252\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"99d99460-8fe9-42df-8a74-16dcd277db84\":{\"roots\":{\"references\":[{\"a [...]
+            "data": "\u003cdiv id\u003d\u00272267\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"d4d63c4b-eeff-4788-9767-88da851ed3f6\" data-root-id\u003d\"2267\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"b33f04e8-a949-47e4-b318-71cdcc7d330d\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"line_color\":\"#30a2da\",\"line_ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885736306_456675117",
       "id": "paragraph_1580885736306_456675117",
       "dateCreated": "2020-02-05 14:55:36.307",
-      "dateStarted": "2020-03-11 14:24:35.496",
-      "dateFinished": "2020-03-11 14:24:36.628",
+      "dateStarted": "2021-06-15 03:30:09.849",
+      "dateFinished": "2021-06-15 03:30:10.462",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nus_crime.plot.bivariate(\u0027Burglary rate\u0027, \u0027Property crime rate\u0027, legend\u003dFalse, width\u003d500, height\u003d400) * \\\nus_crime.plot.scatter(  \u0027Burglary rate\u0027, \u0027Property crime rate\u0027, color\u003d\u0027black\u0027, size\u003d15, legend\u003dFalse) + \\\nus_crime.plot.table([\u0027Burglary rate\u0027, \u0027Property crime rate\u0027], width\u003d350, height\u003d350)",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:36.633",
+      "dateUpdated": "2021-06-15 03:30:10.541",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -941,24 +981,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv id\u003d\u00272588\u0027 style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"617c55fd-910a-409e-8ea0-39a065e6e070\" data-root-id\u003d\"2588\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"87e13418-9ad0-4d9d-b9eb-2466069e19e7\":{\"roots\":{\"references\":[{\"a [...]
+            "data": "\u003cdiv id\u003d\u00272389\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"c5fb702b-aa45-4c68-a141-f5fe2c5e60e4\" data-root-id\u003d\"2389\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"0fd184c8-ec6c-4739-b2f8-5e69f2a5b340\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"f [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885746483_-68202156",
       "id": "paragraph_1580885746483_-68202156",
       "dateCreated": "2020-02-05 14:55:46.483",
-      "dateStarted": "2020-03-11 14:24:36.721",
-      "dateFinished": "2020-03-11 14:24:37.163",
+      "dateStarted": "2021-06-15 03:30:10.577",
+      "dateFinished": "2021-06-15 03:30:10.948",
       "status": "FINISHED"
     },
     {
       "title": "Altair",
       "text": "%md\n\n# Altair\n\n[Altair](https://altair-viz.github.io/) is a declarative statistical visualization library for Python, based on Vega and Vega-Lite, and the source is available on GitHub.\n\nWith Altair, you can spend more time understanding your data and its meaning. Altair’s API is simple, friendly and consistent and built on top of the powerful Vega-Lite visualization grammar. This elegant simplicity produces beautiful and effective visualizations with a minimal amoun [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:37.235",
+      "dateUpdated": "2021-06-15 03:30:10.972",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -988,18 +1030,20 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580886248807_819045686",
       "id": "paragraph_1580886248807_819045686",
       "dateCreated": "2020-02-05 15:04:08.807",
-      "dateStarted": "2020-03-11 14:24:37.262",
-      "dateFinished": "2020-03-11 14:24:37.269",
+      "dateStarted": "2021-06-15 03:30:10.993",
+      "dateFinished": "2021-06-15 03:30:11.001",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nimport altair as alt\n\nalt.renderers.enable(\u0027zeppelin\u0027)\n\n# load a simple dataset as a pandas DataFrame\nfrom vega_datasets import data\ncars \u003d data.cars()\n\nalt.Chart(cars).mark_point().encode(\n    x\u003d\u0027Horsepower\u0027,\n    y\u003d\u0027Miles_per_Gallon\u0027,\n    color\u003d\u0027Origin\u0027,\n)",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:37.362",
+      "dateUpdated": "2021-06-15 03:30:11.093",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -1022,23 +1066,25 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cstyle\u003e\n    .vega-actions a {\n        margin-right: 12px;\n        color: #757575;\n        font-weight: normal;\n        font-size: 13px;\n    }\n    .error {\n        color: red;\n    }\n  \u003c/style\u003e\n  \u003cscript type\u003d\"text/javascript\" src\u003d\"https://cdn.jsdelivr.net/npm//vega@5\"\u003e\u003c/script\u003e\n  \u003cscript type\u003d\"text/javascript\" src\u003d\"https: [...]
+            "data": "\n\u003cdiv id\u003d\"altair-viz-4effe3de5ba542bda2cedb914e6f9417\"\u003e\u003c/div\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n  (function(spec, embedOpt){\n    let outputDiv \u003d document.currentScript.previousElementSibling;\n    if (outputDiv.id !\u003d\u003d \"altair-viz-4effe3de5ba542bda2cedb914e6f9417\") {\n      outputDiv \u003d document.getElementById(\"altair-viz-4effe3de5ba542bda2cedb914e6f9417\");\n    }\n    const paths \u003d {\n      \"v [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580885762824_-1733991523",
       "id": "paragraph_1580885762824_-1733991523",
       "dateCreated": "2020-02-05 14:56:02.824",
-      "dateStarted": "2020-03-11 14:24:37.395",
-      "dateFinished": "2020-03-11 14:24:37.586",
+      "dateStarted": "2021-06-15 03:30:11.126",
+      "dateFinished": "2021-06-15 03:30:11.351",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n\nimport altair as alt\nimport numpy as np\nimport pandas as pd\n\n# Compute x^2 + y^2 across a 2D grid\nx, y \u003d np.meshgrid(range(-5, 5), range(-5, 5))\nz \u003d x ** 2 + y ** 2\n\n# Convert this grid to columnar data expected by Altair\nsource \u003d pd.DataFrame({\u0027x\u0027: x.ravel(),\n                     \u0027y\u0027: y.ravel(),\n                     \u0027z\u0027: z.ravel()})\n\nalt.Chart(source).mark_rect().encode(\n    x\u003d\u0027x:O\u00 [...]
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:37.597",
+      "dateUpdated": "2021-06-15 03:30:11.426",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -1061,23 +1107,25 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cstyle\u003e\n    .vega-actions a {\n        margin-right: 12px;\n        color: #757575;\n        font-weight: normal;\n        font-size: 13px;\n    }\n    .error {\n        color: red;\n    }\n  \u003c/style\u003e\n  \u003cscript type\u003d\"text/javascript\" src\u003d\"https://cdn.jsdelivr.net/npm//vega@5\"\u003e\u003c/script\u003e\n  \u003cscript type\u003d\"text/javascript\" src\u003d\"https: [...]
+            "data": "\n\u003cdiv id\u003d\"altair-viz-7ac0dfedcae8480297d3227f56e1b498\"\u003e\u003c/div\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n  (function(spec, embedOpt){\n    let outputDiv \u003d document.currentScript.previousElementSibling;\n    if (outputDiv.id !\u003d\u003d \"altair-viz-7ac0dfedcae8480297d3227f56e1b498\") {\n      outputDiv \u003d document.getElementById(\"altair-viz-7ac0dfedcae8480297d3227f56e1b498\");\n    }\n    const paths \u003d {\n      \"v [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580886216808_1963511607",
       "id": "paragraph_1580886216808_1963511607",
       "dateCreated": "2020-02-05 15:03:36.808",
-      "dateStarted": "2020-03-11 14:24:37.631",
-      "dateFinished": "2020-03-11 14:24:37.693",
+      "dateStarted": "2021-06-15 03:30:11.449",
+      "dateFinished": "2021-06-15 03:30:11.515",
       "status": "FINISHED"
     },
     {
       "text": "%python.ipython\n",
       "user": "anonymous",
-      "dateUpdated": "2020-03-11 14:24:37.730",
+      "dateUpdated": "2021-06-15 03:30:11.549",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -1095,15 +1143,22 @@
         "params": {},
         "forms": {}
       },
+      "results": {
+        "code": "SUCCESS",
+        "msg": []
+      },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580886440097_1853064047",
       "id": "paragraph_1580886440097_1853064047",
       "dateCreated": "2020-02-05 15:07:20.097",
+      "dateStarted": "2021-06-15 03:30:11.570",
+      "dateFinished": "2021-06-15 03:30:11.629",
       "status": "FINISHED"
     }
   ],
-  "name": "IPython Visualization Tutorial",
+  "name": "2. IPython Visualization Tutorial",
   "id": "2F1S9ZY8Z",
   "defaultInterpreterGroup": "spark",
   "version": "0.9.0-SNAPSHOT",
@@ -1114,6 +1169,6 @@
     "isZeppelinNotebookCronEnable": false
   },
   "info": {
-    "isRunning": false
+    "isRunning": true
   }
 }
\ No newline at end of file
diff --git a/notebook/Python Tutorial/3. Keras Binary Classification (IMDB)_2F2AVWJ77.zpln b/notebook/Python Tutorial/3. Keras Binary Classification (IMDB)_2F2AVWJ77.zpln
index be88237..ffdf570 100644
--- a/notebook/Python Tutorial/3. Keras Binary Classification (IMDB)_2F2AVWJ77.zpln	
+++ b/notebook/Python Tutorial/3. Keras Binary Classification (IMDB)_2F2AVWJ77.zpln	
@@ -3,7 +3,8 @@
     {
       "text": "%md\n\nThis tutorial is from book [Deep Learning with Python](https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438). It use [Keras](http://keras.io/) to train binary classifier on IMDB data.\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:50:03.006",
+      "dateUpdated": "2021-06-15 03:30:28.259",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -32,19 +33,64 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887284288_-572987457",
       "id": "paragraph_1580887284288_-572987457",
       "dateCreated": "2020-02-05 15:21:24.288",
-      "dateStarted": "2020-02-05 15:50:03.014",
-      "dateFinished": "2020-02-05 15:50:03.025",
+      "dateStarted": "2021-06-15 03:30:28.288",
+      "dateFinished": "2021-06-15 03:30:28.293",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Install keras \u0026 Tensorflow",
+      "text": "%python.ipython\n\n!pip install keras\u003d\u003d2.4.0 tensorflow\u003d\u003d2.4.0\n",
+      "user": "anonymous",
+      "dateUpdated": "2021-06-15 03:30:28.388",
+      "progress": 0,
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "Collecting keras\u003d\u003d2.4.0\r\n  Downloading Keras-2.4.0-py2.py3-none-any.whl (170 kB)\r\n\u001b[?25l\r\u001b[K     |██                              | 10 kB 31.1 MB/s eta 0:00:01\r\u001b[K     |███▉                            | 20 kB 39.2 MB/s eta 0:00:01\r\u001b[K     |█████▊                          | 30 kB 47.8 MB/s eta 0:00:01\r\u001b[K     |███████▊                        | 40 kB 53.6 MB/s eta 0:00:01\r\u001b[K     |█████████▋                      | 51 kB  [...]
+          }
+        ]
+      },
+      "apps": [],
+      "runtimeInfos": {},
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1615527793969_1173282311",
+      "id": "paragraph_1615527793969_1173282311",
+      "dateCreated": "2021-03-12 13:43:13.970",
+      "dateStarted": "2021-06-15 03:30:28.416",
+      "dateFinished": "2021-06-15 03:31:26.258",
       "status": "FINISHED"
     },
     {
       "title": "Load Data",
-      "text": "%python.ipython\n\n\nfrom keras.datasets import imdb\n\n(training_data, training_labels), (testing_data, testing_labels) \u003d imdb.load_data(num_words\u003d10000)\n",
+      "text": "%python.ipython\n\n\nfrom keras.datasets import imdb\n\n(training_data, training_labels), (testing_data, testing_labels) \u003d imdb.load_data(num_words\u003d1000)\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:42:38.288",
+      "dateUpdated": "2021-06-15 03:31:26.361",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -68,24 +114,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "Using TensorFlow backend.\n"
+            "data": "Using TensorFlow backend.\nDownloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n\r    8192/17464789 [..............................] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 4562944/17464789 [\u003d\u003d\u003d\u003d\u003d\u003d\u003e.......................] - ETA: 0s\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266618_558814345",
       "id": "20180312-171655_220733505",
       "dateCreated": "2020-02-05 15:21:06.618",
-      "dateStarted": "2020-02-05 15:42:38.296",
-      "dateFinished": "2020-02-05 15:42:46.933",
+      "dateStarted": "2021-06-15 03:31:26.388",
+      "dateFinished": "2021-06-15 03:31:31.859",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n\nprint(training_data[0])\nprint(training_labels[0])",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:50:27.642",
+      "dateUpdated": "2021-06-15 03:31:31.891",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -109,24 +157,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38 [...]
+            "data": "[1, 14, 22, 16, 43, 530, 973, 2, 2, 65, 458, 2, 66, 2, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 2, 2, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2, 19, 14, 22, 4, 2, 2, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 2, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2, 2, 16, 480, 66, 2, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266625_804328120",
       "id": "20180312-171715_624018844",
       "dateCreated": "2020-02-05 15:21:06.625",
-      "dateStarted": "2020-02-05 15:42:54.913",
-      "dateFinished": "2020-02-05 15:42:54.983",
+      "dateStarted": "2021-06-15 03:31:31.923",
+      "dateFinished": "2021-06-15 03:31:31.978",
       "status": "FINISHED"
     },
     {
       "title": "Transform Data",
-      "text": "%python.ipython\n\nimport numpy as np\n\n# convert input data to sparse matrix (each row represent one hot encoding of one doc)\ndef vectorize_sequences(sequences, dimension \u003d 10000):\n    matrix \u003d np.zeros((len(sequences), dimension))\n    for (i, sequence) in enumerate(sequences):\n        matrix[i, sequence] \u003d 1.0\n    return matrix\n\nx_train \u003d vectorize_sequences(training_data)\nx_test \u003d vectorize_sequences(testing_data)\n\ny_train \u003d trai [...]
+      "text": "%python.ipython\n\nimport numpy as np\n\n# convert input data to sparse matrix (each row represent one hot encoding of one doc)\ndef vectorize_sequences(sequences, dimension \u003d 1000):\n    matrix \u003d np.zeros((len(sequences), dimension))\n    for (i, sequence) in enumerate(sequences):\n        matrix[i, sequence] \u003d 1.0\n    return matrix\n\nx_train \u003d vectorize_sequences(training_data)\nx_test \u003d vectorize_sequences(testing_data)\n\ny_train \u003d train [...]
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:42:57.329",
+      "dateUpdated": "2021-06-15 03:31:32.023",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -150,24 +200,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "array([0., 1., 1., ..., 0., 0., 0.])"
+            "data": "array([0., 1., 1., 0., 1., 1., 1., 1., 1., 1., 0., 0., 1., 1., 1., 1., 1.,\n       1., 1., 1., 0., 1., 1., 0., 0., 1., 1., 0., 1., 0., 1., 0., 1., 1.,\n       0., 1., 1., 0., 1., 1., 0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 1.,\n       1., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 0.,\n       0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0., 0.,\n       0., 0., 1., 1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0.,\n       0., 1.,  [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266625_1445359335",
       "id": "20180312-172108_1871132312",
       "dateCreated": "2020-02-05 15:21:06.625",
-      "dateStarted": "2020-02-05 15:42:57.337",
-      "dateFinished": "2020-02-05 15:43:01.756",
+      "dateStarted": "2021-06-15 03:31:32.050",
+      "dateFinished": "2021-06-15 03:31:33.160",
       "status": "FINISHED"
     },
     {
       "title": "Build Model",
-      "text": "%python.ipython\n\n\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n\n\nmodel \u003d Sequential()\nmodel.add(Dense(16, input_shape\u003d(10000,), activation\u003d\u0027relu\u0027))\nmodel.add(Dense(16, activation\u003d\u0027relu\u0027))\nmodel.add(Dense(1, activation\u003d\u0027sigmoid\u0027))\n\nmodel.compile(loss\u003d\u0027binary_crossentropy\u0027, optimizer\u003d\u0027rmsprop\u0027, metrics\u003d[\u0027accuracy\u0027])\n\n",
+      "text": "%python.ipython\n\n\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n\n\nmodel \u003d Sequential()\nmodel.add(Dense(16, input_shape\u003d(1000,), activation\u003d\u0027relu\u0027))\nmodel.add(Dense(16, activation\u003d\u0027relu\u0027))\nmodel.add(Dense(1, activation\u003d\u0027sigmoid\u0027))\n\nmodel.compile(loss\u003d\u0027binary_crossentropy\u0027, optimizer\u003d\u0027rmsprop\u0027, metrics\u003d[\u0027accuracy\u0027])\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:03.522",
+      "dateUpdated": "2021-06-15 03:31:33.250",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -188,27 +240,24 @@
       },
       "results": {
         "code": "SUCCESS",
-        "msg": [
-          {
-            "type": "TEXT",
-            "data": "WARNING: Logging before flag parsing goes to stderr.\nW0205 15:43:03.542002 4550231488 deprecation_wrapper.py:119] From /Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:74: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n\nW0205 15:43:03.574465 4550231488 deprecation_wrapper.py:119] From /Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:517: T [...]
-          }
-        ]
+        "msg": []
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266625_-1696330995",
       "id": "20180312-172157_1653956917",
       "dateCreated": "2020-02-05 15:21:06.625",
-      "dateStarted": "2020-02-05 15:43:03.529",
-      "dateFinished": "2020-02-05 15:43:03.755",
+      "dateStarted": "2021-06-15 03:31:33.277",
+      "dateFinished": "2021-06-15 03:31:33.386",
       "status": "FINISHED"
     },
     {
       "title": "Traing Model",
-      "text": "%python.ipython\n\nx_val \u003d x_train[:10000]\ny_val \u003d y_train[:10000]\npartial_x_train \u003d x_train[10000:]\npartial_y_train \u003d y_train[10000:]\n\nhistory \u003d model.fit(partial_x_train, partial_y_train, epochs\u003d20, batch_size\u003d512, validation_data\u003d(x_val, y_val))\n\n",
+      "text": "%python.ipython\n\nx_val \u003d x_train[:1000]\ny_val \u003d y_train[:1000]\npartial_x_train \u003d x_train[1000:]\npartial_y_train \u003d y_train[1000:]\n\nhistory \u003d model.fit(partial_x_train, partial_y_train, epochs\u003d20, batch_size\u003d512, validation_data\u003d(x_val, y_val))\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:07.601",
+      "dateUpdated": "2021-06-15 03:31:33.477",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -232,24 +281,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "W0205 15:43:08.120182 4550231488 deprecation_wrapper.py:119] From /Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n\nTrain on 15000 samples, validate on 10000 samples\nEpoch 1/20\n\r  512/15000 [\u003e.............................] - ETA: 14s - loss: 0.6939 - acc: 0.5020\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ [...]
+            "data": "Epoch 1/20\n\r 1/47 [..............................] - ETA: 24s - loss: 0.6875 - accuracy: 0.5293\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r22/47 [\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003e................] - ETA: 0s - loss: 0.6425 - accuracy: 0.6486 \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266626_-253784643",
       "id": "20180312-175108_20761277",
       "dateCreated": "2020-02-05 15:21:06.626",
-      "dateStarted": "2020-02-05 15:43:07.607",
-      "dateFinished": "2020-02-05 15:43:41.441",
+      "dateStarted": "2021-06-15 03:31:33.505",
+      "dateFinished": "2021-06-15 03:31:37.703",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n\nhistory_dict \u003d history.history\nhistory_dict",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:32.021",
+      "dateUpdated": "2021-06-15 03:31:37.708",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -273,24 +324,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "{\u0027val_loss\u0027: [0.37968397402763365,\n  0.300372970533371,\n  0.30855551714897156,\n  0.28398124709129335,\n  0.2841434906005859,\n  0.3164743734836578,\n  0.312709903717041,\n  0.38588675870895384,\n  0.36348103885650634,\n  0.3842476764202118,\n  0.41507191224098205,\n  0.4539576127052307,\n  0.47011078305244447,\n  0.5024201002120972,\n  0.5311277472019196,\n  0.5638622181892395,\n  0.6184595478057862,\n  0.6363161237716675,\n  0.7269207975387574,\n  0.734 [...]
+            "data": "{\u0027loss\u0027: [0.5273846387863159,\n  0.3763079047203064,\n  0.3329189121723175,\n  0.31639185547828674,\n  0.3124505281448364,\n  0.30658480525016785,\n  0.30553606152534485,\n  0.30442968010902405,\n  0.302451491355896,\n  0.3005938231945038,\n  0.30038487911224365,\n  0.2969147562980652,\n  0.2942992150783539,\n  0.2935870885848999,\n  0.29120126366615295,\n  0.28804951906204224,\n  0.2846371829509735,\n  0.2824459969997406,\n  0.27897241711616516,\n  0.27478 [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266629_-1158190533",
       "id": "20180312-181145_1796362449",
       "dateCreated": "2020-02-05 15:21:06.629",
-      "dateStarted": "2020-02-05 15:43:32.029",
-      "dateFinished": "2020-02-05 15:43:41.513",
+      "dateStarted": "2021-06-15 03:31:37.757",
+      "dateFinished": "2021-06-15 03:31:37.816",
       "status": "FINISHED"
     },
     {
       "title": "Initialize Bokeh for training process plotting",
-      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, show\nfrom bokeh.plotting import figure\n\nimport bkzep\n\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n",
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, show\nfrom bokeh.plotting import figure\n\noutput_notebook()\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:45.275",
+      "dateUpdated": "2021-06-15 03:31:37.857",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -314,28 +367,30 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.pydata.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1001\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n\n"
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"2790\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) { [...]
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266629_755430293",
       "id": "20180312-212623_945231959",
       "dateCreated": "2020-02-05 15:21:06.629",
-      "dateStarted": "2020-02-05 15:43:45.294",
-      "dateFinished": "2020-02-05 15:43:45.783",
+      "dateStarted": "2021-06-15 03:31:37.884",
+      "dateFinished": "2021-06-15 03:31:37.943",
       "status": "FINISHED"
     },
     {
       "title": "Accuracy Plotting",
-      "text": "%python.ipython\n\nfrom bokeh.io import show\nfrom bokeh.plotting import figure\n\nval_acc, acc \u003d history_dict[\u0027val_acc\u0027], history_dict[\u0027acc\u0027]\n\nfig \u003d figure()\nfig.line(range(1, len(val_acc) + 1), val_acc, color\u003d\u0027red\u0027, legend\u003d\u0027Validation Accuracy\u0027)\nfig.line(range(1, len(acc) +1), acc, color\u003d\u0027blue\u0027, legend\u003d\u0027Training Accuracy\u0027)\nfig.xaxis.axis_label \u003d \u0027Epochs\u0027\nfig.yax [...]
+      "text": "%python.ipython\n\nfrom bokeh.io import show\nfrom bokeh.plotting import figure\n\nval_acc, acc \u003d history_dict[\u0027val_accuracy\u0027], history_dict[\u0027accuracy\u0027]\n\nfig \u003d figure()\nfig.line(range(1, len(val_acc) + 1), val_acc, color\u003d\u0027red\u0027, legend\u003d\u0027Validation Accuracy\u0027)\nfig.line(range(1, len(acc) +1), acc, color\u003d\u0027blue\u0027, legend\u003d\u0027Training Accuracy\u0027)\nfig.xaxis.axis_label \u003d \u0027Epochs\u002 [...]
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:47.556",
+      "dateUpdated": "2021-06-15 03:31:37.983",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -358,29 +413,35 @@
         "code": "SUCCESS",
         "msg": [
           {
+            "type": "TEXT",
+            "data": "BokehDeprecationWarning: \u0027legend\u0027 keyword is deprecated, use explicit \u0027legend_label\u0027, \u0027legend_field\u0027, or \u0027legend_group\u0027 keywords instead\nBokehDeprecationWarning: \u0027legend\u0027 keyword is deprecated, use explicit \u0027legend_label\u0027, \u0027legend_field\u0027, or \u0027legend_group\u0027 keywords instead\n\n"
+          },
+          {
             "type": "HTML",
-            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"f0d77ab9-6462-42b8-a56c-278fcfe88973\" data-root-id\u003d\"1002\"\u003e\u003c/div\u003e\n\n"
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"2283c5f3-f4f1-4443-b4b9-4a86e455c86d\" data-root-id\u003d\"2791\"\u003e\u003c/div\u003e\n\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"69449613-57e3-42d6-9ea9-8810b7923f2a\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"},{\"id\":\"1046\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\": [...]
+            "data": "\u003cscript\u003e (function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"fcca201f-bb46-4b0c-a90b-b225dbf390ee\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2800\"}],\"center\":[{\"id\":\"2803\"},{\"id\":\"2807\"},{\"id\":\"2838\"}],\"left\":[{\"id\":\"2804\"}],\"renderers\":[{\"id\":\"2825\"},{\"id\":\"2843\"}],\"title\":{\"id\":\"2827\"},\"toolbar\":{\"id\":\"2815\"},\"x_range\":{\"id\":\"2792\"},\"x_ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266630_-767905714",
       "id": "20180312-212042_924458653",
       "dateCreated": "2020-02-05 15:21:06.630",
-      "dateStarted": "2020-02-05 15:43:47.564",
-      "dateFinished": "2020-02-05 15:43:47.681",
+      "dateStarted": "2021-06-15 03:31:38.010",
+      "dateFinished": "2021-06-15 03:31:38.068",
       "status": "FINISHED"
     },
     {
       "title": "Loss Plotting",
       "text": "%python.ipython\n\nfrom bokeh.io import show\nfrom bokeh.plotting import figure\n\nval_loss, loss \u003d history_dict[\u0027val_loss\u0027], history_dict[\u0027loss\u0027]\n\nfig \u003d figure()\nfig.line(range(1, len(val_loss) + 1), val_loss, color\u003d\u0027red\u0027, legend\u003d\u0027Validation Loss\u0027)\nfig.line(range(1, len(loss) +1), loss, color\u003d\u0027blue\u0027, legend\u003d\u0027Training Loss\u0027)\n\nfig.xaxis.axis_label \u003d \u0027Epochs\u0027\nfig.y [...]
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:49.169",
+      "dateUpdated": "2021-06-15 03:31:38.110",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -403,29 +464,35 @@
         "code": "SUCCESS",
         "msg": [
           {
+            "type": "TEXT",
+            "data": "BokehDeprecationWarning: \u0027legend\u0027 keyword is deprecated, use explicit \u0027legend_label\u0027, \u0027legend_field\u0027, or \u0027legend_group\u0027 keywords instead\nBokehDeprecationWarning: \u0027legend\u0027 keyword is deprecated, use explicit \u0027legend_label\u0027, \u0027legend_field\u0027, or \u0027legend_group\u0027 keywords instead\n\n"
+          },
+          {
             "type": "HTML",
-            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"26a3aff0-c188-468a-b2ec-ad59decbe6b8\" data-root-id\u003d\"1129\"\u003e\u003c/div\u003e\n\n"
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"83649116-c0bf-43c0-939c-2f6c4f189087\" data-root-id\u003d\"2948\"\u003e\u003c/div\u003e\n\n"
           },
           {
             "type": "HTML",
-            "data": "\u003cscript type\u003d\"text/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"47586f20-c8c3-42c2-b62d-0467c6b8a1ba\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1138\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1142\",\"type\":\"Grid\"},{\"id\":\"1147\",\"type\":\"Grid\"},{\"id\":\"1173\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1143\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\": [...]
+            "data": "\u003cscript\u003e (function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"e6babb19-e556-484e-a552-5acd427b225d\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2957\"}],\"center\":[{\"id\":\"2960\"},{\"id\":\"2964\"},{\"id\":\"2995\"}],\"left\":[{\"id\":\"2961\"}],\"renderers\":[{\"id\":\"2982\"},{\"id\":\"3000\"}],\"title\":{\"id\":\"2984\"},\"toolbar\":{\"id\":\"2972\"},\"x_range\":{\"id\":\"2949\"},\"x_ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266630_-932015545",
       "id": "20180312-212825_683262480",
       "dateCreated": "2020-02-05 15:21:06.630",
-      "dateStarted": "2020-02-05 15:43:49.182",
-      "dateFinished": "2020-02-05 15:43:49.332",
+      "dateStarted": "2021-06-15 03:31:38.145",
+      "dateFinished": "2021-06-15 03:31:38.203",
       "status": "FINISHED"
     },
     {
       "title": "Retrain the model in 4 epochs",
       "text": "%python.ipython\n\nmodel.fit(x_train, y_train, epochs\u003d4, batch_size\u003d512)\nresults \u003d model.evaluate(x_test, y_test)\nprint(results)\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:43:52.363",
+      "dateUpdated": "2021-06-15 03:31:38.245",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
@@ -449,29 +516,32 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "Epoch 1/4\n\r  512/25000 [..............................] - ETA: 1s - loss: 0.2078 - acc: 0.9590\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r 1536/25000 [\u003e.............................] - ETA: 1s - loss: 0.2439 - acc: 0.9564\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ [...]
+            "data": "Epoch 1/4\n\r 1/49 [..............................] - ETA: 0s - loss: 0.2748 - accuracy: 0.8887\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r25/49 [\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003e...............] - ETA: 0s - loss: 0.2755 - accuracy: 0.8863\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266631_-208421764",
       "id": "20180312-213402_1553086977",
       "dateCreated": "2020-02-05 15:21:06.631",
-      "dateStarted": "2020-02-05 15:43:52.369",
-      "dateFinished": "2020-02-05 15:44:02.728",
+      "dateStarted": "2021-06-15 03:31:38.272",
+      "dateFinished": "2021-06-15 03:31:39.643",
       "status": "FINISHED"
     },
     {
       "title": "",
       "text": "%python.ipython\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 15:21:06.633",
+      "dateUpdated": "2021-06-15 03:31:39.673",
+      "progress": 0,
       "config": {
         "editorSetting": {
           "language": "python",
           "editOnDblClick": false,
-          "completionKey": "TAB"
+          "completionKey": "TAB",
+          "completionSupport": true
         },
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -483,25 +553,32 @@
         "params": {},
         "forms": {}
       },
+      "results": {
+        "code": "SUCCESS",
+        "msg": []
+      },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580887266633_-1827767869",
       "id": "20180312-214821_1740662910",
       "dateCreated": "2020-02-05 15:21:06.633",
-      "status": "READY"
+      "dateStarted": "2021-06-15 03:31:39.702",
+      "dateFinished": "2021-06-15 03:31:39.758",
+      "status": "FINISHED"
     }
   ],
-  "name": "Keras Binary Classification (IMDB)",
+  "name": "3. Keras Binary Classification (IMDB)",
   "id": "2F2AVWJ77",
   "defaultInterpreterGroup": "spark",
   "version": "0.9.0-SNAPSHOT",
-  "permissions": {},
   "noteParams": {},
   "noteForms": {},
   "angularObjects": {},
   "config": {
-    "isZeppelinNotebookCronEnable": true
+    "isZeppelinNotebookCronEnable": false
   },
-  "info": {},
-  "path": "/Python Tutorial/Keras Binary Classification (IMDB)"
+  "info": {
+    "isRunning": true
+  }
 }
\ No newline at end of file
diff --git a/notebook/R Tutorial/1. R Basics_2BWJFTXKJ.zpln b/notebook/R Tutorial/1. R Basics_2BWJFTXKJ.zpln
index 6bca133..3e6922d 100644
--- a/notebook/R Tutorial/1. R Basics_2BWJFTXKJ.zpln	
+++ b/notebook/R Tutorial/1. R Basics_2BWJFTXKJ.zpln	
@@ -4,7 +4,8 @@
       "title": "Overview",
       "text": "%md\n\nThis tutorial note demonostrate how to use R in Zeppelin. There\u0027re 2 interpreters:\n* %r.r  (Vanilla r interpreter, with least dependencies, only R environment installed is required)\n* %r.ir  (Provide more fancy R runtime via [IRKernel](https://github.com/IRkernel/IRkernel), almost the same experience like using R in Jupyter.)\n\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:30:17.419",
+      "dateUpdated": "2021-06-15 04:12:01.069",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -34,19 +35,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580780002030_-2142389262",
       "id": "paragraph_1580780002030_-2142389262",
       "dateCreated": "2020-02-04 09:33:22.030",
-      "dateStarted": "2020-02-05 13:30:14.381",
-      "dateFinished": "2020-02-05 13:30:15.455",
+      "dateStarted": "2021-06-15 04:12:01.093",
+      "dateFinished": "2021-06-15 04:12:03.501",
       "status": "FINISHED"
     },
     {
       "title": "Hello R",
       "text": "%r.ir\nfoo \u003c- TRUE\nprint(foo)\nbare \u003c- c(1, 2.5, 4)\nprint(bare)\ndouble \u003c- 15.0\nprint(double)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:27:51.317",
+      "dateUpdated": "2021-06-15 04:12:03.594",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/r",
@@ -89,19 +92,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1429882946244_-381648689",
       "id": "20150424-154226_261270952",
       "dateCreated": "2015-04-24 03:42:26.000",
-      "dateStarted": "2020-02-05 13:27:51.345",
-      "dateFinished": "2020-02-05 13:27:57.478",
+      "dateStarted": "2021-06-15 04:12:03.606",
+      "dateFinished": "2021-06-15 04:12:09.115",
       "status": "FINISHED"
     },
     {
       "title": "Load R Librairies",
       "text": "%r.ir\n\nlibrary(data.table)\ndt \u003c- data.table(1:3)\nprint(dt)\nfor (i in 1:5) {\n  print(i*2)\n}\nprint(1:50)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:28:03.819",
+      "dateUpdated": "2021-06-15 04:12:09.214",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/r",
@@ -139,24 +144,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "   V1\n1:  1\n2:  2\n3:  3\n[1] 2\n[1] 4\n[1] 6\n[1] 8\n[1] 10\n [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25\n[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50\n"
+            "data": "\nAttaching package: ‘data.table’\n\n\nThe following objects are masked from ‘package:SparkR’:\n\n    between, cube, first, hour, last, like, minute, month, quarter,\n    rollup, second, tables, year\n\n\n   V1\n1:  1\n2:  2\n3:  3\n[1] 2\n[1] 4\n[1] 6\n[1] 8\n[1] 10\n [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25\n[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50\n"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1429882976611_1352445253",
       "id": "20150424-154256_645296307",
       "dateCreated": "2015-04-24 03:42:56.000",
-      "dateStarted": "2020-02-05 13:28:03.831",
-      "dateFinished": "2020-02-05 13:28:04.062",
+      "dateStarted": "2021-06-15 04:12:09.225",
+      "dateFinished": "2021-06-15 04:12:09.419",
       "status": "FINISHED"
     },
     {
       "title": "Load Iris Dataset",
       "text": "%r.ir\n\ncolnames(iris)\niris$Petal.Length\niris$Sepal.Length",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:28:16.277",
+      "dateUpdated": "2021-06-15 04:12:09.523",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "enabled": true,
@@ -194,32 +201,34 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003col class\u003dlist-inline\u003e\n\t\u003cli\u003e\u0027Sepal.Length\u0027\u003c/li\u003e\n\t\u003cli\u003e\u0027Sepal.Width\u0027\u003c/li\u003e\n\t\u003cli\u003e\u0027Petal.Length\u0027\u003c/li\u003e\n\t\u003cli\u003e\u0027Petal.Width\u0027\u003c/li\u003e\n\t\u003cli\u003e\u0027Species\u0027\u003c/li\u003e\n\u003c/ol\u003e\n\n"
+            "data": "\u003cstyle\u003e\n.list-inline {list-style: none; margin:0; padding: 0}\n.list-inline\u003eli {display: inline-block}\n.list-inline\u003eli:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n\u003c/style\u003e\n\u003col class\u003dlist-inline\u003e\u003cli\u003e\u0027Sepal.Length\u0027\u003c/li\u003e\u003cli\u003e\u0027Sepal.Width\u0027\u003c/li\u003e\u003cli\u003e\u0027Petal.Length\u0027\u003c/li\u003e\u003cli\u003e\u0027Petal.Width\u0027\u003c/li\u003 [...]
           },
           {
             "type": "HTML",
-            "data": "\u003col class\u003dlist-inline\u003e\n\t\u003cli\u003e1.4\u003c/li\u003e\n\t\u003cli\u003e1.4\u003c/li\u003e\n\t\u003cli\u003e1.3\u003c/li\u003e\n\t\u003cli\u003e1.5\u003c/li\u003e\n\t\u003cli\u003e1.4\u003c/li\u003e\n\t\u003cli\u003e1.7\u003c/li\u003e\n\t\u003cli\u003e1.4\u003c/li\u003e\n\t\u003cli\u003e1.5\u003c/li\u003e\n\t\u003cli\u003e1.4\u003c/li\u003e\n\t\u003cli\u003e1.5\u003c/li\u003e\n\t\u003cli\u003e1.5\u003c/li\u003e\n\t\u003cli\u003e1.6\u003c/li\u003e\n [...]
+            "data": "\u003cstyle\u003e\n.list-inline {list-style: none; margin:0; padding: 0}\n.list-inline\u003eli {display: inline-block}\n.list-inline\u003eli:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n\u003c/style\u003e\n\u003col class\u003dlist-inline\u003e\u003cli\u003e1.4\u003c/li\u003e\u003cli\u003e1.4\u003c/li\u003e\u003cli\u003e1.3\u003c/li\u003e\u003cli\u003e1.5\u003c/li\u003e\u003cli\u003e1.4\u003c/li\u003e\u003cli\u003e1.7\u003c/li\u003e\u003cli\u003e1.4 [...]
           },
           {
             "type": "HTML",
-            "data": "\u003col class\u003dlist-inline\u003e\n\t\u003cli\u003e5.1\u003c/li\u003e\n\t\u003cli\u003e4.9\u003c/li\u003e\n\t\u003cli\u003e4.7\u003c/li\u003e\n\t\u003cli\u003e4.6\u003c/li\u003e\n\t\u003cli\u003e5\u003c/li\u003e\n\t\u003cli\u003e5.4\u003c/li\u003e\n\t\u003cli\u003e4.6\u003c/li\u003e\n\t\u003cli\u003e5\u003c/li\u003e\n\t\u003cli\u003e4.4\u003c/li\u003e\n\t\u003cli\u003e4.9\u003c/li\u003e\n\t\u003cli\u003e5.4\u003c/li\u003e\n\t\u003cli\u003e4.8\u003c/li\u003e\n\t\u [...]
+            "data": "\u003cstyle\u003e\n.list-inline {list-style: none; margin:0; padding: 0}\n.list-inline\u003eli {display: inline-block}\n.list-inline\u003eli:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n\u003c/style\u003e\n\u003col class\u003dlist-inline\u003e\u003cli\u003e5.1\u003c/li\u003e\u003cli\u003e4.9\u003c/li\u003e\u003cli\u003e4.7\u003c/li\u003e\u003cli\u003e4.6\u003c/li\u003e\u003cli\u003e5\u003c/li\u003e\u003cli\u003e5.4\u003c/li\u003e\u003cli\u003e4.6\u [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455138077044_161383897",
       "id": "20160210-220117_115873183",
       "dateCreated": "2016-02-10 10:01:17.000",
-      "dateStarted": "2020-02-05 13:28:16.284",
-      "dateFinished": "2020-02-05 13:28:16.368",
+      "dateStarted": "2021-06-15 04:12:09.533",
+      "dateFinished": "2021-06-15 04:12:09.755",
       "status": "FINISHED"
     },
     {
       "title": "TABLE Display",
       "text": "%r.ir\n\nprint(\"%table name\\tsize\\nsmall\\t100\\nlarge\\t1000\")",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:28:23.125",
+      "dateUpdated": "2021-06-15 04:12:09.833",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "enabled": true,
@@ -307,19 +316,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1456216582752_6855525",
       "id": "20160223-093622_330111284",
       "dateCreated": "2016-02-23 09:36:22.000",
-      "dateStarted": "2020-02-05 13:28:23.136",
-      "dateFinished": "2020-02-05 13:28:23.200",
+      "dateStarted": "2021-06-15 04:12:09.841",
+      "dateFinished": "2021-06-15 04:12:09.906",
       "status": "FINISHED"
     },
     {
       "title": "HTML Display",
       "text": "%r.ir \n\nprint(\"%html \u003ch3\u003eHello HTML\u003c/h3\u003e\")\nprint(\"\u003cfont color\u003d\u0027blue\u0027\u003e\u003cspan class\u003d\u0027fa fa-bars\u0027\u003e Easy...\u003c/font\u003e\u003c/span\u003e\")\nfor (i in 1:10) {\n  print(paste0(\"\u003ch4\u003e\", i, \" * 2 \u003d \", i*2, \"\u003c/h4\u003e\"))\n}\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:28:24.867",
+      "dateUpdated": "2021-06-15 04:12:09.940",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "enabled": true,
@@ -362,19 +373,21 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1456140102445_51059930",
       "id": "20160222-122142_1323614681",
       "dateCreated": "2016-02-22 12:21:42.000",
-      "dateStarted": "2020-02-05 13:28:24.877",
-      "dateFinished": "2020-02-05 13:28:24.943",
+      "dateStarted": "2021-06-15 04:12:09.948",
+      "dateFinished": "2021-06-15 04:12:10.019",
       "status": "FINISHED"
     },
     {
       "title": "GoogleVis: Bar Chart",
       "text": "%r.ir\n\nlibrary(googleVis)\ndf\u003ddata.frame(country\u003dc(\"US\", \"GB\", \"BR\"), \n              val1\u003dc(10,13,14), \n              val2\u003dc(23,12,32))\nBar \u003c- gvisBarChart(df)\nprint(Bar, tag \u003d \u0027chart\u0027)\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:45.891",
+      "dateUpdated": "2021-06-15 04:12:10.048",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -409,25 +422,31 @@
         "code": "SUCCESS",
         "msg": [
           {
+            "type": "TEXT",
+            "data": "\nWelcome to googleVis version 0.6.10\n\nPlease read Google\u0027s Terms of Use\nbefore you start using the package:\nhttps://developers.google.com/terms/\n\nNote, the plot method of googleVis will by default use\nthe standard browser to display its output.\n\nSee the googleVis package vignettes for more details,\nor visit https://github.com/mages/googleVis.\n\nTo suppress this message use:\nsuppressPackageStartupMessages(library(googleVis))\n\n\n\n"
+          },
+          {
             "type": "HTML",
-            "data": "\u003c!-- BarChart generated in R 3.5.2 by googleVis 0.6.4 package --\u003e\n\u003c!-- Sat Feb  1 21:08:45 2020 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataBarChartID14dbbec64930 () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"US\",\n10,\n23\n],\n[\n\"GB\",\n13,\n12\n],\n[\n\"BR\",\n14,\n32\n] \n];\ndata.addColumn(\u0027string\u0027,\u0027countr [...]
+            "data": "\u003c!-- BarChart generated in R 3.6.3 by googleVis 0.6.10 package --\u003e\n\u003c!-- Tue Jun 15 04:12:10 2021 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataBarChartID11314b44a97 () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"US\",\n10,\n23\n],\n[\n\"GB\",\n13,\n12\n],\n[\n\"BR\",\n14,\n32\n] \n];\ndata.addColumn(\u0027string\u0027,\u0027countr [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1485626417184_-1153542135",
       "id": "20170129-030017_426747323",
       "dateCreated": "2017-01-29 03:00:17.000",
-      "dateStarted": "2020-02-01 21:08:45.900",
-      "dateFinished": "2020-02-01 21:08:45.964",
+      "dateStarted": "2021-06-15 04:12:10.055",
+      "dateFinished": "2021-06-15 04:12:10.130",
       "status": "FINISHED"
     },
     {
       "title": "GoogleVis: Candlestick Chart",
       "text": "%r.ir\n\nlibrary(googleVis)\n\nCandle \u003c- gvisCandlestickChart(OpenClose, \n                               options\u003dlist(legend\u003d\u0027none\u0027))\n\nprint(Candle, tag \u003d \u0027chart\u0027)\n\n\n\n\n\n\n\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:46.003",
+      "dateUpdated": "2021-06-15 04:12:10.155",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -463,24 +482,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!-- CandlestickChart generated in R 3.5.2 by googleVis 0.6.4 package --\u003e\n\u003c!-- Sat Feb  1 21:08:46 2020 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataCandlestickChartID14dbb431df86b () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Mon\",\n20,\n28,\n38,\n45\n],\n[\n\"Tues\",\n31,\n38,\n55,\n66\n],\n[\n\"Wed\",\n50,\n55,\n77,\n80\n],\ [...]
+            "data": "\u003c!-- CandlestickChart generated in R 3.6.3 by googleVis 0.6.10 package --\u003e\n\u003c!-- Tue Jun 15 04:12:10 2021 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataCandlestickChartID1131164ca3a () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Mon\",\n20,\n28,\n38,\n45\n],\n[\n\"Tues\",\n31,\n38,\n55,\n66\n],\n[\n\"Wed\",\n50,\n55,\n77,\n80\n],\n [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1485627113560_-130863711",
       "id": "20170129-031153_758721410",
       "dateCreated": "2017-01-29 03:11:53.000",
-      "dateStarted": "2020-02-01 21:08:46.013",
-      "dateFinished": "2020-02-01 21:08:46.075",
+      "dateStarted": "2021-06-15 04:12:10.166",
+      "dateFinished": "2021-06-15 04:12:10.228",
       "status": "FINISHED"
     },
     {
       "title": "GoogleVis: Line chart",
       "text": "%r.ir\n\nlibrary(googleVis)\ndf\u003ddata.frame(country\u003dc(\"US\", \"GB\", \"BR\"), \n              val1\u003dc(10,13,14), \n              val2\u003dc(23,12,32))\n\nLine \u003c- gvisLineChart(df)\n\nprint(Line, tag \u003d \u0027chart\u0027)\n\n\n\n\n\n\n\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:46.113",
+      "dateUpdated": "2021-06-15 04:12:10.264",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -516,23 +537,25 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!-- LineChart generated in R 3.5.2 by googleVis 0.6.4 package --\u003e\n\u003c!-- Sat Feb  1 21:08:46 2020 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataLineChartID14dbb1693ff9f () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"US\",\n10,\n23\n],\n[\n\"GB\",\n13,\n12\n],\n[\n\"BR\",\n14,\n32\n] \n];\ndata.addColumn(\u0027string\u0027,\u0027cou [...]
+            "data": "\u003c!-- LineChart generated in R 3.6.3 by googleVis 0.6.10 package --\u003e\n\u003c!-- Tue Jun 15 04:12:10 2021 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataLineChartID1136265da05 () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"US\",\n10,\n23\n],\n[\n\"GB\",\n13,\n12\n],\n[\n\"BR\",\n14,\n32\n] \n];\ndata.addColumn(\u0027string\u0027,\u0027coun [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455138857313_92355963",
       "id": "20160210-221417_1400405266",
       "dateCreated": "2016-02-10 10:14:17.000",
-      "dateStarted": "2020-02-01 21:08:46.126",
-      "dateFinished": "2020-02-01 21:08:46.187",
+      "dateStarted": "2021-06-15 04:12:10.272",
+      "dateFinished": "2021-06-15 04:12:10.342",
       "status": "FINISHED"
     },
     {
       "text": "%r.ir\n\npairs(iris)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:46.225",
+      "dateUpdated": "2021-06-15 04:12:10.372",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -570,23 +593,25 @@
         "msg": [
           {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+F [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGR [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455137735427_-1023869289",
       "id": "20160210-215535_1815168219",
       "dateCreated": "2016-02-10 09:55:35.000",
-      "dateStarted": "2020-02-01 21:08:46.254",
-      "dateFinished": "2020-02-01 21:08:46.553",
+      "dateStarted": "2021-06-15 04:12:10.380",
+      "dateFinished": "2021-06-15 04:12:10.736",
       "status": "FINISHED"
     },
     {
       "text": "%r.ir\n\nplot(iris, col \u003d heat.colors(3))",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:46.559",
+      "dateUpdated": "2021-06-15 04:12:10.781",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -624,23 +649,25 @@
         "msg": [
           {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+F [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAIAAAByhViMAAAACXBIWXMAABJ0AAASdAHeZh94\nAAAgAElEQVR4nOzdZ0AUVxuG4XuX3gWkKAIWLAgEe+8au2Dv3dgTe6z5EmOisfcYTSxRo7Fr\njL33rigWFBuKKFVEetv9fgi2iCFSFtf3+uXunDnzzDI7vjvljEKtViOEEEIIIT5+Sk0HEEII\nIYQQ2UMKOyGEEEIILSGFnRBCCCGElpDCTgghhBBCS0hhJ4QQQgihJaSwE0IIIYTQElLYCSGE\nEEJoCSnshBBCCCG0hBR2QgghhBBaQgo7IYQQQggtIYWdEEIIIYSWkMJOCCGEEEJLSGEnhBBC\nCKElpLATQgghhNASUtgJIYQQQmgJKeyEEEIIIbSEFHZCCCGEEFpCCjshhBBCCC0hhZ0QQggh\nhJaQwk4IIYQQQktIYSeEEEIIoSW [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455137737773_-549089146",
       "id": "20160210-215537_582262164",
       "dateCreated": "2016-02-10 09:55:37.000",
-      "dateStarted": "2020-02-01 21:08:47.327",
-      "dateFinished": "2020-02-01 21:08:47.693",
+      "dateStarted": "2021-06-15 04:12:10.790",
+      "dateFinished": "2021-06-15 04:12:11.061",
       "status": "FINISHED"
     },
     {
       "text": "%r.ir\n\nlibrary(ggplot2)\npres_rating \u003c- data.frame(\n  rating \u003d as.numeric(presidents),\n  year \u003d as.numeric(floor(time(presidents))),\n  quarter \u003d as.numeric(cycle(presidents))\n)\np \u003c- ggplot(pres_rating, aes(x\u003dyear, y\u003dquarter, fill\u003drating))\np + geom_raster()",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:47.739",
+      "dateUpdated": "2021-06-15 04:12:11.087",
+      "progress": 0,
       "config": {
         "colWidth": 4.0,
         "enabled": true,
@@ -678,25 +705,31 @@
         "code": "SUCCESS",
         "msg": [
           {
+            "type": "TEXT",
+            "data": "\nAttaching package: ‘ggplot2’\n\n\nThe following object is masked from ‘package:SparkR’:\n\n    expr\n\n\n\n"
+          },
+          {
             "type": "IMG",
-            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+F [...]
+            "data": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAIAAAByhViMAAAACXBIWXMAABJ0AAASdAHeZh94\nAAAgAElEQVR4nO3deXxU5aH4/zMhqyFssuMGFSwouNSrFNGXerEuxaK+kBYXFK+CVmu9gq2A\n3wIutL1cEau2Ki5U0VIVitQFb6l1o1irgtBbLQjWiqCoSGQL2eb3x9xfGsGGmMnJJM+836/8\nkZk5zznPhDH5eM6cOYlkMhkBANDy5WR6AgAANA5hBwAQCGEHABAIYQcAEAhhBwAQCGEHABAI\nYQcAEAhhBwAQiNxMT+BztmzZUllZmZFN5+fnJxKJnTt3ZmTrLVdBQUFhYeH27dsrKioyPZcW\npqioqKKiIlMv+JarqKgoPz9/y5Yt1dXVmZ5LC1NcXLxjxw4/ty+rdevWrVq1Ki0tzfREWp6S\nkpItW7Y0eHj79u0bcTLZo3mFXXV [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1438930880648_-1572054429",
       "id": "20150807-090120_1060568667",
       "dateCreated": "2015-08-07 09:01:20.000",
-      "dateStarted": "2020-02-01 21:08:47.872",
-      "dateFinished": "2020-02-01 21:08:48.254",
+      "dateStarted": "2021-06-15 04:12:11.093",
+      "dateFinished": "2021-06-15 04:12:11.804",
       "status": "FINISHED"
     },
     {
       "title": "GoogleViz: Bubble Chart",
       "text": "%r.ir\n\nlibrary(googleVis)\nbubble \u003c- gvisBubbleChart(Fruits, idvar\u003d\"Fruit\", \n                          xvar\u003d\"Sales\", yvar\u003d\"Expenses\",\n                          colorvar\u003d\"Year\", sizevar\u003d\"Profit\",\n                          options\u003dlist(\n                            hAxis\u003d\u0027{minValue:75, maxValue:125}\u0027))\nprint(bubble, tag \u003d \u0027chart\u0027)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:48.281",
+      "dateUpdated": "2021-06-15 04:12:11.893",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "enabled": true,
@@ -735,24 +768,26 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!-- BubbleChart generated in R 3.5.2 by googleVis 0.6.4 package --\u003e\n\u003c!-- Sat Feb  1 21:08:48 2020 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataBubbleChartID14dbb18f74c40 () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Apples\",\n98,\n78,\n2008,\n20\n],\n[\n\"Apples\",\n111,\n79,\n2009,\n32\n],\n[\n\"Apples\",\n89,\n76,\n2010,\n13 [...]
+            "data": "\u003c!-- BubbleChart generated in R 3.6.3 by googleVis 0.6.10 package --\u003e\n\u003c!-- Tue Jun 15 04:12:11 2021 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataBubbleChartID113673a4179 () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Apples\",\n98,\n78,\n2008,\n20\n],\n[\n\"Apples\",\n111,\n79,\n2009,\n32\n],\n[\n\"Apples\",\n89,\n76,\n2010,\n13\ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455141578555_-1713165000",
       "id": "20160210-225938_1538591791",
       "dateCreated": "2016-02-10 10:59:38.000",
-      "dateStarted": "2020-02-01 21:08:48.288",
-      "dateFinished": "2020-02-01 21:08:48.350",
+      "dateStarted": "2021-06-15 04:12:11.902",
+      "dateFinished": "2021-06-15 04:12:11.965",
       "status": "FINISHED"
     },
     {
       "title": "GoogleViz: Geo Chart",
       "text": "%r.ir\n\nlibrary(googleVis)\ngeo \u003d gvisGeoChart(Exports, locationvar \u003d \"Country\", colorvar\u003d\"Profit\", options\u003dlist(Projection \u003d \"kavrayskiy-vii\"))\nprint(geo, tag \u003d \u0027chart\u0027)",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:48.393",
+      "dateUpdated": "2021-06-15 04:12:12.002",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "enabled": true,
@@ -791,23 +826,25 @@
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003c!-- GeoChart generated in R 3.5.2 by googleVis 0.6.4 package --\u003e\n\u003c!-- Sat Feb  1 21:08:48 2020 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataGeoChartID14dbb4a0f4acc () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Germany\",\n3\n],\n[\n\"Brazil\",\n4\n],\n[\n\"United States\",\n5\n],\n[\n\"France\",\n4\n],\n[\n\"Hungary\",\n3\n],\n [...]
+            "data": "\u003c!-- GeoChart generated in R 3.6.3 by googleVis 0.6.10 package --\u003e\n\u003c!-- Tue Jun 15 04:12:12 2021 --\u003e\n\n\n\u003c!-- jsHeader --\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n \n// jsData \nfunction gvisDataGeoChartID11351e99d8e () {\nvar data \u003d new google.visualization.DataTable();\nvar datajson \u003d\n[\n [\n\"Germany\",\n3\n],\n[\n\"Brazil\",\n4\n],\n[\n\"United States\",\n5\n],\n[\n\"France\",\n4\n],\n[\n\"Hungary\",\n3\n],\n[ [...]
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1455140544963_1486338978",
       "id": "20160210-224224_735421242",
       "dateCreated": "2016-02-10 10:42:24.000",
-      "dateStarted": "2020-02-01 21:08:48.400",
-      "dateFinished": "2020-02-01 21:08:48.459",
+      "dateStarted": "2021-06-15 04:12:12.014",
+      "dateFinished": "2021-06-15 04:12:12.081",
       "status": "FINISHED"
     },
     {
       "text": "%md\n\n## Congratulations, it\u0027s done.\n### You can create your own notebook in \u0027Notebook\u0027 menu. Good luck!",
       "user": "anonymous",
-      "dateUpdated": "2020-02-01 21:08:48.501",
+      "dateUpdated": "2021-06-15 04:12:12.115",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "enabled": true,
@@ -838,26 +875,27 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1485626988585_-946362813",
       "id": "20170129-030948_1379298104",
       "dateCreated": "2017-01-29 03:09:48.000",
-      "dateStarted": "2020-02-01 21:08:48.511",
-      "dateFinished": "2020-02-01 21:08:48.518",
+      "dateStarted": "2021-06-15 04:12:12.121",
+      "dateFinished": "2021-06-15 04:12:12.133",
       "status": "FINISHED"
     }
   ],
-  "name": "R Basics",
+  "name": "1. R Basics",
   "id": "2BWJFTXKJ",
   "defaultInterpreterGroup": "spark",
-  "permissions": {},
   "noteParams": {},
   "noteForms": {},
   "angularObjects": {},
   "config": {
     "looknfeel": "default",
-    "isZeppelinNotebookCronEnable": true
+    "isZeppelinNotebookCronEnable": false
   },
-  "info": {},
-  "path": "/R Tutorial/R Basics"
+  "info": {
+    "isRunning": true
+  }
 }
\ No newline at end of file
diff --git a/notebook/R Tutorial/2. Shiny App_2EZ66TM57.zpln b/notebook/R Tutorial/2. Shiny App_2EZ66TM57.zpln
index 71f1095..e249c3f 100644
--- a/notebook/R Tutorial/2. Shiny App_2EZ66TM57.zpln	
+++ b/notebook/R Tutorial/2. Shiny App_2EZ66TM57.zpln	
@@ -5,6 +5,7 @@
       "text": "%md\n\n[Shiny](https://shiny.rstudio.com/tutorial/) is an R package that makes it easy to build interactive web applications (apps) straight from R. For developing one Shiny App in Zeppelin, you need to at least 3 paragraphs (server paragraph, ui paragraph and run type paragraph)\n",
       "user": "anonymous",
       "dateUpdated": "2020-02-05 13:31:39.977",
+      "progress": 0,
       "config": {
         "colWidth": 12.0,
         "fontSize": 9.0,
@@ -34,6 +35,7 @@
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580880646006_750270749",
       "id": "paragraph_1580880646006_750270749",
@@ -46,7 +48,8 @@
       "title": "Shiny Server",
       "text": "%r.shiny(type\u003dserver)\n\n# Define server logic to summarize and view selected dataset ----\nserver \u003c- function(input, output) {\n\n    # Return the requested dataset ----\n    datasetInput \u003c- reactive({\n        switch(input$dataset,\n        \"rock\" \u003d rock,\n        \"pressure\" \u003d pressure,\n        \"cars\" \u003d cars)\n    })\n\n    # Generate a summary of the dataset ----\n    output$summary \u003c- renderPrint({\n        dataset \u003c- data [...]
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:31:47.935",
+      "dateUpdated": "2021-06-15 04:12:36.403",
+      "progress": 0,
       "config": {
         "colWidth": 6.0,
         "fontSize": 9.0,
@@ -73,24 +76,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "Write server.R to /var/folders/99/mfxjjdtj7x70rvwgkxpq4jm40000gn/T/zeppelin-shiny2111830164672035139 successfully."
+            "data": "Write server.R to /tmp/zeppelin-shiny831370826037572027 successfully."
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580562566379_-876908296",
       "id": "paragraph_1580562566379_-876908296",
       "dateCreated": "2020-02-01 21:09:26.379",
-      "dateStarted": "2020-02-01 21:11:15.492",
-      "dateFinished": "2020-02-01 21:11:19.233",
+      "dateStarted": "2021-06-15 04:12:36.405",
+      "dateFinished": "2021-06-15 04:12:38.675",
       "status": "FINISHED"
     },
     {
       "title": "Shiny UI",
       "text": "%r.shiny(type\u003dui)\n\n# Define UI for dataset viewer app ----\nui \u003c- fluidPage(\n\n    # App title ----\n    titlePanel(\"Shiny Text\"),\n\n    # Sidebar layout with a input and output definitions ----\n    sidebarLayout(\n\n        # Sidebar panel for inputs ----\n        sidebarPanel(\n    \n            # Input: Selector for choosing dataset ----\n            selectInput(inputId \u003d \"dataset\",\n            label \u003d \"Choose a dataset:\",\n            ch [...]
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:31:54.497",
+      "dateUpdated": "2021-06-15 04:12:39.921",
+      "progress": 0,
       "config": {
         "runOnSelectionChange": true,
         "title": true,
@@ -117,24 +122,26 @@
         "msg": [
           {
             "type": "TEXT",
-            "data": "Write ui.R to /var/folders/99/mfxjjdtj7x70rvwgkxpq4jm40000gn/T/zeppelin-shiny2111830164672035139 successfully."
+            "data": "Write ui.R to /tmp/zeppelin-shiny831370826037572027 successfully."
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580562634044_-1915679343",
       "id": "paragraph_1580562634044_-1915679343",
       "dateCreated": "2020-02-01 21:10:34.044",
-      "dateStarted": "2020-02-01 21:11:20.973",
-      "dateFinished": "2020-02-01 21:11:20.978",
+      "dateStarted": "2021-06-15 04:12:39.923",
+      "dateFinished": "2021-06-15 04:12:39.928",
       "status": "FINISHED"
     },
     {
       "title": "Shiny App",
-      "text": "%r.shiny(type\u003drun)\n\n\n",
+      "text": "%r.shiny(type\u003drun)\n\n",
       "user": "anonymous",
-      "dateUpdated": "2020-02-05 13:32:02.773",
+      "dateUpdated": "2021-06-15 04:14:08.796",
+      "progress": 0,
       "config": {
         "runOnSelectionChange": true,
         "title": true,
@@ -157,39 +164,52 @@
         "forms": {}
       },
       "results": {
-        "code": "ERROR",
+        "code": "SUCCESS",
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003ciframe src\u003d\"http://0.0.0.0:65421\" height \u003d\"500px\" width\u003d\"100%\" frameBorder\u003d\"0\"\u003e\u003c/iframe\u003e\n"
-          },
-          {
-            "type": "TEXT",
-            "data": "\nio.grpc.StatusRuntimeException: UNKNOWN: Exception iterating responses: \u0027payload\u0027\n\tat io.grpc.Status.asRuntimeException(Status.java:526)\n\tat io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:434)\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)\n\tat io.grpc.ForwardingClientC [...]
+            "data": "\u003ciframe src\u003d\"http://172.17.0.2:43947\" height \u003d\"500px\" width\u003d\"100%\" frameBorder\u003d\"0\"\u003e\u003c/iframe\u003e\n"
           }
         ]
       },
       "apps": [],
+      "runtimeInfos": {},
       "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1580562660988_2021181385",
       "id": "paragraph_1580562660988_2021181385",
       "dateCreated": "2020-02-01 21:11:00.988",
-      "dateStarted": "2020-02-01 21:12:51.413",
-      "dateFinished": "2020-02-01 21:12:55.303",
+      "dateStarted": "2021-06-15 04:14:08.798",
+      "dateFinished": "2021-06-15 04:14:27.853",
       "status": "ABORT"
+    },
+    {
+      "text": "%r.shiny\n",
+      "user": "anonymous",
+      "dateUpdated": "2021-06-15 04:12:42.535",
+      "progress": 0,
+      "config": {},
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "apps": [],
+      "runtimeInfos": {},
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1623730362535_1317534129",
+      "id": "paragraph_1623730362535_1317534129",
+      "dateCreated": "2021-06-15 04:12:42.535",
+      "status": "READY"
     }
   ],
-  "name": "Shiny App",
+  "name": "2. Shiny App",
   "id": "2EZ66TM57",
   "defaultInterpreterGroup": "spark",
   "version": "0.9.0-SNAPSHOT",
-  "permissions": {},
   "noteParams": {},
   "noteForms": {},
   "angularObjects": {},
   "config": {
-    "isZeppelinNotebookCronEnable": true
+    "isZeppelinNotebookCronEnable": false
   },
-  "info": {},
-  "path": "/R Tutorial/Shiny App"
+  "info": {}
 }
\ No newline at end of file
diff --git a/scripts/docker/zeppelin/bin/Dockerfile b/scripts/docker/zeppelin/bin/Dockerfile
index c8171ad..0c63bc4 100644
--- a/scripts/docker/zeppelin/bin/Dockerfile
+++ b/scripts/docker/zeppelin/bin/Dockerfile
@@ -17,7 +17,7 @@ FROM ubuntu:20.04
 
 LABEL maintainer="Apache Software Foundation <de...@zeppelin.apache.org>"
 
-ENV Z_VERSION="0.9.0"
+ENV Z_VERSION="0.10.0-SNAPSHOT"
 
 ENV LOG_TAG="[ZEPPELIN_${Z_VERSION}]:" \
     ZEPPELIN_HOME="/opt/zeppelin" \
@@ -59,7 +59,7 @@ RUN set -ex && \
     mamba clean -ay
     # Allow to modify conda packages. This allows malicious code to be injected into other interpreter sessions, therefore it is disabled by default
     # chmod -R ug+rwX /opt/conda
-ENV PATH /opt/conda/bin:$PATH
+ENV PATH /opt/conda/envs/python_3_with_R/bin:/opt/conda/bin:$PATH
 
 RUN echo "$LOG_TAG Download Zeppelin binary" && \
     mkdir -p ${ZEPPELIN_HOME} && \
@@ -77,6 +77,8 @@ RUN echo "$LOG_TAG Download Zeppelin binary" && \
 
 COPY log4j.properties ${ZEPPELIN_HOME}/conf/
 COPY log4j_docker.properties ${ZEPPELIN_HOME}/conf/
+COPY log4j2.properties ${ZEPPELIN_HOME}/conf/
+COPY log4j2_docker.properties ${ZEPPELIN_HOME}/conf/
 
 USER 1000
 
diff --git a/scripts/docker/zeppelin/bin/env_python_3_with_R.yml b/scripts/docker/zeppelin/bin/env_python_3_with_R.yml
index fb88458..140f88d 100644
--- a/scripts/docker/zeppelin/bin/env_python_3_with_R.yml
+++ b/scripts/docker/zeppelin/bin/env_python_3_with_R.yml
@@ -1,33 +1,28 @@
-name: base
+name: python_3_with_R
 channels:
   - conda-forge
   - defaults
 dependencies:
   - pycodestyle
-  - numpy=1
-  - pandas=0.25
-  - scipy=1
+  - scipy
   - grpcio
-  - hvplot
   - protobuf=3
   - pandasql=0.7.3
-  - ipython=7
-  - matplotlib=3
-  - ipykernel=5
-  - jupyter_client=5
-  - bokeh=1.3.4
-  - panel
-  - holoviews
+  - ipython
+  - ipykernel
+  - jupyter_client
+  - hvplot
   - pyyaml=3
-  - altair
-  - intake
   - plotnine
   - seaborn
+  - intake
+  - intake-parquet
+  - intake-xarray
+  - altair
+  - vega_datasets
   - pip
-  - pip:
-    - bkzep==0.6.1
-
   - r-base=3
+  - r-data.table
   - r-evaluate
   - r-base64enc
   - r-knitr
diff --git a/scripts/docker/zeppelin/bin/log4j2.properties b/scripts/docker/zeppelin/bin/log4j2.properties
new file mode 100644
index 0000000..353ca40
--- /dev/null
+++ b/scripts/docker/zeppelin/bin/log4j2.properties
@@ -0,0 +1,49 @@
+################################################################################
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+# This affects logging for both user code and Flink
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = MainAppender
+
+# Uncomment this if you want to _only_ change Flink's logging
+#logger.flink.name = org.apache.flink
+#logger.flink.level = INFO
+
+# The following lines keep the log level of common libraries/connectors on
+# log level INFO. The root logger does not override this. You have to manually
+# change the log levels here.
+logger.akka.name = akka
+logger.akka.level = INFO
+logger.kafka.name= org.apache.kafka
+logger.kafka.level = INFO
+logger.hadoop.name = org.apache.hadoop
+logger.hadoop.level = INFO
+logger.zookeeper.name = org.apache.zookeeper
+logger.zookeeper.level = INFO
+
+# Log all infos in the given file
+appender.main.name = MainAppender
+appender.main.type = File
+appender.main.append = false
+appender.main.fileName = ${sys:zeppelin.log.file}
+appender.main.layout.type = PatternLayout
+appender.main.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
+
+# Suppress the irrelevant (wrong) warnings from the Netty channel handler
+logger.netty.name = org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline
+logger.netty.level = OFF
diff --git a/scripts/docker/zeppelin/bin/log4j2_docker.properties b/scripts/docker/zeppelin/bin/log4j2_docker.properties
new file mode 100644
index 0000000..353ca40
--- /dev/null
+++ b/scripts/docker/zeppelin/bin/log4j2_docker.properties
@@ -0,0 +1,49 @@
+################################################################################
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+# This affects logging for both user code and Flink
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = MainAppender
+
+# Uncomment this if you want to _only_ change Flink's logging
+#logger.flink.name = org.apache.flink
+#logger.flink.level = INFO
+
+# The following lines keep the log level of common libraries/connectors on
+# log level INFO. The root logger does not override this. You have to manually
+# change the log levels here.
+logger.akka.name = akka
+logger.akka.level = INFO
+logger.kafka.name= org.apache.kafka
+logger.kafka.level = INFO
+logger.hadoop.name = org.apache.hadoop
+logger.hadoop.level = INFO
+logger.zookeeper.name = org.apache.zookeeper
+logger.zookeeper.level = INFO
+
+# Log all infos in the given file
+appender.main.name = MainAppender
+appender.main.type = File
+appender.main.append = false
+appender.main.fileName = ${sys:zeppelin.log.file}
+appender.main.layout.type = PatternLayout
+appender.main.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
+
+# Suppress the irrelevant (wrong) warnings from the Netty channel handler
+logger.netty.name = org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline
+logger.netty.level = OFF