行く記憶の流れは絶えずして

戻ってこないのでメモするところ

あけましてTensorflow on centos6

 

見てくれる人がいるかわかりませんが、明けましておめでとうございます。

 

新年ということで実家からVPSにTensorflowを入れてみました。

何をさせるからこれから考えます。

 

導入(Python)

とりあえすつまづいた点を挙げていきます。

入れ方はこちらを参考に。

CentOS に Python2.7, Python3.3を入れたメモ - Qiita

  1. CentOS6.6なのでPythonのインストールから
  2. 動作環境がC++Pythonなので、せっかくだからPythonにしました。
  3. 2系と3系があるそうですが、馴染みがあるのが2系なので2系にしたらはまってしまった…
  4. 結局Pythonは3系にしました
  5. ここから私の浅い知識なのでいくらでも回避方法があると思います。それも面倒な方はご参考に。
  6. 2系(2.7.6)を入れようとすると、
  • numpyが文字コードUCS2で入る
  • TensorflowはUCS4
  • ってことになり、Pythonは(私の知る限り)どちらかの肩を持たなければいけませんが無理でした。
  • というわけで3系にしましたが、勢いで最新版の3.5.1を入れたらTensoflowが入りませんでした。
  • URLから察するに3.4.*ならいいだろうと思ったからいけました。

 

(はてなキーワードとSyntaxHighlighterがケンカしてうざい ので引用にしてます)
curl -O https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz
tar zxf Python-3.4.4.tgz
cd Python-3.4.4
./configure --prefix=/opt/local/Python344
make && make altinstall
curl -kL https://bootstrap.pypa.io/get-pip.py | /opt/local/Python344/bin/python3.4
/opt/local/Python344/bin/pip3.4 install virtualenv

 

導入(Tensorflow)

mkdir tensorflow
/opt/local/Python344/bin/virtualenv --system-site-packages tensorflow

source bin/activate

./bin/python3.4 -m pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.6.0-cp34-none-linux_x86_64.whl

実行時にglibcのバージョンが足りない

Centos6はglibcのバージョンが2.12止まりなので、Centos7からもらいます。

そのアイデアはこちらから頂きました。

Python - root無しの環境でtensorflowを使う - Qiita

 

mkdir tflib
cd tflib
curl -O http://ftp.riken.jp/Linux/centos/7/os/x86_64/Packages/glibc-2.17-105.el7.x86_64.rpm
rpm2cpio glibc-2.17-105.el7.x86_64.rpm|cpio -idv
curl -O http://ftp.riken.jp/Linux/centos/7/os/x86_64/Packages/libstdc++-4.8.5-4.el7.x86_64.rpm
rpm2cpio libstdc++-4.8.5-4.el7.x86_64.rpm|cpio -idv

(bin/activateに追加、パスは各自環境で)

alias tfpy='LD_LIBRARY_PATH=~/tensorflow/tflib/lib64/:~/tensorflow/tflib/usr/lib64/ ~/tensorflow/tflib/lib64/ld-2.17.so ~/tensorflow/bin/python3.4'

 

さわりやサンプルコードはこちらから。

Python - TensorFlowを算数で理解する - Qiita

 

何をさせようかもあるけど、使い方も手探りでいろいろ試したいですね。

 

必要悪という存在

 

今年は転職&引越し&一人暮らしという私にとってのビックイベントがあったのですが、

それを上回るイベントが近々ありそうです。

 

祖母の逝去です。

 

祖父のときは入院後1週間くらいでしたが、今回は2ヶ月くらいになります。

すでに点滴と呼吸器で生かされている状態で、あと1週間もつかというところ。

回復の見込みは当然なく、いつ亡くなってもおかしくない状態。

見てて辛いです。

父が病院のスタッフにあとどのくらいと聞いてもあやふやな返事らしく、

そのあたりはぼかすよう指導されているのではないかと思います。

やはりそのあたり明言すると面倒になる人間がいたのではないかと思います。

 

前置きはこのくらいにしてここでタイトル。

 

ボトルネックになっている物事というのは、アンタッチャブルな話が多く、

肯定したり具体的に話すことが憚られる空気だったりします。

( 決定権を持つ当事者はだいたい感情的になりマイナスの出来事を考えたくないのかな、

 祖母の死という出来事の当事者であれば私もそうなると思います )

それでも覚悟を持って話を持ちかけるととやっぱり悪役にされますが、

何も対策しないより好転する、気持ちの整理は出来るはずだと私は考えます。

 

今回の話では延命処置や遺産(相続税対策)の話がそれに該当します。

