みんなのちからになりたい

コピペでブログラムつくっていきたい

2015年よかったもの◯選

今年買ってよかったもの◯個みたいのが年末になるとよく出てきますが、最近なぜかあんまお金使ってないので買ったものもそうだけど知ったり使ったりしてよかったものをぼく個人としてもまとめておきたいのです。

ちなみに順不同なので先に上げたのがより良いとかじゃないです。

Game Of Thrones

www.star-ch.jp

Twitterで知って観始めたんですが、おもしろすぎてすごいやばい感じです。

RPG好きならハマる気がします。RPGっていうとよくあるのが剣と魔法の世界ですが、GoTの世界は魔法というよりかは呪術的な感じで、まあドラゴンとか怪物っぽいのとか出てきますが現実とそれほどかけ離れた世界観ではないところがまた良い感じです。

なのでグロいのとかエロいのとか普通に出てくるのでエロいのはともかくグロいのが苦手なひとはちょっとあれかもしれないですが、とにかくおもしろいのでオススメです。

Wikiで世界観とか登場人物とか読んでるだけであっというまに時間が過ぎていくところもやばくて、これみておもしろそうと思ったらぜひみて欲しいですね。

ゲーム・オブ・スローンズ - Wikipedia

最近知ったのですが、CSかレンタルでしかみれないと思ったらPlayストアにあったのでストリーミングでもみれるのかもしれないです。

ガンダムサンダーボルト

ガンダムサンダーボルトは前から名前だけは知ってたんですが、ガンダム漫画ってだいたい良くない意味でやばい感じのが多いのでスルーしてたんですが、映像化するってのを知ってからKindleで1巻無料になったので読んでみたらすごいおもしろくて、なんでこれいままで読まなかったんだ馬鹿かよ...って自分を怒ったくらいです。

で、ガンプラEXPOで映像みたらこれまたすごいやばい感じの出来で、個人的にはORIGINもういいからこっちまじめに作ってくれよ...って感じなので、ぜひともみてほしいですね。

big-3.jp

マッドマックス

今年はガンダムORIGINとマッドマックスしか映画館で観てないですが、マッドマックスまじでここ数年でいちばんのおもしろさですごいやばい感じがしましたね。

帰省したとき地元の映画館で観たんですが、200席位あるとこで3人しかいなかったのですごいやばかったですし、すごい快適に観れてさらにやばい感じがしましてすごくよかったです。

将棋フォーカスからNHK杯の流れ

cgi2.nhk.or.jp

cgi2.nhk.or.jp

小学校が部活とは別に学内クラブみたいなのに入らなくてはならなかったので将棋クラブになんとなしに入ってそこから将棋はやってたんですが、中学に入ったら麻雀覚えてそこから将棋はまったくやってなかったんですが、なんのきっかけか忘れたけどEテレの将棋フォーカスみたらおもしろくて、そこから毎週たのしみにみてるという感じです。

特に将棋フォーカス前半の講座がすごいおもしろくて、なるほどそういう考えがあるのかと毎回勉強になって、あいかわらず将棋はまったく指さないけどこういう考えがなんとなく仕事の考えに活かされてる感じがしないでもない感じです。

午前は藤田綾さんから清水市代さん行って、少し休憩はさんで午後はサンソンみたいな流れで過ごせた日曜は最強なのですごいオススメです。

NHK夏休み子ども科学電話相談

http://www.nhk.or.jp/radiosp/kodomoq/index.html

自分が小さいころもあった気がしてそのころ聴いてた気がしないでもないんですが、togetterのまとめ記事がホッテントリしたのをみたらおもしろくて、そこから聴けるときは聴いて、帰宅の電車の中ではまとめをみるみたいな感じで過ごしてました。

おもしろいのもあれですが、おとなでもすごい勉強になるので来年も聴いていきたいですね。

togetter.com

Cloud9

c9.io

VS2015になってNTVS入れたらNodejsがまともにVSで使えるということで最初はこの組み合わせで最高じゃん!って感じで使ってたんですが、React使うようになってくるとjsx書くときインテリセンスだそうとしてるのかリアルタイムエラーだそうとしてるのかわからんけど激重でまともに書いてられなくて、jsx書くときだけ別のエディタで書いてそれをコピペでVSに貼り付けるという不毛なことしててまじファックだったんですけど、たまたまネットのなんかの記事でCloud9いいよみたいの出てて使ってみたらまじ最高だったという話です。

VSもすごくいいんですが、別途Nodeとかサーバとか用意しなくちゃならないし、その点Cloud9ならIDEやらサーバやらなんやらひとまとめで自動で用意されてしかも公開までできるといういたれりつくせり具合で、もう個人で開発してちょっと公開して遊ぶくらいならこれでいいじゃんという感じです。

Herokuもすごくいいんですが、だんだん厳しくなってきましたし、Cloud9からHerokuにデプロイもできるみたいですし、とりあえずCloud9使っとけば仕事の空き時間に個人プロジェクト作って遊ぶときに環境作らず自宅でもそのまま作業できるのはすごくいいと思いました。

