マイクラPC始めました

今更マイクラのPCを始めました。
前までPEやってたんですが、煩わしくなって今更PCに乗り換えです。

とりあえずスクショだけ。

木と小麦を育てるエリア

f:id:kakushika:20160829051042p:plain

牧場予定地

f:id:kakushika:20160829051140p:plain

船着場(入水前)

f:id:kakushika:20160829051221p:plain

船着場(入水後)

f:id:kakushika:20160829051253p:plain f:id:kakushika:20160829051324p:plain

早く寝床をどうにかせねば・・・・
f:id:kakushika:20160829051357p:plain

オフラインでもChatOpsしたい!Dockerで解決しよう!

経緯

ざっくり言うと、ChatOpsしたい!けどネットワークに制約がある!なのでDockerで必要なものを用意してイメージを持ち込もう!という経緯です。

入れるもの

Restyaboard

Trelloのクローンです。
プロジェクト管理でRedmineを使ってましたが、カンバンを使いたく、かといってRedmineのカンバンがあるけどもRedmineは個人的に今後の展望wktkしなかったので流行ってるTrello!・・・を使えないからそのクローンのRestyaboardを使ってみようという経緯です。

Rocket Chat

Slackのクローンです。
最初はLet's Chatを使ってました。
すごくシンプルで、かつオシャンティなので浸透も早かったです。ただ問題点が、アバター画像がgravatarで外部接続が必要で、こちらの記事を参考に手を加える必要がありました。アップデートする度に手を加えるのも辛いし、もっといいのないかと探してたら見つけたのがRocket Chatです。

高機能なのですが、浸透するのに逆に足かせになりそうだなと思いつつ、WebRTCでのビデオ通話ができるという点が大きくメリットで切り替えるようにしました。

Hubot

Gitlabなどと連携させるためにBOTとしてHubotもいれます。

Jenkins2

Jenkinsがメジャーバージョンアップしました!(パチパチー!)
よく使われるプラグインがデフォルトで同梱されるようになったらしいので、せっかくだし2でいこう!という経緯です。

その他

コード解析用にSonarQubeと、ナレッジベース用にLodgeかなにか・・・を入れようと思ってます。

Docker Compose

Docker Composeで入れることができます。

OSSがオフィシャルで公開しているものを組み合わせて1つのComposeファイルにします。

docker-compose.ymlファイル

data:
  image: busybox
  volumes:
    - /usr/share/elasticsearch/data
    - /var/lib/postgresql/data
    - /usr/share/nginx/html/media
    - /srv/docker/jenkins/jenkins:/var/jenkins_home
    - /srv/docker/mongodb:/var/lib/mongodb
  command: tail -f /dev/null
  restart: always

# ElasticSearch
elasticsearch:
  image: elasticsearch
  volumes_from:
    - data
  restart: always

# PostgreSQL
postgres:
  image: postgres
  environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: something
  ports:
    - "5432:5432"
  volumes_from:
    - data
  restart: always

# RestyaBoard
restyaboard:
  build: .
  links:
    - elasticsearch:elasticsearch
    - postgres:postgres
  volumes_from:
    - data
  ports:
    - "1234:80"
  restart: always

# Rocket Chat
rocketchat:
  image: rocketchat/rocket.chat
  environment:
    - MONGO_URL=mongodb://mongodb/rocketchat
    - ROOT_URL=http://localhost:80
  ports:
    - "1235:3000"
  links:
    - mongodb

# MongoDB
mongodb:
  image: mongo
  ports:
     - 27017
  volumes_from:
    - data

# Hubot
hubot:
  image: rocketchat/hubot-rocketchat
  links:
    - rocketchat:rocketchat
  environment:
   -  ROCKETCHAT_URL=rocketchat:3000
   -  ROCKETCHAT_ROOM=GENERAL
   -  ROCKETCHAT_USER=bot
   -  ROCKETCHAT_PASSWORD=bot
   -  BOT_NAME=bot
   -  EXTERNAL_SCRIPTS=hubot-pugme,hubot-help

# Jenkins
jenkins:
  restart: always
  image: jenkins:latest
  environment:
    - JENKINS_OPTS=--prefix=/jenkins
  volumes_from:
    - data
  ports:
    - "1236:8080"  

Restyaboard用に必要な以下のファイルはGithubから持ってきて同じフォルダにおいておきます。 * docker-entrypoint.sh * Dockerfile

Docker Composeを利用するうえで、よく利用するコマンドをメモとして残しておきます。

// Composeで起動中のイメージを確認
# docker-compose ps

// Dockerfileをビルドします
# docker-compose build

// デーモン状態で起動します
# docker-compose up -d

Mecabの辞書のパスを登録

ちょっと前の記事でMecabのオリジナル辞書を作成してみたという記事を書いてました。

kakushika.hatenablog.com

今回辞書をちゃんと登録しておきたいと思い調べた内容を記載します。

