mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

vagrantにchainer入れて、chainer-goghを試す

what is this

chainer-goghで良い感じに画像つくりたい! (ってしてる間にprismaがリリースされたけど)

How I did

1. vagrantにchainer入れる

chainer自体は、

$ pip install chainer

で入るはずだけど、これやるのに必要なライブラリとかあったりするので、それをゴニョゴニョ入れていく。

2.chainer-gogh入れる

$ git clone https://github.com/mattya/chainer-gogh.git

chainer-goghのreadmeにもあるけど、学習のモデルをここ(https://gist.github.com/mavenlin/d802a5849de39225bcc6)のdropboxから取ってきて、chainer-goghフォルダに置く。

あとは試したいベースとなる画像とスタイルにしたい画像を使って試す。

$ python chainer-gogh.py -m nin -i input.png -s style.png -o output_dir -g -1

で実行。output_dirにアウトプットが吐き出される。

3. やってみた

ピカチュウを悟空みたいにツルピカにしようとした。
input.png
f:id:mazeltov7:20160723123720p:plain
style.png
f:id:mazeltov7:20160723123801j:plain
で、以下結果。
im_00000.png
f:id:mazeltov7:20160723123828p:plain
im_00050.png
f:id:mazeltov7:20160723123830p:plain
im_00100.png
f:id:mazeltov7:20160723123832p:plain
↓(40時間くらい)
im_01450.png
f:id:mazeltov7:20160723123924p:plain
んー、なんか期待と違うwww そもそも画像素材が微妙だった説が濃厚・・他の素材で試します。

今回は、CPUで回してて、あと、CUDAやcuDNNなどのライブラリも使ってなかったので、次はその辺り使って試してみよう。

関係無いけど、この画像診断よくできてる。ピカチュウも判定された。
http://demo.illustration2vec.net/

以下参考リンク

vagrantにdockerでdeepdream入れて、deepdreamを試してみる。

what is this

何やらcaffeは入れるのめんどそう、ということで、vagrantにcaffe含むdeepdream環境全部入りのdockerを立ち上げて試した。

How I did

vagrant入れるところはここで。
vagrantにdockerでtensorflow入れて、jupyterでhello world - mazeltov7のweb断片

1. deepdream-dockerをゲット

以下から、レポジトリ引っ張ってくる。 https://github.com/herval/deepdream-docker

以下、レポジトリのreadmeに書いてる通りにやるだけ。

2. docker buildする
$ docker build -t herval/deepdream .
3'. 適当な画像を拾ってくる

実験に使う画像を拾ってくる

$ wget https://hogehoge.com/photo.png -O /local/path/photo.png
3. docker runする
docker run -i -t -e INPUT=your_file_name.png -e ITER=20 -e SCALE=0.10 -e MODEL='inception_3b/5x5_reduce' -v /path/to/your/folder:/data herval/deepdream

で、outputsに結果画像ファイルが吐き出される!

4. vagrant上のoutputsの画像をローカルに持ってきて確認する

まず、vagrant sshで使う設定を確認しとく

$ vagrant ssh-config

確認した内容をファイルに書き出す

$ vagrant ssh-config > ssh.config

scpする際に指定する

$ scp -F ssh.config vagrant@default:~/output_file.png output_file.png

以上。

vagrantにdockerでtensorflow入れて、jupyterでhello world

what is this

tensorflow入れて、hello worldするまで
1. virtualenvで入れようとするが、activateされない
2. anacondaで入れようとするが、pyenvと衝突するから?か、activateしようとするとbashが落ちる
3. anacondaで、フルパスでactivateしようとするが、なんかおかしい
4. vagrantにdockerでtensorflow入れる→解決

how I did

1. virtualenvで入れようとする

基本的にここにあるようにやる  Download and Setup
virtualenvで~/tensorflowディレクトリ作って、$source source ~/tensorflow/bin/activateで何もエラー出ず、プロンプトも変わらず、という現象に。

2. anacondaでいれようとする

上記のリンクと同じページのやり方に則ってやる。 が、source activate tensorflowのところで、これを実行するとbashごと落ちる、という現象に…

3. フルパスでactivateトライ

bashごと落ちる問題はここにそれらしいものが書いてました。
pyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類 - Qiita
ここによるとpyenvとanacondaのactivateが衝突してるとのことなので、フルパスで試してみた。
が、prepending $PATH_TO_PYENV/versions/anaconda3-4.0.0/envs/tensorflow/bin to PATHとのエラーが出て、プロンプト起動せず。
conda info -eでチェックすると、確かにtensorflow環境に切り替わってるけど、うまくいかない。

4. vagrantにdockerで入れる

まず、現行のdockerがcentos7じゃないとだめなので、適当にcentos7入ってるvagrant boxを探してきて、box addする。 適当なレポジトリ作って、vagrant initして、Vagrantfileのboxを該当boxに書き換える。で、vagrant up!
Installation on CentOS 終わったら上のリンク通りにdocker入れる。 終わったら、tensorflowのドキュメントに戻って、Create a Docker group to allow launching containers without sudoをやる。あとは、書いてる通りに、docker runするとjupyterが立ち上がる。
で、jupyterのGUIをwebから触るために、virtualboxのポート設定をする。以下参考リンク。この通りにやればOK
How do I start tensorflow docker jupyter notebook - Stack Overflow

以上。

サーバー間でmysqlデータをバックアップ・更新する

this is what

サーバーAにあるデータベース1を、サーバーBに持っていて同期(更新)する、というのをしたい。
定期的にするようにcronに登録する。

this is how

*今回はexpectコマンドを使った。expect入れてない場合はyum install expectで入れる。
まずDBをダンプする。

$ mysqldump -u root --password="hoge" db_name > db_name.sql

サーバーAからBへ送る

# ssh ver2使ってる場合は`-2`オプション
$ scp -2 -P 1111 db_name.sql user@serverB:/home/username/db_name.sql

な感じだけど、途中ssh鍵のパスワード求めらたりするので、cron出する場合はexpect使う。
スクリプト書く。

#!/bin/sh
HOST=serverB
PASS=hogehoge
IDENT=/home/username/.ssh/id_rsa

expect -c "
        set timeout -1
        spawn scp -2 -i $IDENT -P 1111 /home/username/db_name.sql  user@$HOST:/home/username/db_name.sql
        expect \"Enter passphrase for key\"
        send \"${PASS}\r\"
        expect eof
"

で、これをcronに登録して回すとdumpしたファイルをサーバーBに送ってくれる。

*参考
expectコマンドをcronで使うためときのポイント | thiroyoshi.blog
シェル以外からexpectしててハマったメモ | ブログ :: Web notes.log

以上

centos7, apacheでSymlink使う場合

これのCentOS7バージョン
CentOS, ApacheでSymlinkを使う場合の設定 - mazeltov7のweb断片

*参考
apacheのDocumentRootをユーザディレクトリのシンボリックリンクに - Qiita

#現在の設定確認
root> getsebool -a | grep  "httpd_enable_homedirs\|httpd_read_user_content"
root> httpd_enable_homedirs --> off
root> httpd_read_user_content --> off

#設定変更
root> setsebool -P httpd_enable_homedirs on
root> setsebool -P httpd_read_user_content on

onになってるのを確認して、リンク貼って、実際に確認。表示されたらOK

以上。

さくらVPSにCentOS7入れたらすること(ssh)

概ねここに則る感じで大丈夫(centos6の時のメモ)
さくらVPSにCentOS入れたらすること - mazeltov7のweb断片
なんだけど、sshログインのportのところでcentosの場合はしなきゃな部分がある。

*参考
- CentOS 7 で ssh のポート番号を変更する | Balun Software (Info)
- CentOS 7 で sshd のポート番号を変更する - Web Application Security Memo
- CentOS 7 で sshd のポートを変更する(firewalld, SELinuxの設定) | CentOS | daily memorandum 3.0.0

centos7ではiptableやなくて、firewalld使う感じで、sshログインで使うポートを設定する必要があるって感じ。やり方は参考リンク見ましょう笑

以上。

apacheでwebとcliでphpのバージョンが違った件

これはなに

memcachedを使おうとしたら、コマンドラインでは動くのに、web(localhost)で動かなった話。なんかphpバージョンも違ってなんやこれと思った

どうやった

まず、memcachedを起動する部分と別にphpで使うライブラリを入れる。(この辺はメモ)

ちなみに、  
brewで入れたやつはここに入ってて、
/usr/local/Cellar/php56-memcached
pecl/手動makeしたのはこちらに入ってる
/usr/local/Cellar/php56/5.6.17/~~

で、/usr/local/optのが効いてるぽいけど、
/usr/local/opt/usr/local/Cellarからのリンクになってる。

php.iniについてだけど、web(apache)の方は/etc/php.iniを見てて、
cli/usr/local/etc/php/5.6/php.iniを見てる。

apacheのモジュールとルートについて、
/etc/httpd.confに設定書いてるけど、その中で、 apacheのルートが/usrな場合はhttpd.con内にLoadModule libexec/hogehogeとか書いてたら、/usr/libexec/hogehogeで読み込んでる。

ここで元の話に戻る。webとcliphpバージョンも設定も違ってwtfっとなってたところ、この記事を発見。
OSX Apache using wrong version of PHP - Stack Overflow
で、brew info php56すると、Caveats以下に入れたらこれやれよ、的な事が書いてあって、その中に、

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

とあり、httpd.confみにいくと、LoadModule php5_module libexec/apache2/libphp5.soとなってた。。。これやぁぁぁぁ、、、、ってことで、書き換えて、sudo apachectl restartするとバージョンもmemcachedも解決。