やはりアンタッチャブルで不謹慎扱いされます。

 

それでも損得を抜きにして、決定権を持つ人間が満足すればいいのか?

延命処置を続けて遺産の話は触れないほうがいいのか?

私は家族の財産を国にとられるほうが悔しいのですが。

( 納税の義務の話もあるのでとられる、というのは語弊がありますが、

 税率が変わる閾値をぎりぎり超えてしまうとかは悔しいと感じます )

 

ローマ時代には戦に勝ち凱旋パレードをする将軍に対し、「死を忘れるな」と

言い続ける役が存在したようです。浮かれず気を引き締めろ、と。

 

気持ちの整理が出来てないままだらだらと書いてしまいましたが、

やはり私は「死を忘れるな」、見たくないものも見るべきと言う立場でありたいです。

何より、感情的になった人間につけこむ人間が嫌いであり、

見たくないものを見ていれば多少は防衛できると考えています。

感情を金銭で処理できる、という考えもあるので難しい問題ですが。

 

ちょっと考えが整理できてきたのでここまで。

人それぞれなんて言葉で片付けない程度には考えをまとめたいですね。

引越し一括見積もりではまる

 

転職に伴い引越しの見積もりをしているのですが、

一括見積もりなる方法を見つけ試してみました。

引越し侍というサイト。

今回は個人情報の抜かれ損っぽい気分です。

( 今回は、というのは複数の引越し一括見積もりを試す気分に離れないので )

  1. 現住所と引越し先、荷物の量をを入力してください…見積もりに必要だよね
  2. 名前、電話番号、メールアドレスを入力してください…個人情報はやだな
  3. 見積もり依頼完了、複数の会社から連絡が来ます…!!!!????!?

 

想像していたのは1までで複数社の概算が出てきて比較し、

気になるところにこちらから連絡する方法だと思っていました。

( 各社の見積もりフォームに一括で入力、各社の見積もりが返ってくるイメージ )

やることが意外に大雑把。

運営元がIT企業だから期待してたけどギャップが激しかったですね。

 

結果としては6社くらいからのメール&電話の同時攻撃。

しかも気になってた大手は対象外。

想像とは大きく異なりますが、きちんとサイトのどこかに書いてあるんでしょうね。

 

 

これからスパムが増えたら悲惨だなぁ。

 

cakePHP入門にEclipse+Composerにこだわり学習意欲を削がれる

 

6/19くらいにPHPに改宗せよという天啓を受けました。

始めてみると、まあうまくいかない。

PHPperlの記法+Javaのようなクラス定義、といった印象。

( PHP5.5以降ではジェネレータがあったり、言語としても長短。

 Javaネイティブなのでジェネレータはうまく使えないから微妙。

 使いこなせるとかっこいいのでしょうね・・・。)

 

以前までEclipseでDropwizardを触っていたので異文化交流状態です。

インストールではこちらを参考にさせていただきました。

http://qiita.com/ysnsyks2/items/176cfddbdf1f79d65a75

 

現状で比較してみると以下。

言語 Java PHP
フレームワーク Dropwizard cakePHP
ライブラリ管理

Maven

pom.xml

Composer

composer.json

ORM Hibernate
Dropwizard付属

????
DB接続情報はapp/config/app.phpに書く箇所がある

DBマイグレーション Liquibase
Dropwizard付属
????
テスト JUnit
webアプリレベルではJettyを使用してテスト可能

PHPUnit
webアプリレベルでは他のサーバー(httpdなど)を使用する

実行(デプロイ) デプロイ後、実行でポートのリッスンまで単独

他のサーバー(httpdなど)でポートフォワードすれば

デプロイだけ、明示的な実行は不要?

 

まだPHPサイドでは理解不足だったり、

Dropwizard目線で項目を出しているので不便な印象を受けます。

 

で、表題の話。

Composerを使用しようとするとだいたいコンソールで、Eclipseでの話はなかなか出てこない。

やっとこプラグインを見つけるもpackegistの検索で固まったり、

cakePHPのプロジェクトのスケルトンは作れなかったり、

コンソール上で同じことをするとフォルダ構成が違ったり、修行が足りない。

特にフォルダ構成が違うのは初心者に厳しい。

 フォルダ構成は、ざっと見た感じ以下の3種類があるっぽいです。

  • php composer.pher create-project dev cakePHP/app
  • composer.jsonを編集してcomposer install
  • eclipseでcomposer.jsonを編集してinstallっぽいことを実行

eclipsecakePHPを動かしている例を見たことがなく、またうまくいかない。

休日返上で格闘するもEclipseを見限ってコンソールでプロジェクト作成。

 

