読者です 読者をやめる 読者になる 読者になる

MySQL:エラー:The total number of locks exceeds the lock table size

上記のエラーが出た場合'innodb_buffer_pool_size'の割り当てを大きくすることで対応可能とのこと。
If you had the error, you can get correct work by assign more memory to 'innodb_buffer_pool_size'.
MySQL:エラー:The total number of locks exceeds the lock table size | 猫型iPS細胞研究所



対応1.デフォルトを変更 change the default.
 永続的に変更したい場合は、my.cnfを変更することで対応可能。今回は扱わない。
If you want to change eternal, you should edit 'my.cnf'. I don,t handle it this time.
日々の覚書: my.cnfのパラメータ優先順位


対応2.セッション中のみ変更 ←今回 change during session.

 結論としては以下で変更可能。can change by follow code.

SET GLOBAL innodb_buffer_pool_size = 変更したいサイズ;


ただし、バッファープールは内部的に複数の領域(インスタンス)に分割されている。

SHOW VARIABLES LIKE "innodb_%_size";

で表示されるinnodb_buffer_pool_instastancesの倍数で設定しないとエラーが出る。
'innodb_buffer_pool_size' should set multiple 'innodb_buffer_pool_instastances'


参考:InnoDB バッファープールをオンラインで変更する - Qiita

Anaconda環境でTensorFlowをインストール Installing TensorFlow with Anaconda.

環境構築手順を整理しておこうと思ったが、
公式に素晴らしいチュートリアルがあるのでそれを実行し、補足点を記述する。

目次
1.インストール
2.チュートリアル
3.途中詰まったところ


1.インストール
ここ参照:https://www.tensorflow.org/install/install_windows

今回の目的はwindows上かつ、anacondaだが、他環境のものもある。
Installing TensorFlow  |  TensorFlow

CPU support only.とGPU supportとがあるが、GPUを利用したい場合でもまず前者をインストールしてみなさいとの記述がある。

環境を別で作って、アクティベートして、pipでインストールする。

C:> conda create -n tensorflow 
C:> activate tensorflow
(tensorflow)C:> pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.0.1-cp35-cp35m-win_amd64.whl 


2.チュートリアル
チュートリアル上のコードをそのまま実行しただけだが、以下のコード
https://www.tensorflow.org/get_started/mnist/beginners

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

y_ = tf.placeholder(tf.float32, [None, 10])

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

sess = tf.InteractiveSession()

tf.global_variables_initializer().run()

for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))


3.途中詰まったところ
途中同じコードを実行しているはずなのに下図のエラーが出たりでなかったりがあった。
原因は未特定だが、"unknown op"とあるので、対象のopが読み込まれていない可能性がある。
なのでimport tensorflow as tf でもう一度ライブラリをインポートしなおすと直るかもしれない。
f:id:Tug-uca:20170317072050p:plain

python:Anacondaでpython2,python3環境を併存させる Build environment of python2 and python3 on Anaconda.

以下はwindows環境で行っている。
anacondaはインストール済みとする。
This is windows environment.
Package of anaconda is already installed.

python2,python3の環境名をそれぞれpy2,py3として作成する。
Create environment names of python2 and python3 as py2 and "py3".

C:\>conda create -n py2 python=2.7 anaconda
C:\>conda create -n py3 python=3.5 anaconda


存在している環境の一覧を表示する、*がついている環境が現状選択されている
View all existing environment. Environment marked "*" is selected.

C:\>conda info -e
# conda environments:
#
py2        C:Anaconda3\envs\py2
py3        C:Anaconda3\envs\py2
root     * C:Anaconda3


特定の環境をアクティベートする
Activate environment "py2".

C:\activate py2

成功すると先頭に環境名が表示されるようになる
If activate is success, the environment name on top.

(py2)C:\


※注意点
windowsのpathの設定は切り替え時に変更されない為、外部開発環境などからそのままpythonを実行した場合デフォルトの環境で実行される。
デフォルトの環境以外で実行したい場合は、その前に環境の切り替えを行う必要がある。
Due to path setting is not change when activate, it is run that default environment via other development environment tools.
If you want to run on any other environment, you have to activate the environment.

Rでtreemapツリーマップを複数(grid)表示する To display multiple for treemap of R by grid.

Rでtreemapを利用したい時「Package ‘treemap’」が存在しているのでそれを利用できる。[参考1,3]
There is a package for treemap of R.

ただし、1画面に複数の図を表示したい時、plotで利用する par() 関数はtreemapでは利用できないのでgridを利用して表示する。
If you want to display multiple that figure, you should use not the "par()" function , but the "grid" library .


treemap()関数のdocument[参考3]に以下の引数があるのでこれを利用する。
According to the document of treemap(), you can use a argument that is named "vp".
f:id:Tug-uca:20160915105247p:plain

このvpに表示先のviewportを指定することで複数表示が可能。



Sample

