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

haibin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git


The following commit(s) were added to refs/heads/master by this push:
     new 76f67b1  [MXNET-48] update on setting up Scala with MXNet and the 
IntelliJ IDE (#10013)
76f67b1 is described below

commit 76f67b1eba8261ae5e703453f15adf56fefe5b73
Author: Aaron Markham <markh...@amazon.com>
AuthorDate: Mon Apr 9 22:49:09 2018 -0700

    [MXNET-48] update on setting up Scala with MXNet and the IntelliJ IDE 
(#10013)
    
    * initial update on setting up scala ide with mxnet
    
    * moving images to web-data project
    
    * updated links to images; added readme for root folder
    
    * scala hello world feature added
    
    * workaround for make transitive error
    
    * fixed systempath
    
    * minor updates
---
 docs/tutorials/index.md                         |   7 +-
 docs/tutorials/scala/README.md                  |   7 +
 docs/tutorials/scala/mxnet_scala_on_intellij.md | 301 +++++++++++++++++++++---
 3 files changed, 278 insertions(+), 37 deletions(-)

diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md
index 917afe9..00a1504 100644
--- a/docs/tutorials/index.md
+++ b/docs/tutorials/index.md
@@ -2,10 +2,10 @@
 
 MXNet has two primary high-level interfaces for its deep learning engine: the 
Gluon API and the Module API. Tutorials for each are provided below.
 
-The difference between the two is an imperative versus symbolic programming 
style. Gluon makes it easy to prototype, build, and train deep learning models 
without sacrificing training speed by enabling both (1) intuitive imperative 
Python code development and (2) faster execution by automatically generating a 
symbolic execution graph using the hybridization feature.
-
 `TL;DR:` If you are new to deep learning or MXNet, you should start with the 
Gluon tutorials.
 
+The difference between the two is an imperative versus symbolic programming 
style. Gluon makes it easy to prototype, build, and train deep learning models 
without sacrificing training speed by enabling both (1) intuitive imperative 
Python code development and (2) faster execution by automatically generating a 
symbolic execution graph using the hybridization feature.
+
 The Gluon and Module tutorials are in Python, but you can also find a variety 
of other MXNet tutorials, such as R, Scala, and C++ in the [Other Languages API 
Tutorials](#other-mxnet-api-tutorials) section below.
 
 [Example scripts and applications](#example-scripts-and-applications) as well 
as [contribution](#contributing-tutorials) info is below.
@@ -246,7 +246,8 @@ The Gluon and Module tutorials are in Python, but you can 
also find a variety of
 - [Setup your MXNet with Scala on 
IntelliJ](/tutorials/scala/mxnet_scala_on_intellij.html)
 - [MNIST with the Scala API](/tutorials/scala/mnist.html)
 - [Use Scala to build a Long Short-Term Memory network that generates Barack 
Obama's speech patterns](/tutorials/scala/char_lstm.html)
-</div>
+
+</div> <!--end of scala-->
 
 <hr>
 
diff --git a/docs/tutorials/scala/README.md b/docs/tutorials/scala/README.md
new file mode 100644
index 0000000..0081f9c
--- /dev/null
+++ b/docs/tutorials/scala/README.md
@@ -0,0 +1,7 @@
+# MXNet-Scala Tutorials
+
+* [Setup Scala with MXNet and Create a MXNet-Scala Project with 
IntelliJ](mxnet_scala_on_intellij.md)
+* [MNIST with MXNet-Scala](mnist.md)
+* [Character-level Language Model with MXNet-Scala](char_lstm.md)
+
+See the 
[tutorials](http://mxnet.incubator.apache.org/tutorials/index.html#other-languages-api-tutorials)
 page on MXNet.io for more.
diff --git a/docs/tutorials/scala/mxnet_scala_on_intellij.md 
b/docs/tutorials/scala/mxnet_scala_on_intellij.md
index 037165f..8a14767 100644
--- a/docs/tutorials/scala/mxnet_scala_on_intellij.md
+++ b/docs/tutorials/scala/mxnet_scala_on_intellij.md
@@ -1,62 +1,295 @@
 # Run MXNet Scala Examples Using the IntelliJ IDE
 
+<!--TODO: switch to new namespace and new maven package -->
+
 This tutorial guides you through setting up a Scala project in the IntelliJ 
IDE and shows how to use an MXNet package from your application.
 
 ## Prerequisites:
-To use this tutorial, you need:
+To use this tutorial you need the following items, however after this list, 
installation info for macOS is provided for your benefit:
+
+- [Java 8 
JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
+- [Maven](https://maven.apache.org/install.html)
+- [Scala](https://www.scala-lang.org/download/) - comes with IntelliJ, so you 
don't need to install it separately
+- [MXNet Shared Library and Scala 
Package](#build-the-mxnet-shared-library-and-scala-package)
+- [IntelliJ IDE](https://www.jetbrains.com/idea/)
+
+## Mac Prerequisites Setup
+
+For other operating systems, visit each Prerequisite's website and follow 
their installations instructions. For macOS, you're in luck:
+
+1. Install brew:
+```
+/usr/bin/ruby -e "$(curl -fsSL 
https://raw.githubusercontent.com/Homebrew/install/master/install)"
+```
+
+2. Install Java 8 JDK:
+```
+brew tap caskroom/versions
+brew cask install java8
+```
+
+3. Install maven:
+```
+brew update
+brew install maven
+```
+
+## Build the MXNet Shared Library and Scala Package
+
+This depends on your operating system. Instructions for macOS, Ubuntu, and 
Windows are provided:
+
+
+OS | Step 1 | Step 2
+---|---|---
+macOS | [Shared Library for 
macOS](http://mxnet.incubator.apache.org/install/osx_setup.html#build-the-shared-library)
 | [Scala Package for 
macOS](http://mxnet.incubator.apache.org/install/osx_setup.html#install-the-mxnet-package-for-scala)
+Ubuntu | [Shared Library for 
Ubuntu](http://mxnet.incubator.apache.org/install/ubuntu_setup.html#installing-mxnet-on-ubuntu)
 | [Scala Package for 
Ubuntu](http://mxnet.incubator.apache.org/install/ubuntu_setup.html#install-the-mxnet-package-for-scala)
+Windows | [Shared Library for 
Windows](http://mxnet.incubator.apache.org/install/windows_setup.html#build-the-shared-library)
 | [Scala Package for 
Windows](http://mxnet.incubator.apache.org/install/windows_setup.html#installing-the-mxnet-package-for-scala)
 
-- [Maven 3](https://maven.apache.org/install.html).
-- [Scala 2.11.8](https://www.scala-lang.org/download/2.11.8.html).
-- MXNet. See the instructions for your operating system in [Setup and 
Installation](http://mxnet.io/install/index.html).
-- The MXNet package for Scala. For installation instructions, see [this 
procedure](http://mxnet.io/get_started/osx_setup.html#install-the-mxnet-package-for-scala).
-- [IntelliJ IDE](https://www.jetbrains.com/idea/).
+
+## Build Scala from an Existing MXNet Installation
+If you have already built MXNet **from source** and are looking to setup Scala 
from that point, you may simply run the following from the MXNet source root:
+
+```
+make scalapkg
+make scalainstall
+```
 
 ## Set Up Your Project
 
-- Install the plugin for IntelliJ IDE by following these steps:
- On **Menu**, choose **Preferences**, choose **Plugins**, type **Scala**, and 
then choose **Install**.
+Now that you've installed your prerequisites, you are ready to setup IntelliJ 
and your first MXNet-Scala project!
+
+1. Install and setup IntelliJ:
+    - When prompted for what to features to enable during IntelliJ's first 
startup, make sure you select Scala.
 
-- Follow the instructions for [Scala plugin setup for 
IDE](https://www.jetbrains.com/help/idea/2016.3/scala.html).
+    - Install the plugin for IntelliJ IDE by following these steps:
+   On **Menu**, choose **Preferences**, choose **Plugins**, type **Scala**, 
and then choose **Install**. For further plugin help and instructions, refer to 
[Scala plugin setup for IDE](https://www.jetbrains.com/help/idea/scala.html).
 
-- When you build the MXNet package with Scala, a JAR file called 
`mxnet-full_${scala.binary.version}-${platform}` is generated in 
`native/<your-architecture>/target` directory. You need this file to create an 
example package that has a dependency on MXNet.
+2. Create a new project:
 
-- Specify project dependencies in pom.xml:
+![intellij 
welcome](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-welcome.png)
+From the IntelliJ welcome screen, select "Create New Project".
 
-```HTML
-    <dependencies>
-      <dependency>
-        <groupId>org.apache.mxnet</groupId>
-        <artifactId>mxnet-full_${scala.binary.version}-${platform}</artifactId>
-        <version>0.1.1</version>
-        <scope>system</scope>
-        <systemPath>`MXNet-Scala-jar-path`</systemPath>
-      </dependency>
-      <dependency>
-        <groupId>args4j</groupId>
-        <artifactId>args4j</artifactId>
-        <version>2.0.29</version>
-      </dependency>
-    </dependencies>
+![maven project 
type](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-type.png)
+Choose the Maven project type.
+
+![maven project type - 
archetype](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-type-archetype-check.png)
+Select the checkbox for `Create from archetype`.
+
+![maven project type - 
archetype](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-type-archetype-add.png)
+Click the `Add Archetype` button, and add the following information to each 
field.
+
+**GroupId**
+```
+net.alchim31.maven
+```
+**ArtifactId**
+```
+scala-archetype-simple
+```
+**Version**
+```
+1.6
+```
+**Repository**
+```
+https://mvnrepository.com/artifact/net.alchim31.maven/scala-archetype-simple
 ```
 
-Be sure to change the system path of MXNet-Scala-jar, which is in the 
`native/<your-architecture>/target` directory.
+![maven project type - 
archetype](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-type-archetype-add-confirm.png)
+Click `Ok` to add the archetype, make sure it is selected from the list, and 
then click `Next`.
 
-- Choose the example project, choose Maven, and then reimport. These steps add 
all of the dependencies in pom.xml as external libraries in your project.
+![project 
metadata](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-metadata.png)
+Set the project's metadata. For this tutorial, use the following:
 
-- To build the project, choose Menu, choose Build, and then choose Rebuild 
Project. If errors are reported in the IDE, address them.
+**GroupId**
+```
+your-name
+```
+**ArtifactId**
+```
+ArtifactId: scalaMXNet
+```
+**Version**
+```
+1.0-SNAPSHOT
+```
+
+![project 
properties](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-properties.png)
+Review the project's properties. The settings can be left as their default.
+
+![project 
location](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-location.png)
+Set the project's location. The rest of the settings can be left as their 
default.
+
+![project 
1](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-1.png)
+After clicking Finish, you will be presented with the project's first view.
+The project's `pom.xml` will be open for editing.
+
+3. Setup project properties:
+  - Specify project properties in `pom.xml` by pasting the following content 
in the `<properties>` tag. You will be overwriting the <scala.version> tag in 
the process, upgrading from `2.11.5` to `2.11.8`.
+
+```xml
+<properties>
+  <scala.version>2.11.8</scala.version>
+  <scala.binary.version>2.11</scala.binary.version>
+</properties>
+```
+
+4. Setup project profiles and platforms:
+<!--TODO: add a Windows profile -->
+  - Specify project profiles and platforms in `pom.xml` by pasting the 
following content below the `</properties>` tag:
+
+```xml
+<profiles>
+    <profile>
+        <id>osx-x86_64-cpu</id>
+        <properties>
+            <platform>osx-x86_64-cpu</platform>
+        </properties>
+    </profile>
+    <profile>
+        <id>linux-x86_64-cpu</id>
+        <properties>
+            <platform>linux-x86_64-cpu</platform>
+        </properties>
+    </profile>
+    <profile>
+        <id>linux-x86_64-gpu</id>
+        <properties>
+            <platform>linux-x86_64-gpu</platform>
+        </properties>
+    </profile>
+</profiles>
+```
+
+5. Setup project dependencies:
+
+  - Specify project dependencies in `pom.xml` adding the dependencies listed 
below. Place them inside the `<dependencies>` tag:
+
+```xml
+<dependencies>
+  <!-- Begin deps for MXNet -->
+  <dependency>
+    <groupId>ml.dmlc.mxnet</groupId>
+    <artifactId>mxnet-full_${scala.binary.version}-${platform}</artifactId>
+    <version>1.2.0</version>
+    <scope>system</scope>
+    
<systemPath>/Development/incubator-mxnet/scala-package/assembly/osx-x86_64-cpu/target/mxnet-full_2.11-osx-x86_64-cpu-1.2.0-SNAPSHOT.jar</systemPath>
+  </dependency>
+  <dependency>
+    <groupId>args4j</groupId>
+    <artifactId>args4j</artifactId>
+    <version>2.0.29</version>
+  </dependency>
+  <dependency>
+    <groupId>org.slf4j</groupId>
+    <artifactId>slf4j-api</artifactId>
+    <version>${slf4jVersion}</version>
+  </dependency>
+  <dependency>
+    <groupId>org.slf4j</groupId>
+    <artifactId>slf4j-log4j12</artifactId>
+    <version>${slf4jVersion}</version>
+  </dependency>
+  <!-- End deps for MXNet -->
+  <dependency>
+    <groupId>org.scala-lang</groupId>
+    <artifactId>scala-library</artifactId>
+    <version>${scala.version}</version>
+  </dependency>
+  <!-- Test -->
+  <dependency>
+    <groupId>junit</groupId>
+    <artifactId>junit</artifactId>
+    <version>4.11</version>
+    <scope>test</scope>
+  </dependency>
+  <dependency>
+    <groupId>org.specs2</groupId>
+    <artifactId>specs2-core_${scala.compat.version}</artifactId>
+    <version>2.4.16</version>
+    <scope>test</scope>
+  </dependency>
+  <dependency>
+    <groupId>org.specs2</groupId>
+    <artifactId>specs2-junit_${scala.compat.version}</artifactId>
+    <version>2.4.16</version>
+    <scope>test</scope>
+  </dependency>
+  <dependency>
+    <groupId>org.scalatest</groupId>
+    <artifactId>scalatest_${scala.compat.version}</artifactId>
+    <version>2.2.4</version>
+    <scope>test</scope>
+  </dependency>
+</dependencies>
+```
 
-- You can also compile the project by using the following command at the 
command line.
+![project 
2](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-2.png)
+Note the `<systemPath>` tag and update it to match the file path to the jar 
file that was created when you built the MXNet-Scala package. It can be found 
in the `mxnet-incubator/scala-package/assembly/{platform}/target` directory, 
and is named with the pattern 
`mxnet-full_${scala.binary.version}-${platform}-{version-SNAPSHOT}.jar`.
+
+5. Import dependencies with Maven:
+
+  - Note the prompt in the lower right corner that states "Maven projects need 
to be imported".
+
+![project 
3](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-3.png)
+Click "Import Changes" in this prompt.
+
+6. Build the project:
+- To build the project, from the menu choose Build, and then choose Build 
Project.
+
+**Note**: During the build you may experience `[ERROR] scalac error: bad 
option: '-make:transitive'`. You can fix this by deleting or commenting this 
out in your `pom.xml`. This line in question is: `<arg>-make:transitive</arg>`.
+
+7. Run the Hello World App:
+![hello world 
app](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-hello-world-app.png)
+Navigate to the App included with the project.
+
+![run hello 
world](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-hello-world-run.png)
+Run the App by clicking the green arrow, and verify the Hello World output
+
+8. Run Sample MXNet Code in the App:
+![run hello 
mxnet](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-hello-mxnet.png)
+Paste the following code in the App, overwriting the original hello world 
code. Then click the green arrow to run it.
+
+```scala
+object App extends App {
+  import ml.dmlc.mxnet._
+  import org.apache.log4j.BasicConfigurator
+  BasicConfigurator.configure()
+
+  private val a = NDArray.ones(2, 3)
+  println("Testing MXNet by generating an 2x3 NDArray...")
+  println("Shape is: ")
+  println(a.shape)
+}
+```
+
+![run hello 
world](https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/scala/intellij-project-hello-mxnet-output.png)
+Your result should be similar to this output.
+
+### Command Line Build Option
+
+- You can also compile the project by using the following command at the 
command line. Change directories to this project's folder then run the 
following:
 
 ```bash
-    cd mxnet-scala-example
-    mvn clean package
+    mvn clean package -e -P osx-x86_64-cpu
 ```
+The `-P <platform>` parameter tells the build which platform to target.
+The `-e` will give you more details if the build fails. If it succeeds, you 
should see a lot of info and some warning messages, followed by:
 
-- This also generates a file called mxnet-scala-example-0.1-SNAPSHOT.jar for 
your application.
+```bash
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 1.186 s
+[INFO] Finished at: 2018-03-06T15:17:36-08:00
+[INFO] Final Memory: 11M/155M
+[INFO] ------------------------------------------------------------------------
+```
+The build generates a new jar file in the `target` folder called 
`scalaInference-1.0-SNAPSHOT.jar`.
 
 ## Next Steps
 For more information about MXNet Scala resources, see the following:
 
 * [Scala API](http://mxnet.io/api/scala/)
-* [More Scala 
Examples](https://github.com/dmlc/mxnet/tree/master/scala-package/examples/)
+* [More Scala 
Examples](https://github.com/incubator-mxnet/tree/master/scala-package/examples/)
 * [MXNet tutorials index](http://mxnet.io/tutorials/index.html)

-- 
To stop receiving notification emails like this one, please contact
hai...@apache.org.

Reply via email to