OmniAICreator/Qiita-1.07M huggingface dataset:
HueをブラウザなJavaScriptで操作するメモ


![](https://i.gyazo.com/8e37aa1885bbf0e19926054c32e39b59.gif)

SuperAgentを使ってみます。

```index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/superagent/1.2.0/superagent.min.js"></script>
    <script src="app.js"></script>
  </body>
</html>

```

```app.js
var request = window.superagent;
var IPURL = 'https://www.meethue.com/api/nupnp';
var hueapi = ''; //
var USERNAME = 'lig-n0bisuke';
var flag = true;

//Hue操作ようのAPIエンドポイント作成
function createEndpoint(ip){
  return 'http://'+ip+'/api/'+USERNAME+'/lights/';
}

request
  .get(IPURL)
  .set('Accept', 'application/json')
  .end(function(err, res){
    var ipadress = res.body[0].internalipaddress; //HueのIPアドレス
    hueapi = createEndpoint(ipadress);
  });

function ctrlHue(id, flag){
  if(hueapi === '')return;

  request
    .put(hueapi+id+'/state')
    .send({on: flag})
    .set('Accept', 'application/json')
    .end(function(err, res){
      console.log(res.body[0]);
    });
}

setInterval(function(){
  flag = !flag;
  ctrlHue(1, flag);
},2000);
```

これで2秒ごとに点滅してくれます。
PowerMockを使ってメソッド内で生成されるインスタンスをモックに置き換える

#概要
JUnitを使用して、メソッドのテストを行うとき
対象となるメソッド内で別クラスのインスタンスを生成している場合がある
この別クラスを、どうしてもMockにしたい場合は下記の手順で行う。


#バージョン
- java　1.8
- junit　4.1.2
- Mockito　1.10.19
- PowerMock　1.6.2

下記サイトからダウンロード
https://code.google.com/p/powermock/wiki/Downloads


#テスト対象のクラス
```lang:Taisyou.java
package sample;

public class Taisyou {

	public String search() {
		Util util = new Util();

		return util.get();
	}
}
```
```lang:Util.java
package sample;

public class Util {

	public String get() {
		return "Util get";
	}
}

```
Taisyouクラスのsearchメソッドで、Utilクラスのコンストラクタを呼び出してインスタンスを生成している
このような、メソッド内で実行されるコンストラクタの戻り値をMockに置き換えてテストをしたい。

# テストクラス

```lang:UtilTest.java
package sample;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Taisyou.class})
public class TaisyouTest {

	/** テスト対象 */
	private Taisyou taisyou;

	/**
	 * 初期処理
	 */
	@Before
	public void setup() {
		this.taisyou = new Taisyou();
	}

	/**
	 * テスト
	 */
	@Test
	public void searchTest() throws Exception {
		// テスト対象メソッド内で呼び出されるコンストラクタで返すモックオブジェクト生成
		Util mock = Mockito.mock(Util.class);
		Mockito.doReturn("test").when(mock).get();

		// Utilクラスのコンストラクタで返されるインスタンスをモックに変更
		PowerMockito.whenNew(Util.class).withNoArguments().thenReturn(mock );

		// テスト対象の実行
		String result = this.taisyou.search();

		// 評価
		Assert.assertSame(result, "test");
	}
}
```


コンストラクタを偽装
>PowerMockito.whenNew(Util.class).withNoArguments().thenReturn(mock);

whenNew(Util.class)　で対象のクラスを指定
withNoArguments()　は引数なしのコンストラクタの場合
　※引数ありの場合は、withArguments(anyString())　などとする
thenReturn(mock)　返却するオブジェクト
pyenv on Linux

# pyenv
https://github.com/yyuu/pyenv

```
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ . .bash_profile
```
## build python(s)
```
$ pyenv install --list
$ pyenv install 2.7.10
```
## set global or local
```
$ pyenv global 2.7.10
```
confirm
 
```
$ which python
$ python -V
```
# pyenv + virtualenv
Virtualenv implemented as pyenv's plugin.
No need to install `pip install virtualenv`!!
https://github.com/yyuu/pyenv-virtualenv
## install
```
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ . .bash_profile
```
## mkvirtualenv & virtualenv ops.
Use pyenv cmd.

```
$ pyenv virtualenv aws
$ pyenv activate aws
$ pip freeze
...
```
deactivate
`$ pyenv diactivate`

list
`$ pyenv virtualenvs`
knitrBootstrapのエラー「pandoc: Could not find data file templates/default.html」の解決


## はじめに
RStudioのDockerコンテナを用意して、knitrを動かすところまでは問題なくできたのだが、knitrBootstrapを動かすところでハマったので、そのときの解決までのメモ

## 結論
pandocのバージョンが古いバイナリを使っててエラーが出ていた。バイナリファイルに変更すれば解決。

## 問題
- 別のRStudioコンテナで問題なく動いてたRmd（knitrBootstrapをYAML指定）のものが、自分で新たに立てたRStudioコンテナだと、エラーが出て、htmlファイルのアウトプット時に以下のエラーが出る。

```
pandoc: Could not find data file templates/default.html
Error: pandoc document conversion failed with error 97
Execution halted
```


## 試行錯誤
ひとまずググるとドンピシャのGithubのIsuueがある。
[Pandoc crashes rendering a knitrBootstrap document](https://
github.com/jimhester/knitrBootstrap/issues/64)

RStudioインストール時についてくるpandocが問題（壊れている）とか書いてある。それをリネームして、元のOSにインストールされているpandocをシンボリックリンクすればOKとのこと。

それのとおり、新しいPandocのバイナリファイルをゲットして、それに置き換えてみたところ動いた！

## knitrBootstrapが動かなかったPandocのバージョンのもの

```
$ pandoc -v
pandoc 1.12.4.2
<snip>
```

## knitrBootstrapが動いたPandocのバージョンのもの

```
$ pandoc -v
pandoc 1.13.1
<snip>
```

## 原因1
新しく立てたRStudioコンテナで利用したRStudioのイメージが古かったのか、古いRStudioのバージョンを使っていた模様...。Dockerイメージの管理が甘かった。0.99系なら問題なく動くのかな？

```
$ cat /usr/lib/rstudio-server/VERSION
0.98.1091
```

## 原因2

古いバージョンのPandocでもpandoc-templatesをダウンロードして、自分のホームの下に置けばうまくいく。rockerのRStudio Dockerfileでは、そうやってるみたいだけど、これをわざわざしてるのは別の理由があるのかな。

## おわりに
RStudioのイメージファイルが散財していたので、ちゃんとDockerfileで管理しなければ。しかし、ひさびさにdocker buildすると、途中でエラーでて止まるの勘弁してほしい。


## 参考
- [knitrBootstrap](http://www.jimhester.com/knitrBootstrap/)
- [rocker/rstudio/Dockerfile](https://github.com/rocker-org/rocker/blob/master/rstudio/Dockerfile)
Trelloのカード幅を900pxにするブックマークレット

Trelloのカード幅がせまい！
リストみたいにしたい！

と思ったので作ったブックマークレットです。

Chromeで使えます。デフォは900px

```js
javascript:var width = "900px";Array.prototype.forEach.call(document.querySelectorAll(".list-card"), (node) => node.style.maxWidth = width);Array.prototype.forEach.call(document.querySelectorAll(".list-wrapper"), (node) => node.style.width = width);
```
SpineにIllustrator上のデザインを取り込む(基本編)


今回は、Spine側で公式配布しているプラグインを利用してIllustrator上のデザインをSpineに取り込んでみます。

# 事前準備
当然ですが、IllustratorとSpineを用意します。記事を書いて時点で使用しているバージョンはIllustrator CC 2015およびSpine2.1.27 Essentialです。以下、Mac上での作業での解説となるので、Windowsの人はパスなど適当に読み替えてください。

# Illustratorプラグインのインストール
Photoshopの場合と同様で、/Applications/Spine/scripts/illustrator/ 以下にLayersToPNG.jsxというプラグインファイルがあります。これをコピーして、Illustratorのスクリプトフォルダに配置します。 自分の環境の場合、スクリプトフォルダは、/Applications/Adobe Illustrator CC 2015/Presets.localized/ja_JP/スクリプト/ となります。例によってファイル名がそのままプラグイン名として表示されるので、わかりやすい名前に変えても良いでしょう。自分はSpine_LayersToPNG.jsxとしました。

# Illustrator上のキャラクターデザインをexportする

![スクリーンショット 2015-10-17 3.17.45.png](https://qiita-image-store.s3.amazonaws.com/0/8302/11b12cd7-180b-f957-a352-327520f8a70f.png "スクリーンショット 2015-10-17 3.17.45.png")

今回はこのようなデータを用意してみました。顔と左右の手でレイヤーをわけてあります。ここで先ほどのプラグインを実行します。

![スクリーンショット 2015-10-17 3.18.59.png](https://qiita-image-store.s3.amazonaws.com/0/8302/89c83d83-7540-9ce9-a1ed-3954e9254348.png "スクリーンショット 2015-10-17 3.18.59.png")
メニュー→ファイル→スクリプト→で見つかります。

さて、ここでphotoshopの場合、書き出し設定のダイアログが表示されたのですが、、何も出ません。Finderを確認すると、レイヤー名でpngファイルが３つ保存されているのが確認できます。
![スクリーンショット 2015-10-17 3.29.06.png](https://qiita-image-store.s3.amazonaws.com/0/8302/e0d1a3b3-fb01-d846-e675-0998c6737cce.png "スクリーンショット 2015-10-17 3.29.06.png")

残念ながら、イラストレータのプラグインでできるのは残念ながらこれだけのようです。
確かに公式サイトのドキュメントにはIllustratorプラグインは機能が少ないと書いてありましたが……少ないどころではないですね。

# 一度Photoshopにexportする
公式サイトのドキュメントには、一度Photoshopにデータを変換して、そちらのプラグインを使ってくれとも記載がありましたので、そのように実際にやってみます。メニューの"ファイル"→"書き出し"で下記のようなダイアログがでるので、必要あれば設定を変えて psdファイルを書き出します。
![スクリーンショット 2015-10-17 4.58.50.png](https://qiita-image-store.s3.amazonaws.com/0/8302/bf05c2f2-9834-4f30-4926-b129cb1b8838.png "スクリーンショット 2015-10-17 4.58.50.png")

![スクリーンショット 2015-10-17 14.07.19.png](https://qiita-image-store.s3.amazonaws.com/0/8302/0d093f86-507b-e548-2a45-2f264c422d85.png "スクリーンショット 2015-10-17 14.07.19.png")
開けました。問題ありません。

![スクリーンショット 2015-10-17 14.23.20.png](https://qiita-image-store.s3.amazonaws.com/0/8302/97a89ba2-3e1e-9112-6a32-9fdb6366b901.png "スクリーンショット 2015-10-17 14.23.20.png")
無事Spineに取り込めました。

_Photoshopプラグインについては、以前の投稿を参照_
http://qiita.com/harayoki/items/22597daa586bccdd7d9a

# おわりに
キャラクターデータをIllustratorのパスデータで作る事はよくある話だと思うので、そこから配置情報含めてSpineに取り込めるとかなり効率が良いのですが、現状では一度Photoshopにデータを変換する方法が良いようです。LayersToPNG.jsxの中身は30行程度しかないので、腕に自信がある人は、Photoshop側のプラグインを参考に改造してみるのも良いかもしれません。また自分は探していませんが、ユーザーが作成したIllustrator用の良いExporterもあるのではないかと思っています。
Gitで”Permission denied (publickey).” が出たときのメモ

SourceTreeを使ってBitbucketを利用しています。
WindowsからMacに移行したので環境を作り直し、同じようにプッシュしようとしたら

```
”Permission denied (publickey).” 
```

というエラーが出てしまったので、その対処法をメモしておきます。

#前提条件

* すでにBitbucket上にリポジトリがある
* ローカルにもリポジトリがある（他の環境からHDDまるごとコピーしてきた等）
* SourceTreeもインストール済み
* 変更をプッシュしようとしたら表題のエラーが出てしまう

#MacにSSH鍵の準備

##手順①　SSHの鍵を作成

```console
// hoge@hoge.com の部分はBitbucketに登録しているメールアドレス
$ ssh-keygen -t rsa -C hoge@hoge.com
```

##手順②　作成された鍵の名前を変更する

```console
// 名前は自分でわかれば何でも構わない
$ mv id_rsa bitbucket_rsa
$ mv id_rsa.pub bitbucket_rsa.pub
```

##手順③　OSにSSH鍵を認識させる
```console
$ cd ~/.ssh/
$ vi config
```

下記内容を記述

```:~/.ssh/config
Host bitbucket.org
  HostName bitbucket.org
  User git
  Port 22
  IdentityFile ~/.ssh/bitbucket_rsa // 名前変更したSSH鍵
  TCPKeepAlive yes
  IdentitiesOnly yes
```

# Bitbucketへの登録

##手順④　公開鍵の内容をクリップボードにコピー

```console
// ファイル名は自分で変更したものを入力
$ pbcopy < bitbucket_rsa.pub
```

##手順⑤ アカウント情報に公開鍵を追加
参考：Bitbucketアカウントに公開鍵をインストールする方法
[https://confluence.atlassian.co.jp/pages/viewpage.action?pageId=35095449](https://confluence.atlassian.co.jp/pages/viewpage.action?pageId=35095449)

1. Bitbucketにログイン
2. 画面右上の人型から `アカウントの管理`
3. 左側の `SSHキー`
4. `鍵を追加`
5. Labelに適当な名前（PC名とか）を入力し、Keyにクリップボードの内容をペースト。鍵を追加

##手順⑥ ターミナルからログインの確認

```console
$ ssh -T git@bitbucket.org

// 成功した場合
logged in as *****.
You can use git or hg to connect to Bitbucket. Shell access is disabled.

// 失敗した場合
Permission denied (publickey).
```

上記手順で失敗した場合は `~/.ssh/config` の記述が間違えている可能性があります（他にも回線の不具合とかBitbucketが落ちてるとかもありますが）。

# おわり

今回の自分のつまづきポイントは、リポジトリのconfigの記述と　~/.ssh/config の記述が違っていました。

```:hogehoge/.git/config
// リポジトリの記述
url = ssh://git@bitbucket.org/*****/******.git
```

```:~/.ssh/config
// OS側の設定
Host bitbucket // .orgが抜けている
  HostName bitbucket.org
```

とあるサイトを参考にしたらこのような記述になっていたのですが、そのサイトの人はうまくいったのでしょうか？？
Railsアプリをherokuにデプロイしたら、Devise.secret_key was not set.と出た時

## アプリをHerokuにデプロイ

```
% git push heroku master
```

で、エラーが出る場合

```
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        Devise.secret_key was not set. Please add the following to your Devise initializer:
```

### .gitignore で secret.yml を無視していないか確認する

エラーメッセージに促されるまま  ``` config/initializer/devise.rb ``` にsecret keyを追加してはならない・・

セキュリティを意識したつもりで、.gitignore に secret.yml を追加していると、このエラーがでる。

デフォルトの状態でproduction環境の分は環境変数から取ってくる状態になってるので、このままgitに入れてOK

``` secret.yml
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
```

余計なことするんじゃなかった。。
Apache 2.4 でLDAP認証


## はじめに
- 社内用のWebサーバをはじめは公開していて、だれでも分析レポート（Rmdで生成したhtmlファイル）を見れたのだが、まずいものもいくつか出てきたので、LDAP認証かけたいよねって事で取り組んだ
- Apache2.4でLDAP認証なんて、そこらへんにやり方あるあるなんだろうなと思ったけど、案外Web上にないので、Apache素人の自分には苦労したので、そのメモ
	- というか最終的には、隣の先輩に手伝ってもらった。。

## 前提知識
- ApacheとLDAPが何かくらいは分かってて、基本的なディレクティブやLDAPコマンド（ユーザ追加できるとか）は分かってるものとする

## Dockerfileの準備

- Dockerhubに公式?のイメージがあります（[こちら](https://hub.docker.com/_/httpd/)）
- でも、LDAP認証をするために、ビルドから必要そうなので、Dockerfileも必要（[こちら](https://github.com/docker-library/httpd/blob/3ea3760ef8d264ac7539ec6db9ce9c0b0665a192/2.4/Dockerfile)）

## STEP 1. Dockerfileの修正

configureするところにオプション追加。

```
<snip>
&& ./configure --with-ldap --enable-ldap=shared --enable-authnz-ldap=shared --enable-so --enable-ssl --prefix=$HTTPD_PREFIX \
<snip>
```

## STEP 2. httpd.confの設定

公開用に修正したけど、以下で動きました。

```
<Location />
  AuthType Basic
  AuthBasicProvider ldap
  SetHandler ldap-status
  AuthName "Members Only"
  AuthLDAPURL ldap://[LDAP Server IPアドレス]:[ポート番号]/ou=People,dc=hogehoge,dc=jp?uid
  Require valid-user
</Location>
```

**AuthLDAPURL** でLDAPサーバの検索範囲を指定して、 **Require** で該当するユーザのみ閲覧可能とする

## STEP 3. Docker build & run

ここは普通にビルドして、docker-composeで立ち上げた。Fin.

## おわりに
- httpd.confだけいじれば良いと思ってら、ビルドするときにオプションが必要だったようです。
- ここらへんってApache2.4の公式ドキュメントに書いてるのかな？見つけきらずに苦労した。
bounceHammerをマニュアル通りにインストールを試みて失敗した時の対応

# bounceHammerをマニュアル通りにインストールを試みて失敗した時の対応

CentOS6で
bounceHammer をマニュアル通りにインストールしようとしたら、必要なPerlモジュールの所ではまった。
全然、モジュールがインストールできない :disappointed_relieved: 

下記やったら、うまくできた

1. yum installする

\# yum -y install perl-ExtUtils-MakeMaker
\# yum -y install perl-libwww-perl
\# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
\# yum -y install perl-CPAN
\# yum -y install perl-YAML
\# yum -y install -y perl-core gcc


2.マニュアルに戻って、必要なモジュールをインストールする
\# perl ./Modules.PL missing | cut -d' ' -f4 | cpanm -L \⏎ 
\> /usr/local/bouncehammer 

後はマニュアル通りでOK

後、 管理対象のドメインを登録しないと、
t_bouncelogsテーブルに反映されないのも地味に嵌った。。。。

[公式マニュアル](http://bouncehammer.jp/ja/v2/docs/index#build)
EC2とS3を使用してsftpサーバを構築する

EC2とS3を使用してsftpサーバを構築したのでメモ。

# ソフトウェアアップデート
<pre>
$ sudo yum update -y
</pre>
# サーバセキュリティ設定
<pre>
$ vi /etc/ssh/sshd_config
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
〜編集終了

$ sudo service sshd restart
</pre>
# タイムゾーンの変更
<pre>
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo vi /etc/sysconfig/clock # ZONE="Asia/Tokyo"
$ sudo reboot
$ date # 時間確認
</pre>
# ユーザ編集
<pre>
$ useradd auser
$ passwd auser
$ sudo su - auser
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
$ cd ../
$ chmod 700 .ssh
$ cat .ssh/id_rsa # ローカルに保存
</pre>
# S3マウント
** S3マウントするために必要なパッケージをインストールする
<pre>
$ sudo yum -y install automake 
$ sudo yum -y install gcc-c++ 
$ sudo yum -y install fuse 
$ sudo yum -y install fuse-devel 
$ sudo yum -y install libcurl-devel 
$ sudo yum -y install libxml2-devel 
$ sudo yum -y install openssl-devel
</pre>
** s3fsのソースを取得する
<pre>
$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/s3fs/s3fs-1.74.tar.gz
$ tar -xzf s3fs-1.74.tar.gz
</pre>
** s3fsのインストール
<pre>
$ cd s3fs-fuse-1.77
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
</pre>
** マウントポイント作成
<pre>
$ sudo su -
$ echo 'XXXXXXXXXX:XXXXXXXXXX' > /etc/passwd-s3fs
$ mkdir -p /mnt/s3/
$ chmod 777 /mnt/s3/
$ s3fs s3 /mnt/s3/ -o rw,allow_other
$ df -h /mnt/s3/ # サイズが大きいはず
$ chmod -R 755 /mnt/s3/
</pre>
# ファイル参照設定
** auser, buserユーザの所定位置にシンボリックリンクを張る
<pre>
$ ln -s /mnt/s3/auser/ s3
$ ln -s /mnt/s3/buser/ s3
</pre>
# sftp接続確認 (auserユーザで確認)
ユーザの秘密鍵を事前に配布、バケットにtest.txtを作成しておく。
<pre>
$ chmod 600 id_rsa
$ sftp -oIdentityFile=./id_rsa auser@XXX.XXX.XXX.XXX
$ # パスフレーズ入力
sftp> get s3/test.txt
sftp> exit
$ ls -la # test.txtが存在すればOK
</pre>
ルンゲクッタテスト


```math
\frac{dy}{dt}	=	f\left(t,y\left(t\right)\right)\\
y\left(t+h\right)	=	\sum_{n=0}^{\infty}\frac{y^{\left(n\right)}\left({\it t}\right)}{n!}h^{n}\\
f\left(t+h,y+k\right)=f\left(t+h,y+hf\right)	=	\sum_{i=0}^{\infty}\sum_{j=0}^{\infty}\frac{\partial^{i+j}f\left(h,k\right)}{\partial t^{i}\partial y^{j}}\frac{h^{i}k^{j}}{i!j!}\\
	=	\sum_{i=0}^{\infty}\sum_{j=0}^{\infty}\frac{\partial^{i+j}f\left(t,y\right)}{\partial t^{i}\partial y^{j}}\frac{h^{i+j}f^{j}}{i!j!}
```

2次の項

```math
 f\left(t+h,y+hf\right)	=	\sum_{i=0}^{\infty}\sum_{j=0}^{\infty}\frac{\partial^{i+j}f\left(t,y\right)}{\partial t^{i}\partial y^{j}}\\\frac{h^{i+j}f^{j}}{i!j!}
	=	\frac{\partial^{0}f\left(t,y\right)}{\partial t^{0}\partial y^{0}}\frac{h^{0}f^{0}}{0!0!}+\frac{\partial^{1+0}f\left(t,y\right)}{\partial t^{1}\partial y^{0}}\frac{h^{1}f^{0}}{1!0!}\\
		+\frac{\partial^{0+1}f\left(t,y\right)}{\partial t^{0}\partial y^{1}}\frac{h^{1}f^{1}}{0!1!}+\frac{\partial^{1+1}f\left(t,y\right)}{\partial t^{1}\partial y^{1}}\frac{h^{2}f^{1}}{1!1!}+\mathcal{O}\left(h^{2}\right)\\
	=	f\left(t,y\right)+h\frac{\partial f\left(t,y\right)}{\partial t}+h\frac{\partial f\left(t,y\right)}{\partial y}f\left(t,y\right)+\mathcal{O}\left(h^{2}\right)
```

 同様に、
 
```math 
  f\left(t+\left(a+h\right),y+\left(a+h\right)f\right)	=	f\left(t,y\right)+\left(a+h\right)\frac{\partial f\left(t,y\right)}{\partial t}+\left(a+h\right)\frac{\partial f\left(t,y\right)}{\partial y}f\left(t,y\right)+\mathcal{O}\left(h^{2}\right)
 ```
 
 したがって
 
 ```math
 y\left(t+h\right)	=	\sum_{n=0}^{\infty}\frac{y^{\left(n\right)}\left({\it t}\right)}{n!}h^{n}\\
	=	\frac{y^{\left(0\right)}\left({\it t}\right)}{0!}h^{0}+\frac{y^{\left(1\right)}\left({\it t}\right)}{1!}h^{1}+\frac{y^{\left(2\right)}\left({\it t}\right)}{2!}h^{2}+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+\frac{dy}{dt}h+\frac{h^{2}}{2}\frac{d^{2}y}{dt^{2}}+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+hf+\frac{h^{2}}{2}\frac{df}{dt}+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+hf+\frac{h^{2}}{2}\left(\frac{df}{dt}+\frac{df}{dy}\frac{dy}{dt}\right)+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+hf+\frac{h^{2}}{2}\left(\frac{df}{dt}+\frac{df}{dy}f\right)+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+\frac{h}{2}f+\frac{h}{2}\left(f+h\frac{df}{dt}+hf\frac{df}{dy}\right)+\mathcal{O}\left(h^{3}\right)\\
	=	y\left(t\right)+\frac{h}{2}f\left(t,y\right)+\frac{h}{2}\left(f\left(t+h,y+hf\right)-\mathcal{O}\left(h^{2}\right)\right)+\mathcal{O}\left(h^{3}\right)\\
		y\left(t\right)+\frac{h}{2}f\left(t,y\right)+\frac{h}{2}f\left(t+h,y+hf\right)+\mathcal{O}\left(h^{3}\right)\\
```

<iframe src="https://vid.me/e/XwQ7?stats=1&amp;tools=1" width="480" height="480" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen scrolling="no"></iframe>
![test2.png](https://raw.githubusercontent.com/uyuutosa/public/master/small_y.gif "test2.png")
Windows IoT Core(Raspberry Pi2)でnode.jsを動かすまで

#はじめに

[前回記事](http://qiita.com/FePlus/items/5b7b7ab17f72d71f1a41)の続き。
Raspberry Pi2にWindows IoT Coreを導入し、node.jsで遊んじゃおうというところまで。
結局PC母艦にもnode.jsいれるのでついでに母艦でも遊べる。

個人的にはWindows環境でnode.jsするときには、あまり思い入れがないのでVisual Studio環境だろうが、なんだろうがあまり気にしてない。
話題が逸れちゃうけど、PC母艦環境でnode.js使うのにVisual Studioなんていらないぜ、っていう人は[chocolatey](https://chocolatey.org/)使うか、こちらの[公式](http://nodejs.jp/)からインストールをどうぞ。

#インストール
PC母艦環境はVisual Studio 2015をインストール。
その辺りは各自で適切に対処願いたい。
その筋では有名な日本のMSDNブログの[こちら](http://blogs.msdn.com/b/hirosho/archive/2015/07/09/howtoimplementi2csensorcontrolbynodejsonwin10iotcore.aspx)を参考にnode.js用のツールをインストールする。

結構さまよったので、[こちら](https://github.com/ms-iot/ntvsiot/releases)にダンロード先をのせておく。
このリンク先の「Node.js.Tools.for.Windows.IoT.1.2.exe」をダウンロードすること。
これ以外の別のリンク先ではver1.1RC（製品候補版）になっていることが多い。
間違えてこちらを使うと下記のサンプルで紹介されていることができないので注意。

##Visual Studio 2015画面
インストールが終わると新しいプロジェクトからJavaScriptを選択して、node.jsのプロジェクトが選択できるようになっている。
![スクリーンショット 2015-10-17 09.44.57.png](https://qiita-image-store.s3.amazonaws.com/0/95484/a39a73f0-ab19-a729-4d30-42654eb338ef.png)

#動かしてみよう
[こちら](http://ms-iot.github.io/content/en-US/win10/samples/NodejsWU.htm)にサンプルの紹介があるので、この通り使ってみる。

手順通りに実施していくと、開発者モードを有効にしろと言ってくる。
すでに開発者モードの場合には何も表示されないが、有効にしていない場合にはここで有効にする。
![スクリーンショット 2015-10-17 10.26.07.png](https://qiita-image-store.s3.amazonaws.com/0/95484/26c2ba7f-0e58-9b4c-219f-2946338a5883.png)

昔はレジストリから設定する必要があったが、コンパネからいける。
上記開発者モード警告画面の「開発者向け設定」をクリックしてもOK。
![スクリーンショット 2015-10-17 10.25.59.png](https://qiita-image-store.s3.amazonaws.com/0/95484/c9288550-d4a5-78c1-2892-73f17e64c5f8.png)

##実行画面
リモートでデバッグも可能。
ステップ実行ができることも確認した。
なかなか簡単に作れそうだ。
![スクリーンショット 2015-10-17 10.27.50.png](https://qiita-image-store.s3.amazonaws.com/0/95484/c211ba79-b288-9a5f-a10d-2d35ecbad1f9.png)
CodeCommit 出来ることのまとめ & Setting Up

# 何が出来る?
CodeCommitで今現在(2015年10月現在)出来ることをまとめました。

- gitのプライベートリポジトリ
- AWSのIAMを用いたユーザ認証およびリポジトリの共有
- マネジメントコンソールにてソースコードの閲覧

# 何が出来ない?
CodeCommitで、現時点では出来ないことをまとめました。
- パブリックにアクセスできるリポジトリ
- ap-northeast-1(東京)リージョンのリポジトリ
- WebHook

# Setup
[Setup](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-ssh-unixes.html)の手順に沿って、次の設定をします。
- Step 1: IAMユーザおよびアクセスキーの作成、ポリシのアタッチ
- Step 2: Gitのインストール
- Step 3: 開発環境 Credentialの設定
- Step 4: リポジトリの作成

## Step 1: IAMユーザおよびアクセスキーの作成、ポリシのアタッチ
マネジメントコンソールにログインし、CodeCommitを利用するためのユーザを作成します。gitコマンドからCodeCommitにアクセスする際にはアクセスキーが必要となるので、あらかじめ作成しておきます。
ポリシーとして、AWSCodeCommitFullAccess をアタッチします。

## Step 2: Gitのインストール
gitが開発環境にインストールされていない場合は、あらかじめインストールを済ませておきます。

## Step 3: 開発環境 Credentialの設定
はじめに、開発環境にて ssh-keygen コマンドを実行して、秘密鍵/公開鍵の組を生成します。

```
$ ssh-keygen -f ~/.ssh/codecommit_rsa

$ cat ~/.ssh/codecommit_rsa.pub
(あとで、マネジメントコンソールにてSSH公開鍵をアップロードします)
```

つぎに、IAMのマネジメントコンソールにてCodeCommitを利用するユーザにポリシーとして IAMUserSSHKeys をアタッチします。つづけて、"Upload SSH public key"ボタンをクリックして、先ほど生成したSSHの公開鍵を貼り付けてアップロードします。

さいごに、開発環境にてgitからCodeCommitのIAM認証をするための設定を追加します。
なお、User の行では、IAMのマネジメントコンソールにて表示される
 AWS CodeCommit の SSH キーのアクセスキーを設定します。IAMのアクセスキーIDとは異なるため、ご注意ください。

```
$ vi ~/.ssh/config
$ chmod 600 ~/.ssh/config
```

```~/.ssh/config
Host git-codecommit.*.amazonaws.com
  User APKAEIBAERJR2EXAMPLE
  IdentityFile ~/.ssh/codecommit_rsa
```

以上で設定が完了しました。次のコマンドを実行し、正しく設定ができていることを確認します。
```
$ ssh git-codecommit.us-east-1.amazonaws.com
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-1.amazonaws.com closed.
```

## Step 4: リポジトリの作成
Step.1 - 3.にて、CodeCommitを使用するための前準備が完了しました。Step 4.では、CodeCommitのマネジメントコンソールにログインして、リポジトリを作成します。
たとえば、リポジトリ"example-repo"を作成します。

つぎに、開発環境の端末にてリポジトリのcloneを実行します。

```
git clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/example-repo
```


# Getting Started
AWS CLIを用いたレポジトリの作成方法やgitの基本的な使い方など、基本的な使い方についての解説がGetting Startedに記載されています。git初心者の人は一読すると良いと思います。

 [Getting Started](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/getting-started.html "Getting Started")
ADX2LEで楽器音（MML）

#ADX2LEで楽器音

![スクリーンショット 2015-10-17 9.07.17.png](https://qiita-image-store.s3.amazonaws.com/0/96808/13718673-2762-b4c7-46de-3594c1e3bcd0.png)

##音を伸ばし続ける
上のスクリーンショットのように3音使います。
第1トラックはアタック部分を再生してすぐ音が消えます。
第2と第3のトラックが交互に現れるため音が途切れないように聞こえます。
これをシーケンスループでくくることで永遠になり続ける音になりました。

##実例
SimaVoiceというアプリで使っています。
[![SimaVoice動画](http://img.youtube.com/vi/bWLJOC-2HFQ/0.jpg)](http://www.youtube.com/watch?v=bWLJOC-2HFQ)
●[Windows/Macアプリ](https://www.youtube.com/redirect?q=http%3A%2F%2Fdl.dropbox.com%2Fu%2F37423949%2FSimaVoice%2FSimaVoice.zip&redir_token=U0bbmhPD8LUpqSxB3_Q8VKbsFXN8MTQ0NTEyNzMwMUAxNDQ1MDQwOTAx)
●[iOSアプリ](https://itunes.apple.com/us/app/simavoice/id629370244?l=ja&ls=1&mt=8)
このアプリの歌声の部分はMMLで表記したピッチと長さで音が鳴ります。

### 歌唱簡易MMLフォーマット

すごく簡易的な[MML](https://ja.wikipedia.org/wiki/Music_Macro_Language)で、小文字英数字がMMLコマンドになります。
（ここでのMMLコマンドとは、音楽表現の音程、長さなどのこと）
文字は全角日本語と半角英字などを解釈します。

``` かえるの歌の例
"cかdえeるfのeうdたcがー" 
```

文字をコピペしただけでも音がなるように
最後に音程や音長を評価したもので読み上げ音素が変わります。

音素が音色名(キュー名)になっていて ひらがなから音素への変換テーブルを経由してキュー再生しています。
![mml20160320.png](https://qiita-image-store.s3.amazonaws.com/0/96808/d0b50250-dd79-7495-6efc-d2aa7882fed1.png)

####コマンド
- 音程
 - cdefgab ドレミファソラシ
 - + - 臨時記号　半音変化します
- 長さ
 - l2 とか l4とか l（エル）と数字の組み合わせ 1,2,3,4,5,6,7,8,9,12,16
- オクターブ
 - o4 とか　o(オー)と数字の組み合わせ　2,3,4,5,6

####　文字
- ひらがな 「あいうえお」　など　
- アルファベット大文字　「ABCDEF」　など　（えー、びー、しー、でー、いー、ふー）とひらがな1文字化して発音します。
- 句読点　「。、\n\r\tっ.,」など 音が止まります。
- 長音など　「ー―(ﾟ∀)」　など 前の音を伸ばす。
- 感嘆符など　「！・!」ランダムピッチと音の停止。
- 特殊文字　「〜~」 など　ランダムピッチと前の音を伸ばす。

#工夫した点
##長い音、短い音、いろんな長さの音を鳴らせるように
効果音とかだと、長さに限りがって音が止まってしまいます。
楽器アプリに使うような音はノートオン／ノートオフのように任意の長さの音を鳴らす必要があります。

どこかでループバックしてあげればずっと鳴り続ける音ができるのでループ波形を選択するのもあるのですが、
でも、そのループするときの切り替わり部分が綺麗に繋がらないと調整に手間がかかり面倒でくじけてしまいます。
（SimaVoiceではUTAUを参考に声の素材148音素をループ化するという苦行になる。）
ボリュームのフェードを使ってその切り替わりをぼやかしています。
これくらいならリアルタイムにループをさせるプログラムを書いても良いのですが時間管理が面倒になりそうなので、
シーケンスのループ機能で補うことにしました。

##ピッチを上げても途切れないようにする
ピッチを変えると音が短くなります。
そこで、波形はループ区間よりも倍以上の余裕のある長さ(2.5秒)にすることで、オクターブを上げた場合でも
波形の最後まで行く前に次のトラックが鳴り始めるので音が途切れないようになります。

##さらに高みを目指すなら
この方法だとループ部分の波形は毎回同じ音が鳴るので、範囲が短いと機械っぽいブザー音になりがちです。
再生開始位置とかもランダムにするとかすればより繰り返しが目立たないループとかも作れそうです。
（あとビブラートやエンベロープの設定とか）
[python] classの基本メソッド


helpにちょっと追記しただけです。

### __call__(...)

```python:
x.__call__(...) <==> x(...)
```

生成と同時何か起こしたい時に使う、のだろうか。
コンストラクタでいいのでは・・・
 
### __delattr__(...)
 
```python:
x.__delattr__('name') <==> del x.name
```

クラス変数を削除した時に起こしたいアクションを設定する。
削除させなくすることもできるということ。
 
### eq ne ge gt le lt

```python:
x.__eq__(y) => x==y
x.__ne__(y) ==> x!=y
x.__ge__(y) => x>=y
x.__gt__(y) => x>y
x.__le__(y) => x<=y
x.__lt__(y) => x<y
```

比較演算子をした時の挙動。設定するときは[total_ordering][link-1]を使ったほうが楽。
これはよく使う。

[link-1]:http://docs.python.jp/2/library/functools.html#functools.total_ordering
 
### __getattribute__(...)

```python:
x.__getattribute__('name') => x.name
```

クラス変数を直接呼び出された時の挙動を変更できる。
 
### __init__(...)

言わずもがな。コンストラクタ。
 
### __instancecheck__(...)

```python
__instancecheck__() -> bool
```

挙動がよくわかりません。設定してisinsatnceとややっても反映されないし。
誰か知ってたら教えて。
 
### __repr__(...)
 
```python
x.__repr__() => repr(x)
```

__str__が有ればあんまり使わなさそう。
 
### __setattr__(...)
 
```python
x.__setattr__('name', value) <==> x.name = value
```

クラス外からクラス変数を定義する手法ですね。
例えばこれを制限したり、違う名前で登録したり。
あるいはvalueを元に生成した他のインスタンスをx.nameに代入させたり。
色々使えそうです。
 
### __subclasscheck__(...)
 
```python
__subclasscheck__() -> bool
```

これもよくわかりません。設定しても特に挙動が変わらないし。
 
### __subclasses__(...)

```python
__subclasses__() -> list of immediate subclasses
```

これも何でしょう。試しにdic.__subclasses__()を呼び出してみました

```python:print(dic.__subclasses__())
[<type 'collections.defaultdict'>, <class 'collections.OrderedDict'>, <class 'collections.Counter'>, <class 'traitlets.config.loader.Config'>, <class 'IPython.utils.ipstruct.Struct'>, <class 'IPython.utils.coloransi.ColorSchemeTable'>, <class 'plistlib._InternalDict'>, <class 'pkg_resources.ZipManifests'>, <type 'StgDict'>]
```
 
### __nonzero__(...)

インスタンスそのものをbool判定に使った場合の挙動を設定。
デフォルトだと全部True。あるいは__len__()が値が1以上かどうか。

### __len__(...)

```python
x.__len__() => len(x)
```

len()で呼び出された時の挙動を示す。__nonzero__()が非設定の場合、こちらの値でもってbool判定される。
どちらも非設定だとTrue
npm command not found と出てきた時の解決方法


npmを使ってgulpのプラグインをインストールしようとしたら、

```command:command
npm command not found
``` 

と出てきて、??? となったので一応メモ。
同じようなケースの解決方法があまり見つからなかったので色々調べてから作業を始めたんですけど、Node.js を再インストールしたら、すんなり npm が動くようになりました。

##せっかくなので nodebrew もインストール
参考にさせてもらったサイト（下のサイト）が、nodebrew をインストールするために node を再インストールする方法を紹介していたので、せっかくなので node を再インストールしながら nodebrew も一緒にインストールしてみました。
[node.jsのversionを管理するためにnodebrewを利用する](http://qiita.com/sinmetal/items/154e81823f386279b33c)

ほとんど上のページで紹介されているコマンドを打っていけばすんなり行ったので、一部追加の作業の部分だけメモってます。

##.bash_profile を作成
nodebrew のパスを通すときに .bash_profile が見当たらなかったので、下のサイトを見ながら、ホームに.bash_profile を作成。
[macで.bash_profileの場所が見つからないときは](http://banker0507.blogspot.jp/2012/11/macbashprofile.html)
あとはパスを通して nodebrew のバージョンを確認すれば nodebrew はインストール完了。

```command:command
$ source ~/.bash_profile
$ nodebrew help
```


##Node.js をインストール

次に node をインストールしていくんですが、node のバージョンは、下のサイトで確認しました。
[Nodejs 日本ユーザーグループ](http://nodejs.jp/)

このメモを書いた時点の安定版は v 0.10.12 だったので、これをインストール。

```command:command
$ nodebrew install-binary v0.10.12
```

これで npm もインストールできました。

```command:command
$ npm -v
1.4.3
```
既存のpemからSSH接続用公開鍵情報を出力する方法

awsなんかのクラウドの場合、インスタンス作成時に新規にpemを作り登録までしてくれるのでいいのですが、まれに既存pemの利用が必要になりSSHで接続する公開鍵情報をpemから出力したくなることがあります。

と、そんなときのメモです。
```ssh-keygen -y -f SOMEOFKEYFILE.pem```

出力結果例

```
ssh-rsa AAAABBBBBCCCCDDDDEEEEFFFFGGGGHHHHIII/Zmo3dq6s1AtD0SACUlAjyuGCVnGJm6PiL9YISn3neHaNwU7S/wJfW4MshSFezdIP2LBGaZMYVoEiBCdF3QDaBthTvIt1H0KSftLxtQ18oBXtnsMT0LW5ESCiPy3Y1CmtpLxdAUGZHqjvXEHSksqhHWVo4uw7SbwJfHBTk+ZinK+pyVx7fMBXlliPfyb6ESEvtkTJLROsO+WIqihn36vre8bcuFYok7a48w8OMmUcb3bHTw0w7DCu6JYBx5LWuAEWGq2Vkqnm1cWnQpQyRITLav9OTKtLsHvyElQir9e0V+5RyoQPZCFHQHZmkFaM12PI92klUR1YYYYZZZZ
```
[メモ]VirtualBoxで作成したGentooからホストのフォルダを共有させる

# 前回使ったVM
http://qiita.com/igara/items/1b7cd8e714844440795d

VirtualBoxのメニューより
デバイス->共有フォルダー設定

![スクリーンショット 2015-10-17 9.13.03.png](https://qiita-image-store.s3.amazonaws.com/0/89599/9ae54a31-4750-13e2-3e14-fb8516e8ed45.png)
実際存在する共有したいフォルダを選択

# マウント

GentooのVMを起動する

```
# マウント対象の共有のフォルダがあるか見る
$ ls /media
  sf_slack_rack_web
# マウント
$ sudo mount -t vboxsf slack_rack_web /home/vagrant/web
# ゲストでwebフォルダを事前に作成する必要がある
```
Raspberry Pi2にWindows IoT Core入れて動かすまで

#はじめに
Raspberry Pi2に[Windows IoT Core](https://dev.windows.com/en-us/iot)を入れて動かしてみる。
最終的にはnode.jsで遊んだり、WiFi接続、BLE等を動かす予定。
今回は前哨戦ということで、導入からセットアップまで。

#インストール
[こちら](http://www.buildinsider.net/small/windowsiot/01)の情報を参考にして導入した。
インストールに必要な環境（母艦）たるOSはWindows 10環境が必要だと思う。
（というか、その環境でしか試していない。）
Windows IoT Coreのイメージは[こちら](http://ms-iot.github.io/content/en-US/Downloads.htm)からダウンロードする。

##Windows IoT Watcherの画面
同一ネットワークのRaspberry Pi2を見つけてくれるツール。
以下のように名前、MacAddress、IPなどを見ることができる。
最初は有線で接続する。

![スクリーンショット 2015-10-17 08.14.37.png](https://qiita-image-store.s3.amazonaws.com/0/95484/f3fe4f93-2462-2f39-8431-9034a3dfda23.png)

##ブラウザからのアクセス
Windows IoT Watcherからデバイスを選択して、右クリックするとブラウザへ接続するメニューが出てくる。
最初にユーザ名とパスワードを聞かれたら以下を入力。（初期値）

**user: Administrator**
**pass: p@ssw0rd**
![スクリーンショット 2015-10-17 08.24.18.png](https://qiita-image-store.s3.amazonaws.com/0/95484/8b31dddb-c50d-c0c6-b4aa-223dfbdd9999.png)

##Administratorのパスワード変更
ログインができることが確認できたらパスワードを変更しておく。
PowerShellの各種設定は、[さきほど紹介した記事](http://www.buildinsider.net/small/windowsiot/01)を参考に行う。

PowerShellから以下のコマンドで対象デバイスを操作可能にする。
`Enter-PsSession -ComputerName minwinpc -Credential minwinpc\Administrator`

以下のコマンドでパスワードを変更する。
`net user Administrator <new pass>`

#WiFiの設定
ブラウザからNetworkingを選択するとネットワークに関する情報を表示可能。
WiFiアダプタを繋げれば表示されるはずだが、表示されず。
使用したアダプタはRaspberry Pi界隈では定評のあるPLANEXのGW-USNANO2Aを使用した。
Debian系だと安定動作するので好んで使っているのだが。

[こちら](https://ms-iot.github.io/content/en-US/win10/SetupWiFi.htm)の情報を元に色々確認してみるが進展なし。（次回情報更新対象）

![スクリーンショット 2015-10-17 08.43.45.png](https://qiita-image-store.s3.amazonaws.com/0/95484/a719ea0a-1b3b-165c-9eed-1d57118c3c65.png)

#Bluetoothの設定
こちらは動作している模様。
ブラウザからBluetoothのメニューに行き、Paired Deviceの更新アイコンを押下するとペアリングモードに以降するようだ。
利用したアダプタはBUFFALOのBSBT4D09BK。

![スクリーンショット 2015-10-17 08.50.18.png](https://qiita-image-store.s3.amazonaws.com/0/95484/67b709d6-31f0-7933-93c5-e58de77d30c7.png)
electron-rebuildを使う際にnpm -gで入れたelectronを使うには

# 背景

SSDの容量も残りわずかな環境では、プロジェクト毎に

```bash
npm install electron-prebuilt
```

なんてやっていてはどんどんSSDを消耗する。

# electron-rebuildとは

ネイティブコードを含むモジュールをelectron向けのモジュールにリビルドする便利ツール

デフォルトではelectronをプロジェクトローカルに入れたものを使おうとする。

しかし、npm -gでグローバルに入れたelectronを使うこともオプションでできるようになっていた。

# nodebrew環境の場合

nodebrewを使って

```bash
npm install electron-prebuilt -g
```

でインストールしたelectronを使うには

```bash
./node_modules/.bin/electron-rebuild -e ~/.nodebrew/current/lib/node_modules/electron-prebuilt
```

# 関連記事

- [Electronで自分のIPアドレスをLAN内のiPhoneに通知するには](https://abrakatabura.hatenablog.com/entry/2015/10/24/113659)
- [Raspberry Piの温度をgRPCを使ってElectronで作ったデスクトップマスコットに表示させた](https://abrakatabura.hatenablog.com/entry/2018/06/16/070747)
- [ElectronでWebGL(three.js)使ってデスクトップマスコット作った際に分かったこと](https://abrakatabura.hatenablog.com/entry/2016/01/09/134348)
- [ElectronでmacOSのDockやWindowsのタスクバーに独自のアイコンを表示するには](https://abrakatabura.hatenablog.com/entry/2018/08/20/202928)
- [Tensorflowのclassify_image.pyにElectronでGUIを被せてみた](https://abrakatabura.hatenablog.com/entry/2017/02/05/134054)
- [lisp版ElectronのCeramicを動かした](https://abrakatabura.hatenablog.com/entry/2015/09/08/071602)
Magick++でrepageするには

```cpp
Image img;
...
img.page("0x0+0+0");
```

ただし、以下のリンク先にもあるように、+repageとは完全には同じ動きにはならない模様。

# Link

- [[SOLVED] Is "+repage" and "-repage 0x0" exactly the same? - ImageMagick](http://www.imagemagick.org/discourse-server/viewtopic.php?t=23397)

# 関連投稿

- [Magick++で利用可能なフォント一覧を取得するには - Qiita](https://qiita.com/kjunichi/items/c62df93f5fdad79a3eff)
- [ImageMagickのMagick++ APIでEXIFを取得するには - Qiita](https://qiita.com/kjunichi/items/f68d1c5884f1dc44c273)

# 関連記事

- [mruby-mrmagickをWindowsでもv7系のImageMagickに対応させた](/entry/2018/02/23/074159)
- [ChocolateyでImageMagickをヘッダ、Libファイルとレガシーコマンドも一緒に入れるには](/entry/2018/02/21/071914)
- [Ubuntu16.04LTSでapt install imagemagick-devしてもImageMagickがリンクされない件](/entry/2018/03/02/071533)
Rのデータフレームでカンマを含むセルが存在する行を複数行に分ける

bioinfomaticsだとRで

![image](https://qiita-image-store.s3.amazonaws.com/0/7591/4bb93d4d-e5ac-ebf3-1099-3f515fc9975d.png)

みたいなデータフレームを

![image](https://qiita-image-store.s3.amazonaws.com/0/7591/d2605e6f-105c-c3e8-e067-f33ad1bd4185.png)

みたくしたいことが多い気がします。

その場合[splitstackshape](https://github.com/mrdwab/splitstackshape)というパッケージが便利そうです。

```r
> library(splitstackshape)
> hoge = read.csv("hoge.csv", header = F)
> hoge
               V1     V2
1 395,616,976,784 Q2MI39
2       100037489 Q0NZY6
> moge = cSplit(hoge, "V1", ",", direction = "long")
> moge
          V1     V2
1:       395 Q2MI39
2:       616 Q2MI39
3:       976 Q2MI39
4:       784 Q2MI39
5: 100037489 Q0NZY6
```

[cSplitのソース](https://github.com/mrdwab/splitstackshape/blob/master/R/cSplit.R)

以上
技術英語 > Places that are in close proximity to National Parks

@ loe > Jan. 13, 2012

http://loe.org/shows/shows.html?programID=12-P13-00002
> places that are <font color=red>in close proximity to</font> National Parks

http://ejje.weblio.jp/content/proximity
> in the proximity of a park 公園の付近に.

上記のproximityは「地理的な近さ」のようだ。

別の用例として「似ている」というので使われていたようにも思うが、例文(と出典)は思い出していない。
iADのテスト広告がたまに非表示になる件について


開発中appにiADを表示してクライアントに見せていたら、急に非表示になってしまいました。
備忘録としてその原因と、その際にすぐ提示できればよかったと思うドキュメントを記録しておきます。

## 非表示になる原因
Appleが開発者がテストしやすいようにと気をきかせて **不定期にエラーを投げてくる** ためです。 
ガイドラインにはエラーが起きたらバナーを非表示にしなければならないと書いてあるので
正しく実装していればこの時に非表示状態になります。


## 日本語ソース
[iAdプログラミングガイド](https://developer.apple.com/jp/documentation/iAd_Guide.pdf) !PDF
>バナー広告のテスト
アプリケーションを開発している間、iAd App Networkはアプリケーションにテスト広告を送信します。
**デベロッパの実装検証を支援するため、iAd App Networkではアプリケーションのエラー処理コードをテストするためにエラーを返すことがあります。**
デバイスのワイヤレス機能をオフにしてエラー 処理サポートを手作業でテストすることもできます。

## 原文ソース
[iAd Programming Guide](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/iAd_Guide/iAd_Guide.pdf) !PDF
>Testing Banner Advertisements
While you are developing your app, iAd App Network sends test advertisements to your app. **To assist you in validating your implementation, the iAd App Network occasionally returns errors to test your error handling code.** You can also test your error handling support manually by turning your device’s wireless capability off.

## iADのテストバナーとは何か
これです。
![iAdBunner.png](https://qiita-image-store.s3.amazonaws.com/0/45742/92a62427-28f5-48f7-b0ae-38a6cbc52df2.png "iAdBunner.png")
Raspbian に Docker Compose をインストールする

# 概要
Raspbian に Hypriot の Docker パッケージをインストールすると Docker Compose が付いてこない．そこで，ARM 用 Docker Compose を自分でコンパイルする．

# インストール
Docker composeのソースは [GitHub](https://github.com/docker/compose) にある．ただし，そのままでは動かないため Hypriot の[パッチ](https://github.com/hypriot/arm-compose) を当ててからコンパイルする．

コンパイル方法は次の通り．

まずパッチが入っているリポジトリを clone する．

```shell-session
$ git clone https://github.com/hypriot/arm-compose.git
$ cd arm-compose
````

パッチが対応している Docker Compose のバージョンが `VERSION` に書かれているので，それを元に，Docker Compose のソースをダウンロードする．

```shell-session
$ git clone -b `cat VERSION` https://github.com/docker/compose
```

そしてパッチを当てる．

```shell-session
$ cp -r patches/* compose/
```

最後に，コンパイルする．

```shell-session
$ cd compose
$ script/build-linux
```

コンパイルが終われば，docker-compose のイメージと dist 以下に実行ファイルができる．
dist 以下にある実行ファイルを `docker-compose` のファイル名で `/usr/local/bin` などに置けば良い．

# 自動化
以上の手順をまとめたスクリプトを[用意](http://bit.ly/1hJSPJ0) した．使い方は次の通り．

```shell-session
$ curl http://bit.ly/1G9ZN5T | sh

```
複数台PCでROSする用の設定用bash

タイトル的なものを作ってみました．
ROSで複数台のPCを使ってやり取りするためには```ROS_IP```と```ROS_MASTER_URI```をexportする必要があるのですが，
このやり方だといちいちターミナルごとにやらないといけないので，めっちゃめんどくさいです．
hostnameを設定してしまう方法もあるのですが，これはこれで設定変えるのがめんどくさいので，
```ROS_IP```と```ROS_MASTER_URI```をexportするbashを生成して，それを.bashrcが呼ぶようにしました．

[ここ](https://gist.github.com/mu-777/fe918af97bb87b5d3500)から使ってみてください:)


## 使い方

複数PCでROSを回すときは

```
$ ./ros_ip_setup [このPCのIP] [roscoreが回るPCのIP]
$ source ~/.bashrc
```
とすると，設定できる．

元に戻すときは，

```
$ ./ros_ip_setup -0
$ source ~/.bashrc
```
でPC1台でROSを回す環境に戻せる．

\# roscoreを回すPCでは，```$ ./ros_setup [このPCのIP] [このPCのIP]```と二度手間だったり，
\# そもそも自分のIPぐらい自動で取ってこれると思うけれど，今は保留ということでおなしゃす...

---

もしtf使うのであれば，時刻同期が必要です．
一応公式ページでは，chronyが推されますが，
そちらの設定bashも[ここ](https://gist.github.com/mu-777/10b0773bafc9d20b9e2e)にありますので，もしよければ使ってみてください:)

こちらは，chronyをapt-getでインストールして，

```
$ ./chrony_setup [NTPサーバマシンのIP]
```
とすると設定でき，
元に戻すときは

```
$ ./chrony_setup -0
```
でいけます．


## 注意
持ってきたスクリプトを実行可能にするのを忘れないで下さい．
```$ chmod +x ros_ip_setup```か，右クリック→プロパティ→アクセス権からプログラムとして実行可能にチェックでできますね．

あと，chrony_setupを使うときにそれぞれのPCのシステムの時刻（右上のインジケータに出ている時刻）がズレてるとうまくいきませんでした．
（当たり前なのかな？その辺詳しくないのでよくわかりませんが...）
とりあえず自分の環境では，全てのPCで手動設定にしていると大丈夫でした．

## 参考
[ROS/Tutorials/MultipleMachines](http://wiki.ros.org/ROS/Tutorials/MultipleMachines)
[ROS/NetworkSetup](http://wiki.ros.org/ROS/NetworkSetup)
ROSでOculus DK2を使う


公式をたどれば問題ないのですが．

## ros_ovr_sdkの導入

```
$ cd ~/catkin_ws/src
$ git clone https://github.com/OSUrobotics/ros_ovr_sdk.git
$ cd ..
$ catkin_make
$ sudo cp src/ros_ovr_sdk/sdk/ovr_sdk_linux_0.5.0.1/LibOVR/Projects/Linux/90-oculus.rules /etc/udev/rules.d
```

導入後，

```
$ roscore
```
して，別ターミナルで,

```
$ rosrun ros_ovr_sdk ovrd
```
して，別ターミナルで

```
$ rosrun ros_ovr_sdk OculusWorldDemo
```
すると，おなじみのデモができる．

\# 今知ったのですが，コレW/A/S/Dキーで動いたり，I/Kキーで視野角変えられたりするんですね...知らなかった...

## oculus_rviz_pluginsの導入

```
$ cd ~/catkin_ws/src
$ git clone https://github.com/OSUrobotics/oculus_rviz_plugins.git
$ cd ..
$ catkin_make
```

一応僕のフォークして編集したものは，位置姿勢を微調整できるようになっているので，よければ[こちら](https://github.com/mu-777/oculus_rviz_plugins)をクローン/フォークしてみてください:)


## 参考
https://github.com/OSUrobotics/ros_ovr_sdk
https://github.com/OSUrobotics/ros_ovr_sdk/wiki/Setup%20Instructions
https://github.com/OSUrobotics/oculus_rviz_plugins
内包表記の中でprintしたい

###内包表記の確認
for文内を確認したい時に、内包表記で書いてると少しめんどくさい。
そもそも、内包表記の中ではprintは書けない。
###
```terminal.
$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> num_list = [1,2,3,4,5]
>>> [print(i) for i in num_list]
  File "<stdin>", line 1
    [print(i) for i in num_list]
         ^
SyntaxError: invalid syntax
```
こんな感じでエラーが出てしまいます。
printはそもそも関数ではないため、内包表記ないでは書けません。
なので、
###
```terminal.
>>> def puts(i):
...     print i
...     return i
... 
>>> [puts(i) for i in num_list]
1
2
3
4
5
[1, 2, 3, 4, 5]
```
こんな感じに関数を作ってあげれば、printも出来るしリストの生成もできるようになります。

###python3
####python3ではprintは関数となっている。
python2系から3系では幾つかの変更があります。
その一つが、printが関数となっていることです。
###
```python3.
$ python3
Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World!")
Hello World!
>>> print "Hello World!"
  File "<stdin>", line 1
    print "Hello World!"
                       ^
SyntaxError: Missing parentheses in call to 'print'
>>> num_list = [1,2,3,4,5]
>>> [print(i) for i in num_list]
1
2
3
4
5
[None, None, None, None, None]
```
上記を見てみると、printは関数なので()で囲ってあげないとエラーが出ます。
また、内包表記の中で書いてもエラーが出なくなります。

###参考
下記のURLにて、2と3の違いが分かりやすくまとめて載っていますので興味がある方はどうぞ。
http://postd.cc/the-key-differences-between-python-2-7-x-and-python-3-x-with-examples/
Fertile Forest Model (2/n) RDB に於けるツリー構造データ [2]

# ツリー構造データモデルで追加されるカラム

従来のデータベースエンジニア達は、RDB に於けるツリー構造データの問題を解決するために「隣接リストモデル」「経路列挙モデル」「入れ子集合モデル」「閉包テーブルモデル」の４種類のモデルを研究してきました。

各モデルで共通なのは、ツリー構造データを保存するための幾つかのカラムを RDB テーブルに追加する点です。追加されるカラムは、その役割から次の２種に分類されます。

<dl>
<dt>階層構造カラム</dt><dd>階層構造を RDB テーブルへ格納するために必要なカラム</dd>
<dt>検索効率カラム</dt><dd>検索効率を上げるために追加するカラム</dd>
</dl>

「階層構造カラム」は階層構造を再生するために必要な基礎部分で、検索クエリで検索条件を指定するためのカラムとしても使われます。

「検索効率カラム」は、部分木などの効率的な検索クエリを「階層構造カラム」だけで記述できない場合に追加されます。ツリー構造データを RDB に保存するだけが目的の場合には不要なカラムです。モデルによっては、「検索効率カラム」を使わないケースもあります。

# 優れたモデルの基準

ツリー構造データを扱うモデルの優劣は、次の２つの判定基準で決まります。

1. 検索クエリの実行速度が実用に耐えられる範囲である事
2. ツリー構造データのために追加される「延べカラム数」が少ない事

## 1. 検索クエリの実行速度

Web ページをめくって次のページが表示されるまで２分かかる Web サイトがあったとして、それを「実用に耐えられる速度」と考える人はいないと思います。現在の日本のインターネット環境では、５秒でも遅いと見做されるでしょう。データベースは Web ページの動的表示で使われる用途が多いので、人が遅さを感じるかどうかは Web ページをめくった時の待ち時間を基準として考えます。

検索クエリが index を参照できる場合は、レコード数が数億であったとしても実用に耐えられるだけの実行速度が出ます。反対に index が参照できないクエリでは、数十万のレコード数から検索する場合でも、条件によっては十分な実行速度は得られなくなります。ひとつ目の判定基準は、「index が参照できる検索クエリが書けるかどうか」と同義であると言えます。

ツリー構造データを RDB で扱う場合、「あるノードの部分木や子ノードを取得する検索クエリ」が最も多く利用されます。従って、「ツリー構造データモデルで実用的な検索クエリが書ける」というのは、次のように換言できます。

> 任意のノードの部分木や子ノードを取得する検索クエリを、
index を参照するように記述できる事

## 2.「延べカラム数」の少なさ

延べカラム数というのは、階層構造を保存するためのテーブルに保存するレコード数を考慮した表現です。テーブルにカラムが n 個しかなくても、ひとつのノードにつきレコードを m 個登録しなければならないなら、延べカラム数は「n * m 個」になります。ほとんどのモデルではレコード数 m = 1 になるので、一部のモデルを除いて「述べカラム数＝階層構造カラム数」と見做せます。

この延べカラム数が少ないほど、エコノミーで優れたモデルデザインであると言えます。データ量がすくなけばDBサーバーの容量も少なくて済みますし、検索速度への影響も軽減されるからです。

# ツリー構造データモデルのまとめ

このページで紹介した内容は、以降の解説を理解する上で重要なポイントを含んでいます。以下の 3点を抑えてから、次節以降へお進み下さい。

1. ツリー構造データ用に RDB テーブルに追加されるカラムは、「階層構造カラム」と「検索効率カラム」の２種類がある
2. 部分木などの検索クエリを記述する際、index の参照が可能かどうかがモデルの優劣を決定する
3. 階層構造カラムや検索効率カラムの延べ数は、より少ないモデルが優る


# リンク

- [ツリー構造データをRDBで扱うための第五のモデル](http://qiita.com/StewEucen/items/e0487c39285a9d6b7863)
- [RDB に於けるツリー構造データ (1)](http://qiita.com/StewEucen/items/18a1703353c735258a8a)
- RDB に於けるツリー構造データ (2)
- [モデルデザイン](http://qiita.com/StewEucen/items/b4840343c22cea11ec26)
- [ノード検索＜祖先ノード系＞](http://qiita.com/StewEucen/items/632bddd683d77d1cf176)
- [ノード検索＜子孫ノード系＞](http://qiita.com/StewEucen/items/44901b69e2a061e0bc0a)
- [ノード検索＜親戚ノード系＞](http://qiita.com/StewEucen/items/22ba49ab8e591c663c84)
- [ノード追加](http://qiita.com/StewEucen/items/796c6d017dcf32bdb429)
- [ノード移動](http://qiita.com/StewEucen/items/bfb2f84d66929c0c4747)
GNU parallel で複数台のサーバ群から、手動でまとめてログ収集を並列処理する


昨今は Logstash や fluentd で、ログサーバへ収集するのが流行りですが、
そんな流行りに逆行して、手動(scp と gnu parallel)でサーバ群からログをダウンロードするための手順です。

## 必要なコマンド

[GNU parallel](https://www.gnu.org/software/parallel/man.html)
scp
sshpass(初回接続のみ)
ssh-copy-id(初回接続のみ)

GNU parallel は、[チュートリアル](https://www.gnu.org/software/parallel/parallel_tutorial.html)が大変参考になりますので、一度は目を通しておきましょう。

## OSX に sshpass をインストール

```
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
```

## サーバ名一覧のテキストファイルを準備

```
echo -e "example01\nexample02\nexample03" > hosts.txt
```

こんな感じのファイルを用意

```hosts.txt
example01
example02
example03
```

## サーバへ公開鍵認証での接続設定

各サーバへの接続をパスワード入力したくないので、公開鍵認証にする。
初回は sshpass で通常のパスワード入力でログインして ssh-copy-id で、
各サーバへ公開鍵をコピーする
```
pararell --will-cite sshpass -p パスワード ssh-copy-id < hosts.txt
```

## ログのダウンロードを実行する

重要なのが `sudo su -` などしなくても、ログファイルへのアクセス読み込み権限があることですが、sudo が必要な場合は、下記のように事前に `ssh -t` と `sudo -S` でパスワードを直接コマンドにして、アクセス権限を外しておく

`ssh -t user@example.com 'echo パスワード | sudo -S chmod o+r /var/log/httpd/access.log'`


`{}` で hosts.txt の内容を展開してくれます。

```
parallel --will-cite mkdir -p logs/{} < hosts.txt
parallel --will-cite scp {}:/var/log/httpd/access.log logs/{}/ < hosts.txt
```

あとは `grep -i 検索文字列 logs/*/access.log` とかで使用します。

#### 圧縮されたログなら

`find ./ -name *.gz -exec gzip -d {} \;` で、解凍できる

## ssh 経由でログから grep コマンドを実行する

ログを手元に落とすのも手間がかかるので、ssh で直接 grep する場合は、下記のようにできる

```
parallel --will-cite "ssh {} 'grep -e hogehoge /var/log/httpd/access.log'" < hosts.txt
```
Google のバグ予想アルゴリズムで Github のレポジトリを解析する拡張機能を作った

Google が発表したバグ予想アルゴリズム([参考](http://google-engtools.blogspot.jp/2011/12/bug-prediction-at-google.html)) の存在を [グーグルのバグ予測アルゴリズムを実装したツール「bugspots」について](http://qiita.com/okappy/items/e5fc62f9026e0d73c3e9) という記事を読んで知りました。

ざっくりと、バグ修正のためのコミットで最近何度も修正されたファイルにはバグがある可能性は高い、っていう感じのスコアを出してくれます。[bugspots](https://github.com/igrigorik/bugspots) という名前で実装されていたりします。

Google ではコードの品質保持の一つの方法としてこういった指標も利用しいているとのこと。

若干話しがズレますと、コード品質の向上にはコードレビューや、ユニットテスト、それを自動化させたCI環境などに加え、実際にコードを動作させずに、コードをテキストとして解析する静的解析など、方法としてはいろいろあるらしく、今回のような Git のログに関してはコードチャーン (Code Churn) なんて呼ばれていて、意外と静的解析などに比べてバグの発見に効果的だったりするみたいです。

そんなわけで、今回のバグ予想アルゴリズム、この機能おもしろい！Github にほしい！と思っていたところ、GitBucket (Githubではないですが)のプラグインに実装された方がいらっしゃる( [Googleのバグ予測アルゴリズムをGitBucket Pluginに実装してみた](http://qiita.com/yoshiyoshifujii/items/a5504945d1373b657b17)) のをみて、自分も Chrome の拡張機能として作ってみようと思い、いろいろ間違いながらも、先日 Chrome の [Web ストアに公開](https://chrome.google.com/webstore/detail/github-bugspots/amofcopnjjbnolfbbgdpmnefinfdfbff?utm_source=chrome-ntp-icon)できました。

![bugspots-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/31970/c62c1853-f16d-1970-c357-08864f38659b.gif)


[ソースコードも公開](https://github.com/travelist/github-bugspots) (スターがついたりすると結構うれしかったり...) しているので、何かありましたら Issue で報告していただければ、可能な範囲で対応していこうと思います。
うりゃーって感じで勢いで作ってしまったので、リファクタリングの必要性やそもそもテストなかったり、**コミット全部見ているフリして実は一番新しい100件しか読んでなかったり Σ**、バグ予想する前にそもそもバグが出てきそうなコードなわけですが、需要がありそうでしたら今後修正することがあるかもしれません。

最後になりますが、こんな感じで世の中の開発が面白く快適なものになるといいなーと思っています。最後まで読んでいただきありがとうございました。

###参考
- [グーグルのバグ予測アルゴリズムを実装したツール「bugspots」について](http://qiita.com/okappy/items/e5fc62f9026e0d73c3e9)
- [Googleのバグ予測アルゴリズムをGitBucket Pluginに実装してみた](http://qiita.com/yoshiyoshifujii/items/a5504945d1373b657b17)
- [あきらめるにはまだ早い！ソースコードの品質向上に効果的なアプローチ](http://qiita.com/hirokidaichi/items/5a5cb63ef5499143bc40#%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%81%AE%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9%E3%82%92%E6%B8%AC%E5%AE%9A%E3%81%97%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E3%81%AB%E7%B5%84%E3%81%BF%E8%BE%BC%E3%82%82%E3%81%86)
Lightning Event は3度死ぬ

# Lightning Event とは

Lightning Event とは、Lightning Component において、コンポーネント間でイベント処理を実行するための仕組みです。Lightning Event では、イベントを定義する、イベントを発火するコンポーネントに定義を記述する、イベントを受け取り処理するコンポーネントに定義を記述する、の3ステップが必要となります。

# First Impact
## 問題点
それは、Lightning Component をまともにコンポーネント分割してコンポーネント間のイベント処理を Lightning Event で行おうとしたときに訪れます。
Lightning Event も Lightning Component などと同様にバンドルという単位で扱います。このバンドルにイベントの定義だけを記述します。問題はこのバンドルがすべて1階層内で管理されるため、まともにコンポーネントを分割し、イベント処理を書いていくとものすごい数のバンドルが作成されることになり、管理不能になっていきます。

## 対応策
対応策としては、下記の2つが考えられます。
- まとめにコンポーネントを分割しない
- Lightning Component はあくまでも外側とのI/Fの定義に徹して、内部は別ライブラリ(React.jsなど)を利用する

前者はコンポーネント志向を捨てることになるので、後者のほうが優れたやり方ではあります。ただし、モダンJavaScriptのスキルが必要となるので、JavaScriptが得意ではないエンジニアがいきなり採用するには少しハードルがあります。トレンドは、モダンJavaScriptを利用して開発する流れとなっているので、頑張って覚えていってもよいかもしれません。

# Second Impact
## 問題点
それは、別のパッケージにある Lightning Component を Lightning Event で連携しようとしたときに訪れます。
Lightning Event は型付け言語に相応しく、ソースコード中にある場合は定義を参照してバリデーションしており、定義が見つからない場合はソースコードをSalesforce組織にデプロイすることができません。

そのため、他のパッケージ中にあるコンポーネントを参照すると、自動的に基本パッケージと拡張パッケージというような主従の関係となってしまいます。これは、 Lightning Event でも同様に機能しますので、他のパッケージの Lightning Event を呼び出すパッケージを作ろうとすると、呼び出し元のパッケージに依存するようになってしまい、単独ではインストールすることができなくなってしまいます。

## 対応策
対応策としては、Lightning Event を利用する場合は、直接的なイベントのワイヤリングを諦めるしかありません。それぞれのパッケージでは別々に Lightning Event を発火・受け付ける処理を作成し、2つのパッケージのコンポーネント間のイベントを受け渡すワイヤリング用のコンポーネントを作成することでやりたいことができるようになります。

自動的にイベントをワイヤリングできなくなってしまうところですが、このワイヤリングコンポーネントを2つのパッケージの拡張パッケージとして作成してやることで、コーディングする必要はなくなります。
2つのパッケージにある Lightning Component を Lightning App Builder で配置し、合わせてワイヤリングコンポーネントを配置してやることでイベントの受け渡しを実現できます。

# Third Impact
もうすぐ ltng:sendMessage イベントが実装されるようです。
このイベントを利用すると、新しいイベントを定義せずに ltng:sendMessage イベントでメッセージ(JSON形式)をチャンネルを指定してイベント発火し、<aura:handler> で受け取りハンドルして対応する処理を記述できるようになるようです。これによって、ひとつ目、ふたつ目の問題点を回避できそうです。

ところが…

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">今Skipが居たのでフラっとltng:sendMessageをコンポーネント間のIFに使うのはアリかと聞いたら、結論からするとあんまりいいアーキテクチャじゃ無いよ、それ用に作って無いし、だそうです。(元々ltng:sendMessageはAppBuilderが使う事を想定)</p>&mdash; Mitsuhiro Okamoto (@mitsuhiro) <a href="https://twitter.com/mitsuhiro/status/646048959803232256">2015, 9月 21</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">んで、Lightning Eventをパッケージングした時の依存性問題に関しては、例えばイベントを別のイベントへ流す様なマッピングツールを提供するなど、今解決策を検討してるそうな。なのでProductionでComponent間連携やるのはもうちょい待った方が良さげ。</p>&mdash; Mitsuhiro Okamoto (@mitsuhiro) <a href="https://twitter.com/mitsuhiro/status/646049713683169281">2015, 9月 21</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

おぅ…。
希望の光と思われた ltng:sendMessage も解ではないと…。
問題として認識されて、解決に向けて対応中とのことなので、もう少し様子を見ましょう…。