#パッケージの読み込み
library("treemap")
 
#データ例の作成
n <- 300
TestData <- data.frame(index1 = rep(c("パソコン", "モバイル", "タブレット"), each = 9, length = n),
                       index2 = paste0("訪問回数.", sample(1:10, 30, replace = TRUE)),
                       data = sample(5:30, n, replace = TRUE))
#gridの準備
library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(2, 2)))

#図1 row=1 col=1
treemap(TestData, index = names(TestData)[1:(ncol(TestData)-1)], title = "図1",
        vSize = "data", align.labels = list(c("center", "top"), c("center", "center")), 
        position.legend = "bottom", vp = viewport(layout.pos.row=1,layout.pos.col=1))
 
#図2 row=1 col=2
treemap(TestData, index = names(TestData)[1:(ncol(TestData)-1)], title = "図2",
vSize = "data", align.labels = list(c("center", "top"), c("center", "center")), 
        position.legend = "bottom", vp = viewport(layout.pos.row=1,layout.pos.col=2))
 
#図3 row=2 col=1
treemap(TestData, index = names(TestData)[1:(ncol(TestData)-1)], title = "図3",
        vSize = "data", align.labels = list(c("center", "top"), c("center", "center")), 
        position.legend = "bottom", vp = viewport(layout.pos.row=2,layout.pos.col=1))

#図4 row=2 col=2
treemap(TestData, index = names(TestData)[1:(ncol(TestData)-1)], title = "図4",
        vSize = "data", align.labels = list(c("center", "top"), c("center", "center")), 
        position.legend = "bottom", vp = viewport(layout.pos.row=2,layout.pos.col=2))

f:id:Tug-uca:20160915111317p:plain
※サンプルは[参考1,2]のコードを改修し利用させていただいている。

参考:
1.Rとウェブ解析:ツリーマップの作成が簡単です!「treemap」パッケージの紹介

2.【R】ggplot2で複数のグラフを一つ図として表示&保存する方法 | 楽楽研究室

3.https://cran.r-project.org/web/packages/treemap/treemap.pdf

KNIMEのworkflowをコマンドで実行(batch mode) Execution KNIME workflow via command line.

KNIMEのworkflowをコマンドで実行(batch mode) Execution KNIME workflow via command line.

KNIMEを利用すれば繰り返しのデータ分析を自動化することが可能。
以下は、あらかじめ作ってあるKNIMEのワークフローをコマンドで実行する手順。
コマンドで実行できるので、他システムから呼び出すことが容易になる。
If you use KNIME, you can automate repetitive data analysis.
This is a procedure that execute a already exist workflow of KNIME via command line.
The execution via command line make it easier to access KNIME from other system.

f:id:Tug-uca:20160622173450j:plain


特定のcsvファイルを読み込み、その内容を特定の場所へcsvファイルで出力するだけの単純なワークフロー。
これを保存し、以下のコマンドを実行する。
This simple workflow read a specific csv file and write same data to specific path.
You execute following command to execute this workflow.

knime.exe -consoleLog -noexit -nosplash -reset -application org.knime.product.KNIME_BATCH_APPLICATION -workflowDir="ディレクトリのパス"


"-consoleLog"がないと、コンソールが起動しない。If you don't write "-consoleLog", console window doesen't wake up.
"-noexit"がないと実行完了後コンソールが終了する。If you don't write "-noexit", console window will shut donw after execution.
linux環境では"knime.exe"->"knime"で起動できる。(未検証)In linux envinronment, you use "knime" insted of "knime.exe".(not validation)

f:id:Tug-uca:20160622175433j:plain


実行すると下図のコンソールが立ち上がり実行結果が表示される。
When you execute the command, console window will wake up and show result of execution.
f:id:Tug-uca:20160622175437j:plain


詳しく調べていないが引数でパスを渡して扱うファイルを指定することも可能。
(workflow variableを利用する)
You can pass a file path as argument to KNIME.
But I haven't researched the detail of command.(to use workflow variable)

KINME:https://www.knime.org/

linuxにtomcat8環境を構築

JRE or JDKのインストールは済んでいる前提

最終的に、以下を行いたい
1.start,stop,restartとstdoutのlogのコマンド
2.サーバ起動時にtomcat自動起動
3.warファイルデプロイディレクトリの確認
4.ライブラリ配置ディレクトリの確認


0.準備(インストール)
ユーザ追加

# useradd -s /sbin/nologin tomcat

ダウンロード(バージョンは8.0.30)

# wget http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.0.30/bin/apache-tomcat-8.0.30.tar.gz

解凍・ディレクトリ移動

# tar -xzvf ~/apache-tomcat-8.0.30.tar.gz
# mkdir /opt/apache-tomcat-8.0.30
# mv ~/apache-tomcat-8.0.30 /opt/apache-tomcat-8.0.30
# chown -R tomcat:tomcat /opt/apache-tomcat-8.0.30

パス追加

# CATALINA_HOME=/usr/local/tomcat
# export CATALINA_HOME

起動・停止のテスト
この前に、opt内にapache-tomcatというリンクをapache-tomcat-8.0.30に貼っておくと便利
起動

# sudo -u tomcat /opt/apache-tomcat/bin/startup.sh

停止

# sudo -u tomcat /opt/apache-tomcat/bin/shutdown.sh

1.サーバ起動時にtomcat自動起動
以下のスクリプトを/etc/init.d/tomcatで作成

#!/bin/bash
#
# Startup script for the Tomcat Servlet Container
#
# chkconfig: 2345 35 65
# description: Tomcat is the servlet container that is used in the official \
#              Reference Implementation for the Java Servlet and JavaServer \
#              Pages technologies

TOMCAT_USER=tomcat
CATALINA_HOME=/usr/local/tomcat

. /etc/rc.d/init.d/functions
prog=tomcat

start() {
    echo -n $"Starting $prog: "
    daemon --user $TOMCAT_USER $CATALINA_HOME/bin/startup.sh > /dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo_success
    else
        echo_failure
    fi
    echo
    [ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
    return $RETVAL
}
stop() {
    echo -n $"Stopping $prog: "
    daemon --user $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh > /dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo_success
    else
        echo_failure
    fi
    echo
    [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog
    return $RETVAL
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    INSTANCES=`ps --columns 512 -aef|grep java|grep tomcat|grep org.apache.catalina.startup.Bootstrap|wc -l`
    if [ $INSTANCES -eq 0 ]; then
        echo $prog is stopped
        RETVAL=3
    else
        if [ $INSTANCES -eq 1 ]; then
            echo $prog is running 1 instance...
        else
            echo $prog is running $INSTANCES instances...
        fi
        RETVAL=0
    fi
    ;;
  *)
    echo $"Usage: $prog {start|stop|restart|status|help}"
    exit 1
esac

exit $RETVAL

実行権限追加

# chmod +X /etc/init.d/tomcat

起動時に、実行されるよう設定

# /sbin/chkconfig --add tomcat

2.start,stop,restartとstdoutのlogのコマンド
/etc/init.d/にスクリプトを登録したので、起動などはそちらを実行すればよい

起動

# service tomcat start

停止

# service tomcat stop

再起動

# service tomcat restart

ログはデフォルトの設定でlogs内に標準出力が出力されるようになっているのでそちらを利用する

# tailf /opt/apache-tomcat/logs/catalina.out

3.warファイルデプロイディレクトリの確認
4.ライブラリ配置ディレクトリの確認

それぞれ以下、

デプロイ
$CATALINA_HOME/webapps
ライブラリ
$CATALINA_HOME/lib

再起動の必要有無は未確認



参考:
LinuxサーバへのTomcat 7導入 (Tomcatインストール)
http://weblabo.oscasierra.net/installing-tomcat7-on-redhat/

Eclipseでリモート環境にデプロイ(WildFly,JBossツール)

WildFlyJBossではあるバージョンから(6?)JBossツールを利用して、リモート環境へのデプロイができる。
以下その手順。
 1.EclipseJBossツールのインストール
 2.リモートシステムの設定
 3.サーバーの設定


1.EclipseJBossツールのインストール
 EclipseJBossツールのインストールについては、WildFlyJBossをローカル環境で扱う方法として、記事がいくつも公開されているので説明はそちらに譲る。
例えば、
http://www.javadera.com/blog/hellowildfly/
http://itmemo.net-luck.com/eclipse-jboss-environment/
http://qiita.com/yu_naka0607/items/c3441175a90be72c2b6f


2.リモートシステムの設定
 まず、どのリモート環境を扱うかをEclipseで設定する

 2-1.リモートシステムをビューへの表示
  ウィンドウ->ビューの表示->その他->リモート・システム->リモート・システム

2-2.リモートシステム→新規接続
今回はSSHによる接続を行う。
f:id:Tug-uca:20160208102205j:plain

2-3.環境のIPを入力→完了
f:id:Tug-uca:20160208102206j:plain

2-4.ビューに追加したリモートシステムが追加されている。
接続を試す。
f:id:Tug-uca:20160208102204j:plain

2-5.ID・PASSを入力し正しく接続されればOK
f:id:Tug-uca:20160208102203j:plain


3.サーバーの設定
設定したリモートシステムに入っているWildFlyをサーバー設定する。

3-1.新規サーバーから対象のサーバーをバージョンを選択
f:id:Tug-uca:20160208102202j:plain

3-2.サーバーをリモートにして、ランタイムもリモートのものを利用するので、チェックを外す。
f:id:Tug-uca:20160208102201j:plain

3-3.設定したリモートシステムを選択し、WildFlyのインストールディレクトリを選択する。
f:id:Tug-uca:20160208102200j:plain


あとはWildFlyJBossをローカル環境で扱う方法と同様で、デプロイ可能。