環境

前回のおさらい

オリジナルの辞書を以下の通り作成していました。

/Users/hogeeeee/work/ruby/dicAdd/custom.dic

mecabrc

mecabrcにDicファイルをユーザー辞書として登録します。
私の環境では以下にありました。

/usr/local/Cellar/mecab/0.996/etc

開くと以下のような感じ

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir =  /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

この中の

; userdic = /home/foo/bar/user.dic

userdic = /Users/hogeeeee/work/ruby/dicAdd/custom.dic
``

とします。

summpyを使って文章を要約してみる(今北産業)

文章の要約をしたいなーって思って前にマルコフ連鎖やらいろいろ調べてて、その熱が冷めた今頃簡単にできるぞって情報を得たので試してみました。

Github上のソースは以下から

github.com

リクルートテクノロジーズの大杉さんと広島市立大学修士2回生の飯沼さんが作られたようです。
あざまっす!

blog.recruit-tech.co.jp

環境

Mecabの導入については以前の記事を参考にしてください。

kakushika.hatenablog.com

kakushika.hatenablog.com

導入

GithubのREADMEを見るとPython2.7〜だそうで、手元のMacの中に入ってるバージョンを見てみると問題なかったです。 初めてPythonだなーと思い見てたら、Pythonにもパッケージ管理としてpipというのがあるようです。
Rubyでいうgemですかね。

さっそくpipを使えるようにしてsummpyを入れてみました。

sudo easy_install pip
sudo pip install summpy

READMEに以下でWEBサーバーとして起動してcurlで実行できるとありますのでやってみます。

pip install summpy
python -m summpy.server -h 127.0.0.1 -p 8080
curl http://127.0.0.1:8080/summarize\?sent_limit\=3\&text\=要約したい文章を入力。

エラーでました。。

ImportError: No module named janome.tokenizer

READMEをもう一度読み返してみると以下が必要とのことです。
※読み落としてました。。

pipで入れることができるそうなので、まずはpipで既に何が入っているか確認してみます。

# pip freeze
altgraph==0.10.2
bdist-mpkg==0.5.0
bonjour-py==0.3
CherryPy==4.0.0
decorator==4.0.6
macholib==1.5.1
matplotlib==1.3.1
modulegraph==0.10.4
networkx==1.10
numpy==1.8.0rc1
py2app==0.7.3
pyobjc-core==2.5.1
pyobjc-framework-Accounts==2.5.1
pyobjc-framework-AddressBook==2.5.1
pyobjc-framework-AppleScriptKit==2.5.1
pyobjc-framework-AppleScriptObjC==2.5.1
pyobjc-framework-Automator==2.5.1
pyobjc-framework-CFNetwork==2.5.1
pyobjc-framework-Cocoa==2.5.1
pyobjc-framework-Collaboration==2.5.1
pyobjc-framework-CoreData==2.5.1
pyobjc-framework-CoreLocation==2.5.1
pyobjc-framework-CoreText==2.5.1
pyobjc-framework-DictionaryServices==2.5.1
pyobjc-framework-EventKit==2.5.1
pyobjc-framework-ExceptionHandling==2.5.1
pyobjc-framework-FSEvents==2.5.1
pyobjc-framework-InputMethodKit==2.5.1
pyobjc-framework-InstallerPlugins==2.5.1
pyobjc-framework-InstantMessage==2.5.1
pyobjc-framework-LatentSemanticMapping==2.5.1
pyobjc-framework-LaunchServices==2.5.1
pyobjc-framework-Message==2.5.1
pyobjc-framework-OpenDirectory==2.5.1
pyobjc-framework-PreferencePanes==2.5.1
pyobjc-framework-PubSub==2.5.1
pyobjc-framework-QTKit==2.5.1
pyobjc-framework-Quartz==2.5.1
pyobjc-framework-ScreenSaver==2.5.1
pyobjc-framework-ScriptingBridge==2.5.1
pyobjc-framework-SearchKit==2.5.1
pyobjc-framework-ServiceManagement==2.5.1
pyobjc-framework-Social==2.5.1
pyobjc-framework-SyncServices==2.5.1
pyobjc-framework-SystemConfiguration==2.5.1
pyobjc-framework-WebKit==2.5.1
pyOpenSSL==0.13.1
pyparsing==2.0.1
python-dateutil==1.5
pytz==2013.7
scikit-learn==0.17
scipy==0.13.0b1
six==1.4.1
summpy==0.2.1
Twisted==13.2.0
xattr==0.6.4
zope.interface==4.1.1

MecabPythonで実行するためのモジュールがないようなので追加します。

sudo pip install mecab-python3

ちなみにGithub上のリポジトリは以下です。
cookpadの方のようですね。いつもTechブログ読ませていただいてます。

github.com

無事必要なものがそろったので先ほどのWEBサーバー起動+curlで実行を試してみましょう。