www.visualstudio.com

github.com

HA-FX850

これは前にも書きましたが、そんな感じですごい満足度高いのでやばさしか感じられないですね。

ginzanomama.hatenablog.com

NW-A25

せっかくハイレゾ聴けるイヤホン買ったのでという感じで流れで買いましたが、iPhoneよりかんぜんに音がいいのでオススメできますね。

ハイレゾ音源ですが、ぶっちゃけハイレゾ音源作るにあたってリマスタとかかけるわけで、それによって情報量が増えるのでCDで出したものよりよく聴こえるという感じに思ってて、実際ハイレゾ音源を圧縮音源にして聴いてみてもぼくらみたいなおっさんはたぶんたいして違いがわからないと思います。

偽レゾ問題とかありますが、ぼくとしてはリマスタかけてるなら買ってもいいかなという感じで、CDからハイレゾにアプコンしましたとか書いてあったら普通にCDレンタルなり圧縮音楽買うかなという感じなので、おっさん連中はそんなこと気にせずイヤホン良いの買ってたのしみましょう。

透明な色

これも前に書きましたが、かんぜんにオススメなので買うなりレンタルするなりしたほうがいいですね。

ginzanomama.hatenablog.com

象印 まほうびんステンレスタンブラー

これも前に書きましたが、かんぜんに買ってよかったです。

これ買った一週間後にサーモスのタンブラーも自宅用で買いましたが、満足度はかんぜんに象印のまほうびんステンレスタンブラーの勝ちです。

縁の厚さと持ちやすさとでかさがすごいやばい感じで、買う前に実物さわったときは微妙かなあと思ったのですが、使ってみるとやばいって感じでしたね。

ginzanomama.hatenablog.com

鶏のコンフィ

これも前に書きましたが、これによってぼくのフードコンテナ生活に革命が起きたといっていいほどのやばさを感じました。

なによりいいのが、やり方次第によってはまったく手を汚さず調理できることで、食べ終わったあともジップロックを捨てるだけというやばさ。

ぼくは昼飯用にしか使ってないですが、いろんな用途につかえるということでさらにやばい気持ちになりますね。

ginzanomama.hatenablog.com

カビキラー キッチン用アルコール除菌

これも前に書きましたが、なんかのブログみて買ってみたところ、実際の効果はよくわからないにせよ、お腹壊したりしてないので効果はあるんだと思いますが、これやってるから大丈夫という安心感を買っただけでもよかったなと思えたものです。

食材に掛けても大丈夫なので、ぼくの場合はフードコンテナを洗ったらシュッとして水切りで放置、それ以外でも洗ってしばらく使ってなかったジップロックコンテナとかまた洗うのめんどいのでシュッとして拭かなくてもいいらしいけど軽く拭いてそのまま使うとかよくやってます。

ginzanomama.hatenablog.com

メレル ジャングルモック

MERRELL JUNGLE MOC

地元の友だちが持ってて、散歩するならこれいいよと言われて東京戻ってから買ってみたら実際良かったという話です。

たぶんこれは好みの問題があるので実際試着しないとわからないんだけども、この手の用途によく使われるジョグシューズやニューバランスとかのスニーカーより靴自体が固くてしかも靴底が厚いので、履いた瞬間にすごい違和感があると思います。

こんなんでまじで大丈夫か?と不安な気持ちになりますが、1時間位履いて歩いてみるとなるほどこれは楽だわという感じです。

価格も1万くらいだし、雨の日は履いたことないですが防水だし、スウェードっぽいのが嫌じゃなければ試しに履いてみたらいいと思います。

よつばと!13巻

だいたい年一で年末くらいに単行本出てたのに3年ぶりに出たということで、すごいやばい感じがしましたね。

単行本でしか追ってないのでいまも連載してるか知らないですが、冨樫仕事しろみたいな感じにならなければいいなと思いますね。

まとめ

今年は特に Game Of Thrones と HA-FX850 と 鶏のコンフィ がよかったですし、よつばと!が出たのもよかったですし、仕事的にはReactを実戦投入できたのもよかったので、来年もがんばっていきたいなって思いましたね。

こちらからは以上です。

fluentdでログを整形してElasticsearchに送ってやる方法

Kibanaでグラフ表示するまでよくわからない問題

プロの方はElasticsearchでみただけでわかるのかもしれないですけど、初心者なぼくとしてはKibanaでグラフ表示してみてなんだこりゃあってのが多くてつらいので、ログ整形がんばっていくという話です。

要は、これの続きです。

ginzanomama.hatenablog.com

ソリューション

すごく勉強になるページがあったので、これみてやっていきます。

qiita.com

fluentのプラグイン入れまくる

何に使うのかはよくわかってないけどあとで調べます。

  • fluent-plugin-file-alternative
  • fluent-plugin-parser
  • fluent-plugin-forest
  • fluent-plugin-amplifier-filter
  • fluent-plugin-numeric-monitor
  • fluent-plugin-growthforecast
  • fluent-plugin-rewrite
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-file-alternative fluent-plugin-parser fluent-plugin-forest fluent-plugin-amplifier-filter fluent-plugin-numeric-monitor fluent-plugin-growthforecast fluent-plugin-rewrite

