OmniAICreator/Qiita-1.07M huggingface dataset:
docker-compose + vue.js + typescript  環境構築

元々知っているvue.jsに
最近仕事で使うdocker + typescriptを合わせた環境構築を行ってみた


基本参照は[ここ](https://qiita.com/tubutubu_mustard/items/ed8c047540015e2d07fc)かなり見ました。

os ubuntu 18.04


## docker-compose用のyml生成

```
cd your/dev/dic
touch docker-compose.yml 
```

```yml:docker-compose.yml
version: '3'
services:
  node:
    image: node:12.7.0-alpine
    volumes:
      - .:/vuejs
```

nodeのversion指定 + マウント先はvuejsに指定

## コンテナ内に入る
入った後にcli起動して初期インストール

```sh
docker-compose run node sh
cd vuejs
yarn global add @vue/cli
```

cli終わったら
vueのプロジェクトを作成

```
vue create .
```


## vue/cil経由で環境構築(注意点有)
対話型で処理を進めて行くのですが、`please pick a preset`のときに
`Manually select features` を選んでください
(そうじゃないとtypescript入らない)

```sh
Vue CLI v4.1.1
? Generate project in current directory? Yes


Vue CLI v4.1.1
? Please pick a preset: Manually select features
? Check the features needed for your project: 
 ◉ Babel
 ◉ TypeScript
 ◉ Progressive Web App (PWA) Support
 ◉ Router
 ◉ Vuex
 ◉ CSS Pre-processors
 ◉ Linter / Formatter
 ◉ Unit Testing
 ◉ E2E Testing
```
作る環境によって必要なmoduleが違うでしょうが
とりあえず今回は全部チェック入れ


後は細かい設定聞かれますがわからないやつは基本ググってほしい
たぶんtest toolを jestとかフォーマット設定まともにしておけば
大丈夫そう

```shell
Vue CLI v4.1.1
? Generate project in current directory? Yes
Vue CLI v4.1.1
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, TS, PWA, Router, Vu
ex, CSS Pre-processors, Linter, Unit, E2E
? Use class-style component syntax? Yes
? Use Babel alongside TypeScript (required for modern mode
, auto-detected polyfills, transpiling JSX)? Yes
? Use history mode for router? (Requires proper server set
up for index fallback in production) Yes
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS 
Modules are supported by default): Sass/SCSS (with node-sa
ss)
? Pick a linter / formatter config: TSLint
? Pick additional lint features: (Press <space> to select,
 <a> to toggle all, <i> to invert selection)Lint on save
? Pick a unit testing solution: Jest
? Pick a E2E testing solution: Cypress
? Where do you prefer placing config for Babel, ESLint, et
c.? In dedicated config files
? Save this as a preset for future projects? No

```

コンテナに戻るとプロジェクトが生成されているはず



## dockerで動かす
対象ディレクトリ直下にdockerfileを作成

```dockerfile:dockerfile
FROM node:12.7.0-alpine

WORKDIR /myapp

COPY package.json ./
COPY yarn.lock ./

RUN yarn install
```

```yml:docker-compose.yml
version: '3'
services:
  view:
    build: .
    command: yarn run serve
    volumes:
      - .:/myapp
      - /myapp/node_modules
    ports:
      - "8000:8080"
```

```
docker-compose up -d
```


後は`localhost:8000`でサイトが開けるようになっているはずです！
お名前.comでドメイン取ったった

# 経緯

どういう制約かわかりませんが、いつの間にかFreenomでドメインを取得することができなくなっていました。
(同僚は普通に取得できる。)

親が仕事でサイト作りたいと話していたので、試しに自分で有料なところからドメイン取ってみようか、
と思い立ったのでお名前.comをつかってみました。

# ドメイン取得

まず、お名前.comのサイトにアクセス

https://www.onamae.com/

取得希望の文字列を打ち込み、検索します。

![2019-09-12_204115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/7610cc6b-28be-5fd4-b662-2555f11483d7.png)

リストアップされるので、購入したいドメインを選択し「料金確認へ進む」を押下。

![2019-09-12_204615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/c8c15b3f-3480-5609-15cf-74b1850fe4d9.png)

私は初めての取得なので、「初めてご利用の方」にメールアドレス/パスワードを入力し「次へ」を押下。

![2019-09-12_204808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/80f97dab-096f-ed36-2c98-9020bfd39a12.png)

クレジットカード情報を入れて「申込む」を押下。

![2019-09-12_204938.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/524119e9-2280-2feb-d7f1-06111c2c146e.png)

待ちます。

![2019-09-12_204953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/5155ae1b-1e3f-fc53-8396-35164c2261d1.png)

申し込みが完了。

# アカウント登録

続いて「会員登録へ進む」を押下します。

![2019-09-12_205136.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/46f4a413-c782-ec95-e658-ebf524ecd21c.png)

個人情報を入れて「次へ進む」を押下。

![2019-09-12_205211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/7021ff82-d940-18f3-1ef2-782e959f63c7.png)

登録が完了します。
「トップページへ戻る」を押下。

# ドメイン設定

![2019-12-02_093605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/d003da1e-b06e-3c9f-dfba-d2f48d9d5ab3.png)

トップに戻ったら、画面右上の「お名前.com Navi ログイン」を押下。

![2019-12-02_093636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/4d7183a6-5c9c-3aa3-f77e-24077587f181.png)

IDとパスワードを入れて「ログイン」を押下。

![2019-12-02_093711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/e08b52df-ded2-e7b2-778e-165300c29dfd.png)

契約更新の画面が出ますが(私だけ？)、無視して「ドメイン設定」を押下。画面を離れます。

![2019-12-02_094251.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/a9a00f19-4972-e7c9-5b3c-8d08dd77e7b1.png)

「DNS設定/転送設定」を押下します。

![2019-12-02_095109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/5b34eefd-244f-be7c-ed9e-ac5628e3ca25.png)

対象のドメインを選択し、「次へ」を押下。

![2019-12-02_095155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/47d191fd-009b-b35b-9ae1-37b65f5f1591.png)

「DNSレコード設定を利用する」を押下。

![2019-12-02_095435.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/22af1f15-5cb0-ae74-7db4-add65ff90629.png)

ここで任意の設定に変更し、確認画面で確認の上「設定する」を押下すると設定が完了します。
あとは変更内容が浸透すればおｋ。
以上。
stashした複数ファイルのうち、一部ファイルだけ取り出す方法

スタッシュしたくないファイルも入れて、間違えてスタッシュしてしまった場合にそれを除いたファイルのみ取り出す方法の備忘録。

SourceTreeではうまくできないので、コマンドを使用する。

# 現在スタッシュしているリストを表示する

```
$ git stash list
```

結果は、こんな感じ

```
stash@{0}: On branch/sample1: スタッシュしてみた1
stash@{1}: On branch/sample2: スタッシュしてみた2
stash@{2}: On branch/sample3: スタッシュしてみた3
```

# 取り出したいファイルのあるスタッシュの番号を指定して、その中の一部ファイルを取り出す

スタッシュリストの番号を指定して、取り出したい中身のファイル名を入れるだけ
ファイルを取り出すだけなので、スタッシュは消えない

```
$ git checkout stash@{1} pc/hoge/sample.html
```

# おまけ

スタッシュの中身の差分を確認したいとき

```
$ git diff stash@{1}
```
Trio+httpxで気軽にPythonの非同期httpクライアントを実装する

PythonではTrioという非同期処理用のライブラリが使い勝手が良いのですが、低レイヤーなAPIしか用意されていないので単体で利用するとけっこうつらいものがあります。幸いhttpxというhttpクライアントライブラリにTrioモードが用意されているので、そちらを利用してみました。



# 利用ライブラリ

https://github.com/encode/httpx

[requests](https://requests-docs-ja.readthedocs.io/en/latest/)に似た使い勝手で、非同期処理のhttpクライアントライブラリです。Trio用のモードも用意されています。この記事で利用した当時のバージョンは0.7.8です。

https://github.com/python-trio/trio

ユーザーフレンドリーな非同期処理のライブラリです。当時のバージョンは0.13.0です。


# コード

このようなコードになります。詳しくは[httpxの公式ドキュメント](https://www.encode.io/httpx/advanced/#trio)を読んでください。

基本的にはこのようなコードになります。

```python
import httpx
from httpx.concurrency.trio import TrioBackend
import trio

async def main():
    # timeoutの値はよしなに変えてください
    async with httpx.AsyncClient(backend=TrioBackend(), timeout=None) as client:
        response = await client.get('https://www.example.com/')
    print(response)

trio.run(main)
```

並列でリストの内容をリクエストを送るときは、次のようなコードになると思います。 `asyncio.gather` のようなリストを返すAPIは存在しないので、クロージャを使って工夫する必要あります。詳しくはこちらの[StackOverflow](https://stackoverflow.com/questions/52671346/how-to-gather-task-results-in-trio)を読んでください。

```python
async def main():
    # 並列でリクエストを送りたいurl
    urls = ['https://www.example.com/', 'https://www.example2.com/']

    results = []
    async def _inner(client, url):
        response = await client.get(url)
        results.append(response)

    async with httpx.AsyncClient(backend=TrioBackend(), timeout=None) as client:
        async with trio.open_nursery() as nursery:
            for url in urls:
                nursery.start_soon(_inner, client, url)

    print(results)
```



# 参考記事

Trioに関して日本語で読みたい方はこちらでどうぞ。この記事では伝わらなかったと思うのですが、Trioはpytestとの連携なども考慮されていて便利なライブラリなので、ぜひ使ってみてください。

* [非同期入出力library Trioの調べ事](https://qiita.com/gotta_dive_into_python/items/327363ff72e5e4071570)
* [Python + Trio の非同期コーディングパターン](https://qiita.com/yura/items/689d065aba00fe14fbba)
* [【Python】asyncioの代替ライブラリtrioを調べてみた](https://kiito.hatenablog.com/entry/2018/12/26/110317)
WindowsでOpenSCを使う（4. opensc-tool.exeでできることって？②）

# はじめに
[前回の記事]()でデフォルトのドライバーでサポートされていなかったカードを使用して試したオプション、
`-n`、`--serial`、`--list-files`について
きちんと実行できるように適切なドライバーを調べて実行します。

# 使用するツール
- コマンドプロンプト
- opensc-tool.exe（[WindowsでOpenSCを使う（1.準備編）](https://qiita.com/erik_tnk/items/7d40b02be3bb13f2c3af)参照）
- カードリーダー：PaSoRi RC-S380
- ICカード=Felica

# 使用しているICカードで`-n`が使えるドライバーを調べる

以下のようにいろいろなドライバーを使用して実行してみようと思います。

```
opensc-tool.exe --card-driver カードドライバー名 -n
```
たくさんあるので全部は載せませんが、一部のドライバーでの結果を載せました。
![opensc_card_driver_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/e98271bf-1048-69d1-9435-65e5219db8c6.png)

使用できなかったドライバー
`cardos`、`gemsafeV1`
使用できたドライバー
`flex`、`cyberflex`、`gpk`、`asepcos`

6つのうちカード名が取得できたのは`flex`、`cyberflex`、`gpk`、`asepcos`の4つでしたが、
取得できたカード名が全部違います。というか、[--list-drivers](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53#--list-drivers--d)を使って取得したドライバー名の右側に出ている名前じゃないですか...
これ、本当にカード名なのでしょうか。

もしかして、取得できたのはドライバー名のみで、カード名がカードに設定されていないから出力されないのかも？
[-v](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53#--verbose--v)を使用したらもっと詳しい情報が出るかもしれません。

```
opensc-tool.exe --card-driver カードドライバー名 -v -n
```
[-v](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53#--verbose--v)を使用して実行したところ、
ドライバーとカード名がそれぞれ表示されました！
![opensc_card_driver_v_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/77dfc3a0-5ee5-1a26-a5ab-f5de6c37bb76.png)
しかし、取得されたカード名は、やはり全部違うみたいです。どうして...？
たぶんオプションの使い方は上記で良さそうですが、
取得できるカード名がドライバーによってばらばらなのは謎です。
ドライバーの開発会社それぞれでカード名を定義しているのかな。
知ってる方、教えてください。

# 使用しているICカードで`--serial`が使えるドライバーを調べる

こちらもドライバーを指定して実行してみましょう。

```
opensc-tool.exe --card-driver カードドライバー名 -v --serial
```
![opensc_c_driver_serial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/fe258c54-4633-31a2-3b34-27b7cae1557d.png)
`-n`の時にカード名が取得できたドライバーで試してみましたが、
[前回の記事](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53#--serial)とあまり結果が変わりませんね。
カードにシリアル番号が定義されていないということでしょうか...

# 使用しているICカードで`--list-files`が使えるドライバーを調べる

上記と同様ドライバーを指定して実行。

```
opensc-tool.exe --card-driver カードドライバー名 -v --list-files
```
![opensc_c_driver_list_files.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/83fcd8ea-b2dc-d475-803f-607bcfde647c.png)
`--serial`の時と同様、カード名が取得できたドライバーを使用しましたが、
[前回の記事](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53#--list-files--f)と同様の結果でした。
これは普通にカードにファイルが保存されてないのかもですね。
# 所感
オプションの使用法は多分あってると思うけど
何か根本的にわかってないところがあるんだろうな...という感想です。
OpenSCにはほかにもツールがあるようなので、そちらを調べていくとだんだんわかっていくかもしれません。
# 関連ページ
[WindowsでOpenSCを使う（1.準備編）](https://qiita.com/erik_tnk/items/7d40b02be3bb13f2c3af)
[WindowsでOpenSCを使う（2.カードのIDm確認編）](https://qiita.com/erik_tnk/items/a8e36323a44bab92640d)
[WindowsでOpenSCを使う（3.MIFARE Classicブロックデータ読み出し編①）](https://qiita.com/erik_t/items/9eb14d689870004596bb)
[WindowsでOpenSCを使う（3.MIFARE Classicブロックデータ読み出し編②）](https://qiita.com/erik_t/items/835f761792265206ac3f)
[WindowsでOpenSCを使う（4. opensc-tool.exeでできることって？①）](https://qiita.com/erik_t/items/bf193ac52f1cece5cd53)
indexOfメソッド、substringメソッド、replaceAllメソッド、replaceメソッド、charAtメソッド、trimメソッド

初学者ですが、個人的な勉強のためまとめました

##indexOfメソッド
・引数で指定された文字（列）が文字列の、**どの位置に存在するか**を調べるためのメソッド
・下記の例ではindexOfメソッドの引数の中に「c」という文字を入れると、２が戻される
・もし、文字が存在しなければ**-1**が戻される

（例）引数が文字の場合


```Sample.java
	String str="abcde";
	System.out.println(str.indexOf('c'));
```

・文字列を引数に入れた場合、その文字列が始まる**最初の文字列**を戻す
・下記の例ではindexOfメソッドの引数の中に「cd」という文字を入れると、２が戻される
・もし、文字列が存在しなければ**-1**が戻される

```Sample.java
	String str="abcde";
	System.out.println(str.indexOf("cd"));
```

##substringメソッド
・文字列から任意の文字列を**抽出**するメソッド
・抽出する文字列の指定は、**第一引数に開始位置の番号**、**第二引数に終了位置に1足した番号**
・引数を一つだけ取るとその位置以降のすべての文字列を抽出する
・下記の例だと、範囲が2～3なので㏅を戻す


```Sample.java
public class Sample {
	public static void main(String[] args) {
		String str = "abcde";
		System.out.println(str.substring(2, 4));
	}
}
```

##replaceAllメソッド
・第１引数で指定した**正規表現**のパターンで文字列を検索し、マッチした文字列を第２引数で指定した文字列で置換
・対象の文字列.replaceAll(正規表現, 置換する文字列)
・以下の例は正規表現を指定し、0111022203330を戻している
・“[a-z]+”は対象の文字列にaからzまでの文字が含まれているか判断し、含まれていた場合は指定した置換文字列で一括置換


```Sample.java
public class Sample {
	public static void main(String[] args) {

		String str = "abc111def222ghi333a";
		str = str.replaceAll("[a-z]+", "0");

		System.out.println(str);
	}
}
```

##replaceメソッド

・文字列を置き換えるためのメソッド
・対象の文字列.replace(置換される文字列, 置換する文字列)
・**char型**の引数を二つ受け取るものと、**Charsequence型**の引数を二つ受け取るものの２種類があり、どちらかか片方しか使えない
・StringクラスはCharSequence型のサブクラス

##charAtメソッド

・文字列のうち、引数の位置にある文字を戻す
・下記の例は、String型がimmutableなのでstrを取得すると元のstrが出力されてしまう。char型に変更する、新しくインスタンスを作るなどしなくてはいけない

```Sample.java
public class Sample {
	public static void main(String[] args) {

		String str = "abcde";

		char ch=str.charAt(0);

		System.out.println(str);//実行結果:abcde
		System.out.println(str.charAt(0));//実行結果:a
		System.out.println(ch);//実行結果:a
	}
}
```

##trimメソッド

・文字列の**前後**にある**空白を除去**するためのメソッド
・範囲は文字コードで「￥u0000～￥u0020」であり、空文字、改行、ヘッダ開始、水平タブ、ベル、伝送終了などの制御コードも除去対処の「空白」に含む
エンジニアのモチベーションとキャリアから成長と成果を作り出すマネジメント

こちらの記事は[Engineering Manager vol.2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/em2)の9日目の記事になります。


# モチベーションを成果への繋げる方法
エンジニアリングマネージャはモチベーションをパフォーマンスへ変換し、成果に繋げる必要があります。
エンジニアのやりたいと言う思いは全ての行動力の源泉です。それらをどのように繋げるかを考えていました。

# やりたいことの引き出し方、伸ばし方

やりたいことの答えは自分自身の中にはないです。相手から引き出す必要があります。
マネージャから指示したことがやりたいことというわけではないのです。
それぞれのモチベーションを引き出してつなげることが大切です。
これらを引き出す手法の1つとして1on1などが最近の流行になっていると思います。


1on1の中でどのようにアプローチする方法があるかということで、使うスキルとして３つの手法からアプローチを考えました。

- アドバイスを中心とするティーチング
- 相手のやりたいを引き出して整理するコーチング
- ロールモデルとして近くで成長を促すメンタリング

そして、それらを使って情報を引き出したあとの活用として
- ストーリーテリング

について書こうと思います。


# 若手とベテランへのアプローチ

メンバーを育てるといって、様々なメンバーが存在します。
その中で今回は若手とベテランという軸でアプローチのベースが変わることを紹介したいと思います。

若手 → ベテラン

若手には自分のエンジニアとしての知識を伝えていくことが大切です。
ベテランであるほど、自分自身で答えを出すことが出来るため、相手に自分自身で考えるための質問をしていく必要があります。
自分より技術力が高いベテランメンバーもマネジメントしていくことも多く存在します。
きっかりと分かれるというよりはグラデーションのように組み合わせて活用する必要があります。


# ティーチングで最短で一人前にする

若手であるほど、自分のやりたいことに対して周辺の知識が足りず、どのように行動するべきかの選択が外れてしまう可能性が高いです。
そのときには最短でエンジニアとしての基礎力を向上するために直接アドバイスする機会が多くなります。
エンジニアリングマネージャは普通のエンジニアよりもベテランエンジニアであることが多いです。その経験の中から解決の観点となるアドバイスが出来ます。
まずは一人前のエンジニアとなるべき基礎が出来るようになることが重要です。情報収集、分析、観点、思考方法、習慣など、多くのエンジニアとして大きく成長するための基礎力を伝えます。

エンジニアがマネージャをやる理由として、直接的に技術の知識を伝えることが出来ると言うことです。

# コーチングを使い引き出して、成長の方向性を決めていく

やりたいことと言うものは人から決められるものではないです。
そのため、やりたいことをうまく引き出して、業務の目的とつなぎ合わせるストーリーテラーになる必要があります。
個人のキャリアと業務の目標をうまくリンクさせて、モチベーティング、アサインを決めたときに大きな成長の力となると思います。
同じ作業をやる中でも業務と目標と個人の目標がリンクしている方がパフォーマンスが出ますし、仕事の成果を出すために足りない部分の成長と言うのは1日8時間の時間を使うことが出来れば<B>成長が最大化</B>します。

エンジニアがマネージャをやる理由として、エンジニアの気持ちや観点を理解して質問が出来ます。

# メンタリングで背中を見せて示す

ここはエンジニアリングマネージャがプレイングマネージャとしてどれだけ入っているかによる部分もあります。
プレイヤーとして活動している場合には上手くリーディングして技術的な細かな助言や指示が出来る伝える部分も多いです。
専任でマネジメントをしている場合は社員としての文化の行動指針を伝えられればと思います。
メンタリングの定義自体がティーチングやコーチングの一部を含む部分もあるため、差分としてはどのように模範となるべきかを示せればと思います。言葉で伝えられないことは多いため、メンターと言うポジションはメンバーの成長に細かなチューニングしたり、具体的なロールモデルを与えることなり、目指す方向性が具体化して加速させることが出来ると思います。


# ストーリーテリングをして成果につなげる設計をする

ストーリーを作り出すことはエンジニアリングマネージャとして重要な役割の一つとして考えています。

個人の<B>やりたいこと(キャリア)、やれること(スキル)、やるべきこと(タスク)</B>を整理します。
会社が<B>やりたいこと(理想系)、やれること(現実ライン)、やるべきこと(優先度付け)</B>を整理します。
ここに成長とやりがいを結びつけて成果を作り出すストーリーやアサインを考える必要があります。
この中にはシステム保守性や長期運用目線、技術難易度、チャレンジ性はエンジニアのマネージャとして考えるべきですが、マネージャのもう１つの面として <B>ビジネス面も理解</B> して考える必要があります。
メンバーエンジニアが把握しづらい、市場環境、ビジネス価値の届け方、会社のキャッシュフローなどビジネス観点も含めてストーリーを考えてこと現実案となります。

ビジネス的な現実案の提案はエンジニアの視点から越境し、マネージャとしての視点を身につける必要があります。
マネージャ視点になるからと言って技術を忘れて良いわけではないです。そのためエンジニアがマネージャをやる必要があります。

# まとめ

まずは個人のやりたいこと(Will)を引き出し、自分ができること(Can)を増やしWillに近づけるようにします、そのときにやるべき仕事(Must)を上手くアサインすることで強いモチベーションを持ちながら大きく成果を出し、成長も促す事ができます。
その先に個人の達成したいキャリアへ近づく事ができます。

**アサインが上手く行って、本人がやりがいを持って成長したときにエンジニアリングマネージャとしての喜びを感じます！ 
メンバーを大きく成長させて成果を出すために、エンジニアリングマネージャは個人と仕事を繋ぎ合わせる語り手(ストーリーテラー)になりましょう！**
JavaScriptで，文字列のNull or 空判定

# JavaScriptで，文字列のNull or 空判定
## やりたかったこと
jsで，ある変数にNullが入っていたら，分岐させる．
## 結果
変数hogeに値が入っていたら，処理実施．

```javascript
if (hoge) {
 ...
}
```
変数hogeに値が入っていなかったら，処理実施．

```javascript
if (!hoge) {
 ...
}
```
#PowerApps アプリの見た目をなんとなく良くする方法7選

# 概要

Power Platform Day Winter '19 のとあるセッションでの質問で見た目をどう作るのかという質問があったので、具体的なテクニックをいくつかご紹介します。（当方はデザイナーではありませんのであしからず）
https://power-platform.connpass.com/event/149834/

# テクニック

## 色を統一する

Power Apps に限りませんが、大体白、黒+ 3 色程度決めれば何とかなります。
特にビジネスアプリケーションなので、会社のブランドカラーから選ぶとよいかもしれません。

https://colorhunt.co/

## 文字の大きさ、位置を統一する

こちらも Power Apps に限った話ではありませんが、見た目の良いアプリデザインの基本ですね。

## テーマを利用する

手っ取り早く全体のイメージを変えたい場合はテーマ変更ツールやリボンからテーマを選択して利用するといいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/f7f1d4ca-a14a-e39c-5be4-abf90f38215a.png)

こちらも併せてご活用ください。
https://github.com/microsoft/powerapps-tools

## 画像コントロールをうまく使う

具体的な例を1つご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/d5cd9f56-0074-a4ef-f990-0f6361a0a7d2.png)

iOS 通知をイメージした見た目です。
右が背景の白に対して画像を配置し、左は四角アイコンで作成しています。
何となく統一感がある気がします。
Imageに白い画像を指定しているわけではなく、Image を指定せずに背景色白を入れ、 Radius を指定して角丸にしています。
因みにボタンの色コードは以下になります。

```
RGBA(1,124,254, 1) // Primary
RGBA(220,220,220, 1) // gray
```

## ギャラリーかデータテーブルか

パフォーマンスや機能が必要ない場合は データテーブル、そうでない場合はギャラリーを選択してください。

## アイコンを組み合わせる

具体的な例を1つご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/b92bf38b-36d9-28d6-77d3-b137f7f0ed94.png)

カメラ系の画面で使えそうなアイコンの組み合わせです。
全て、アイコンコントロールを利用して作成されています。

## ~~パクる~~ （オマージュする）

いいな！って思う見た目のアプリを~~パクって~~ オマージュしましょう。
Power Apps で 動きはともかく見た目で作れないものはありません。

# まとめ

以上手軽にできるテクニック 7 選でした。
ただし、やはり張り切った見た目でも使いにくければしょうがないので、使うユーザー自身が作るか、ユーザーインタビューをして、使いやすいアプリを作りましょう。

今回作成したサンプルはこちらです。
[サンプルをDL](https://www.powerplatform.work/blog/2019/12/10/PowerApps-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E8%A6%8B%E3%81%9F%E7%9B%AE%E3%82%92%E3%81%AA%E3%82%93%E3%81%A8%E3%81%AA%E3%81%8F%E8%89%AF%E3%81%8F%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%957%E9%81%B8/)
Slackのマークアップ自動補完機能がうざい

## 事象

![コメント 2019-12-09 145525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63338/8dee96a6-e3c2-256f-ce47-bb97f71095e8.png)

テキストボックスに「```」とか書くと↑のようになり、なんかもう面倒くさい。
昔のほうがなれてるし書きやすい！！


## 解決策

![コメント 2019-12-09 145519.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63338/24ac4001-3878-7758-0c3f-7f3b2f287a0e.png)

「**マークアップでメッセージを書式設定をする**」に**チェックを入れる**ことで解決！
データベース ざっくり解説　２リレーショナル代数


##和・差
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382669/4b5e86d3-f941-9088-56f1-766e73b8ab01.png)


##直積

属性が被ってもよい。
イメージ的にはRとSの組み合わせ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382669/4958780e-3854-44e6-1ec8-17be1916d835.png)


##射影・選択

射影は、列を取り出す
選択は、行を取り出す

##自然結合
「選択」でしぼりこんで「射影」で片方だけ取る


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382669/ecd24263-3f86-b00e-aeb9-831d3e49c21b.png)

##共通部分

和両立条件を満たさなければならない
すべて同じ属性を持っている行を取り出す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382669/638951bc-f8ea-7561-e933-8344c4bcee8e.png)
ヒストグラムの種類

勉強のアウトプットとして、今回はヒストグラムについて取り上げていきます。

##ヒストグラム
ヒストグラムとはデータ量の分布を可視化するもの、データがどの分布に偏っているかを調べることができ、QC七つの道具のひとつとして用いられています。このグラフからは外れ値や中心の値を読み取ることができます。

##ヒストグラムの形
ヒストグラムのグラフの形として大きく六つの種類に分類することができます。
・一般型
・ふた山型
・歯抜け型
・右すそ引き型
・絶壁型
・離れ小島型

###一般型
![一般型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E4%B8%80%E8%88%AC%E5%9E%8B%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0.png)
一つ目の一般型はこのような形をしています。これはヒストグラムの中で一番きれいなグラフです。テストの点数表などがこのグラフになりやすいです。

###ふや山型
![ふた山型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E3%81%B5%E3%81%9F%E5%B1%B1%E5%9E%8B.png)
二つの大きな山があるような形をしています。このグラフはデータを二つのグループに分けることができます。もしくは、間違ったデータが入っている可能性が高いグラフです。

###歯抜け型
![歯抜け型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E6%AD%AF%E6%8A%9C%E3%81%91%E5%9E%8B%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0.png)
このグラフは区間幅の取り方のミスや、データの採り方や測定の仕方があまりよくない場合に発生します。このグラフが出るときは、データの採り方や測定方法を変えて作り直す必要があります。

###右すそ引き型
![右すそ引き型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E5%8F%B3%E3%81%99%E3%81%9D%E5%BC%95%E3%81%8D%E5%9E%8B%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0.png)

一般型の左に寄っているような形をしています。これはテストが難しすぎた場合に発生するグラフです。綺麗なグラフに近づけるためにはテストをもう少し簡単にして、平均点をあげるひつようがあります。

###絶壁型
![絶壁型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E7%B5%B6%E5%A3%81%E5%9E%8B%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0.png)

このグラフはデータが選別されているときにおこりやすいグラフで、選別方法をみなす必要があります。

###離れ小島型
![離れ小島型](https://knowledge-makers.com/wp-content/uploads/2018/09/%E9%9B%A2%E3%82%8C%E5%B0%8F%E5%B3%B6%E5%9E%8B%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0.png)

このグラフは外れ値がある場合に現れるグラフです。測定に誤りがあるか、工数に異常があるかを調べる必要があります。
[PHP]多次元配列のソートを1行で書く

## 概要
PHPの多次元配列で、指定したキーを基準にソートしたい場合、次のように処理を書く。

1. ソートしたいキーの配列を作成して、
2. 関数 `array_multisort()` に渡してあげる。

それを1行でやってしまおう。
（PHP5.5.0以降）

## よくあるやり方。
track_num の番号でソートしたい場合、track_numだけを抽出した配列 `$sort` を作って `array_multisort()` の第一引数に渡す。

```php5:array_multisort.php
foreach ((array) $array as $key => $value) {
    $sort[$key] = $value['track_num'];
}
array_multisort($sort, SORT_ASC, $array);
var_dump($array);
```

> 引用：PHPの多次元連想配列のソート
> https://qiita.com/shy_azusa/items/54dadc55e3e71cde1445

## 1行でやる
関数 `array_column() ` を使います。
（PHP5.5.0以降で使えます。）

```php5:array_multisort_1liner.php
array_multisort (array_column($array, 'track_num'), SORT_ASC, $array);
var_dump($array);
```
> 参考：One-liner function to sort multidimensionnal array by key, thank's to array_column
> (多次元配列のキーを指定して１ライナーでソートする。感謝するぜ、array_column。 )
> https://www.php.net/manual/ja/function.array-multisort.php#119291
[ありがとうChainer]Chainerで画風変換

# PFNがChainerの開発終了を発表
https://preferred.jp/ja/news/pr20191205/
機械学習界隈の方々にとって結構衝撃的なニュースではなかったでしょうか？
私も機械学習に関する研究を行っており，Chainerにはとてもお世話になっていました．
PFNから公式でこのニュースを出したことにも驚きました．
しかし最近の機械学習フレームワークの流れを見れば，Pytorchへの移行も止むを得ない状況なのかと思います．
というわけで今回は感謝の意を示して画風変換で遊んでみます．

# Chainer-gogh
2015.09.10にPFNからChainer-goghのプログラムが公開されました．
https://tech.preferred.jp/ja/blog/chainer-gogh/
今年のとあるイベントで研究室紹介の一環としてデモをやってみました．
~~若干今更感がありますが~~紹介させてください．

#画風変換とは？
Chainer-goghとは画風変換を行うプログラムです．
画風変換とはコンテンツ画像に描かれた物体の配置をそのままに画風をスタイル画像に
変換した画像を生成することです．
百聞は一見に如かずということで以下に示します．
この猫の画像をコンテンツ画像とします．
<img width="400" alt="original.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547983/a6462997-cddc-2a84-d5e6-ab5974b46c99.png">
このゴッホの星月夜の画像をスタイル画像とします．
![style_8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547983/43f4774d-9b76-24b6-21b1-486a258b46a6.jpeg)
以下のコマンドを実行しましょう．

* -m ninでモデルを指定  
* -i コンテンツ画像
* -s スタイル画像
* -o 生成した画像を出力するディレクトリ
* -g GPU番号(私の環境では0)

```zsh
$ python chainer-gogh.py -m nin -i input.png -s style.png -o output_dir -g GPU番号
```
するとこのように画風が変換された画像が出力されます．
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547983/93b8fcbf-323c-7547-4de4-ffc28d8ed9d3.png)
コンテンツ画像がスタイル画像の画風に変換されていることが分かります．

#学習回数による違い
先ほど示した画像は5000回学習を行ったものでした．
学習回数が少ない場合はどうなるのかもやってみました．
これが2000回学習を行った画像です．
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547983/4075d79a-dd9d-2721-1246-f661cc12c60c.png)
学習回数が少ないと元々の猫の画像の色が残ってしまっていて，完全に学習できていません．
学習回数でここまではっきり違いが分かるのは面白いですね．

#GPUでの実行
画風変換は大量の計算が必要になります．したがってGPUでの実行が好ましいです．
CPUでもできないことはないですが，先ほどの通り元の画像の色が残ってしまったり，2,3日回しても終わらないかもしれません・・・
GPU環境がない方はAmazon EC2のGPUインスタンスとNVIDIA Dockerを使えば安上がりで構築できます．
(利用状況にもよりますが月$50ぐらい)
GPUで快適な機械学習生活を送りましょう．

#<あとがき>AIの創作物の著作権
ここまでで画風変換について紹介してきました．
いろいろな画像に応用できるので気になった方は是非やってみてください．
最後になりますが，AIがデータを使って生成した創作物は誰のものになるのでしょうか？
AIの開発者,データの提供者,AI自身など候補はたくさんありますが，現状では著作権の権利の対象とはならない
という解釈が一般的なようです．
AIが今回のように画像を生成したり文章を生成したりするのがもっと身近になるのはそう遠くないかも
しれません．
法律がどう整備され，どのような扱いになるのか今後も注目したいと思います．
ここまで読んでいただき，ありがとうございました．
この１年間とあとこの先数年は、勉強会にあんまり参加できないだろうけど静岡の開発コミュニティ最高っていう話

この記事は[静岡アドベントカレンダー9日目](https://qiita.com/advent-calendar/2019/shizuoka)の記事です。

# この記事の背景

私が出産前最後に参加した勉強会は、
@yabecchy さん主催の[Knock!Knock!ゆく年くる年2016](https://iaseteam.eshizuoka.jp/e1736599.html?fbclid=IwAR167QRytQcPXSTMQ3tGtCyTQiiOt8wtWROo_f8Ie1VRYQygWAykadwg-ko) でした。
2016年。懐かしい。

このあと、フリーランスになって、息子くん（現在１歳7ヶ月）が産まれて、バタバタして今に至ります。
2019年は保育園と両親をフル活用させていただいて、平日はバッチリ仕事できています。子育てと両方できて大変でしたけどめちゃくちゃ面白い年でした。
Qiita的に言いますと、LaravelとVue.jsをやりました。

ただ、平日夜や土日の勉強会参加は全然できない！
もうそれは絶望的に！
それでも暗い気持ちにならなくて済んだような気がするので、静岡の開発コミュニティ最高という話を書きたいと思います。

# 静岡の開発コミュニティの良いところ

それで、早速ですが
静岡の開発コミュニティ良いよと思う理由を考えてみます。

- twitterでつながっていれば様子がわかるし声かけあえるし、
- ちょっとコワーキングに仕事しに行けば主催者さんがそこに居たりして話せるし、
- 覚えてくれているし、
- 何なら仕事ももらえる（これは偶然か）
- 県外に出て行ったエンジニアさんもデザイナーさんも、何かと静岡を気にしてくれている
- 和やか、ほんわか。色々な人がいる。同じステータスの人がきっといます...。
- 一応静岡県は横に長くて、西部はruby、中部はgoとphp、東部はpythonやHaskellとかって言われたり言われなかったり異論もあって、とにかくどんな言語でも勉強したいと思ったらきっと場がある
- 子連れOK、飲食OK、入退室自由など運営がゆるめな場合が多い


# 参加するには

どこかしらの勉強会に行くのが早いです。
もしくは、このアドベントカレンダーに書いている人たちはスター的ポジションの人ばかりなので（私以外）、声かけてみたら良いと思います（勝手）。


# 謝辞

諸先輩がた。ありがとうございます！


# 最後に、最近の私の拠点について紹介します

2019年12月に、静岡市葵区城東にある[「いちぼし堂」](https://ichiboshido.com/)に拠点を移しました。
ここは、１F：保育園／２F：コワーキング／3F：貸しオフィスという場所です。
運営主体の北川さんは「越境」とか「カイゼン」とか「ワクワクする」みたいなキーワードを大切にしている方で、どっかで聞いたなと思ったら出典は[こちらとか](https://devlove.doorkeeper.jp/)のようです。
特にITに特化しているわけでもなく多様な人が働く場として運営していらっしゃいますが、IT系のイベントが[2019年はいくつか](https://devlove.doorkeeper.jp/events/84426?fbclid=IwAR1UGbwJHQoHG9QzZV2BJILVPminTNcSebkxshYVtAln5XCmQWOgZ2ubQaM)開催されました。
2020年もITやweb界隈の仕事や活動を応援してくれるはずです。お見知りおきをー！
[勉強会まとめ] Pix2Vox: Context-aware 3D Reconstruction from Single and Multi-view Images

## 読んだ論文
論文([リンク](https://arxiv.org/pdf/1901.11153v2.pdf))
作者のPix2Voxプロジェクト([リンク](https://haozhexie.com/project/pix2vox))

## どんなもの？
- 複数視点(3 view)2D画像から3D(ボクセル)を生成する 
- 従来のRNNを用いた手法(3D-R2N2など)の問題を解決した新しいフレームワークの提案 
- 従来手法(3D-R2N2)よりも24倍高速 


## 技術や手法
### OverView
![68747470733a2f2f696e66696e6974657363726970742e636f6d2f776f726470726573732f77702d636f6e74656e742f75706c6f6164732f323031392f30342f50697832566f782d4f766572766965772e6a7067.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531317/6b345a8d-0521-c6d7-4ff7-2020f6724f22.jpeg)


### Network Architecture
![media_users_user_212769_project_334720_images_x2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531317/a0af83e2-9c7a-1bbc-c012-fedbcf179732.png)


###Context-aware Fusion
![fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531317/277260c8-9895-bb4a-b250-d9d7b691eb23.png)

![fig5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531317/a65c865a-c6e2-e2f6-f1f0-c91bf682019c.png)

## 感想
文章には図の説明しか載ってなかったので省略しました。
こんなネットワーク構造の図を描きたい:worried:


(I.M)
How to pass args or environment variables with Makefile and make command on #Linux

arg in Makefile

`$(FOO)` 

env variable

`FOO=BAR make`

command arg

`make FOO=BAR`

# Makefile

```
send:
	echo $(MESSAGE1) $(MESSAGE2)
```

# Run

```
$ make send MESSAGE1=YES MESSAGE2=OK
echo YES OK
YES OK
$ make send MESSAGE1= MESSAGE2=
echo

$ make send
echo
```

# environment variable

```
# specify env variables directly

$ MESSAGE1=YES MESSAGE2=OK make send
echo YES OK
YES OK

$ MESSAGE1=YES make send MESSAGE2=OK
echo YES OK
YES OK

# args overwrite env ?

$ MESSAGE1=NO MESSAGE2=NG make send
echo NO NG
NO NG
$ MESSAGE1=NO MESSAGE2=NG make send MESSAGE1=YES MESSAGE2=OK
echo YES OK
YES OK

# export env variable works

$ export MESSAGE1=YES
$ make send
echo YES
YES

$ export MESSAGE2=OK
$ make send
echo YES OK
YES OK
```

# Ref

[makefile - Passing additional variables from command line to make - Stack Overflow](https://stackoverflow.com/questions/2826029/passing-additional-variables-from-command-line-to-make)

# JP

make コマンドに引数を渡す方法


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2831








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
TrelloとGoogle Calendarでスケジュールを共有する【Cronofy】


# はじめに
こんにちは、からくりアドベントカレンダーとして記事を書きます。
技術的なことか微妙ですが、よく使っているタスク管理アプリについて書いていこうと思います。よろしくお願いします。

私は主に個人・日常のToDo・スケジュール管理用にTrelloを使っています。
今回はTrelloとGoogle Calendarで予定を同期する便利な使い方を紹介します。
タスク管理・スケジュール管理サービスとして「TrelloとGoogle Calendar」を連携して使っていきます。
##Trelloとは
 https://trello.com 

* 看板式のタスク管理サービス
* とてもシンプルで使いやすく、スマートフォンアプリでも比較的操作しやすい

# Cronofyを使ってTrelloとGoogle Calendarを同期する
##Cronofyを使って同期してできること
* Trelloのカードに期限を追加するとGoogle Calendarにも予定が追加される
* Trelloのカードのスケジュールを変更するとGoogle Calendarにも反映される
* <b>Google Calendarの予定を変更するとTrelloにも反映される</b>

# 同期する方法
ここからはTrelloの導入は済んでいる前提で書いていきます。
参考画像はwin10版Trelloからです
※Trelloの使い方や導入方法は書いていません。

## Power-UPからCronofyを有効にする
* ボードメニューを表示して、Power-UPをクリック
![6c0cd717180f28288e6da321aeac363f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/97a252ea-b0eb-5559-c082-e236d9a2b584.png)


* 「cronofy」と検索し、追加をクリック
![837fa03c9236990eef58f219743aebbd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/1384940a-fd29-f202-f77d-0c675db41cc9.png)

* 「追加」をクリックし、「アカウントを認証」をする
![15038d6e7b6d6001f207172eb2ee3567.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/1c75c03f-ffe8-2925-947b-4b6d1ed11f9c.png)


* すると認証画面に飛ぶのでTrelloと連携させたいGoogle Calendarのアカウントを連携させる


## Cronofyをカレンダーに同期する
* 右上にある「Cronofy」をクリック
![017350c7698fc2960c3867e6d01e6201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/ff7ba8ec-9604-983b-251c-8bcfcef8aff3.png)

---

* 「Calendar」から自分の同期したGoogleアカウントのカレンダーを選択する
* 「Assigned to me」と「All」は必要に合わせて変更してください
* 「Start Syncing」で同期完了です
![edcdd333b0d427684c05906b101299a4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/6c110039-d28a-83e5-7d64-e40ddc3700e1.png)

<u>先程設定したGoogle Calendarに同期されるため、必要ならGoogle Calendar側で新しいカレンダーを作成してください</u>

## カードに期限を追加する 
* カードに期限を追加するとGoogle Calendar側でも追加されます
![70c66031d4058b76576a9feb3e2de45c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/276c2b61-9bca-3b88-3b14-a55eb513eb93.png)

## Google Calendarの画面
![5103210a2c78d49b6009bd79825e993d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535553/b6bf372d-2ab8-b447-feb6-33e50a433d87.png)

## Google Calendar側で移動させた日付はTrelloにも同期される
* Google Calendar側で日時を変更するとTrello側も変更されるためとても便利

## 備考
Trelloの「Power-UP:カレンダー」からicalを発行してgoogleカレンダーにインポートすることもできますが、更新が非常に遅い(調べたら最大24時間くらい？)ので採用していません


# おまけ(日常のタスク管理のこと)
皆さん日常のタスク管理は得意ですか？
私は苦手です。人並みに生活をこなすためにはどうしているか...そうTrelloのToDoリストを作成し、管理して生活しています。

## Trelloを日常で使うメリットを軽くご紹介

* 日常で使う分には無料版でも十分使いやすい
* win10, mac, android...とマルチデバイスで同じ情報が使える
* 買い物等日常のタスクを説明・ラベル付け・期限・チェックリスト等々で管理できる
* 買い物リストや家事のToDoをTrelloで管理すると買い忘れややり忘れがなくなる
* 
 メモ帳やGoogle Calenderのタスク機能よりも説明書きなどがちゃんと書ける上に拡張機能でGoogle Calendarと連携できてとても便利です
 
それでは
windows端末の情報収集

# windows端末の情報取得ツール

- 取得できるもの
  - systeminfo
  - MACアドレス
  - ipconfig
  - netstat
  - タスクスケジューラ
  - ネットワーク情報
  - タスクリスト
  - 環境変数
  - インストールソフトウェア一覧

```bat:getInfo.bat
@echo off
REM ==============================================
REM Windows機の情報取得用
REM ==============================================
setlocal

cd %~dp0
set chdir=%~dp0

REM 実行条件
net user %USERNAME% | findstr "Administrators"
if %ERRORLEVEL% neq 0 (
    echo %date% %time% [ERROR] 実行ユーザにAdministrators権限が必要です
    pause
    goto END-RTN
)

call :ErrorChk 0 "情報収集ツール実行開始"

REM 保存先作成
set resultDir=%chdir%\getInfoResult_%COMPUTERNAME%_%DATE:/=%
if not exist %resultDir% (
    md %resultDir%
    call :ErrorChk %ERRORLEVEL% "md %resultDir%"
)

REM ------------
REM 情報取得開始
REM ------------

REM systeminfo
systeminfo > %resultDir%\systeminfo.txt
call :ErrorChk %ERRORLEVEL% "systeminfo"

REM getmac
getmac /NH > %resultDir%\getmac.txt
call :ErrorChk %ERRORLEVEL% "getmac"

REM ipconfig
ipconfig /all > %resultDir%\ipconfig.txt
call :ErrorChk %ERRORLEVEL% "ipconfig"

REM netstat
netstat -a -n > %resultDir%\netstat.txt
call :ErrorChk %ERRORLEVEL% "netstat"

REM schtasks
schtasks /query /fo csv /v > %resultDir%\taskschedule.csv
call :ErrorChk %ERRORLEVEL% "schtasks"

REM net use
net use > %resultDir%\netuse.txt
call :ErrorChk %ERRORLEVEL% "net use"

REM tasklist
tasklist > %resultDir%\tasklist.txt
call :ErrorChk %ERRORLEVEL% "tasklist"

REM set
set > %resultDir%\set.txt
call :ErrorChk %ERRORLEVEL% "set"


REM インストールソフトウェア一覧
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" > %resultDir%\software.txt
call :ErrorChk %ERRORLEVEL% "reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" >> %resultDir%\software.txt
call :ErrorChk %ERRORLEVEL% "reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall"


REM ------------
REM 終了
REM ------------
:END-RTN
    call :ErrorChk 0 "情報収集ツール終了"
    pause
endlocal
exit /b

REM ------------
REM エラーチェック
REM ------------
:ErrorChk
    set exitCode=%1
    set detail=%2
    if %exitCode% neq 0 (
        echo %date% %time% [ERROR] %detail% ERRORCODE:%exitCode%
    ) else (
        echo %date% %time% [INFO] %detail%
    )
exit /b
```

# まとめ

あまりWindows触ることないので、使えそうな情報集めるツールを作ってみました。
ご指摘等あればよろしくお願いします。
【Vue.js】とあるテキストエディタのライブラリ選定の変遷

アドベントカレンダーでもなんでもないです。


とあるプロジェクトでテキストエディタの開発に1年以上に渡って携わりました。
その中でのライブラリ選定にあたり紆余曲折がありましたので記します。

# 要件
- シンプルにテキスト入力ができる
- データとしてプレーンテキストを取り出せる
- コピー＆ペーストなどができる
- 文字装飾は一切不要
- **画像を挿入できる**

この画像挿入が鬼門となります。
画像挿入を満たすため、WYSIWYGエディタライブラリを模索することとなります。

# version.1 tiptap
https://github.com/scrumpy/tiptap

以下の理由からtiptapを採用しました

- 要件を満たせる機能郡
- **Vueライブラリである**

## 生じた問題
実際にリリースしてみると、特定の環境や操作において以下のような問題が発生してしまいました。

- ペースト時に連続する半角スペースが1つになる
- ペースト時に全角スペースが半角スペースになる
- ペースト時に改行が消える
- 約1万文字を超えるとクラッシュする

主にiOSで多くの異常が見られました。
その他にも**全角文字**や改行コードの入力に関するハックが必要な事象が多く発見されました。

基本的に変換不要な英数字の基本的な入力しかサポートされてないように思われます。

# version.2α
## ライブラリの再選定
https://github.com/codex-team/editor.js
https://github.com/Microsoft/roosterjs
https://prosemirror.net/
https://draftjs.org/

# version.2 quill
いくつかのライブラリを発見したものの、採用実績やフレームワークとの相性を加味した結果次のQuillを採用しました。

https://quilljs.com/

- 試験実装において前回の不具合は発生しない
- Vueライブラリではないものの、導入が容易

## 生じた問題
今回はversion.1における不具合を踏まえQuality Assuranceを通過したものの、新たな特定の環境や操作に依存した不具合が発生してしまいました。

- HTML形式のデータをペーストすると一部不要なスタイルの適用や改行の増加が見られる（Wordなど）
- 特定の環境・特定の位置でbackspaceするとクラッシュする
- **見た目上編集できるがインスタンス内にはデータが存在しないことがある**

特にIEで問題が頻発することとなります。
クリップボード上のHTMLの加工処理の複雑さからこちらの想定するもとのプレーンなテキストをペーストをするのが困難です。
改行に関しては特に`<p>`タグをコピーしていた場合、ブラウザによりテキスト＋改行でとしてデータが取得されるために改行の増加が見られましいた。
また、内部の特殊なデータ構造の複雑さ・イベント処理の複雑さからオーバーライドしての処理なども困難です。

# version.3α エディタ自前実装の検討
これまでの不具合を勘案し、エディタライブラリの自作という選択肢を考慮したものの以下の理由から断念することとなりました。

- メンテナーがいなくなる懸念（少人数チームのため）
- `contenteditable`のブラウザ差異を埋める実装の困難さ
- WYSIWYGを作り込むのは機能過多かつ工数不足

# version3. そして現在
以上を考慮し、`contenteditable`を捨てることとなりました。
結局いくついたのは`<textarea>`です。。。


```抜粋.vue
<div v-for="(t, index) in texts" :key="index">
  <div v-if="t.image">
    <img :src="t.image.src"
         :alt="t.image.alt"
         @click="deleteImage(index)">
  </div>
  <div v-else>
    <textarea v-model="t"
              :index="index"
              :ref="`text${index}`">
  </div>
</div>
```

これに各種カーソル移動や変更のハンドラを追加したものが完成形となりました。

# 教訓
- 過多な機能は誤動作を巻き起こす
- ブラウザ差異の想定されるAPI（contenteditableのような）はライブラリでも解決されない場合がある
- 全角入力は想定されてない場合がある
- iOSとIEは魔境

Simple is best.
gitoliteインストール方法と使用方法メモ

<b>gitoliteをインストールしてリポジトリ管理をする。

環境
・CentOS7

準備
・自分の公開鍵を取得
・config作成(初回だけ)
　C:\Users\PCXXXXXX\.ssh
　　⇒config中身
　　　Host	gitolite
　　　HostName	gitサーバー
　　　IdentityFile 自分の鍵
　　　user ユーザー名
　　　port ポート番号

・ローカル環境にGitをインストール
※今回は自分が管理者となって鍵を管理します

#gitoliteとは
Gitで共有リポジトリのユーザー管理やアクセス管理を行えるツールのこと。
sshの鍵を使用してユーザーを管理します。
※GitHubで公開している。

#インストール
既にCentOS上にGitをインストールしていたため
Githubに公開されているgitoliteをクローンします。

```
# git clone git://github.com/sitaramc/gitolite
# gitolite/install -ln ~/bin
```
※gitoliteをセットアップする前に自分の鍵(管理者)をサーバーに移動させておくこと！

```
# gitolite setup -pk 管理者.pub   //セットアップコマンド
```

/home/git/repositoriesにgitolite-admin.gitとtesting.gitが作成されたのを確認。
gitoliteはこのgitolite-admin.gitを使用してアカウント、リポジトリ管理していきます。

#アカウント追加方法
※ローカル環境上
サーバー上で行ってしまってプチパニックになりました。
今回はGit Bashを使用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442008/7ff8f7cd-27af-1a7c-eac9-05a9c1c0f27e.png)
①ローカルにクローンします。

```
# git clone ssh://root@gitサーバー/home/git/repositories/gitolite-admin.git
```

②ディレクトリ移動して確認

```
# cd gitolite-admin
```

③keydirに自分の鍵が有ったら管理したい人の鍵を入れていく（add,commit）
※confで管理したい人が参照できるリポジトリを指定

```
# git add keydir/管理したい人の鍵.pub
# git commit keydir/管理したい人の鍵.pub conf/gitolite.conf 
```
MySQLテーブルにインデックスを追加するためのベストプラクティス

#はじめに
MySQLテーブルに適切なインデックスを作成することにより、SELECTクエリのパフォーマンスを大幅に向上させることができます。 しかし、インデックスをテーブルに追加するコストが高いですし、テーブルのサイズによっては完了するまでにかなりの時間がかかる場合があります。インデックスを追加している間にインデックス自体の作成にリソースが使われているためDBのパフォーマンスが低下する可能性があります。 この投稿では、通常のワークロードが影響を受けないようにMySQLインデックス作成プロセスを最適化するアプローチについて説明します。記事のソースは[こちら](http://highscalability.com/blog/2019/12/3/best-practice-for-creating-indexes-on-your-mysql-tables.html)です。

#インデックスのローリング作成
MySQLマスター/スレーブのセットがある場合、一度に一つのノードでローリング方式でインデックスを作成できます。 マスターのパフォーマンスに影響を与えないように、スレーブノードでのみインデックスを作成する必要があります。スレーブ上でインデックスの作成が完了すると、現在のマスターを降格し、新しいマスターとしてスレーブを昇格させます。 この時点で、インデックスの構築は元のマスターノード（現在はスレーブ）で続行されます。 フェールオーバーのためにデータベースへの接続が失われる間、短い期間（数十秒）がありますが、これはアプリケーションレベルでリトライを行うことで乗り越えられます。

#ローリング作成の利点
インデックスのローリング作成のパフォーマンスの利点を理解するために、小さな実験を行いました。

次のテストでは、[Sysbench](https://github.com/akopytov/sysbench)を使用して作成されたMySQLデータセットを使用しました。各データベースには、5000万行の三つのテーブルがありました。 バランスの取れたワークロード（50％の読み取りと50％の書き込み）を10分間実行する30のクライアントでMySQLマスターに負荷をかけて、同時に、次のシナリオでいずれかのテーブルに単純なセカンダリインデックスを構築しました：

- マスターでインデックスを作成する
- スレーブでインデックスを作成する

#MySQLコンフィグ
|||  
|:---------------------|:------------------|
| MySQLインスタンスタイプ             |              EC2インスタンス m4.large with 8GB RAM |
| デプロイメントタイプ             |            2 Node Master-Slave Set 準同期レプリケーション |
| MySQL Version             |              5.7.25 |

#試験結果
| シナリオ  | クエリ/秒 | 95パーセンタイルレイテンシー |
|:--|--:|:--|
| マスターでのインデックス作成  | 453.63  | 670 ms |
| ローリング作成  | 790.03  | 390 ms |

#結論
マスターでのインデックス作成時のスループットがローリング作成時のスループットの60%しか出せませんでした。 クエリの95パーセンタイルレイテンシも、マスターでインデックス作成が行われたときに1.8倍高くなりました。

#ローリング作成の自動化
[ScaleGrid](https://scalegrid.io/mysql.html)は、MySQLインデックスのローリング作成の自動化に役に立ちます。UIも結構シンプルです。
![alterblog3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435418/51929ff0-0c4b-d79c-938b-39deb93fdda3.png)

上記のUIでは、データベース名とテーブル名を選択し、「インデックスの追加」をテーブル変更操作として選択できます。 次に、カラム名とインデックス名を指定すると、テーブル変更コマンドが生成されて表示されます。 [作成]をクリックすると、インデックスの作成はローリング方式で一度に1つのノードで行われます。

さらに、ScaleGridは、新しいカラムをローリング方式でテーブルに追加するなど、他の単純なテーブル変更操作もできます。
keycloakのSPI実装

# この記事について
keycloakのログイン時に独自の認証方式を導入したく、認証SPIの実装方法を調査していました。しかし、どこを見ても公式ドキュメントをコピペしただけの内容しか見つからなかったので、備忘録として手短に残します。
**環境**
OS: macOS 10.14.6
keycloak: 7.0.1

## 準備
SPIなどのカスタマイズは全てGithubからダウンロードした、ファイルがJavaで書かれているkeycloakでないとできません。
Githubは開発途中のため```git clone```したのではほぼ確実にエラー出ます。
[releases](#https://github.com/keycloak/keycloak/releases)からちゃんとテストをパスできたバージョンをダウンロードしましょう。

## Let's try!
**認証SPIの実装**
examplesフォルダに既に完璧に実装されているカスタマイズが入っているので、それを使ってSPIの実装を紹介します。

**JARファイルの生成**
```examples/providers/authenticator```に秘密の質問を使った認証SPIが入っています。
ターミナルからここのフォルダで```mvn clean install```してJARファイルにパッケージングします。
```examples/providers/authenticator/target```に```authenticator-required-action-example.jar```と```authenticator-required-action-example-sources.jar```というふたつのJARファイルが生成されます。

**keycloakダウンロード**
別に```$KEYCLOAK_HOME```で```mvn install```してdistributionにkeycloak自体のSNAPSHOTを作ってもいいですが、より確実に[keycloak公式ダウンロードページ](#https://www.keycloak.org/downloads-archive.html)からGithubで選んだものと同じバージョンをダウンロードします。

**実装**
公式版KEYCLOAK_HOMEにprovidersというフォルダを作ります。
先ほど生成したJARファイルを二つともここにコピーして、```./bin/standalone.sh```で起動すれば完了です。

![thumb_3-rules-no-wishing-for-death-no-falling-in-love-65758373.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504005/215798d0-605c-cf6d-f777-fbc3396656bb.png)
パスワード保護されたPDF文書を総当たり攻撃で復号する

本稿では、パスワード保護された**PDF（Portable Document Format）**文書を総当たり攻撃で復号する方法を確認します。

パスワード保護されたPDF文書中に復号パスワードは保存せれていません。パスワードに関連付けられたハッシュが保存されています。そこで、PDF文書からハッシュを抽出し、そのハッシュに対して**総当たり攻撃（ブルートフォース攻撃）**を仕掛け、解読します。

# John the Ripper ジャンボバージョンの入手
まず、`John the Ripper`のジャンボバージョンを入手します。`John The Ripper`とは、[OpenWall](https://www.openwall.com/)が管理しているオフラインパスワードクラッカーツールです。
ジャンボバージョンとは、コミュニティにより強化が図られたバージョンです。公式バージョンには含まれていない多くのコードやドキュメント、データを含んでいます。

>ジャンボバージョンの品質要件は低いです。未成熟なコードのためバグが内在しており、予期せぬ不具合が発生することもあります。

```
root@kali:~# wget https://github.com/magnumripper/JohnTheRipper/archive/bleeding-jumbo.zip
root@kali:~# unzip JohnTheRipper-bleeding-jumbo.zip
```
# PDF文書からハッシュを抽出する
`JohnTheRipper-bleeding-jumbo.zip`を展開し、パスワード保護されたPDFファイル（`pdf_protected.pdf`）からハッシュを抽出するために`pdf2john.pl`を実行します。

```
root@kali:~# perl JohnTheRipper-bleeding-jumbo/run/pdf2john.pl pdf_protected.pdf > pdf.hash
```

出力された`pdf.hash`は次のような記述です（出力結果の一部は`{BLOCKED}`文字列でマスク加工してあります）。

```
root@kali:~# cat pdf.hash
pdf_protected.pdf:$pdf$4*4*128*-1060*1*16*5c8f37d2a4{BLOCKED}32ba4dac0c
```

ハッシュの先頭にはファイルの絶対パスとセミコロンが付いています。これらは総当たり攻撃する際には不要です。削除しておきます。

```
root@kali:~# cat pdf.hash
$pdf$4*4*128*-1060*1*16*5c8f37d2a4{BLOCKED}32ba4dac0c
```

# John the Ripper によるハッシュの総当たり攻撃
Kali Linuxには、予め`John the Ripper`がインストールされています。これを使います。先ほどパスワード保護されたPDF文書から抽出し不要な情報を取り除いたハッシュ情報を含むファイル（`pdf.hash`）を引数として渡します。

ここでは、`--wordlist`引数にて、ハッシュ解析時に使用する辞書ファイルとして`rockyou.txt`を指定しています。

>2009年にソーシャルネットワークアプリを提供する[RockYou](http://rockyou.com/) のデータベースが侵害されました。この事件をベースに作られた`rockyou.txt`には、32,603,388アカウントで使用される14,341,564個の一意のパスワードが含まれています。`Kali Linux`には、この辞書ファイル（`/usr/share/wordlists/rockyou.txt.gz`）が収録されています。

```
# john --wordlist=rockyou.txt pdf.hash 
Using default input encoding: UTF-8
Loaded 1 password hash (PDF [MD5 SHA2 RC4/AES 32/32])
Press 'q' or Ctrl-C to abort, almost any other key for status
ju{BLOCKED}69        (?)
1g 0:00:02:06 DONE (2019-12-05 00:43) 0.007935g/s 54129p/s 54129c/s 54129C/s ju{BLOCKED}69
Use the "--show" option to display all of the cracked passwords reliably
Session completed
```

結果、パスワードは「`ju{BLOCKED}69`」であることが特定できました（出力結果の一部は`{BLOCKED}`文字列でマスク加工してあります）。

# 参考情報
- https://www.sevenlayers.com/index.php/202-pentesting-101-passwords-and-wordlists
- https://ourcodeworld.com/articles/read/939/how-to-crack-a-pdf-password-with-brute-force-using-john-the-ripper-in-kali-linux
- https://blog.didierstevens.com/2017/12/26/cracking-encrypted-pdfs-part-1/
- https://netlockit.wordpress.com/2017/11/03/cracking-password-protected-pdf-files-with-john-the-ripper/
Regolith Linux(i3 版 Ubuntu)使用感メモ[on VirtualBox]

# TL;DR

Windows 10 Home上の VirtualBox を利用して、仮想開発環境を Ubuntu からその派生版 [Regolith Linux](https://regolith-linux.org/) に乗り換えたメモです。

[![](https://regolith-linux.org/assets/regolith-title.png)](https://regolith-linux.org/)

## 環境

| | |
|:-:|:-:|
|OS |`Windows 10 Home 1903` |
|PC |Lenovo ideapad 720S-131KB |

# あらすじ

作業用LaptopのホストOSは Windows ながら、研究開発用途には個人的に Linux が使いやすいと感じていたので、最近は **WSL** を使ったり **VMware** を使ったりしながら仮想開発環境を構築して開発しては調子が悪くなり、なんてことをちまちま繰り返してきました。

今回またそういった環境再構築をするにあたり、今まではオーソドックスな **Debian** や**Ubuntu** の公式イメージを採用してきたけれど、もっと自分に合ったLinuxディストロがあるんじゃないか、と思いいろいろ調べてみました。
そんな中で[こちらのOS](https://regolith-linux.org/)を見つけたので導入してみようと考えた次第です。

# Regolith Linux とは

このディストロは、ウィンドウ同士を重ね合わせて表示する一般的なスタック型ではなく、1画面上を分割してウィンドウを配置していく[タイル型ウィンドウマネージャ](https://opensource.com/article/18/8/i3-tiling-window-manager)を採用している点にあるようです。

実際に、Regolith Linuxの公式ホームページにある *What Makes Regolith Different* の項でも次のように触れられています。

>* Provides GNOME's system management features with [i3](https://i3wm.org/)'s productive workflow.
>* Enables new users a fast and fun way to try out a [tiling window manager](https://opensource.com/article/18/8/i3-tiling-window-manager).

<details><summary>日本語訳(やや意訳)</summary><div>
>* i3の生産的ワークフローをとおしてGNOMEのシステム管理機能を提供します。
>* 新規ユーザーがタイルウィンドウマネージャーを手に取る簡単かつ魅力的な機会をつくります。
</div></details>

# 導入の手順

導入の方法については、以下の記事を参考にしました。`i3 Window Manager` 周りの設定以外は基本的には Ubuntu と同じように導入できるなという感覚でした。

* 導入手順
[i3 版 Ubuntu、Regolith Linux を使うことのメモ | Jenemal Notes](http://malkalech.com/regolith_linux_i3-gaps)

* 主に設定ファイルについて
[Regolith Linuxを使ってみる - tobijibu-ashiato](https://you84815.blogspot.com/2019/08/regolith-linux.html)

また、導入後に自身の設定ファイル管理リポジトリ [borley1211/dotfiles - GitHub](https://github.com/borley1211/dotfiles) を使用した開発環境のセットアップも、ストレスなくすんなりできました。

# 導入後の使用感

作業環境がすっきりしてとても使いやすいです。

![191209_Regolith.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355261/c365cbbe-dd2f-aebc-5795-1346362a4d7a.gif)

開発をホスト側(Windows 上)の VSCode から SSH 接続して行っているため Regolith のデスクトップで操作するのはターミナルがメインになっているので、外観もすっきりしてとても快適です。

# さいごに

私はまだ Linux を本格的に触りはじめて1年も経たない身です。
日々"実はもっとスマートにできる方法があるんじゃないか"という探究心・好奇心を燃料にして開発に取り組んでいる、といった感じです。

ですので

* おすすめの Linux ディストロ
* 内容についてのアドバイス
* 自身の主戦場が現在 Python (Poetry を利用したパッケージ開発) なので、Python まわりのおすすめツール

などなど、コメントいただけるとうれしいです。
データ可視化SDK(Reveal SDK) (Web/デスクトップ同梱)のダウンロードからインストールまで

# はじめに

## Revealとは
[Reveal  ダッシュボードをアプリケーションに組み込み](https://www.revealbi.io/jp)
> Reveal Embeddedは、アプリケーションに組み込み可能なデータ可視化SDKです。シンプルな価格体系、組み込みの容易さでアプリケーションの価値を最大限向上することができます。

## この記事は
Reveal Embedded をアプリケーションに組み込むことができる Reveal SDKのダウンロードからインストールまでの手順を紹介する記事です。
Reveal Embedded はTrial版もあり、無料でお試し頂くことができます。

# Reveal SDKをダウンロード

## Reveal のページを開く
https://www.revealbi.io/jp

## SDKをダウンロード を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/e01fd4e6-c97d-d02e-af94-123cc11b31ea.png)


## 必要情報を入力し、ダウンロードをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/473012ec-d471-18b4-c3ca-3f2c83ccc850.png)


## Reveal SDK をダウンロード
ダウンロードが始まります。もし始まらない場合は画面でもありますが、"こちらをクリック"をクリックしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/f4b47756-7d4b-795e-6642-809b74b7f7e0.png)

## ダウンロードした Reveal SDK を解凍
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/4392e45f-6d23-a63a-c1bb-8fef4b280fcd.png)


## Infragistics_Reveal_SDK_JP.exe を確認
"Infragistics_Reveal_SDK_JP.zip" を解凍して、"Infragistics_Reveal_SDK_JP.exe" が格納されていることを確認しましょう。　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/f258490e-4be6-44bc-6c8f-91d1576aba64.png)

# インストール(所要時間 3分程度)
ダウンロードしたインストーラ"Infragistics_Reveal_SDK_JP.exe"を起動してインストールを進めていきます。

## インストール開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/acdcf08f-7e9c-4d55-ede9-a0cad358526f.png)

## インストール中
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/873b5bf7-3d00-46f8-5da9-159e9be96a3a.png)

## インストール完了
インストールが完了しました。と表示されればOK!
そのまま閉じても構いませんが、サンプルを確認したい場合は、"SDK サンプルを開く" を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/2e3f218b-acca-c69e-31d1-147c11c73dbb.png)

# インストールされたもの。
インストール完了後、どのフォルダに何が格納されてたのか？
デフォルトパスでインストールした場合、下記フォルダにRevealのスクリプトやアセンブリ、サンプルが格納されます。

・サンプル (デスクトップ版 / Web版あり)
C:\Users\Public\Documents\Infragistics\Reveal\SDK\Reveal.Sdk.Samples.sln

・Nuget (デスクトップ版 / Web版で利用)
C:\Users\Public\Documents\Infragistics\NuGet

・スクリプト(*.js)ファイル
C:\Users\Public\Documents\Infragistics\Reveal\SDK\Web\JS\Client
C:\Users\Public\Documents\Infragistics\Reveal\SDK\Web\JS\Server


# まとめ
Reveal Embedded のダウンロードからインストールの手順までをご紹介しました。
"インストールされたもの"でも紹介しているリソースを、アプリケーションに組み込むことにより、Revealを利用できます。
次回以降の記事では、組み込み方からご利用方法まで紹介していきます。
Kaggleで行き詰まったときの対処法とモチベの保ち方

#はじめに:thinking:
もともと書こうと思っていた内容は別の記事*で書いてしまったので、ちょっとネタ切れ感があるのですが、気楽に読んでいただけると嬉しいです。
*[Kaggle Masterになるまでとその後](https://qiita.com/hiromu166/items/9caac6ac2ba525b29a7d)
#Kaggleのコンペって長いですよね、、、
通常、Kaggleのコンペは三ヶ月の期間で開催されていて、ずっと取り組み続けるというのは至難の技だなと感じています。
そこで、個人的な解決策ではありますが、いくつかに分けて紹介していきたいと思います。
#1.スコアが伸びるアイデアが思い浮かばないとき
この悩みは本当に尽きないと思います、、、
私が何かアイデアを思いつくのは、大きく分けて二つのシチュエーションに多いと思います。
一つは、知らない知識をインプットしている時や他のデータを分析している時です。
関連している論文や記事を読んでみると、知らないアイデアを得ることができるので、何も思いつかないときはとりあえず検索してみることが多いと思います。
それでも、ピンとくるものがないときは息抜きも兼ねて他のデータを分析するようにしています。
これは、単に他にも分析したいデータがあるからでもあるのですが、他のデータに対して行っているアプローチが少し見方を変えると適用できたりするので、視野を広げるという意味でも重要だと思っています。

もう一つは、やはりリラックスしているときや調子がいいときです。
私は、お風呂が好きなので近くの銭湯によく行きます。（そこでKaggleをするわけではないので、流行りのSpaggleではない・・・:thinking:）
個人的には、サウナに入ると頭の回転がよくなる気がしてます、、、
あとは、コーヒーをハンドドリップするのも好きなので、ゆっくりコーヒーを飲んでリフレッシュすることも多いです。
調子がいいときは、例えば実装したアイデアがスコアに結びついたときや他のデータ分析がうまくいっているときです。
要するに、モチベーションが高まっているときですね、、、

#2.モチベーションが上がらないとき
コンペの期間中に何度も発生します:sob:
一番の解決策は、Kaggleを頑張っている他の方と関わることだと思います。
例えば、勉強会に参加したり、ご飯に行ったりすることが挙げられます。
<blockquote class="twitter-tweet">
<a href="https://twitter.com/hiromu30694350/status/1203219700823408641?s=20"/>
</blockquote>
やはり、頑張っている姿を見ると、自分も頑張らなきゃと思います:fire:（名古屋Kaggler増えないかな、、、）

また、周りにKagglerがいないという方は、とりあえずTwitterで強い方々をフォローしまくるのをお勧めします。
なんかやる気出ない時は、Twitter見るとやる気出るということもよくあります。

あとは、冒頭で紹介した記事でも述べていますが、リアルイベントに参加したり、オフラインコンペに参加して知り合いを増やすことも大切です。
1人で取り組むよりも、圧倒的に挫折しづらいと思います:grinning:

#おわりに
やはり少し短めの記事となってしまいましたが、冒頭の記事と合わせて読んでいただけたら幸いです。
また、皆さんの対処法やモチベの保ち方をコメントで共有していただけるとすごく嬉しいです！

明日からのKaggle Days楽しみすぎる:sunglasses: