OmniAICreator/Qiita-1.07M huggingface dataset:
processingで障害物を回避する

![20170509.jpg](https://qiita-image-store.s3.amazonaws.com/0/75611/a22f3307-f25b-f6af-a100-5352afd640d6.jpeg)

シフマンさんの自律エージェントを応用してグレーの円を回避するパーティクル群を作ってみました。
各パーティクルは右方向に移動するベクトルを持っていますが、円の付近に近づくと円の中心に対して
反対方向のベクトルが作用するように設定しています。しかし、円から離れたらまた右方向の流れに
戻したいので、PVector（自分のx + 100, 元いたy）にシフトするようにしています。

~~~java
ArrayList<Agent> agents;

void setup () {

	size (800, 600, P2D);

	agents = new ArrayList<Agent> ();

	for (int i = 0; i < 1000; i++) {
		agents.add (new Agent (random (width), random (height), random (2, 4)));
	}

}

void draw () {

	background (255);

	for (Agent a : agents) {
		a.separate (agents);
		a.update ();
		a.border ();
		a.render ();
	}

	if (agents.size () > 1200) {
		agents.remove (0);
	}

	fill (200);
	stroke (127);
	ellipseMode (CENTER);
	ellipse (mouseX, mouseY, 100 * 2, 100 * 2);

}

void mouseDragged () {

	agents.add (new Agent (mouseX, mouseY, random (2, 4)));

}

class Agent {

	PVector location;
	PVector velocity;
	PVector acceleration;

	PVector circle;
	PVector diff;

	float r;
	float maxforce;
	float maxspeed;
	float base_y;

	Agent (float x, float y, float ms) {

		location = new PVector (x, y);
		velocity = new PVector (ms, 0);
		acceleration = new PVector (0, 0);

		diff = new PVector ();

		r = 100.0;
		maxforce = 0.2;
		maxspeed = ms;
		base_y = y;

	}

	void update () {

		velocity.add (acceleration);
		velocity.limit (maxspeed);
		location.add (velocity);
		acceleration.mult (0);

	}

	void render () {

		fill (127);
		stroke (0);
		strokeWeight (1);
		pushMatrix ();
		translate (location.x, location.y);
		ellipse (0, 0, 4, 4);
		popMatrix ();

	}

	void applyForce (PVector force) {

		acceleration.add (force);

	}

	void separate (ArrayList<Agent> agents) {

		float desired_separation = r * 1.4;

		circle = new PVector (mouseX, mouseY);

		for (Agent a : agents) {
			float d = PVector.dist (location, circle);
			if ((d > 0) && (d < desired_separation)) {
				PVector diff01 = PVector.sub (location, circle);
				PVector diff02 = new PVector (maxspeed * abs (circle.y - location.y) * 0.8, 0);
				diff = PVector.add (diff01, diff02);
				diff.normalize ();
				diff.div (d);
			} else {
				diff = PVector.sub (new PVector (velocity.x + 100, base_y - location.y), velocity);
				diff.normalize ();
			}
		}

		diff.setMag (maxspeed);
		PVector steer = PVector.sub (diff, velocity);
		steer.limit (maxforce);
		applyForce (steer);

	}

	void border () {

		if (location.x < -r) location.x = width + r;
		if (location.y < -r) location.y = height + r;
		if (location.x > width + r) location.x = -r;
		if (location.y > height + r) location.y = -r;

	}

}
~~~
AWS EC2 オートスケール実践編

# 概要
①　CPUの使用率の閾値(例：60%)を超えると新しいインスタンスを立ち上げる
②　AWS EC2を利用

# アラームの作成
AWS CloudWatchの画面からアラームを作ります
![17.png](https://qiita-image-store.s3.amazonaws.com/0/40127/3ba171f1-5ddf-7b25-1748-7996f69d56f1.png)


CPU使用率(CPUUtilization)をメトリクスとし、インスタンス生成の判断基準とします。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/40127/bb6e3699-ee41-7476-eeab-0e3f9215c40c.png)
![14.png](https://qiita-image-store.s3.amazonaws.com/0/40127/04a45e6d-0cca-e6ab-60b8-bd2643a5c266.png)

アクションは何かを追加してもOKだが、後でサーバー追加・サーバー削除する際に通知をするのでここでは空にした。

＞＞アラームの準備が出来たので、アラームを検知すると起動するインスタンスを準備する。

# スケールさせるイメージを作る前の準備

オートスケールで起動したインスタンスのコードは古いままになってしまうため、起動時にgitリポジトリから最新のコードを取得するようにする。

### Gitから最新のコードを取得するスクリプト

```shell-session:self-deploy.sh
cd {git-repository}
git pull origin master
```

### 起動時にスクリプトを実行させるようにcronを設定

```shell-session:crontab-l
@reboot /home/ubuntu/self-deploy.sh
```

# スケールさせるイメージの作成
![20.png](https://qiita-image-store.s3.amazonaws.com/0/40127/991b8df9-0b52-789f-44ae-f01181389553.png)

# 起動設定(テンプレート)の作成
EC2画面の左サイドメニューの下の方に「AUTO SCALING」がある。
そこからAuto Scaling グループを作成する
![19.png](https://qiita-image-store.s3.amazonaws.com/0/40127/9e7bbb9f-7499-b340-ab75-ded43c9f9492.png)
![18.png](https://qiita-image-store.s3.amazonaws.com/0/40127/178ee9f9-2d51-58ec-b264-3d1edd8ec217.png)
![13.png](https://qiita-image-store.s3.amazonaws.com/0/40127/0c0460d8-3dec-aebd-bee7-c926a513bcdf.png)

先ほど作成したイメージを選択する
![12.png](https://qiita-image-store.s3.amazonaws.com/0/40127/0dee8525-7048-5808-75fa-dc5b2e503bf8.png)

※イメージタイプは自分の好きなものにしてください
![10.png](https://qiita-image-store.s3.amazonaws.com/0/40127/ea4b2de9-3219-58ef-7527-cccdea22fe42.png)

※セキュリティグループは既存のもの
![8.png](https://qiita-image-store.s3.amazonaws.com/0/40127/90bef0be-2583-e8ae-5975-c063c83aa726.png)

これでテンプレート（起動設定）が完了。
そのまま続けます。

# Auto Scaling グループの作成
![7.png](https://qiita-image-store.s3.amazonaws.com/0/40127/fa94ca14-6aa1-caaf-97cb-f99a41c59dd8.png)

※ スケールさせるサーバー台数は最大３台
![6.png](https://qiita-image-store.s3.amazonaws.com/0/40127/af9b9979-d1c1-7a81-d7e4-37ec87599688.png)

※ 新しく建てたインスタンスのCPU使用率が20%を切ったらインスタンス削除する設定を入れておく
![5.png](https://qiita-image-store.s3.amazonaws.com/0/40127/87e6e160-48a6-5ed3-eef4-afe8ba5b9483.png)

※ インスタンスの起動・終了時に通知を行うようにしてもらう。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/40127/6eff6d3c-9c4f-62f8-4ad2-852566d9d9a7.png)

※　タグ「Name」を設定しておくと、一覧で見るときに便利
![3.png](https://qiita-image-store.s3.amazonaws.com/0/40127/48141da0-0443-1ae2-0cad-2627dd24356f.png)

# [動作確認] CPU使用率により新しくインスタンスが立ち上がる
![2.png](https://qiita-image-store.s3.amazonaws.com/0/40127/1741b9a4-f61b-78c4-8326-61d2ecf50efa.png)

LB にも自動的に接続している
![1.png](https://qiita-image-store.s3.amazonaws.com/0/40127/d7cf57e2-f776-7498-3a59-9381d39b15c2.png)

初めてオートスケール行いました。
これで急激なアクセス集中が来ても手動スケールアウトから解放される・・・かも・・・？
[Vagrant] VirtualBox作成時にストレージを追加


# はじめに

Vagrantfile内でのディスク追加の記述に苦労したのでメモ。

以下の環境で実行しました

* Vagrant 1.9.3
* VirtualBox 5.1.20
* ゲストはubuntu/xenial64 
* ホストはWindows7


# ディスク追加

Vagrantfile内で以下の記述を行います。
ストレージのサイズは今回は200GBです。

```rb:Vagrantfile
Vagrant.configure(2) do |config|

  # 省略

  config.vm.provider "virtualbox" do |vb|
    disk_file = "./tmp/disk.vdi"
    unless File.exists?(disk_file)
      vb.customize ['createhd', '--filename', disk_file, '--format', 'VDI', '--size', 200 * 1024]
    end
    vb.customize ['storageattach', :id, '--storagectl', 'SCSI', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', disk_file]
  end
end
```

`--storagectl`は`'SATA'`や`'SATA Controller'`といった記述をよく見ますが、上記構成では`'SCSI'`でした。
調べる方法は以下を参照
http://qiita.com/kjtanaka/items/8f3e92e029e46f826754#%E8%A3%9C%E8%B6%B3

また、`--port`は`1`を指定しているのをよく見かけますが、上記構成では/dev/sdbはすでに使用されており、`1`を指定してしまうと、タイムアウトしてしまう（ことのきエラー情報等の出力はないため結構はまります）ため`2`を指定しています。デバイスファイルは/dev/sdcが使用されます。

その他、`customize`のコマンドとオプションに関しては以下を参照して下さい。
https://www.virtualbox.org/manual/ch08.html

# マウント

Vagrantfile内で以下のようにシェルを実行してマウント処理を行います

```rb:Vagrantfile
config.vm.provision "shell", path: "mount.sh"
```

GNU partedを用いてフォーマットを行い、マウントを実行します。
マウントポイントは今回は/optとしました。

```bash:mount.sh
#!/bin/bash -eux

apt-get -y install parted

parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart primary ext4 0% 100%
mkfs.ext4 /dev/sdc1
mkdir -p /opt
mount /dev/sdc1 /opt
echo '/dev/sdc1 /opt ext4 defaults 0 0' >> /etc/fstab
```
radon実行しようとしたらUnicodeEncodeError

##環境情報
python 3.5.1
OS version 4.4.41-36.55.amzn1.x86_64 （Amazon Linux AMI release 2016.09）

##状況
radon使って複雑度計測しようと思って意気揚々とpip installしたまではいいが、radonコマンドで実行するとUnicodeのエラーが出力される。
Unicode系のエラー出ると、でたよーって思うよね。

```
ERROR: 'ascii' codec can't decode byte 0xe5 in position 47: ordinal not in range(128)
```

エラーになったプログラムは単体実行できるし、そもそも日本語はコメントアウト部のみ。

pypiを確認すると、環境変数設定しろって書いてある。
https://pypi.python.org/pypi/radon

>Note about file encoding
>
On some systems, such as Windows, the default encoding is not UTF-8. If you are using Unicode characters in your Python file and want to analyze it with Radon, you’ll have to set the RADONFILESENCODING environment variable to UTF-8.

Windowsではないけど、試しに設定する。

##環境変数設定

環境変数「RADONFILESENCODING」自体が存在していないことを確認。

```
export -p
```

環境変数「RADONFILESENCODING」を追加。

```
declare -x RADONFILESENCODING="UTF-8"
```

##再確認
改めてradonコマンドを実行

```
manage.py
    F 36:0 main - A (2)
```

通ったー。
windowsって書いてあったからスルーしてたわー。
[ZF3] Zend Framework 3 コントローラを追加する


以下に例を記載します。

```
Application/
	src/
		Controller/
			IndexController.php
			TestController.php // 今回追加するコントローラ
```

routes にコントローラ設定を追加する。

```:Application/config/module.config.php
'test' => [
    'type'    => Segment::class,
    'options' => [
        'route'    => '/test[/:action]',
        'defaults' => [
            'controller' => Controller\TestController::class,
            'action'     => 'index',
        ],
    ],
],
```

補足

ページ別、機能が大きい場合などはモジュールを追加して分けたりする方がスマートに開発できる。

[14.2. How to Create a New Module?](https://olegkrivtsov.github.io/using-zend-framework-3-book/html/en/Creating_a_New_Module/How_to_Create_a_New_Module_.html)
[ZF3] AjaxリクエストをZend Framework 3でレスポンスする


1. module.config.phpを設定する
2. JsonModelを使用して返却する

# module.config.phpを設定する

```
'view_manager' =>
	'strategies' => 'ViewJsonStrategy' // この部分
```

JSONペイロードをレスポンスできるように設定に追加します。
この設定がないと下記の処理でJSONがレスポンスされません。

# JsonModelを使用して返却する

```:IndexController.php

use Zend\View\Model\JsonModel; // namespace

public function indexAction()
{
	return new ViewModel();
}

public function ajaxAction()
{
	// $data = $this->getRequest->getQuery(); // GET
	// $data = $this->getRequest->getPost(); // POST
	$data = array(
		'message' => 'Hello World!!',
	);
	return new JsonModel($data);
	// namespaceを使用しない場合は
	// return new \Zend\View\Model\JsonModel($data)
}
```

[URL Path] /application/ajax

- /{controller}/{action}
- IndexControllerはapplicationとしてコントローラ設定されています

## 備考

ログ出力

```
private function __log ()
{
    $stream = @fopen('/var/www/html/zend/data/logs/debug_log.txt', 'a', false);
    if (!$stream) {
        throw new Exception("Can't open stream.");
    }
//        $stream = 'php://output';
	// 適宜 namespace を使用
    $writer = new \Zend\Log\Writer\Stream($stream);
    $logger = new \Zend\Log\Logger();
    $logger->addWriter($writer);
    
    $param = $this->getRequest()->getPost();
    
    $logger->debug(var_export($param, true));
}
```

Ajax sample
[[jQuery] AjaxでPHPにPOST送信する](https://spelunker2.wordpress.com/2014/10/02/jquery-ajax%E3%81%A7php%E3%81%ABpost%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B/)
[RubyMine]No Rails found in SDK というエラーが出た

# 背景
RailsプロジェクトをRubymineで開き、実行しようとしました。そうすると「No Rails found in SDK」というエラーが出てきてしまいました。

# 対処法
まず、 **Run > Edit Configurations** を開きます。
![スクリーンショット 2017-05-09 16.05.11.png](https://qiita-image-store.s3.amazonaws.com/0/68960/3bb071bb-dbad-3467-f7bf-3644b567a7d0.png)

そして右側の欄から、 **Rails > Development** を選択します(Productionを設定したい場合はそっち)。
そうすると、下の方に **「Run Configuration Error:[No Rails found in SDK]」** というエラーが表示されていると思います。
<img width="592" alt="スクリーンショット 2017-05-09 16.09.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/68960/a3dc87c3-e103-81f7-f1ea-e2cf87482d4c.png">


そこで、 左側の欄の**Ruby SDK** という項目の **Use other SDK:** をONにしてください。
そして、 **[No SDK selected]** と表示されているところをクリックして、ruby一覧が表示されると思うので、どれかを選択しましょう。
![スクリーンショット 2017-05-09 16.11.41.png](https://qiita-image-store.s3.amazonaws.com/0/68960/e1166b72-b83b-9da3-d330-a790521e7a11.png)


私の場合はこれで、実行出来るようになりました！

# 最後に
前はこんなことしなくても実行できた気がするんですけど・・・。原因はまだ分かってないですが、とりあえずこれで解決できました。
[Python] インストールされているライブラリーを確認する

python３.xでpip3でインストールしたライブラリーは
## 命令語

```terminal:pip3
$> pip3 list
```

```terminal:pip3
$> pip3 freeze
```

##　結果
![Screen Shot 2017-05-09 at 4.09.33 PM.png](https://qiita-image-store.s3.amazonaws.com/0/137182/070cf1d7-4cf0-321a-f534-82f473a07f51.png)
機械学習③ 決定木 (Decision Tree)のまとめ  

# 決定木 (Decision Tree) のまとめ

## What is 決定木 (Decision Tree) ?

決定木は、データに対して、次々と条件を定義していき、その一つ一つの条件に沿って分類していく方法です。下記の図で言うとウインドサーフィンをするかしないかを判断しようとしています。そこで最初に、風の強さでカテゴリ分けした後に、晴れているかどうかでカテゴリ分けをしています。

この右のモデルを決定木と言います。決定木では、左の図にもある通り、線形での分類を複数回行うことで分類します。

![Screen Shot 2017-05-09 at 11.39.46.png](https://qiita-image-store.s3.amazonaws.com/0/161691/7d9f5fbd-5b0f-3a35-7c7e-40ef41a92f68.png)
Extracted by 'Introduction to Machine Learning', Udacity 

ちなみに決定木には、回帰と分類があるようですが、今回話すのは分類 (classifier) の方です。


## default のコード

```python:

DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, 
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, 
max_features=None, random_state=None, max_leaf_nodes=None, 
min_impurity_split=1e-07, class_weight=None, presort=False)


```

## 決定木 (Decision Tree) 内の Parameter の説明
中身がたくさん入っていますね。主要なものだけ下記で説明していきます。

- min_samples_split

min_samples_split = 2 とすると、その分岐先の値が２以上の場合は、まだ分岐を続けることになります。下記の図を見てみると、水色のマルで囲まれたところは、まだサンプルが２以上なので、分岐を続けます。しかし、サンプル数によっては、過学習になってしまう可能性が高いので、調整が必要です。
![Screen Shot 2017-05-09 at 12.35.35.png](https://qiita-image-store.s3.amazonaws.com/0/161691/1f2a0bb3-0c59-361e-63c5-dfd863208e2d.png)
Extracted from 'Introduction to Machine Learning', Udacity

- criterion 

データの分割の方法を'gini' か 'entropy' で指定します。

'gini': あるk個目の分類先の不純度（gini係数）が低い方がいい。 
'entropy':information gain を使い、一番効率的な条件を探る。
違いはあんまりないらしいけど、詳しく書かれているのは[ココ](http://blogs.teradata.com/international/ja/hhg14/)と[ココ](https://www.garysieling.com/blog/sklearn-gini-vs-entropy-criteria)


- max_depth

これで過学習を防ぐために、決定木の深さの最大値を決め、制限する。

## Decision Tree の可視化 (Iris set の場合)

```python:


from IPython.display import Image  
dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names=iris.feature_names, 
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)  
graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())  

```


![Screen Shot 2017-05-09 at 11.00.27.png](https://qiita-image-store.s3.amazonaws.com/0/161691/06059c37-5e3e-a45f-040b-84907673ec35.png)

The image and the code are extracted from '[Sklearn document](http://scikit-learn.org/stable/modules/tree.html)'


## 決定木の過学習を防ぐ方法

- min_samples_leaf でツリーの最後に行き着くところの最小値を指定する。
- max_depth でツリーの深さの制限をする。

## Decision Tree の 良い点悪い点。

- 良い点

他のアルゴリズムでは、データの正規化やダミー変数の作成などが必要なのに対して、Decision Tree では、カテゴリカルデータや数値データを扱えるの出前処理をほとんど必要としません。また、上記のように可視化できるので、非常に理解しやすいアルゴリズムであることがわかります。


- 悪い点

過学習されやすい。
縦横の直線で、データを分類するので、軸に平行な境界線でデータを区切れないときは、うまく分類できない。

## まとめ

以上が現在筆者のわかる範囲での Decision Tree の概要です。
日々更新していきますので、追加すべきところ、直すべきところありましたら、コメントいただけると幸いです。
mecab-ipadic-neologd on Raspberry Pi

# It will not install directly unless you removed some options (Memory issue). Easiest is to just add the option "--eliminate-redundant-entry

 ./bin/install-mecab-ipadic-neologd -n --eliminate-redundant-entry


# Make sure to edit mecabrc

sudo nano /etc/mecabrc

#Add this line

dicdir /usr/lib/mecab/dic/mecab-ipadic-neologd
<%= image_tag '画像ファイル名' %>で画像を表示

##Railsでの画像の表示

html.erbファイルでブラウザ上に画像を表示させる方法について、仮に犬の写真のファイル名がdog.jpgだったとすると、html上では以下のように書くことで表示できます。

```sample.html
<img src="dog.jpg" alt="［写真］">
```
ちなみにaltは画像が表示されなかった場合に「ここには画像があるよ〜」ってアイコンが出ますが、その中に表示される文字列になります。

ですが、Railsで画像を表示させようと思うとまた少し書き方が変わります。

```sample.html.erb
<%= image_tag 'dog.JPG'%>
```
・・・となります。
画像サイズの指定なども方法が異なり、idやclassなどを使用してCSSで別に指定しなくても、以下のようにすることで画像サイズを指定できます。

```sample.html.erb
<%= image_tag 'dog.JPG', :size =>'320x480'　%>
```
とすることで、横320px、縦480pxに大きさを編集した画像の表示ができます。
この時、320と480の間にあるのが*(アスタリスク)ではなく、x(小文字のエックス)であることに注意。
最初僕もミスってエラー出ました(笑)

画像サイズ意外にも、「, :コマンド =>''」でいろいろ指定できますので、興味があれば調べてみてください。
(そしてコメントか何かで僕にも教えてください・・・)
Rubyで素数を求めるプログラム（その1）

#はじめに
採用試験で素数判定のコードが書けなかったので、今後のために勉強として作成
~~「Prime使えばよくね」は禁止~~
#とりあえずのソースコード
http://qiita.com/ochim/items/13d1efdc570978f44feb
こちらのコードとほぼ同じになります
ロジックとしてはひたすら割って確かめるだけ

```prime.rb
require 'prime'
number = (1..100).to_a
prime = []
number.each do |i|
  next if i == 1 #1は飛ばす、余りが必ず0になるので
  if i == 2
    prime << i   #2は素数なので入れて、次にいかせる
    next
  end

  primejudge = true
  prime.each do |j| #primeでeachをかけるのが重要、処理していく間にprimeを増やしていく
    if i % j == 0   #一致したら処理を止めるようにする、例えばi = 4, j = 2なら余り0となるので終了、またi = 9の時はj = 3で止められる、という形でループさせる
      primejudge = false
      break
    end
  end
  if primejudge == true #この段階でtrueのままなら追加してOK
    prime << i
  end
end
p prime
p prime.length #素数の数

ansprime = Prime.each(100).to_a #Primeメソッドを使って作成、合ってるかの確認用
p ansprime
p ansprime.length
``
#実行結果
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
25
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
25
```

#今後について
素数の判定方法はいくつかあるので、それらを使っても実装できるようにしたい
Node-REDの使い方- IBM Analytics

　
1  Node-REDとは？
Node-REDは知識がない人でも気軽にBluemixの機能を搭載したアプリケーションを作成することができるプラットフォームです。

2  Node-REDアプリの作成
まず、Node-REDを起動させるために、Bluemix上の「カタログ」を選択し、「アプリ」の欄の「ボイラープレート」の中の「Node-RED Starter」をクリックします。

![node-redの使い方-01.png](https://qiita-image-store.s3.amazonaws.com/0/142282/dc8ca5f6-6bfe-2a9d-4a9e-dab45459b829.png)

「Cloud Foundry アプリの作成」のページが表示されるので、アプリ名を入力します。

![node-redの使い方-02.png](https://qiita-image-store.s3.amazonaws.com/0/142282/c9e66866-911a-3cd7-fee0-702b5c69ff18.png)


ページ下部に移動すると、「選択済みプラン」として、「SDK for Nodes.js」と「Cloudant NoSQL DB」の選択オプションがあります。
注釈：「SDK for Nodes.js」は、Node.js(サーバーサイドのプログラミング言語)を使うためのサーバーです。
「Cloudant NoSQL DB」は、Node-Redで集めたデータを格納するデータベースです。
ここでは、「SDK for Nodes.js」と「Cloudant NoSQL DB」のインスタンスを作成できます。プルダウンの選択オプションから、適切なものをクリックしてください。（ここでは、SDK for Node.jsには「デフォルト」、Cloudant NoSQLには、「Lite」を推奨しています）

![node-redの使い方-03.png](https://qiita-image-store.s3.amazonaws.com/0/142282/aadee69f-3f18-c8be-4316-0a20164c3bf8.png)

必要な項目を入力できたら、画面下の「作成」をクリックします。
![node-redの使い方-04.png](https://qiita-image-store.s3.amazonaws.com/0/142282/ab72f303-3f3f-d80b-505b-745cb2e3b982.png)


下の図が表示されたら、「アプリは実行中です」の文字と緑ランプがつくまでしばらく待ちます。
ランプが表示されてしばらく経ってから、画面上部右端の「アプリの表示」
をクリックします。

![node-redの使い方-05.png](https://qiita-image-store.s3.amazonaws.com/0/142282/4ba01bd2-d939-b969-9571-a4d65ba2d1eb.png)



これで、Bluemixのeditorのスタートページが表示されます。
画面上の赤い四角の「Go to your Node-RED flow editor」をクリックします。

![node-redの使い方-06.png](https://qiita-image-store.s3.amazonaws.com/0/142282/8a43d232-833c-03f6-d4a1-7c23789549e0.png)





3   Node-RED のフロー図の作成
フロー図を構築する画面が表示されます。
三本線マークの左横の枠の中の文字が「デプロイ」になっていることを確認した上で、画面右端上の四角の三本線マークをクリックしてください。

![node-redの使い方-07.png](https://qiita-image-store.s3.amazonaws.com/0/142282/f4812093-4558-13fb-b28c-4b121b4a91fe.png)


三本線マークをクリックすると、プルダウンが表示されます。プルダウン上の「読み込み」をクリックし、「クリップボード」に行きます。

![node-redの使い方-08.png](https://qiita-image-store.s3.amazonaws.com/0/142282/5704721a-1c48-a8b7-502e-c806d8d8c42d.png)


「フローの読み込み」が表示されます。ここに、作成したい処理フローのスクリプトを入力し、「読み込み」をクリックします。

![node-redの使い方-09.png](https://qiita-image-store.s3.amazonaws.com/0/142282/0f5bccdb-91d3-f095-a387-628d07b8c90f.png)



下記画面のようなフロー図が作成されます。
この画面の中で互いに繋がっている四角形のオブジェクトが、各機能を搭載したカプセル、つまり「Node」です。この「Node」同士が繋がって連携することにより、アプリケーションの処理の流れが作成されます。

![node-redの使い方-10.png](https://qiita-image-store.s3.amazonaws.com/0/142282/a3d27fe3-36c7-fea6-d1fe-13ba4f2d7377.png)




参考資料
[ハンズオン] Node-RED 入門編
http://qiita.com/joohounsong/items/5b5241df84f910df6627

Node-REDとは？- IBM
https://www.ibm.com/BluemixHandsOn_NodeRed_20160315.pdf
VSTO Error log


## set environment variable

```
VSTO_SUPPRESSDISPLAYALERTS=0
```

```
VSTO_LOGALERTS=1
```

```
VSTO_EVENTLOGDISABLED=0
```


##

cf. https://blogs.msdn.microsoft.com/brijs/2008/10/10/tips-and-tricks-for-troubleshooting-office-add-ins-part-1/
PHP環境構築の構築メモ


## 初めに

あると良いもの

- ターミナル(黒い画面)
- Git

Mac の方は アプリケーション一覧から「その他」→ 「ターミナル」を選択

Windows の方は Git for Windows がオススメです。

Git for Windows https://git-for-windows.github.io/


## PHP実行環境

### OSX

以下のサイトを参考にターミナル経由でのインストールが一番簡単です。

https://php-osx.liip.ch/

こちらから適宜必要なバージョンをインストールする。

````
$ curl -s https://php-osx.liip.ch/install.sh | bash -s 7.1
````

インストール後に`~/.profile` ファイルを作成して、以下の内容を書き込みます。

````
export PATH=/usr/local/php5/bin:$PATH
````

### Win

仮想環境などを使わないのであれば Mamppなど

https://www.apachefriends.org/jp/index.html

Vagrant仮想環境を使うのであれば、 Homestead が一番オススメ。

Vagrant  https://www.vagrantup.com/
Virtualbox  https://www.virtualbox.org/
Homestead  https://laravel.com/docs/5.4/homestead

## Composer

イマドキPHPを使用するなら Composer は必須です。

https://getcomposer.org/
Atom で .txt ファイルの個別設定をする

小一時間ハマって悲しい思いをしました。
例） テキストファイルだけ文末のスペース削除を off する

GOOD

```~/.atom/config.cson
"*":
  ...
  whitespace: {}
  ...
'.text':
  whitespace:
    removeTrailingWhitespace: false
```

BAD

```~/.atom/config.cson
"*":
  ...
  whitespace: {}
  ...
'.txt':
  whitespace:
    removeTrailingWhitespace: false
```

（自分用メモ）言語ごとの場合は、

```~/.atom/config.cson
'.source.python':
  whitespace:
    removeTrailingWhitespace: false
```
【Salesforce初心者】MacでSoapUIがtlsエラーを吐くときの対処法

Salesforceのセキュリティ許可により、SoapUIをデフォルト設定のままで通信すると、以下のエラーが出る場合がある。
＊SoapUIが使っているJavaは8以上だったら大丈夫らしいが

「UNSUPPORTED_CLIENT: この組織では TLS 1.0 が無効になりました。HTTPS を使用して Salesforce に接続するには、TLS 1.1 以降を使用してください。」

対処法：　SoapUIでtslの設定を変更する

①．Terminalで以下のパスに移動：
/Applications/SoapUI-{VERSION}.app/Contents
SoapUI-{VERSION}は環境依存なので、自分の場合は
/Applications/SoapUI-5.3.0.app/Contents

②．vmoptions.txtに以下のコードを追加：
-Dsoapui.https.protocols=SSLv3,TLSv1.2

③．ファイルを保存して、SoapUIを再起動すれば解決。


参考リンク：
http://blog.deadlypenguin.com/blog/2016/06/27/soapui-tls-1-2/
SinatraでCSSやJSファイルが読み込めないときの解決策

#問題
Sinatraで外部ファイルからcssファイルやjsファイルを読み込もうと思っても、404エラーが吐き出される。


```html
<link rel="stylesheet" href="style.css" />
<script type="text/jsx;harmony=true" src="test.js"></script>
```
エラー結果↓

```
[09/May/2017:13:20:43 +0900] "GET /style.css HTTP/1.1" 404 476 0.0007
[09/May/2017:13:20:43 JST] "GET /style.css HTTP/1.1" 404 476
```


#解決策
**appのルートにpublicディレクトリを作成して、その下に配置する**
~~これはSinatraのルールとのこと。~~webサーバのドキュメントルートは全てここを指定。画像もこのディレクトリに保存する。

***
[コメントで頂いた指摘を反映させるため追記　2017/5/11]
publicディレクトリはデフォルトの設定。
以下のようにプログラム上に書き込めば、任意のディレクトリを指定することができる。

[README (Japanese) - Sinatra](http://www.sinatrarb.com/intro-ja.html)


>静的ファイルは./publicディレクトリから配信されます。 :public_folderオプションを指定することで別の場所を指定することができます。

>```rb
set :public_folder, File.dirname(__FILE__) + '/static'
```

[追記終わり]
***

```
$ ls -lR public/
public/:
合計 8
drwxrwxr-x 2 user01 user01 4096  5月  9 13:40 2017 css
drwxrwxr-x 2 user01 user01 4096  5月  9 13:40 2017 js

public/css:
合計 4
-rw-rw-r-- 1 user01 user01 108  5月  9 13:14 2017 style.css

public/js:
合計 8
-rw-rw-r-- 1 user01 user01 7550  5月  9 13:40 2017 test.js
```

ここで注意しなければいけないのは、これらを呼び出す際にはpublicというパスは省略しなければならないこと。

したがって、

```html
<link rel="stylesheet" href="/css/style.css" />
<script type="text/jsx;harmony=true" src="/js/test.js"></script>
```
と指定することでようやく読み込むことができた。

#結論
Railsと比べ制限が少ないと言われるSinatraだが、思ったところに落とし穴があった。
【Salesforce初心者】SFDC初心者Kit

SFDC未経験から、３週間でSalesforceのApplication Builderに合格したので、勉強でお世話になったKitを紹介したいと思います。

＊2019/08/04内容更新

開発者ツール（カッコはおすすめ度）

Visual Studio Code （高）： SFDCに関わらず、最近あらゆる言語分野でIDEの王座をとる優秀なEditor。Microsoft産。
Salesforce CLI （高）：Salesforce DXというツール群？の中の重要な一環。ソースのRetrive、Deployなど色々できる。
SoqlXplorer （高）：オブジェクト操作が便利！
GitHub（中）：業界標準のSVCだが、SFCDを導入するコンサル業界もしくはベンダー側では、うまく使えてない気がする。使うかどうかはプロジェクト判断だが、個人的にはどこも使うべき。
Travis（中）：Githubと連携するCIツール。SFDC公式で推奨。
apinames（低）：ChromeのpluginでSFDC上のAPI名を表示できる便利ツール。ただしiframe対応していないので、おすすめ度が低い。
Force.com Logins：Chromeのpluginで簡単にログインできる便利ツール。ただし、ライセンス制限があるので、CLIでも同じことができるので、おすすめ度は低くなった。

勉強用資材

Trailhead
English Version: https://trailhead.salesforce.com/en
Japanese Version: https://trailhead.salesforce.com/ja


SFDCスライド（SFDCが主催したWebinarのスライド資料）:
https://www.slideshare.net/DeveloperForceJapan?utm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview

SFDCイベントカレンダー（Webinarを含む）：
https://developer.salesforce.com/ja/calendar

SFDC開発者ドキュメント：
https://developer.salesforce.com/docs/

試験対策

試験過去問
StudyBlue: https://www.studyblue.com/notes/california/salesforce-exam-prep/34384
SFDC Quizzes: http://sfdcstudy.org/

試験範囲
https://www.salesforce.com/jp/services-training/education-services/cert/credentials.jsp
GoでBigQueryへの認証をjson_keyfileで行う

GoでBigQueryを利用するときに`json_keyfile`を利用して認証をおこないたかったのですが、ドキュメントだけでの解決に時間がかかったので、そのまとめです。

## 環境
go 1.8


## やり方
まずは、パッケージたちをインポートします。
ちなみに、`"google.golang.org/api/iterator"`BigQuery接続には関係ありませんが、データ取得時に利用しています。

```go
import (
  "cloud.google.com/go/bigquery"
  "google.golang.org/api/iterator"
  "google.golang.org/api/option"
)
```

そして、以下のようにすると、BigQueryの`client`を取得することができます。

```go
gcpKey := "json_keyfileのパス"
ctx := context.Background()
client, err := bigquery.NewClient(ctx, "プロジェクト名", option.WithServiceAccountFile(gcpKey))
if err != nil {
	panic(err.Error())
}
defer client.Close()
```

あとは、`client`を利用して、クエリを投げるだけです。
以下はBigQurery上のsampleテーブルからデータを取得するコードです。

```go
type Sample struct {
	ID         int    `bigquery:"id"`
	Comment    string `bigquery:"comment"`
}

sample := []Sample{}
q := client.Query(`SELECT * FROM [project:dataset.sample]`)
itt, err := q.Read(ctx)
if err != nil {
	return nil, err
}
for {
	var t Sample
	e := itt.Next(&t)
	if e == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	sample = append(sample, t)
}
```

## まとめ
GCPのAPIドキュメントはわかりにくくて大変ですね。
また、急に変更されることが多いので、記事が書かれた日付に注意しましょう。

## 参考
- https://cloud.google.com/bigquery/docs/reference/libraries#client-libraries-install-go
- https://godoc.org/cloud.google.com/go/bigquery
- https://godoc.org/cloud.google.com/go#example-package--ApplicationDefaultCredentials
【メモ】BLE Nano 2 で iBeacon発信

RedBearLabのBLE Nano 2(nRF52832)でiBeaconを発信してみた。
とりあえず規格最短の20msで発信しまくる。

# 開発環境
macOS Sierra 10.12.4でArduinoを使う。
![ArduinoCommunityLogo.png](https://qiita-image-store.s3.amazonaws.com/0/173800/b590b06d-0af2-72ab-a378-255ae47b65f0.png)

# 手順
Boards ManagerにBLE_Nano2を追加しないといけないので注意。
Preferences->Setting->Additional Boards Manager URLsにhttps://redbearlab.github.io/arduino/package_redbear_nRF5x_beta_index.json
を追加。
![スクリーンショット 2017-05-09 13.04.05.png](https://qiita-image-store.s3.amazonaws.com/0/173800/65210c67-51d3-4f35-bfce-ffaedaa6feea.png)

Tools->Boards:->Boards Managerで「RedBear nRF52832 Boards」をインストール。
![スクリーンショット 2017-08-01 17.28.55.png](https://qiita-image-store.s3.amazonaws.com/0/173800/48b22bfb-e1c9-8a6a-91eb-66379a788a04.png)

Tools->Boards:からBLE_Nano2を選択。

BLE_Nano2を選択するとFile->ExamplesにExamples for BLE_Nano2が出現する。


詳しくは[ここ](https://github.com/redbear/nRF5x/blob/master/nRF52832/docs/Arduino_Board_Package_Installation_Guide.md)。



# ソースコード
とりあえずひたすらビーコンを出すだけのプログラム。

```cpp:BLENano2_iBeacon
#include <nRF5x_BLE_API.h>
BLEDevice ble;

void setup() {
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  
  ble.init();
  ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
  ble.accumulateAdvertisingPayload(GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
  ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,(const uint8_t *)"LLLL", 4);
  ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
  ble.setAdvertisingInterval(20); 
  ble.setAdvertisingTimeout(0);
  ble.startAdvertising();
}

void loop() {
}
```

# iPhoneで受信する際の注意
iPhoneで受信する際はCoreBluetoothを使い接続せずにScanResultだけ見ることで最短の20msで検知できる。
しかし、RSSIしか見れない。
CoreLocationだと1sに一度になってしまうがuuid, major, minorなどを見ることができる。

iPhone側の処理は気が向いたら書きます。
Gitで別リポジトリの特定コミットを取り込む方法

Gitって便利すぎだなー。

取り込みたいリポジトリを、remoteに加えてfetchします。

```
$ git remote add hoge git@bitbucket.org:hoge/hoge.git
$ git fetch hoge
```

取り込みたいコミットをcherry-pickします。

```
$ git cherry-pick [取り込みたいコミットのhash値]
```

これでコミットが取り込まれます。ログには取り込んだコミットの、コミット時のコメントもそのまま反映されます。

取り込み完了したら、remoteから削除します。

```
$ git remote rm hoge
```
Javaの勉強 - 2

# コメントの挿入
・1行の場合は「//」
・複数行の場合は前後を「/*   */」で囲む

```java:Yomogi.java
public class Yomogi{
    public static void main(String[] args){
		
		// 1行のコメント
        
		System.out.println("Hello, world.");
		
		/*
		複数行の場合
		※1行で使ってもいい。
		*/
		
    }
}
```

これを実行すると。

![pic002.JPG](https://qiita-image-store.s3.amazonaws.com/0/179949/7b882604-bfa4-20ea-d80f-7c40106c82e9.jpeg)

コメントなので当然表示されない。

# printとprintlnの違い
ざっくり言うと行末に改行が入るかどうかくらいの違い？

・print ⇒ 行末の改行なし
・println ⇒ 行末の改行あり
・明示的に改行を入れるには「\n」

```java:Yomogi.java
public class Yomogi{
    public static void main(String[] args){
		//printのとき
		System.out.print("Hello, ");
		System.out.print("world.\n");
		
		//printlnのとき
		System.out.println("Hello, ");
		System.out.println("world.");
    }
}
```
実行して違いを見ると。

![pic003.JPG](https://qiita-image-store.s3.amazonaws.com/0/179949/9c42c8ad-3fde-1837-a791-0328b032cab0.jpeg)

状況によって使い分ける感じですかねぇ。

・System.out.println()でも改行になるらしい。

# 変数使ったり、数値を出力したり
整数の意味が思い出せなかったくらい算数の知識が消えてました。
とりあえず小数点じゃないほうってことで納得した。

・整数を使うための変数は「int」らしい
・変数への数値を入れるには「=」を使う

と言うわけで、基本形に整数の変数aを定義して
適当な数値を入れて出力結果を見てみる。

```java:Yomogi.java
public class Yomogi{
	public static void main(String[] args){
		int a;		
		a = 12;
		
		System.out.println("数値の出力");
		System.out.println(a);
		System.out.println(34);
	}
}
```

そして実行。

![pic004.JPG](https://qiita-image-store.s3.amazonaws.com/0/179949/abc48a88-5e0e-2da5-6366-108fa427b276.jpeg)

文字列の出力のときには気づいてなかったけど

・printlnやprintで文字列の場合は前後に「"」をつける必要がある。
・変数や数値の場合は「"」は不要っぽい。

まぁ、今はそんな認識でいいかな。
勉強継続のためにハードルを低くしていくスタンス。

今回はココまで。
BuildConfig.DEBUGがtrueにならない


アホやったのでメモ。

## 現象

デバッグ時だけログ出そうとしてたんだけどデバッグ時でも`BuildConfig.DEBUG`がtrueにならない・・・

```java
if (BuildConfig.DEBUG) {
	Log.d(TAG, "hoge");
}
```

## 原因

使ってるライブラリのBuildConfigをimportしてた・・・

```java
import io.fabric.sdk.android.BuildConfig;
```

自分のパッケージのBuildConfigに直して無事解決orz
swift 関数のまとめ

##swiftの関数の記述の仕方についてのメモ

```
func calc(line: Int, height: Int) -> Int {
   return line * height
}
calc(line: 2, height: 12)
```

基本的に関数は上の様に記述する。
`func` と記述することで関数であることを宣言する。
`line`と`height`は引数で、それぞれ引数名と型を宣言する。
`->`の右側に返り値の型を記述する。もし`Void`である場合には`->`と返り値の型は省略出来る。



```
func say(_ sentence: String, to person: String) -> String {
  return "\(sentence), \(person)"
}
say("Hello", to: "Jon")
```

よりswiftらしく記述するために、引数のラベルを置き換えたり、省略する事ができる。
第一引数は`_`でラベルを省略出来る。
関数を呼び出す際に`say(sentence: "Hello", person: "Jon")`と記述することは、英語らしく読めないため、swiftでは好まれないとされています。



```
func create(name: String) -> (email: String, url: String) {
  let email = "\(name)@email.com"
  let url = "\(name).com"
  return (email, url)
}
let newAcount = create("Mike")
print(newAcount.email)
print(newAcount.url)
```

タプルを用いた複数の値を返す関数も記述出来る。

```
func makeSquare() -> ((Int) -> Int) {
  func square(number: Int) -> Int {
    return number * number
  }
  return square
}
var squareMethod = makeSquare()
squareMethod(4)
```

関数は別の関数を値として返すことも出来る。



```
func recursiveCalcHeight(array: [String], lineNumber: CGFloat, buttonX: CGFloat) -> CGFloat {
  let maxWidth = UIScreen.main.bounds.width
  let buttonHeight: CGFloat = 14
  guard let name = array.first else { return lineNumber * buttonHeight }

  let button = UIButton()
  button.setTitle(name, forState: .normal)
  button.sizeToFit()

  let buttonWidth = button.frame.width
  let nextButtonX = buttonX + buttonWidth
  let nextArray = Array(array.dropFirst())

  if buttonWidth >= maxWidth {
    return recursiveCalcHeight(array: nextArray, lineNumber: lineNumber, buttonX: buttonX)
  }

  if nextButtonX <= maxWidth {
    return recursiveCalcHeight(array: nextArray, lineNumber: lineNumber, buttonX: nextButtonX)
  }

  return recursiveCalcHeight(array: nextArray, lineNumber: lineNumber + 1, buttonX: tagWidth + rightMargin)
}
```

上記のように末尾再帰関数を記述することができる。
上記は配列に含まれる名前のボタンを作成する際に、画面枠に収まらなかった際に行を一つ下げて、その全体の高さを最後に返します。
Python vs Ruby 『ゼロから作るDeep Learning』 1章 sin関数とcos関数のグラフ

## 概要

書籍『ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装』1章のコードを参考に Python と Ruby でサイン・コサインのグラフを描くプログラムを書く。

## 環境構築

### Python

書籍『ゼロから作るDeep Learning』では Anaconda ディストリビューションをインストールして環境構築していたが、ここでは pip で numpy と matplotlib をインストールするにとどめる。

今回の環境。

```
macOS Sierra + Homebrew + pyenv + Python 3.6.1
```

数値計算ライブラリの NumPy と、グラフ描画ライブラリの Matplotlib をインストールする。

```
$ pip install numpy matplotlib
```

### Ruby

今回の環境。

```
macOS Sierra + Homebrew + rbenv + Ruby 2.4.1
```

多次元数値配列ライブラリの Numo::NArray と、グラフ描画ライブラリの Numo::Gnuplot をインストールする。

```
$ gem install numo-narray numo-gnuplot
```

Numo::Gnuplot が Gnuplot を使っているので Homebrew でインストールする。

```
$ brew install gnuplot
```

## sin関数とcos関数のグラフを描くコード

### Python

```python
import numpy as np
import matplotlib
matplotlib.use("AGG") # 描画ライブラリにAGG(Anti-Grain Geometry)を使う
import matplotlib.pyplot as plt

# データの作成
x = np.arange(0, 6, 0.1) # 0から6まで0.1刻みで生成
y1 = np.sin(x)
y2 = np.cos(x)

# 数値データを確認用に出力
print("x:", *x)
print("y1:", *y1)
print("y2:", *y2)

# グラフの描画
plt.figure(figsize=(4, 3), dpi=160) # 画像サイズ
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos") # 破線で描画
plt.xlabel("x") # x軸のラベル
plt.ylabel("y") # y軸のラベル
plt.title("sin & cos") # タイトル
plt.legend() # 凡例
plt.savefig("python_graph.png")
```

### Ruby

```ruby
require 'numo/narray'
require 'numo/gnuplot'

# データの作成
x = Numo::DFloat.new(60).seq(0, 0.1) # 0から6まで0.1刻みで生成
y1 = Numo::DFloat::Math.sin(x)
y2 = Numo::DFloat::Math.cos(x)

# 数値データを確認用に出力
puts "x: #{x.to_a.join(' ')}"
puts "y1: #{y1.to_a.join(' ')}"
puts "y2: #{y2.to_a.join(' ')}"

# グラフの描画
g = Numo::gnuplot do
  set term: {png: {size: [640, 480]}} # 画像サイズ
  set output: 'ruby_graph.png'
  set title: 'sin \& cos' # タイトル
  set key: 'box left bottom'
  set offset: [0, 0, 0, 0]
  plot x, y1, {w: 'lines', lw: 3, title: 'sin'},
       x, y2, {w: 'lines', lw: 3, title: 'cos'}
end
```

## 出力された画像

### Python

![python_graph.png](https://qiita-image-store.s3.amazonaws.com/0/139365/2a738309-7168-a76f-4563-fbc12b5cad3f.png)

### Ruby

![ruby_graph.png](https://qiita-image-store.s3.amazonaws.com/0/139365/e2f2ecdb-82c2-8b76-b281-2f5ea6b0029f.png)

## 参考資料

- Python vs Ruby 『ゼロから作るDeep Learning』 まとめ - Qiita http://qiita.com/niwasawa/items/b8191f13d6dafbc2fede
- O'Reilly Japan - ゼロから作るDeep Learning https://www.oreilly.co.jp/books/9784873117584/
- GitHub - oreilly-japan/deep-learning-from-scratch: 『ゼロから作る Deep Learning』のリポジトリ https://github.com/oreilly-japan/deep-learning-from-scratch
- GitHub - ruby-numo/narray: Ruby/Numo::NArray - New NArray class library https://github.com/ruby-numo/narray
- GitHub - ruby-numo/gnuplot: Gnuplot wrapper for Ruby/Numo https://github.com/ruby-numo/gnuplot
Excelのセル選択カーソルがヌルヌル動くの気持ち悪いからOFFりたかったんだけどExcelじゃなくてWindowsの設定を変える必要があった

# タイトルながい

そうゆう芸風だからね。しょうがないね。

# 環境

- Windows 10
- Excel 2016

# おまえ一体どんだけ古いExcel使ってたんだよ

Excel2007からExcel2016へ10年ぶりのバージョンアップだ。やってることはExcel2003でも問題ないぐらいだ。

# とっととやり方おしえれ

1. Cortanaに「システムの詳細設定」って打ち込むと「システムの詳細設定の表示」ってのが出てくるので選択。イルカが幅きかせてる時代だったら「『の』の連続です」とか鬱陶しいことゆってきてたとおもう。
2. パフォーマンスの「設定(S)…」をおす。押すときは脳内で「せっていかっこえすかっことじるてんてんてん」ってゆうこと。
3. 「カスタム」の「Windowsのアニメーション コントロールと要素」のチェックボックス外す。

# これもしかして

どっか別のところに影響があると思うけど、Excelのヌルヌルを嫌うようなものどもは影響があってもむしろウェルカムだと思う。あるいは気が付かない。

# 参考リンク

- [【Excel Expert】2013のセル移動のヌルヌルを無効化する | Tipstour](http://tipstour.net/office/excel/9576) - 参考どころか、まんま。
- [さくさくぱんだ](http://www.kabaya.co.jp/sakupan/)
- [ぬるぬるおじさん](http://www.nicovideo.jp/tag/%E3%81%AC%E3%82%8B%E3%81%AC%E3%82%8B%E3%81%8A%E3%81%98%E3%81%95%E3%82%93)
Zabbix導入を検討する際の要点まとめ

# 概要

本稿では、zabbix 3.2.6 を前提にして、導入を検討する際などの要点についてまとめる

# 要点

## zabbixとは、モニタリングとアラート通知のためのツールである

 zabbixの機能とは、アイテムという項目で該当サーバーの該当項目のリソースモニタリング、そのモニタリングデータのグラフ化、トリガーという項目で該当サーバーの該当項目のアラート通知を設定することが可能

## zabbixでは、サーバーとアイテムとトリガーを別々に有効/無効の切り替えができる

 zabbixでは、サーバー自体のチェックの有効/無効、該当アイテムのチェックの有効/無効、トリガーによるアラート通知の有効/無効が個別に設定可能
これをうまく使えば、メンテナンス時などでアラート通知を無効にしておくが、チェックは続けることで、実態のプロセスのdown timeの記録を残すなどの使い方が可能


## zabbixでは、サーバー・アイテム・トリガーを個別に設定しないといけない

zabbixでは、標準テンプレートで一括設定できるものもあるが、自在な詳細監視を行おうとすると、自力で詳細な設定がひつようなので若干敷居が高い
だが、チェックはするがグラフ化しない項目や、グラフ化しないがアラート通知する項目や、グラフ化するがアラート通知しない項目など柔軟に設定が可能

## zabbixでは、トップ画面が纏まりすぎて情報が見難い

zabbixでは、個別サーバーについての最新チェックデータと、個別サーバーと個別のグラフをみることが前提なのか?、トップ画面にはグルーピングしたグループの状態サマリーの数値表示しかないので、ダッシュボードでグラフを追加するなどのカスタマイズが必要

## zabbixでは、トリガーに依存関係が設定できる

zabbixでは、トリガーに依存関係の設定ができる、これは例えば上位のルーターがDownした場合に、その下位のサーバーが未到達で全部アラート通知がくるなどの通知がおおくなるので、上位がDownした際には下位のトリガーのアラート通知を送らないような設定が可能

## zabbixでは、トリガーにアラート通知を設定するのではなく、(アラート通知)アクションにトリガーを紐づける

zabbixのアラートメールは、トリガーにアラートの送信先などを設定するのではなく、まずアクションというものを作成し、そのアクションにメール送信先・メール本文テンプレート・メール送信条件を設定、そのメール送信条件に、サーバーやトリガーなどを紐づける。
「障害->アラート送信」という設定ではなく、「アラート送信<-適用する障害」という設定方式となっている


## zabbixでは、zabbix proxyを使い、別ネットワークの監視が可能

zabbixでは、zabbix proxyを通して、firewall内部のグローバルIPを持たないサーバーに対して、監視が可能
一部の説明によっては、同一LAN内でio?か内部通信?かを集約し、サーバーの負荷分散にも使える?ような説明もあるが、、、、、

## zabbixでは、zabbixクライアントが複数のzabbixサーバーに対して監視を許すことが可能

zabbixでは、zabbixクライアントのserver項目にカンマ(,)区切りでサーバーを設定することで、複数zabbixサーバーからの通信を許可できる
使い方が難しいが、例えばクラウド環境で、クラウド業社のためのzabbix agentが入っている場合に、設定追加すると、自社用のzabbixサーバーでのモニタリングも可能になるや、自社監視のネットワークで自社専用のzabbixとクライアントに見せる専用のzabixを複数構築する場合などにつかえるのではないかと思われる
Bash on Windowsにfishを入れて、Visual Studio Codeのターミナル上で使用する

#背景的なもの
ここのところプライベート含めずっとMacを使っていたのですが、最近Windowsの端末をガッツリ使うことになりました。

Macに慣れちゃうとWindowsって色々面倒だなあ、特にターミナルとか、と思っていたのですが、Windows10でBashが使えるようになったというのを聞いて、それなら使ってやろうということで入れてみました。
参考
http://qiita.com/Aruneko/items/c79810b0b015bebf30bb

ただ、調べていく過程の中で、fishというshellをさらに入れたという話を見つけたので、自分も参考にして入れてみました。
今まで知らなかったけど、良さそう。
参考
http://qiita.com/ysks/items/6c9d751d9a3b3b1b8020

さらにさらに目に入ったのが、AtomやVisual Studio Codeのターミナルでbashを使えるようにした、という話。
参考
http://ikesan009.sakura.ne.jp/2016/12/23/bash-on-ubuntu-on-windows%EF%BC%8Batom%E3%81%A7%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%81%A6%E3%81%BF%E3%82%8B/
http://qiita.com/m_zuma/items/6b2ee25001109a6506c4

では、bash on windowsの上に入れたfishをこれらのエディタで使うには？
と思ったんですが、それについて言及したところがパッと見つからなかったので、書くことにしました。

#やること
今回はVisual Studio Codeを対象に書くつもりですが、Atomでもあんまりやることは変わらないと思います。

まずは、上にずらっと並べた参考URL等を見て、下記の状態にまで持っていきます。

* Bash on windowsが使用できる
* Bash on windowsの上でfishが使用できる
* Visual Studio CodeのターミナルでBashを使用できる

色々やり方はあるかもしれませんが、今回は無難に.bashrcで毎回fishを起動するようにしました。

```bash
which fish
echo exec /usr/bin/fish >> ~/.bashrc
```
※/usr/bin/fishの部分は、念のためwhichでfishの配置パスを確認して、その配置パスの値を指定するようにしましょう。

ついでに、ターミナルのフォントを変えたければVisual Studio Codeなら
ファイル→基本設定→設定から

```json
"terminal.integrated.fontFamily": "'Source Code Pro for Powerline'"
```
といったような感じにすればOKです。
自分は上の記事内で出てきたSource Code Proフォントにしてみました。

#課題
当然のことながら、この設定を入れると他のところでbashを起動した際もfishが立ち上がるようになるので、普通にbashを立ち上げたい時に困るかもしれません。
設定解除したければ、.bashrcに追記した`exec /usr/bin/fish`の部分をコメントアウト（または削除）すればいいと思います。
bash.exeのオプション指定とかでどうにかする方法があれば知りたいですね…。
IPアドレスの手打ちはもうやめたいと思ってaddonを書いた

# この記事は何？
自作のopenFrameworks addonの紹介と宣伝です。
https://github.com/nariakiiwatani/ofxSearchNetworkNode

# なにができるの？
- 同じネットワーク内にあるホストを勝手に発見して相互にIPアドレスを教えあってくれる
- 接続や切断のイベントを通知してくれる
- ホストに名前をつけられる
- ホストにグループを設定できる（複数設定可）
    - 同じグループのホストだけ発見するとか
    - 特定のグループのホストだけ発見するとか
- 他のホストから発見されないようにもできる（シークレットモード）

つまり複数デバイスを連携する時に
__それぞれの端末のIPアドレスを調べて設定ファイルとかコードとかに手打ちしなくてよくなる__

ということ。

# 使い方
https://github.com/nariakiiwatani/ofxSearchNetworkNode/blob/master/readme.ja.md

```C++
using namespace std;

// 最小の使い方であればこれだけでOK
ofxSearchNetworkNode search;
search.setup(8000, "my name"); // 通信(UDP)に使うポートと、他ホストに通知する自分の名前
search.request();

// あとはgetNodesでいま見えるノード（ホスト）のIPアドレスとその他情報のmapを取得したり
const map<string, ofxSearchNetworkNode::Node> &nodes = search.getNodes();

// イベントリスナを登録したりできる
ofAddListener(search.nodeFound, this, &ofApp::onFoundNode);
void ofApp::onFoundNode(const pair<string, ofxSearchNetworkNode::Node> &node) {
	cout << "node found : " << node.first << "," << node.second.name << "(" << node.second.groups << ")" << endl;
}
```

その他の使い方は`ofxSearchNetworkNode.h`を読んでください。

## （例）Mac1台と不特定多数のiPhoneを連携したい
グループを`myApp,mobile`に設定したiPhoneアプリを配布してMacのグループを`myApp,laptop`に設定しておくと
同じネットワークに繋がってさえいればiPhoneアプリが起動した瞬間にMacからそのデバイスを発見することができる。（Macアプリが後から立ち上がっても問題ない）
`nodeFound`イベントで`node.group`をチェックして、見つかったホストがiPhoneなのかMacなのかも判断できる。

# その他
- これはoF以外の環境でも相互に使えると良いと思うのだけど、そのためにはoF非依存にして`.a`なり`.lib`なり`.dll`なりで書き出せば良いのかな？やり方調べねばだなあ。
- 現バージョン(2017.5.9時点)ではWindowsやAndroidだと自分でブロードキャストアドレスを入力しなきゃいけなかったり、発見したホストが自分自身かどうかが判断できなかったりするんだけど誰かソケット部分書いてくれないかなあ。
redux-sagaからredux-observableに書き換えてみる

# redux-sagaからredux-observableへ書き換え
仕事で[`redux-observable`](https://github.com/redux-observable/redux-observable)を使うことになったので、書き換えてみた備忘録。
ちなみにまだ`redux-observable`触って2日目の初心者なので多目にみてもらえると :bow:

# Before
よくある`redux-saga`の処理。
`reducer`と`store`の設定周りとか、詳細は省きます。

```js:actions
import { createAction } from 'redux-actions';
export const findUser = createAction('findUser');
```

```js:sagas
function * findUserHandler(payload) {
  try {
    yield put(showLoading());
    const { data } = yield call(api.user.find, payload);
    yield put(findUserSuccess(data));
  } catch (error) {
    yield put(findUserFail(error.response));
  } finally {
    yield put(hideLoading());
  }
}
export default function * rootSaga() {
  yield [
    takeEvery(actions.findUser.toString(), findUserHandler)
  ]
);
```
厄介なのは`showLoading`アクションと`hideLoading`アクションを非同期処理の処理の前後で呼ぶところです。

[issue](https://github.com/redux-observable/redux-observable/issues/62)でもこんな質問が上がってましたが、そもそも解決策が高度過ぎて理解ができなくて解決できず・・・orz
[ここ](https://hackmd.io/s/H1xLHUQ8e#side-by-side-comparison)に書いてあるような感じだとパラメータ固定で実用的でないし、、、。

ので、自分で書いてみることにしました。

# After
試行錯誤の結果、ソースコードがこうなりました。

```js:epic
export default function findUser(action$) {
  return action$.ofType(actions.findUser.toString())
    .map(action => action.payload)
    .mergeMap(payload => Rx.Observable.of(
        Rx.Observable.of(showLoading()),
        Rx.Observable.fromPromise(api.user.find(payload))
          .map(({ data }) => findUserSuccess(data))
          .catch((error) => Rx.Observable.throw(error)),
        Rx.Observable.of(hideLoading()),
      )
    )
    .concatMap((action) => Rx.Observable.zip(action, (data) => data))
    .catch((error) => Rx.Observable.of(findUserFail(error), hideLoading()))
}

```

1. `map`で`payload`を取得。
2. `mergeMap`で非同期に処理を行う(Rx.Observable.ofで３つのObservableを返す)
3. `concatMap`に3回`Observable`が渡されるので、ひとつずつ順番に処理する。

よく考えたら`showLoading`の前に`api.user.find(payload)`が実行されちゃうから変な気がしてきた...
でもPromiseObservableで待ってくれてるぽい。。。うーむ orz

#### 参考
[Redux-Saga V.S. Redux-Observable](https://hackmd.io/s/H1xLHUQ8e)
[Process Manager dispatch multiple actions #62](https://github.com/redux-observable/redux-observable/issues/62)

おしまい。
Compose.ioのMySQLを使ってみた Part2

前回↓のつづき。
http://qiita.com/azzeten/items/a1204d523f5548cff3e7

## MySQLの構成は？

ComposeのUIやマニュアルからも確認できますが、3ノードでグループレプリケーションを組んでるようです。

```mysql
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+------------------------------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST                              | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+------------------------------------------+-------------+--------------+
| group_replication_applier | 094f4172-2f30-11e7-8590-a637e8d5b754 | mysqlxxx.sl-us-dal-9-xxx.dblayer.com |        3306 | ONLINE       |
| group_replication_applier | 142ff6cf-2f30-11e7-8651-461cf9dd4049 | mysqlxxx.sl-us-dal-9-xxx.dblayer.com |        3306 | ONLINE       |
| group_replication_applier | dc384358-2f2f-11e7-8238-26b988664b80 | mysqlxxx.sl-us-dal-9-xxx.dblayer.com |        3306 | ONLINE       |
+---------------------------+--------------------------------------+------------------------------------------+-------------+--------------+
3 rows in set (0.23 sec)
```

## テーブルを作ってInsertしてみる

グループレプリケーションなので、**テーブルには必ずPrimary keyを指定**します。

```mysql
mysql> create table testtable1 (col1 int primary key);
Query OK, 0 rows affected (0.18 sec)

mysql> insert into testtable1(col1)  values (10);
Query OK, 1 row affected (0.23 sec)

mysql> select * from testtable1;
+------+
| col1 |
+------+
|   10 |
+------+
1 row in set (0.22 sec)
```

## GUIツールからも接続してみた
Sequel Proで接続を試してみました。普通にできます。
![スクリーンショット 2017-05-09 11.43.30.png](https://qiita-image-store.s3.amazonaws.com/0/119378/d109a5c2-eabc-4350-e341-7029bb8729f9.png)

接続をクリックして、この通り！
![スクリーンショット 2017-05-09 11.44.01.png](https://qiita-image-store.s3.amazonaws.com/0/119378/43ab55a3-1f4f-d18a-3fc5-d17830ed6274.png)
TypescriptでThree.jsのTextGeometry描画

# やること
ThreejsのTextGeometryで、日本語を描画する。
typescriptで記述する。

# 環境
- typescript2.2.1
- Threejs r82
- jquery 3.2.1

# 方法
## 問題
日本人的には日本語を扱いたいのでフォントファイルを読み込ませないといけない。

フォントファイルはjsonファイルにしないと使えないため、
[typeface.js](http://gero3.github.io/facetype.js/)でttfをjsonに変換。

それっぽく書くと下記の感じになると思うが…

```typescript
class threeDrawing{
...
  function Text(){
    let t = this;
    let loader = new THREE.FontLoader( text: string );
    loader.load('font_path', function( font ){
      let geometry = new THREE.TextGeometry(text, {
        font: font,
        size: 5,
        ...
        }
      );
      let material = ...
      let mesh = ...
      t.scene.add( mesh );
    });
  }
...
}
```
これではエラーが出る。
理由は2つ。

1. TextGeometryに与えるパラメータは{}ではなく、TextGeometryParametersで与える必要がある
2. fontはtype Fontでないといけない


## パラメータに関して

```typescript
let parameters: THREE.TextGeometryParameters = {
  font: font,
  size: ...
  ...
};
```

このように型を指定する。

ちなみに、[TextGeometryParametersはInterface](http://definitelytyped.org/docs/threejs--three/interfaces/three.textgeometryparameters.html)である。

## type Fontに関して

FontLoaderで読み込んでるものはtype Objで型が違うためダメ。

よってTHREE.Fontを使う。

THREE.Fontの使い方だが、
THREE.Font( font_path )__ではない__。

実装例は以下の感じ。

```typescript
public FontobjLoad(): void{
  // thisの保持をする
  // fontはインスタンス変数this.fontに格納
  let t = this;
  $.ajax({
    type: "get",
    url: 'font_path',
    async: false,
    dataType: 'json',
    success: function( data ){
        t.font = new THREE.Font( data );
    }
  });
}
```

THREE.Fontの引数はjson stringであり、Objectではない。
そのため、フォントのjsonファイルをjson stringとして読み込んで、そのjsonをTHREE.Fontに渡す。

## 結果
class内に書く感じでやると、
こんな感じでできる。(一部省略)

```typescript
class ThreeDrawing{
  ...
  public FontobjLoad(): void{
    // thisの保持をする
    // fontはインスタンス変数this.fontに格納
    let t = this;
    $.ajax({
      type: "get",
      url: 'font_path',
      async: false,
      dataType: 'json',
      success: function( data ){
          t.font = new THREE.Font( data );
      }
    });
  }

  function Text(){
    let parameters: THREE.TextGeometryParameters = {
      font: this.font,
      size: ...
      ...
    };
    let geometry = new THREE.TextGeometry( text, parameters );
    let material = ...
    let mesh = ...
    this.scene.add( mesh );
  }
}
```

# おわりに
少し面倒な方法になるが、日本語対応のTextGeometryを作ることができた。

[DefinitelyTypedのTHREEの定義ファイル](http://definitelytyped.org/docs/threejs--three/modules/three.html)に関して、
r81で追加されたEdgesGeometryに対応してないことから、
おそらくr81〜は対応していない(2017/05/09現在)。 

なお、r81以降はEdgesHelperは非推奨(使えない)。
connectedAndroidTestでアプリのContextを使用する


こんにちはsekitakaです。

# アプリのContextの取得方法
テストコード内では以下の記述でテスト対象アプリのContextを習得できます。

```Java
Context context = InstrumentationRegistry.getTargetContext();
```

# 経緯
AndroidのconnectedAndroidTestでstringリソースを使用する関数のテストをしたところ、以下のエラーが発生しました。

```
android.content.res.Resources$NotFoundException: String resource ID #0x7f09014d
```

リソースが無いと言われていますが、リソースは確かに定義してあります。
テストコードは以下のようになっており、Contextを引数にとるFoo.fooメソッドのテストを実施しています。

```Java
@Test
public void testFoo() throws Exception {
    Context context = InstrumentationRegistry.getContext();
    Foo.foo(context);
}
```

```Java:Foo.java
public static void foo(Context context){
    context.getString(R.string.foo);
}
```

この問題の原因はContextのインスタンスの取得に`InstrumentationRegistry.getContext()`を使用していることでした。
この記述で取得できるContextは、connectedAndroidTest実行のためのアプリで`com.example.myapp.test`パッケージのアプリのContextでした。

テストしているアプリ(`com.exampe.myap`)自体のContextのインスタンスを取得するには`InstrumentationRegistry.getTargetContext()`を使用する必要がありました。
ScriptAutoRunnerで遊んでみる（フォームをいろいろ）

#ScriptAutoRunnerで遊んでみる
##はじめに
今回は、chromeの拡張機能であるScriptAutoRunnerを使っていろいろ自動化しようってことで書いてみました。
##ダウンロード
ScriptAutoRunnerはここからダウンロードできます。
https://chrome.google.com/webstore/detail/scriptautorunner/gpgjofmpmjjopcogjgdldidobhmjmdbm?hl=ja
##言語
JavaScript
JQuery←使えないサイトもあるかも
##目標
ScriptAutoRunnerを使ってフォームを自動で入力し送信する。
[テストサイト](http://peon-ferret-21210.netlify.com/
)
（テストサイト作成してあるのでそこでためそう！！！）
##ScriptAutoRunnerでサイト設定
![スクリーンショット 0029-05-09 11.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/83409/2ffa4cf6-7f1d-f1f9-3ec7-085472878152.png)
この</>部分をクリックします。
![スクリーンショット 0029-05-09 11.29.30.png](https://qiita-image-store.s3.amazonaws.com/0/83409/cf5892cf-36ee-3734-bbf9-ff892f72f7ee.png)
そして、このTaeget hostnameの部分にサイトのURLのホスト部
（peon-ferret-21210.netlify.com）を入力する。
**※httpの部分はいらない！！**
http://peon-ferret-21210.netlify.com/index.html
の場合も
peon-ferret-21210.netlify.com
これで、そのスクリプトを実行するサイトを指定します。

これを指定しないと全てのサイトでそのスクリプトが実行されます。

##実際にフォームに値を入れる
言語はJSなので、普通に指定してあげればいいです。
これは１例です。

```js
document.getElementsByName('ra1')[0].click();
document.getElementsByName('ch1')[2].click();
```

![スクリーンショット 0029-05-09 11.34.52.png](https://qiita-image-store.s3.amazonaws.com/0/83409/e2d82d14-89b3-4cb9-5f87-f9d9eb036268.png)
##最後にその設定をONにする
最後にコンセントの部分をさしてあげればOKです。
![スクリーンショット 0029-05-09 11.35.25.png](https://qiita-image-store.s3.amazonaws.com/0/83409/90e8d293-8c84-6952-31c0-92a86e9742e0.png)

##テスト
簡単なテストサイトを作りました。
http://peon-ferret-21210.netlify.com/
このサイトにアクセスして、フォームに値が入力されていたら成功です。

##これってどこで使えるの？？
よくアンケートサイトとかありますよね？
そこで使えるかも・・・「悪用厳禁です」

以上です。
xcode8.21 + FacebookAudienceNetwork SDK導入時に下記エラーが出たら

### xcodeで下記エラーが出た。
```

error: Invalid bitcode version (Producer: '802.0.41.0_0' Reader: '800.0.42.1_0')
clang: error: linker command failed with exit code 1 (use -v to see invocation)

```

http://stackoverflow.com/questions/43480556/xcode-8-2-1-error-invalid-bitcode-version-producer-802-0-41-0-0-reader

こちらを参考にxcodeをなくなく、8.21から8.32以上にアップデートと思いましたが、、
そもそもxcode8.32は、EL Capitanに入らない。。。汗！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/922a70cf-230c-4f01-c478-22efe85c3aa2.png)

なくなくFanSDKの方の古いバージョンのSDKをpodsでいれたら


```:Podfile
〜
pod 'FBAudienceNetwork', '4.20.0'
〜
```

```

Installing FBAudienceNetwork 4.20.0 (was 4.22.0)

```

適当にバージョン4.20をインストール！

無事ビルド成功！！汗ｗ