レスポンスタイムをミリ秒に

流れ的に言うと、Elasticsearchに入れる前にフィルタしてログ整形してElasticsearchに流すという感じのようです。

ざっくりこのように変更。

<source>
    # 入力に in_tail プラグインを指定
    type tail
    # 監視するログファイルのパスを指定
    path /var/log/httpd/access_log
    # ログにつけるタグを指定
#    tag apache.access
    tag apache.access_filter
    # 監視するファイルをどの行まで読み込んだかを記録するファイルの指定
    pos_file /var/log/td-agent/httpd-access_log.pos
    # ログの書式を指定
    #format apache2
    format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" (?<response_time>[^ ]*))?$/
    time_format %d/%b/%Y:%H:%M:%S %z
</source>

<match apache.access_filter.**>
  type amplifier_filter
  remove_prefix apache.access_filter
  add_prefix apache.access
  ratio      0.001
  key_names  response_time
</match>

<match apache.access>
    type elasticsearch
    type_name access_log
    host localhost
    port 9200

    logstash_format true
    logstash_prefix apache-log
    logstash_dateformat %Y%m%d
    include_tag_key true
    tag_key @log_name
    flush_interval 10s
</match>

確認すると

f:id:ginzanomama:20151224211218p:plain

うまくいったあ!

ここまでくればあとはなんとかなりそうです。

まとめ

fluentd、奥が深い。


高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

Kibanaを入れる

Kibanaを入れなければならない

システムトラブルでログを追ってくのがつらたんなのでKibanaとやらを入れて可視化して楽にしてきたいと思います。

Kibanaとは

www.elastic.co

See the Value in Your Data
* Flexible analytics and visualization platform
* Real-time summary and charting of streaming data
* Intuitive interface for a variety of users
* Instant sharing and embedding of dashboards

ざくり言うと、いろんなデータを可視化するよというものです。

今回はCentOS 6.7の鯖があったのでそれにぶちこんでいきます。

Java入れる

KIbana入れるにはElasticsearch入れなければならず、ElasticsearchはJavaがいるということでJava入れます。

yum -y install java-1.8.0-openjdk

Elasticsearch入れる

最新版(2.1.1)を入れていきます。

yumで入れられるようですが、GPG入れたりなんなりしなくちゃならないけどドキュメント読んでがんばりましょう。

https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html

基本的に書いてあるとおりにやるだけです。

GPGキー

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

/etc/yum.repos.d/ に elasticsearch.repo 作る

ファイル作ったら以下を書き込みます。

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

yum install elasticsearch

ぶったたきます。

 yum install elasticsearch 

起動確認

動くか確かめましょう。サービスで起動させてみます。

service elasticsearch start
elasticsearch を起動中:                                    [  OK  ]

動いたっぽいです。止めるときはstopで。

自動起動

chkconfig elasticsearch on

やってみる

ドキュメントに Run curl -X GET http://localhost:9200/ って書いてあるのでぶったたいてみます。