世間ではnetbeansとかPHPStorm+コンソールという体制なのか?(知ったか)

Eclipse上でデプロイ以外を賄えたDropwizardを思うと不便さを感じる。

 

で、やっと入り口に立ったわけで。

まあぼちぼちやるしかないですね。

 

Big Peat

f:id:taketsuru:20150528214017j:plain

 

国産ウイスキーが軒並み値上げとなる昨今(山崎、竹鶴派です)、いい機会なので

海外ものにも手を出してみようとポチってみました。

 

 まとめサイトで見かけ、ちょっと調べると

  • ピート臭がやばい
  • 炭俵の香り

などと褒めてるのかどうか分からない(たぶん褒め言葉だと思う)意見。

 

いざ挑戦すると、国産ウイスキーやマッカランを全てと思い込んでいた私にとっては

カルチャーショックな香り。まさしく先に上げた意見の通り。

私の言葉でいうと、「燻製を飲んでいる」感じ。

製法を考えるとそのままなんですけどね。

 

手元にあったサイダーで割ってみるとこれがちょうどいい。

燻製+甘味=カラメルになり、燻製の香りが薄まってもともと持っている甘い香りが

炭酸で浮上してくる感じ。

他のスコッチもこんな感じなのかな。

とはいえ、これで満足してしまったので飲みきってから考えたいですね。

 

Liquibase、H2databaseでdropAll()できない

 

表題ままです。1週間悩んでました。

 

流れとして、

  • テストコード書きたい

  • DBにテストデータ入れたい

  • DropwizardのテストからLiquibaseを知る

  • テストを独立させるため@Beforeでテーブル作成、@Afterで全て消したい

  • 消えない(エラー終了)

最初はH2databaseとLiquibaseの相性とかいろいろ考えてました。

foreign key,view,tableを消す処理を自前で作ることも辞さない勢いでした。

 

が、落ち着いてログを見るとスキーマ名とテーブル名がダブルクオートで囲われている。

 

まさかと思ってソースを見ると、わざとそういった処理をしていました。

そのためそこだけオーバーライドしてよけたらうまくいっちゃった。

自己満足のためにgistで公開してみました。

Solve my way of exception on liquibase.dropAll(),using H2database(MODE=MYSQL)

Liquibase-3.1.1、 h2database-1.4で確認しています。

 

プロジェクトのソースに横槍を入れるなどおごがましいと考えているので、

絶対に他にやり方があると思います。

 

1週間の戦いに勝ったので、今日はマッカランで1杯やって寝ます。

DropwizardのテストからLiquibaseを知る

 

DropwizardのDAOテスト用DBをどうしようかと悩んでいたらこれを知りました。

最初はmockitoを使ってやりきろうと思ったけど、SQLのクエリも見たいのと

ログイン周りでSessionを使っているのでこれを選択。

 

DBをバージョン管理できるすごいやつ。

 

今回はMySQLの既存のスキーマxmlにダンプして、h2 dabatase(in memory)に

再構築してテスト用DBを作ろうと頑張ってみました。

Dropwizardに食わせるDB設定は本番環境とテスト環境で設定ymlを分ければいいので楽です。

 

できたこと:

  1. xmlのテンプレートを作っておく(Step 1参照)

    Liquibase | Database Refactoring | Liquibase Quickstart<

    必要ないかもしれません

  1. 設定項目をliquibase.propertiesに記載

    Liquibase使い方(基本)メモ - Qiita
  2. ダンプ

    • java -jar [liquibase.jarのpath] --defaultsFile=[上記で作ったliquibase.properties] generateChangeLog
    • liquibase.jarとDBドライバはDropwizardのプロジェクトで使用(依存)しているものにリンクを張るとバージョンで悩まない
    • 上記だとログ作成時にymlパーサーが見つからないとINFOが出たが今回は無視
    • クラスパスをきっちり指定している人は大丈夫だと思う
  3. h2 databaseへの再構築(一部)、Dropwizardのテストでの使用

    上記で作成したxmlをdropwizard-migrationで使用

    Java - dropwizard-testingが便利でした - Qiita

できなかったこと:

  • ダンプしたxmlからの完全な再構築

    • VIEWのクエリでDATE_FORMAT()関数を使用していた部分、スキーマ指定していた部分
    • DATE_FORMAT()使用箇所はテストでクリティカルではないので削除、
    • スキーマ指定もここでは単一のスキーマなので削除
  • スキーマの指定(上記でも触れていますが、やりたいことができたので後回し)

 

目的は達成できたので満足です。

いずれバージョン管理にも手を出したいところ。