要約を試す記事は以下です。
記事の選定が単純にGoogleニュースのトップだったからです。

www.asahi.com

実行

# python -m summpy.server -h 127.0.0.1 -p 8080
# curl http://127.0.0.1:8080/summarize\?sent_limit\=3\&text\=NHKは11日、塚本堅一アナウンサー(37)が危険ドラッグを所持していたとして、厚生労働省関東信越厚生局麻薬取締部に医薬品医療機器法違反の疑いで10日に逮捕された、と発表した。麻薬取締部によると、塚本容疑者は容疑を認めているという。逮捕容疑は、10日、自宅で危険ドラッグを所持していたというもの。同部は自分で使用する目的だったとみている。NHKの説明では、塚本容疑者は2003年入局。京都放送局などを経て、15年2月から東京のアナウンス室所属。「ニュース シブ5時」でリポーターを務めていた。NHKは「職員が逮捕されたことは遺憾であり、視聴者の皆様や関係者に深くおわびいたします。事実関係を調べたうえで厳正に対処します」とコメントを出した

結果

{
  "debug_info": {}, 
  "summary": [
    "NHKは11日、塚本堅一アナウンサー(37)が危険ドラッグを所持していたとして、厚生労働省関東信越厚生局麻薬取締部に医薬品医療機器法違反の疑いで10日に逮捕された、と発表した。", 
    "麻薬取締部によると、塚本容疑者は容疑を認めているという。", 
    "NHKの説明では、塚本容疑者は2003年入局。"
  ]
}

動きましたー!

結果としては文から単語に分解してというよりは、重要文抽出のような印象ですね。

RSSをクロールして、記事取得して、summpyで要約してDBに突っ込んでRubyAPIサーバー起動してフロントエンドから取得するという流れが出来そうです。いいすねー!

追記

WEBサーバーを起動して以下にアクセスしたら簡単な入力画面が表示されますね。便利!

http://localhost:8080/static/test.html

f:id:kakushika:20160111234821p:plain

他の方々が試したという記事

OpenCV3.1をOSXでJava(Eclipse)で実行する

OpenCV3をMacで使おうと思ったらかなり苦労したのでメモしておきます。

最初OpenCV3をGitでチェックアウトして使おうと思ったら迷走しました。

Windowsであればexeを実行してすぐ使える状態なんですが、Macだと苦労・・・

結局Homebrewで入れたんですが、それでも一曲あったので実行できるまでの流れをメモしておきます。

環境

1.OpenCV3.1を入れる

※Homebrewが使えることを前提に進めます。

brew tap homebrew/science
brew install opencv3 --with-java

--with-javaでjarが用意されます。
最初この指定を忘れていて、用意されなかったので一旦アンインストールしました。

brew uninstall opencv3

その後再度installしようとすると以下のエラーがでました。

Error: You must `brew link eigen libpng libtiff ilmbase openexr numpy` before homebrew/science/opencv3 can be installed

brew linkしろって言ってるので言われてる通りしてみます。

brew link libtiff ilmbase openexr numpy

するとまたエラー。。。

Error: Could not symlink lib/pkgconfig/libtiff-4.pc
/usr/local/lib/pkgconfig is not writable.

権限の問題なので付与します。

sudo chmod g+w include/

無事インストールできたら以下のような構成になると思います。

/usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/java/

  • libopencv_java310.so
  • opencv-310.jar

これでOpenCVの用意は完了です。
次はEclipseで使えるようにしましょう。

Eclipseにライブラリを取り込む

Eclipseで新しいJavaプロジェクトを作成して、ライブラリを単純に追加というわけではなく、jarを追加したあと、ネイティブライブラリとして追加する必要があります。

そこら辺の記述はググればいっぱいでてきますが、日本語で説明している記事見つけたのでリンク貼って割愛します。

JavaでOpenCVのインストール・eclipseの設定など(Mac OSX) | takuroYONEZAWA

※記事では2.4.4ですが、3.1.0に読み替えてください。

追加するjarのパスは上記でも説明したとおり以下です。 * /usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/java/opencv-310.jar

で、問題のネイティブライブラリですが、作成されたファイルはlibopencv_java310.soです。
Macでの実行なので、拡張子を変更してlibopencv_java310.dylibにします。

よってネイティブライブラリのパスは以下です。 * /usr/local/Cellar/opencv3/3.1.0_1/share/OpenCV/java/libopencv_java310.dylib

OpenCVでいうHelloWorld

OpenCV java」とググるとよく見るサンプルのコードを実行することで、動作が正しく動くかの確認ができるようです。

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
 
public class Hello {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}
実行結果

m = [ 1, 0, 0;
0, 1, 0;
0, 0, 1]

うまくいくと上記のような結果が表示されます。

ネイティブライブラリのパスが正しく書かれているかは以下で確認できます。

System.out.println(System.getProperty("java.library.path"));

とりあえず今日は動くところまで!

以上ですー。