OmniAICreator/Qiita-1.07M huggingface dataset:
VirtualBoxをVagrantで動かすエラーになる件

## 再現

### vagrant バージョン
-v 1.8.5

### VirtualBox
5.0.26

### error内容
default: Warning: Authentication failure. Retrying...」が繰り返され、仮想マシンが正常に起動しない

### 実装内容

```
$ vagrant init　bento/centos-7.2

Vagrantfile編集

$ vagrant up
この時点で
「default: Warning: Authentication failure. Retrying...」が繰り返される

$ vagrant ssh
一応入れるがパスワードが聞かれる
password => vagrant
```

とまーこんな感じでエラーになって、vagrant sshでパスワードなんか聞かれなかったのになー？
ってな感じで色々調べたんだけど、sshキーどうたらとかっていう情報が多い中。

vagrantのバージョンをダウングレードしてみることにした。
なぜか？
[このサイトにいい情報があった。。。](http://dotinstall.com/lessons/basic_localdev_mac/30704)

## 解決策

### vagrantのグレードダウン
-v 1.8.5 => -v 1.8.4
へとバージョンを変えた。

[旧バージョンリスト](https://releases.hashicorp.com/vagrant/)

バージョンを変えたら、
一度boxを消す（やらなくてもいいのかなー？わからない。）

~/.vagrant.d/tmp配下にあるやつを削除

```
ls ~/.vagrant.d/tmp
-> boxb97f74b8c9953ee0ce73bad5ac3ea1b947a3ed0c（このような文字列が。。）

rm ~~/.vagrant.d/tmp/boxb97f74b8c9953ee0ce73bad5ac3ea1b947a3ed0c
```


この後は最初からやり直す!!

```
$ vagrant init　bento/centos-7.2

Vagrantfile編集

$ vagrant up

$ vagrant ssh
```

以上でエラーがなくなる。

こんな簡単なことだけどこれだけでうまくいった。

困っていた方、ぜひお試しください。。。
railsのvideo_tagのパスの指定

htmlのvideoタグを生成するhelper

##URL指定

```erb
<%= video_tag("https://sample.com/videos/sample.mp4", :autoplay => true, :loop => true) %>
```

```haml
= video_tag "https://sample.com/videos/sample.mp4", :autoplay => true, :loop => true
```


##ファイルパス指定
public/assets/videos配下に動画ファイルを置いて

```haml
= video_tag "sample.mp4", :autoplay => true, :loop => true
```

```erb
<%= video_tag("sample.mp4", :autoplay => true, :loop => true) %>
```

##まとめ
app/assets/videosに置いても読み込まれないのはなぜか & どうしたら読み込まれるのか  
[ここ](http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-video_tag)で
>>Returns an HTML video tag for the sources. If sources is a string, a single video tag will be returned. If sources is an array, a video tag with nested source tags for each source will be returned. The sources can be full paths or files that exists in your public videos directory.

full pathかpublic videoとあるからapp/assets/videosはそもそも読まれないのか
Unity (Mac) でEditorTestをcommand lineから走らせる

Jenkinsのタスク登録した際のメモ

- [公式のドキュメント](https://docs.unity3d.com/Manual/testing-editortestsrunner.html)

# やりかた

```shell-session
/Applications/Unity/Unity.app/Contents/MacOS/Unity \
  -batchmode \
  -logfile /tmp/unity.log \
  -projectPath `pwd` \
  -runEditorTests
```

こんな感じで実行するだけ。

# スクリプト

もうちょっと便利にログ出したり、見やすくしてJenkinsから走らせている

https://gist.github.com/mattak/c8812160e0ed9ed7d1d907636ab30783

```shell-session
#!/bin/bash

CMD=/Applications/Unity/Unity.app/Contents/MacOS/Unity

LOG=/tmp/unity.log
PROJECT_DIR=`pwd`

$CMD \
    -batchmode \
    -logfile $LOG \
    -projectPath $PROJECT_DIR \
    -runEditorTests

RESULT=$?

if [ $RESULT -ne 0 ]; then
    cat $LOG
fi

if [ $RESULT -eq 0 ]; then
    echo "🙆  run succeeded. test passed."
elif [ $RESULT -eq 2 ]; then
    echo "🙅  run succeeded. test failed."
else
    echo "🙅  run failure."
fi

exit $RESULT
```
noVNC上でawesomeを使ってみた

## noVNC

* [iPhoneからLubuntuのvino-serverに接続 - Qiita](http://qiita.com/tukiyo3/items/dc2ede48765530290103)
* [Web Applicationを探してみた - Qiita](http://qiita.com/tukiyo3/items/ea0e301101aae7fb9cc3)

```diff:~/.vnc/xstartup
+awesome &
```

* [noVNCで切断される場合](https://github.com/kanaka/noVNC/issues/567)

```bash:nginxに追加(未確認)
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
```

* VNCでアンチエイリアス有効化

```bash:~/.Xresources
!Xft.dpi: 96
!Xft.dpi: 120
Xft.antialias: true
Xft.rgba: rgb
Xft.hinting: true
Xft.hintstyle: hintslight
```

* [kanaka/websockify: httpsの有効化](https://github.com/kanaka/websockify)

```bash:noVNCのインストール
vncserver :1

git clone https://github.com/kanaka/noVNC.git
cd noVNC
# httpsの有効化(Enter連打でok)
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem

./utils/launch.sh --vnc 0.0.0.0:5901
```

## awesome

```bash:
apt-get install -y awesome
```

```bash:
if [ ! -d ~/.config/awesome/ ];then
    mkdir -p ~/.config/awesome/
    cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
fi
```

* [awesomeのmodkeyを変更する - Qiita](http://qiita.com/locatw/items/65cbe8685d965cd99e79)

```diff:~/.config/awesome/rc.lua
-modkey = "Mod4"
+modkey = "Mod1"
```

### noVNC上のawesomeで有効なショートカットキー

| modkey + | 動作 |
|:--|:--|
| j | 次のウィンドウ |
| k | 前のウィンドウ |
| → | 次のワークスペース |
| ← | 前のワークスペース|
| w | スタートメニュー |
| n | 最小化 |
| m | 最大化 |
| Enter | 全画面 |
| t | 最前面 (^マークがつく) |
| r | ファイル名を指定して実行 |
| ctrl + r | awesomeのrestart |
| shift + q | awesomeの終了 |
| shift + c | フォーカス中のアプリケーションを強制終了 |
Vagrant/VirtualBox上のローカルのWebサイトをスマホで実機確認をつまづいたけどできた話。

[「Vagrant/VirtualBox上にたてたWebサイトの実機確認をiPhone/iPadからおこなう 」](http://qiita.com/metheglin/items/7dd3f222640b0ac28a7f#vagrant%E3%81%AB%E5%9B%BA%E5%AE%9Aip%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%A6%E8%B5%B7%E5%8B%95)
このqiitaの記事を参考に進めたけど、ローカルの内容をスマホから確認できない・・・。

元の記事では以下のようになっていたところを
`config.vm.network :public_network, ip: '192.168.2.ZZZ', bridge: 'en0: Wi-Fi (AirPort)'`
以下のようにしてみました。
`config.vm.network :public_network`

vagrant upした時にbridgeどれにしますか？的な問いが来るので、
僕の場合は、覗きたいローカルがあるPCとスマホが共通して使ってるwifiで繋がりたかったので以下のようにしました。
`'en0: Wi-Fi (AirPort)'`

こうすることで、ipを自動で設定してくれて、スマホからローカルにアクセスできるようになりました。
原因の検証できていないですが、指定した固定ipが埋まっていたのかもしれません。

参考先の[「Vagrant/VirtualBox上にたてたWebサイトの実機確認をiPhone/iPadからおこなう 」](http://qiita.com/metheglin/items/7dd3f222640b0ac28a7f#vagrant%E3%81%AB%E5%9B%BA%E5%AE%9Aip%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%81%A6%E8%B5%B7%E5%8B%95)は最高に参考になる記事でした。ありがとうございました。
SceneKit用語集

SceneKitの用語集です。


![スクリーンショット 2016-04-10 10.44.22.png](https://qiita-image-store.s3.amazonaws.com/0/64334/e88d635a-d3a2-8214-a026-359332bcb3b9.png)



SceneKitは、高レベル、わかりやすいAPIを使用した高性能レンダリングエンジンを組み合わせ、3Dグラフィックスを使用し、建物のアプリやゲームのためのObjective-Cのフレームワークです。
SceneKitは、3D資産のインポート、操作、およびレンダリングをサポートしています。
正確な詳細にシーンを表示する描画アルゴリズムを実装する必要がOpenGLなどの低レベルのAPIとは異なり、SceneKitは、あなたのシーンの内容を説明し、あなたはそれが実行するアクションまたはアニメーションが必要です。
SceneKitの詳細については、SceneKitプログラミングガイドを参照してください。

SceneKit入門

SceneKitはまた、既知のノードの階層ツリー構造、などのコンテンツを実装するシーングラフ。シーンは、座標のシーンの世界のためのスペース、可視コンテンツを世界に移入他のノードを定義し、ルートノードで構成されています。SceneKitは、シーングラフを処理し、効率的にGPU上で各フレームをレンダリングする前にアニメーションを実行する、ビュー内のシーンが表示されます。

SceneKitを使用して作業する前に、あなたは、このような座標系と3次元幾何学の数学などの基本的なグラフィックスの概念を理解しておく必要があります。SceneKitは（デフォルト）に示すように、ビューの方向は、負のz軸に沿って右利きの座標系使用しています。図I-1を。


表I-1は SceneKitの中で最も重要なクラスのために推奨される読み上げ順序を示しています。枠組みの中で他のクラスに移動すると、アプリやゲームを作成する前に、これらのクラスについての記事を読みます。

表I-1 SceneKitの重要なクラスとプロトコル
クラス/プロトコル
説明
SCNView＆SCNSceneRenderer
表示（またはレンダリング）ビューSceneKitコンテンツとSceneKitビューで使用するための重要なメソッドを定義するプロトコル。
SCNScene
すべてSceneKitコンテンツのコンテナ。あなたは、3Dオーサリングツールで作成したファイルからシーンをロードしたり、プログラムを作成し、そのビューに表示します。
SCNNode
シーンの基本的なビルディング・ブロック。ノードの階層は、シーンの論理構造を定義し、あなたがノードにジオメトリ、ライト、カメラを取り付けることによって、目に見えるコンテンツを提供しています。
SCNGeometry
ノードに接続することができる三次元物体。幾何学的形状は、（時にはモデルと呼ばれるまたはメッシュ）は、可視オブジェクトのための専用フォームまたは形状を定義します。物体の表面外観を定義するには、あなたがそれに資料を添付します。
あなたは、シーンファイルから3Dオーサリングツールで作成したジオメトリをロードしたり、プリミティブ図形のSceneKitクラス、押し出された2D図形とテキスト、およびカスタム頂点データを使用して作成することができます。
SCNMaterial
オブジェクトの表面外観特性の再利用可能な定義。材料は、表面が着色またはテクスチャード加工し、シーン内のライトにどのように反応するかをされている方法を指定します。
SCNLight
レンダリングされたシーン内の陰影を提供し、ノードに接続することができる光源。
SCNCamera
シーンをレンダリングするための視点を提供し、ノードに接続することができる仮想カメラ。




https://developer.apple.com/library/ios/documentation/SceneKit/Reference/SceneKit_Framework/index.html
Processing / ControlP5 > serialPlotter (v0.5, v0.6) > String split()の使用改良 / 4シリーズ描画

```txt:動作環境
Processing 3.1.1 on Windows 8.1 pro(64bit)
Library: ControlP5 v2.2.6
Library: Serial
```

http://qiita.com/7of9/items/2e6e3c7880fafe8014d4#comment-bddcd30f2cd808cc7dba
の続き


## code v0.6

[v0.6 @ github](https://github.com/yasokada/processing_160726_serialPlotter/releases/tag/v0.6)


以下の実装をした。

- v0.5
  - String split()を使用してString items[]に格納した値を使うように変更
- v0.6
  - 4シリーズの描画対応

## 動作例

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7ffc3696-ce64-18be-06c0-71df1b182976.png)

シリーズ3,4のデータ拡大縮小、上下移動は未対応。
技術英語 > [under certain conditions] and when certain devices were active, / by all means

@ Code Complete (No. 5924 / 36077)

> <font color=red>under certain conditions</font> and <font color=blue>when certain devices were active</font>, ...

<hr>
関連して思い出したのは

http://ejje.weblio.jp/content/%E3%81%9C%E3%81%B2%E3%81%A8%E3%82%82

> by all means
> ぜひとも

meansは「手段」という訳もあり、「すべての手段によってでも」から派生して「ぜひとも」という覚え方をしている。
macOS SierraでiRuby notebookの動作環境を手っ取り早く作る手順 without Homebrew

# はじめに

かなり苦労したけど、ようやく動作するようになったので一気通貫のインストール手順をまとめます。
ちなみに、コンパイルやインストール時のコマンド入力スタイルに統一感がないのはお許し下さい。

# インストール

## Jupyter notebook

以下のページを参照して、Jupyter notebookをインストール。
http://qiita.com/mix_dvd/items/d915752215db67919c06

## autoconf

以下の手順でインストール。
※ rbczmqをインストールするための準備です。

```sh:
$ curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
$ tar xzf autoconf-latest.tar.gz
$ cd autoconf-*
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
```

## automake

以下の手順でインストール。
※ rbczmqをインストールするための準備です。

```sh:
$ curl -fL http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz | tar xzf -
$ cd automake-*
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
```

## libtool

以下の手順でインストール。
※ rbczmqをインストールするための準備です。

```sh:
$ curl -fL http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz | tar xzf -
$ cd libtool-*
$ ./configure --prefix=/usr/local
$ make && sudo make install
```

## rbenv

macOS Sierra(Beta)にはRuby 2.0が入っているのですが、iRubyにはRuby 2.1以上が必要なので、別バージョンのRubyを入れるための準備です。

[Webサイト] https://github.com/rbenv/rbenv

### 本体

以下の手順でインストール。

```sh:
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

やらなくてもいいみたいですが「動作が速くなるよ」って説明があったので、以下のコマンドを補足しておきます。

```sh:
$ cd ~/.rbenv && src/configure && make -C src
```

### ruby-build

以下の手順でインストール。

```sh:
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
```

## Ruby 2.3系

rbenvを使ってインストール。
※2016/7/28現在、最新版は2.3.1でした。

```sh:
$ rbenv install -l | grep 2.3
  1.9.1-p243
  2.2.3
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.3.1
  rbx-2.2.3
  rbx-2.3.0
$ rbenv install 2.3.1
$ rbenv local 2.3.1
$ rbenv rehash
```

Rubyのバージョン確認。

```sh:
$ rbenv versions
  system
* 2.3.1 (set by /Users/[ユーザー名]/.ruby-version)
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
```

## iRuby

以下の手順でインストール。

```sh:
$ gem install rbczmq
$ gem install iruby
```

# 起動

以下のコマンドで起動。

```sh:
$ iruby notebook
```

新しいノートを追加し、簡単な動作確認。

```rb:
puts "test"
```

と入力して「test」と表示されることを確認。

![スクリーンショット 2016-07-28 6.33.18.png](https://qiita-image-store.s3.amazonaws.com/0/114240/239e663d-d17f-c4b4-0565-d6149b966615.png)

完璧！

# 機能の確認

以下のURLで機能を確認してみて下さい。

http://nbviewer.jupyter.org/github/SciRuby/sciruby-notebooks/blob/master/getting_started.ipynb

ちなみに、全てのサンプルを動作させるには、いくつかgemを追加インストールする必要があります。
また、別途gnuplotもインストールします。

gnuplotは以下のURLを参照
http://www.kashiyuki.com/entry/2016/07/04/143056

追加のgemは以下のとおり。

```sh:
$ gem install pry
$ gem install gnuplot
$ gem install rubyvis
$ gem install nyaplot
```

こんなのできちゃった！！

![スクリーンショット 2016-07-28 15.01.33.png](https://qiita-image-store.s3.amazonaws.com/0/114240/8ac28aba-dbe0-fd7e-0dd0-ee55029273b3.png)
自作アプリに広告を入れた時のユーザ数の変化

数日前に何日か連続で広告入れたり、機能追加したりするアップデートを自作アプリの顔面偏差値スカウターにかけたのだけど、結果としてインストールしたままにしてくれているユーザが減少している。機能追加がネガティブに働くことはないと思うので、やっぱり広告が入ったことに嫌悪感を抱くユーザがいるってことなのかなー。
ちなみに、これまでは、試しにインストールしてみた人の大半がそのままアンインストールして一部が残るというユーザ行動を想定していたし、少なくとも減少することはあまりなかったが、今回のことで既存ユーザもアップデートとかのタイミングで離脱することが見えてきた。
減少の傾きがそろそろ、せめて水平まで戻ってくれれば良いのだが...
　
なお、急に山が高くなっているのは、2万ダウンロード到達で一時的にアプリランキングが上昇したため（今は元の順位以下に落ちている）。

![47c0e1e872cf2ececb3a0246aacaafb5.png](https://qiita-image-store.s3.amazonaws.com/0/12325/f3eb94e6-e3c7-84fb-2101-c77dbf9b181f.png)


顔面偏差値スカウター→https://play.google.com/store/apps/details?id=com.ganmen&hl=ja
react-overlaysを使っていてbodyの直下に置きたいコンポーネントを作る

ReactはWebアプリの画面をコンポーネントに分割して作るスタイルを強力に推し進めてくれる。

ただ、ときどき、今の階層がどこにあるかにかかわらず、body直下に要素を置きたくなることがある。代表的なものには、モーダルダイアログの背景のように、画面全体を覆ってユーザ操作を遮断するオーバーレイがある。

こういうの↓だね。
![スクリーンショット 2016-07-28 2.16.51 1.png](https://qiita-image-store.s3.amazonaws.com/0/10225/a7ebd287-991f-0156-586c-c759ebce509f.png)


これを実現してくれる高レベルなコンポーネントとしては[React-BootstrapのModal](https://react-bootstrap.github.io/components.html#modals)があるが、bootstrap.cssへの依存が生じてしまうのが難点だし、見た目を変えにくいのも辛い。

そんなときには、もっと低レベルなコンポーネントである[react-overlays](https://github.com/react-bootstrap/react-overlays)が使える。

# サンプル

## jsx

```html
import Modal        from 'react-overlays/lib/Modal';

...

render: function() {
  return (
    <Modal show={true} className="modal">
      <div className="dialog">
        <h2>react-overlays</h2>
      </div>
    </Modal>
  )
}

```

## css

```css
.modal {
    background-color: rgba(0,0,0,.6);
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
.modal .dialog {
    background-color: rgba(255,235,235,1)
    border-radius: 4px;
    box-shadow: 0px 0px 6px 3px rgba(255,99,99,0.46);
    margin: 30px;
    padding: 1em;
}
```

こんな↓感じで、bootstrap.cssに依存せず自由にデザインできる。
![スクリーンショット 2016-07-28 2.30.13.png](https://qiita-image-store.s3.amazonaws.com/0/10225/675d3b00-b776-9251-615e-0ee59df8d5a2.png)



react-overlaysのModalは、body直下にdivを追加してくれるので、画面全体を覆う要素を手軽に作れる。
showプロパティで表示/非表示が切り替えられる。

非常にシンプルだが、便利なコンポーネントだと思う。

ちなみにreact-bootstrapのModalは、react-overlaysを使って作られている。
SQLの基本操作覚え書き

[ドットインストール](http://dotinstall.com/)のMySQL入門で覚えたコマンドのメモ。文法確認用に。

データベース***hoge***内の***fuga***テーブルに***id***フィールドと***name***フィールドを作成して、レコードを挿入していく。

# データベース操作
## データベース一覧
`$ show databases;`
## 作成
`$ create database hoge;`
## ユーザの権限設定(user:Tarouがdatabase:hogeを編集できるようにする)
`$ grant all on hoge.* to Tarou@localhost identified by "passwd";`
## 削除
`$ drop database hoge;`
## 使用するDBの指定
`$ use hoge;`
## DB(hoge)についてユーザ(user)の指定
`$ grant all on hoge. * to user@localhost identified by "passwd";`
## バックアップ用のダンプファイル作成
`$ mysqldump -u root データベース名 > ダンプファイル名.sql`
## ダンプファイルからの復元
`$ mysql -u root データベース名 < ダンプファイル名.sql `

# テーブル・フィールド操作
## テーブル一覧
`$ show tables;`
## 特定テーブルの情報
`$ desc fuga;`
## 削除
`$ drop table fuga;`
## 作成

```
$ create table fuga(
 id int;
 name varchar(32),
 ...
 );

```

## フィールドのオプション

- not null
- default
- auto_increment

- キーの指定
    - primary key(主キー)
    - key(キー)
    - unique(ユニークキー)

- index(indexを付けたフィールドは、そのフィールドでの検索時に動作が速くなるが、あまり多くのフィールドに付けると動作が重くなる)
- references(外部キー)


## 変更(オプションの追加やフィールド名の変更等)
ex.) テーブル名の変更
`$ alter table fuga rename fugafuga;`
ex.2) fugaテーブルのidフィールドにnot null制約を追加
`$ alter table fuga modify id int not null;`
ex.3) fugaテーブルのidフィールドをuser_idフィールドと名前変更
`$ alter table fuga change id user_id int;`

## インデックスの追加, 削除
`alter table テーブル名 add index インデックス名(カラム名);`
`alter table テーブル名 drop index インデックス名;`

# レコード操作
## レコード一覧
`$ select * from fuga;` 
## レコードの特定フィールド(name)の参照
`$ select name from hoge;`
## レコード一覧の縦表示
`$ select * from hoge \G #セミコロンは不要`
## 挿入
`$ insert into fuga (id, name) values (999999, "Jane Doe");`
## 削除
`$ delete from fuga where name = "Jane Doe"`
## 更新
`$ update fuga set name = "Tanaka Tarou" where name = "Jane Doe"`
## 条件抽出(where)
ex.) nameが"Jane Doe"のレコードを抽出
`$ select * from fuga where name = "Jane Doe"; #等号は"=="ではないので注意`

ex.2) nameにDを含むレコードを検索
`$ select * from fuga where name like "%D%"; # %は0文字以上の任意の文字列`

## ソート
`$ select * from fuga order by ~~ # 末尾に"desc"で降順`

## グルーピングと集計
ex.)studentsテーブルにおいてtest_scoreの平均点をclassごとに集計する
`$ select avg(test_score) from students group by class`

# 忘れがちな小技
## ランダムにn件抽出
乱数生成のrand()とlimitを利用
`$ select * from fuga order by rand() limit 1`

## フィールドの型だけを変更(nameをvarchar(32) -> varchar(64))
`$ alter table fuga change name name varchar(64) `
OS XでVirtualBoxのポートフォワーディング

VirtualBoxで作ったVMにSSHでログインしようと、VM側のNICにNAT設定してホストとゲストともにポート22でポートフォワーディングしようとしたら、弾かれてしまった。

どうやら、ウェルノンポート（と言うらしい）では出来ないようで、ホスト2222、ゲスト（受け側）22にしてやることで接続できた。

```
ssh -p 2222 user@localhost
```

【参考にしたサイト】
http://blog.pg1x.com/entry/2014/06/20/234518
XCTestでUIStoryboard.instantiateViewControllerWithIdentifierがSIG_ABRTする

# 解決方法
* 今わかってる解決方法としては `ProductModuleName` をUnitTestと同じにしないこと
* あとObjC側でUIStoryboardつかって直接インスタンス化すれば動くけど、いまいち…

# エラー
`Could not cast value of type 'Testable.ViewController' (0x100e5aee0) to 'Testable.ViewController' (0x10cb67510).`

# 発生条件
* SwiftをObjCのXCTestでテストする
  * SwiftをSwiftのXCTestでも起きる
* ProductNameとUnitTestのProductNameが同じ
  * この例で言うとどちらも `Testable` になっている状態

# 開発環境
* Xcode: 7.3.1
* DeployTarget: iOS9
* iPhoneSimulator: iOS9.3

# 再現コード
* 新しいプロジェクトを作成
  * include Unit Test にチェック
  * Testableというプロジェクト名にする
* UnitTestのProductModuleNameを `$(PRODUCT_NAME)` から `Testable` に書き換える
* あとPackagingのDefinesModuleをYESにする（ObjCにSwiftを読み込むため）

## Testable
* ProductName: **Testable**

```swift

import UIKit

class ViewController: UIViewController {
    class func instanceFromStoryboard() -> ViewController {
        return UIStoryboard(name: "Main", bundle: NSBundle(forClass: self)).instantiateViewControllerWithIdentifier("ViewController") as! ViewController
    }
}

```

上記 bundle の引数を nil にすると
`Could not cast value of type 'Testable.ViewController' (0x109919ed0) to 'TestableTests.ViewController' (0x115625328).`
というキャストエラーがでるので注意

## TestableTest ( UnitTest )
* ProductName: **Testable**

```objc
#import <XCTest/XCTest.h>
#import "Testable-Swift.h"

@interface ObjCTest : XCTestCase

@end

@implementation ObjCTest

- (void)testStoryboard
{
    [ViewController instanceFromStoryboard]; //SIGABRT
}

@end
```
Angular2 Dart - ngIf

# Angular2 DartにおけるIF文

今回はif文です。Angular2 Dartにおけるif文の記法は最初見た時は個人的にかなり特殊な感覚でした。

今回のソースは[こちら](https://github.com/takayuki-hayashi/angular2-dart-examples/tree/master/angular-example02)です。

pubspec.yamlやエントリーポイントのクラスは前回と同じになるので今回は省略します（上記GitHubのソースには存在します）

## 単純なIF文
Component側のフィールドの評価が真偽によって表示制御をしたい場合

```dart
@Component(selector: 'app', templateUrl: 'app.html')
class App {
  String hoge1 = "hoge1";
}
```
```html
<div *ngIf="hoge1 != null">表示1</div>
<div *ngIf="hoge1 == null">非表示</div>
```
Angularの世界においてDirectiveと呼ばれる`*ngIf`という表記にてIF文を表現します。そして「=」の後のダブルクォーテーション内に真偽を評価する式を記述することになります。
Dart版Angular2がTSやJS版と違う部分の一つとしてこの部分が挙げられます。TSやJSでは言語仕様上下記でもOKです。

```html
<div *ngIf="hoge1">表示1</div>
```

しかしDartは真偽を評価するのは型としてboolでなければなりません。よってTS版やJS版では問題ない上記の記述方法でDart版を書くと例外が発生します。この部分は注意しておく所ですね。
また、「*」は必ず必要になります。

## メソッド呼び出しの結果を評価させる
こちらは単純です。下記になります。

```html:app.html
<div *ngIf="isDisplay('str')">表示2</div>
<div *ngIf="isDisplay('strs')">非表示</div>
```

```dart:app.dart
@Component(selector: 'app', templateUrl: 'app.html')
class App {
  bool isDisplay(String str) {
    return "str" == str;
  }
}
```
普通というかDartでメソッドを呼び出す書き方で記述が可能です。
ちなみに下記のようなboolを返さないメソッドを呼び出すと例外が発生します。

```html:app.html
<div *ngIf="getString()">エラー</div>
```

```dart:app.dart
@Component(selector: 'app', templateUrl: 'app.html')
class App {
  String getString() {
    return "str";
  }
}
```

## なぜ「*」が必要なのか

ngIfの前に「*」が付いてるのに違和感を感じませんか？私は最初みたとき凄く感じました。
ただ当然ながらこれには理由があります。
結論から言うとこれは後述するIF表現のシンタックスシュガーになります。

実はngIfは下記にように展開可能です。

```html
<div template="ngIf:hoge1 != null">表示5</div>
```

さらに上記は下記のように展開可能です。

```html
<template [ngIf]="hoge1 != null">
    <div>表示6</div>
</template>
```

しかし毎回templateタグを書いてIFを表現するのは冗長だし解析する側も大変だよねという事でこのような記述方法を用意しているようです。

### 感想

最初は「なんでこんな書き方するの？？」とか思ってたところもいろいろ調べるとその意図が見えてきて面白いです。意外と柔軟にngIf内の表現を書けますし慣れてくれば当初感じてた違和感もなくなってくるかなぁと思います。ただ、どうしても他のDirectiveとの表現方法が違うのでどうしてもとっきにくさはあるんじゃないかなぁというのが個人的な感想です。

次回はngForか2way bindingについて書こうかなと思います。
【Android】Kotlin案件で使えるライブラリ集

KotlinでAndroidアプリ開発をした際に導入したライブラリを紹介したいと思います。

# ライブラリ

## Anko

 * https://github.com/Kotlin/anko

Kotlinで開発されたJetBrains製のライブラリです。
DSLを用いてAndroidアプリのUIを組み立てることができます。
コードで記述するため再利用性が高く、XMLよりパフォーマンスが高いです。
もちろんAndroid Studioからプレビュー表示をすることができます。

## Kotlin Android Extensions

 * https://kotlinlang.org/docs/tutorials/android-plugin.html


こちらもJetBrains社が開発したライブラリになります。
煩わしい`findViewById`をいい感じにしてくれます。

## Kotter Knife

* https://github.com/JakeWharton/kotterknife

ビューバインディングのためのライブラリです。
かの有名な __Butter Knife__ のKotlin版です。

## Dagger2

 * http://google.github.io/dagger

言わずも知れたAndroidで動作する依存性注入(DI)フレームワークです。

コンポーネント間が疎結合になるため、変更に強く、ユニットテストが容易になります。
Kaptを使うことで100パーセントKotlinでDagger2を使うことができます。

## OkHttp

* http://square.github.io/okhttp/

HTTP クライアント用のライブラリです。
下記で紹介する「Retrofit、RxAndroid、Moshi」とセットで使うことが多いです。
組み合わせて使うことで、ネットワーク処理と非同期処理を簡単に実装することができます。

## Retrofit

* http://square.github.io/retrofit/

RESTクライアント用のライブラリです。

## RxAndroid

* https://github.com/ReactiveX/RxAndroid

Androidでリアクティブプログラミングを行うためのライブラリです。

## Moshi

* https://github.com/square/moshi

JSONパース用のライブラリです。

## Picasso

* http://square.github.io/picasso/

画像のダウンロードとキャッシュをいい感じに実装できるライブラリです。

## EventBus

* https://github.com/greenrobot/EventBus

クラス間でイベントの発生を通知することができます。
非同期処理のコールバック用に利用することが多いです。EventBusを使うと非同期処理でネストが深くなる問題を防ぐことができます。

## Realm

* https://github.com/realm/realm-java/

SQLiteやCore Dataに置き換わるモバイル向けデータベースで非常に高速です。
Kaptにより100パーセントKotlinで書くことができます。

## Stetho

* http://facebook.github.io/stetho/

SQLiteやShared Preferencesの中身を Chrome Developer Toolsで確認することができます。

## LeakCanary

* https://github.com/square/leakcanary

メモリリークの検知ができるライブラリです。

## Timber

* https://github.com/JakeWharton/timber

Androidのデバッグログ出力をいい感じにしてくれるライブラリです。

## Espresso 

* https://google.github.io/android-testing-support-library/docs/espresso/setup/

UIテスト用のフレームワークです。

# おわりに
他にKotlinで使える便利なライブラリがありましたらご教授お願い致します！
指定したフォルダ内容からDMGイメージを作成する


OSXにて、指定したフォルダ内容からDMGイメージを作成する方法をまとめておく。

## コマンド

指定したフォルダ内容から単にDMGファイルを作成するだけであれば、以下のようにコマンドを実行するだけ。

```
hdiutil create /path/to/output.dmg -volname "your favorite name" -srcfolder "/path/to/sourceFolder"
```

アイコンの配置や背景画像等、カスタマイズを行う場合は以下のように一度書き込み可能なイメージを作成後、読み出し専用イメージに変換する。

```
hdiutil create /path/to/temp.dmg -volname "your favorite name" -srcfolder "/path/to/sourceFolder" -format UDRW -size <size>m
hdiutil attach /path/to/temp.dmg
(ここで色々やる)
hdiutil detach /Volumes/your\ favorite\ name
hdiutil convert /path/to/temp.dmg -format UDZO -imagekey zlib-level=9 -o /path/to/output.dmg
```

## 補足事項

各コマンドの内容はhdiutilのヘルプを参照のこと。

```
hdiutil help
```

```
hdiutil create -help
```

といったようなコマンドで確認できる。

DMGファイルの作成元のフォルダであらかじめアイコン配置や背景画像の設定をしておいても、作成したDMGファイルには同じ設定が反映されない。
これは、DMGファイル作成時に.DS_Storeファイルが新しく作成されてしまうためのようで、DMGファイル作成後にDMGファイルのマウント先に作成元フォルダから.DS_Storeファイルをコピーしてやることで同じ設定を反映することができる。
ちなみに、.DS_StoreファイルをコピーしてもDMGファイルが書き込み可能な状態ではダメなようで、読み出し専用のDMGファイルに変換すると設定した通り表示されるようになる。
Numpyのndarray同士の結合方向について

Numpyというpythonの数値計算ライブラリを最近よく使っています。
ndarrayというN次元配列型が定義されていて便利です。
さて、複数の配列を結合させたい場合、Numpyには以下のようなメソッドが用意されています。
numpy.r- : 行方向への結合
numpy.c_ : 列方向への結合

```
import numpy as np
a = np.ones((2, 3)) # 2×3で要素が全て1の行列
b = np.zeros((2, 3)) # 2×3で要素が全て0の行列
c = np.r_[a, b]
d = np.c_[a, b]
print(c)
print(d)

>[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
>[[ 1.  1.  1.  0.  0.  0.]
 [ 1.  1.  1.  0.  0.  0.]]
```

結合したいndarrayを[]で囲んでメソッドを使うと、
こんな感じでそれぞれの方向に行列を結合してくれます
参考: [Numpyで行列の連結](http://qiita.com/sotetsuk/items/d0e73afdcffdc8ac3e6b)
これを使うと、2つのN×M配列から2N×MとN×2Mの2次元配列を作ることができます。

ではN×M×2のような3次元配列は作れないのかという話になるのですが、
見た限りそれ用のメソッドは用意されてないっぽいです。
以下のように配列生成関数numpy.array()にndarrayを要素に持つタプルを与えることで実現はできます。

```
e = np.array((a, b))
print(e)

>[[[ 1.  1.  1.]
  [ 1.  1.  1.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]]]
```
Raspberry Pi 3で、外付けHDDにデータ格納するMySQLサーバーを実現する。

# はじめに

最近だが、Raspberry Pi 3をサーバーとして動かすことに興味を持ち、必死こいて触っている。
今回は、Raspberry Pi 3にDBを突っ込んで動かしてみよう！って言う話。
# 前提(前回までのまとめ)
- Raspberry Pi 3 BにRaspbianを導入（非NOOBS）
- 初期設定
   - パスワード変更
   - キーボードレイアウトの変更
   - SSHによるリモート接続の許可
   - wi-fi回線のローカルIPの固定

# DBサーバーを導入する
最近IT系の職に就いたばかりなので、使ったことあるDBはMySQLしか無い。
というわけで、MySQLを導入する。

```
$ sudo apt-get install mysql
※log残してなくて、結果がどっかいっちゃった…以後気をつけます。
```

無事インストール完了。
ためしにrootで入ってみる。

```
$ mysql -u root -p
Enter password:

※中略
mysql\> 
```

お、入れた。いい感じですね。

今度は外付けHDDにデータを格納する予定なので、下記のようなこともしたよ。
Raspberry Piに接続するHDDはこれ。
http://kakaku.com/item/K0000699019/
最近はHDDもSSDも安くなったね！技術の進歩に感謝！

ちなみにこのHDD、最初からntfsフォーマットされてます。多分win向けだからかな？
直接接続できるよう、ntfs-3gを導入しました。

```
$ sudo apt-get install ntfs-3g
```

mysqlサーバーのデータをすべてHDDに置きたいので、mysqlのデータが格納される場所にマウント

```
$ sudo mount /dav/sda2 /var/lib/mysql
```

マウントされているか確認

```
$ df -h
/dev/sda2       1.9T  148M  1.9T   1% /var/lib/mysql
```

いけてますね！やりました！

リモート接続できるようにポート開放。

```
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
```

リモート接続用アカウント作成。

```
mysql> grant all privileges on DB名.* to ユーザ名@"ホスト" identified by "パスワード" with grant option;
```

HeidiSQLでMySQLサーバーに接続

```
Can't connect to MySQL server on 'サーバーのIPまたはホスト名' (10061)
```

何故か、鯖立ってねぇよハゲ！って怒られました。

立ってるのに立ってない。立ってないのに立ってる。
なんでやろ。

別に立っているCentOS7からterminalでリモート接続してみる。

```
$ mysql -u***** -p -h サーバーのIPまたはホスト名
ERROR 2003 (HY000): Can't connect to MySQL server on 'サーバーのIPまたはホスト名' (111)
```

なんかまた様子が違うな。

調べてるうちにこんな記事が。
http://www.nilab.info/z3/20060721_zlashdot_000318.html

どうやら、特定のアドレスからしか接続できないようになってたみたい。
最終的に、メインPCでもサブPCでもHeidiSQLで入りたいし、複数台から接続する予定となっている。
私はコメントアウトすることにした。

```
$ sudo vi /etc/mysql/my.cnf
# bind-address=127.0.0.1
```

再度HeidiSQLで接続...
成功！！！

思ったより引っかかった。一つ勉強になったね！やったぜ！！！！

# 最後に
今回初投稿でした。
Raspberry Pi 3にMySQL入れる人も多かったし、ntfsフォーマットのHDDをUSB接続する人も多かったけど、
MySQLのデータをすべてHDDに突っ込もうとする人はいなかった。今回はそういう趣旨で文章を書きました。
至らない所があればご指摘願います。
初心者のDocker入門4 - Redmine + MySQL

[前回](http://qiita.com/queth/items/d5c05c4a3606238ed954)ではコンテナの基本操作に関して学んだので、今回はコンテナを実践的に使用した内容に関してアウトプットします。

行ったことはタイトル通り、MySQLを使用したRedmineの立ち上げです。

#前提
コンテナを操作した環境は以下になります。

- Mac book Pro（OS X El Capitan)
- Docker for Mac（1.12.0-rc4）

#手順
1. MySQLのコンテナを起動
2. Redmineのコンテナを起動

#MySQLのコンテナを起動
[Docker Hub](https://hub.docker.com/_/mysql/)にある公式のMySQLイメージを使用しました。

```
$ docker run -d --name some-mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=redmine mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
```

rootのパスワード、データベース名の指定、および起動時に実行するコマンドにデータベースで使用する文字コードを渡して、バックグラウンドでコンテナを起動しています。

注意点としては公式のMySQLのイメージはデフォルトの文字コードが「latin1」になっていますので、文字コードを指定しないとRedmine使用時に日本語の登録ができずに「Internal error」となってしまいます。

また、「--character-set-server」、「--collation-server」はコンテナの起動時に実行するコマンドに渡すオプションなので、指定する位置に注意が必要です。（イメージの後ろに指定する）

[公式MySQLイメージのリポジトリ - README.md](https://github.com/docker-library/docs/blob/master/mysql/README.md)

#Redmineのコンテナを起動
MySQLと同様に公式のRedmineのイメージを使用します。

```
$ docker run -d --name some-redmine -p 3000:3000 --link some-mysql:mysql redmine
```

こちらで行っていることは、先に起動したMySQLコンテナへのリンクを指定して、ホストのポート3000番とコンテナのポート3000番をマッピングした上で、バックグラウンドで起動しています。

[公式Redmineイメージ](https://hub.docker.com/_/redmine/)の説明に記載しているコマンドには「-p 3000:3000」の記載がありません。（ポートマッピングに関しての説明はあります。）
ですので、そのままコマンドを使用しただけではコンテナにブラウザから接続できないので、コンテナ起動時にポートマッピングを行う必要があります。

また、RedmineコンテナからMySQLコンテナへの接続を可能にする、オプション「--link」を指定する際はMySQLコンテナが先に起動してないと失敗します。

#結果
これでlocalhost:3000にアクセスしてRedmineが使用可能になりました。
<img width="1275" alt="Redmine_top.png" src="https://qiita-image-store.s3.amazonaws.com/0/134043/1dad91ad-0427-a334-31c3-c3ef2b4dfc5f.png">

#所感
MySQLの文字コードの件で少し詰まってしまいましたが、ただ立ち上げるだけであれば5分もかからなかったです。
実運用に耐えるかは考慮しないといけない点が他にもあるかと思いますが、Redmineを個人的に使用してみるのであれば全然使えるかなと思います。

#最後に
初心者のDocker入門ということで第1回〜第4回とアウトプットしてきました。
基本的なところは一通り触れたかと思いますので、今回で「初心者のDocker入門」に関しては終わりにしようと思います。

今後は引き続きDockerを触ってアウトプットしていく予定です。
ドロップしたアイテム名でカレンダーにイベントを追加するdroplet

あらかじめ、Calendar.appに**sample**というカレンダーが必要です。


```applescript

on open drop_Items
	
	set CalendarName to "sample"
	
	repeat with aItem in drop_Items
		
		set fname to name of (info for aItem)
		
		set sTime to (current date)
		set eTime to sTime + (1 * hours)
		
		tell application "Calendar"
			tell calendar CalendarName
				make new event with properties {summary:fname, start date:sTime, end date:eTime}
			end tell
		end tell
		
	end repeat
end open
```


dropletはリストで値が返ってきますので、下記のようにループで処理させるか  

```applescript
repeat with aItem in drop_Items  
	--ループ処理
end repeat
```
  
値を1つしか取らないのであれば1番目だけを取得してもいいでしょう

```applescript
item 1 of drop_Items  
```
MavenでのCOMPILATION ERRORを解決

eclipseでプロジェクトをビルドした際に、Mavenのこんなエラーが出て半日ほど躓いたので、解決法やチェックポイントを残す。

# 環境
- Windows 7
- JDK8
- eclipse 4.6 neon

# COMPILATION ERROR

```
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE    rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
```

結論から言うと、環境構築がちゃんとできてなかった。無念。
うちらのstack overflowでも同様の質問が多数あるので、みんな通る道のようである。


- [Eclipse/Maven error: “No compiler is provided in this environment”](http://stackoverflow.com/questions/21099072/eclipse-maven-error-no-compiler-is-provided-in-this-environment)
- [No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?](http://stackoverflow.com/questions/19655184/no-compiler-is-provided-in-this-environment-perhaps-you-are-running-on-a-jre-ra)
- [Maven Package Compilation Error](http://stackoverflow.com/questions/15220392/maven-package-compilation-error)  
・・・etc

原因を探しているうちにいくつかのチェックポイントがあることがわかった。



1. JAVA_HOME¥binへのパスが通っているか
2. JAVA_HOME¥binにjavac.exeが存在するか
3. JDKとMavenのバージョンが合っているか

というもの。
オレの場合は複合的な原因だった。残念。

# JAVA_HOME¥binへのパスが通っているか

最近のJDKはインストールすると勝手にパスが通ってくれる。ここに。

```
C:¥ProgramData¥Oracle¥Java¥javapath
```

コマンドプロントで

```
java -version
```

と打つとjavaのバージョンが表示されるのでパスが通ってると思い込んでいた。
でも通っているのは、java.exe, javaw.exe, javaws.exeのシンボリックリンクに対してだった。
ちょっと違ってた。

なので、まずは環境変数JAVA_HOMEの設定と、JAVA_HOME¥binをPATHに追加したかを確認しよう。

# JAVA_HOME¥binにjavac.exeが存在するか

無かった。
手順書がおかしかったんだと思う。
JDKとパブリックJREが同じインストールディレクトリになっていたせいで、javac.exeが失われていた。

JAVA_HOME¥binをPATHに追加したあとはこれを確認しよう。

```
javac -version
```

# JDKとMavenのバージョンが合っているか
eclipse 4.6 neonとJDK8の組み合わせなら特に問題はない。
上記のJAVA_HOME¥binの件がまだ分かってなかった時にJDKのバージョンも6に下げた。
eclipse 4.6 neonに対しJDK6だとCOMPILATION ERRORになる。

[Maven Releases History](http://maven.apache.org/docs/history.html)

リリースヒストリーであるが、
Mavenバージョンと必要なJDKバージョンの組み合わせ表にもなっている。
この表を見つけた時は感動した。

というわけで、インストールしているMavenとJDKのバージョンが合っているかを確認しよう。
Maven buildの構成時に指定するMavenのバージョンとJREのバージョンが合っているかも確認しよう。
OSXにTensorflowをインストールする

# 環境
Python 3.5.2
OSX 10.10.5

# 事前準備
condaをインストールする

http://conda.pydata.org/docs/install/quick.html#os-x-miniconda-install

# 環境構築

```
$ conda create py35con python=3.5
$ source activate py35con
```

※py35conは適当な名前

# Tensorflowをインストール

```
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/tensorflow-0.9.0-py3-none-any.whl
$ pip3 install --upgrade $TF_BINARY_URL
```

参考サイト：
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html


## 出力結果

```
Collecting tensorflow==0.9.0 from https://storage.googleapis.com/tensorflow/mac/tensorflow-0.9.0-py3-none-any.whl
  Using cached https://storage.googleapis.com/tensorflow/mac/tensorflow-0.9.0-py3-none-any.whl
Requirement already up-to-date: six>=1.10.0 in /Users/saicologic/anaconda/envs/py35con/lib/python3.5/site-packages (from tensorflow==0.9.0)
Requirement already up-to-date: wheel>=0.26 in /Users/saicologic/anaconda/envs/py35con/lib/python3.5/site-packages (from tensorflow==0.9.0)
Requirement already up-to-date: numpy>=1.10.1 in /Users/saicologic/anaconda/envs/py35con/lib/python3.5/site-packages (from tensorflow==0.9.0)
Collecting protobuf==3.0.0b2 (from tensorflow==0.9.0)
  Using cached protobuf-3.0.0b2-py2.py3-none-any.whl
Requirement already up-to-date: setuptools in /Users/saicologic/anaconda/envs/py35con/lib/python3.5/site-packages/setuptools-25.1.0-py3.5.egg (from protobuf==3.0.0b2->tensorflow==0.9.0)
Installing collected packages: protobuf, tensorflow
Successfully installed protobuf-3.0.0b2 tensorflow-0.9.0
(
```

## 動作確認

```
(py35con)~/Documents/work/keras_demo/keras/examples (master) $ python
```

## REPL

```
Python 3.5.2 |Anaconda custom (x86_64)| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> 
```

## トラブルシューティング

```
Cannot remove entries from nonexistent file /Users/saicologic/anaconda/envs/py35con/lib/python3.5/site-packages/easy-install.pth
```

### 解決

```
$ curl https://bootstrap.pypa.io/ez_setup.py -o - | python
```

参考サイト：
https://github.com/tensorflow/tensorflow/issues/622
https://github.com/tensorflow/tensorflow/issues/135#issuecomment-174325470
フラグの森へようこそ


出くわすことはかなりレアだと思うが、プログラミングのアンチパターンの経験談（あくまでネタ）として書き残しておこう。

## これは何のお話？

大分昔の話なので、使っていたプログラム言語が何か？とか、具体的なソースコードは思い出せないが、記憶を頼りにポイントだけでも伝われば、と。

当時ワシは新人プログラマ数名を従えてシステム開発をしており、その中で、画面の動きがバグっているが、どうも不安定で何がどうバグっているか説明できない。という、新人が開発したバギーな画面のフォローに入った時のこと。

## それはフラグが舞い踊る楽園あるいは地獄

そのソースコードを一度流し読み…、んー、分からん。読むのが苦痛で頭に入ってこない。意図が読めない。ダメだ、これは作った本人にまずヒアリングだな。

なぜなら、そのソースコードの問題箇所は、50〜60行程度のサイズだったと思うが、その中には２桁はあろうかという数の `boolean` 型の「フラグ」変数が定義されていたからだ。`fl_flg` `pr_flg` など謎の命名のフラグの中には、`flg` `flg2` という全くもって無機質・没個性なフラグも存在していた。連番もアリか。。ある呼び出しが行われたらフラグを設定してフラグを判定して、結果をフラグに設定して・・って、え？！

その新人さん曰く、「あ、そのフルフラグは〇〇ボタンを押した時に立つフラグで、プレフラグはフルフラグの１つ前の状態を持っていて、ただのフラグは△△画面から来た時に立つフラグです。プレフラグがオフでフルフラグがオンで、フラグがオンの時はこの処理が…（あー聞こえない聞こえない意識が遠のく）」

## アイ、アンダースタン

状況は理解した。。

この新人さんは、入社後に受けた新人向けプログラミング研修で教わった、 **「フラグに状態を保存しておき、後の処理の判断で使う」** という基本を忠実に守り、これでもか！と言わんばかりに駆使しまくって業務機能を実現しようとし、結果壮大なフラグの森を築き上げてしまった、と。

ワシはRPG開発でもない限り、こんなに林立した荘厳なフラグの森に出会うことはないと思い込んでいたのだが、事実それは目の前にあった。無垢な心によってうっかり樹立したソレは、来る者を拒み、迂闊に立ち入った者は出てくることはないだろう。『変数はフラグ縛り』でプログラミングしたかのような感じだな。出口が見えない。

## ソリューション

「このフラグとそのフラグがオンになると、オンになるフラグ」のように、フラグたちは相互に関連を持ち、独立した概念ではないので、より一層複雑さに拍車をかけていた。

- １つ１つのフラグの意味を明らかにする
- フラグ同士の関係性を明らかにする

という整理作業の中で、「フラグ」という概念が２値しか取れないために、起こりうる状態が１つの変数では表現しきれず、苦肉の策で複数のフラグを用いて脳内ビットを増やして実現してることが判明。まさに修羅の道。これかのフラグをまとめて伐採し、適切な状態区分として再定義した。

ワシ「よし、ここのフラグたちの代わりに、〇〇区分という変数を定義して、はじめは0、△△なら1、◽︎◽︎なら2、××なら3を設定することにしよう」
新人「あの、2とか3て何ですか？2,3も使っていいんですか？」
ワシ「いいんだよ（泣」

- ３値以上を表したい変数はフラグじゃなくて区分値（変数型は `int` とか `String`）として定義し直す
- 変数名は自分ルールで略称にせず、意味が伝わる名称にリネーム
  - `pr_flg` -> `is_previous`
  - `flg2` -> `can_update`
- 直後の `if` 文で使っているだけで、変数として定義する必要を感じないのものは単純に伐採

## リザルト

結果、フラグは独立したシンプルな意味合いのものが２,３残るだけで、見通しが良くなったプログラムは、リファクタリングの過程でバグを幾つも解消し、健全に動く画面機能を果たすようになりました、とさ。

ワシは懇切丁寧に１つ１つのリファクタポイントを説明してあげたが、その後、その新人さんがどうなったかは、覚えていない。

勇敢なプログラミング戦士たち、フラグの森に気をつけろ！
bashでズンドコキヨシ


# ズンドコキヨシ？
今、ズンドコキヨシが熱いらしい。

ズンドコキヨシまとめ
<http://qiita.com/shunsugai@github/items/971a15461de29563bf90#_reference-e2b485175ecc8e78064c>


いろいろなパターンのズンドコキヨシがあるけれど、bashオンリーのものは見当たらなかったのでやってみた。


# ワンライナー
とりあえずワンライナーで書いてみる。

``` 
(while :; do [ $(expr $RANDOM % 2) -eq 1 ] && echo "ズン" && i=$((i+1)) || { echo "ドコ" && [ "$i" = "4" ] && echo "キ・ヨ・シ！" && break || i=0; } done)
```

ぴったり4回連続で「ズン」を歌った後に「ドコ」を歌うと、「キ・ヨ・シ！」と合いの手を入れて終了する。
全体を()で囲わない場合、i=4の状態が残ってしまうので、連続実行するとおかしなこと（初回がドコだとそのままキヨシしちゃう）になる。 


# ズンドコ亜種
あれ、でも「ズン」「ズンズン」「ズンドコ」の３種類なんじゃ・・・
おまけに、お客さんも交えて「キ・ヨ・シ！」までをワンセットにしたものを作ってみよう。

というわけで、「ズン・ズンズン・ズンドコ・キ・ヨ・シ！」の並びが達成できるまでループするバージョン。
改行は、お客さんの「キ・ヨ・シ！」が入った時に行う。

``` 
while :
do
    case $(expr $RANDOM % 4) in
        0)
            kys+="ズン・"
            ;;
        1) 
            kys+="ズンズン・"
            ;;
        2) 
            kys+="ズンドコ・"
            ;;
        3) 
            echo $kys"キ・ヨ・シ！"
            if [ "$kys" = "ズン・ズンズン・ズンドコ・" ]
            then
                break
            else
                kys=""
            fi
            ;;
    esac
done
```

動かしてみると・・・

``` 
ズン・ズンズン・ズンズン・ズンズン・ズンドコ・ズン・キ・ヨ・シ！
ズンドコ・キ・ヨ・シ！
ズン・ズン・ズンドコ・ズンズン・ズンズン・ズンドコ・ズンズン・キ・ヨ・シ！
ズンドコ・ キ・ヨ・シ！
ズン・ズンズン・ズン・ズンドコ・ズン・ズンドコ・キ・ヨ・シ！
キ・ヨ・シ！
キ・ヨ・シ！
キ・ヨ・シ！

〜中略〜

ズンズン・ズンドコ・ズンドコ・ズン・ズンドコ・ズン・ズン・キ・ヨ・シ！
ズンドコ・ズンドコ・ズンズン・ズンズン・キ・ヨ・シ！
ズン・ズンズン・ズンドコ・キ・ヨ・シ！
```

途中、お客さんが狂ったように「キ・ヨ・シ！」を連呼しているが、
なんとか歌いきることができた。



以上
Railsで中間テーブルの外部キー以外に持たせたカラムにviewでアクセスする方法

Railsで多対多のアソシエーションで中間テーブルに外部キー以外のカラムにアクセスする方法です。
likesテーブルの外部キーは今回の場合`user_id`と`product_id`です。外部キー以外にもlike_typeをもたせています。
このlike_typeカラムですが、0の場合はunlike,1の場合はlikeとして管理したいと思っています。like_typeはenumで管理しています。

今回は各ユーザーがlikeしたproduct一覧を取得しつつ、likesテーブルのlike_typeカラムもviewで表示したいと思います。

<img src="https://www.evernote.com/l/AKXs8yxhRNhEVYQZIxBPNZ3RAlzbUWCuxuIB/image.png" alt="rice_curry_table%20(9).pdf" />

## テーブル定義
```ruby:schema.rb
  create_table "likes", force: :cascade do |t|
    t.integer  "product_id", limit: 4, null: false
    t.integer  "user_id",    limit: 4, null: false
    t.integer  "like_type",  limit: 4, null: false
    t.datetime "created_at",           null: false
    t.datetime "updated_at",           null: false
  end

  create_table "users", force: :cascade do |t|
    t.string   "name",                     limit: 255,               null: false
    t.string   "email",                    limit: 255,               null: false
    t.datetime "created_at",                                         null: false
    t.datetime "updated_at",                                         null: false
  end

  create_table "products", force: :cascade do |t|
    t.string   "name",                limit: 255,   null: false
    t.text     "description",         limit: 65535, null: false
    t.datetime "created_at",                        null: false
    t.datetime "updated_at",                        null: false
  end
```

## アソシエーション

```ruby:models/user.rb
class User < ActiveRecord::Base
  has_many :likes
  has_many :like_products, through: :likes, source: :product
end
```

```ruby:models/product.rb
class Product < ActiveRecord::Base
  has_many  :likes
  has_many :like_users, through: :likes, source: :user
end
```

```ruby:models/like.rb
class Like < ActiveRecord::Base
  belongs_to :product
  belongs_to :user
  enum like_type: [ :dislike, :like]
end
```

## ルーティング

今回はユーザーがlikeしたproduct一覧を表示するので以下のようなルーティングを設定しています。

```rb:routes.rb
  resources :users do
    member do
      get 'likes'
    end
  end
```

## controller

```ruby:controller.rb
  def likes
    @user = User.find(params[:id])
    @products = @user.like_products
  end
```

## viewでアクセスする方法

each文をネストしています。子ネストでproduct.likesだけにすると親ネストで取得したproductsのidを持つlikesテーブルのレコードをすべて取得してきてしまいます。
そのためwhereで取得してきたいuserを絞り込んでいます。

```html+erb:index.html.erb
<% @products.each do |product| %>
  <% product.likes.where(user_id: @user.id).each do |like| %>
    <%= product.name %>
    <%= like.like_type %>
  <% end %>
<% end %>
```

### もっときれいに書きたい

each文をネストしているし、もっとうまく、きれいに書きたいです。他に良い方法をご存知の方がいらっしゃいましたら教えてください！
Raspberry Pi を買ったら最初に行う設定



# 環境情報

* Raspberry Pi3 Model B
* Rasbian Jessie
* VGAディスプレイ/HDMIディスプレイ
* 日本語環境（キーボード、フォント）

# 目的

Raspberry piを購入してセットアップする際に必ずと言っていいほど実施する作業があるので、備忘録としてメモ。
主な内容は、以下
* 日本語表示設定
* モニタのVGA設定

# 日本語表示設定

CLIしか使わない人は特に対応は不要

### ローカライゼーション設定

1. Menu>Setting>Raspberry Pi Settingよりlocalizationタブを選択
2. ロケールの設定より、ja(Japanese) , JP(Japan) , UTF-8 を選択
3. タイムゾーンの設定より、Asiz , Tokyoを選択
4. キーボードの設定より、Country:日本（Japan) , Variant:Japanese or Japanese(PC-98xx Series)を選択

### フォントのインストール

このまま、再起動を行うと日本語表記になるはずが、、日本語の文字が、四角で表示されてしまう。以下のコマンドにて、日本語フォントをインストールする。

~~~
$ apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
~~~

### 再起動

再起動を実施する。
画面で日本語が表示されていれば成功。

# VGAモニターへの表示設定

Rasbianは、デフォルトでHDMIで出力する設定になっておりVGAモニターでは表示できない。
我が家のモニターは、デジタル端子での接続がなく、D-Subのコネクタでしか繋がらない。以下のように設定することで、VGAで表示することが可能。

### /boot/config.txt を編集する

以下それぞれアンコメントし、設定する。

~~~
hdmi_force_hotplug=1

hdmi_group=2
hdmi_mode=16

hdmi_drive=2

~~~

hdmi_group,hdmi_mode は、以下のサイトの値を利用。
それぞれの環境に合わせて修正すると良い。

http://elinux.org/RPi_Configuration

### 再起動

再起動を実施する。
VGAモニターに接続して表示できることを確認する。
Heroku へ初デプロイで引っかかった bundle install


rails Tutorial 『1.5 デプロイする』でやってしまったエラーの記録です。
こんなに丁寧にエラー出してくれるんだ…とちょっと感動しましたが、それは解決できてからですね。
  
  
『1.5.1 Herokuのセットアップ』で 本番環境用にgem を追記しましたが、本番用なので開発環境で実行が必要とは思っていませんでした。

> リスト1.14で追加したgemは本番環境でしか使用しないので、このフラグを追加したコマンドを実行すると本番用gemはローカルに追加されません。今このコマンドを実行するのは、後の本番環境へのデプロイに備えてGemfile.lockを更新し、pg gemとrails_12factor gem、Rubyバージョンの指定をGemfile.lockに反映する必要があるためです。

後で見直すと「書いてる！」と気づくのですが、エラー出てからでないとこの意味に気づけませんでした。。。
なので、以下のコマンドを実行せずにチュートリアルの後のコマンドを入力していきました。

```
$ bundle install --without production
```
　　
 すると、
 
 ```
 $ git push heroku master
 ```

で、
> remote:        You have added to the Gemfile:
remote:        * pg (= 0.17.1)
remote:        * rails_12factor (= 0.0.2)
remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to whispering-beyond-xxxxx.
remote: 


とエラーを出して止まります。
ここで 「Failed to install gems via Bundler.」 を見て、さっき見た「bundle install ～」は実行が必要だったのかも…と気づきました。

```
$ bundle install --without production
```

を実行して、

```
$ git commit -a -m "Update gemfile.lock for heroku"
$ heroku create
$ git push heroku master
```

これでようやく Heroku 上で動いている「Hello, world!」を見ることができました。
新しく heroku create しちゃったので、前の失敗 apps が残ってしまいました。
上書きするコマンドを探すべきでした。。。
削除するのは[Herokuのアプリをターミナルで削除する](http://slowquery.hatenablog.com/entry/2014/04/06/112330)を参考にコマンドで削除しました。

``` 確認なしで削除
$ heroku apps:destroy --app アプリ名 --confirm アプリ名
```
　　
  

[Bundlerを使ったGemパッケージの管理](http://www.rubylife.jp/rails/ini/index2.html) に以下のような記述がありました。

>先に記載したように「bundle install」を行なうと、「Gemfile」に書かれたGemパッケージと、そのGemパッケージが依存しているGemパッケージを自動的に調べて全てインストールしてくれます。「Gemfile.lock」はインストールされたGemパッケージの名前とバージョンが記録されたものです。
> ----- 中略 -----
> 他の環境で同じアプリケーションの開発を行なう場合は、プログラムファイルに加えてこの「Gemfile.lock」ファイルを配布します。そして他の環境で「bundle install」を実行すると、今度は「Gemfile.lock」ファイルが参照され、指定されたバージョンのGemパッケージがインストールされます。
> このようにBundlerを使うことで、必要なGemパッケージを管理し、同じ開発環境を簡単に構築することができます。
>

なるほど。
Gemfile と Gemfile.lock の関係性がわかってなかったから、bundle install の実行が必要だと認識できなかったんですね。
  
　　
  
## まとめ
・ Gemfile を変更したら、とにかく bundle install を実行する。
Xcodeの開発者プロフィール移行についてメモ

#### 概要
Xcodeの機能としてプロビジョニングプロファイルのエクスポート機能がある。
これを利用するとこれまで使っていた開発機から、別の開発機にプロビジョニングプロファイルなどの認証情報を移行できる。

しかし、これを利用する際の注意点として、移行を完了すると移行元のプロビジョニングプロファイルが無効となるため、その点だけ注意が必要。

開発機を追加する際は、新たに証明書をDeveloperCenterに追加するのが良い。



参考

https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html#//apple_ref/doc/uid/TP40012582-CH31-SW16
TrumpScriptの流れに乗ってみた(けど何もできずに撃沈した)

[ドナルド・トランプ氏をイメージしたプログラミング言語「TrumpScript」が滅茶苦茶すぎる - BppLOG](http://tkybpp.hatenablog.com/entry/2016/07/26/150000 "ドナルド・トランプ氏をイメージしたプログラミング言語「TrumpScript」が滅茶苦茶すぎる - BppLOG")

というワケでそっこーインストールして書いてみました。

リンク先にある通り、git clone してパス通してインストール完了。

hello worldまで書いたけど、
Macなのでボイコットされました。

`Exception: Mac? 'Boycott all Apple products  until such time as Apple gives cellphone info to authorities regarding radical Islamic terrorist couple from Cal'`

とりあえず判定している箇所(utils.pyのUtils.boycott_apple)を
コメントアウトして動く状態にしたら動いた。
なんかいっぱい警告出てるけど。。。

fizzbuzzくらいやりたいなぁと思ったけど文法が分からん。
とりあえず条件分岐から、と思って書いたコードがこちら。

```TrumpScript:test.ts
Make number 100
if, number is 100, : tell "100"!
America is great.
```
したらエラーに。

> Parsing error:
What are you doing on line 1?
Exception: Part of the beauty of me is I'm very rich.

なんかむかつくな。。。
あ、100万より大きくないとだめとかいうやつか。。。？
そういう親切なエラー文とかは出ないんだ。。。単に認識しないんだ。。。

```TrumpScript:test2.ts
Make number 1000000000000
if, number is 1000000000000, : tell "1000000000000"!
America is great.
```
これでもエラー。
>IndexError: pop from empty list

うー、分からん。なんかifの書き方が悪いっぽいが。。。
readme読んでも眠気と英語でもうだめだ。。。
と思ったら、readmeにこんなん書いてた。

>But most importantly, Trump doesn't like to talk about his failures. So a lot of the time your code will fail, and it will do so silently. Just think of debugging as a fun little game.

お、おう。。

こういうコードでも動作するっぽいですが。。。

```TrumpScript:readmeより抜粋
What are we in this country
Hillary speaks nothing but lies
But look at me I came to this election to make guys
believe again
believe in fact
if, all of us real lies the light; : say "VOTE TRUMP" !
but I know we should be free
else the result will be bad: all the work of George
Washington was for nothing
so this election say "Hello World" say "TRUMP FOR PRESIDENT"!
America is great.
```

わかんない。結構楽しめましたがここで時間切れ。おやすみなさい。。。
Eclipse NeonにlombokをインストールするとEclipseが起動しない

# 概要

2016年6月に公開されたEclipse Neonで環境構築を行っていた時にlombokをインストールするとEclipseが起動しなくなる現象(splashさえ表示されない)に遭遇しました。この記事ではその解決方法(大したことはありませんが)をご紹介します。

**環境**

* Windows10
* Java 1.8.0_92
* lombok 1.16.10
* Eclipse Neon (4.6)

**参考**

* [Eclipse 4.6 Neon 新機能 TOP10！と Spring Boot STS] (http://qiita.com/cypher256/items/2384d6797ac49740f217)
* [Project Lombok › Eclipse Neon support?] (https://groups.google.com/forum/#!topic/project-lombok/a3oieNFP9sw)

## バージョンの確認

### Java

```bat
> java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
```

### lombok

```bat
> java -jar lombok.jar -version
v1.16.10 "Candid Duck"
```

## 現象

Eclipseの[ダウンロードページ] (https://www.eclipse.org/downloads/)でEclipse Neonをダウンロードすると、Windowsであればeclipse-inst-win64.exeというインストーラーがダウンロードされます。
このインストーラーを使用してNeonをインストールした場合、lombokインストール後に起動しなくなります。

![eclipse_installer.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d9416b92-9e66-2e07-f745-be83ec0c0c07.png)

## 解決方法

解決方法はいたって簡単で、インストーラーではなくこちらの[ダウンロードページ] (https://www.eclipse.org/downloads/eclipse-packages/)より入手できるアーカイブファイル(Windowsではeclipse-jee-neon-R-win32-x86_64.zip)を使用してインストールすると回避できます。

![ec_ab_lombok.png](https://qiita-image-store.s3.amazonaws.com/0/22772/19327545-5ca0-b041-81b5-855ab9411bfb.png)
realm-java を使う際に Realm#close() を意識したくないので、ヘルパーライブラリを作った

以前ちらっと書いた、[モデル中心の設計](http://qiita.com/YusukeIwaki/items/7d01e37972f37dc06e1b)をするために、最近は本業のほうでも趣味の方でも、 [realm-java](https://realm.io/jp/docs/java/latest/) をヘビーユースしています。

## まえおき: Realmって関連モデル扱うとき本当に便利だよ！

SQLだと、 User has_many Message みたいなのを扱うとき、ちょいちょい面倒だったんですが、Realmだと

```
class User extends RealmObject {
  @PrimaryKey
  private long id;
  private String name;
}

class Message extends RealmObject {
  @PrimaryKey
  private long id;
  private String body;
  private User sender;
}
```

みたいなモデルを定義しておけば

```
messages = [
 {
  id: 12,
  body: "お元気ですか",
  sender: {
   id: 1
  }
 },
 {
  id: 11,
  body: "こんにちは",
  sender: {
   id: 1
  }
 }
]

users = [
 {
  id: 1,
  name: "山田太郎"
 },
 {
  id: 2,
  name: "岩木祐輔"
 }
]
```

みたいなJSONを

```
JSONArray users = ... ;    //上記のJSON
JSONArray messages = ... ; //　　〃

Realm.getDefaultInstance().executeTransaction(new RealmTransaction(
  public void execute(Realm realm) {
    realm.createOrUpdateAllFromJson(User.class, users);
    realm.createOrUpdateAllFromJson(Message.class, message);
  }
));
```

ってかんじで関連をそのまま突っ込めるし、取得の時もいちいちJOINとか考えずに

```
Realm.getDefaultInstance().where(Message.class).equalsTo("sender.id", 2).findAll();
```

で id=2(岩木祐輔) さんのメッセージを取れるし、めっちゃ便利〜♪ なんです。

## まえおき２: Realmは使い終わったらclose()を呼ばないとイケナイ

データベースなんで当たり前といえば当たり前なんですが、使い終わったらお掃除をちゃんとしないと、リソースリークするようです。

(参考： http://ja.stackoverflow.com/questions/27862/android%E3%81%AErealm%E3%81%A7-io-realm-exceptions-realmerror-unrecoverable-error-too-many-op)


とはいえ・・・ `close` って忘れがちですよね。

というか、そもそも **RealmTransactionなんていう素晴らしい仕組みがあるんだったら、Transaction抜けたらDBもcloseしてよー** って思いません？（言い過ぎｗ

以前、[SQLiteOpenHelper を使うときには、getReadableDatabase/getWritableDatabaseを直接使わない！](http://qiita.com/YusukeIwaki/items/74b7d52ff8bd7d2849c9) っていう煽りっぽい記事かいたときにもちらっと書いてたんですが、個人的には、DBを使うスコープはPythonのwith構文みたいに明示的にスコープであって欲しい（open/close なんていちいち呼びたくない） という衝動から、すごく雑ですが、[ライブラリ](https://github.com/YusukeIwaki/realm-java-helpers)を作るに至りました。


## 本題: realm-java-helpers。これでもう close忘れは起こさない

### DBからReadするとき

```
RealmHelper.executeTransactionForRead(new RealmTransaction() {
  public void execute(Realm realm) {
    List<Message> messages = realm.where(Message.class).equalsTo("sender.id", 2).findAll();

    /* 
      ... messagesを使っていろいろ ...
     */
    
  }
}); // このRealmTransactionを抜けたら勝手にRealm#closeされるので、リソースリークはしない
```

### DBにWriteするとき

```
RealmHelper.rxExecuteTransactionAsync(new RealmTransaction() {
  public void execute(Realm realm) {
    /* 
      ... realm にいろいろ書く ...
     */
  }
}).subscribe(new Action1<Void>(){
  public void call(Void xx) {
    Log.d(TAG, "Successfully saved!");
  }
}) // このsubscriptionを抜けたら勝手にRealm#closeされるので、リソースリークはしない
```

みたいな感じです。


## 未解決なところ

[realm-android-adapters](https://github.com/realm/realm-android-adapters) と組むときに、うまくScopedな感じでAdapterが使えるようにはなっていない。
ActivityとかFragmentみたいなライフサイクルをもった子たちに、イイカンジにRealmスコープをインジェクションできる仕組みってないかなぁ・・・ないよなぁ・・・ ということで、未解決です。

## realm-java-helpers ぜひ使ってフィードバックください！

https://github.com/YusukeIwaki/realm-java-helpers

気になる点などは GitHub issueでおねがいします！