OmniAICreator/Qiita-1.07M huggingface dataset:
【UE4】 UE4のカメラ揺らし機能をもう少し掘り下げてみる

#はじめに
自分がダメージを受けた際や、近くで爆発などが起きた際にカメラを揺らす演出はよく使用されます。
UE4ではカメラを揺らす機能が用意されていますが、実際に使用する際はいろいろと注意が必要そうです。

基本的な使用方法はhistoliaさんのブログで紹介されているのでこちらも参考にしてみてください。

- [[UE4] カメラの振動](http://historia.co.jp/archives/634)


他のカメラ揺らしの種類や再生方法、停止方法や扱う際の注意点などもありますので、
もう少し掘り下げてみたいと思います。

#再生方法
カメラを揺らす方法は以下の３つがあります。

##PlayerController::ClientPlayCameraShake()

自分のカメラのみを揺らす場合に使用します。
APlayerController::ClientPlayCameraShake_Implementation()の中でPlayerCameraManagerがあったらPlayerCameraManager->PlayCameraShake()を呼び出しています。


##PlayerCameraManager::PlayCameraShake()

CameraManagerのリファレンスから呼び出すことができます。
自分のカメラに使用すればカメラを揺らすことができます。


##UGameplayStatics::PlayWorldCameraShake()

ワールド座標で震源の座標を指定して、その範囲内入ればカメラを揺らします。

TPSでこの機能を試してみましたが、最初はカメラが振動してくれませんでした。
というかたまに振動する場合があるのでおかしいと思って調べてみたら、キャラクタの位置ではなく、カメラの位置で判定しているようです。
FPSの場合はこれで問題ないと思いますが、TPSの場合はこれでは問題が出てきます。

ソースを確認してみると、この関数内でAPlayerCameraManager::PlayWorldCameraShake()を呼び出しています。
この中でWorldのPlayerControllerのイテレータで回してPlayerCameraManagerが設定されている場合は処理されます。
その際にCalcRadialShakeScaleで揺れの強さを求めていますが、カメラの座標で揺れの強さを求めているようです。
その後にPlayerController->ClientPlayCameraShake()を呼び出しています。

マルチの場合もこの関数でクライアント側もちゃんと処理が行われるようです。

TPSで使用したい場合はキャラクタからの位置で処理してあげることで同じようにカメラを揺らすことができます。
その場合はC++やBPで別の関数を用意する必要が出てきます。


#停止方法

##APlayerController::ClientStopCameraShake()
引数で再生したCameraShakeClassを指定することで停止することができます。
bImmediatelyをtrueにすると即時停止、falseの場合は収束して停止します。

##PlayerCameraManager::StopCameraShake()

PlayerCameraManager::PlayCameraShake()で再生した際の返却値のCameraShakeのインスタンスを引数で渡すことで指定したカメラの揺れを停止することができます。

##PlayerCameraManager::StopAllInstancesOfCameraShake()

引数でclassを指定することで指定したカメラの揺れを停止することができます。

##PlayerCameraManager::StopAllCameraShakes()

お構いなしに全てのカメラ揺れを停止することができます。


#その他
UEの機能でカメラを揺らす場合、CameraShakeを継承したBPでパラメータを設定します。
それを引数でClassとして渡しているため、パラメータを動的に変更することができません。
というか、変更できる方法があったら教えてもらいたいです。

その為、プリセット的に複数のパラメータを用意して適宜選択して再生するといった運用になると思います。
ちょっと取り回しがしにくい感じがしますが、とりあえず揺らすだけであれば使用できると思います。

今回はキャラクタに付けたカメラでの話でしたが、カットシーンなどでカメラが独立している場合などは未検証です。
Python > ファイルでなく複数行文字列から読込む > io.StringIO()

```txt:動作環境
Python3 (ideone)
```

### link

https://docs.python.jp/3/library/io.html

### code

http://ideone.com/KLd4OP

```py3
import io

emuCsv = """1,2,3
4,5,6
7,8,9"""

print('begin')
with io.StringIO(emuCsv) as fin:
	print(fin.read())

print('end')
```

```txt:run
begin
1,2,3
4,5,6
7,8,9
end
```

## v0.2

http://ideone.com/Qu0vZr

```py
import io
 
emuCsv = """1,2,3
4,5,6
7,8,9"""
 
print('begin')
with io.StringIO(emuCsv) as fin:
	print('line9')
	print(fin.read())
 
print('end')
```

```txt:run
begin
line9
1,2,3
4,5,6
7,8,9
end
```

`fin.read()`において3行分が一度にprint()されている。

上記の場合、with構文を使う意味はなさそうだ。

## v0.3 > readline()使用

readline()というのがあるようだ。
https://stackoverflow.com/questions/7472839/python-readline-from-a-string

http://ideone.com/hi1DN7

```py
import io

emuCsv = """1,2,3
4,5,6
7,8,9"""

print('begin')
fin = io.StringIO(emuCsv)
print(fin.readline(),end='')
print(fin.readline(),end='')
print(fin.readline())
print('end')
```

```txt:run
begin
1,2,3
4,5,6
7,8,9
end
```

回数固定でreadline()を実行することはできる。
EOFについては不明。
Pythonの辞書型で複数の最大値のkeyを取得する

# やりたいこと
valueの最大値が複数ある辞書

```
d = {
  'a': 1,
  'b': 2,
  'c': 3,
  'd': 3,
  'e': 2
}
```

に対して，複数のkey（今回だと`[c, d]`）を取得する処理をしたい

# 実装（2017/7/24追記）
@shiracamus 様より
> numpy使わない方がシンプルでは？

```py3:by_shiracamus.py
d = {
  'a': 1,
  'b': 2,
  'c': 3,
  'd': 3,
  'e': 2
}

# valueがmaxであるkeyを探してくる
max_val = max(d.values())
keys_of_max_val = [key for key in d if d[key] == max_val]

print(keys_of_max_val)
```

きれい！
`keys_of_max_val = [key for key, val in d.items() if val == max_val]`とかにすると見た目が好みだけれど，速度ってどうなるんだっけか…
暇な時にでも調べよう…

## 前のやつ
```
import numpy as np

d = {
  'a': 1,
  'b': 2,
  'c': 3,
  'd': 3,
  'e': 2
}

# keyをndarrayで取得
keys = np.array([a[0] for a in d.items()])

# valueをndarrayで取得
values = np.array([a[1] for a in d.items()])

# valueがmaxであるkeyを探してくる
keys_of_max_val = keys[values == values.max()]

print(keys_of_max_val)
```
内包表記に慣れていないのバレバレですねぇ！

# できた
```
['c' 'd']
```

# 感想
最大値が1つしかないときは

```
key_of_max_val = max(d.items(), key=(lambda x: x[1]))[0]
```

で取得できるのに，たくさん最大値があると途端に面倒くさくなるなー
pip3でmysql-connectorのインストール方法

# 環境
- mac OSX 10.12.5
- pip3のバージョン9.0.1

# インストール方法
- 下記コマンド実行し、pip3でインストールできるmysql-connectorパッケージを探す。  
  **mysql-connector (2.1.6)**が現在時点(2017/07/21)での最新。

```:Console
$ pip3 search mysql-connector
    ・
    ・
    ・
tendril-connector-tally (0.1.1)                                       - Tally XML interface connector for tendril
netdrive-connector (1.3.2)                                            - GUI tool to setup mountable SFTP and WebDAV connections on Linux/UNIX systems.
mysql-connector (2.1.6)                                               - MySQL driver written in Python
  INSTALLED: 2.1.4
  LATEST:    2.1.6
mysql-connector-python-rf (2.2.2)                                     - MySQL driver written in Python
esia-connector (0.16)                                                 - ESIA integration library
    ・
    ・
    ・
```

- 最新バージョンの2.1.6を指定してインストールする。

```:Console
$ pip3 install mysql-connector==2.1.6
Successfully installed mysql-connector-2.1.6
```

Successfully installedが表示されれば正常にインストールされています。
これでOK!
PHPクラス呼び出し、laravelのprovider使い方

まず、機能を使いたいクラスを作る => CommenMessage.php

```
class CommenMessage
{
public function method(){
 echo('エラーです');
}
}
```

##純PHPの書き方
```
$abc = new App\CommenMessage.php
$abc->method();
```

##(Laravel)Providerを使う時：

1.providerを作成

```
php artisan make:provider CommonMessage
```

2.CommonMessageServicesProvideのregisterで契約を書く

```
public function register(){
    $this->app->bind('message', function($app)
    {
        return new App\CommenMessage.php;
    });
```
3.app.phpに書き込み

```
App\Providers\CommonMessage::class,
```
4.実際に使ってみる

```
$CommonMessage  = \App::Make("message");
$CommonMessage->method();
```
ファイルのキャッシュを楽に実現するgoパッケージ

作りました。
# github
https://github.com/intelfike/checkmodfile

# どんなパッケージ？
ディスクアクセスを減らすパッケージです。
ファイルヘッダの更新日時を確認して、最新であればファイル内容を読み取らずメモリ上の値を返す、更新されていればファイル内容を読み取って返す、といった処理をしています。

# 効果
自分のPCはSSDですが、それでも高速になりました。
HDDならもっと速くなる可能性があります。(HDDが手元にない><)

# 例
次に示すのは、http要求があったファイルの最新版を返す例です。

## キャッシュしない場合 (約14000 [request/sec])
```
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
	// HTMLを返す
	file, err := os.Open("data/index.html")
	if err != nil {
		fmt.Fprint(w, err)
		return
	}
	io.Copy(w, file)
})
```
## このパッケージを使った場合 (約17000 [request/sec])
```
// ファイルを登録
f, err := checkmodfile.RegistFile("data/index.html")
if err != nil {
	fmt.Println(err)
	return
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
	// HTMLを返す
	err := f.WriteTo(w)
	if err != nil {
		fmt.Fprint(w, err)
		return
	}
})
```

このパッケージを使うと、SSDのPCの場合で約1.2倍高速になります。
※環境やファイルサイズによります。

リクエストがあるたび*checkmodfile.Fileを動的にMapに登録するようにすれば、複数ファイルも扱えるでしょう。

興味があれば使ったり改造してみてください。
Choregraphe 2.5.5 (win) のプロセス終了スクリプト(vbs)

#はじめに
Windows版のChoregraphe2.5.5で開発をしていると、Choregrapeを終了しても関連プロセスがいつまでも残る現象が発生します。タスクマネージャーから１つ１つ終了させるのが大変なので、一括で終了させるスクリプトを作成しました。

特に qilaunch.exe や naoqi-service.exe が残るようです。Choregraphe2.4.3.28では発生していなかったため、Choregraphe2.5.5の問題ではないかと思います。
![img1.PNG](https://qiita-image-store.s3.amazonaws.com/0/131693/ac8103ac-5603-4f2b-14df-462f5b66af12.png)
![img2.PNG](https://qiita-image-store.s3.amazonaws.com/0/131693/fd4d2e40-3c31-34b6-fe4e-cc28db8bd90a.png)

#環境について
今回使用した環境です。
Choregraphe 2.5.5.5 (Win)
#注意点
**Choregrapheを起動したままこのスクリプトを実行しないでください。**
また、実行には**十分ご注意をお願いします。**
#参考
こちらのサイトの情報を参考にさせていただきました。
[VBScript Tips] http://www.whitire.com/vbs/index.html
[プロセスを強制終了する] http://www.whitire.com/vbs/tips0198.html

#対象のプロセスについて
 対象のプロセスは次の４つです。スクリプトの最初で指定していますので、必要に応じて変更してください。

|プロセス名|
|:------------------|
|choregraphe_launcher.exe|
|naoqi-bin.exe| 
|naoqi-service.exe|
|qilaunch.exe| 

#vbScript
```vbnet:killchoreg.vbs

Option Explicit

Dim objCheckProcNameList	' チェックするプロセス名一覧

Set objCheckProcNameList = CreateObject("System.Collections.ArrayList")

objCheckProcNameList.add("choregraphe_launcher.exe")
objCheckProcNameList.add("naoqi-bin.exe")
objCheckProcNameList.add("naoqi-service.exe")
objCheckProcNameList.add("qilaunch.exe")

Dim objProcList		' プロセス一覧
Set objProcList = GetObject("winmgmts:").InstancesOf("win32_process")

Dim strProcName		' 終了するプロセス名
Dim objProcess		' プロセス情報

Dim lngKillNum
ReDim lngKillNum(objCheckProcNameList.Count)

Dim cnt
For cnt = 0 to UBound(lngKillNum)
	lngKillNum(cnt) = 0
Next

For Each objProcess In objProcList
	cnt = 0
	For Each strProcName In objCheckProcNameList
		If LCase(objProcess.Name) = strProcName Then
			objProcess.Terminate
			If Err.Number = 0 Then
				lngKillNum(cnt) = lngKillNum(cnt) + 1
			Else
				WScript.Echo "エラー: " & Err.Description
			End If
		End If
		cnt = cnt + 1
	Next
Next


Dim infoMessage
infoMessage = ""
cnt = 0
For Each strProcName In objCheckProcNameList
	If lngKillNum(cnt) > 0 Then
		infoMessage = infoMessage & strProcName & " を " & lngKillNum(cnt) & " 個強制終了しました。" & vbCrLf
	Else
		infoMessage = infoMessage & strProcName &" は残っていませんでした。" & vbCrLf
	End If
	cnt = cnt + 1
Next

' 終了メッセージ表示
WScript.Echo infoMessage

Set objCheckProcNameList = Nothing
Set objProcList = Nothing
```
#実行方法
 上記のスクリプトをメモ帳などで拡張子vbsとして保存してください。
 作成したvbsファイルをダブルクリックすると実行されます。

 実行後は、確認および終了したプロセスについてのメッセージが表示されます。

![img3.PNG](https://qiita-image-store.s3.amazonaws.com/0/131693/201f0b77-73bd-43bf-da82-65263734990b.png)
Javascriptで子帳票から親帳票に戻る

FineReportを使ってブラウザで帳票をプレビューする時、たまに今の帳票（親帳票）からもう一つの帳票（子帳票）にリンクする機能を使用します。その時親帳票に戻りたいならどうすればいいですか？

![return.gif](https://qiita-image-store.s3.amazonaws.com/0/138989/90ded59d-8490-c442-1983-ff6e38099d8c.gif)


ここで解決策を紹介します。
ツールバーでカスタムボタンを選択してjsを追加する。
コードは以下の通り。
var backto=backgoto;
window.location.href=(backto);

具体ステップ
%FR_HOME%/WebReport/WEB-INF/reportlets/demo/basic/DetailedDrillB.cptを開き、「テンプレート->テンプレートweb属性->ページ別プレビュー設定」をクリックして、カスタムボタンを追加する。

![js1.png](https://qiita-image-store.s3.amazonaws.com/0/138989/c1ad8aed-5c3b-f723-1606-dcdb1cc7f6bd.png)


カスタムボタンのウィジェットアイコンを選択する。

![js2.png](https://qiita-image-store.s3.amazonaws.com/0/138989/c29bb97e-63c2-40e6-1d85-f981e3e42648.png)


カスタムイベントにjsを追加
var backto=backgoto;
window.location.href=(backto);
パラメータを追加->パラメータ名はbackgoto->数式を”=CONCATENATE(serverURL,servletURL,’?reportlet=demo/basic/DetailedDrillA.cpt’)”として定義する
以下の通り。

![js3.png](https://qiita-image-store.s3.amazonaws.com/0/138989/cb56eb4f-4d48-6c87-6647-1b178c49d1a5.png)

ホームページ：http://www.finereport.com/jp/
無料ダウンロード：http://www.finereport.com/jp/products/trial/
あるnpm moduleが、どのnpm moduleの依存関係にあるかを調べる方法

# このメモの背景

色々なnpmモジュールを追加していくうちに、見たことも聞いたこともないモジュールからエラーが吐かれ困惑する、なんてことはJSの開発をしていると度々あります。こういった場合、エラーを吐いているモジュール自体の問題なのか、そのモジュールを呼び出している別のモジュールに問題があるのかを調査する必要が都度発生するのですが、まずは依存関係を把握しないことには始まりません。

このような作業が発生した際、私が取っているアプローチをメモしておきます。

1. （前提） Source Mapを出す ⇒ 省略
2. インスペクタを頼りにエラーを吐いているモジュール名を特定する
3. エラー発生元のモジュールを呼び出しているモジュールを、node_moduels内の各モジュールのpackage.jsonを調べて特定する
    - `grep -rnw './node_modules' --include=package.json -e 'モジュール名'`
    - これを自プロジェクトのpackage.jsonで依存関係として定義しているモジュールに行き当たるまで繰り返す
4. 依存関係が見えたところでコードを読んで必要な対応を行う

便利なnpmコマンドとかもありそうですが、package.json見たほうが早そうなのでgrepしてます。
Linuxサーバのリソースを見たかったらnetdata

# netdataはよいぞ
http://my-netdata.io
※対象OS、インストールなどは公式を参考に

画面がかっこいい
![netdata_dark.png](https://qiita-image-store.s3.amazonaws.com/0/2567/0af724c4-9f1a-81d9-550f-9bd8373f6ced.png)

個人的にはホワイトも好き（VisualをSettingsから変更できます）
![netdata_white.png](https://qiita-image-store.s3.amazonaws.com/0/2567/f3927c1f-8093-0858-252e-b32055fcdd95.png)


# netdataのメリット

- 1秒ごとにチャキチャキグラフが動く
- リソースのネックポイントがわかる
- リソースの状況を網羅的に把握できる

# netdataのデメリット

- サーバ1台に対して1画面（複数台を俯瞰できない）
- 履歴は追えない（30分前とか残ってない）
- セキュリティ的に気を使う（ベーシック認証怖くてはずせない）


# 参考URL
[mastodonが動いているサーバーにnetdataを相乗りさせた際のnginxの設定](http://qiita.com/shinderuman@github/items/225e468a27739094e22a)
Objective-CからSwiftの第１引数名必須のメソッドを呼ぶ



Obj-CからSwiftのメソッドを呼ぶ日本語の情報が少ないのでメモ



以下のような第１引数の引数名が必須のメソッドをObjective-Cから呼ぶ

```Swift
func hoge(hikisu1: String, hikaku2: String) {
```

With + 引数名で呼び出せる(BridgingHeader追加前提）

```Objective-C
[vc hogeWithHikisu1:@"hoge" Hikisu2:@"hoge"];

```
【AWS】EC2のスナップショットの手動取得手順

#やること
スナップショットをAWSのコンソール上で手動取得する。

#目的
脆弱性対応やサーバー設定作業の前に、スナップショットを取得することによって、
サーバー作業後にエラーが発生しても切り戻せるようにする。

#手順
1.AWSコンソールにログインする。


2.EC2の画面に移動する。
>[サービス]⇒[EC2]
![01.png](https://qiita-image-store.s3.amazonaws.com/0/168635/7fce5e5e-1ff6-a85c-ccc6-41c4ab811d54.png)


3.インスタンスIDの確認する。
>[インスタンス]を押下する。
>スナップショットを取得するサーバーのインスタンスIDを確認する。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/168635/5d9f41ab-192c-3893-8dfe-21bcd9003696.png)


4.ボリューム画面に移動し、スナップショットを取得するボリュームを選択する。
>[サービス]⇒[EC2]⇒[ボリューム]
>[アタッチ済み情報]を確認し、手順3.で確認したものと同じボリュームのチェックボックスにチェックを入れる。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/168635/b53d8b14-96bf-cc46-84c3-0ba9ea5f9b9f.png)


5.スナップショットを作成する。
>[アクション]⇒[スナップショットの作成]
![04.png](https://qiita-image-store.s3.amazonaws.com/0/168635/70e613c9-6d83-ebc9-a4e7-3b906312b7bb.png)


7.スナップショットの名前を決めて、作成する。
>[名前]と[説明]を入力し、[作成]を押下する。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/168635/8155d9ce-a61a-3f14-0b07-bca895108aa1.png)


8.スナップショット作成の確認
>[サービス]⇒[EC2]⇒[スナップショット]
>※[ステータス]が[completed]になっていることを確認する。
![07.png](https://qiita-image-store.s3.amazonaws.com/0/168635/cc6fc507-81ea-99ee-4ab4-c7f3ecde0219.png)
React VRを試す

![React-VR-1.png](https://qiita-image-store.s3.amazonaws.com/0/2567/680c3249-01fd-f4f7-ed20-9025d8300760.png)

React VRはFacebook社が開発したVRコンテンツ用ライブラリです。

ブラウザがあればだれでも簡単に試すことができるので、今回はReact VRの試し方をご紹介します。

# 前提
React VRはNode.js製のツールです。今回はインストールを省略します。

- node.js　v6.10.3

# 手順
npmコマンドでreact-vr-cliをインストールします。

```
$ npm install -g react-vr-cli
```

確認のため、react-vrコマンドを実行してみます。

```
$ react-vr
React VR Command Line Interface
Version 0.3.5

Usage:
  react-vr init [project name]  Create a new React VR application with the specified name

```
バージョンとUsageが表示されました。

次にreact-vr init <プロジェクト名>でプロジェクトを作成します。
今回は「HelloReactVr」という名前にしました。

```
$ react-vr init HelloReactVr
```

さっそく実行しましょう！

```
$ cd HelloReactVr
$ npm start
```

Macなどのローカル環境であれば、http://localhost:8081/vr/index.html にアクセスすることで表示されます。

誰でも見られるようにしたVRサイトを https://www.kichij.org/vr/index.html に用意しました。


![20170713_vr_hello.png](https://119.qiita.com/files/d55f5625-be2c-0f20-12c3-7ab1ff1661dd.png)

実際に使用している画像は下記になります。ReactVRが処理して360度画像として処理しているため湾曲している画像に包まれているようにブラウザで表示されるのです。

![chess-world.jpg](https://119.qiita.com/files/a4b0a788-ac1e-da18-50af-0dcf6b51d03b.jpeg)

# かんたんに編集してみる

## パノラマ画像を準備する。

iphoneのパノラマモードで撮影した画像でもよいです。また、360度表示用の画像は[Flickr VR](https://www.flickr.com/vr)などでも入手可能です。
crystalで標準入力を受け取ってみる

# STDINを取得したい

競技プログラミングでよくある入力はUNIXで言うところの標準入力に値が入っている状態だ。なのでSTDINから値を取り出したい。

* パイプだとこんな感じのイメージ

```sh
$ echo "input-text" | ruby main.rb
```

## `STDIN.raw` でやってみる

* ドキュメントを見るとこれでよさそうなのだが、`#raw` メソッドがターミナル(tty)を開いてないと動かない仕様なのでダメ
    * `can't set IO#raw: Inappropriate ioctl for device` のようなエラーが出る
    * [io/console.cr#L79](https://github.com/crystal-lang/crystal/blob/afdd36617ae0b92ac33bcfddfc4e11f6e56b2011/src/io/console.cr#L79) 曰く `Only call this when this IO is a TTY, such as a not redirected stdin.`
    * テスト結果 [crystal 0.22.0 on wandbox](https://wandbox.org/permlink/p5VtIsbKt0pcQ4ar)

```ruby
begin
  array = STDIN.raw.each_line.map{|line| line.dup}
  puts array.class

  array.each_with_index{|line, index| puts "#{line} <- #{index}"}
  #p array.size
rescue ex
  puts ex.message
end
```

* 出力

```
Start
Using compiled compiler at .build/crystal
can't set IO#raw: Inappropriate ioctl for device
0
Finish
```


## `STDIN` 直で

* STDINを直でとるとうまくいった
    * テスト結果 [crystal 0.22.0 on wandbox](https://wandbox.org/permlink/m63K5uigAnqFi9Bq)

```ruby
begin
  array = STDIN.each_line.map{|line| line.dup}
  puts array.class

  array.each_with_index{|line, index| puts "#{line} <- #{index}"}
  #p array.size
rescue ex
  puts ex.message
end
```

* 出力

```
Start
Using compiled compiler at .build/crystal
Iterator::Map(IO::LineIterator(IO::FileDescriptor, Tuple(), NamedTuple()), String, String)
aaa <- 0
hello <- 1
world <- 2
0
Finish
```

## もう少し短く

* crystalのmapの省略記法は`:`ではなく`.`

```ruby
array = STDIN.each_line.map(&.to_s)
```

* 自動で配列になってくれないので、`to_a` をつける

```ruby
array = STDIN.each_line.map(&.to_s).to_a
```
tcpdumpでキャプチャしたパケットがTCPかUDPかを見分ける

# 見分け方

tcpdump出力から、パケットがTCPなのかUDPなのか見分ける。

TCP

    TIMESTAMP IP SRC.PORT > DST.PORT: Flags [FLAGS], ...

UDP

    TIMESTAMP IP SRC.PORT > DST.PORT: SIZE ...

DST.PORT:の後に"Flags"が来ればTCP、パケットサイズの数値が来ればUDPと理解すれば良い。(全部大文字の単語はそれぞれの出力で読み替える)

# どんな時に役立つか

## DNSのキャプチャ

DNSはUDPで問合せをすることが多いけれども、EDNS0(だっけ?)とかでUDPパケットサイズに収まりきらない応答をやりとりする時とか、ゾーン転送などでTCPを使用することがある。
どちらも同じポート53を使うので、キャプチャ出力を見て区別できないと見落とすことになるかも。

## IP上のプロトコルを見たい時

IP上のプロトコル、ええとつまりUDP、TCP、あとなんか最近出てきているHTTPの新しい奴とか、VPN関係のパケットとか、そういうレベルでパケットを眺めたい時なんかには役立ちそうな気がしないでもない。

# 能書き

ある時DNSパケットのキャプチャをする必要が出てきた。古いネットワーク機器のキャッシュDNSサーバ機能が最近のどんな機能までカバーしているのか、簡単に確認したくなったのだ。

皆さんご存じの通り、DNSはTCPで通信する時も、UDPで通信する時もあるわけだけれども、大昔はUDPだけだと考えても概ね問題がない、そんな時代もあった。だから古いネットワーク機器がTCPで通信する気がないのかも、と思った次第。

    tcpdump -n port 53

こんな感じのフィルタを書けば良いわけだけれども、これってTCPとUDPのどちらでもキャプチャするわけだよね。

そういった前提でキャプチャ結果表示を見て気がついた。
「これはTCPパケットなのか、UDPパケットなのかどこを見れば分かるんだ?」
いや、うん、そりゃまー、今でもUDPで通信するケースがずっと多いし、パケットサイズとか通信相手とかによってある程度TCPであるかどうか推測できるのかもしれない。それはそれで置いておいて、tcpdump出力のどこにTCPかUDPか書いてあるんだよ、という疑問を感じて調べたよ、という話。
Node-RED で、小文字、大文字変換

次のサンプルで行ったのと同じことを、function を使って実現しました。
[Node-RED で、２つのnode を作成する](http://qiita.com/ekzemplaro/items/828b684bc83c3c69b887)

inject,function を２つ、debug を２つ配置します。

![node-red_jul2102.png](https://qiita-image-store.s3.amazonaws.com/0/179446/07eda7ab-bbd6-b0b5-a914-fa02cdaf3825.png)

inject を編集します。
ペイロードを文字列にします。

![node-red_jul2103.png](https://qiita-image-store.s3.amazonaws.com/0/179446/6e5ebf00-ab05-7979-f04c-9223cbfcf85b.png)

function を編集 toLower

![node-red_jul2104.png](https://qiita-image-store.s3.amazonaws.com/0/179446/c63a9c96-f03d-52a7-98f9-9ceda9d6b4da.png)

function を編集 toUpper

![node-red_jul2105.png](https://qiita-image-store.s3.amazonaws.com/0/179446/74e75e91-2ee8-4e03-2871-36e284e20dfa.png)


ノードを結びます

![node-red_jul2106.png](https://qiita-image-store.s3.amazonaws.com/0/179446/c895287c-0dc4-f523-5f5e-a93da6abb3d1.png)


デプロイして、実行します。

![node-red_jul2107.png](https://qiita-image-store.s3.amazonaws.com/0/179446/3a882990-dc0e-722b-fe00-3b9aa400158d.png)
クラウドサーバでTensorFlow　その17

#概要
クラウドサーバでTensorFlowやってみた。
kaggleのdogs vs catsやってみた。

#環境
クラウド idcf
linux debian-8.11
tensorflow 1.2
gpu 無し

#写真
30バッチで1000エピソードやってみた。
netは、alexnet。
画像は、224*224*3で入力。
ckptを保存した。


![dogs6.png](https://qiita-image-store.s3.amazonaws.com/0/18104/879bef00-6965-ad02-1e39-e871c272d3b4.png)
[クイズ]javascriptと仲良くなるための一歩　第４話「NaNの比較」

# NaNとは？

NaNは非数（Not-a-Number）を表す値である。

```js
typeof NaN
//=> number
NaN*0
//=> NaN
```


## 第1問

```js
NaN==NaN
//=> ?
```

## 第2問

```js
NaN===NaN
//=> ?
```

## 第3問

```js
NaN<NaN
//=> ?
```

## 第４問

```js
NaN>NaN
//=> ?
```

## 第５問

```js
isNaN(NaN)
//=> ?
```

:mouse:
:cow:
:tiger:
:rabbit:
:dragon_face:
:snake:
:horse:
:sheep:
:monkey_face:
:bird:
:dog:
:boar:
:mouse:
:cow:
:tiger:
:rabbit:
:dragon_face:
:snake:
:horse:
:sheep:
:monkey_face:
:bird:
:dog:
:boar:

#答え

## 第1問

```js
NaN==NaN
//=> false
```

## 第2問

```js
NaN===NaN
//=> false
```

## 第3問

```js
NaN<NaN
//=> false
```

## 第４問

```js
NaN>NaN
//=> false
```

## 第５問

```js
isNaN(NaN)
//=> true
```

NaNは、
["NaN は別の NaN 値を含むあらゆる数と同じではないと比較されます"](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/NaN)
らしいです。
MarkdownでURLを自動リンクしない（＋ RFC 7763を詳しく調べてみた）

## はじめに

Markdownで `http` や `https` から始まる文字列は自動リンクになることが多いです。

でも、時には自動リンクにしてほしくないときもあるでしょう。

気になって

```
markdown http リンクにしない
```

で検索したら、上位3件がそれぞれ全く違う方法でした。


## 方法1: バックスラッシュによるエスケープ

`:` （コロン）前にバックスラッシュをつけると:

```
http\://qiita.com/k_ui
```

こんな感じでリンクされない:

> http\://qiita.com/k_ui

出典: [URL を自動リンクさせない - Qiita](http://qiita.com/k_ui/items/f3d093d7116a310900db)


## 方法2: バック・クォート(`)で囲む

```
`http://www.mywebaddress.com`
```

出典: [MarkdownでURLをリンクにしない - ええやんブログ](http://eeyan.hateblo.jp/entry/2012/12/22/184445)


## 方法3: 特殊文字を使う

```
http&#58;//www.example.com
```

出典: [GitHub Flavored Markdown でURLの自動リンクをしないようにする - ObjecTips](http://koze.hatenablog.jp/entry/2015/04/17/000000)

## 実行結果

とりあえず以上が上位3件の方法です。

実際、[gulp-postman](https://www.npmjs.com/package/gulp-postman)などで用いられているNode製マークダウンパーサーの[marked](https://github.com/chjj/marked)で試してみたところ、方法3で無事所望の結果が得られました。
ただし、markedではHTML出力としてはコロンが特殊文字のまま出力されたので、実用的ではありながらも完璧ではありませんでした。
方法2は自動リンクには避けられましたが、 `<code></code>` で囲まれてしまいます。

ちなみに、調べている過程で[Babelmark 2](http://johnmacfarlane.net/babelmark2/)という便利ツールを見つけたのでこれを使えば一目瞭然でした。

出典: [Standard MarkdownがCommon Markdow、そしてCommonMarkに - InfoQ](https://www.infoq.com/jp/news/2014/09/markdown-commonmark)

方法1: `http\://butchi.jp/`
→ http://johnmacfarlane.net/babelmark2/?text=http%5C%3A%2F%2Fbutchi.jp%2F)

方法2: `http://butchi.jp/`
→ http://johnmacfarlane.net/babelmark2/?text=%60http%3A%2F%2Fbutchi.jp%2F%60

方法3: `http&#58;//butchi.jp/`
→ http://johnmacfarlane.net/babelmark2/?text=http%26%2358%3B%2F%2Fbutchi.jp%2F

## 他の方法

```
http[]()://localhost/
```

出典: [MarkdownでURLからハイパーリンクを回避したい(方法だけ) - by shigemk2](http://www.shigemk2.com/entry/avoid_hyperlink_on_markdown)

確かに自動リンクは避けられましたが、案の定

```
http<a href=""></a>://localhost/
```

と空のa要素が生成されます。

他にもいい方法がないか調べたり考えたりしましたが残念ながら見つかりませんでした。

## RFC 7763

ちなみにMarkdownは紆余曲折がありながらもようやく標準化の波に乗ってきてるようで、[RFC 7763](https://tools.ietf.org/html/rfc7763)で文書化されていますが、ざっと見たところ（あとでちゃんと読む）そもそも自動リンクの仕様自体見つからず、よって避ける方法も明記されていません。

## 最後に

結論、実用的な自動リンク回避方法は

```
http&#58;//butchi.jp/
```

のような書き方ですが、

```
http://butchi.jp/
```

のままHTML出力する方法は恐らく存在しません。

Markdownのような直感的によしなに軽量マークアップや自動変換をするシステムは、お節介が高じて単純なものすら容易に記述できないことがしばしばです。（チャットツールでよくある、コードの一部が絵文字に変換される、など。）
思いつきで作られた実用ベースの不完全な言語は、時として不自由もあると理解した上で割り切って使う必要がありますね。
Node-RED で、２つのnode を作成する

次の２つのサンプルを合わせたサンプルを作成しました。
入力データを、総て小文字と大文字に変換します。

小文字変換のサンプル
[Creating your first node](https://nodered.org/docs/creating-nodes/first-node)
大文字変換のサンプル
[Node-RED で、node を作成する](http://qiita.com/ekzemplaro/items/8038d8a340df802c2a3f)

 実行結果

![node-red_jul2101.png](https://qiita-image-store.s3.amazonaws.com/0/179446/2da7bbd0-8a00-8afa-7821-20d98e292c66.png)

事前に準備するのは、
.node-red/nodes/package.json
.node-red/nodes/upper-case.js
.node-red/nodes/upper-case.html
.node-red/nodes/lower-case.js
.node-red/nodes/lower-case.html
です。

package.json 以外は、元のサンプルの流用です。

```json:package.json
{
  "name": "node-red-contrib-example-upper-case",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "node-red" : {
        "nodes": {
            "upper-case": "upper-case.js"
            "upper-case": "lower-case.js"
        }
    }
}
```
Laravel5.1でPHPUnitのPermission denied

#Laravel5.1にて
`$ ./vendor/bin/phpunit`
コマンドを実行するとPermission deniedになってしまいました。

調べると、Laravelインストーラのバグだとの情報があり、composerで再インストールしてみましたがうまくいきませんでした。
結局

`$ php ./vendor/bin/phpunit`

として実行することで動きました。
すごく単純な解決方法ですが、迷ったのでメモ。

##環境
macOS 10.12 Sierra
Vagrant
Scotchbox3.0
Laravel5.1

##参考
[how to fix permission denied while running vendor/bin/phpunit in a laravel project](https://stackoverflow.com/questions/38521329/how-to-fix-permission-denied-while-running-vendor-bin-phpunit-in-a-laravel-proje)
[Laravelインストーラーでプロジェクトを作成するとphpunitが“Permission denied”になる](https://ja.stackoverflow.com/questions/11948/laravel%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%A8phpunit%E3%81%8Cpermission-denied%E3%81%AB%E3%81%AA%E3%82%8B)
[Unity] リストビューやスナップページが実装できるFancyScrollViewを使う

#FancyScrollViewとは
FancyScrollViewはスクロールビューやページビューなどを実装することができます。
主な機能としては基本的なスクロールビューに加えて、

- 無限スクロールにも対応
- スナップ機能にも対応
- 柔軟なセルのアニメーション

があります。

制約としては

- セルごとに異なる高さ、または幅

が実装できないということでしょうか。

アニメーションに関してはgithubを参照してもらえれば
https://github.com/setchi/FancyScrollView


#概要
FancyScrollViewを使うにあたっての実装手順をまとめる。
忘備録です。


#条件
Unity 5.5.2p4
FancyScrollView (2017/07/20のもの)


#手順
##データクラスを作る
スクロールビューのセルに割り当てるデータクラスを作る。

##セルクラスを作る
FancyScrollViewCellクラスを継承したクラスを実装する。
ジェネリック引数はデータクラスの型になる。
このクラスにはセルのアニメーションを設定したAnimatorを関連付ける。
Animatorでstateの名前と正規化された時間を用いて再生するため、

public override void UpdatePosition(float position)

を実装する。
サンプル参照。
https://github.com/setchi/FancyScrollView/blob/master/Assets/FancyScrollView/Examples/01_Basic/Example01ScrollViewCell.cs#L37

##スクロールビュークラスの実装
FancyScrollViewを継承したクラスを実装する。
ジェネリック引数はデータクラスの型になる。

このクラスにデータを設定する処理を実装する。
サンプルでは外部から設定できるように実装されている。

https://github.com/setchi/FancyScrollView/blob/master/Assets/FancyScrollView/Examples/01_Basic/Example01ScrollView.cs#L18

##データを設定する処理の実装
表示するセルに対応するデータを先ほど実装したメソッドでセットする。
サンプルではStart()処理でデータを設定している。

##スクロールビューのゲームオブジェクトの設定
GameObjectを作ってスクロールビュークラス、ScrollPositionControllerクラスをアタッチする。

ScrollPositionControllerコンポーネントのViewPortを設定する。(見える範囲)

##セルのゲームオブジェクトの設定
セルのGameObjectを作ってセルクラスをアタッチする。
セルオブジェクトにはスクロールしたときにどのようにアニメーションするかを設定したAnimatorコンポーネントをアタッチする。
Animatorは正規化された時間で制御されることを想定してアニメーションを設定する。

アニメーションのだいたいは移動したい開始位置から終了位置を設定する。
注意したいのはアニメーションのカーブの影響を受ける。
リストビュー的な動きならばカーブはリニアになる。

![Unity 5.5.2p4 Personal (64bit) - Battle.unity - PrototypeClicker1 - Android_ _DX11 on DX9 GPU_ 2017-07-21 04.16.09.png](https://qiita-image-store.s3.amazonaws.com/0/36154/eb95430e-ba52-10f6-581d-f96f658e64bf.png)

スクロールビューコンポーネントにセルコンポーネントのGameObjectを関連付ける。

![Unity 5.5.2p4 Personal (64bit) - Battle.unity - PrototypeClicker1 - Android_ _DX11 on DX9 GPU_ 2017-07-21 04.06.49.png](https://qiita-image-store.s3.amazonaws.com/0/36154/4b453061-5953-d589-8fa1-c64087b73af4.png)

Cell Intervalが0のままだとエラーになる(？)ので、0より大きい値を入れて設定する。
Unity Editorをプレイすればにセル同士の間隔を見ながら調整できるので
Cell Offsetも合わせて調整する。

##CanvasにGraphic Raycasterをつける
デフォルトのCanvasにはもともとGraphic Raycasterがついてくるが
Canvasの下にCanvasなど自分でCanvasコンポーネントをアタッチしたときはついてこない。
このときスクロールビューのドラッグ処理が動かないので注意。


#その他
ここでは基本的な実装手順なのでセルのイベントをとる等の実装はサンプルを参照してください。
CSSで背景画像にぼかし加工と半透明カラー加工を同時に行う

# はじめに

LPなどでよく使われるやつです。こんな感じの完成イメージです。

<img width="1239" alt="スクリーンショット 2017-07-21 3.08.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/67773/59f43115-0bfc-16c9-9ac8-66443e99f8d6.png">

http://techd.jp/

普段cssを専門に触っているわけではないので、もっと良い方法があればフィードバックください。

# 実装

::before を使って擬似要素を定義します。

::before (:before)
https://developer.mozilla.org/ja/docs/Web/CSS/::before

例えば、topというクラスを持つdiv要素を対象とする場合、以下のように定義するのがポイントです。

* top::before
    * カラー
* top
    * 画像のURL
    * カラーの透明度
    * ぼかし度

htmlとcssのサンプルは以下の通りです。

```html
<div class="top"></div>
```

```css
.top{
  z-index:0;
  overflow: hidden;
  background-color: rgb(0,163,175);/*半透明カラーの色*/
}
```

```css
.top::before{
  content: '';
  background: url('../../assets/img/hogehoge.jpg');/*背景画像のURL*/
  opacity: 0.5;/*半透明カラーの透明度*/
  filter: blur(8px);/*ぼかし度*/
  position: absolute;
  /* 参考: http://designcolor-web.com/2016/09/14/css-blur-effects-background/*/
  top: -8px;
  left: -8px;
  right: -8px;
  bottom: -8px;
  z-index: -1;
}
```

# 参考

* http://designcolor-web.com/2016/09/14/css-blur-effects-background/
* https://developer.mozilla.org/ja/docs/Web/CSS/::before
僕達はTrackIDを探す旅をやめられそう。

今まで、AppleMusicで再生している曲からtrackIDを取得出来なかった。
trackIDというのは、AppleMusicの曲の管理IDでこれが無いとMPMusicControllerで曲を指定して再生出来ない。

```
let player = MPMusicPlayerController.systemMusicPlayer()
player.setQueueWithStoreIDs([ "123456789", "987654321" ]) //これ
```

> いま聴いている曲の iTunes Store での trackId を取得する旅
http://blog.nishimu.land/entry/2016/04/19/090000

しっくすえいと氏の検証によると、iOS9ではtrackIDを取得するすべは無かった。

僕もちょうど [Miew](http://miew.me) という他人の聴いている音楽をその場で撮った動画とシェアするプチMusicVideoシェアSNSみたいなのを作っていて、そこでは

```swift
request("https://itunes.apple.com/search", method: HTTPMethod.get, parameters: searchQuery)

private var searchQuery: [String : Any] {
    var term = ""
    if let title = self.title, artist != "null" {
      term += "\(title) "
    }
    if let artist = self.artist, artist != "null" {
      term += "\(artist) "
    }
    if let albumTitle = self.albumTitle, artist != "null"  {
      term += "\(albumTitle) "
    }
    return ["term" : term,
            "country" : "jp",
            "media" : "music",
            "entity" : "musicTrack",
            "limit" : "1",
            "lang" : "ja_jp",
            "isStreamable" : true]
  }
```

みたいな感じで、再生中に取得出来る曲名やアーティスト名をスペース区切りでクエリに詰めてレスポンスからtrackIDを取得するという方法を取っていた。（これが”旅”である…！）

# 僕達はTrackIDを探す旅をやめられそう。

タイトル回収。
ぼーっとMPMediaItemのヘッダを見ていると

iOS10.3から`playbackStoreID`というのが生えていた。

```
// Matches the id used by MPMusicPlayerController to enqueue store tracks  
    
@available(iOS 10.3, *)
open var playbackStoreID: String { get }
```

一応検証した感じtrackIDと同じ値がStringで返ってくる。
localeとかの検証はしてないんだけど、とりあえずこれをtrackIDとして使って良いっぽい…？

# 追記

AppleMusicに無い曲は「0」が返ってきました。
データ解析のための統計モデリング入門（緑本）の読書メモ（PythonとStanで）

# 読書メモ
「緑本」として有名な[データ解析のための統計モデリング入門](http://amzn.to/2vFpEhB)の読書会を行ってました。その際に読書メモを作成したので共有します。
GitHubにJupyter Notebookとしてアップしてます。
書籍中のR,WinBUGSのコードは、できるだけPythonやStanで記載してます。

[Chap1 データを理解するために統計モデルを作る](https://github.com/takitsuba/midoribon/blob/master/Chap1/Chap1.ipynb)
[Chap2 確率分布と統計モデルの最尤推定](https://github.com/takitsuba/midoribon/blob/master/Chap2/Chap2.ipynb)
[Chap3 一般化線形モデル(GLM)―ポアソン回帰](https://github.com/takitsuba/midoribon/blob/master/Chap3/Chap3.ipynb)
[Chap4 GLMのモデル選択―AICとモデルの予測の良さ](https://github.com/takitsuba/midoribon/blob/master/Chap4/Chap4.ipynb)
[Chap5 GLMの尤度比検定と検定の非対称性](https://github.com/takitsuba/midoribon/blob/master/Chap5/Chap5.ipynb)
[Chap6 GLMの応用範囲をひろげる―ロジスティック回帰など](https://github.com/takitsuba/midoribon/blob/master/Chap6/Chap6.ipynb)
[Chap7 一般化線形混合モデル(GLMM)―個体差のモデリング](https://github.com/takitsuba/midoribon/blob/master/Chap7/Chap7.ipynb)
[Chap8 マルコフ連鎖モンテカルロ(MCMC)法とベイズ統計モデル](https://github.com/takitsuba/midoribon/blob/master/Chap8/Chap8.ipynb)
[Chap9 GLMのベイズモデル化と事後分布の推定](https://github.com/takitsuba/midoribon/blob/master/Chap9/Chap9.ipynb)
[Chap10 階層ベイズモデル―GLMMのベイズモデル化](https://github.com/takitsuba/midoribon/blob/master/Chap10/Chap10.ipynb)
[Chap11 空間構造のある階層ベイズモデル](https://github.com/takitsuba/midoribon/blob/master/Chap11/Chap11.ipynb)

# 緑本とは
正式名称、[データ解析のための統計モデリング入門](http://amzn.to/2vFpEhB)。表紙が緑色なので緑本、と呼ばれるそう。
統計モデリング（モデルを作って観測データに当てはめて、現象を理解する方法）についての入門書。
[TJOさんのブログ記事](http://tjo.hatenablog.com/entry/2017/06/25/185426)などでも紹介されていることが多いと思います。
まえがき曰く、『「数理モデルを現象で表現・説明する」基礎訓練を受けてない人』が想定している読者とのことです。

# 緑本をお勧めしたい方
普段からデータを触っていて、エクセルで散布図書いて近似曲線引いたりしているが、何やってるのかよくわからない、そんな方が読まれると良いと感じました。
個人的には表紙と書籍のタイトルから難しそうな雰囲気を感じてしまい、読むのをためらってしまっていましたが、読み進めると「入門」の名の通り、とてもわかりやすく書いてくださってました。
[東大統計学入門（赤本）](http://amzn.to/2vFRevj)などから勉強を始めるよりも、緑本で統計モデリングの流れを把握してから読んだ方がいいかもな、と感じています。

# Pythonを使う方でも大丈夫
書籍ではRを用いて解説を進めていますが、ネット上にはPythonで書かれたコードも多数あり、そちらを参考にすれば手元でPythonで動かすことも可能だと思います。（多数のサイトを参考させていただきました、ありがとうございました。）
サンプルデータがRData形式の場合は、R上でCSVに変換したりなどは必要かと思います。
またWinBUGSコードの代わりにStanで書かれたコードもちらほらと見かけます。



5、6章あたりから難しくなってくるかもしれませんが、いい本だと思うので、ぜひ読んでみてください！
Get,GetGetGetWildAndTough! with 嫌なPHP

## 元ネタ
- [Get,GetGetGetWildAndTough\! \- Qiita](http://qiita.com/Momiji0223/items/eec45a13e60da1b22b49)

## 今まで書いた嫌なの
- [こんなズンドコキヨシは嫌だ with PHP \- Qiita](http://qiita.com/shinderuman@github/items/15fe031ab9ff74ce8fb2)
- [こんなズンドコキヨシは嫌だ with PHP その２ \- Qiita](http://qiita.com/shinderuman@github/items/5d26a92331247f231fc7)
- [PPAPテストをPHPで \- Qiita](http://qiita.com/shinderuman@github/items/d0693aaa4a7a55585788)

## 環境
- PHP7.1.0

## 嫌なPHP
- 無名クラス即時実行の中でnull合体演算子使って引数がnullだったら無名クラス定義をして `private $and` に値を代入しようとした際 `__set` が呼ばれて `Get Wild And` してたら `Tough`
- 解けない愛のパズルができました
- (syntax highlightingが効かないのなんで)

```php
<?php

(new class
{
    public function __construct($obj = null)
    {
        $obj = $obj ?? new class
        {
            private $get;
            private $wild;
            private $and;
            private $tough;

            public function __set($k, $v)
            {
                echo ucfirst($v) . PHP_EOL;
                $this->$k = $v;
                if ($k === 'and'
                    && $v === 'and'
                    && $this->get === 'get'
                    && $this->wild === 'wild'
                )
                {
                    echo 'Tough' . PHP_EOL;
                    exit();
                }
            }

            public function getWild()
            {
                return get_object_vars($this);
            }
        };

        $vars = $obj->getWild();
        foreach ($vars as $k => $v) {
            $obj->$k = array_rand($vars);
        }
        self::__construct($obj);
    }
});
```

## 一応実行結果

```zsh
% php getwild.php
Get
Wild
Get
Tough
And
And
Wild
Get
Tough
Get
Wild
And
And
And
Wild
Wild
Wild
And
Get
And
Get
Wild
And
Tough
```
多層NNで7セグメント表示器を学習させてみた

#はじめに
最近、プレイしたゲームがあるんですけど、その中にディープラーニングを応用した人工知能や量子の話題が出てきてすごく面白かったんですよ。2045年には技術的特異点（シンギュラリティ）が起きて人類最後の発明は人工知能になるだろうと言われていますが、果たしてそんな時代が訪れるのでしょうか？

そんなこんなで人工知能についてモチべが上がったので再び人工知能に関する記事を書いてみようと思います。今回は去年に書いた記事を参考にして7セグメント表示器を多層NNを使って学習させてみました。

去年に書いた記事：
[ディープラーニングで論理回路を学習、予測させてみた]
(http://qiita.com/KUKDfhia/items/3732bc3542a0bf7802d5 "ディープラーニングで論理回路を学習、予測させてみた")

#アルゴリズムの変更
去年に書いたNNのソースコードをそのまま使ってみても良かったんですけど、それだとつまらないなと思ったので少しアルゴリズムを変更しました。変更した点は以下のようになります。

　 　　　　　　　　　　　　　　表1：アルゴリズムの変更点

| 項目 | 前回 | 今回 |
|:-:|:-:|:-:|
| 層の数 | 4層 | 5層 |
| 教師データ | コード内に設定 | CSVファイルに設定
| 結合荷重の初期値 | 0～0.1の範囲でランダムに設定 | －0.1～0.1の範囲でランダムに設定 |
| 学習後の結合荷重の値 | 画面上に出力 | CSVファイルに出力 |

簡単に言うと今回は5層のNNで学習させてみようって事です。5層になってくると結合荷重の数も膨大になってくるため、学習後の結合荷重の値はCSVファイルに出力させます。後、汎用性を考えて教師データを予めCSVファイルに入れておき、プログラム起動時にCSVファイルから読み込むようにしています。


#各種設定
7セグメント表示器と教師データとして使う真理値表は以下のようになっています。



　　　　　　　　　　　　　　　　　　![7segment.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/93fb1bbe-a33d-e999-a025-17ca5863b023.png)
　　　　　　　　　　　　　　　　　　図1：7セグメント表示器




　 　　　　　　　　　　　　　　　 表2：7セグメント表示器の真理値表
![7segments.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/81c8e8b4-f997-8873-10f5-0f295699e0fe.png)

7セグメント表示器は10個の入出力パターンで成り立っているため、教師データは10個になります。その他、学習させるのに必要なパラメータは以下のように設定しています。

　表3：パラメータ設定

| 項目 | 内容 |
|:-:|:-:|
| 学習回数 | 15000 |
| 教師データ数 | 10 |
| 入力層の数 | 4  |
| 中間層１の数 | 12 |
| 中間層２の数 | 10 |
| 中間層３の数 | 8 |
| 出力層の数 | 7 |
| 学習係数ε | 0.5 |
| 慣性係数α | 1 |

上記の設定を元に学習を行います。NNのソースコードは以下に公開していますので興味のある方はご覧ください。

neurallearn.c
URL：https://gist.github.com/KUKDfhia/850b3462bae3be62909f61460d62ebaa

neuralfuture.c
URL：https://gist.github.com/KUKDfhia/620f995d7e126536e27c936e7e3f2fd2

※プログラムを実行するためにはinput.csv、output.csv、kekka1.csv、kekka2.csv、kekka3.csv、kekka4.csvのCSVファイルが必要になりますので予め作成しておいてください。input.csv、output.csvには学習させたいデータ（教師データ）を事前に入れておきましょう。kekka1.csv、kekka2.csv、kekka3.csv、kekka4.csvはプログラム実行後、学習結果である結合荷重の値が書きこまれますので事前に入れておくデータはありません。

#学習
それでは7セグメント表示器を学習させてみましょう。neurallearn.cを動かしてみます。

![kekka1.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/85164d93-f574-c8db-b18f-70cdce6f3cd7.png)
　　 図2：コンソール上の表示結果1

上記のような表示結果が出てくると思います。本当に学習出来ているのか疑問に思う所ではありますが、学習結果はkekka1.csv、kekka2.csv、kekka3.csv、kekka4.csvに書き込まれていますので問題ありません。

#結果
次にneuralfuture.cを動かしてみます。

![kekka2.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/6546543e-664c-4d8a-a15c-1400c9878246.png)
　　 図3：コンソール上の表示結果2

入力値を設定してくださいと聞かれるので表2の入力パターンから好きなものを入れてみましょう。ここでは全ての入力に0を設定してみる事にします。

![kekka3.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/fc8a7e75-1d4e-5a17-2832-f72f98494a8c.png)
　　 図4：コンソール上の表示結果3

出力値を見ると表2と同様、y[6]以外は1に限りなく近い値が表示されている事が分かりますね。こんな形で全ての入力パターンを試してみると表2と同じ出力パターンが得られると思います。NNが7セグメント表示器を学習した証です。ここでは参考として自分が動かしてみた結果を載せます。

　 　　　　　　　　　　　　表4：学習させた7セグメント表示器の入出力結果![kekka5.PNG](https://qiita-image-store.s3.amazonaws.com/0/137627/286b0db8-5514-98d9-492f-d44288f4c254.png)

※プログラムを動かしてみたが、表4のような出力値が出てこなかった人はもう一度、学習から行ってみてください。学習前の結合荷重の値はランダムに設定されますので、設定された値によっては学習が途中であった可能性があります。


#むすび
今回は5層NNを用いて7セグメント表示器を学習させてみました。NNを扱うのはひさしぶりでしたが、アルゴリズムの変更も含め、最後の学習まで出来て良かったです。次はこの5層NNを相場に適用してみようかなと考えています。オーバーフィッティング改善を目指してまたいろいろ試してみようと思っていますので、よろしくお願いします。
unfoldrが分かった!!! #Haskell

unfoldrが今まで全く分からなかったけど, やっとの事で理解できたので説明します.

## unfoldrとは

これの説明が割と面倒なんですが, ざっくり言えば"もろもろの条件からリストを生成しますよ"的なやつです.
多分下手に文字で説明するより実際のコードを見た方が早いです.

今回は[この記事](http://qiita.com/Tatsuki-I/items/75b28a17419956ea6f8d)で作った選択ソートを用いて説明したいと思います.

## 選択ソートとは

一応選択ソートの説明をしておきます.

選択ソートは,

1. 未整列リストの最小値を整列済みリストの最後尾に移動させる
2. 未整列リストに対して1の処理を再帰的に行う

というソートアルゴリズムです.

## 実際にやってみた

ではまずお馴染みの, 関数の型調べから始めたいと思います.
GHCiを開いてunfoldrの型を調べてみます.

```
> import Data.List
> :t unfoldr
unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
```

はい, だいぶ面倒くさそうな型が出てきましたね.
順番に見ていきましょう.

まずは第1引数の `b -> Maybe (a, b)` です.
これは, 何らかの型 `b` を引数に取り, `Maybe (a, b)` というタプルを返す関数です.

次に第2引数.
これは簡単ですね. 第1引数に出てきた `b` と同じ型です.

最後に返す型です.
第1引数に出てきた `a` と同じ型のリスト, `[a]` です.

纏めましょう.
unfoldr関数は, "何らかの型 `b` を引数に取り, `Maybe (a, b)` というタプルを返す関数"と, "`b`"を引数に取り, "`a` のリスト"を返す関数です.

そしてunfoldr関数が実際に行う処理ですが, 第1引数の関数が `Nothing` を返すまで繰り返し, `Maybe (a, b)` の `a` を順に連結したリストを返します.

今回はunfoldrを用いた選択ソートを作る為に, この実装を

1. 未整列リストを, 最小値と最小値を除いたリストに分ける関数を作る
2. 1の関数を用いてunfoldrで整列済みリストを生成

という流れで処理を行うように実装したいと思います.

まずはリストを分ける関数です

```hs 
separateMinimum :: Ord a => [a] -> Maybe (a, [a])
separateMinimum []   = Nothing
separateMinimum list = Just (x, xs)
    where
        x = minimum list
        xs = delete x list
```

以上のように定義することができます.

これで, 後はunfoldr関数にこの関数を渡すだけです.

```hs 
selectionSort :: Ord a => [a] -> [a]
selectionSort = unfoldr separateMinimum
```

はい, これで完成です.

専用の独特な型の関数が必要だという点が少しとっつきにくくなっている要因なのではないかと思います.
やっぱり型を見る事は大事ですね!

## おまけ

10進数を2進数に変換するやつ作ってみました.

```IntToBin.hs 
import Data.List

intToBin :: Int -> Int
intToBin = (read . concat . map show) . reverse . unfoldr (\x ->
        if x == 0
                then Nothing
                else Just (mod x 2, div x 2))
```
luigiでsparkJobを管理する

# 背景

Luigiが、HadoopJobの管理で使えるから使っていたけど、sparkもLuigiで管理できないかと思って調べてみた

# 前提

今までこのようにJobを走らせていたとする。 test_spark.pyはSparkを実行するCode

引数でInputとOutputのDirを指定できるようにしている。

```
spark-submit --master yarn --deploy-mode client --executor-cores 4 --driver-memory 4g --executor-memory 4g --num-executors 20 test_spark.py s3://test/input s3://test/output
```

# 使うもの

SparkSubmitTask

```python:SparkSubmitTask_test.py
import luigi
from luigi.s3 import S3Target
from luigi.contrib.spark import SparkSubmitTask, PySparkTask


class PySparkTest(SparkSubmitTask):

    driver_memory = '4g'
    executor_memory = '4g'
    executor_cores = 4
    num_executors = 20
    deploy_mode = 'client'

    app = 'test_spark.py' # 実際にSubmitされるsparkコードを指定

    def app_options(self): #これは、spark_test.pyへの２つの引数
        return [self.input().path, self.output().path]

    def input(self):
        return S3Target('s3://test/input')

    def output(self):
        return S3Target('s3://test/output')


if __name__ == '__main__':
     luigi.configuration.LuigiConfigParser.add_config_path('client.cfg')
     luigi.run(main_task_cls=PySparkTest)

```

実行は、`python SparkSubmitTask_test.py`普通のluigiJobのSubmitと同じである。

これで、周期的にSparkを走らせることも可能になった。sparkの中身をすべて切り分けておけるので、便利である。

# おまけ

もう一つ紛らわしいが、`PySparkTask`というModuleもある。こちらｈ，SparkSubmitTaskに近いが、Sparkコード自体をmainの中に書いて、Luigiコード自体をSubmitする形でSparkJobを呼ぶ（はず）

# 参考

https://github.com/spotify/luigi/blob/master/examples/pyspark_wc.py
PythonでCSVファイルを転置する その1

お手軽にCSV転置
何行くらいかかるかと思って書いてみた

```py3:csvt.py
# -*- coding: utf-8 -*-
import sys
import numpy
fin = open(sys.argv[1], "r")
fout = open(sys.argv[2], "w")
for line in numpy.array([s.strip('\n').split(',') for s in fin]).T:
    fout.write(",".join(line) + "\n")
fin.close()
fout.close()
```

```shell-session:実行
python csvt.py in.csv out.csv
```

```shell-session:in.csv
1,2,3
4,5,6
7,8,9
```

```shell-session:out.csv
1,4,7
2,5,8
3,6,9
```

[続きます。](http://qiita.com/tak/items/9356df1b587031c668f8)
DynamoDBのサンプルをcliで作成する

## About
[AWSのドキュメント](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SampleData.CreateTables.html) にDynamoDBのテーブルを作成するものがあるが、マネジメントコンソールから作る例しか見当たらなかったので、cliから作る例を貼っておく。すでにあったら消すかも

## 実行方法

```
$ aws dynamodb create-table --cli-input-json file://product_catalog.json
```

のようにjsonを指定する

## ProductCatalog

```json
{
    "AttributeDefinitions": [
        {
            "AttributeName": "Id",
            "AttributeType": "N"
        }
    ],
    "TableName": "ProductCatalog",
    "KeySchema": [
        {
            "AttributeName": "Id",
            "KeyType": "HASH"
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
    }
}

```

## Forum


```json
{
    "AttributeDefinitions": [
        {
            "AttributeName": "Name",
            "AttributeType": "S"
        }
    ],
    "TableName": "Forum",
    "KeySchema": [
        {
            "AttributeName": "Name",
            "KeyType": "HASH"
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
    }
}

```

## Thread

```json
{
    "AttributeDefinitions": [
        {
            "AttributeName": "ForumName",
            "AttributeType": "S"
        },
        {
            "AttributeName": "Subject",
            "AttributeType": "S"
        }
    ],
    "TableName": "Thread",
    "KeySchema": [
        {
            "AttributeName": "ForumName",
            "KeyType": "HASH"
        },
        {
            "AttributeName": "Subject",
            "KeyType": "RANGE"
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
    }
}

```

## Reply

```json
{
    "AttributeDefinitions": [
        {
            "AttributeName": "Id",
            "AttributeType": "S"
        },
        {
            "AttributeName": "ReplyDateTime",
            "AttributeType": "S"
        },
        {
          "AttributeName": "PostedBy",
          "AttributeType": "S"
        },
        {
          "AttributeName": "Message",
          "AttributeType": "S"
        }
    ],
    "TableName": "Reply",
    "KeySchema": [
        {
            "AttributeName": "Id",
            "KeyType": "HASH"
        },
        {
            "AttributeName": "ReplyDateTime",
            "KeyType": "RANGE"
        }
    ],
    "GlobalSecondaryIndexes": [
        {
            "IndexName": "PostedBy-Message-Index",
            "KeySchema": [
                {
                    "AttributeName": "PostedBy",
                    "KeyType": "HASH"
                },
                {
                    "AttributeName": "Message",
                    "KeyType": "RANGE"
                }
            ],
            "Projection": {
                "ProjectionType": "ALL"
            },
            "ProvisionedThroughput": {
                "ReadCapacityUnits": 1,
                "WriteCapacityUnits": 1
            }
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
    }
}

```
さくらVPS(Cent OS6)にGitlabをインストールする③Gitlabをインストースしたらsshでログインできなくなった

Gitlabを無事インストールして、起動＆反映したら、
sshでログインできなくなったというお話。

原因はおそらく以下っぽい。。。？

・GitlabとApacheのポート番号80が競合しているから？
・IP制限がかかってしまっている（Gitlabの初期設定？）


sshでもSFTPでも入れないし、どうしたものか。


とりあえず、さくらVPCの管理画面のコンソールから入って
[/etc/ssh/sshd_config]のポート番号にデフォルトの22を追加した。

あと、sshでのIP制限を解放する記述を追加した。
[/etc/hosts.allow]の中に
`sshd : all`
を追加。

※ちなみに[/etc/hosts.allow]は、空っぽのファイルで特に何も記述がなくて、
Gitlabをインストールしたから、という理由でもなさそう。。。？

サーバーって難しい！

上記の２つを実施したら、sshでログインできるようにはなったけど、
sshの22番を開けとくのはセキュリテイ的によくないっぽいし、どうしたものか。
scrollViewと同階層にあるけど見た目はscrollView上に乗っかっているsubView



### 開発環境

+ XCode9beta3
+ Swift4

やりたかったのはscrollViewを動かしても連動せず、画面上の相対位置を維持するオブジェクトを用意する事で、思えば今まで作った事なかったなあと思っていざ実装！と意気込んだもののあっさりと実現してしまってちょっと色々足してみたのがこちらです。

![20170719.gif](https://qiita-image-store.s3.amazonaws.com/0/40693/932c0073-1bfa-131b-80d6-c11f9424d3f1.gif "20170719.gif")


ソースはこちら
[SubPanelSample](https://github.com/rnsm504/SubPanelSample)


StoryBoardで、登場した頃に比べ格段に使いやすくなったAutoLayoutでそれぞれを配置するだけです。scrollViewを先に配置した後で、subView（画像でのSubPanel）を配置しようとするとすぐscrollViewの上に乗ってしまうので、配置時に注意するか、後でConstraintsを調整します。

![スクリーンショット 2017-07-20 23.56.23.png](https://qiita-image-store.s3.amazonaws.com/0/40693/aff28881-a234-ffa3-008d-0f01e8f5e727.png "スクリーンショット 2017-07-20 23.56.23.png")

scrollViewとsubPanelのデータのやり取りはKVOを利用してます。下記リンクのkvoModelの作り方をそのまま使わせて貰ってます。scrollViewをタップしたpointをSubPanelに表示し、SubPanelのchangeを押すと、scrollViewのラベルのテキストを書き換えるという、お互いからのイベントを受け取って対応しています。
[SwiftでKVOを使って堅牢なMVCを実現するサンプル](http://qiita.com/osamu1203/items/5f49dd6787f86e6c61d3)
[Pythonによる科学・技術計算] 対数グラフ，可視化，matplotlib

matplotlibのset_xscale とset_yscaleに'log'を指定することで片対数および両対数グラフを描くことができる。
例として $ y = e^{2x+1}$をプロットする。



```py3



import numpy as np
import matplotlib.pyplot as plt
"""
対数グラフ
"""

x = np.arange(0.001, 10, 0.1)

y = np.exp(2*x+1) # プロットする関数

plt.plot(x, y)

ax = plt.gca()
ax.spines['top'].set_color('none')

##
ax.set_yscale('log')  # メイン: y軸をlogスケールで描く
#ax.set_xscale('log')
##
plt.title('single logarithmic plot') 
plt.xlabel('X',fontsize=18)
plt.ylabel('Y',fontsize=18)

plt.grid(which="both") # グリッド表示。"both"はxy軸両方にグリッドを描く。

plt.show()
```
###結果(1):片対数グラフ

![t.png](https://qiita-image-store.s3.amazonaws.com/0/192457/6965f512-b21b-edff-53c2-76c4997e5ad4.png)


###結果(2):両対数グラフ
以下のように，x軸もlogスケールに指定することで両対数グラフを描くことができる。

```py3
ax.set_yscale('log')  # y軸をlogスケールで描く
ax.set_xscale('log')  # x軸をlogスケールで描く
```
![tt.png](https://qiita-image-store.s3.amazonaws.com/0/192457/345ffca1-56ae-12dc-ab7d-112c345c02b6.png)
ARGVってなに？

#はじめに

おお、入力できた・・・！けどエーアールジーブイってなに？と思ったので忘備録に。

##基本情報
略称：ARGV
正式名称：argument vector
カタカナ的な読み方：アーグヴイ

##ARGVとは？
配列オブジェクト。コマンドラインに入力したデータを、スクリプトの引数として渡すことができる。
（引数は文字列要素として渡されるが、to_iメソッドを使って変数にすることもできる。）


#簡単な例

##Rubyファイル
``` ruby:name.ruby
firstName = ARGV[0]
familyName = ARGV[1]
print "I'm\s", firstName, "\s", familyName, "!\n"
```
ファイル名は、name.rubyとします。

##実行
```text:command
ruby name.rb Hanako Yamada
```
"ruby [ファイル名] [０番目の引数] [1番目の引数]" です。引数は半角スペースで区切ります。

##結果
```
I'm Hanako Yamada!
```

###ちなみに

ARGVはお作法こそ異なるものの、基本的にはphpやc++でも同じ概念があり、意外とコマンドラインで普段からお世話になっていたことがわかりました。

#参照した記事
[「基礎からわかる！Rubyで標準入力を扱う方法（複数行、配列）」](http://www.sejuku.net/blog/14078)
[「もう一度基礎からC言語」](https://www.grapecity.com/tools/support/powernews/column/clang/028/page02.htm)
[BUKURO.swift]人工知能を実装する「意味ネットワーク」

<p>知能を製作するためには、いろいろな道がある。</p>

![知能.jpeg](https://qiita-image-store.s3.amazonaws.com/0/12540/3fbe9b02-14d2-bfa0-1cb8-7ba02de5fdd3.jpeg)

<p>知識表現は様々。人工知能の研究の歴史は知識表現の歴史といってもいい？</p>

![知識表現.jpeg](https://qiita-image-store.s3.amazonaws.com/0/12540/636ce930-0c97-1fdb-99f4-23685a464d18.jpeg)

<p>意味ネットワーク</p>

![意味ネットワーク.jpeg](https://qiita-image-store.s3.amazonaws.com/0/12540/fdf98526-3af4-0e2c-ff15-87ba7161cd55.jpeg)

<p>これを実装の観点から生まれたのが？フレーム・システムかな？</p>

![フレームシステム.jpeg](https://qiita-image-store.s3.amazonaws.com/0/12540/54d612ab-b958-ad22-6cbc-3fd556bc52e8.jpeg)

ソースコード
GitHubからどうぞ。<br />
<a href="https://github.com/murakami/workbook/tree/master/mac/Semantic">https://github.com/murakami/workbook/tree/master/mac/Semantic</a> - GitHub<br />

関連情報
<a href="https://amazon.jp/dp/4875931662">Turbo Cによる人工知能</a><br />
<a href="https://cocoa-study.connpass.com">Cocoa勉強会 BUKURO.swift (connpass)</a><br />
<a href="https://connpass.com/series/499/">Swift勉強会 関東 (connpass)</a><br />
<a href="https://atnd.org/groups/cocoa-study">Cocoa勉強会 BUKURO.swift (ATND)</a><br />
<a href="https://mosa.connpass.com">MOSA BUKURO.swift (connpass)</a><br />

【Cocoa練習帳】
<a href="http://www.bitz.co.jp/weblog/">http://www.bitz.co.jp/weblog/</a><br />
<a href="http://ameblo.jp/bitz/">http://ameblo.jp/bitz/</a>（ミラー・サイト）<br />
<a href="https://t.co/6P3h2jtbRk</a>note<br />
[Pythonによる科学・技術計算] ヒストグラム，可視化，matplotlib

matplotlibを用いてヒストグラム(棒グラフ)を作成する。
オプション等についての詳しい説明は[ここ](https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.hist.html)(英語)にある。

```py3

import numpy as np
import matplotlib.pyplot as plt

data_lis=[2.4,5.1,1.0,8.0,12.0,22.0,15.0,9.0,12,19.4,21.2,2.3]# サンプルデータ

fig=plt.figure()
ax=fig.add_subplot(111)

ax.hist(data_lis, range=(0,20),bins=5) # [0,20]の範囲で5等分した棒グラフの作成

plt.show()

```

###結果
![t.png](https://qiita-image-store.s3.amazonaws.com/0/192457/c6d38833-a8ac-4b4c-ebc4-ca109c069bf2.png)
Oracle12cでimpdb,expdbコマンドを実行する

#始めに
oracleに新規ユーザーを追加した後、impdp,expdbができるところまで必要最低限のコマンドをまとめてみました

#前準備
以下の作業はsysdba権限でsqlplusにログインして行う
1.tripleというユーザーを作成する
`create  user triple IDENTIFIED BY "triple";`
2.backup_dirというディレクトリオブジェクトをC:\oralce\dataに割り当てる
`create or replace directory backup_dir as 'C:\oralce\data';`

#データをエクスポートする
エクスポートはコマンドを実行するだけ
`expdp admin/admin directory=backup_dir dumpfile=test.dmp;`

#データをインポートをする
##下準備
インポートコマンドするためには色々権限の付与が必要
`grant imp_full_database to  triple;`
`grant create any table to triple;`
`alter user triple quota unlimited on triple_tb;`
ついでに表領域をデフォルトのsystemから自前で作成した表領域に割り当てる
`alter user triple quota unlimited on triple_tb;`

##コマンドの実行
ついでにテーブルのスキーマをadminからtripleへ変更する
`impdp triple/triple@triple_pb directory=backup_dir dumpfile=test.dmp remap_schema=admin:triple`
こんな感じで実行できた
```. . "TRIPLE"."WORD_DICTIONAY"                   53.86 MB  325367行がインポートされました
. . "TRIPLE"."PARKINGATTIME"                    18.83 MB  419999行がインポートされました
. . "TRIPLE"."WEBPAGE_WORD"                     173.8 KB    1731行がインポートされました
. . "TRIPLE"."EMP"                              5.531 KB       3行がインポートされました
```