OmniAICreator/Qiita-1.07M huggingface dataset:
AWS Cloud9でASP.NET Coreを使ってみる

# はじめに
AWS Cloud9で.NET Coreを使う方法は以下で紹介されています:point_down::point_down::point_down:

[AWS Cloud9 ユーザーガイド：AWS Cloud9 の .NET Core サンプル](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/sample-dotnetcore.html)
[Qiita：Amazon Cloud9 で .NET Core を動かしてみた](https://qiita.com/yossy6954/items/753f1a76b3ae958beff8)

じゃあこの延長で、「ASP.NET Coreはどうやるんだろ:thinking:？」と思って調べてみました。

# .NET Core 2.1 SDKのインストール
上記の「AWS Cloud9 ユーザーガイド」の手順どおり、Cloud9の環境を作成して.NET Core 2.1 SDKをインストールします。2018年11月時点では`2.1.403`が`Current`かつ`LTS`なのでこちらをインストールしておきます。
![dotnet-core-sdk-for-linux-x64.png](https://qiita-image-store.s3.amazonaws.com/0/80632/555a4bf7-e42a-aefa-252e-8c037a7aaa09.png)

![aws-cloud9-install-dotnet-core.png](https://qiita-image-store.s3.amazonaws.com/0/80632/c4610a0e-ff37-c644-dd1a-c068bdd8d0cb.png)

# ASP.NET Core アプリの作成
dotnet new コマンドでRazor ページのテンプレートを使ってアプリケーションを作成します。

```
dotnet new razor -o RazorApp1
```

![aws-cloud9-new-dotnet-core.png](https://qiita-image-store.s3.amazonaws.com/0/80632/0a4a916d-78d2-caaf-1ea9-6e79071b309e.png)

# ASP.NET Core アプリの実行

dotnet run コマンドでアプリケーションを実行します。

```
cd RazorApp1
dotnet run
```

ですが、アプリケーションをプレビューしようとしても表示されません。
![aws-cloud9-preview-dotnet-core.png](https://qiita-image-store.s3.amazonaws.com/0/80632/0ddef90a-42e5-d742-e5b2-e0fea8acbdf3.png)

これは以下のページ記載されている

>IDE 内からアプリケーションをプレビューするには、まずポート 8080、8081、または 8082 を経由して、IP 127.0.0.1、localhost、または 0.0.0.0 で HTTP を使用して、AWS Cloud9 development environment で実行している必要があります
[AWS Cloud9 ユーザーガイド：AWS Cloud9 Integrated Development Environment (IDE) で実行中のアプリケーションをプレビューする](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html)

に沿ってアプリケーションを実行していないのが原因です。解決するにはRazorApp1/Properties/launchSettings.jsonの`applicationUrl`を修正する必要があります。

```
"applicationUrl": "https://localhost:5001;http://localhost:5000",
```

と設定されているのを以下に変更します。

```
"applicationUrl": "http://localhost:8080",
```

変更後に再度dotnet run コマンドでアプリケーションを実行してプレビューすると表示されます。
![aws-cloud9-preview-dotnet-core-2.png](https://qiita-image-store.s3.amazonaws.com/0/80632/97fda6c2-64c0-e047-67f6-528c3c6bbdd2.png)

# ASP.NET Core アプリの実行（その２）
上記のようなIDE内のプレビューだけでなく、以下の方法でアプリケーションを確認するケースも試してみます。

[AWS Cloud9 ユーザーガイド：実行中のアプリケーションをインターネット経由で共有する](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html#app-preview-share)

まず上記のステップ２「インスタンスのセキュリティグループを設定する」で記載されているように、Cloud9で使用しているEC2インスタンスのセキュリティグループのインバウンドにポート8080でHTTP通信を追加します。
![aws-cloud9-add-security-group.png](https://qiita-image-store.s3.amazonaws.com/0/80632/8a397cd9-0a46-6d4d-57bc-93384a59acc8.png)

同じようにステップ３「インスタンスのサブネットをセットアップする」も設定しておきます。（もしかするとデフォルトで設定されているかも）
![aws-cloud9-add-subnet.png](https://qiita-image-store.s3.amazonaws.com/0/80632/18ed8b42-b940-57bd-6f4a-6ee6a9aa1b90.png)

最後にステップ４「実行中のアプリケーションの IP を変更する」を設定します。アプリケーションのURLをEC2のプライベートIPにしておきます。

```
"applicationUrl": "http://[プライベートIP]:8080",
```

これで完了です。あとはブラウザにアプリケーションのURLとして`http://[パブリック IP]:8080`と入力すれば他のブラウザからでもアクセスできます。お決まりですが、パブリック IPはElactic IPで固定しておくと便利です。

# まとめ
現時点でCloud9ではデバッグやコードヒントが使えないので開発環境として使うならVisual Studio Codeが良さげですが、.NET Coreを利用するまでやアプリケーションのプレビューも簡単に設定できるので今後の展開に期待したいです。
UINavigationControllerのLeftBarButtonItemにカスタムボタンを設置してもスワイプで戻る方法

UINavigationControllerの左側にボタンを設置すると、画面左端からのスワイプで戻る機能がOFFになってしまいます。

```swift
self.navigationController!.interactivePopGestureRecognizer?.enabled = true
```

としてもスワイプで戻ることはできません。

そんな時は、

```swift:ViewController.swift
class ViewController: UIViewController, UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 左端スワイプで戻るために必要
        self.navigationController?.interactivePopGestureRecognizer?.delegate = self
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        // 画面を破棄する前にdelegateを初期化
        self.navigationController?.interactivePopGestureRecognizer?.delegate = nil
    }
}
```

のようにすればデフォルトのinteractivePopGestureRecognizerの機能が復活します。
任意の環境から別環境へDBの全データをコピーする（WebUI用のコード）MySQL編

注）MySQL専用
管理ツールなどのWebUIで任意の環境から全データを別環境にコピーするような画面を作る時に使うコード
Laravel用のコードになっているので他で使う場合はDBクラスの部分を書き換えて。
※なおエンジニアが手動でコピーするならダンプ・リストアで終わりなので参考にならない。

用途
・開発環境がたくさんあってデータを統一するために
・開発環境から本番環境にデータ反映

# コード

[xxxx]の部分はリクエストパラメータに置き換えてください。

```php
$master_data_schema = '[マスターデータのスキーマ名]';
$conn_in = '[コピー元DBの接続文字列]';
$conn_dest = '[コピー先DBの接続文字列]';

$bulk_insert_chunk = 1000;
$table_exclude = [
    'テーブル名' => true,  // 除外したいテーブル名を配列のKEYにして設定しておく（issetでチェックしたいのでこの形式）
];

$table_list = [];
$column_list = [];
$master_data = [];
$tmp = DB::connection($conn_in)
    ->table('information_schema.tables')
    ->where('table_schema', $master_data_schema)
    ->get([
        'table_name',
        'table_comment',
    ]);
foreach ($tmp as $v) {
    $a = (array)$v;
    if (!isset($table_exclude[$a['table_name']])) {
        $table_list[$a['table_name']] = $a;
    }
}
$tmp = DB::connection($conn_in)
    ->table('information_schema.columns')
    ->where('table_schema', $master_data_schema)
    ->get([
        'table_name',
        'column_name',
        'column_type',
        'column_comment',
    ]);
foreach ($tmp as $v) {
    $a = (array)$v;
    if (!isset($table_exclude[$a['table_name']])) {
        $column_list[$a['table_name']][$a['column_name']] = $a;
    }
}
foreach ($table_list as $v) {
    $a = (array)$v;
    $count = 0;
    $chunk = 0;
    $tmp = DB::connection($conn_in)
        ->table($master_data_schema . '.' . $a['table_name'])
        ->orderBy('id')
        ->get(['*']);
    foreach ($tmp as $v2) {
        $d = (array)$v2;
        if ($count > $bulk_insert_chunk) {
            $count = 0;
            ++$chunk;
        }
        $master_data[$a['table_name']][$chunk][] = $d;
        ++$count;
    }
}
try {
    $table_name = null;
    DB::connection($conn_dest)->transaction(function () use (
        &$conn_dest,
        &$table_list,
        &$master_data,
        &$table_name,
        &$master_data_schema
    ) {
        foreach ($table_list as $v) {
            $table_name = $v['table_name'];
            DB::connection($conn_dest)->table($master_data_schema . '.' . $v['table_name'])->delete();
            if (isset($master_data[$v['table_name']])) {
                $insert_data = $master_data[$v['table_name']];
                foreach ($insert_data as $data) {
                    DB::connection($conn_dest)->table($master_data_schema . '.' . $v['table_name'])->insert($data);
                    unset($data);
                }
                unset($insert_data, $master_data[$v['table_name']]);
            }
        }
    });
} catch (Exception $e) {
    $sql_error = true;
    // エラー画面で表示する情報
    $error_table_name = $table_name;
    $error_message = explode(PHP_EOL, $e->getMessage())[0] . ' ...';
}
```
VR体験プロジェクトのスケジュール

#概要
僕は"確実なスケジュールがなければ、プロジェクトは成功できません。"というふうに考えています。
    僕たちがVR体験プロジェクトを開発する時間は２週間しかありませんので、    時間や作業を管理することが大切だと思いますが、今回このVR体験プロジェクトについて僕たちがどうやって管理したのか、経験を皆さんに共有したいと思います
是非ご意見やご提案をお願いします。
Twigで配列から値を検索する

忘れてたのでメモとして

twig内でphpでいうところのin_arrayやarray_searchな判定をしたい！という場合は`in` を使うとよろしい。
https://twig.symfony.com/doc/2.x/templates.html#containment-operator

## やりたいこと
配列の中に値があるか判定したいみたい。

```
phpの場合

$item = 'b';
$array = ['a','b','c'];

foreach($array as $a ){
  if($a === $item){
     echo 'あるっす';
  }
}
echo '無いっす';

```

これをTwigで書く時は以下のようにすると実現できる。

```
twigの場合

{{ item in array ? 'あったわ':'無いわ' }}
```


正直あまり使わないからすぐ忘れるのよね。。。
全くのゼロから始めるボードゲームのプログラミングと機械学習 [1日目]

#前回の振り返り
[全くのゼロから始めるボードゲームのプログラミングと機械学習 [0日目]](https://qiita.com/Coshian23/items/48c42a059b54d8d2de6d)

- 本プロジェクトを開始するにあたった経緯・モチベーションなど
- スタートラインの状況（まったくもってゼロ）
- Qiitaはじめました

特に具体的な話などはなくざっくりと抱負を語ったぐらいな内容でした。

#目下の目標
まずは「ボードゲームをプログラミングする」を目指します。具体的な内容に落とすと**「Pythonでカルカソンヌを再現する」**になります。
カルカソンヌというボードゲームについては一旦詳細は省かせていただきます。ひとまず自分が一番好きなボードゲームであるとだけお伝えいたしましょう。

とはいえPython自体も触ったことがない自分ですので、まずは下記の書籍に沿ってPythonでのゲーム制作について学んでいきたいと思います。
[Pythonゲームプログラミング入門：Will McGugan著](https://www.amazon.co.jp/Python%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-Will-McGugan/dp/4048704397/ref=sr_1_14?s=books&ie=UTF8&qid=1540967866&sr=1-14&refinements=p_n_feature_seven_browse-bin%3A3232405051)
![51e2zr5LubL._SX386_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/308584/3824f727-47ec-b3e6-d944-32aa5927a5b3.jpeg)
なんとこの書籍、2011年発行なのです。発売当時に買ったのですが積んだままとなっており7年越しのスタートとなりました。正直7年という歳月は技術的な変化が大きいと思われるため不安もあるのですが、ゲームという枠組み自体は今も昔も大きくは変わらないはずですのでせっかく買ったこの本を使っていきたいと思います。

#環境準備
なにはともあれPythonをインストールしなければ始まりません。

- 個人PCのwindows10へインストールする
- Chrome拡張機能としてPythonをインストールする
- Google Colaboratoryを利用する
- AWS Cloud9を利用する

アドレスフリーなクラウド環境の後者2つに惹かれましたが、今のところ継続的な開発は行いそうにないため前者2つを選択いたしました。windowsへのインストールは公式サイトからDLするだけです。Chrome拡張は下のストアからインストールできます。
[chrome ウェブストア：Python](https://chrome.google.com/webstore/detail/python/nodpmmidbgeganfponihbgmfcoiibffi)
ほんとの基本勉強レベルの単純なコマンド実行ぐらいであればこれで事足りそうな気がします。

#今後の予定
1. ボードゲームをプログラミング
    2. Pythonの基礎勉強　👈
2. ボードゲームのAI作成
3. 機械学習によるAI強化

pygameを使ってのゲーム作りや機械学習へ向かう前に、まずは泥臭くPythonの基本から勉強してまいります。それこそHello world!レベルから……

#今回の振り返り
- やったこと
    - 具体的な方針決め
    - 埋もれていた参考初期の掘り出し
    - Pythonのインストール
- わかったこと
    - Pythonの開発環境はいろいろと選択肢がある
    - Chromeの拡張でPythonが書ける
- つぎにやること
    - Pythonについて基本から勉強
    - 参考書の内容チェック
    - 勉強の計画を立てる
コルーチンでIEnumeratorを直接 yield return をするのと MoveNext の違い

Unityのコルーチンで、`yield return`で待つ方法と `MoveNext() & Current`で待つ２つのパターンがある。
どう違うのかを検証してみた。

# 先に軽い結論
どうやら完了時までの最低経過フレーム数で差が出る

# 検証してみる
実際に両方のテストコードを書いて実行してみた

## 前提知識
__Time.frameCount__
 - 実行してから現時点まで経過フレーム数を取得できる。
 - コルーチンを呼ぶ前と後でこいつをログで表示して経過フレーム数を測定する。

## 検証コード
```.cs
using System.Collections;
using UnityEngine;

// コルーチン実行テスト
public class TestMain : MonoBehaviour {

	void Start ()
	{
		// yield return の実行テスト
		//StartCoroutine(TaskForYieldReturn()); // --- (1)

		// .MoveNext の実行テスト
		//StartCoroutine(TaskForMoveNext()); // --- (2)
	}
	// 直接yield return の実行テスト
	private IEnumerator TaskForYieldReturn()
	{
		Debug.Log($"START : [ {Time.frameCount} ]");

		yield return StartCoroutine( SubTask() );

		Debug.Log($"END : [ {Time.frameCount} ]");
	}

	// .MoveNext の実行テスト
	private IEnumerator TaskForMoveNext()
	{
		Debug.Log($"START : [ {Time.frameCount} ]");

		var e = SubTask();
		while(e.MoveNext()) { yield return e.Current; }

		Debug.Log($"END : [ {Time.frameCount} ]");
	}

	// 遅延処理がないコルーチン
	private IEnumerator SubTask()
	{
		Debug.Log($"SubTask : [ {Time.frameCount} ]  ");
		yield break;
	}
}

```

### 実行手順
- 上のプログラムを適当な空の`GameObject`に`AddComponent`する
- 直接 `yield return` のテストをする場合：Start関数内の`---(1)` の行コメントアウトを外して実行する
- `.MoveNext` のテストをする場合：Start関数内の`---(2)` の行コメントアウトを外して実行する

# それぞれの実行結果
## 直接`yield return`の実行結果
![SS 2018-11-01 12.06.19.JPG](https://qiita-image-store.s3.amazonaws.com/0/275813/68e87e76-b9d1-0343-d542-70fa57b72a00.jpeg)
STARTログからENDログの表示まで、１フレーム経過している

## `.MoveNext` の実行結果
![SS 2018-11-01 12.06.48.JPG](https://qiita-image-store.s3.amazonaws.com/0/275813/cc731c18-96cb-7403-7206-348cfc123b6e.jpeg)
STARTログからENDログの表示まで、同フレームで完了している


# 結論
完了タイミングが最低１フレームを待つかどうかの違い。
IEnumeratorで即座に完了するものがある場合は、`.MoveNext`のほうを使うと良い。

使い道としては、`Command`パターンなど、親クラスに `virutal IEnumerator Execute()` のようなコルーチンを継承先で `override` して、待たせる処理をする/しないの違いをさせる場合など。

# 余談
ちなみに、
`yield return SubTask();`
の部分は、
`yield return StartCoroutine( SubTask() );`
と書き直しても同じ結果だった
【Ubuntu】Ubuntu18.04.1 LTSにDockerをインストールする

【はじめに】
どうも初めまして。日本社会人2年目、機械学習エンジニア9ヶ月目の外人です。基本Qiitaは自分の勉強をためやります。基本前提としては情報共有です。

何卒宜しくお願い致します。

【環境】
VM:Oracle VM Virtual Box(※Workstationでも構いません。)
OS:Ubuntu18.04.1 LTS

【前提】
既にUbuntuはインストール済みなのでまだUbuntuを入れてない方はインストールして下さい。

【リポジトリ設定】
ちなみに始まる前に[Dockerのドキュメント](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository)に記載された方法でインストールします。

まずはパッケージをインストールおよびアップデートします。

```linux:command
sudo apt-get install && sudo apt-get update
```

アップデートが終わったら次はリポジトリからパッケージをインストールします。

```linux:command
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
```

DockerのオフィシャルGPG KEYを追加します。

```linux:command
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

追加したGPG KEYのフィンガープリントを確認します。

```linux:command
sudo apt-key fingerprint 0EBFCD88
```

最後にリポジトリを設定します。

```linux:command
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
```

これでDocker-CEのインストールの準備は終わりました。
次はいよいよインストールです。

【インストール】
まずはアップデートします。

```linux:command
sudo apt-get update
```

Docker-ceをインストールします。

```linux:command
sudo apt-get install docker-ce
```

ここまで問題無しにできたらオッケーです。
最後にちゃんとインストールできたのかを確認してみます。

```linux:command
sudo docker run hello-world
```

【まとめ】
これでDockerのインストールは無事に終わりました。
外から見ると簡単かもしれませんが意外とエラーとか発生すると困っている方々がいらっしゃると思うのでぜひこれを見て無事に成功出来たら幸いです。

次回はDockerにPython環境を入れます。

また来て下さい。
Ethereumの各テストネットの特徴まとめ

<h1>はじめに</h1>
自作のスマートコントラクトをテストする際に、どのテストネットを使えば良いのか迷ったので調査結果をシェア。

<h2>比較表</h2>

| |Ropsten |Kovan |Rinkeby |
|:-:|:-:|:-:|:-:|
|承認方法  |PoW |PoA |PoA |
|利用可能ノード  |geth, parityの両方 |parity |geth |
|コイン入手方法 | マイニング, faucet |faucet |faucet|
|ブロック生成間隔 |30秒 |4秒 |15秒 |
|必要なデータ容量 | 15GB(*1) | 13GB(*1) | 6GB(*1) |

(*1) 2018年4月時点

<h2>個人的な所感</h2>
個人的な所感として、使いやすいのはRopstenだが、データ容量を多く取るのがネック。データ容量を節約したいならRikebyを使った方が良さそう。ただし、本番環境と認証方法が違うのでここを意識しないといけない。また、ropstenは日本時間の夕方〜夜になるとレスポンスが大幅に遅くなる（欧米時間で朝を迎え、欧米ユーザーが起きる --> トランザクションをバンバン発行するようになる --> ブロックサイズが大きくなるから、と予想）ので、注意が必要。

<h2>詳細</h2>

<h3>Ropsten</h3>
<img width="1201" alt="Screen Shot 2018-11-01 at 12.46.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/308845/52efca45-6da1-d677-33cd-0b084722463d.png">

<h4>歴史</h4>
2016年11月からスタート。2017年2月にDOS攻撃を受けた後に回復するが、その結果同期スピードが遅くなってしまったという経緯がある。名前の由来はスウェーデンの首都にある地下鉄の駅名。

<h4>利用可能ノード</h4>
[geth](https://qiita.com/oggata/items/eea4d5e37f38785f6079)と[parity](https://qiita.com/Ragamuffine/items/12156789c3c377e2dd89)の両方で利用可能。なお、gethとparityどちらを利用した方が良いのか迷っている方は以下の記事を参照。参照：「[go-ethereum vs parity](https://qiita.com/Akira-Taniguchi/items/23d47330aa5aa3058aa0)」

<h4>テストコインをゲットする方法</h4>
ropstenのコインは以下の２種類の方法で入手できます。

- マイニング
    - [参考サイト](https://qiita.com/amachino/items/b59ec8e46863ce2ebd4a)
- faucet
    - 親切な人がテストコインを配ってくれています。[ゲット方法](https://qiita.com/tmikada/items/cdc5a3871f655cb7b67d)

<h4>エクスプローラー</h4>
https://ropsten.etherscan.io/

<h4>特徴</h4>
- 本番ethereと全く同様の環境が実現されているので、本番ethereumで動作するスマートコントラクトやDappsのテストをしたい時に活用できる。ただし、欧米の昼時間になるとブロックサイズが大きくなりすぎて同期に失敗する可能性が高まる（僕だけ？）
- 常に攻撃を受けている。その為、ネットワークが不安定なことが多い
	

<h2>Kovan</h2>
<img width="1207" alt="Screen Shot 2018-11-01 at 12.46.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/308845/37f91374-0407-9dd8-ce62-775ccb069de3.png">

<h4>歴史</h4>
2017年3月からスタート。parityチームが運営。parityでのみ利用可能。名前の由来はシンガポールにある地下鉄の駅名。

<h4>利用可能ノード</h4>
parityのみで利用可能

<h4>テストコインをゲットする方法</h4>
faucet 
 - [ゲット方法（英語サイト）](https://github.com/kovan-testnet/faucet)

<h4>エクスプローラー</h4>
https://kovan.etherscan.io/

<h4>特徴</h4>
- （運営側のノードが承認するトランザクションを決めているので）ハッキングに対する耐性が（Ropstenより）高い


<h2>Rinkeby</h2>
<img width="1195" alt="Screen Shot 2018-11-01 at 12.46.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/308845/ed6cdae2-bc58-9de1-ab16-c207314b798f.png">

<h4>歴史</h4>
2017年4月からスタート。gethでのみ利用可能。

<h4>利用可能ノード</h4>
gethのみで利用可能

<h4>テストコインをゲットする方法</h4>
- faucet [ゲット方法](https://faucet.rinkeby.io/)
- ※twitterで自分のアドレスをつぶやき、そのつぶやきのurlをサイトに貼るとETHがもらえる

<h4>エクスプローラー</h4>
https://rinkeby.etherscan.io/
Typoraで使うデフォルトのフォルダを変更する

# はじめに

MacOSで、Typora(0.9.9.19.1 (1301))を使用している。

Typoraを起動させて、作成したマークダウンの保存先が${HOME}/Documentsになっているので、任意のフォルダに変更したい。

# 手順

Typora > 設定 > 一般 > On Launchのプルダウンを**Open new file**　から、**Open custom folder**に変更し、任意の保存先を選択する。
LXDコンテナで固定IPアドレスを設定する方法

## 固定IPアドレスの設定

複数指定する場合は、eth0の部分をeth1, eth2...のように変更します。

```
$ lxc network attach lxdbr0 <コンテナ名> eth0 eth0
$ lxc config device set <コンテナ名> eth0 ipv4.address <IPアドレス>
$ lxc stop <コンテナ名>
$ lxc start <コンテナ名>
```

```lxc network attach lxdbr0 <コンテナ名> eth0 eth0```にはeth0が2つ登場しますが、どちらもコンテナに関連するもので、1つ目はホストから見た場合(lxd listコマンド等で表示される）のコンテナのインターフェース名、2つ目はコンテナ内から見た場合（コンテナ内でipコマンド等で確認できる）のインターフェース名です。

## 固定IPアドレスの解除

```
$ lxc config device remove <コンテナ名> eth0
$ lxc stop <コンテナ名>
$ lxc start <コンテナ名>
```

または、次のコマンドでも解除可能

```
$ lxc network detach lxdbr0 <コンテナ名> eth0
$ lxc stop <コンテナ名>
$ lxc start <コンテナ名>
```

## 設定済みの固定IPアドレスの確認

```
$ lxc network list-leases lxdbr0
```
XMLHttpRequestを使ったときのエラー

javascriptで現在のURLをもとにタイトルを取得しようとしたらエラーが出た。
その時のソースコードがこちら
<pre>

<!--現在のURLを取得-->
var checkurl = location.href;
<!--URLからタイトルを取ってくるためのとこ-->
function getTitle(url,callback)
{
	var tit=new XMLHttpRequest()
	tit.onload = function()
	{
		var title=this.responseXML.title||"notitle"
		callback(url,title)
	}
	tit.open("GET", url, true);
	tit.responseType="document";
	tit.send();
}
<!--コンソールログにタイトル名表示するための場所-->
getTitle(checkurl,consoleTitle)
function consoleTitle(url,title)
{
console.log(title);
};
</pre>
これをhtmlファイルのscriptタグの中に記入しgooglechromeで開くとコンソールログのほうでエラーが出ていた。
内容はセキュリティエラーのようだったのでコマンドプロンプトから以下を実行した。
cd C:\Program Files (x86)\Google\Chrome\Application
chrome.exe -allow-file-access-from-files
これで（多分）解決した。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ps.実際のエラーコードを載せておきます
<p>横書きver</p>
<pre>
pagelog.html:27 Access to XMLHttpRequest at 'file:///F:/%E5%8D%92%E6%96%B0%E3%83%91%E3%83%BC%E3%83%84/pagelog.html' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
</pre>
<p>改行ver</p>
<p>
pagelog.html:27 Access to XMLHttpRequest at 'file:///F:/%E5%8D%92%E6%96%B0%E3%83%91%E3%83%BC%E3%83%84/pagelog.html' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
</p>
MacOS XでdockerコマンドがCannot connect になる時の対処法

docker-toolboxを使って、docker環境構築している前提。

dockerコマンドを打ったときに、以下の様なCannot connect〜のエラーが発生する。

```
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

このエラーが出ている時は、DockerMachineの環境変数がMacに適用されていない時らしいので、

```
$ eval "$(docker-machine env default)"
```

を実行してあげると、dockerコマンドが通るようになる。
kotlinx.serializationの`serializer()`を使うと、ユニットテスト時に「Unresolved reference: serializer」エラーが出る

# Environment

- kotlin_version=1.3.0
- org.jetbrains.kotlin.native.version=0.9.3
- kotlinx.serialization=0.8.1-rc13
- プラグイン
  - kotlin-multiplatform
  - kotlinx-serialization

# 問題

1 . SharedCode内でkotlinx.serializationの`serializer()`メソッドを呼び出す。

```kotlin
@Serializable
data class Data(val a: Int, @Optional val b: String = "42")

fun hoge() {
  val dataSerializer = Data.serializer()
}
```

2 . SharedCode内のユニットテストを実行すると、以下のエラーが発生する。

```
Error:(22, 51) Kotlin: [SharedCode_androidMain] Unresolved reference: serializer
```

# 解決策は今のところわからず

以下のように、`::class.serializer()`を呼ぶように変更すると、SharedCodeのユニットテスト時はエラーが発生しなくなります。

```kotlin
val dataSerializer = Data::class.serializer()
```

ただし、iOS(Kotlin/Native)のアプリ実行時に以下のエラーが発生するので、解決策にはなりません。

```
Uncaught Kotlin exception: kotlin.NotImplementedError: An operation is not implemented: Obtaining serializer from KClass is not available on native due to the lack of reflection. Use .serializer()
```
VRチームのアイデア

#アイデア
プロジェクトの目的は「PC、スマホ操作に慣れていない人でも楽しめるプロダクトを製作する」です。だから、私たちのアイデアはVR体験をやりたいです。なぜなら、奥多摩の人たちは殆ど年寄りです。それで、多分、子供のころ、皆さんは他の国へ行きたいですけど、できない。また、今も行くことができない。VR体験で皆さんは他の場所に行くことができます。

私たちはインドネシアとフィリピンから来ました。だから、私たちは奥多摩日本語学校とインドネシアとフィリピンと奥多摩の有名な場所の場面を選びました。
ARゲームのゲーム仕方

#ゲームする方法

###1. ARカメラを使って、カードをスキャンします！
   
　**スタッフからのARカメラを使わないと絵が見えることができないのです。**

###2. 同じキャラを見つけてたら、カードを取ります！

      
###3. 時間内にすべてのペアを見つけたら、勝って、賞品をもらいます！



#ゲームモード：

###**１人**：タイムアタック！ 		
#####時間内にすべてのペアを見つけたら、勝ちます。

###２人：ペアーズバトル！		
#####時間内にたくさんペアを見つけたほうが、勝ちます。
準備：アセット(イメージ、３Dモデル)

本記事は通っている奥多摩日本語学校で作ているプロジェクトについて書きます。著作権とオススメ３Dモデルサイトについてを書きます。
___

##著作権
著作権（ちょさくけん、　英語: copyright／コピーライト）は、著作者の権利として「著作権」と「著作者人格権」という二種類があり、このうち著作権は著作者の財産的利益を保護する。See [Wikipedia](https://ja.wikipedia.org/wiki/%E8%91%97%E4%BD%9C%E6%A8%A9)

![Official Creative Commons' base](https://upload.wikimedia.org/wikipedia/commons/a/a3/Cc.logo.circle.svg)
By Creative Commons, fixed by Quibik - Official Creative Commons' base, Public Domain, https://commons.wikimedia.org/w/index.php?curid=1484324



３Dモデルは公的な著作権からの１つ、Creative Commons (CC) licenseというライセンスです。実は、CCは著作権で保護されている作品に適用されるライセンスです。作権とは別物ではなく、著作権で保護された作品を簡単に共有する方法です。
このライセンは著作権で保護されている作品の無料配布を可能にする。CC licenseの使う場は作者が自分の作品を他人を使う、シェアと作るためにCCあたりライセンスを使います。CCが
作者に柔軟性を提供します。例えば：彼らは自分の作品の非営利目的のみを許可することを選択するかもしれません。CCも著作者の著作物を使用または再配布する人々を、著作権の侵害の懸念から保護します。ただし、著作者が著作物を配布するライセンスに明記されている条件を遵守する限りです。
####CCライセンスタイプ
######１．Attribution (BY)
![Attribution (BY)](https://upload.wikimedia.org/wikipedia/commons/3/3c/Cc-by_new.svg)

これは、作者の作品を使っている人々が作者にそれを帰属させる必要があります。作品を変更する、うロップする、又は名前を自分のものに置き換えたりはダメです。この作品の作成者またはライセンサーであることを人々に知らせる必要があります。

######２．Share-alike (SA)
![Attribution (BY)](https://upload.wikimedia.org/wikipedia/commons/2/29/Cc-sa.svg)

他の人に自分の作品を使用したり変更したりできるようにしている限り、他の人があなたの作品を使用および変更できるようにします。

######３．Non-commercial (NC)
![Attribution (BY)](https://upload.wikimedia.org/wikipedia/commons/d/db/Cc-nc.svg)

商業目的で使用していない限り、作品を使用できます。

######４．No Derivative Works (ND)
![Attribution (BY)](https://upload.wikimedia.org/wikipedia/commons/c/c7/Cc-nd.svg)

元の著作物を変更する作品です。例えば：映画は小説の派生作品です。作品は派生作品ライセンスで共有されている場合は、作品を変更しない限り、作品を使用できます。 

私たち使っているのライセンスはCC0とCC-BYです。

##３Dモデルオススメサイト
-　[https://free3d.com/](https://free3d.com/) : 色々なファイルのフォーマットがあります。個人使用ライセンス
-　[https://assetstore.unity.com/](https://assetstore.unity.com/)：Unity公式サイト。EULAに基づいて法的手段で任意のゲームで自由に使用することができます
-　[https://sketchfab.com/](https://sketchfab.com/) :　無料のモデルは色々なライセンスとファイルフォーマットがあります

___
以上です。
足りない所若しくは間違ったところがあったら、コメントやフィードバックをお願い致します。
AWS CLIでEC2のスナップショットを作成、削除

# 手順
・AWS CLI のセットアップ
・コマンド叩いて作成、削除する
・そいつをcronで動かす

# AWS CLIのセットアップ
IAM ユーザのキーが必要なのでまずは
`認証情報タブ --> アクセスキーの作成 --> 新規アクセスキー`
csvのダウンロードをしておき
以下のコマンドでセットアップ

```
# aws configure
AWS Access Key ID [None]: Access key ID
AWS Secret Access Key [None]: Secret access key
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

# コマンドうにうに
スナップショットの作成

```
# aws ec2 create-snapshot --volume-id vol-xxxxxx --description "説明"
{
    "Description": "説明",
    "Encrypted": false,
    "VolumeId": "vol-xxxxxx",
    "State": "pending",
    "VolumeSize": 500,
    "Progress": "",
    "StartTime": "2018-11-01T02:10:40.000Z",
    "SnapshotId": "snap-000000000000",
    "OwnerId": "000000000"
}
```

スナップショットの削除

```
aws ec2 delete-snapshot --snapshot-id snap-000000000000
```

作成したときの SnapshotId を保存しておいて
"SnapshotId": "snap-000000000000"
cronとかで自動で回せば楽になります

※script 作成なう
Sql Operation StudioでCSV import を可能にしたかったけど出来なかった

# 注意事項

**出来なかった事を嬉々として書いてます**
**このドキュメントはmacユーザー専用です**

# やりたいこと

+ Azure のSQLServer で動いているDB に対して、新規で大量のテストデータを作ったので、そのデータをimport したかった
+ 今の情報はなるべく消さずにデータだけ追加したかった

# 手順

1. sql operation studio起動
2. 拡張機能の管理
3. 下記の拡張機能をインストール
     ![スクリーンショット 2018-09-28 17.06.02.png](https://qiita-image-store.s3.amazonaws.com/0/11006/a7337e31-ebf1-6fe8-ed56-df31a9de2588.png)

4. sql operation studio再読込（インストール開始）
5. sql operation studio再起動
6. DBを右クリックして、以下のような画面にする
    ![スクリーンショット 2018-09-28 17.13.03.png](https://qiita-image-store.s3.amazonaws.com/0/11006/3bf09615-0a14-145c-edad-c611f5eea3d1.png)



よっしゃ！いける！！！と思ったけど、`new table` しかダメだった

# 打開策

+ staging だと割り切って、データを全部入れ替える
    + Relation とか消えそうで怖い
+ CSVで落としたものをinsert文にreplace する
    + ただただだるい

# 結果

+ WindowsPC　を持ってる人にやってもらったのでMac で頑張る必要がなくなった
ふれあい祭のプロジェクト：ARチーム

:sunny:週末に奥多摩町のふれあい祭り「１０月２８〜２９日」に奥多摩日本語学校を参加しました。ITブースを出来ました。全員来たお客様にどうもありがとうございます！

######BIT-Okutamaのふれあい祭りのプロジェクトについてこのリンクをご覧ください：
[「ふれあいまつり 」プロジェクト概要](https://qiita.com/e-hirasawa/items/855af4ba63827f3a679a)  | @e-hirasawa

ARゲームを担当しなした。
#####すごいARチームのメンバー：　（お疲れ様です！:smiley:）
@Dina ｜@Hendiche ｜@bananasinmyear 

私たちのARゲームについて作文を作りました。下に概要と作文のリンクを書きました。ぜひ、読んでください。
##ARチームのゲームの概要：

- [ゲームのアイデァ](https://qiita.com/Hendiche/private/872567ccb32ee8aa3131)
    - 課題
    - ゴール
    - ARの紹介 
- 準備
    - [Assets(イメージ、３Dモデル)](https://qiita.com/Dina/private/61065f20edc2c9059569)
        - コーピライト
        - どこに探した？
    - [アプリの開発](https://qiita.com/callibrie/items/febff5114bc561ec2bdc)
        - Vuforia
        - Unity 3D
- [ゲームプレ](https://qiita.com/bananasinmyear/items/8dd6b1b8e3fb848ceb4c)
VR体験のガイドの声

##VR体験のガイド声##
VR体験はふれあいまつりのプロジェクトです。VR体験の中にハードウェアとソフトウェアも使います、ソフトウェアについて360°のパノラマイメージやウェブフレームワークやとガイド声もついかしなければなりません。今回はどうやってガイドの声を録音してプログラムの中に追加します。

###プロセス###

***ガイドの声***最後までのプロセス：

- スクリプトを作ります。
　　私たちは声を追加する前にどんな場面をやりたいか、相談しました。相談の中に面白いのために何か他の必要なものを追加したいのでガイドの声を必要です、５場面を決めるなのでご場面と2つの始めるのためにガイド声と閉鎖のガイドを必要です。
　　録音の前に私はスクリプトを作ります、どんなスクリプトですか？
　　1．始めると閉鎖のガイド声です。このガイドの声はVR体験の使い方です。
　　2．5つの場面を必要です。5つ場面は奥多摩日本語、奥多摩の奥多摩湖と小河内神社、インドネシアのボロブドゥール、最後はフィリピンのナクパンビーチです。全部ガイドの声を必要です。

- 録音します。
　　1．録音の時は私たちは友達の声を録音しました。***櫻井広大***て言うの声です。南海も録音しました。
　　2．そして録音の後はそのガイドの声を完璧のために編集します。編集のソフトウェアのためにMixPadて言うソフトウェアをつかいました。

- フレームワークを追加します。
　　Aframeを追加する方法のサンプルはこういうです　

```html
<a-entity sound="src: url(river.mp3); autoplay: true"></a-entity>
```

###結果###
最初の結果は5場面と７つガイドの声を分けました、1つ場面は1つガイドの声を追加しました。最初VR体験を始めから始めのガイドの声ほ聞く、そしてもしお客さんは他の場面を行った時に他のガイドの声も聞くことができます。例えばインドネシアのボロブドゥール行った時に、インドネシアのガイドの声も聞きます。でも他の場面の旗は見えない、なぜならガイドの声をまだ終わってない、終わる後に他の場面の旗も現れる、それで他の場面と他のガイドの声も選ぶことができます。

###新しい問題###
私たちの対象者PCとスマホ操作に慣れていない人ですから、できるだけ全部の場面とガイドの声も聴くことができますので、全部の場面を楽しめることができます。なので見る時に早く他の場面を行きたいけど他の旗をまだ出てきませんでしたから、他の場面を見ることができない、この問題について私たちの解決策はガイドの声を消して、お客さんのために自分で動く私から場所を説明するほうがいい、


###リンク###
[全体のふれあいまつりのプロジェクト](https://qiita.com/e-hirasawa/items/855af4ba63827f3a679a)
[VR体験のスケジュール](https://qiita.com/harfendybit/items/245976c9f5d6c96fab72)
[VR体験の360°パノラマ](https://qiita.com/zuu/items/9a79b5dfeca85b467c01)
[MixPad](https://www.nch.com.au/mixpad/index.html)
[Github](https://github.com/zuhairiBIT/360PanoramaVR)
【青本】トピックモデルの自分用メモ

# Chapter1
略

# Chapter2 ユニグラムモデル
重要なこと  
文書の集合$W=(w_1,w_2,...,w_D)$  
単語vが出現する確率$\phi_v$  
確率なので、$v:1toV sum(\phi_v)=1$

## 文書表現
多重集合(bag)  
→BOW(bag-of-words)表現  
語彙が同じでも別のものだとする  
→→ちょっと考えれば、単語には複数の意味を持つものがある

## ユニグラムモデル
文書から単語の頻度より、単語分布を作るっていうモデル

## 最尤、MAP、ベイズ推定
これらの数学的なところ

こういう機械学習の基礎のあたりは、頻発して、対数尤度、ラグランジュ乗数法、積分は解析的に解けないっていうあたりが出てきたが、それ以前の話も含めて^_^

# Chapter3 混合ユニグラムモデル

## 混合ユニグラムモデル
文書はトピック分布から生成される。単語分布はトピック毎に。

つまり、複数の意味を持つっていう単語の背景には、そのトピックも関わるっていうところ？

## EMアルゴ、変分ベイズ、ギブスサンプリング
ネックは数学よりも擬似言語で書かれたアルゴリズムの方

# Chapter4 トピックモデル
ASAP
Chromeのアドレスバーからいろんなサイトのサイト内検索をしたい

#Chromeのアドレスバーからいろんなサイトのサイト内検索をしたい

"サイト内検索をいちいちそのサイトに行ってからするのは面倒…"
そんな悩みを解決できる一旦になれるとうれしいです。

##Chromeのアドレスバーからサイト内検索をするって何？
Chromeの上部にあるアドレスバーから各種サイトのサイト内検索を行うということです。
<img width="1165" alt="スクリーンショット 2018-11-01 10.56.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/255007/37e07b80-85f2-7a1d-fce7-14354e10564a.png">
例えばQiitaの記事をサイト内で検索する時は以下の工程を踏むことになると思います。

[アドレスバーなどからQiitaを検索]→[Qiitaのページに行く]→[キーワード検索]→記事が見つかる

この工程を2工程省くことが目標です。
つまり、
[アドレスバーからQiita内検索を実施]→記事が見つかる
となります。

実際にやってみると以下のようになります。
![ezgif-5-a570b7718668.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255007/d5380ad5-68fd-2f38-da11-2237e8e52b26.gif)



##どうやるの？
やることはむちゃくちゃ簡単です！
以下の順序通りにやることで設定することができます！

###1.サイト内検索をしたいサイトでサイト内検索をする
<img width="742" alt="スクリーンショット 2018-11-01 11.11.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/255007/f1cd3d3c-3c2f-3a4f-3313-d6bab0b8a5f6.png">
すると、次のようなアドレスを取得できます。
```https://qiita.com/search?q=hoge```
このうちの```q=hoge```が検索クエリになりますので、hogeを%sに変更してどこかにコピーしておきましょう。
つまりこの形で保持しましょう。
```https://qiita.com/search?q=%s```
%sは入力値に応じて動的に変化します。

###2.Chromeの右上の```:```を選択して```設定```を選択します。

###3.検索エンジンの管理を選択します。
すると、以下の画面が出力されると思いますので、赤枠の追加を選択します。
![https___qiita-image-store.s3.amazonaws.com_0_255007_1783f543-70cf-43b8-8b01-a6eb4c4880fe (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255007/6def1002-2dcd-2dbe-3e3e-0c0e0be40774.jpeg)


###4.項目に入力し、保存を押す
<img width="1122" alt="スクリーンショット 2018-11-01 11.26.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/255007/2ba60235-5886-1e91-dcb0-988ddaeca491.png">
入力値は以下を参考にしてください
【検索エンジン】: そのサイトのことがわかる命名にしましょう。サイト名がいいと思います。
【キーワード】: アドレスバーから検索する時に必要となるものです。自分がわかればいいと思います。私は```qiita```から子音を取って```qt```としました。
【URL】:1.の工程でコピーしたアドレスを記載します。

###5.検索
ここまできたら実際に検索することができます。
アドレスバーから検索しましょう。
検索方法は４.の項目で設定したキーワードを入力したあとスペースを空けて、検索ワードを入力することで検索可能です。
例
```qt hoge```

以上です！
Railsをherokuにデプロイする際にyarn installがstatus127で失敗してPrecompiling assets failedする場合の対処法

（ささいな問題ですが、日本語でも英語でもエラーメッセージから検索しても原因がすぐわからなかったのでメモを共有しておきます）

## 現象
### 環境
動作実施日 2018/11/1
Ruby on Rails 5.1
Ruby 2.4.1
yarn 1.7.0
node 9.11.1
Heroku
（バージョンをアップデートできていないのはご容赦ください、、）

開発しているRailsアプリをHerokuにデプロイするために`git push heroku master`すると、エラーが出ました。


```:デプロイ時のログ抜粋
remote: -----> Installing node-v8.10.0-linux-x64
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        yarn install
remote:        rake aborted!
remote:        Command failed with status (127): [yarn install...]
remote:        /tmp/build_85d6f255f087d15f0a493571234f5109/lib/tasks/yarn.rake:3:in `block in <top (required)>'
remote:        /tmp/build_85d6f255f087d15f0a493571234f5109/vendor/bundle/ruby/2.4.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
remote:        Tasks: TOP => assets:precompile => js_deps_install
remote:        (See full trace by running task with --trace)
remote:
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
（以下略）
```

yarnまわりのようですが、package.jsonのenginesも正しく記載できています。

参考）
https://qiita.com/taaatk/items/25fa2c969d033ffc8a12

## 対策
エラーコード127はだいたいの場合、ファイルが見つからないことです。
というわけで調べてみると

```heroku buildpacks```

```:実行結果
1. heroku/ruby
2. heroku/nodejs
```

この順番が変なようです。入れ替えるために、いちどbuildpacksをremoveしてaddしなおしましょう。

```
heroku buildpacks:remove heroku/ruby
```

```
heroku buildpacks:add heroku/ruby
```

```:実行結果
1. heroku/nodejs
2. heroku/ruby
```

これで問題なくデプロイできるようになりました。
Macのlocalhostで作業していて、スマホで確認したい時に接続する方法

## 手順
- IPアドレスを調べる
- スマホのブラウザにIPアドレスを入力する

## IPアドレスを調べる
```
$ ifconfig | grep "inet " | grep -v 127.0.0.1
```
以上のコマンドをターミナルに打ち込む。
手に入れたipアドレスをスマホのブラウザに入力すると接続できる。

## 注意点
同一ネットワークである必要があります。
接続できなければ、wi-fi確認しましょう。
※いくつもwi-fiがある環境で作業すると、間違いがち。
casTableに条件を付けてデータを取り出す

SAS ViyaはAIプラットフォームになります。Webブラウザ上で機械学習の設計、実行ができるStudioという環境も用意されていますが、開発者はプログラミングコードで開発することも可能です。プログラミング言語はJava/Python/R/SASが選べます。

機械学習を用いる際に専用のテーブル（casTable）を用いますが、今回はそのテーブルオブジェクト（Python版）で条件を指定してデータを取得する方法を解説します。

## テーブルの作り方

テーブルはCSV、HTML、他のデータベースなどから作れます。

```py
out = sess.upload('Jupyter_Saved_Work/Data/iris.csv')
```

ファイルをアップロードした後、casTableとして取得します。

```
iris = out.casTable
```

## 条件付けはwhereを使う

SQLと同じようにcasTableでもwhereが使えます。ただし、これはPythonなので、O/Rマッパー風に使います。そこで set_params を使います。

```python
iris.set_params('where', 'SepalLength > 6.8')
```

またはparamsパラメータに直接設定します。

```python
iris.params.where = 'Name = "Iris-versicolor"'
```

なお、where を新しく設定すると上書きになってしまうので注意してください。以下の場合、下の条件が有効になります。

```python
iris.set_params('where', 'SepalLength > 6.8')
iris.set_params('where', 'Name = "Iris-versicolor"')
```

そのため、複数条件を指定する場合には and を使います。

iris.set_params('where', 'SepalLength > 6.8 and Name = "Iris-versicolor"')

## 計算式を入れる

あるカラム同士を計算した結果を結果に出したい場合には computedvars という定義をします。

```python
iris.set_params('computedvars', ['length_factor'])
```

そして computedvarsprogram を定義して、カラムの値を指定します。

```python
iris.set_params('computedvarsprogram', 'length_factor = SepalLength * PetalLength')
```

そうすると結果にlength_factorが追加されます。

```python
iris.fetch(to=3)
```

| SepalLength | SepalWidth | PetalLength | PetalWidth | Name | length_factor
|---|---|---|---|---|---|
| 0 | 7.0 | 3.2 | 4.7 | 1.4 | Iris-versicolor | 32.90
| 1 | 6.4 | 3.2 | 4.5 | 1.5 | Iris-versicolor | 28.80
| 2 | 6.9 | 3.1 | 4.9 | 1.5 | Iris-versicolor | 33.81

## 条件式を確認する

条件式が設定されているかどうかは has_param で確認できます。

```py
iris.has_params('where')
=> True
```

その内容は get_param で確認できます。

```py
iris.get_param('where')
=> 'Name = "Iris-versicolor"'
```

## 条件式を削除する

whereを削除する場合には del を使います。

```py
del iris.params.where
```

これでwhere条件が消えます。

```py
iris.has_params('where')
=> False
```

----

機械学習を実行する前のデータクレンジングなどの時点において、データを細かく確認したい時があるかと思います。whereの他、group byやcomputedvarsなども用意してありますので、これらをぜひ使いこなしてください。
casTableオブジェクトをコピーして検索条件を変更する

SAS ViyaはAIプラットフォームになります。Webブラウザ上で機械学習の設計、実行ができるStudioという環境も用意されていますが、開発者はプログラミングコードで開発することも可能です。プログラミング言語はJava/Python/R/SASが選べます。

機械学習を用いる際に専用のテーブル（casTable）を用いますが、今回はそのテーブルオブジェクト（Python版）をコピーして様々な条件を指定する方法を紹介します。

## partitionメソッドを使う

すでに設定を行ったcasTableに対してpartitionメソッドを使うとテーブルがコピーされます。

```python
sub = iris.partition()
```

このsubの内容を見ると、テンポラリテーブルなのが分かります。tableNameが自動生成されたものになっています。

```
§ caslib
CASUSER(dev@sas.com)
§ tableName
_T_WIVDGHGP_R6K2BW26_TFCRZAPN74
§ rowsTransferred
0
§ shuffleWaitTime
0.0
§ minShuffleWaitTime
1e+300
§ maxShuffleWaitTime
0.0
§ averageShuffleWaitTime
0.0
§ casTable
CASTable('_T_WIVDGHGP_R6K2BW26_TFCRZAPN74', caslib='CASUSER(dev@sas.com)')
```

## データの取りだし方

後は sub.casTable でデータが取得できます。

```py
sub.casTable.fetch(to=3)
```

| SepalLength | SepalWidth | PetalLength | PetalWidth | Name | length_factor
|----|----|----|----|----|----|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa | 7.14
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa | 6.86
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa | 6.11

このオブジェクトに条件を設定しても、元のテーブルオブジェクトには影響しません。

```
iris.set_params('where', 'Name = "Iris-versicolor"')
sub.casTable.has_params('where')
-> False
```

----

プログラムをしていて、同じ条件を使い回したいというケースはよくあると思います。partitionを使うことで、元のテーブルには影響を与えずに条件を変更したり、データの確認を行えるようになります。
Microsoftサービス関連（ざっくり）の参考になるＵＲＬ

### Windows クライアントＯＳに関するライセンスの解説

VDI導入時におさえておきたいMicrosoft VDAライセンスとは？
https://www.lakesidesoftware.com/jp/blog/microsoft-vda-license
TL;DRの意味を勘違いして使っていたら顰蹙を買ったので気をつけて使おう！

# TL;DRとは？
TL;DRは"Too Long, Didn't Read"
「長すぎるから読まないよ。」「要約です。」など記事や論文、プレゼンテーションなどで省略や引用を簡潔に説明する時にちょいちょい見かける表現です。(だと思っていました）

# 勘違い
実用英語でもこういう表現が市民権を得て使われていると思って英会話で使ってみたところ顰蹙を買いました。
なにやらTL;DRには
「〜(笑)」
「本田△」
「~(以下略)」
のような煽りや小馬鹿にした意味合いも持っていることがあるということを教えてもらいました。
なので発言の仕方、かっちりしたフォーマルな場での多用はあまり避けた方がよさそうです。
※ネットぽいというかNerdyな感じらしいです。

# 追記 2019/06/24
1人だけの意見を書いてしまったので数人の英語ネイティブ（非IT業界勤務)にもどういう風に見えるか、聞こえるのか聞いてみました。
・TL;DR?何それ？ふーん、なんで略すの?なんか高校生みたいだね。
・"open sesame!"（開け　ゴマ）みたい。とにかくわからないから急に言われたりプレゼンに書かれていたら戸惑っちゃうな。そのワードが気になってプレゼンが頭に入らないよ。
・テック系はなんかやっぱり違うね。脳がもうパソコンになっているんじゃない？

色々反応ありましたが、ポジティブな意見は特に聞きませんでした。
やはりコミュニケーションは自己満足ではなく相手がわかる言葉で取ることが大前提ですね。

何かの役に立てば幸いです。

# 追々記　2020/07/30
ありがたいことにこの記事にLGTMをたくさんいただけたので、ステイホーム時間を使いオンライン飲み会で数人のノン英語ネイティブ（IT業界勤務・非IT業界勤務）の方々にもどのように聞こえるか・どのように感じるか聞いてみました。

・うん、知ってるよ。よく見る。今はもう慣れて最初は自分の資料にも使っていたけど意味を聞かれることが多くてもう使ってないよ（IT業界勤務　非英語圏・母国語も非英語）
・うん・・・で？（IT業界勤務　一応英語圏・母国語は非英語だが教育などの公用語は英語）
・ごめん、なんか僕のアプリバグってる。文字化けしててなんて書いてあるかわからない。なんの絵文
字？（非IT業界勤務　非英語圏・母国語も非英語）

結論：やはり、きついみたいでした。

# 追々々記 2024/12/11
記法変更に対応しました（今さら）
何年も前の記事ですが今もビューが増えていることに驚きつつ、皆さん「TL;DRと書かずに要約や概要を使え！」と憤っている様子が伝わってきています。
1秒でも早くこの書き方がなくなることを祈っております。

#参考
https://www.urbandictionary.com/define.php?term=tl%3Bdr
【随時更新】AWS DEV DAY 2018 資料リンク集

# テクニカルセッション

## Software Design

- [あなたの推しテクをもっと伝えるプレゼンテーション術](https://speakerdeck.com/tnagasawa/anatafalsetui-sitekuwomotutochuan-erupurezentesiyonshu-number-awsdevday)

- [ドメインモデリングの始め方](https://speakerdeck.com/j5ik2o/tomeinmoterinkufalseshi-mefang)

- [実践！リーンなプロダクト開発 ~リーンでアジャイルなUI/UXデザイン検証~](https://speakerdeck.com/okutaku0507/shi-jian-rinnapurodakutokai-fa)

- [外部に依存したコードもテストで駆動する](https://speakerdeck.com/twada/test-driven-architecture-aws-dev-day-tokyo-2018)

## Serverless & Mobile

- [クックパッドの動画事業での AppSync 活用事事例 - Firebaseからの移行 - ](https://speakerdeck.com/wata/practical-use-of-aws-appsync-by-cookpad)

- [Serverlessを極めるためにDynamoDBデータモデリングを極めよう](https://speakerdeck.com/marcyterui/lets-become-the-master-of-dynamodb-data-modeling-to-become-the-master-of-serverless)

- [ZOZOTOWNの膨大な画像ファイルを移行したときの過程の話（オンプレミスからクラウドへ) ](https://speakerdeck.com/sho3334/images-object-zozo)

- [浸透するサーバーレス](https://www.slideshare.net/AmazonWebServicesJapan/ss-122211072)

- [Serverless Application Security on AWS](https://www.slideshare.net/AmazonWebServicesJapan/serverless-application-security-on-aws)

- [開発者におくるサーバーレスモニタリング](https://www.slideshare.net/AmazonWebServicesJapan/ss-122211649)

- [GraphQL入門 (AWS AppSync) ](https://www.slideshare.net/AmazonWebServicesJapan/graphql-aws-appsync)

## Machine Learning

- [Amazon SageMaker で実現する生産性の高い機械学習基盤](https://speakerdeck.com/south37/number-awsdevday)

- [パーソナライズを追求するお菓子の製造需要予測を自動化させた話](https://speakerdeck.com/miyoshihayato/snaq-dot-me-dev-day-tokyo-2018)

## Database

- [AWSサービスで実現するEightの行動ログ活用基盤](https://www.slideshare.net/matetsu/awseight-121480234)

- [DevOps with Database on AWS](https://www.slideshare.net/AmazonWebServicesJapan/devops-with-database-on-aws)

- [Graph Database and Amazon Neptune](https://www.slideshare.net/AmazonWebServicesJapan/graph-database-and-amazon-neptune)

- [Data Lake Security on AWS](https://www.slideshare.net/AmazonWebServicesJapan/data-lake-security-on-aws)

- [Amazon DynamoDB Advanced Design Pattern](https://www.slideshare.net/AmazonWebServicesJapan/amazon-dynamodb-advanced-design-pattern)

- [Amazon DynamoDB Backed な テレコムコアシステムを構築・運用してる話](https://www.slideshare.net/SORACOM/aws-dev-day-tokyo-2018-amazon-dynamodb-backed)

## Microservices

- [マイクロサービス化デザインパターン](https://www.slideshare.net/yusuke/awsdevday-tokyo-2018)

- [マイクロサービス時代の認証と認可](https://www.slideshare.net/daisuke_m/ss-121478137)

- [Event Sourcing+CQRS を活用するスケーラブルアプリケーション開発](https://speakerdeck.com/ytake/event-sourcing-cqrs-v2)

- [Backends For Frontends 入門](https://speakerdeck.com/yosuke_furukawa/backends-for-frontends-aws-dev-day)

- [Micro Frontends の理論と実践  -価値提供を高速化する真のマイクロサービスのあり方-](https://speakerdeck.com/nobuhikosawai/the-theory-and-practice-of-micro-frontends)
DockerのMySQLの環境変数系の設定が反映されないのは余計なデータベースをマウントしているから


### docker-composeのmysql: environment: の設定が反映されない！

ぺーぺーの筆者もようやくDockerに触る機会ができ、早速docker-composeを使って公式のMySQLを利用して環境を作ろうとしました。

この際、rootのパスワードも変更したかったため、docker-compose.ymlは最終的にこんな感じになりました。

```docker-compose.yml
version: '2'
services:
#(前略)
  mysql:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: NantokaKantoka
        #最初のうちはhogefugaを設定していた
      MYSQL_DATABASE: myDatabase
  volumes:
    - ./mysql/conf.d:/etc/mysql/conf.d
         #mysql.cnfを反映させるため
    - ./mysql/data:/var/lib/mysql
         #DBの実体をおいておく
    - ./mysql/init:/docker-entrypoint-initdb.d
         #MySQL初回起動時の走らせたいsqlとかshとかを渡すため
#(後略)
```

この設定なら、myDatabaseというデータベースが作られた上、rootログインする時にはNantokaKantokaというパスワードが必要になるはずでした。

ですが実際にはmyDatabaseは**作られず**パスワードは**最初のうちに設定していたhogefugaのまま**変更されないという事態になりました。

docker-compose downとかdocker rm $(docker ps -aq)とか色々やっても何回やってもこの現象に悩まされました。

### 公式のMySQLイメージは起動時に既存のDBをいじらない

いろいろ探し回った末に[公式のmysqlイメージ](https://hub.docker.com/_/mysql/)のページを参照してみることにした結果原因がわかりました。

問題の箇所の原文と和訳を記します。

> Environment Variables
> When you start the mysql image, you can adjust the configuration of the MySQL instance by passing one or more environment variables on the docker run command line. Do note that none of the variables below will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup.

> 環境変数
> mysqlのイメージを起動する際に、docker runコマンドラインにいくつかの環境変数を渡すことで、MySQLインスタンスの設定を調整できます。もし既にデータベースを格納しているデータディレクトリとともにコンテナを起動した場合は、下記の変数はどれも影響を及ぼさないことに留意してください。コンテナが起動する際には既存のデータベースには常に何の変更も加えません。

大事なとこここです。

> もし既にデータベースを格納しているデータディレクトリとともにコンテナを起動した場合は、下記の変数はどれも影響を及ぼさないことに留意してください。 

つまり原因はここです。

```docker-compose.yml
    - ./mysql/data:/var/lib/mysql
         #DBの実体をおいておく
```

こいつにもともとデータベースがあったためにパスワードなどの変更を加えることができず、結果最初の方に設定していたhogefugaがパスワードとして残り続けたんですね。

myDatabaseのデータベースが作られなかったのも同様の理由です。

### 解決

```sh
rm -rf ./mysql/data/* ; docker-compose up -d
```

docker execでコンテナに入ると、無事パスワードが変更され、データベースも作られていることを確認できました。

### 結論

公式をあたれ
CodeSite Live Viewer をさらにもうちょっと使ってみた

[CodeSite Live Viewer をさらに使ってみた](https://qiita.com/CYonezawa/items/e4ffe9c7fbf113b75c48) でなんと月間のアップできる画像容量を超えてしまった
この記事は最後の部分の続きです
とほほ...

## その他 

### Checkpoint
ログとして CheckPoint を設定することもできるし、Live Viewer 上でも設定可能
Live Viewer で CheckPoint を追加した際は、CSLiveViewer という名目が表示されます
ログを追うときに予め CheckPoint を設定しておくと大量のログから該当するところを素早く見つけることができる
![codesite07.gif](https://qiita-image-store.s3.amazonaws.com/0/164551/f3a1a66b-9a3c-242b-5cfa-652b8122954b.gif)

### Bookmark
Live Viewer 上で送られてきたログを見るときのしおりの役目を行う
Bookmark をつけたところに簡単に移動できる
![codesite06.gif](https://qiita-image-store.s3.amazonaws.com/0/164551/5a433efd-d7f0-820f-4164-4d60a1999619.gif)

### 分類分けした項目間の移動
ログを表示するところの上にあるバー上で、項目を選択すると、分類した項目間で移動ができます
たとえば、Level1 のものだけ見たい場合とかは、次のようにすると、その項目間で移動ができます
![codesite03.gif](https://qiita-image-store.s3.amazonaws.com/0/164551/b87c5ef1-d790-ec7e-462a-af7329b6350f.gif)

さらに、オブジェクト限定とかに絞り込むこともできます
![codesite04.gif](https://qiita-image-store.s3.amazonaws.com/0/164551/f241ba76-e0d9-5440-5013-f4c5abbec1b2.gif)

### 表示する項目
時間なども表示できるのでパフォーマンスのチェックにも役立ちます
![codesite08.gif](https://qiita-image-store.s3.amazonaws.com/0/164551/9870d02d-a4f7-85a1-4951-0a8ea89ad93a.gif)
Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter が発生した

# Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter が発生した

## 前提

- Jenkins で Maven プロジェクトをビルド → テストしている

## 単体テスト実行時にエラーが発生した

特に何もした覚えがないが、以下のエラーが発生するようになってしまった。

```log
Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter
```

```log
The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
```

## 調査

ググると以下の情報を発見。

https://stackoverflow.com/questions/53010200/maven-surefire-could-not-find-forkedbooter-class?noredirect=1&lq=1
https://issues.apache.org/jira/browse/SUREFIRE-1588

`maven-surefire-plugin` の不具合みたい。
※ [maven-surefire-plugin](https://maven.apache.org/surefire/maven-surefire-plugin/usage.html) は、アプリケーションの単体テスト実行のライフサイクルを管理するためのプラグイン。

## 対応

今までは `pom.xml` で `maven-surefire-plugin` の設定をしていなかった。
`pom.xml` に下記を追加することで解決。

```xml:pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>
```

`useSystemClassLoader` を false にする必要がある。
Proxy環境下でのCocoaPodsの導入

#　開発環境
OSX 10.14.1 (Mojave)
Xcode 10.1

# CocoaPodsのインストール
ターミナルで以下のコマンドを打つ

```
$ sudo gem install cocoapods
```

すると次のエラーが出た

```
ERROR:  Could not find a valid gem 'cocoapods' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ -::ECONNRESET: Connection reset by peer - SSL_connect (https://api.rubygems.org/specs.4.8.gz)
```

調べてみると、sudoするときはユーザー環境変数が引き継がれないらしい。
Proxy の環境設定を引き継ぐようにする

```
$ sudo visudo
```
visudoはsudo権限を変更するコマンドらしい。上記のコマンドを打つと、vimで編集できるようになる。
以下を追記する

```
Defaults    env_keep += "http_proxy https_proxy"
```

どこに追記するかは見ればわかる。
保存したら、もう一度

```
$ sudo gem install cocoapods
Fetching: cocoapods-1.5.3.gem (100%)
Successfully installed cocoapods-1.5.3
Parsing documentation for cocoapods-1.5.3
Installing ri documentation for cocoapods-1.5.3
Done installing documentation for cocoapods after 3 seconds
1 gem installed
```

となり、うまくいった。

インストールがうまく行ったので次に以下のコマンドを打って終了

```
$ pod setup
```

# 参考
* https://qiita.com/hijion/items/3e29df0660aa912f28e6
* https://qiita.com/ShinokiRyosei/items/3090290cb72434852460
* https://eng-entrance.com/linux-command-visudo
IntellijでSpring Bootをセットアップ

#Spring Bootのセットアップ
基本的な設定だけを

##GUIで設定する。
####1.Spring Initializrを選ぶ。
Initializr Service URLはDefaultでいい。
NEXTボタンを押す。
![New Project_029.png](https://qiita-image-store.s3.amazonaws.com/0/304366/ff9c4977-ea94-769d-e71a-8244f103e381.png)

####2.Project MetaDataではArtifact欄のみ編集でよい。
Artifactは大文字が混じっていると受け付けてくれない。
パッケージ名(Group)は変更したければ変更すれば良い。
![New Project_030.png](https://qiita-image-store.s3.amazonaws.com/0/304366/0a58d121-e1f8-ebd8-fbcb-cace3bc31708.png)

####3.Dependenciesを選択。
インストールしたいパッケージを選択する。
Spring Bootアプリケーションで定番なのは、
1. web
2. h2(SQL)
3. jpa
4. validation
5. thymeleaf

あたり。
あとでpom.xmlを編集して追加できるので、神経質に吟味しなくても良い。

![New Project_031.png](https://qiita-image-store.s3.amazonaws.com/0/304366/7cec2da8-7879-80c4-643a-9aa1c55bbf5f.png)

####4.プロジェクトフォルダを選択。
今回はドロップボックス以下に置く。
![New Project_032.png](https://qiita-image-store.s3.amazonaws.com/0/304366/100320de-1a41-da8e-af6e-79357f0ce4b3.png)

終了。
CentOSとRed Hat Enterprise LinuxとFedoraの関係

CentOSを使って勉強会をしていきます！
その前にCentOSとRed Hat Enterprise LinuxとFedoraの関係を押さえておきましょう。

# Red Hat Enterprise Linux
まずRed HatですがずばりCentOSとほぼ同等の機能のOS(ディストリビューション)です。
というとRed Hat社の人に怒られそうですが、現段階ではそう思っていただいて問題ないと思います。

では何がCentOSと違うのか？

・Red Hat社によるサポートを受けることができる
・有償である

この2点が大きく違います。
Red Hat社によるサポートが受けられることにより不測の事態が起こっても問合せをすることができます。

# CentOS
CentOSはRed Hat Enterprise LinuxのクローンOSと呼ばれており、同等の機能を持っていますが、基本的にサポートは受けられませんし、基本的に自力で何とかするしかありません。
しかしCentOSを利用しているユーザーは多く、グーグル先生に聞けば、かなりの確率で解決方法を見つけることが可能であると思われます。

商用利用の場合はRed Hat Enterprise Linuxが安心ですが、予算の関係などでCentOSを採用することもあるかと思いますが、それは状況により判断するところになります。

# Fedora
Fedoraは最新の新技術を積極的に取り入れています。
Fedoraで安定して、動作確認できたものがRed Hat Enterprise Linuxに採用されるといった流れになります。
Red Hat Enterprise Linuxに今後どのようなものが採用されるかはFedoraの同行をチェックすると良いです。

# リリースの流れ
よって簡単に流れを書きますと
Fedora →　Red Hat Enterprise Linux → CentOS
という順番でリリースされます。

Red Hat Enterprise LinuxとCentOSは同じバージョン番号ですがFedoraだけは違う規則で命名されます。
【Unity】UGUIでuiの上にカーソルが重なったらメッセージを出す その2

#概要
この記事は前回の記事の続きです。


[【Unity】UGUIでuiの上にカーソルが重なったらメッセージを出す](https://qiita.com/daria_sieben/items/ccc8cf92676692fde5b2)

#前回の反省点

前回の記事だと以下の問題点がありました。

1.メッセージを出したいオブジェクトすべてにメッセージで使うTextを設定しないといけない

2.メッセージを表示したくないゲームオブジェクトのUiのRaycastTargetのチェックを外さないといけない

今回は前回使っていたIPointerEnterHandlerとIPointerExitHandlerを使わずにやったことをまとめようと思います。
使わない理由は前回のやり方のままだとメッセージを表示したくないuiのRaycastTargetをはずさないといけない問題が解決しないためです。

#今回使うもの
・EventSystem.RaycastAll

第一引数で渡した情報をもとにRayを作成し、あたったuiの情報を第二引数で渡したRaycastResult配列に格納してくれます。


#解説
クラスはこういう感じになりました。

```c#:AssistanceMessagerManager.cs
public class AssistanceMessageManager : MonoBehaviour
{
	//前フレームでヒットしたヘルプが必要なオブジェクト
	private GameObject _preFrameAssistanceObject =null;
	//uiにRayがあたったか結果格納リスト
	private readonly List<RaycastResult> rayResult = new List<RaycastResult>();
	[SerializeField] private Text _helpMessage;
	
	void Update () {
		rayResult.Clear();
		
		var currentPointData = new PointerEventData(EventSystem.current);
		currentPointData.position = Input.mousePosition;
		EventSystem.current.RaycastAll(currentPointData,rayResult);

		//Rayがあたったオブジェクトから目的のインターフェースを持ったものがあればtextを更新
		if (_preFrameAssistanceObject == null)
		{
			foreach (var raycastResult in rayResult)
			{
				var assistance = raycastResult.gameObject.GetComponent<INeedAssistance>();
				if (assistance != null)
				{
					_preFrameAssistanceObject = raycastResult.gameObject;
					_helpMessage.text = assistance.assistMessage;
					_helpMessage.transform.position = currentPointData.position;
					_helpMessage.transform.gameObject.SetActive(true);
					break;										
				}
			}			
		}
		else
		{
			//前フレームにあたったオブジェクトがヒットしていなければuiから離れたとみなして非表示にする
			if (rayResult.All(ray => ray.gameObject != _preFrameAssistanceObject))
			{
				_helpMessage.transform.gameObject.SetActive(false);
				_preFrameAssistanceObject = null;
			}
		}
	}

	private void OnDestroy()
	{
		rayResult.Clear();
		_preFrameAssistanceObject = null;
	}
}
```


```c#:INeedAssistance.cs
public interface INeedAssistance
{
	string assistMessage { get; }
}
```

処理は以下の手順で行っています。

1.EventSystemからRayに必要な情報を作り、それを用いてRayがUiにあたっているかどうかを見る
↓
2.当たっていなおかつ特定のインターフェースを実装したコンポーネントがあればメッセージを表示し、キャッシュとしてあたったゲームオブジェクトを保持しておく
↓
3.次のフレーム時に再びRayを飛ばし、前フレームでキャッシュしたゲームオブジェクトがあってなおかつ今回のRayに引っかからなかったら前フレームに当たったuiから離れたとみなしメッセージを非表示にする
↓
4.以下1~3の繰り返し


今回の対応で上記に上げた問題点が以下のように解決しました。

1.メッセージを出したいオブジェクトすべてにメッセージで使うTextを設定しないといけない

これはAssistanceMessageManagerで管理するようにしたため解決しました。
こちらのほうがメッセージを出したいオブジェクトが増えてもそのオブジェクトにTextの設定が必要なくなったため楽になりました。


2.メッセージを表示したくないゲームオブジェクトのUiのRaycastTargetのチェックを外さないといけない

これについてはRaycastAllでヒットしたオブジェクトから特定のインターフェースを持つオブジェクトを対象に呼び出すようにしたため解決しました。
インターフェースにしてる理由は今後汎用的に使うことを考えると、特定のコンポーネントを持っているかで判断するよりもインターフェースのほうが依存しなくなるためです。

#まとめ
EventSystem.RaycastAllを使うことによって、IPointerEnterやIPointerExitHandlerを使わずにメッセージ表示を実現できました。
EventSystemについてまだ知らないことが多いので、調べてまとめたいと思います。


#参考

>|　[uGUIに当たっているかを調べる](https://qiita.com/ELIXIR/items/68c30753b15692408e45)
Storyboardから対応するCustomClassのコードに移動する

# 概要
StoryboardからViewに設定したCustomクラスのコードに簡単に移動したい

# 結果
赤丸のところの矢印を押す。

<img width="600" alt="スクリーンショット 2018-10-31 10.41.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/199256/9a58fc4b-be48-de2b-ab52-29a8d9e7d773.png">
Uipathで詰まったことの自分的メモ(随時更新)

#初めに
qiitaでははじめまして。
1年以上qiitaを見続けているのに、今更初投稿です。
私についてはそのうちプロフィールを充実させるので、そちらを見てみてください。
とりあえず今年一杯をまず目標に、ゴールはアドベントカレンダーに参加することです！

# この記事について
タイトルのとおりです。仕事でUipathを触る機会がありまして、思いついたらポチポチ更新していくような記事です。

# レコーディング
- デスクトップレコーディングが良い

# エクセル・CSV関連
## CSVの行数を数える
- datatable.rows.countを使う
- ヘッダを読み込まない

## ReadCSVとReadRangeってデータテーブルの扱いが違う？
- ReadCSVはデータテーブルを上書き
- ReadRangeはデータテーブルに追記？
- 要検証

## アクティビティに紐付いていない変数を一括削除するときの注意点
- 変数名は大文字小文字を区別しない  
[**11/06追記 この件について記事を投稿しました**](https://qiita.com/strBelgamot_007/items/48c7cf032cc3e1a53d27)

### 初投稿がこんなんでいいのかな