Jupyter NoterbookでScalaを使う

簡単に出来たのでメモ.

以下のシェルスクリプトjupyter-scalaを実行.(実際には公式からDLしてきたものを実行することを強くおすすめします)

#!/bin/bash
set -e

VERSION=0.4.2
AMMONIUM_VERSION=0.8.3-1
SCALA_VERSION=2.11.11 # Set to 2.12.2 for Scala 2.12

TYPELEVEL_SCALA=false # If true, set SCALA_VERSION above to a both ammonium + TLS available version (e.g. 2.11.8)

EXTRA_OPTS=()

if which coursier >/dev/null; then
  GLOBAL_COURSIER=true
  COURSIER=coursier
else
  GLOBAL_COURSIER=false
  COURSIER="$(mktemp -t coursier.XXXXXXXX)"
  trap "{ rm -f \"$COURSIER\"; }" EXIT
  echo "Getting coursier launcher..." 2>&1
  curl -s -L -o "$COURSIER" https://github.com/coursier/coursier/raw/v1.0.0-RC1/coursier
  echo "Done" 2>&1
  chmod +x "$COURSIER"
fi

if [ "$TYPELEVEL_SCALA" = true ]; then
  EXTRA_OPTS+=(
    -E org.scala-lang:scala-compiler \
    -E org.scala-lang:scala-library \
    -E org.scala-lang:scala-reflect \
    -I ammonite:org.typelevel:scala-compiler:$SCALA_VERSION \
    -I ammonite:org.typelevel:scala-library:$SCALA_VERSION \
    -I ammonite:org.typelevel:scala-reflect:$SCALA_VERSION \
  )
fi

"$COURSIER" launch \
  -r sonatype:releases -r sonatype:snapshots \
  -i ammonite \
  -I ammonite:org.jupyter-scala:ammonite-runtime_$SCALA_VERSION:$AMMONIUM_VERSION \
  -I ammonite:org.jupyter-scala:scala-api_$SCALA_VERSION:$VERSION \
  ${EXTRA_OPTS[@]} \
  org.jupyter-scala:scala-cli_$SCALA_VERSION:$VERSION \
  -- \
    --id scala \.
    --name "Scala" \
    "$@"

if [ "$GLOBAL_COURSIER" = false ]; then
  rm -f "$COURSIER"
fi

これでjupyter(ipython notebook)を立ち上げた時に以下のように「New」->「Scala」が追加されているはず.

f:id:ksnt:20170621134234p:plain

ipyhon notebook(jupyter)でサーバ起動時にブラウザが勝手に起動しないようにした

/home/[user]/.jupyter/jupyter_notebook_config.pyを書き換える.


なお,設定ファイルがない場合は以下で作成.

$ipython3 notebook --generate-config


因みに,諸事情があって$ipython3 notebookとしているが$jupyter notebookを使うのが一般的だと思われる.

設定ファイルが存在する場合は以下のとおり.jupyter_notebook_config.pyの中で

#c.NotebookApp.open_browser = True

となっている箇所を以下のように'#‘を削除して'True'を'False'に書き換えればok.

c.NotebookApp.open_browser = False

とする.これでサーバを起動する度にブラウザが起ち上がることはない.

なお,設定ファイル内の

#c.NotebookApp.browser = ''

を例えば

c.NotebookApp.browser = '/usr/bin/chromium-browser'

と書き換えればデフォルトのブラウザを設定できる(らしい).ブラウザの実行ファイルの場所はwhichとかで調べればok.

Scalaのパターンマッチとガード

すぐに忘れるのでメモ.コードはリストから最大値を取ってくるよくあるやつ.

def max(xs: List[Int]): Int = xs match {
    case Nil => throw new java.util.NoSuchElementException
    case x :: Nil => x
    case x :: tail => x.max(max(tail))
    }