Modified: zeppelin/site/docs/0.8.0-SNAPSHOT/search.html
URL: 
http://svn.apache.org/viewvc/zeppelin/site/docs/0.8.0-SNAPSHOT/search.html?rev=1791664&r1=1791663&r2=1791664&view=diff
==============================================================================
--- zeppelin/site/docs/0.8.0-SNAPSHOT/search.html (original)
+++ zeppelin/site/docs/0.8.0-SNAPSHOT/search.html Mon Apr 17 07:01:48 2017
@@ -164,10 +164,11 @@
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/security/notebook_authorization.html">Notebook 
Authorization</a></li>
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/security/datasource_authorization.html">Data Source 
Authorization</a></li>
                 <li role="separator" class="divider"></li>
-                <li class="title"><span><b>Helium Framework</b><span></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinapplication.html">Writing 
Zeppelin Application (Experimental)</a></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinspell.html">Writing 
Zeppelin Spell (Experimental)</a></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization.html">Writing
 Zeppelin Visualization (Experimental)</a></li>
+                <li class="title"><span><b>Helium Framework 
(Experimental)</b></span></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinapplication.html">Writing 
Zeppelin Application</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinspell.html">Writing 
Zeppelin Spell</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization.html">Writing
 Zeppelin Visualization: Basics</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization_transformation.html">Writing
 Zeppelin Visualization: Transformation</a></li>
                 <li role="separator" class="divider"></li>
                 <li class="title"><span><b>Advanced</b><span></li>
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/install/virtual_machine.html">Zeppelin on Vagrant 
VM</a></li>