curl -X GET http://localhost:9200/
{
  "name" : "Jane Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

よくわからないけど動いてるようです。

そもそもElasticsearchがなんなのかよくわかってないですが、ぐぐってみると要は全文検索エンジンで、REST APIでデータを入出力できるので便利ですという感じっぽいです。

なのでログ解析とかに向いてるってことですかね。

それをKibanaで可視化するという感じっぽいです。

Kibana入れる

wgetで落として解凍しましょう。

wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz
tar -xvzf kibana-4.3.1-linux-x64.tar.gz

config/kibana.ymlいじる

ドキュメントに

* Open config/kibana.yml in an editor
* Set the elasticsearch.url to point at your Elasticsearch instance

と書いてあるのでそのとおりにやりましょう。

起動

./bin/kibana

  log   [10:37:54.770] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
  log   [10:37:54.790] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [10:37:54.800] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
  log   [10:37:54.803] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
  log   [10:37:54.809] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
  log   [10:37:54.814] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
  log   [10:37:54.821] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
  log   [10:37:54.830] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
  log   [10:37:54.843] [info][listening] Server running at http://0.0.0.0:5601
  log   [10:37:59.853] [info][status][plugin:elasticsearch] Status changed from yellow to yellow - No existing Kibana index found
  log   [10:38:04.378] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready

なんか動いてるっぽいですね。

ブラウザで localhost:5601 にアクセスしてみると

f:id:ginzanomama:20151223191259p:plain

動いてるっぽいですね。

ApacheのログをKibanaでみる

ぐぐってみるとどうやらこういうことのようです。

Apache -> td-agent(fluentdのいろいろ入ってるやつ) -> Elasticsearch -> Kibana

なのでtd-agent入れていきます。

td-agent入れる

ドキュメントみて入れていきましょう。

docs.fluentd.org

Before Installation

インスコするまえにやっとけということでやっておきましょう。

docs.fluentd.org

入れる

入れましょう。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

起動

立ち上げましょう。

/etc/init.d/td-agent start
Starting td-agent:                                         [  OK  ]

ドキュメントみると以下がサポートされてます。とりあえずstartしましょう。

$ /etc/init.d/td-agent start
$ /etc/init.d/td-agent stop
$ /etc/init.d/td-agent restart
$ /etc/init.d/td-agent status

試す

ドキュメントに書いてあるのでとりあえず書いてみましょう。

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

デフォルトだと /var/log/td-agent/td-agent.log に書いてあるのでみてみると

2015-12-20 11:33:22 +0900 debug.test: {"json":"message"}

書いてありましたね!

fluent-plugin-elasticsearch入れる

Fluentdで受けたログをElasticSearchに保存するプラグイン入れます。

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

ApacheのログをElasticSearchに書く

そのものずばりのすばらしいページがあるのでこの通り書きましょう。

http://enomotodev.github.io/post/install-elasticsearch/ http://enomotodev.github.io/post/install-fluentd/

こんな感じで書きました。

/etc/td-agent/td-agnet.conf

<source>
    # 入力に in_tail プラグインを指定
    type tail
    # 監視するログファイルのパスを指定
    path /var/log/httpd/access_log
    # ログにつけるタグを指定
    tag apache.access
    # 監視するファイルをどの行まで読み込んだかを記録するファイルの指定
    pos_file /var/log/td-agent/httpd-access_log.pos
    # ログの書式を指定
    format apache2
</source>

<match apache.access>
    type elasticsearch
    type_name access_log
    host localhost
    port 9200

    logstash_format true
    logstash_prefix apache-log
    logstash_dateformat %Y%m%d
    include_tag_key true
    tag_key @log_name
    flush_interval 10s
</match>

確認

/etc/init.d/td-agent restart
curl -XGET http://localhost:9200/_aliases?pretty
{
  ".kibana" : {
    "aliases" : { }
  },
  "apache-log-20151220" : {
    "aliases" : { }
  }
}

こんなのが返ってくれば大丈夫です。

Kibanaでみる

この通りにしましょう。

Index name or pattern に apache-log-* を入れれば表示されるはずです。

http://enomotodev.github.io/post/install-elasticsearch

MySQLのスロークエリを可視化する

とりあえずスロークエリ吐き出すようにしておきましょう。

my.cnfに追加

slow_query_log=1
long_query_time=0.5
slow_query_log_file=/etc/httpd/logs/slow_query.log
log_queries_not_using_indexes=1

service mysqld restart とかしといてください。

fluent-plugin-mysqlslowquery入れる

入れましょう。

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-mysqlslowquery

/etc/td-agent/td-agnet.conf いじる

とりあえずこんな感じにしときます。

<source>
    type mysql_slow_query
    path /etc/httpd/logs/slow_query.log
    tag mysql.slow_query
</source>

<match mysql.slow_query>
    type elasticsearch
    type_name slow_query_log
    host localhost
    port 9200
    logstash_format true
    logstash_prefix slowquery-log
    logstash_dateformat %Y%m%d
    include_tag_key true
    tag_key @log_name
    flush_interval 1s
</match>

あとは Kibana の Index name or pattern に slow_query_log* とか入れると出てくるはずです。

まとめ

とりあえず動かすこと重点でパラメータの意味とかまだわからないですが、とりあえず動いたのでこれからいろいろいじっていきたいなと思いましたね。

こちらからは以上です。


高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

すね肉を喰らう 炊飯器炊飯ボタン編

3週にわたってお届けしてきたすね肉を喰らうシリーズ、今回で最終回を迎えることになりました。

ginzanomama.hatenablog.com

ginzanomama.hatenablog.com

いきなり結論

結論から言いますと、かんぜんに美味いとうことです。

ただ、ぼくの知識不足から致命的ではないにせよ失敗しましたが、この調理法に間違いはありませんでした。

すね肉を買う

今週も安心のハナマサで買ってまいりました。

f:id:ginzanomama:20151220174853p:plain

炊飯器に入れる

f:id:ginzanomama:20151220175238j:plain

今回は新じゃが売ってたのでそれをぶちこみます。

皮をむかなくていいのですごい楽でいいですね。

水を入れる

f:id:ginzanomama:20151220175407j:plain

水を材料が浸るくらい入れます。

思えばここが失敗の原因でしたが、この後リカバリーできます。

失敗したくなければ水は多めに入れましょう。

材料が浸ってから2cmくらい入れれば十分でしょう。

炊飯ボタンを押して炊きあがりを待つ

炊きあがりを待ちましょう。だいたい1時間ちょいくらいだと思います。

炊きあがると以下のようになります。

f:id:ginzanomama:20151220175816j:plain

状況を報告しますと、まずじゃがいもはかんぜんに火が通っていて食べごろでした。

すね肉ですが、火はかんぜんに通っていて、箸をぶっさしても貫通し、かんぜんに食べられるというのがわかります。

ただし、ちょい固いなもうちょい煮崩れするくらいまでやりたいなと思ったため、2度めの炊飯ボタンを押すことを決意します。

ここが失敗と成功の分かれ道で、みるとわかりますがかんぜんに水分が足りません。

ぼくはこのまま炊飯ボタンを押したためあやうくやばい感じになるところでしたが、水を足すか予め水を多く入れておくことをオススメします。

2度めの炊飯ボタンを押した結果

f:id:ginzanomama:20151220180222j:plain

みるとわかりますが、かんぜんに水分がありません。

俗にいう空炊き状態ですが、最近の炊飯器が進化してるのか幸い特に問題もなく、肉も柔らかくなってました。

このあともう一回作って2度めも水を浸るくらいまでにして炊飯ボタン押しましたが、柔らかさは間違いなく浸るくらいまで水を入れてた方でした。

結論

炊飯ボタン最強伝説でした。

もう煮込み料理は炊飯器でいいんじゃないかと思ってきました。

炊飯器の唯一の欠点は、上蓋も当然洗いますが、においが炊飯器に付くことで、これをやってからご飯を炊いたことがないのでお米に匂いがつくかわかりませんが、その懸念があることでしょうか。

とにかく手間もかからず材料入れて水入れてボタン押すだけでおいしくできるのはやばい感じです。

これからも炊飯器調理を推し進めていきたい、そう思いました。

こちらからは以上です。


Jupyter NodeJSで日本語で落ちてた例のアレ

昨日のアレ、やはり日本語で落ちてたっぽく、おっかけてくとダイジェストコンペアで相違が起きるためエラーぶん投げて終わるみたいな感じっぽかったので、とりあえずそこコメントにしたら動きました。

ginzanomama.hatenablog.com

ちゃんとした直し方はあるんだろうけどPythonさっぱりわからないし、とりあえず社内で使う分にはいまのところ問題ないのでこれでいくことにしましたね。

/anaconda2/lib/python2.7/site-packages/jupyter_client/session.py 848:849

#  if not compare_digest(signature, check):
#    raise ValueError("Invalid Signature: %r" % signature)

こんな感じでスクレイピングもできるのでいろいろ遊べそうです。

f:id:ginzanomama:20151216205109p:plain


入門 Python 3

入門 Python 3

Jupyter Notebook入れてNodejsのカーネルも入れる

Jupyter Notebook

これみてすごい便利そうだったので入れてみました。

techlife.cookpad.com

ちょうど仕事の隙間にあたって比較的自由時間が多かったというのもあります。

ちなみにPythonはまったくさわったこと無いのでよろしくお願いします。

インストール

公式サイトの手順通りにやりましょう。なにごとも基本が大事です。

http://jupyter.readthedocs.org/en/latest/install.html#new-to-python-and-jupyter

Python2と3の違いがよくわからないですが、2のほうがモジュール多いとぐぐって 見かけたので2で入れてみます。

Anacondaのインストール

Python noobはAnaconda入れろとのことなので入れます。

https://www.continuum.io/downloads

今回はCentos7にぶち込むのでPython2.7の64bitをダウンロードしてコマンドぶったたきます。

bash Anaconda2-2.4.1-Linux-x86_64.sh

途中なんやらいろいろ選択肢が出てきて不安な気持ちになりますが、ここみて落ち着きましょう。

www.task-notes.com

Jupyterのインストール

シェルを再起動してコマンドぶったたきます。

conda install jupyter

起動確認

インストールはできたはずなので起動するか確認します。

jupyter notebook

http://localhost:8888 にアクセスすると動作しているはずです。動かなかったら祈りましょう。

サーバで動かしたい

ローカルで動いてもあまりうれしくないのでサーバで動かします。

事前にfirewallとかはどうにかして下さい。

サーバでの動かし方も書いてあるのでざっくりこの通りにしましょう。

http://jupyter-notebook.readthedocs.org/en/latest/public_server.html

ざっくり読むとconfig使っていくつか書き換えれば動くようです。

今回は社内で使うので特にセキュアにせずザル運用します。

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 9999

portは変えたかったら書き換えて、変えたくなかったら8888のまま動作します。 今回はめんどいので書き換えてません。

http://サーバのアドレス:8888 にアクセスすると動作しているはずです。動かなかったら祈りましょう。

起動ディレクトリを変更したい

起動するとぼくの場合ホームディレクトリで動いててディレクトリやらファイルやら作り放題削除され放題なのでどういうことなの...と思って起動ディレクトリ変更したかったのですが、configに書けばいいのでした。

c.NotebookApp.notebook_dir = u'jupyter'

こんなふうに書くと /起動ディレクトリ/jupyter になるので安心です。

これみると気づくのですが、要は起動したディレクトリがホームディレクトリになるので、Jupyter Notebook用のディレクトリ掘ってそこから起動してもよいということにもなります。

用途次第ですが、ディレクトリ単位で管理するひとはこっちのほうが便利そうですね。

カーネル入れてみる

本題ですが、いまのところぼくとしてはPythonのノートが使えても特に嬉しいことがないので違う言語のカーネル入れていきます。

とりあえずぼく的に身近なところでnodejsを使えるようにしていきます。

Jupyterで使えるカーネル

先人の教えにより以下をみるべしとのことなので、他のカーネル入れたくなったらここみましょう。

github.com

みてみると、見事なまでにnode無いですが、ぐぐると見つかりました。

github.com

とりあえずnode入れないと動かないので入れてないひとは入れて下さい。

Jupyter NodeJS入れる

Installationにおもいっきり書いてあるのでそのとおりにやっていきます。

最新のリリースからファイル落としてきてコマンドぶったたきます。

github.com

tar xf jupyter-nodejs-1.1.0.tgz
cd package
npm install && node install.js
ipython console --kernel nodejs

やってみればわかるんですが、node入れたばっかの環境だとたぶんzmq.hがないとかなんとか言われると思うのでzeromqを入れておきます。

yum install zeromq
yum install zeromq-devel

これを入れてから再度 node install.js してみるとまたエラーがでると思います。

Error: ENOENT: no such file or directory, open '/home/.ipython/kernels/nodejs/kernel.json'

install.js みると .ipython/kernels/nodejs/kernel.json に書き込もうとしてるけどディレクトリがないってことなので適当に作っていきます。

イシューみると0.12で直すって書いてあるけどまだ出てないので作るしか無いって感じです。

ディレクトリ作って再度実行すると成功すると思います。

動かす

インストールさえできれば

ipython console --kernel nodejs

で動くと思います。

notebookでも動くのでいじくり回して遊びましょう!

npmでモジュール入れればだいたいなんでも動くっぽいですが、コンソールみてたら日本語の文字コードシリアライズで引っかかって落ちてるっぽいのでなんかする必要があるのかも知れませんが、もう帰りたいので今日は帰ります。

Pythonわかればもっといろいろできそうですが、残念ながらまったくわからないのでこれからがんばっていきたいですね。

こちらからは以上です。


入門 Python 3

入門 Python 3

すね肉を喰らう 炊飯器保温ボタン編

前回の反省点と改善案を踏まえ、炊飯器で料理してみた結果を報告したいと思います。

ginzanomama.hatenablog.com

炊飯器でやってみた結果

いきなり結論から言いますと、失敗しました。

最後に反省点がありますので、みなさんは同じ失敗をしないようにしてください。

以下、報告です。

すね肉を買う

ちょい遠征してハナマサで買ってきました。

f:id:ginzanomama:20151213142904j:plain

高いか安いかわかりませんが、これしかなかったのでこんなもんなんだと思います。

2塊あるので2回に分けて使えて経済的です。

炊飯器に入れる

f:id:ginzanomama:20151213143108j:plain

野菜類は基本的に冷凍してるので、冷凍庫にあった野菜を適当にぶち込みます。

もちろん冷凍してないほうがいいのはいうまでもありませんが、毎日自炊できるならともかく、イット業界は日々の突発的なトラブルと残業が切り離せないので週末に食材を買ったら切って冷凍するようにしています。

ローレルもとりあえず入れてますが、なくてもいいと思います。

あとは前回の反省を踏まえ、コンソメを一欠片ぶちこんでおきます。

アツアツの熱湯をダバァする

f:id:ginzanomama:20151213143546j:plain

炊飯器保温調理の基本ですが、お湯はアツアツの熱湯を入れます。

で、保温ボタン押して2時間待ちます。

ほっとくだけなので3時間でも4時間でもいいんですが、ぼくの腹がもたないので今回は2時間としました。

2時間後

f:id:ginzanomama:20151213143810j:plain

2時間後の姿がこちらです。

一見できてるようにみえますが、いちおう肉も中までギリ火が通ってるという程度で、じゃがいももガチガチです。

ここでこれ以上保温しても無意味だと悟り、素直に鍋に入れて1時間煮込みました。

まったく無駄な時間を過ごしたと思いました。

失敗の原因と反省点

失敗の原因は明らかで、冷凍した野菜をぶち込んだため、お湯の温度が冷めてその状態で保温したため温度が足りなかったということです。

常温の野菜であればもしかしたら大丈夫かもしれませんが、肉の温度も冷たいのでむずかしいと思われます。

また、最大の失敗は鍋に移し換えて煮込んだことで、冷静に考えればそのまま炊飯ボタンを押せばよかったのではとすべてが終わった後で思いましたが、ぼくの腹がもたなかったので冷静な判断ができませんでした。事前にパンでも食ってればよかったなと思いました。

反省点としましては、すでに前述しているように最初から水入れて炊飯ボタン押せばよかったということです。

ここで一つ言い訳させてもらえると、炊飯ボタンがどれくらいの温度で調理されるのかまったく理解できていなかったため、炊飯ボタンに信頼を置けなかったことが最大の失敗でした。

よくよく考えれば米に水入れてふっくら炊きあがる炊飯ボタンに信頼を置けなかったぼく自身に問題があり、炊飯ボタンが悪いわけではありませんでした。

次回はこの反省を踏まえ、最初から炊飯ボタンで調理してみようと思いました。

こちらからは以上です。


すね肉を喰らう

いま、すね肉がうまい

先週実家から大量に野菜が送られてきて、毎日白菜を中心に消費しなければならない状態なのですが、さすがに毎日だとつらいものがあるのでお肉を食べようと思ってスーパーにいったら豚のすね肉があったので食べたという話です。

ちなみに豚のすね肉、近所のスーパー価格でげんこつくらいのかたまり2個で500円しないくらいでした(グラムいくらか忘れましたが90円はしなかったと思います)

結論から言いますと、すね肉最高ということです。

すね肉のレシピ

すね肉でググると即座にアイスバインが出てくるほどアイスバインが有名なようで、要は塩で下味をじっくり漬けて長時間煮込むという料理のようです。

cookpad.com

とてもうまそうですが、めんどくさくなくすぐ食べたい派のぼくとしては、肉なんだから煮込めば出汁が出てそれだけでうまいのではという仮説を立て、単に煮込む作戦に出ました。

煮込み方法作戦会議

先に行っておきますと、画像は一切ありません。

煮込み料理界ではある意味圧力鍋がデフォになっているようですが、うちにはそんなものはないため鍋で長時間煮込むソリューションに出ました。

煮込み時間はなんとなく1時間半とし、柔らかくならなければ時間を延長します。

すね肉を煮込む

今回は下味も何もせず、鍋にただすね肉をぶち込みます。

すね肉だけでは何なので、ついでに味が染み込みやすい大根やじゃがいもも入れていき、それらが浸るくらいに水を入れて蓋をして煮込みます。

はじめは強火で沸騰させ、沸騰してきたら中火から弱火で1時間半待ちます。

途中、アクが出るかなと思って蓋を開けてみましたが、アクらしいアクはまったく出なかったのでただひたすら煮込みました。

1時間半後の柔らかさはどうか

1時間半後に蓋を開けて柔らかさを確認したらめちゃめちゃ柔らかくなってました!

おそらくあと30分ほども煮込めば箸で余裕でほぐれてくるような感じになると思いますが、早く食べたいのでぼくはここで良しとしました。

1時間ではまだ固いと思うので、1時間半から2時間がベストではないかと思われます。

煮込んだすね肉を喰らう

煮込んだすね肉を思う存分食べましょう。

味は薄いかなと思ったのですが、すね肉からいい感じに味が出てましたが、物足りなさを感じるかもしれないのでコンソメくらいは入れたほうが良いと思います。

大根とじゃがいもにもしっかり味が染みこんですごいやばい感じになってました。

今回の反省点と改善案

すね肉だけで出汁はオッケーかなと思ったのですが、やはり少し物足りなさを感じるので出汁的なものは入れたほうが良いと思いました。

改善案としては、鍋で煮込むとIHだろうがコンロだろうが加熱してる以上火加減を見なければならないという問題は避けられないため、どうにかして無人化したいなと思いました。

その案のひとつとして、炊飯器保温作戦がよいのではと思っています。

炊飯器であれば温度を一定に保てますし、コーティングしてあるので洗うのも楽という利点もあるため、次回は炊飯器保温作戦を遂行していきたいと思いました。

結論

すね肉、おいしいので食べましょう。

ひとかたまりあればお腹いっぱいですし、じゃがいも人参などの野菜を入れても300円くらいで出来ますのでおすすめです。

こちらからは以上です。


WordPressのテンプレートエンジンにVoltを使う

デザインとロジックが分離してないのがつらい問題

WordPress初心者なのでプロはどうしてるのか知らないんですが、デザイナがテーマじゃなくhtmlとcssでデザイン上げてくるという環境な場合、index.phpとかsingle.phpにロジックぶち込んじゃうとあとでデザインに修正入ったときに地獄になる気がしておそろしい。

今回まさにそんな状況で、もう納品してるので過去の話ではあるんだけども、テンプレートエンジン入れましたという話です。

テンプレートエンジンどれを使うか問題

PHPのテンプレート探すといくつかあるんですが、nodeでejsに慣れてるというのもあり、ejsチックに使えるものを探します。 ちなみにぼくはPHPほとんど使ったこと無いのでもっといいのがあったり見当違いなこと言ってる可能性もあるのでそこは他で補完してください。

そんななかで今回候補に挙げたのがこの2つ。

Blade

laravel.com

LIGで解説されてるので雰囲気はこちらで感じてください。

liginc.co.jp

Volt

Volt: テンプレートエンジン — Phalcon 2.0.8 ドキュメント

今回はVolt使います

一応両方使ってみたんですが、結論として今回はVolt使いました。

理由としては

  • パッと見てなにやってんのかわかる

これにつきます。

Bladeは初見でみると@sectionとか@yieldとかなにやってんのか一発で理解しづらい(別に@sectionとか使わなくても書けますよ一応)のと、@includeとか@extendsしたファイルがコンパイルするとその分だけできるのがなんとなくいやだったという理由です。

Voltはその点、見りゃだいたいなにやってんのかわかるのがのちのちの安心感に繋がるというのが大きかったです。

ただ、VoltはWordPressプラグインがないので、Linuxの場合ソースからビルドするなり何なりして入れる必要があるというめんどくささがあるので、そこをどう考えるかですね。

それを踏まえても、見た目楽そうというのにはぼくは敵わなかったという感じです。

Phalcon(Volt)を入れる

Volt入れるためにはPhalconを入れる必要がある、ということで入れていきます。

インストール

安心してください。ここみれば大体わかります。

qiita.com

今回はPHP5.6 / Apache2.4使ったので微妙に変えてあります。

$ yum install php56u-devel

$ git clone git://github.com/phalcon/cphalcon.git
$ cd cphalcon/build
$ sudo ./install

phalcon.iniの設定

/etc/php.d に 30-phalcon.iniがなかったら作って下記を書きましょう。

extension=phalcon.so

インストールの確認

コマンドぶったたいで動いてるか確認します。

$ service php-fpm stop
$ service php-fpm start
$ service httpd restart
$ php -i |grep Phalcon
Author => Phalcon Team and contributors

使い方

ここみれば一発でわかります。楽ちんですね。

How to use Phalcon template engine ( VOLT ) as standalone - W3bDeveloper.com

includeとかpartialしたい場合はここ見ましょう。

kamoqq.hatenablog.com

結論

管理がめちゃめちゃ楽になったので使いましょう。

つか、デザイナのひとがテーマ作ってくれたらこんなことしなくていいんですけどね...


詳解 WordPress

詳解 WordPress

本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版

本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版

WordPressによるWebアプリケーション開発

WordPressによるWebアプリケーション開発

Windows7 + Selenium + WebdriverIO

近々500ページ位あるサイトのデザイン変更する案件をやることになるらしく、目視で500ページを確認してたのでは死んでしまうということで、SeleniumでSS撮りまくってビューアで確認するというとりあえず楽できそうなソリューションを試してどうなるかを試していきたいと思います。

今回はWindows7Selenium入れてNodeでSS撮るScript作って動かすというところまでをやってみます。

ちなみに先にCentOS6.5上で同様のことをやろうとしたんだけども、firefoxの最新のドライバがおかしいのかSeleniumは動くがfirefoxがまったく動かないという現象に見まわれ丸一日無駄にしたけどWindowsに入れたらものの十分程度で動いたという話です。

JRE入れる

JREが入ってないとどうしようもないので、30億のデバイスで走るJavaを入れます。

java.com

今回はWin7 64bitなのでWindows オフライン (64ビット)を入れましょう。

Selenium Standalone Server入れる

現時点での最新版2.48.2を適当なフォルダにダウンロードします。

http://www.seleniumhq.org/download/

ついでにchromeのドライバ(chromeが嫌ならなんか好きなドライバ)もダウンロードして、パスが通ったフォルダにぶち込みます。

sites.google.com

Selenium Standalone Serverを動かす

先ほどダウンロードしたフォルダに入るかパス通すかなんかして起動します。

java -jar selenium-server-standalone-2.48.2.jar

なんかだらーっとメッセージが出てきて

RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub

みたいなのが表示されるので http://127.0.0.1:4444/wd/hub にアクセスします。

アクセスすると Create Session ってボタンがあるので押すとダイアログが出るので chrome を選ぶともう一枚ブラウザが立ち上がるので、とりあえずそれが立ち上がればOKです。

WebdriverIO入れる

Nodeは入ってるとして、NodeでSeleniumを使うものとして今回はWebdriverIOを使います。

webdriver.io

npmでぶっこんでサンプルにあるコードを実行してうまく動くなら成功です。

var webdriverio = require('webdriverio');
var options = { desiredCapabilities: { browserName: 'chrome' } };
var client = webdriverio.remote(options);
 
client
    .init()
    .url('https://duckduckgo.com/')
    .setValue('#search_form_input_homepage', 'WebdriverIO')
    .click('#search_button_homepage')
    .getTitle().then(function(title) {
        console.log('Title is: ' + title);
        // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
    })
    .end();

PhantomJSを入れる

saveScreenshotすると気づくのが、viewport分しか撮れてないことで、これをすべて撮るためにPhantomJSを入れます。

http://phantomjs.org/

これも同様にパスが通ったフォルダにぶち込みます。

サンプルのbrowserNameに'phamtomjs'と入れて動くようなら成功です。

結論

Selenium動かすならWindowsを使え。

こちらからは以上です。


実践 Selenium WebDriver

実践 Selenium WebDriver

Seleniumデザインパターン & ベストプラクティス

Seleniumデザインパターン & ベストプラクティス

システムテスト自動化 標準ガイド CodeZine BOOKS

システムテスト自動化 標準ガイド CodeZine BOOKS