Modified: zeppelin/site/docs/0.8.0-SNAPSHOT/search_data.json
URL: 
http://svn.apache.org/viewvc/zeppelin/site/docs/0.8.0-SNAPSHOT/search_data.json?rev=1791664&r1=1791663&r2=1791664&view=diff
==============================================================================
--- zeppelin/site/docs/0.8.0-SNAPSHOT/search_data.json (original)
+++ zeppelin/site/docs/0.8.0-SNAPSHOT/search_data.json Mon Apr 17 07:01:48 2017
@@ -26,8 +26,8 @@
   
 
     "/development/writingzeppelinapplication.html": {
-      "title": "Writing a new Application(Experimental)",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new Application 
(Experimental)What is Apache Zeppelin ApplicationApache Zeppelin Application is 
a package that runs on Interpreter process and displays it&amp;#39;s output 
inside of the notebook. While application runs on Interpreter process, 
it&amp;#39;s able to access resources provided by Interpreter through 
ResourcePool. Output is always rendered by AngularDisplaySystem. Therefore 
application provides all the possibli
 ties of making interactive graphical application that uses data and processing 
power of any Interpreter.Make your own ApplicationWriting Application means 
extending org.apache.zeppelin.helium.Application. You can use your favorite IDE 
and language while Java class files are packaged into jar. Application class 
looks like/** * Constructor. Invoked when application is loaded */public 
Application(ApplicationContext context);/** * Invoked when there&amp;#39;re 
(possible) updates in required resource set. * i.e. invoked after application 
load and after paragraph finishes. */public abstract void run(ResourceSet 
args);/** * Invoked before application unload. * Application is automatically 
unloaded with paragraph/notebook removal */public abstract void unload();You 
can check example applications under ./zeppelin-examples directory.Development 
modeIn the development mode, you can run your Application in your IDE as a 
normal java application and see the result inside of Zeppelin notebook.org.
 apache.zeppelin.helium.ZeppelinApplicationDevServer can run Zeppelin 
Application in development mode.// entry point for development modepublic 
static void main(String[] args) throws Exception {  // add resources for 
development mode  LocalResourcePool pool = new 
LocalResourcePool(&amp;quot;dev&amp;quot;);  pool.put(&amp;quot;date&amp;quot;, 
new Date());  // run application in devlopment mode with given resource  // in 
this case, Clock.class.getName() will be the application class name    
org.apache.zeppelin.helium.ZeppelinApplicationDevServer devServer = new 
org.apache.zeppelin.helium.ZeppelinApplicationDevServer(    
Clock.class.getName(), pool.getAll());  // start development mode  
devServer.start();  devServer.join();}In the Zeppelin notebook, run %dev run 
will connect to application running in development mode.Package filePackage 
file is a json file that provides information about the application.Json file 
contains the following information{  name : &amp;quot;[organization].[name
 ]&amp;quot;,  description : &amp;quot;Description&amp;quot;,  artifact : 
&amp;quot;groupId:artifactId:version&amp;quot;,  className : 
&amp;quot;your.package.name.YourApplicationClass&amp;quot;,  resources : [    
[&amp;quot;resource.name&amp;quot;, &amp;quot;:resource.class.name&amp;quot;],  
  [&amp;quot;alternative.resource.name&amp;quot;, 
&amp;quot;:alternative.class.name&amp;quot;]  ],  icon : &amp;quot;&amp;lt;i 
class=&amp;quot;icon&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;}nameName is 
a string in [group].[name] format.[group] and [name] allow only 
[A-Za-z0-9_].Group is normally the name of an organization who creates this 
application.descriptionA short description about the 
applicationartifactLocation of the jar 
artifact.&amp;quot;groupId:artifactId:version&amp;quot; will load artifact from 
maven repository.If jar exists in the local filesystem, absolute/relative can 
be used.e.g.When artifact exists in Maven repositoryartifact: 
&amp;quot;org.apache.zeppelin:zeppelin-examples
 :0.6.0&amp;quot;When artifact exists in the local filesystemartifact: 
&amp;quot;zeppelin-example/target/zeppelin-example-0.6.0.jar&amp;quot;classNameEntry
 point. Class that extends org.apache.zeppelin.helium.ApplicationresourcesTwo 
dimensional array that defines required resources by name or by className. 
Helium Application launcher will compare resources in the ResourcePool with the 
information in this field and suggest application only when all required 
resources are available in the ResourcePool.Resouce name is a string which will 
be compared with the name of objects in the ResourcePool. className is a string 
with &amp;quot;:&amp;quot; prepended, which will be compared with className of 
the objects in the ResourcePool.Application may require two or more resources. 
Required resources can be listed inside of the json array. For example, if the 
application requires object &amp;quot;name1&amp;quot;, 
&amp;quot;name2&amp;quot; and &amp;quot;className1&amp;quot; type of object to 
run, r
 esources field can beresources: [  [ &amp;quot;name1&amp;quot;, 
&amp;quot;name2&amp;quot;, &amp;quot;:className1&amp;quot;, ...]]If Application 
can handle alternative combination of required resources, alternative set can 
be listed as below.resources: [  [ &amp;quot;name&amp;quot;, 
&amp;quot;:className&amp;quot;],  [ &amp;quot;altName&amp;quot;, 
&amp;quot;:altClassName1&amp;quot;],  ...]Easier way to understand this scheme 
isresources: [   [ &amp;#39;resource&amp;#39; AND &amp;#39;resource&amp;#39; 
AND ... ] OR   [ &amp;#39;resource&amp;#39; AND &amp;#39;resource&amp;#39; AND 
... ] OR   ...]iconIcon to be used on the application button. String in this 
field will be rendered as a HTML tag.e.g.icon: &amp;quot;&amp;lt;i 
class=&amp;#39;fa fa-clock-o&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;",
+      "title": "Writing a new Application",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new 
ApplicationWhat is Apache Zeppelin ApplicationApache Zeppelin Application is a 
package that runs on Interpreter process and displays it&amp;#39;s output 
inside of the notebook. While application runs on Interpreter process, 
it&amp;#39;s able to access resources provided by Interpreter through 
ResourcePool. Output is always rendered by AngularDisplaySystem. Therefore 
application provides all the possiblities of making 
 interactive graphical application that uses data and processing power of any 
Interpreter.Make your own ApplicationWriting Application means extending 
org.apache.zeppelin.helium.Application. You can use your favorite IDE and 
language while Java class files are packaged into jar. Application class looks 
like/** * Constructor. Invoked when application is loaded */public 
Application(ApplicationContext context);/** * Invoked when there&amp;#39;re 
(possible) updates in required resource set. * i.e. invoked after application 
load and after paragraph finishes. */public abstract void run(ResourceSet 
args);/** * Invoked before application unload. * Application is automatically 
unloaded with paragraph/notebook removal */public abstract void unload();You 
can check example applications under ./zeppelin-examples directory.Development 
modeIn the development mode, you can run your Application in your IDE as a 
normal java application and see the result inside of Zeppelin 
notebook.org.apache.zeppelin
 .helium.ZeppelinApplicationDevServer can run Zeppelin Application in 
development mode.// entry point for development modepublic static void 
main(String[] args) throws Exception {  // add resources for development mode  
LocalResourcePool pool = new LocalResourcePool(&amp;quot;dev&amp;quot;);  
pool.put(&amp;quot;date&amp;quot;, new Date());  // run application in 
devlopment mode with given resource  // in this case, Clock.class.getName() 
will be the application class name    
org.apache.zeppelin.helium.ZeppelinApplicationDevServer devServer = new 
org.apache.zeppelin.helium.ZeppelinApplicationDevServer(    
Clock.class.getName(), pool.getAll());  // start development mode  
devServer.start();  devServer.join();}In the Zeppelin notebook, run %dev run 
will connect to application running in development mode.Package filePackage 
file is a json file that provides information about the application.Json file 
contains the following information{  &amp;quot;name&amp;quot; : 
&amp;quot;[organization].
 [name]&amp;quot;,  &amp;quot;description&amp;quot; : 
&amp;quot;Description&amp;quot;,  &amp;quot;artifact&amp;quot; : 
&amp;quot;groupId:artifactId:version&amp;quot;,  &amp;quot;className&amp;quot; 
: &amp;quot;your.package.name.YourApplicationClass&amp;quot;,  
&amp;quot;resources&amp;quot; : [    [&amp;quot;resource.name&amp;quot;, 
&amp;quot;:resource.class.name&amp;quot;],    
[&amp;quot;alternative.resource.name&amp;quot;, 
&amp;quot;:alternative.class.name&amp;quot;]  ],  &amp;quot;icon&amp;quot; : 
&amp;quot;&amp;lt;i 
class=&amp;#39;icon&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;}nameName is a 
string in [group].[name] format.[group] and [name] allow only 
[A-Za-z0-9_].Group is normally the name of an organization who creates this 
application.descriptionA short description about the 
applicationartifactLocation of the jar 
artifact.&amp;quot;groupId:artifactId:version&amp;quot; will load artifact from 
maven repository.If jar exists in the local filesystem, absolute/relative can 
be use
 d.e.g.When artifact exists in Maven repositoryartifact: 
&amp;quot;org.apache.zeppelin:zeppelin-examples:0.6.0&amp;quot;When artifact 
exists in the local filesystemartifact: 
&amp;quot;zeppelin-example/target/zeppelin-example-0.6.0.jar&amp;quot;classNameEntry
 point. Class that extends org.apache.zeppelin.helium.ApplicationresourcesTwo 
dimensional array that defines required resources by name or by className. 
Helium Application launcher will compare resources in the ResourcePool with the 
information in this field and suggest application only when all required 
resources are available in the ResourcePool.Resouce name is a string which will 
be compared with the name of objects in the ResourcePool. className is a string 
with &amp;quot;:&amp;quot; prepended, which will be compared with className of 
the objects in the ResourcePool.Application may require two or more resources. 
Required resources can be listed inside of the json array. For example, if the 
application requires object &amp;quot
 ;name1&amp;quot;, &amp;quot;name2&amp;quot; and &amp;quot;className1&amp;quot; 
type of object to run, resources field can beresources: [  [ 
&amp;quot;name1&amp;quot;, &amp;quot;name2&amp;quot;, 
&amp;quot;:className1&amp;quot;, ...]]If Application can handle alternative 
combination of required resources, alternative set can be listed as 
below.resources: [  [ &amp;quot;name&amp;quot;, 
&amp;quot;:className&amp;quot;],  [ &amp;quot;altName&amp;quot;, 
&amp;quot;:altClassName1&amp;quot;],  ...]Easier way to understand this scheme 
isresources: [   [ &amp;#39;resource&amp;#39; AND &amp;#39;resource&amp;#39; 
AND ... ] OR   [ &amp;#39;resource&amp;#39; AND &amp;#39;resource&amp;#39; AND 
... ] OR   ...]iconIcon to be used on the application button. String in this 
field will be rendered as a HTML tag.e.g.icon: &amp;quot;&amp;lt;i 
class=&amp;#39;fa fa-clock-o&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;",
       "url": " /development/writingzeppelinapplication.html",
       "group": "development",
       "excerpt": "Apache Zeppelin Application is a package that runs on 
Interpreter process and displays it's output inside of the notebook. Make your 
own Application in Apache Zeppelin is quite easy."
@@ -48,8 +48,8 @@
   
 
     "/development/writingzeppelinspell.html": {
-      "title": "Writing a new Spell(Experimental)",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new Spell 
(Experimental)What is Apache Zeppelin SpellSpell is a kind of interpreter that 
runs on browser not on backend. So, technically it&amp;#39;s the frontend 
interpreter. It can provide many benefits.Spell is pluggable frontend 
interpreter. So it can be installed and removed easily using helium registry. 
Every spell is written in javascript. It means you can use existing javascript 
libraries whatever you want.Spell r
 uns on browser like display system (%html, %table). In other words, every 
spell can be used as display system as well.How it worksHelium Spell works like 
Helium Visualization.Every helium packages are loaded from central (online) 
registry or local registryYou can see loaded packages in /helium page.When you 
enable a spell, it&amp;#39;s built from server and sent to clientFinally it 
will be loaded into browser.How to use spell1. EnablingFind a spell what you 
want to use in /helium package and click Enable button.2. UsingSpell works like 
an interpreter. Use the MAGIC value to execute spell in a note. (you might need 
to refresh after enabling)For example, Use %echo for the Echo Spell.Write a new 
SpellMaking a new spell is similar to Helium 
Visualization#write-new-visualization.Add framework dependency called 
zeppelin-spell into package.jsonWrite code using frameworkPublish your spell to 
npm1. Create a npm packageCreate a package.json in new directory for spell. You 
have to add a framew
 ork called zeppelin-spell as a dependency to create spell 
(zeppelin-spell)Also, you can add any dependencies you want to 
utilise.Here&amp;#39;s an example{  &amp;quot;name&amp;quot;: 
&amp;quot;zeppelin-echo-spell&amp;quot;,  &amp;quot;description&amp;quot;: 
&amp;quot;Zeppelin Echo Spell (example)&amp;quot;,  
&amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,  
&amp;quot;main&amp;quot;: &amp;quot;index&amp;quot;,  
&amp;quot;author&amp;quot;: &amp;quot;&amp;quot;,  &amp;quot;license&amp;quot;: 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;dependencies&amp;quot;: {    
&amp;quot;zeppelin-spell&amp;quot;: &amp;quot;*&amp;quot;  },  
&amp;quot;helium&amp;quot;: {    &amp;quot;icon&amp;quot; : &amp;quot;&amp;lt;i 
class=&amp;#39;fa fa-repeat&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;,    
&amp;quot;spell&amp;quot;: {      &amp;quot;magic&amp;quot;: 
&amp;quot;%echo&amp;quot;,      &amp;quot;usage&amp;quot;: &amp;quot;%echo 
&amp;lt;TEXT&amp;gt;&amp;quot;    }  }}2. Write spell using framewor
 kHere are some examples you can referEcho SpellMarkdown Spell: Using 
libraryFlowchart Spell: Using DOMGoogle Translation API Spell: Using API 
(returning promise)Now, you need to write code to create spell which processing 
text.import {    SpellBase,    SpellResult,    DefaultDisplayType,} from 
&amp;#39;zeppelin-spell&amp;#39;;export default class EchoSpell extends 
SpellBase {    constructor() {        /** pass magic to super class&amp;#39;s 
constructor parameter */        super(&amp;quot;%echo&amp;quot;);    }    
interpret(paragraphText) {        const processed = paragraphText + 
&amp;#39;!&amp;#39;;        /**          * should return `SpellResult` which 
including `data` and `type`         * default type is `TEXT` if you 
don&amp;#39;t specify.           */        return new SpellResult(processed);   
 }}Here is another example. Let&amp;#39;s say we want to create markdown spell. 
First of all, we should add a dependency for markdown in package.json// 
package.json &amp;quot;dependenci
 es&amp;quot;: {    &amp;quot;markdown&amp;quot;: &amp;quot;0.5.0&amp;quot;,    
&amp;quot;zeppelin-spell&amp;quot;: &amp;quot;*&amp;quot;  },And here is spell 
code.import {    SpellBase,    SpellResult,    DefaultDisplayType,} from 
&amp;#39;zeppelin-spell&amp;#39;;import md from 
&amp;#39;markdown&amp;#39;;const markdown = md.markdown;export default class 
MarkdownSpell extends SpellBase {    constructor() {        
super(&amp;quot;%markdown&amp;quot;);    }    interpret(paragraphText) {        
const parsed = markdown.toHTML(paragraphText);        /**         * specify 
`DefaultDisplayType.HTML` since `parsed` will contain DOM         * otherwise 
it will be rendered as `DefaultDisplayType.TEXT` (default)         */        
return new SpellResult(parsed, DefaultDisplayType.HTML);    }}You might want to 
manipulate DOM directly (e.g google d3.js), then refer Flowchart Spell You 
might want to return promise not string (e.g API call), then refer Google 
Translation API Spell3. Create Helium pac
 kage file for local deploymentYou don&amp;#39;t want to publish your package 
every time you make a change in your spell. Zeppelin provides local deploy.The 
only thing you need to do is creating a Helium Package file (JSON) for local 
deploy. It&amp;#39;s automatically created when you publish to npm repository 
but in local case, you should make it by yourself.{  &amp;quot;type&amp;quot; : 
&amp;quot;SPELL&amp;quot;,  &amp;quot;name&amp;quot; : 
&amp;quot;zeppelin-echo-spell&amp;quot;,  &amp;quot;version&amp;quot;: 
&amp;quot;1.0.0&amp;quot;,  &amp;quot;description&amp;quot; : &amp;quot;Return 
just what receive (example)&amp;quot;,  &amp;quot;artifact&amp;quot; : 
&amp;quot;./zeppelin-examples/zeppelin-example-spell-echo&amp;quot;,  
&amp;quot;license&amp;quot; : &amp;quot;Apache-2.0&amp;quot;,  
&amp;quot;spell&amp;quot;: {    &amp;quot;magic&amp;quot;: 
&amp;quot;%echo&amp;quot;,    &amp;quot;usage&amp;quot;: &amp;quot;%echo 
&amp;lt;TEXT&amp;gt;&amp;quot;  }}Place this file in your local r
 egistry directory (default $ZEPPELIN_HOME/helium).type should be SPELLMake 
sure that artifact should be same as your spell directory. You can get 
information about other fields in Helium 
Visualization#3-create-helium-package-file-and-locally-deploy.4. Run in dev 
modecd zeppelin-webyarn run dev:helium You can browse localhost:9000. Every 
time refresh your browser, Zeppelin will rebuild your spell and reload 
changes.5. Publish your spell to the npm repositorySee Publishing npm packages",
+      "title": "Writing a new Spell",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new SpellWhat is 
Apache Zeppelin SpellSpell is a kind of interpreter that runs on browser not on 
backend. So, technically it&amp;#39;s the frontend interpreter.It can provide 
many benefits.Spell is pluggable frontend interpreter. So it can be installed 
and removed easily using helium registry.Every spell is written in javascript. 
It means you can use existing javascript libraries whatever you want.Spell runs 
on browser li
 ke display system (%html, %table). In other words, every spell can be used as 
display system as well.How it worksHelium Spell works like Helium 
Visualization.Every helium packages are loaded from central (online) registry 
or local registryYou can see loaded packages in /helium page.When you enable a 
spell, it&amp;#39;s built from server and sent to clientFinally it will be 
loaded into browser.How to use spell1. EnablingFind a spell what you want to 
use in /helium package and click Enable button.2. UsingSpell works like an 
interpreter. Use the MAGIC value to execute spell in a note. (you might need to 
refresh after enabling)For example, Use %echo for the Echo Spell.Write a new 
SpellMaking a new spell is similar to Helium 
Visualization#write-new-visualization.Add framework dependency called 
zeppelin-spell into package.jsonWrite code using frameworkPublish your spell to 
npm1. Create a npm packageCreate a package.json in new directory for spell.You 
have to add a framework called zeppeli
 n-spell as a dependency to create spell (zeppelin-spell)Also, you can add any 
dependencies you want to utilise.Here&amp;#39;s an example{  
&amp;quot;name&amp;quot;: &amp;quot;zeppelin-echo-spell&amp;quot;,  
&amp;quot;description&amp;quot;: &amp;quot;Zeppelin Echo Spell 
(example)&amp;quot;,  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,  
&amp;quot;main&amp;quot;: &amp;quot;index&amp;quot;,  
&amp;quot;author&amp;quot;: &amp;quot;&amp;quot;,  &amp;quot;license&amp;quot;: 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;dependencies&amp;quot;: {    
&amp;quot;zeppelin-spell&amp;quot;: &amp;quot;*&amp;quot;  },  
&amp;quot;helium&amp;quot;: {    &amp;quot;icon&amp;quot; : &amp;quot;&amp;lt;i 
class=&amp;#39;fa fa-repeat&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;,    
&amp;quot;spell&amp;quot;: {      &amp;quot;magic&amp;quot;: 
&amp;quot;%echo&amp;quot;,      &amp;quot;usage&amp;quot;: &amp;quot;%echo 
&amp;lt;TEXT&amp;gt;&amp;quot;    }  }}2. Write spell using frameworkHere are 
some exa
 mples you can referEcho SpellMarkdown Spell: Using libraryFlowchart Spell: 
Using DOMGoogle Translation API Spell: Using API (returning promise)Now, you 
need to write code to create spell which processing text.import {    SpellBase, 
   SpellResult,    DefaultDisplayType,} from 
&amp;#39;zeppelin-spell&amp;#39;;export default class EchoSpell extends 
SpellBase {    constructor() {        /** pass magic to super class&amp;#39;s 
constructor parameter */        super(&amp;quot;%echo&amp;quot;);    }    
interpret(paragraphText) {        const processed = paragraphText + 
&amp;#39;!&amp;#39;;        /**         * should return `SpellResult` which 
including `data` and `type`         * default type is `TEXT` if you 
don&amp;#39;t specify.           */        return new SpellResult(processed);   
 }}Here is another example. Let&amp;#39;s say we want to create markdown spell. 
First of all, we should add a dependency for markdown in package.json// 
package.json &amp;quot;dependencies&amp;quot;: {    
 &amp;quot;markdown&amp;quot;: &amp;quot;0.5.0&amp;quot;,    
&amp;quot;zeppelin-spell&amp;quot;: &amp;quot;*&amp;quot;  },And here is spell 
code.import {    SpellBase,    SpellResult,    DefaultDisplayType,} from 
&amp;#39;zeppelin-spell&amp;#39;;import md from 
&amp;#39;markdown&amp;#39;;const markdown = md.markdown;export default class 
MarkdownSpell extends SpellBase {    constructor() {        
super(&amp;quot;%markdown&amp;quot;);    }    interpret(paragraphText) {        
const parsed = markdown.toHTML(paragraphText);        /**         * specify 
`DefaultDisplayType.HTML` since `parsed` will contain DOM         * otherwise 
it will be rendered as `DefaultDisplayType.TEXT` (default)         */        
return new SpellResult(parsed, DefaultDisplayType.HTML);    }}You might want to 
manipulate DOM directly (e.g google d3.js), then refer Flowchart SpellYou might 
want to return promise not string (e.g API call), then refer Google Translation 
API Spell3. Create Helium package file for local 
 deploymentYou don&amp;#39;t want to publish your package every time you make a 
change in your spell. Zeppelin provides local deploy.The only thing you need to 
do is creating a Helium Package file (JSON) for local deploy.It&amp;#39;s 
automatically created when you publish to npm repository but in local case, you 
should make it by yourself.{  &amp;quot;type&amp;quot; : 
&amp;quot;SPELL&amp;quot;,  &amp;quot;name&amp;quot; : 
&amp;quot;zeppelin-echo-spell&amp;quot;,  &amp;quot;version&amp;quot;: 
&amp;quot;1.0.0&amp;quot;,  &amp;quot;description&amp;quot; : &amp;quot;Return 
just what receive (example)&amp;quot;,  &amp;quot;artifact&amp;quot; : 
&amp;quot;./zeppelin-examples/zeppelin-example-spell-echo&amp;quot;,  
&amp;quot;license&amp;quot; : &amp;quot;Apache-2.0&amp;quot;,  
&amp;quot;spell&amp;quot;: {    &amp;quot;magic&amp;quot;: 
&amp;quot;%echo&amp;quot;,    &amp;quot;usage&amp;quot;: &amp;quot;%echo 
&amp;lt;TEXT&amp;gt;&amp;quot;  }}Place this file in your local registry 
directory (de
 fault $ZEPPELIN_HOME/helium).type should be SPELLMake sure that artifact 
should be same as your spell directory.You can get information about other 
fields in Helium 
Visualization#3-create-helium-package-file-and-locally-deploy.4. Run in dev 
modecd zeppelin-webyarn run dev:heliumYou can browse localhost:9000. Every time 
refresh your browser, Zeppelin will rebuild your spell and reload changes.5. 
Publish your spell to the npm repositorySee Publishing npm packages",
       "url": " /development/writingzeppelinspell.html",
       "group": "development",
       "excerpt": "Spell is a kind of interpreter that runs on browser not on 
backend. So, technically it's the frontend interpreter. "
@@ -59,8 +59,8 @@
   
 
     "/development/writingzeppelinvisualization.html": {
-      "title": "Writing a new Visualization(Experimental)",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new Visualization 
(Experimental)What is Apache Zeppelin VisualizationApache Zeppelin 
Visualization is a pluggable package that can be loaded/unloaded on runtime 
through Helium framework in Zeppelin. A Visualization is a javascript npm 
package and user can use them just like any other built-in visualization in 
notebook.How it works1. Load Helium package files from registryZeppelin needs 
to know what Visualization packages 
 are available. Zeppelin will read information of packages from both online and 
local registry.Registries are configurable through 
ZEPPELIN_HELIUM_LOCALREGISTRY_DEFAULT env variable or 
zeppelin.helium.localregistry.default property.2. Enable packagesOnce Zeppelin 
loads Helium package files from registries, available packages are displayed in 
Helium menu.Click &amp;#39;enable&amp;#39; button.3. Create and load 
visualization bundle on the flyOnce a Visualization package is enabled, 
HeliumBundleFactory creates a js bundle. The js bundle is served by 
helium/bundle/load rest api endpoint.4. Run visualizationZeppelin shows 
additional button for loaded Visualizations.User can use just like any other 
built-in visualizations.Write new Visualization1. Create a npm packageCreate a 
package.json in your new Visualization directory. Normally, you can add any 
dependencies in package.json however Zeppelin Visualization package only allows 
two dependencies: zeppelin-vis and zeppelin-tabledata.Here&am
 p;#39;s an example{  &amp;quot;name&amp;quot;: 
&amp;quot;zeppelin_horizontalbar&amp;quot;,  &amp;quot;description&amp;quot; : 
&amp;quot;Horizontal Bar chart&amp;quot;,  &amp;quot;version&amp;quot;: 
&amp;quot;1.0.0&amp;quot;,  &amp;quot;main&amp;quot;: 
&amp;quot;horizontalbar&amp;quot;,  &amp;quot;author&amp;quot;: 
&amp;quot;&amp;quot;,  &amp;quot;license&amp;quot;: 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;dependencies&amp;quot;: {    
&amp;quot;zeppelin-tabledata&amp;quot;: &amp;quot;*&amp;quot;,    
&amp;quot;zeppelin-vis&amp;quot;: &amp;quot;*&amp;quot;  }}2. Create your own 
visualizationTo create your own visualization, you need to create a js file and 
import Visualization class from zeppelin-vis package and extend the class. 
zeppelin-tabledata package provides some useful transformations, like pivot, 
you can use in your visualization. (you can create your own transformation, 
too).Visualization class, there&amp;#39;re several methods that you need to 
override and implement. Here&
 amp;#39;s simple visualization that just prints Hello world.import 
Visualization from &amp;#39;zeppelin-vis&amp;#39;import 
PassthroughTransformation from 
&amp;#39;zeppelin-tabledata/passthrough&amp;#39;export default class helloworld 
extends Visualization {  constructor(targetEl, config) {    super(targetEl, 
config)    this.passthrough = new PassthroughTransformation(config);  }  
render(tableData) {    this.targetEl.html(&amp;#39;Hello world!&amp;#39;)  }  
getTransformation() {    return this.passthrough  }}To learn more about 
Visualization class, check visualization.js.You can check complete 
visualization package example here.Zeppelin&amp;#39;s built-in visualization 
uses the same API, so you can check built-in visualizations as additional 
examples.3. Create Helium package file and locally deployHelium Package file is 
a json file that provides information about the application.Json file contains 
the following information{  &amp;quot;type&amp;quot; : 
&amp;quot;VISUALIZATION&amp;quot
 ;,  &amp;quot;name&amp;quot; : &amp;quot;zeppelin_horizontalbar&amp;quot;,  
&amp;quot;description&amp;quot; : &amp;quot;Horizontal Bar chart 
(example)&amp;quot;,  &amp;quot;license&amp;quot; : 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;artifact&amp;quot; : 
&amp;quot;./zeppelin-examples/zeppelin-example-horizontalbar&amp;quot;,  
&amp;quot;icon&amp;quot; : &amp;quot;&amp;lt;i class=&amp;#39;fa fa-bar-chart 
rotate90flipX&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;}Place this file in 
your local registry directory (default ./helium).typeWhen you&amp;#39;re 
creating a visualization, &amp;#39;type&amp;#39; should be 
&amp;#39;VISUALIZATION&amp;#39;.Check application type if you&amp;#39;re 
interested in the other types of package.nameName of visualization. Should be 
unique. Allows [A-Za-z90-9_].descriptionA short description about 
visualization.artifactLocation of the visualization npm package. Support npm 
package with version or local filesystem path.e.g.When artifact exists in npm 
reposit
 oryartifact: &amp;quot;my-visualiztion@1.0.0&amp;quot;When artifact exists in 
local file systemartifact: 
&amp;quot;/path/to/my/visualization&amp;quot;licenseLicense 
information.e.g.license: &amp;quot;Apache-2.0&amp;quot;iconIcon to be used in 
visualization select button. String in this field will be rendered as a HTML 
tag.e.g.icon: &amp;quot;&amp;lt;i class=&amp;#39;fa 
fa-coffee&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;4. Run in dev modePlace 
your Helium package file in local registry (ZEPPELIN_HOME/helium).Run Zeppelin. 
And then run zeppelin-web in visualization dev mode.cd zeppelin-webyarn run 
dev:helium You can browse localhost:9000. Everytime refresh your browser, 
Zeppelin will rebuild your visualization and reload changes.5. Publish your 
visualizationOnce it&amp;#39;s done, publish your visualization package using 
npm publish.That&amp;#39;s it. With in an hour, your visualization will be 
available in Zeppelin&amp;#39;s helium menu.",
+      "title": "Writing a new Visualization",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Writing a new 
VisualizationWhat is Apache Zeppelin VisualizationApache Zeppelin Visualization 
is a pluggable package that can be loaded/unloaded on runtime through Helium 
framework in Zeppelin. A Visualization is a javascript npm package and user can 
use them just like any other built-in visualization in notebook.How it works1. 
Load Helium package files from registryZeppelin needs to know what 
Visualization packages are available. 
 Zeppelin will read information of packages from both online and local 
registry.Registries are configurable through 
ZEPPELIN_HELIUM_LOCALREGISTRY_DEFAULT env variable or 
zeppelin.helium.localregistry.default property.2. Enable packagesOnce Zeppelin 
loads Helium package files from registries, available packages are displayed in 
Helium menu.Click &amp;#39;enable&amp;#39; button.3. Create and load 
visualization bundle on the flyOnce a Visualization package is enabled, 
HeliumBundleFactory creates a js bundle. The js bundle is served by 
helium/bundle/load rest api endpoint.4. Run visualizationZeppelin shows 
additional button for loaded Visualizations.User can use just like any other 
built-in visualizations.Write new Visualization1. Create a npm packageCreate a 
package.json in your new Visualization directory. You can add any dependencies 
in package.json, but you must include two dependencies: zeppelin-vis and 
zeppelin-tabledata.Here&amp;#39;s an example{  &amp;quot;name&amp;quot;: &amp;qu
 ot;zeppelin_horizontalbar&amp;quot;,  &amp;quot;description&amp;quot; : 
&amp;quot;Horizontal Bar chart&amp;quot;,  &amp;quot;version&amp;quot;: 
&amp;quot;1.0.0&amp;quot;,  &amp;quot;main&amp;quot;: 
&amp;quot;horizontalbar&amp;quot;,  &amp;quot;author&amp;quot;: 
&amp;quot;&amp;quot;,  &amp;quot;license&amp;quot;: 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;dependencies&amp;quot;: {    
&amp;quot;zeppelin-tabledata&amp;quot;: &amp;quot;*&amp;quot;,    
&amp;quot;zeppelin-vis&amp;quot;: &amp;quot;*&amp;quot;  }}2. Create your own 
visualizationTo create your own visualization, you need to create a js file and 
import Visualization class from zeppelin-vis package and extend the class. 
zeppelin-tabledata package provides some useful transformations, like pivot, 
you can use in your visualization. (you can create your own transformation, 
too).Visualization class, there&amp;#39;re several methods that you need to 
override and implement. Here&amp;#39;s simple visualization that just prints 
Hello 
 world.import Visualization from &amp;#39;zeppelin-vis&amp;#39;import 
PassthroughTransformation from 
&amp;#39;zeppelin-tabledata/passthrough&amp;#39;export default class helloworld 
extends Visualization {  constructor(targetEl, config) {    super(targetEl, 
config)    this.passthrough = new PassthroughTransformation(config);  }  
render(tableData) {    this.targetEl.html(&amp;#39;Hello world!&amp;#39;)  }  
getTransformation() {    return this.passthrough  }}To learn more about 
Visualization class, check visualization.js.You can check complete 
visualization package example here.Zeppelin&amp;#39;s built-in visualization 
uses the same API, so you can check built-in visualizations as additional 
examples.3. Create Helium package file and locally deployHelium Package file is 
a json file that provides information about the application.Json file contains 
the following information{  &amp;quot;type&amp;quot; : 
&amp;quot;VISUALIZATION&amp;quot;,  &amp;quot;name&amp;quot; : 
&amp;quot;zeppelin_hori
 zontalbar&amp;quot;,  &amp;quot;description&amp;quot; : &amp;quot;Horizontal 
Bar chart (example)&amp;quot;,  &amp;quot;license&amp;quot; : 
&amp;quot;Apache-2.0&amp;quot;,  &amp;quot;artifact&amp;quot; : 
&amp;quot;./zeppelin-examples/zeppelin-example-horizontalbar&amp;quot;,  
&amp;quot;icon&amp;quot; : &amp;quot;&amp;lt;i class=&amp;#39;fa fa-bar-chart 
rotate90flipX&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;}Place this file in 
your local registry directory (default ./helium).typeWhen you&amp;#39;re 
creating a visualization, &amp;#39;type&amp;#39; should be 
&amp;#39;VISUALIZATION&amp;#39;.Check application type if you&amp;#39;re 
interested in the other types of package.nameName of visualization. Should be 
unique. Allows [A-Za-z90-9_].descriptionA short description about 
visualization.artifactLocation of the visualization npm package. Support npm 
package with version or local filesystem path.e.g.When artifact exists in npm 
repository&amp;quot;artifact&amp;quot;: &amp;quot;my-visualiz
 tion@1.0.0&amp;quot;When artifact exists in local file 
system&amp;quot;artifact&amp;quot;: 
&amp;quot;/path/to/my/visualization&amp;quot;licenseLicense 
information.e.g.&amp;quot;license&amp;quot;: 
&amp;quot;Apache-2.0&amp;quot;iconIcon to be used in visualization select 
button. String in this field will be rendered as a HTML 
tag.e.g.&amp;quot;icon&amp;quot;: &amp;quot;&amp;lt;i class=&amp;#39;fa 
fa-coffee&amp;#39;&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;4. Run in dev modePlace 
your Helium package file in local registry (ZEPPELIN_HOME/helium).Run Zeppelin. 
And then run zeppelin-web in visualization dev mode.cd zeppelin-webyarn run 
dev:heliumYou can browse localhost:9000. Everytime refresh your browser, 
Zeppelin will rebuild your visualization and reload changes.5. Publish your 
visualizationOnce it&amp;#39;s done, publish your visualization package using 
npm publish.That&amp;#39;s it. With in an hour, your visualization will be 
available in Zeppelin&amp;#39;s helium menu.",
       "url": " /development/writingzeppelinvisualization.html",
       "group": "development",
       "excerpt": "Apache Zeppelin Visualization is a pluggable package that 
can be loaded/unloaded on runtime through Helium framework in Zeppelin. A 
Visualization is a javascript npm package and user can use them just like any 
other built-in visualization in a note."
@@ -69,6 +69,17 @@
     
   
 
+    "/development/writingzeppelinvisualization_transformation.html": {
+      "title": "Transformations for Zeppelin Visualization",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Transformations for Zeppelin 
VisualizationOverviewTransformations renders setting which allows users to set 
columns and transforms table rows according to the configured columns.Zeppelin 
provides 4 types of transformations.1. 
PassthroughTransformationPassthroughTransformation is the simple transformation 
which does not convert original tabledata at all.See passthrough.js2. 
ColumnselectorTransformationColumnselectorTransformation is
  uses when you need N axes but do not need aggregation. See 
columnselector.js3. PivotTransformationPivotTransformation provides group by 
and aggregation. Every chart using PivotTransformation has 3 axes. Keys, Groups 
and Values.See pivot.js4. AdvancedTransformationAdvancedTransformation has more 
detailed options while providing existing features of PivotTransformation and 
ColumnselectorTransformationmultiple sub chartsconfigurable chart axesparameter 
widgets: input, checkbox, option, textareaparsing parameters automatically 
based on their typesexpand / fold axis and parameter panelsmultiple 
transformation methods while supporting lazy converting re-initialize the whole 
configuration based on spec hash.SpecAdvancedTransformation requires spec which 
includes axis and parameter details for charts.Let&amp;#39;s create 2 
sub-charts called line and no-group. Each sub chart can have different axis and 
parameter depending on their requirements.class AwesomeVisualization extends 
Visualizatio
 n {  constructor(targetEl, config) {    super(targetEl, config)    const spec 
= {      charts: {        &amp;#39;line&amp;#39;: {          transform: { 
method: &amp;#39;object&amp;#39;, },          sharedAxis: false, /** set if you 
want to share axes between sub charts, default is `false` */          axis: {   
         &amp;#39;xAxis&amp;#39;: { dimension: &amp;#39;multiple&amp;#39;, 
axisType: &amp;#39;key&amp;#39;, description: &amp;#39;serial&amp;#39;, },      
      &amp;#39;yAxis&amp;#39;: { dimension: &amp;#39;multiple&amp;#39;, 
axisType: &amp;#39;aggregator&amp;#39;, description: &amp;#39;serial&amp;#39;, 
},            &amp;#39;category&amp;#39;: { dimension: 
&amp;#39;multiple&amp;#39;, axisType: &amp;#39;group&amp;#39;, description: 
&amp;#39;categorical&amp;#39;, },          },          parameter: {            
&amp;#39;xAxisUnit&amp;#39;: { valueType: &amp;#39;string&amp;#39;, 
defaultValue: &amp;#39;&amp;#39;, description: &amp;#39;unit of xAxis&amp;#39;, 
},            &amp;#3
 9;yAxisUnit&amp;#39;: { valueType: &amp;#39;string&amp;#39;, defaultValue: 
&amp;#39;&amp;#39;, description: &amp;#39;unit of yAxis&amp;#39;, },            
&amp;#39;lineWidth&amp;#39;: { valueType: &amp;#39;int&amp;#39;, defaultValue: 
0, description: &amp;#39;width of line&amp;#39;, },          },        },       
 &amp;#39;no-group&amp;#39;: {          transform: { method: 
&amp;#39;object&amp;#39;, },          sharedAxis: false,          axis: {       
     &amp;#39;xAxis&amp;#39;: { dimension: &amp;#39;single&amp;#39;, axisType: 
&amp;#39;key&amp;#39;, },            &amp;#39;yAxis&amp;#39;: { dimension: 
&amp;#39;multiple&amp;#39;, axisType: &amp;#39;value&amp;#39;, },          },   
       parameter: {            &amp;#39;xAxisUnit&amp;#39;: { valueType: 
&amp;#39;string&amp;#39;, defaultValue: &amp;#39;&amp;#39;, description: 
&amp;#39;unit of xAxis&amp;#39;, },            &amp;#39;yAxisUnit&amp;#39;: { 
valueType: &amp;#39;string&amp;#39;, defaultValue: &amp;#39;&amp;#39;, 
description: 
 &amp;#39;unit of yAxis&amp;#39;, },        },      },    }    
this.transformation = new AdvancedTransformation(config, spec)  }  ...  // 
`render` will be called whenever `axis` or `parameter` is changed   
render(data) {    const { chart, parameter, column, transformer, } = data    if 
(chart === &amp;#39;line&amp;#39;) {      const transformed = transformer()     
 // draw line chart     } else if (chart === &amp;#39;no-group&amp;#39;) {      
const transformed = transformer()      // draw no-group chart     }  }}Spec: 
axisField NameAvailable Values (type)DescriptiondimensionsingleAxis can 
contains only 1 columndimensionmultipleAxis can contains multiple 
columnsaxisTypekeyColumn(s) in this axis will be used as key like in 
PivotTransformation. These columns will be served in 
column.keyaxisTypeaggregatorColumn(s) in this axis will be used as value like 
in PivotTransformation. These columns will be served in 
column.aggregatoraxisTypegroupColumn(s) in this axis will be used as group like 
i
 n PivotTransformation. These columns will be served in 
column.groupaxisType(string)Any string value can be used here. These columns 
will be served in column.custommaxAxisCount (optional)(int)The max number of 
columns that this axis can contain. (unlimited if undefined)minAxisCount 
(optional)(int)The min number of columns that this axis should contain to draw 
chart. (1 in case of single dimension)description (optional)(string)Description 
for the axis.Here is an example.axis: {  &amp;#39;xAxis&amp;#39;: { dimension: 
&amp;#39;multiple&amp;#39;, axisType: &amp;#39;key&amp;#39;,  },  
&amp;#39;yAxis&amp;#39;: { dimension: &amp;#39;multiple&amp;#39;, axisType: 
&amp;#39;aggregator&amp;#39;},  &amp;#39;category&amp;#39;: { dimension: 
&amp;#39;multiple&amp;#39;, axisType: &amp;#39;group&amp;#39;, maxAxisCount: 2, 
valueType: &amp;#39;string&amp;#39;, },},Spec: sharedAxisIf you set sharedAxis: 
false for sub charts, then their axes are persisted in global space (shared). 
It&amp;#39;s useful for 
 when you creating multiple sub charts sharing their axes but have different 
parameters. For example, basic-column, stacked-column, percent-columnpie and 
donutHere is an example.    const spec = {      charts: {        
&amp;#39;column&amp;#39;: {          transform: { method: 
&amp;#39;array&amp;#39;, },          sharedAxis: true,          axis: { ... },  
        parameter: { ... },        },        &amp;#39;stacked&amp;#39;: {       
   transform: { method: &amp;#39;array&amp;#39;, },          sharedAxis: true,  
        axis: { ... }          parameter: { ... },        },Spec: 
parameterField NameAvailable Values (type)DescriptionvalueTypestringParameter 
which has string valuevalueTypeintParameter which has int 
valuevalueTypefloatParameter which has float valuevalueTypebooleanParameter 
which has boolean value used with checkbox widget usuallyvalueTypeJSONParameter 
which has JSON value used with textarea widget usually. defaultValue should be 
&amp;quot;&amp;quot; (empty string). Thisdes
 cription(string)Description of this parameter. This value will be parsed as 
HTML for pretty outputwidgetinputUse input widget. This is the default widget 
(if widget is undefined)widgetcheckboxUse checkbox widget.widgettextareaUse 
textarea widget.widgetoptionUse select + option widget. This parameter should 
have optionValues field as well.optionValues(Array)Available option values used 
with the option widgetHere is an example.parameter: {  // string type, input 
widget  &amp;#39;xAxisUnit&amp;#39;: { valueType: &amp;#39;string&amp;#39;, 
defaultValue: &amp;#39;&amp;#39;, description: &amp;#39;unit of xAxis&amp;#39;, 
},  // boolean type, checkbox widget  &amp;#39;inverted&amp;#39;: { widget: 
&amp;#39;checkbox&amp;#39;, valueType: &amp;#39;boolean&amp;#39;, defaultValue: 
false, description: &amp;#39;invert x and y axes&amp;#39;, },  // string type, 
option widget with `optionValues`  &amp;#39;graphType&amp;#39;: { widget: 
&amp;#39;option&amp;#39;, valueType: &amp;#39;string&amp;#39;, defa
 ultValue: &amp;#39;line&amp;#39;, description: &amp;#39;graph type&amp;#39;, 
optionValues: [ &amp;#39;line&amp;#39;, &amp;#39;smoothedLine&amp;#39;, 
&amp;#39;step&amp;#39;, ], },  // HTML in `description`  
&amp;#39;dateFormat&amp;#39;: { valueType: &amp;#39;string&amp;#39;, 
defaultValue: &amp;#39;&amp;#39;, description: &amp;#39;format of date 
(&amp;lt;a 
href=&amp;quot;https://docs.amcharts.com/3/javascriptcharts/AmGraph#dateFormat&amp;quot;&amp;gt;doc&amp;lt;/a&amp;gt;)
 (e.g YYYY-MM-DD)&amp;#39;, },  // JSON type, textarea widget  
&amp;#39;yAxisGuides&amp;#39;: { widget: &amp;#39;textarea&amp;#39;, valueType: 
&amp;#39;JSON&amp;#39;, defaultValue: &amp;#39;&amp;#39;, description: 
&amp;#39;guides of yAxis &amp;#39;, },Spec: transformField NameAvailable Values 
(type)Descriptionmethodobjectdesigned for rows requiring object 
manipulationmethodarraydesigned for rows requiring array 
manipulationmethodarray:2-keydesigned for xyz charts (e.g bubble 
chart)methoddrill-downdesigned for drill-d
 own chartsmethodrawwill return the original tableData.rowsWhatever you 
specified as transform.method, the transformer value will be always function 
for lazy computation. // advanced-transformation.util#getTransformerif 
(transformSpec.method === &amp;#39;raw&amp;#39;) {  transformer = () =&amp;gt; 
{ return rows; }} else if (transformSpec.method === &amp;#39;array&amp;#39;) {  
transformer = () =&amp;gt; {    ...    return { ... }  }}Here is actual 
usage.class AwesomeVisualization extends Visualization {  constructor(...) { 
/** setup your spec */ }  ...   // `render` will be called whenever `axis` or 
`parameter` are changed  render(data) {    const { chart, parameter, column, 
transformer, } = data    if (chart === &amp;#39;line&amp;#39;) {      const 
transformed = transformer()      // draw line chart     } else if (chart === 
&amp;#39;no-group&amp;#39;) {      const transformed = transformer()      // 
draw no-group chart     }  }  ...}",
+      "url": " /development/writingzeppelinvisualization_transformation.html",
+      "group": "development",
+      "excerpt": "Description for Transformations"
+    }
+    ,
+    
+  
+
     "/displaysystem/back-end-angular.html": {
       "title": "Back-end Angular API in Apache Zeppelin",
       "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Back-end Angular API in 
Apache ZeppelinOverviewAngular display system treats output as a view template 
for AngularJS.It compiles templates and displays them inside of Apache 
Zeppelin. Zeppelin provides a gateway between your interpreter and your 
compiled AngularJS view templates.Therefore, you can not only update scope 
variables from your interpreter but also watch them in the interpreter, which 
is JVM process.Basic UsagePrint Angu
 larJS viewTo use angular display system, you should start with %angular.Since 
name is not defined, Hello will display Hello.Please Note: Display system is 
backend independent.Bind / Unbind VariablesThrough ZeppelinContext, you can 
bind / unbind variables to AngularJS view. Currently, it only works in Spark 
Interpreter ( scala ).// bind my &amp;#39;object&amp;#39; as angular scope 
variable &amp;#39;name&amp;#39; in current notebook.z.angularBind(String name, 
Object object)// bind my &amp;#39;object&amp;#39; as angular scope variable 
&amp;#39;name&amp;#39; in all notebooks related to current 
interpreter.z.angularBindGlobal(String name, Object object)// unbind angular 
scope variable &amp;#39;name&amp;#39; in current 
notebook.z.angularUnbind(String name)// unbind angular scope variable 
&amp;#39;name&amp;#39; in all notebooks related to current 
interpreter.z.angularUnbindGlobal(String name)Using the above example, 
let&amp;#39;s bind world variable to name. Then you can see AngularJs view
  is immediately updated.Watch / Unwatch VariablesThrough ZeppelinContext, you 
can watch / unwatch variables in AngularJs view. Currently, it only works in 
Spark Interpreter ( scala ).// register for angular scope variable 
&amp;#39;name&amp;#39; (notebook)z.angularWatch(String name, (before, after) 
=&amp;gt; { ... })// unregister watcher for angular variable 
&amp;#39;name&amp;#39; (notebook)z.angularUnwatch(String name)// register for 
angular scope variable &amp;#39;name&amp;#39; 
(global)z.angularWatchGlobal(String name, (before, after) =&amp;gt; { ... })// 
unregister watcher for angular variable &amp;#39;name&amp;#39; 
(global)z.angularUnwatchGlobal(String name)Let&amp;#39;s make a button. When it 
is clicked, the value of run will be increased 1 by 
1.z.angularBind(&amp;quot;run&amp;quot;, 0) will initialize run to zero. And 
then, it will be also applied to run in z.angularWatch().When the button is 
clicked, you&amp;#39;ll see both run and numWatched are incremented by 
1.Let&amp;#39;s
  make it Simpler and more IntuitiveIn this section, we will introduce a 
simpler and more intuitive way of using Angular Display System in Zeppelin.Here 
are some usages.Import// In notebook scopeimport 
org.apache.zeppelin.display.angular.notebookscope._import AngularElem._// In 
paragraph scopeimport 
org.apache.zeppelin.display.angular.paragraphscope._import AngularElem._Display 
Element// automatically convert to string and print with %angular display 
system directive in front.&amp;lt;div&amp;gt;&amp;lt;div&amp;gt;.displayEvent 
Handler// on click&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;.onClick(() =&amp;gt; 
{   my callback routine}).display// on 
change&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;.onChange(() =&amp;gt; {  my 
callback routine}).display// arbitrary 
event&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;.onEvent(&amp;quot;ng-click&amp;quot;,
 () =&amp;gt; {  my callback routine}).displayBind Model// bind 
model&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;.model(&amp;quot;myModel&amp;quot;).display/
 / bind model with initial 
value&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;.model(&amp;quot;myModel&amp;quot;, 
initialValue).displayInteract with Model// read 
modelAngularModel(&amp;quot;myModel&amp;quot;)()// update 
modelAngularModel(&amp;quot;myModel&amp;quot;, 
&amp;quot;newValue&amp;quot;)Example: Basic UsageUsing the above basic usages, 
you can apply them like below examples.Display Elements&amp;lt;div 
style=&amp;quot;color:blue&amp;quot;&amp;gt;  &amp;lt;h4&amp;gt;Hello Angular 
Display System&amp;lt;/h4&amp;gt;&amp;lt;/div&amp;gt;.displayOnClick 
Event&amp;lt;div class=&amp;quot;btn btn-success&amp;quot;&amp;gt;  Click 
me&amp;lt;/div&amp;gt;.onClick{() =&amp;gt;  // callback for button 
click}.displayBind Model  
&amp;lt;div&amp;gt;{{{{myModel}}}}&amp;lt;/div&amp;gt;.model(&amp;quot;myModel&amp;quot;,
 &amp;quot;Initial Value&amp;quot;).displayInteract With Model// read the 
valueAngularModel(&amp;quot;myModel&amp;quot;)()// update the 
valueAngularModel(&amp;quot;myModel&amp;quot;, &amp;
 quot;New value&amp;quot;)Example: String ConverterUsing below example, you can 
convert the lowercase string to uppercase.// clear previously created angular 
object.AngularElem.disassociateval button = &amp;lt;div class=&amp;quot;btn 
btn-success btn-sm&amp;quot;&amp;gt;Convert&amp;lt;/div&amp;gt;.onClick{() 
=&amp;gt;  val inputString = AngularModel(&amp;quot;input&amp;quot;)().toString 
 AngularModel(&amp;quot;title&amp;quot;, 
inputString.toUpperCase)}&amp;lt;div&amp;gt;  { &amp;lt;h4&amp;gt; 
{{{{title}}}}&amp;lt;/h4&amp;gt;.model(&amp;quot;title&amp;quot;, 
&amp;quot;Please type text to convert uppercase&amp;quot;) }   Your text { 
&amp;lt;input 
type=&amp;quot;text&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;.model(&amp;quot;input&amp;quot;,
 &amp;quot;&amp;quot;) }  {button}&amp;lt;/div&amp;gt;.display",
@@ -105,7 +116,7 @@
 
     "/install/build.html": {
       "title": "Build from Source",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Building from SourceIf you 
want to build from source, you must first install the following dependencies:   
   Name    Value        Git    (Any Version)        Maven    3.1.x or higher    
    JDK    1.7  If you haven&amp;#39;t installed Git and Maven yet, check the 
Build requirements section and follow the step by step instructions from 
there.1. Clone the Apache Zeppelin repositorygit clone 
https://github.com/apache/zeppelin.git2. B
 uild sourceYou can build Zeppelin with following maven command:mvn clean 
package -DskipTests [Options]If you&amp;#39;re unsure about the options, use 
the same commands that creates official binary package.# update all pom.xml to 
use scala 2.11./dev/change_scala_version.sh 2.11# build zeppelin with all 
interpreters and include latest version of Apache spark support for local 
mode.mvn clean package -DskipTests -Pspark-2.0 -Phadoop-2.4 -Pyarn -Ppyspark 
-Psparkr -Pr -Pscala-2.113. DoneYou can directly start Zeppelin by running 
after successful build:./bin/zeppelin-daemon.sh startCheck build-profiles 
section for further build options.If you are behind proxy, follow instructions 
in Proxy setting section.If you&amp;#39;re interested in contribution, please 
check Contributing to Apache Zeppelin (Code) and Contributing to Apache 
Zeppelin (Website).Build profilesSpark InterpreterTo build with a specific 
Spark version, Hadoop version or specific features, define one or more of the 
following pr
 ofiles and options:-Pspark-[version]Set spark major versionAvailable profiles 
are-Pspark-2.1-Pspark-2.0-Pspark-1.6-Pspark-1.5-Pspark-1.4-Pcassandra-spark-1.5-Pcassandra-spark-1.4-Pcassandra-spark-1.3-Pcassandra-spark-1.2-Pcassandra-spark-1.1minor
 version can be adjusted by -Dspark.version=x.x.x-Phadoop-[version]set hadoop 
major versionAvailable profiles 
are-Phadoop-0.23-Phadoop-1-Phadoop-2.2-Phadoop-2.3-Phadoop-2.4-Phadoop-2.6-Phadoop-2.7minor
 version can be adjusted by -Dhadoop.version=x.x.x-Pscala-[version] 
(optional)set scala version (default 2.10)Available profiles 
are-Pscala-2.10-Pscala-2.11-Pyarn (optional)enable YARN support for local 
modeYARN for local mode is not supported for Spark v1.5.0 or higher. Set 
SPARK_HOME instead.-Ppyspark (optional)enable PySpark support for local 
mode.-Pr (optional)enable R support with SparkR integration.-Psparkr 
(optional)another R support with SparkR integration as well as local mode 
support.-Pvendor-repo (optional)enable 3rd party vendor rep
 ository (cloudera)-Pmapr[version] (optional)For the MapR Hadoop Distribution, 
these profiles will handle the Hadoop version. As MapR allows different 
versions of Spark to be installed, you should specify which version of Spark is 
installed on the cluster by adding a Spark profile (-Pspark-1.6, -Pspark-2.0, 
etc.) as needed.The correct Maven artifacts can be found for every version of 
MapR at http://doc.mapr.comAvailable profiles 
are-Pmapr3-Pmapr40-Pmapr41-Pmapr50-Pmapr51-Pexamples (optional)Bulid examples 
under zeppelin-examples directoryBuild command examplesHere are some examples 
with several options:# build with spark-2.1, 
scala-2.11./dev/change_scala_version.sh 2.11mvn clean package -Pspark-2.1 
-Phadoop-2.4 -Pyarn -Ppyspark -Psparkr -Pscala-2.11 -DskipTests# build with 
spark-2.0, scala-2.11./dev/change_scala_version.sh 2.11mvn clean package 
-Pspark-2.0 -Phadoop-2.4 -Pyarn -Ppyspark -Psparkr -Pscala-2.11 -DskipTests# 
build with spark-1.6, scala-2.10mvn clean package -Pspark-1.6 -P
 hadoop-2.4 -Pyarn -Ppyspark -Psparkr -DskipTests# spark-cassandra 
integrationmvn clean package -Pcassandra-spark-1.5 -Dhadoop.version=2.6.0 
-Phadoop-2.6 -DskipTests -DskipTests# with CDHmvn clean package -Pspark-1.5 
-Dhadoop.version=2.6.0-cdh5.5.0 -Phadoop-2.6 -Pvendor-repo -DskipTests# with 
MapRmvn clean package -Pspark-1.5 -Pmapr50 -DskipTestsIgnite Interpretermvn 
clean package -Dignite.version=1.9.0 -DskipTestsScalding Interpretermvn clean 
package -Pscalding -DskipTestsBuild requirementsInstall requirementsIf you 
don&amp;#39;t have requirements prepared, install it.(The installation method 
may vary according to your environment, example is for Ubuntu.)sudo apt-get 
updatesudo apt-get install gitsudo apt-get install openjdk-7-jdksudo apt-get 
install npmsudo apt-get install libfontconfigInstall mavenwget 
http://www.eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gzsudo
 tar -zxf apache-maven-3.3.9-bin.tar.gz -C /usr/local/sudo ln -s 
/usr/local/apache-maven-
 3.3.9/bin/mvn /usr/local/bin/mvnNotes: - Ensure node is installed by running 
node --version - Ensure maven is running version 3.1.x or higher with mvn 
-version - Configure maven to use more memory than usual by export 
MAVEN_OPTS=&amp;quot;-Xmx2g -XX:MaxPermSize=1024m&amp;quot;Proxy setting 
(optional)If you&amp;#39;re behind the proxy, you&amp;#39;ll need to configure 
maven and npm to pass through it.First of all, configure maven in your 
~/.m2/settings.xml.&amp;lt;settings&amp;gt;  &amp;lt;proxies&amp;gt;    
&amp;lt;proxy&amp;gt;      &amp;lt;id&amp;gt;proxy-http&amp;lt;/id&amp;gt;      
&amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;      
&amp;lt;protocol&amp;gt;http&amp;lt;/protocol&amp;gt;      
&amp;lt;host&amp;gt;localhost&amp;lt;/host&amp;gt;      
&amp;lt;port&amp;gt;3128&amp;lt;/port&amp;gt;      &amp;lt;!-- 
&amp;lt;username&amp;gt;usr&amp;lt;/username&amp;gt;      
&amp;lt;password&amp;gt;pwd&amp;lt;/password&amp;gt; --&amp;gt;      
&amp;lt;nonProxyHosts&amp;gt;localhost|127.0
 .0.1&amp;lt;/nonProxyHosts&amp;gt;    &amp;lt;/proxy&amp;gt;    
&amp;lt;proxy&amp;gt;      &amp;lt;id&amp;gt;proxy-https&amp;lt;/id&amp;gt;     
 &amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;      
&amp;lt;protocol&amp;gt;https&amp;lt;/protocol&amp;gt;      
&amp;lt;host&amp;gt;localhost&amp;lt;/host&amp;gt;      
&amp;lt;port&amp;gt;3128&amp;lt;/port&amp;gt;      &amp;lt;!-- 
&amp;lt;username&amp;gt;usr&amp;lt;/username&amp;gt;      
&amp;lt;password&amp;gt;pwd&amp;lt;/password&amp;gt; --&amp;gt;      
&amp;lt;nonProxyHosts&amp;gt;localhost|127.0.0.1&amp;lt;/nonProxyHosts&amp;gt;  
  &amp;lt;/proxy&amp;gt;  
&amp;lt;/proxies&amp;gt;&amp;lt;/settings&amp;gt;Then, next commands will 
configure npm.npm config set proxy http://localhost:3128npm config set 
https-proxy http://localhost:3128npm config set registry 
&amp;quot;http://registry.npmjs.org/&amp;quot;npm config set strict-ssl 
falseConfigure git as wellgit config --global http.proxy 
http://localhost:3128git config --global https.proxy h
 ttp://localhost:3128git config --global 
url.&amp;quot;http://&amp;quot;.insteadOf git://To clean up, set active false 
in Maven settings.xml and run these commands.npm config rm proxynpm config rm 
https-proxygit config --global --unset http.proxygit config --global --unset 
https.proxygit config --global --unset 
url.&amp;quot;http://&amp;quot;.insteadOfNotes: - If you are behind NTLM proxy 
you can use Cntlm Authentication Proxy. - Replace localhost:3128 with the 
standard pattern http://user:pwd@host:port.PackageTo package the final 
distribution including the compressed archive, run:mvn clean package 
-Pbuild-distrTo build a distribution with specific profiles, run:mvn clean 
package -Pbuild-distr -Pspark-1.5 -Phadoop-2.4 -Pyarn -PpysparkThe profiles 
-Pspark-1.5 -Phadoop-2.4 -Pyarn -Ppyspark can be adjusted if you wish to build 
to a specific spark versions, or omit support such as yarn.  The archive is 
generated under zeppelin-distribution/target directoryRun end-to-end 
testsZeppelin com
 es with a set of end-to-end acceptance tests driving headless selenium 
browser# assumes zeppelin-server running on localhost:8080 (use -Durl=.. to 
override)mvn verify# or take care of starting/stoping zeppelin-server from 
packaged zeppelin-distribuion/targetmvn verify -P using-packaged-distr",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Building from SourceIf you 
want to build from source, you must first install the following dependencies:   
   Name    Value        Git    (Any Version)        Maven    3.1.x or higher    
    JDK    1.7  If you haven&amp;#39;t installed Git and Maven yet, check the 
Build requirements section and follow the step by step instructions from 
there.1. Clone the Apache Zeppelin repositorygit clone 
https://github.com/apache/zeppelin.git2. B
 uild sourceYou can build Zeppelin with following maven command:mvn clean 
package -DskipTests [Options]If you&amp;#39;re unsure about the options, use 
the same commands that creates official binary package.# update all pom.xml to 
use scala 2.11./dev/change_scala_version.sh 2.11# build zeppelin with all 
interpreters and include latest version of Apache spark support for local 
mode.mvn clean package -DskipTests -Pspark-2.0 -Phadoop-2.4 -Pr -Pscala-2.113. 
DoneYou can directly start Zeppelin by running after successful 
build:./bin/zeppelin-daemon.sh startCheck build-profiles section for further 
build options.If you are behind proxy, follow instructions in Proxy setting 
section.If you&amp;#39;re interested in contribution, please check Contributing 
to Apache Zeppelin (Code) and Contributing to Apache Zeppelin (Website).Build 
profilesSpark InterpreterTo build with a specific Spark version, Hadoop version 
or specific features, define one or more of the following profiles and 
options:-Pspark
 -[version]Set spark major versionAvailable profiles 
are-Pspark-2.1-Pspark-2.0-Pspark-1.6-Pspark-1.5-Pspark-1.4-Pcassandra-spark-1.5-Pcassandra-spark-1.4-Pcassandra-spark-1.3-Pcassandra-spark-1.2-Pcassandra-spark-1.1minor
 version can be adjusted by -Dspark.version=x.x.x-Phadoop-[version]set hadoop 
major versionAvailable profiles 
are-Phadoop-0.23-Phadoop-1-Phadoop-2.2-Phadoop-2.3-Phadoop-2.4-Phadoop-2.6-Phadoop-2.7minor
 version can be adjusted by -Dhadoop.version=x.x.x-Pscala-[version] 
(optional)set scala version (default 2.10)Available profiles 
are-Pscala-2.10-Pscala-2.11-Pr (optional)enable R support with SparkR 
integration.-Pvendor-repo (optional)enable 3rd party vendor repository 
(cloudera)-Pmapr[version] (optional)For the MapR Hadoop Distribution, these 
profiles will handle the Hadoop version. As MapR allows different versions of 
Spark to be installed, you should specify which version of Spark is installed 
on the cluster by adding a Spark profile (-Pspark-1.6, -Pspark-2.0, etc.) 
 as needed.The correct Maven artifacts can be found for every version of MapR 
at http://doc.mapr.comAvailable profiles 
are-Pmapr3-Pmapr40-Pmapr41-Pmapr50-Pmapr51-Pexamples (optional)Bulid examples 
under zeppelin-examples directoryBuild command examplesHere are some examples 
with several options:# build with spark-2.1, 
scala-2.11./dev/change_scala_version.sh 2.11mvn clean package -Pspark-2.1 
-Phadoop-2.4 -Pscala-2.11 -DskipTests# build with spark-2.0, 
scala-2.11./dev/change_scala_version.sh 2.11mvn clean package -Pspark-2.0 
-Phadoop-2.4 -Pscala-2.11 -DskipTests# build with spark-1.6, scala-2.10mvn 
clean package -Pspark-1.6 -Phadoop-2.4 -DskipTests# spark-cassandra 
integrationmvn clean package -Pcassandra-spark-1.5 -Dhadoop.version=2.6.0 
-Phadoop-2.6 -DskipTests -DskipTests# with CDHmvn clean package -Pspark-1.5 
-Dhadoop.version=2.6.0-cdh5.5.0 -Phadoop-2.6 -Pvendor-repo -DskipTests# with 
MapRmvn clean package -Pspark-1.5 -Pmapr50 -DskipTestsIgnite Interpretermvn 
clean package -Dignite.
 version=1.9.0 -DskipTestsScalding Interpretermvn clean package -Pscalding 
-DskipTestsBuild requirementsInstall requirementsIf you don&amp;#39;t have 
requirements prepared, install it.(The installation method may vary according 
to your environment, example is for Ubuntu.)sudo apt-get updatesudo apt-get 
install gitsudo apt-get install openjdk-7-jdksudo apt-get install npmsudo 
apt-get install libfontconfigInstall mavenwget 
http://www.eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gzsudo
 tar -zxf apache-maven-3.3.9-bin.tar.gz -C /usr/local/sudo ln -s 
/usr/local/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvnNotes: - Ensure node is 
installed by running node --version - Ensure maven is running version 3.1.x or 
higher with mvn -version - Configure maven to use more memory than usual by 
export MAVEN_OPTS=&amp;quot;-Xmx2g -XX:MaxPermSize=1024m&amp;quot;Proxy setting 
(optional)If you&amp;#39;re behind the proxy, you&amp;#39;ll need to configure 
maven and npm to pass 
 through it.First of all, configure maven in your 
~/.m2/settings.xml.&amp;lt;settings&amp;gt;  &amp;lt;proxies&amp;gt;    
&amp;lt;proxy&amp;gt;      &amp;lt;id&amp;gt;proxy-http&amp;lt;/id&amp;gt;      
&amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;      
&amp;lt;protocol&amp;gt;http&amp;lt;/protocol&amp;gt;      
&amp;lt;host&amp;gt;localhost&amp;lt;/host&amp;gt;      
&amp;lt;port&amp;gt;3128&amp;lt;/port&amp;gt;      &amp;lt;!-- 
&amp;lt;username&amp;gt;usr&amp;lt;/username&amp;gt;      
&amp;lt;password&amp;gt;pwd&amp;lt;/password&amp;gt; --&amp;gt;      
&amp;lt;nonProxyHosts&amp;gt;localhost|127.0.0.1&amp;lt;/nonProxyHosts&amp;gt;  
  &amp;lt;/proxy&amp;gt;    &amp;lt;proxy&amp;gt;      
&amp;lt;id&amp;gt;proxy-https&amp;lt;/id&amp;gt;      
&amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;      
&amp;lt;protocol&amp;gt;https&amp;lt;/protocol&amp;gt;      
&amp;lt;host&amp;gt;localhost&amp;lt;/host&amp;gt;      
&amp;lt;port&amp;gt;3128&amp;lt;/port&amp;gt;      &amp;lt;!-- &amp;lt;usern
 ame&amp;gt;usr&amp;lt;/username&amp;gt;      
&amp;lt;password&amp;gt;pwd&amp;lt;/password&amp;gt; --&amp;gt;      
&amp;lt;nonProxyHosts&amp;gt;localhost|127.0.0.1&amp;lt;/nonProxyHosts&amp;gt;  
  &amp;lt;/proxy&amp;gt;  
&amp;lt;/proxies&amp;gt;&amp;lt;/settings&amp;gt;Then, next commands will 
configure npm.npm config set proxy http://localhost:3128npm config set 
https-proxy http://localhost:3128npm config set registry 
&amp;quot;http://registry.npmjs.org/&amp;quot;npm config set strict-ssl 
falseConfigure git as wellgit config --global http.proxy 
http://localhost:3128git config --global https.proxy http://localhost:3128git 
config --global url.&amp;quot;http://&amp;quot;.insteadOf git://To clean up, 
set active false in Maven settings.xml and run these commands.npm config rm 
proxynpm config rm https-proxygit config --global --unset http.proxygit config 
--global --unset https.proxygit config --global --unset 
url.&amp;quot;http://&amp;quot;.insteadOfNotes: - If you are behind NTLM proxy y
 ou can use Cntlm Authentication Proxy. - Replace localhost:3128 with the 
standard pattern http://user:pwd@host:port.PackageTo package the final 
distribution including the compressed archive, run:mvn clean package 
-Pbuild-distrTo build a distribution with specific profiles, run:mvn clean 
package -Pbuild-distr -Pspark-1.5 -Phadoop-2.4The profiles -Pspark-1.5 
-Phadoop-2.4 can be adjusted if you wish to build to a specific spark versions. 
 The archive is generated under zeppelin-distribution/target directoryRun 
end-to-end testsZeppelin comes with a set of end-to-end acceptance tests 
driving headless selenium browser# assumes zeppelin-server running on 
localhost:8080 (use -Durl=.. to override)mvn verify# or take care of 
starting/stoping zeppelin-server from packaged zeppelin-distribuion/targetmvn 
verify -P using-packaged-distr",
       "url": " /install/build.html",
       "group": "install",
       "excerpt": "How to build Zeppelin from source"
@@ -171,7 +182,7 @@
 
     "/install/upgrade.html": {
       "title": "Manual Zeppelin version upgrade procedure",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Manual upgrade procedure for 
ZeppelinBasically, newer version of Zeppelin works with previous version 
notebook directory and configurations.So, copying notebook and conf directory 
should be enough.InstructionsStop Zeppelinbin/zeppelin-daemon.sh stopCopy your 
notebook and conf directory into a backup directoryDownload newer version of 
Zeppelin and Install. See Install page.Copy backup notebook and conf directory 
into newer version o
 f Zeppelin notebook and conf directoryStart Zeppelinbin/zeppelin-daemon.sh 
startMigration GuideUpgrading from Zeppelin 0.6 to 0.7From 0.7, we 
don&amp;#39;t use ZEPPELIN_JAVA_OPTS as default value of 
ZEPPELIN_INTP_JAVA_OPTS and also the same for ZEPPELIN_MEM/ZEPPELIN_INTP_MEM. 
If user want to configure the jvm opts of interpreter process, please set 
ZEPPELIN_INTP_JAVA_OPTS and ZEPPELIN_INTP_MEM explicitly. If you don&amp;#39;t 
set ZEPPELIN_INTP_MEM, Zeppelin will set it to -Xms1024m -Xmx1024m 
-XX:MaxPermSize=512m by default.Mapping from %jdbc(prefix) to %prefix is no 
longer available. Instead, you can use %[interpreter alias] with multiple 
interpreter setttings on GUI.Usage of ZEPPELIN_PORT is not supported in ssl 
mode. Instead use ZEPPELIN_SSL_PORT to configure the ssl port. Value from 
ZEPPELIN_PORT is used only when ZEPPELIN_SSL is set to false.The support on 
Spark 1.1.x to 1.3.x is deprecated.From 0.7, we uses pegdown as the 
markdown.parser.type option for the %md interpreter. Ren
 dered markdown might be different from what you expectedFrom 0.7 note.json 
format has been changed to support multiple outputs in a paragraph. Zeppelin 
will automatically convert old format to new format. 0.6 or lower version can 
read new note.json format but output will not be displayed. For the detail, see 
ZEPPELIN-212 and pull request.From 0.7 note storage layer will utilize 
GitNotebookRepo by default instead of VFSNotebookRepo storage layer, which is 
an extension of latter one with versioning capabilities on top of it.Upgrading 
from Zeppelin 0.7 to 0.8From 0.8, we recommend to use PYSPARK_PYTHON and 
PYSPARK_DRIVER_PYTHON instead of zeppelin.pyspark.python as 
zeppelin.pyspark.python only effects driver. You can use PYSPARK_PYTHON and 
PYSPARK_DRIVER_PYTHON as using them in spark.",
+      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Manual upgrade procedure for 
ZeppelinBasically, newer version of Zeppelin works with previous version 
notebook directory and configurations.So, copying notebook and conf directory 
should be enough.InstructionsStop Zeppelinbin/zeppelin-daemon.sh stopCopy your 
notebook and conf directory into a backup directoryDownload newer version of 
Zeppelin and Install. See Install page.Copy backup notebook and conf directory 
into newer version o
 f Zeppelin notebook and conf directoryStart Zeppelinbin/zeppelin-daemon.sh 
startMigration GuideUpgrading from Zeppelin 0.6 to 0.7From 0.7, we 
don&amp;#39;t use ZEPPELIN_JAVA_OPTS as default value of 
ZEPPELIN_INTP_JAVA_OPTS and also the same for ZEPPELIN_MEM/ZEPPELIN_INTP_MEM. 
If user want to configure the jvm opts of interpreter process, please set 
ZEPPELIN_INTP_JAVA_OPTS and ZEPPELIN_INTP_MEM explicitly. If you don&amp;#39;t 
set ZEPPELIN_INTP_MEM, Zeppelin will set it to -Xms1024m -Xmx1024m 
-XX:MaxPermSize=512m by default.Mapping from %jdbc(prefix) to %prefix is no 
longer available. Instead, you can use %[interpreter alias] with multiple 
interpreter setttings on GUI.Usage of ZEPPELIN_PORT is not supported in ssl 
mode. Instead use ZEPPELIN_SSL_PORT to configure the ssl port. Value from 
ZEPPELIN_PORT is used only when ZEPPELIN_SSL is set to false.The support on 
Spark 1.1.x to 1.3.x is deprecated.From 0.7, we uses pegdown as the 
markdown.parser.type option for the %md interpreter. Ren
 dered markdown might be different from what you expectedFrom 0.7 note.json 
format has been changed to support multiple outputs in a paragraph. Zeppelin 
will automatically convert old format to new format. 0.6 or lower version can 
read new note.json format but output will not be displayed. For the detail, see 
ZEPPELIN-212 and pull request.From 0.7 note storage layer will utilize 
GitNotebookRepo by default instead of VFSNotebookRepo storage layer, which is 
an extension of latter one with versioning capabilities on top of it.Upgrading 
from Zeppelin 0.7 to 0.8From 0.8, we recommend to use PYSPARK_PYTHON and 
PYSPARK_DRIVER_PYTHON instead of zeppelin.pyspark.python as 
zeppelin.pyspark.python only effects driver. You can use PYSPARK_PYTHON and 
PYSPARK_DRIVER_PYTHON as using them in spark.From 0.8, depending on your 
device, the keyboard shortcut Ctrl-L or Command-L which goes to the line 
somewhere user wants is not supported. ",
       "url": " /install/upgrade.html",
       "group": "install",
       "excerpt": "This document will guide you through a procedure of manual 
upgrade your Apache Zeppelin instance to a newer version. Apache Zeppelin keeps 
backward compatibility for the notebook file format."
@@ -182,7 +193,7 @@
 
     "/install/virtual_machine.html": {
       "title": "Apache Zeppelin on Vagrant Virtual Machine",
-      "content"  : "&lt;!--Licensed under the Apache License, Version 2.0 (the 
&quot;License&quot;);you may not use this file except in compliance with the 
License.You may obtain a copy of the License 
athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law 
or agreed to in writing, softwaredistributed under the License is distributed 
on an &quot;AS IS&quot; BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
either express or implied.See the License for the specific language governing 
permissions andlimitations under the License.--&gt;Apache Zeppelin on Vagrant 
Virtual MachineOverviewApache Zeppelin distribution includes a script 
directoryscripts/vagrant/zeppelin-devThis script creates a virtual machine that 
launches a repeatable, known set of core dependencies required for developing 
Zeppelin. It can also be used to run an existing Zeppelin build if you 
don&amp;#39;t plan to build from source.For PySpark users, this script includes 
several helpful Python Librar
 ies.For SparkR users, this script includes several helpful R 
Libraries.PrerequisitesThis script requires three applications, Ansible, 
Vagrant and Virtual Box.  All of these applications are freely available as 
Open Source projects and extremely easy to set up on most operating 
systems.Create a Zeppelin Ready VMIf you are running Windows and don&amp;#39;t 
yet have python installed, install Python 2.7.x first.Download and Install 
Vagrant:  Vagrant DownloadsInstall Ansible:  Ansible Python pip installsudo 
easy_install pipsudo pip install ansibleansible --versionAfter then, please 
check whether it reports ansible version 1.9.2 or higher.Install Virtual Box: 
Virtual Box DownloadsType vagrant up  from within the 
/scripts/vagrant/zeppelin-dev directoryThats it ! You can now run vagrant ssh 
and this will place you into the guest machines terminal prompt.If you 
don&amp;#39;t wish to build Zeppelin from scratch, run the z-manager installer 
script while running in the guest VM:curl -fsSL https
 ://raw.githubusercontent.com/NFLabs/z-manager/master/zeppelin-installer.sh | 
bashBuilding ZeppelinYou can now git clone 
git://git.apache.org/zeppelin.gitinto a directory on your host machine, or 
directly in your virtual machine.Cloning Zeppelin into the 
/scripts/vagrant/zeppelin-dev directory from the host, will allow the directory 
to be shared between your host and the guest machine.Cloning the project again 
may seem counter intuitive, since this script likely originated from the 
project repository.  Consider copying just the vagrant/zeppelin-dev script from 
the Zeppelin project as a stand alone directory, then once again clone the 
specific branch you wish to build.Synced folders enable Vagrant to sync a 
folder on the host machine to the guest machine, allowing you to continue 
working on your project&amp;#39;s files on your host machine, but use the 
resources in the guest machine to compile or run your project. (1) Synced 
Folder Description from Vagrant UpBy default, Vagrant will s
 hare your project directory (the directory with the Vagrantfile) to /vagrant.  
Which means you should be able to build within the guest machine after youcd 
/vagrant/zeppelinWhat&amp;#39;s in this VM?Running the following commands in 
the guest machine should display these expected versions:node --version should 
report v0.12.7mvn --version should report Apache Maven 3.3.9 and Java version: 
1.7.0_85The virtual machine consists of:Ubuntu Server 14.04 LTSNode.js 
0.12.7npm 2.11.3ruby 1.9.3 + rake, make and bundler (only required if building 
jekyll documentation)Maven 3.3.9GitUnziplibfontconfig to avoid phatomJs missing 
dependency issuesopenjdk-7-jdkPython addons: pip, matplotlib, scipy, numpy, 
pandasR and R Packages required to run the R Interpreter and the related R 
tutorial notebook, including:  Knitr, devtools, repr, rCharts, ggplot2, 
googleVis, mplot, htmltools, base64enc, data.tableHow to build &amp;amp; run 
ZeppelinThis assumes you&amp;#39;ve already cloned the project either on the
  host machine in the zeppelin-dev directory (to be shared with the guest 
machine) or cloned directly into a directory while running inside the guest 
machine.  The following build steps will also include Python and R support via 
PySpark and SparkR:cd /zeppelinmvn clean package -Pspark-1.6 -Ppyspark 
-Phadoop-2.4 -Psparkr -DskipTests./bin/zeppelin-daemon.sh startOn your host 
machine browse to http://localhost:8080/If you turned off port forwarding in 
the Vagrantfile browse to http://192.168.51.52:8080Tweaking the Virtual 
MachineIf you plan to run this virtual machine along side other Vagrant images, 
you may wish to bind the virtual machine to a specific IP address, and not use 
port fowarding from your local host.Comment out the forward_port line, and 
uncomment the private_network line in Vagrantfile.  The subnet that works best 
for your local network will vary so adjust 192.168.*.* 
accordingly.#config.vm.network &amp;quot;forwarded_port&amp;quot;, guest: 8080, 
host: 8080config.vm.netwo
 rk &amp;quot;private_network&amp;quot;, ip: 
&amp;quot;192.168.51.52&amp;quot;vagrant halt followed by vagrant up will 
restart the guest machine bound to the IP address of 192.168.51.52.This 
approach usually is typically required if running other virtual machines that 
discover each other directly by IP address, such as Spark Masters and Slaves as 
well as Cassandra Nodes, Elasticsearch Nodes, and other Spark data sources.  
You may wish to launch nodes in virtual machines with IP addresses in a subnet 
that works for your local network, such as: 192.168.51.53, 192.168.51.54, 
192.168.51.53, etc..ExtrasPython ExtrasWith Zeppelin running, Numpy, SciPy, 
Pandas and Matplotlib will be available.  Create a pyspark notebook, and try 
the below code.%pysparkimport numpyimport scipyimport pandasimport 
matplotlibprint &amp;quot;numpy &amp;quot; + numpy.__version__print 
&amp;quot;scipy &amp;quot; + scipy.__version__print &amp;quot;pandas &amp;quot; 
+ pandas.__version__print &amp;quot;matplotlib &amp
 ;quot; + matplotlib.__version__To Test plotting using Matplotlib into a 
rendered %html SVG image, try%pysparkimport 
matplotlibmatplotlib.use(&amp;#39;Agg&amp;#39;)   # turn off interactive 
charting so this works for server side SVG renderingimport matplotlib.pyplot as 
pltimport numpy as npimport StringIO# clear out any previous plots on this 
noteplt.clf()def show(p):    img = StringIO.StringIO()    p.savefig(img, 
format=&amp;#39;svg&amp;#39;)    img.seek(0)    print &amp;quot;%html 
&amp;lt;div style=&amp;#39;width:600px&amp;#39;&amp;gt;&amp;quot; + img.buf + 
&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;# Example datapeople = 
(&amp;#39;Tom&amp;#39;, &amp;#39;Dick&amp;#39;, &amp;#39;Harry&amp;#39;, 
&amp;#39;Slim&amp;#39;, &amp;#39;Jim&amp;#39;)y_pos = 
np.arange(len(people))performance = 3 + 10 * np.random.rand(len(people))error = 
np.random.rand(len(people))plt.barh(y_pos, performance, xerr=error, 
align=&amp;#39;center&amp;#39;, alpha=0.4)plt.yticks(y_pos, 
people)plt.xlabel(&amp;#39;Perform
 ance&amp;#39;)plt.title(&amp;#39;How fast do you want to go 
today?&amp;#39;)show(plt)R ExtrasWith zeppelin running, an R Tutorial notebook 
will be available.  The R packages required to run the examples and graphs in 
this tutorial notebook were installed by this virtual machine.The installed R 
Packages include: Knitr, devtools, repr, rCharts, ggplot2, googleVis, mplot, 
htmltools, base64enc, data.table",

[... 23 lines stripped ...]
Modified: zeppelin/site/docs/0.8.0-SNAPSHOT/security/authentication.html
URL: 
http://svn.apache.org/viewvc/zeppelin/site/docs/0.8.0-SNAPSHOT/security/authentication.html?rev=1791664&r1=1791663&r2=1791664&view=diff
==============================================================================
--- zeppelin/site/docs/0.8.0-SNAPSHOT/security/authentication.html (original)
+++ zeppelin/site/docs/0.8.0-SNAPSHOT/security/authentication.html Mon Apr 17 
07:01:48 2017
@@ -164,10 +164,11 @@
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/security/notebook_authorization.html">Notebook 
Authorization</a></li>
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/security/datasource_authorization.html">Data Source 
Authorization</a></li>
                 <li role="separator" class="divider"></li>
-                <li class="title"><span><b>Helium Framework</b><span></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinapplication.html">Writing 
Zeppelin Application (Experimental)</a></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinspell.html">Writing 
Zeppelin Spell (Experimental)</a></li>
-                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization.html">Writing
 Zeppelin Visualization (Experimental)</a></li>
+                <li class="title"><span><b>Helium Framework 
(Experimental)</b></span></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinapplication.html">Writing 
Zeppelin Application</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinspell.html">Writing 
Zeppelin Spell</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization.html">Writing
 Zeppelin Visualization: Basics</a></li>
+                <li><a 
href="/docs/0.8.0-SNAPSHOT/development/writingzeppelinvisualization_transformation.html">Writing
 Zeppelin Visualization: Transformation</a></li>
                 <li role="separator" class="divider"></li>
                 <li class="title"><span><b>Advanced</b><span></li>
                 <li><a 
href="/docs/0.8.0-SNAPSHOT/install/virtual_machine.html">Zeppelin on Vagrant 
VM</a></li>


Reply via email to