OmniAICreator/Qiita-1.07M huggingface dataset:
Durable Functionsをローカルにインストールするときは.NET Core 2.0.3以降で！！！

Azure Functions（とAzure Web Jobs）の拡張機能であるDurable Functionsがとても面白いなぁと思う今日この頃です。

# ローカル実行環境構築時の注意
手順は公式のドキュメントに丁寧にまとめられています。

[Durable Functions 拡張機能とサンプルをインストールする (Azure Functions)](https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-install)

だた、日本語の言語設定時、ローカルでDurable Functionsをインストールする際、.NET Coreのバージョンが2.0.3より古いとインストールに失敗します。

[Installing Microsoft.Azure.WebJobs.Extensions.DurableTask fails on Mac](https://github.com/Azure/azure-functions-durable-extension/issues/131)

具体的にはこのコマンドを実行するときにエラーになります。

* command

```
func extensions install -p Microsoft.Azure.WebJobs.Extensions.DurableTask -v 1.1.0-beta2
```

* output

```
// （省略）
$HOME.nuget/packages/microsoft.azure.webjobs.script.extensionsmetadatagenerator/1.0.0-beta2/build/Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets(16,5): error : Metadata generation failed. [/Users/sugita-toshinori/dev/codes/csharp/azure-functions-durable-extension/samples/csx/functions-extensions/extensions.csproj]

ビルドに失敗しました。
// （省略）
```

[公式ページなど](https://www.microsoft.com/net/learn/get-started/macos)から2.0.3以降の.NET Coreをインストールしてください。

この記事の執筆時点では.NET Core 2.1.4が最新です。

アップデート後はインストールに成功します。

* output

```
// （省略）
ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:03.85
```

# ドキュメントめっちゃ豊富

Durable Functionsはまだプレビュー状態ですが、すでに詳細な公式ドキュメントが公開されていますし、日本語版もあります。

* [Durable Functions の概要 (プレビュー)](https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-overview)
* [Durable Functions 拡張機能とサンプルをインストールする (Azure Functions)](https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-install)

* オーケストレーショントリガー（ワークフローをC#で記述する）、オーケストレーションクライアント（オーケストレーターを呼び出す）、アクティビティトリガー（個々のタスクを実行する）といったFunctionの役割分担の話
* チェーン、ファンアウト/ファンイン、ステートフルシングルトン、人による操作といったDurable Functionsのユースケースとしてのデザインパターン
* デザインパターンを実装したサンプル（ドキュメント通りに設定すればそのまま実行できる）

などを知ることができます。

また、昨年末のアドベントカレンダーでも、上記のサンプルの1つを活用してわかりやすく説明してらっしゃいました。

[[Advent Calendar 2017 Day1] Durable Functions ことはじめ](https://blogs.msdn.microsoft.com/jpcie/?p=1005)

概要としてはこちらの記事もわかりやすいです。

[Azure Functions の 超イケてる Durable Functions を使ってみる](https://qiita.com/TsuyoshiUshio@github/items/3e8acb1b0388b6045fdb)

ワークフローをコードで記述できるというのは他のプラットフォームではまだないと思うので、興味深いですね！

今週開催される[Durable functions in Action](https://www.meetup.com/ja-JP/Azure-Serverless-Meetup-Tokyo/events/246670574/?eventId=246670574)で情報をアップデートして来ようと思います。
Python：モジュールについて（超基礎）

# モジュールとは？

1. Pythonインタプリタを終了させる
2. 再び起動すると，これまでの定義は失われる

**面倒だ！**

- Pythonでは定義を`.py`ファイルに書いておき，スクリプトの中や，インタプリタの対話インスタンス上で使う！
- この`.py`ファイルをモジュール（module）と呼ぶ．

## モジュールのインポート（モジュールを使う）方法

- ある関数を定義したモジュールを`module.py`とする
- コードでは，`import module`と書いてmoduleモジュールを呼び出す（拡張子の`.py`はいらない） 
- あとは，関数を使うだけ！

---
### まとめ：
1. よく使う関数はファイルに保存し，それを呼び出して使う
2. モジュールはPythonの定義や文が入ったファイル
3. ファイル名はモジュール名に接尾語`.py`が付いたもの
4. `import モジュール名`でモジュールが呼び出せる

とりあえず，ここまでが導入です．
Azure Web Appで初回アクセスが遅い

# AzureのWEBアプリケーションで初回アクセスが遅い場合

初期設定ではWEBアプリがアイドル状態になった際にアンロードされます。
そのため、久々にアクセスした場合などに読み込みが遅くなる場合があります。
この設定はAzureポータル上で変更出来ます。
「Azureポータル→WebApps→設定→アプリケーション設定」

![常時接続.jpg](https://qiita-image-store.s3.amazonaws.com/0/231417/68bb06e7-0858-0e2e-387f-0a3d6f1d49a5.jpeg)

これでアプリが常に読み込まれた状態になります。
リソースの消費は多少増えるようです。
Python 関連で勉強ことはじめ！

# Python 勉強ことはじめ！
## Python 3 について勉強をゼロから始めたので，進捗などまとめていきます！
### 使用しているテキスト

* 詳細！Python 3　入門ノート，大重美幸　著，ソーテック社（2017）
* ゼロから作る Deep Learning Pythonで学ぶディープラーニングの理論と実装，斎藤康毅　著，オイラリー・ジャパン（2017）
* Pythonによる数値計算とシミュレーション　小高知宏　著　オーム社（2018）
* 入門　Python 3　Bill Lubanovic　著，斎藤康毅　監修，長尾高広　翻訳，オイラリー・ジャパン（2015）
* テキストエディタAtom入門　Atom 1.8 対応，　黒田努　著，　OIAX BOOKS（2016）


### 開発環境
　　　〇OS：Windows 10 (64-bit)
　　　〇エディタ：Atom
　　　〇Pycharm


・随時更新します（最終更新：2018/02/07）
LambdaでPythonライブラリを使う場合は64bitが必要

# LambdaでPythonライブラリを使う場合は64bitが必要

タイトルの通りです。ハマったので、忘れないための備忘録です。

## 環境

* Windows 8.1 (64bit)
* Python 3.6

## やりたかったこと

LambdaでPythonの`requests`を使用する。

### 手順

1. `requests`をinstallする
    * `pip install requests -t .`
1. zipでまるごと固める
1. Lambdaにアップロードする

具体的な手順は下記を参考にしてください。

* [【AWS】Lambdaでpipしたいと思ったときにすべきこと](https://qiita.com/Hironsan/items/0eb5578f3321c72637b4)
* [Requests の使い方 (Python Library)](https://qiita.com/sqrtxx/items/49beaa3795925e7de666)

## ハマったこと

Lambda実行時に`Unable to import module ‘lambda_function’: No module named ‘requests’`というエラーが発生する。

## 原因

WindowsにインストールしたPythonが32bitバージョンだった。

## 解決方法

Windowsに64bitバージョンのPythonをインストールした。

WindowsへのPythonインストールはいくつか方法があると思いますが、例えば下記を使用してインストールすればOKです。

* https://www.python.org/downloads/windows/

![02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/549c206b-0184-d4d4-5185-a59777ff7a37.png)

## 補足

おそらく、他の言語でも64bitが必要です。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/ff079e70-ef54-756e-5e12-b13ca7fa57a8.png)

また、使用するライブラリによっては、Amazon Linuxでビルドしたものを使用する必要があります。

* [Lambda 実行環境と利用できるライブラリ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html)

## 参考

* [AWS Lambda 上で Python の外部ライブラリを使用する](https://qiita.com/ta_ta_ta_miya/items/1dd9ae73b45018929f68)
バリデートの初期メッセージを文字化けせず日本語に変更

javaのフォームで使うチェックのアノテーションのメッセージを日本語に変える。
（プロパティファイルに日本語で記述すると文字化けるとから要注意）

Formクラスにチェック用のアノテーションセット

```java
import javax.validation.constraints.NotNull;

@NotNull
private String name;
```

src/mai/resourcesの直下にValidationMessages.propertiesというファイルを作成。
プロパティファイルは以下のように記述。

```properties
javax.validation.constraints.NotNull.message = \u5165\u529b\u5fc5\u9808\u9805\u76ee\u3067\u3059
```

プロパティファイルには、java unicodeで記述する必要がある。
上のメッセージは以下のメソッド作成して

```java
String input = "エラーメッセージ";
StringBuilder result = new StringBuilder();
for(int i = 0; i < input.length(); i++) {
result.append("\\u").append(String.format("%04x", (int) input.charAt(i)));
}
System.out.println(result.toString());
```
検索SQLで、検索欄が空欄のとき、全検索にする

# 概要
検索SQLで、検索欄が空欄のとき、全検索にするSQLは、以下である。

```sql:疑似コード
SELECT
    *
FROM
    A
WHERE
    CASE
        WHEN (検索値) = '' THEN
            (検索値)
        ELSE
            (検索対象列)
    END = (検索値)
```
# 説明
## 検索欄に値が入っていたとき
検索値による検索が実行される。

###　検索値「abc」の例
```sql:WHERE句
WHERE
    CASE
        WHEN 'abc' = '' THEN
            'abc'
        ELSE
            (検索対象列)
    END = 'abc'
```

```sql:CASE式の評価が終了した後
WHERE
    (検索対象列) = 'abc'
```
## 検索欄が空欄のとき
WHERE句の条件式は常にTrueになるので、条件式はなかったのと同じになり、全検索になる。
###　検索値「（なし）」の例

```sql:WHERE句
WHERE
    CASE
        WHEN '' = '' THEN
            ''
        ELSE
            (検索対象列)
    END = ''
```

```sql:CASE式の評価が終了した後
WHERE
    '' = ''
```

# サンプルプログラム
売上テーブルを商品名で検索するプログラムを作成する。

- 売上（sales）テーブル

| 売上金額（sales）  |  売上日（sales_date）     |    商品(item)    |
|--------------:|:----------:|:-----------|
| 100           | 2018-01-14 |  キャベツ   |
| 300           | 2018-01-15 |   桃       |
| 200           | 2018-01-15 |  ニンジン   |
| 100           | 2018-01-16|   キャベツ   |

## 検索プログラムの作成
mysqlのストアドプロシージャで作成する。[^1]

```mysql:ストアドプロシージャ
CREATE PROCEDURE search (IN searchItem VARCHAR(30))

	SELECT 
		*
	FROM
		sample.sales
	WHERE
		CASE
			WHEN searchItem = '' THEN
				searchItem
			ELSE
				item
		END = searchItem;
```

## 検索の実行
### 検索値が入っていたとき
```mysql:ストアドプロシージャの呼び出し
CALL search('キャベツ')
```
#### 検索結果
| 売上金額（sales）  |  売上日（sales_date）     |    商品(item)    |
|--------------:|:----------:|:-----------|
| 100           | 2018-01-14 |  キャベツ   |
| 100           | 2018-01-16|   キャベツ   |

絞り込みが行われる。

### 検索値が空のとき
```mysql:ストアドプロシージャの呼び出し
CALL search('')
```
#### 検索結果
| 売上金額（sales）  |  売上日（sales_date）     |    商品(item)    |
|--------------:|:----------:|:-----------|
| 100           | 2018-01-14 |  キャベツ   |
| 300           | 2018-01-15 |   桃       |
| 200           | 2018-01-15 |  ニンジン   |
| 100           | 2018-01-16|   キャベツ   |

絞り込みが行われない。

[^1]: このTIPSは標準SQLで書けるので、MySQLに依存していない。

# 検証環境
- MySQL 5.7.17
grep コマンドの正規表現の Shorthand Character（\w など）

こんにちは
grep コマンドの正規表現の Shorthand Character[^1] を調べました。

[^1]: エスケープで始めるメタキャラクターです。

* ```\w```,  ```\W``` （alphanumeric, non alphanumeric), ```\s```,  ```\S``` (space, non space) が使えます。

```console
$ echo "a1" | grep -e "\w"
a1
```

#### Perl Regular Expression
Perl Regular Expression (```-P```) [^2] では、さらに多種類の Shorthand Character が使えます（```\d``` (numeric) など）。

```console
$ echo "11" | grep -P "\d"
11
$ echo "11" | grep -e "\d"
$ echo "11" | grep -G "\d"
$ echo "11" | grep -E "\d"
```

[^2]: BSD grep では Perl Regular Expression (```-P```) を持っていないようです。


#### 繰り返し (Extened Regular Expression, Perl Regular Expression)
Extened Regular Expression (```-E```), Perl Regular Expression (```-P```) では、```+```（繰り返し）などが使えます。

```console
$ echo "aa" | grep -E "a+"
aa
$ echo "aa" | grep -P "a+"
aa
$ echo "aa" | grep -e "a+"
$ echo "aa" | grep -G "a+"
```
モックでメソッド呼び出し時の引数を厳密にテストする

PhpUnit の Mock を使って引数の内容をテストするとき、
曖昧比較 (`==`) でテストするなら `equalTo()` を使うが
厳密比較 (`===`) でテストしたい場合は `identicalTo()` を使う。

最初 assertSame() のように sameTo() 的なメソッド名を想像していて中々見つけられなかったのでメモ。

## e.g.

例として渡された二つの引数の引き算を行い、その結果を返す subtract() メソッドがあり
そのメソッドに渡される引数の内容をテストしたいとする。

試しに `with()` を使って引数に 5 と 3 が渡されることをテストしてみる。
以下のように`equalTo()` を使った曖昧比較の場合は、引数に文字列型を渡しても成功する。

```php
$mock = $this->createMock(Something::class);
$mock->method('subtract')
    ->with($this->equalTo(5), $this->equalTo(3))
    ->will($this->returnValue(2));

// 成功
$mock->subtract("5", "3")
```

`identicalTo()` を使って厳密比較にすると引数に int 型以外の値が渡された場合はエラーになる。

```php
$mock = $this->createMock(Something::class);
$mock->method('subtract')
    ->with($this->identicalTo(5), $this->identicalTo(3))
    ->will($this->returnValue(2));

// 失敗！
$mock->subtract("5", "3")
```
誰でもWebVRコンテンツを開発できるプラットフォーム

#挨拶と概要
はじめまして。大学でWebVRについて研究しているものです。
昨年からQiita投稿者さんの記事を参考にしつつ、UnityやA-Frameを使ってVRコンテンツを開発していました。
最近はコンテンツ開発の敷居も下がり、HTML開発初心者の私でも簡単に開発できるようになっています。特に、HTMLタグを記述するだけで開発できるA-Frameは手軽で便利でした。

とはいえ、やはりプログラミングをするのは手間がかかります。
HTMLやJavaScriptの勉強もしなければなりません。
しかし逆に言えば、簡単にVR開発できるようになればブログやSNSで取り入れやすくなり、VRも広がっていくのではないでしょうか？流行りの「インスタ映え」の例もあります。

ということで、手軽にWebVRコンテンツを製作できるプラットフォームを開発します。

#採用技術
[A-Frame](https://aframe.io/)
[JavaScript](https://ja.wikipedia.org/wiki/JavaScript)
[a-mmd](https://github.com/takahirox/a-mmd)
Lat式ミク
（モデル部分は@yutotachibanaさんの記事を参考にさせていただきました）

#プロトタイプ
[WebVR_WorkPlatform](https://github.com/tamailab/WebVR_WorkPlatform)

ダウンロード後、WebVR_WorkPlatform.htmlを開くと、デモ画像のような画面が開きます。
（推奨動作環境：Microsoft Edge）

##デモ
初期画面
![Demo1](https://i.imgur.com/vymM5qF.jpg)

花見をイメージしたVRコンテンツ作成
![Demo2](https://i.imgur.com/66jDOuO.jpg)

「ソースコードを作成する」からダウンロードしたindex.htmlを、WebVR対応のブラウザ（Nightlyなど）で開くと、作ったVRコンテンツを視聴することができます。
![Demo3](https://i.imgur.com/NEmwIBZ.jpg)

詳しい操作方法については、GithubのUsageや、ファイルの中にある説明書に書いてあります。
一部背景画像の引用元：http://dddo.cocolog-nifty.com/test/2013/12/inforicoh-theta.html?cid=141245925#comments

#要求仕様の策定
次に、よりVRコンテンツ製作が行いやすい環境を目指すため、要求仕様を決めます。
本記事で実験とアンケートを実施し、分析結果をもとに仕様書を作り、プロトタイプをベースとしてよりVR製作のしやすい開発環境にブラッシュアップします。

本記事をご覧の皆様にも、ご協力をお願いしたいと思います。

##実験
以下のリンクから、GithubにてVRコンテンツをダウンロードすることができます。
[シューティングゲーム](https://github.com/tamailab/HTCVIVE_ShootingGame)
（推奨動作環境：Unity2017)

[3Dモデルと対面](https://github.com/tamailab/mmd_kissing)
[ポインタでボックス操作](https://github.com/tamailab/Boilerplate_play)
（推奨動作環境：FireFox Nightly)

上記コンテンツのデモ画像などは、Githubに上がっているものを参考にしてください。

##アンケート
以下のリンクから、アンケートに回答することができます。
https://www.surveymonkey.com/r/8QJ2J7X

（実験のリンクにあるコンテンツを体験した後に回答していただけると幸いです）

#最後に
最後まで見て頂きまして、ありがとうございました。
HTMLやJavaScriptを扱ったのはこれが初めてです。ソースコードを見て頂ければ分かるかと思いますが、非常に無駄が多い記述になっています……。
jQueryを使えば記述を省略できるようなのですが、いかんせん時間がない！

大変申し訳ないのですが、デバックもまだまだ甘いところがあります。プロトタイプや実験のリンクにあるVRコンテンツなどで改善点・バグ報告等があった場合はご指摘していただけたらと思います。
それでは！
Elasticsearchで品詞分解② (Kibana編)

この記事は、[Elasticsearchで品詞分解① (テンプレート編)](https://qiita.com/miz21358/items/c8973440f138919197b1) の続きです。

テンプレートとマッピングの定義まで出来たので、データを投入して、Kibanaで表示させてみます。

# テストデータ投入

```
{
    "body_txt": "jsoupというとスクレイピングがよくに出てきますが、こういう使い方もありますよ、という事で。ログイン->cookie保持->ログイン後処理というjsoupコードが日本語であんまりなかったので、せっかくの機会ですし纏めてみました。jsoupで一番苦労するのは、実際に処理が実行されるURLがどういうものなのか、を見つける事ですね。formで指定されていたり、リダイレクトされたり…メモ帳でtsvを触ると、なぜか先頭に?が入ってしまう、という謎の現象が起きたので、IPアドレスの取得方法には正規表現を使用しています。エディタの指定とかできないんで…つい昔の習慣で、beanを作って詰めてしまいますが、最近はこうじゃないんですかね…新しい方法も勉強しないと^^;", 
    "execDate": "2018/01/16T10:40:00+09:00", 
    "paragraph": 1, 
    "title": "[Java]jsoupでブラウザから時刻合わせ"
}
```

# Kibana確認

Kibanaでindexを確認してみると…

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/9bee9e24-a65c-88d8-c3d3-8eebb24cda7b.png)

body_txtだけがテンプレートの条件に合致して、品詞分解が行われました。
＃`searchable`等のチェックは、マッピングで指定した`fielddata`等の指定に依ります。（どれがどの項目に対応してたかは忘れました…）

Discoverで見てみると…

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/ab47878c-c76b-3102-d58a-b304e5b962ef.png)

なぜか品詞分解結果ではなく、投入したデータそのものが表示されています…
Dev Tools で確認しても、投入したデータだけが表示されており、マッピングで追加したフィールドは表示されませんでした。
では、分解に失敗しているかというと、そうでもないようです。


フィルタを原型「纏める」で検索しても、「纏めて」の箇所がヒットしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/20e6606a-d4df-059d-fb21-f97c8d4638aa.png)

マッピングで、`fielddata`と`store`も設定しているので、ビジュアライズのフィールドにも設定可能です。

名詞タグクラウド
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/7dd338df-f62d-fdb8-d8ce-ff0ab1274015.png)

動詞タグクラウド
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/2223b866-72af-5fa1-7973-ee472bd50147.png)

何となく分解はうまくいってそうですが、やはりDiscoverに出てこないとちょっと分かりにくいですね。
という事で、Discoverに分解した項目のリストを表示すべく四苦八苦してみました。

# Scripted fields

[KibanaのScript FieldでPainlessを使う (公式)](https://www.elastic.co/jp/blog/using-painless-kibana-scripted-fields)

`Scripted fields`には`painless`という言語が、5.0より追加されています。
これがなかなか情報がなくてですね……
しかも、フィールドの記載ミスとかの場合、エラーじゃなくてワーニングで出てくるという謎仕様。
＃多分indexのマッピングが変わった時とかに対応してるんじゃないですかね…

そんなこんなで試行錯誤しながら作成した、品詞分解後の項目リストを結合するスクリプトが以下です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/4e40d21a-13bc-a89d-41f8-d6275744206b.png)

```script
def analyzed = doc['body_txt.analyzed-meishi'];
def txt = "";
for (int i = 0; i < analyzed.length; i++) {
  txt = txt + "/" + analyzed[i];
}
return txt;
```

# Kibana再確認

各品詞の項目リストを作成して、KibanaのDiscoverを再表示。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184714/d288bf2d-77e4-09a2-0af9-1767925b4956.png)

分解された項目が一行に結合されて表示されました！

# 所感

Scripted fields 難しいです…もっと色んな事ができそうなんですけどね～
ただ、使いすぎると重くなるそうなので、その辺の兼ね合いが難しいですね。
Powershell動詞別コマンドランキング～

# Powershell動詞別コマンドランキング～

powershellのコマンドは「Get-Content」のように動詞(的な何か)-目的語のような形式になっています。
さらにGet-Verbというコマンドで頭に使える動詞一覧が出てきます。
さらにさらにGet-Commandコマンドを使えばその動詞が接頭辞になっているコマンド一覧が出てきます。

というわけで動詞別にコマンドの多い順番ランキング作れるよね？
というわけで作ってみました。

コマンドこちら～

```powershell
 Get-Verb | %{ [pscustomobject]@{ Verb = $_.Verb ; Commands = @(Get-Command -Verb $_.Verb).Length  } } | Sort-Object -Property Commands -Descending
```

結果こちら～（powershellのバージョンとかで多分変わります。）

```
Verb        Commands
----        --------
Get             1032
Set              535
Remove           467
New              440
Add              155
Enable            92
Disable           89
Start             81
Stop              63
Update            43
Import            37
Test              37
Export            35
Reset             29
Clear             23
Invoke            22
Register          21
Rename            20
Save              20
Unregister        19
Restart           18
Move              16
Publish           15
Write             13
Restore           13
Resume            13
Find              11
Show              11
Copy              10
Suspend           10
Wait              10
Select            10
Install            9
ConvertTo          7
ConvertFrom        7
Out                7
Repair             7
Debug              7
Format             7
Grant              6
Revoke             6
Use                6
Uninstall          6
Resize             6
Disconnect         5
Backup             5
Send               5
Mount              5
Connect            4
Sync               4
Join               4
Unblock            4
Confirm            3
Complete           3
Submit             3
Resolve            3
Optimize           3
Receive            3
Undo               3
Dismount           3
Initialize         3
Edit               3
Unpublish          3
Expand             3
Close              2
Convert            2
Measure            2
Split              2
Enter              2
Assert             2
Exit               2
Block              2
Switch             2
Read               2
Hide               1
Protect            1
Trace              1
Unprotect          1
Lock               1
Compare            1
Checkpoint         1
Unlock             1
Group              1
Merge              1
Compress           1
Pop                1
Push               1
Limit              1
Open               1
Redo               0
Ping               0
Search             0
Step               0
Request            0
Skip               0
Watch              0
Approve            0
Deny               0
```

# 見た感じ

圧倒的にGet/Setが多いですね～
Newはインスタンスを作成するコマンドが多いから上位って感じですね。

Enable/Disable,Start/Stopのペアもなかなか多い

逆に0のやつもある。
Requestなんかは多分これInvoke-WebRequestとかに食われているのでは…

Push/PopのペアはPush-Location一個だけでした。けどこれ地味に便利そう。ディレクトリをスタック式に乗せられるみたいです。(あ、shにそういうコマンドあるのね)
Realsense D435をMacで動かす

Intelから発売された新型Realsense D435が届いたのでMacで動かしてみます。

バイナリはありませんがソースからビルドすれば動きます。

## 公式参考ドキュメント

https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_osx.md

## やったこと

```bash
brew install libusb pkg-config
brew install homebrew/versions/glfw3
brew install cmake
git clone https://github.com/IntelRealSense/librealsense
cd librealsense
mkdir build && cd build
cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false -G Xcode
open librealsense2.xcodeproj
```

XCodeが立ち上がるのでビルドターゲットをrealsense-viewerにする。

<img width="962" alt="スクリーンショット 2018-01-16 午後7.41.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/58926/ded924cf-3b80-9af0-2957-ee2a2d840d49.png">

# 【追記】以下はすでにやる必要ありません。

以前は以下をやらないと動かない環境があったのですが、ちゃんと動くように直しました。

https://github.com/IntelRealSense/librealsense/pull/1054


Build Phasesという設定の左下の＋ボタンを押して、"Link Binary With Libraries"を選択、

* CoreVideo.framework
* IOKit.framework
* Cocoa.framework

を追加する。

これでrealsense-viewerをビルドすると動く。

<img width="1106" alt="スクリーンショット 2018-01-16 午後7.58.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/58926/272e4c13-aecd-127e-2725-a0cde24838bf.png">

## 実行画面

2Dのキャプチャ画面

<img width="975" alt="スクリーンショット 2018-01-16 午後7.58.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/58926/7b21c463-0e9e-71ba-9391-b91ca6aa8ed2.png">

3Dの画面

<img width="975" alt="スクリーンショット 2018-01-16 午後7.58.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/58926/71606672-c50c-5a3c-cc41-d1edb0a8ba42.png">
Google ChromeでコマンドQで終了しないようにする方法

Google Chromeを使っていて、⌘Wを押そうとして⌘Qを押してしまい、アプリを終了してしまうということを繰り返していた。これはいかんと思い、⌘Qを無効化する方法を調べた。
参考にしたページ：https://discussionsjapan.apple.com/thread/10116298
# 手順
- システム環境設定→キーボード→ショートカット→アプリケーション→「＋」→アプリケーション「Google Chrome.app」→メニュータイトル「拡張機能」→キーボードショートカット「⌘Q」→「追加」

やりたいことは⌘Qを無効化することだが、その方法は無いようなので、⌘Qを「拡張機能」を表示するという無害な操作に割り当て、結果として無効化するようにした。これで問題無く設定完了。
ARMプロセッサにFPUが搭載されているか確認する方法

ARMv7なLinuxマシン上で、GoでビルドしたARMバイナリを実行してみたら「Illegal instruction」エラーで死にました。

```
# uname -m
armv7l
# ./hello
Illegal instruction
```

このARMバイナリは下記コマンドで生成しました。`GOARM`環境変数が指定されていない場合はデフォルトでARMv6バイナリを生成します。

```
$ GOOS=linux GOARCH=arm go build
```

ARMv7の方がバージョンが上なのだから、ARMv6バイナリは動きそうなものです。ちなみに、ARMv7バイナリを生成してみても同じエラーで死にます。

## FPUの有無を確認する方法

結論から言うと、今回作ったARMバイナリはFPU命令を含んでいるのですが、このCPUにはFPUがないためエラーで終了しています。

対象のCPUにFPUが存在するかどうかは次のように確認できます。

```
# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 0 (v7l)
BogoMIPS        : 1594.16
Features        : half thumb fastmult edsp tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc09
CPU revision    : 0

Hardware        : BCM5301X
Revision        : 0000
Serial          : 0000000000000000
```

`Features`の行に`vfp`という文字列が見当たらなかったらFPU無しということになります。つまり、このCPUはARMv7命令は理解するけどFPU命令は理解できないということになります。

## GoでARMのsoft-floatバイナリを生成する方法

この問題への対策ですが、Goプロジェクトのビルド時に`GOARM=5`でARMv5バイナリを指定すればFPU無しの機種でも動くバイナリがコンパイルできます。

```
$ GOOS=linux GOARCH=arm GOARM=5 go build
```

現状のGoコンパイラではv5用はsoft-floatバイナリしか作ることはできない一方で、v6用やv7用は必ずhard-floatバイナリになってしまうようです。

## 参考URL

- [GoArm · golang/go Wiki](https://github.com/golang/go/wiki/GoArm)
- [arm \- How do determine whether Linux board is using hardware FPU or not? \- Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/184874/how-do-determine-whether-linux-board-is-using-hardware-fpu-or-not)
【HTML5】カスタムデータ属性（data-*）に、配列やオブジェクトを格納し、jQueryで値を取得する

#各種データの格納と取得について。

裏でデータを持たせておきたい場合、カスタムデータ属性を使用すると便利です。


##HTML記載方法
記載方法は下記の用に data-* で記載します。
*の部分にハイフン「-」も使用可能ですが、jsでのアクセス時にキャメルケースに変換する必要があります。

```html:html
<div id="id1" data-test1='value1'>文字列</div>

<div id="id2" data-test2='{"value1", "value2", "value3"]}'>配列</div>

<div id="id3" data-test3='{"key1":"value1","key2":"value2"}'>連想配列</div>

<div id="id4" data-test4='{"key1":[5,6,7],"key2":[1,2,3,4,5,6,7]}'>多次元配列</div>
```

属性の値をシングルクォーテーション「'」で囲む。
配列やオブジェクトの値で文字列を使用する場合はダブルクォーテーション「"」で囲む。

##jQuery記載方法

```js:js
const text = $('#id1').data('test1')
console.log(text) // 出力：value1

const array  = $('#id2').data('test2')
console.log(array[2]) // 出力：value3

const obj  = $('#id3').data('test3')
console.log(obj["key2"]) // 出力：value2

const obj  = $('#id4').data('test4')
$.each(obj["key1"] function (k,v) {
    console.log(v]) // 出力：5 => 6 => 7
})
```
.data('*記載ID')でアクセスして取得します。

##注意事項
※data属性を再設定する場合はキャッシュの問題があるので下記を参照
 [jQueryのdata-*属性キャッシュ仕様と対策](https://w3g.jp/blog/jquery-data-attr-cache)
緯度経度で距離計算(php)

```php

//緯度、経度の移動量を計算
$lat_dist = ($start_lat - $end_lat);if($lat_dist<0)$lat_dist=$lat_dist*-1;
$lng_dist = ($start_lng - $end_lng);if($lng_dist<0)$lng_dist=$lng_dist*-1;
    
    
//緯度位置における経度量を計算　地球は丸い
$m_lng = 30.9221438 * cos($start_lat / 180 * pi());
if($m_lng<0)$m_lng=$m_lng*-1;

//移動量を計算
$distance = (int)(sqrt(pow(abs($lat_dist / 0.00027778 * 30.9221438), 2) + pow(abs($lng_dist / 0.00027778 * $m_lng), 2)));
```

基本、緯度や赤道での経度の場合0.00027778度で30.9221438mになるので
移動量を0.00027778で割って30.9221438を掛けた値で三角関数を使う。
ただし、緯度は変化しないが緯度によって経度ごとの距離は変わるので
ひとまずスタート地点の緯度でその緯度で経度移動量を計算しておく
rmarkdownをknitする際にpdfでもdocxでもテーブルをきれいに出力する

参考：[ここ](https://stackoverflow.com/questions/35144130/in-knitr-how-can-i-test-for-if-the-output-will-be-pdf-or-word)

Rstudioでknit to pdf またはknit to wordのボタンを使う際に有効。

```
library(knitr)
library(kableExtra)
library(magick)

#どのフォーマットでknitしているかがわかる
  out_type <- knitr::opts_knit$get("rmarkdown.pandoc.to")

#あとはテーブルを作成する
##https://github.com/haozhu233/kableExtra
dt <- mtcars[1:5, 1:4]

tbl <- kable(dt, format = "latex", booktabs = T, caption = "\\em{Demo} \\textnormal{Table}", escape =FALSE) %>%
  kable_styling(latex_options = c("striped", "hold_position"),
                full_width = F) %>%
  add_header_above(c(" ", "Group 1" = 2, "Group 2[note]" = 2)) %>%
  add_footnote(c("\\textsc{table} \\textbf{footnote}"), escape=FALSE)

#docxでなけでば普通にkableの出力。docxであれば画像化する
 if(out_type != "docx"){
    tbl 
  } else {
  path <-  tbl  %>% 
  kable_as_image(keep_pdf = T)
    
  include_graphics(path[1])
  }
```
python　オブジェクティブプログラミングにおける重要な単語　メモ

class　：設計図．　データとメソッドを保持する
instance：実体，オブジェクト
constructor: __init__のこと．インスタンスに関連するデータを初期化する
self：作成中のインスタンスを指す
instance variable　：特定のインスタンスと関連した変数
アクセスするには，クラス内ではselfを使い，クラスの外ではインスタンス名を使う
instance method: selfを第一引数とするクラス内の関数

inheretent (継承)
【Unity】ゲームの途中でXRSettingsのOn/Offを切り替える

GoogleCardboardベースのスマホVRアプリを作っている際に、**ゲーム中に普通のスマホ画面と横向きのVRモードを切り替える**という仕組みが必要になりました。
最初にキーボードを使った文字入力でユーザー情報を入力してから、VR体験のプレイを始めるとか。途中でXRSettingsを簡単に切り替える方法があったので、備忘録もかねて記しておきます。

# **バージョン情報**
Unity 2017.3.0f3

# **Virtual Rearity Supportedを有効にする**
Edit > Project Settings > Player Settings の中の「XR Settings」というところで、「**Virtual Rearity Supported**」のチェックボックスをオンにします。

![vr1.PNG](https://qiita-image-store.s3.amazonaws.com/0/201396/97fde6e7-b169-cc91-12cc-948b0bc7a24b.png)

---
(オプション）
この時もし、VRモードでない時にスマホの向きを固定したい（ジャイロセンサーによる自動画面回転を無効にしたい）場合は、「Virtual Rearity Supported」にチェックを入れる前に次の作業をします。

- 同じくPlayer Settings の中の「Resolution and Presentation」の「**Default Orientation**」を変更します。
    - Portrait : 縦向き
    - Portrait Upside Down：縦向き（上下逆）
    - Landscape Right：横向き（左側面が下）
    - Landscape Left：横向き（右側面が上）
    - Auto Rotation：端末の向きに合わせて自動回転

![vr2.PNG](https://qiita-image-store.s3.amazonaws.com/0/201396/7c5e66a1-cd7a-3fc2-eebb-26b8d9a77ca7.png)

- 「Default Orientation」を変更してから、「Virtual Rearity Supported」のチェックボックスをオンにしてください。VRモードはDefault Orientationの設定に上書きされるようです。

---

# **切り替え用のC#スクリプトを書く**

```c#:XRswitch.cs
using UnityEngine.XR;

public class XRswitch : MonoBehaviour {

	void Start(){
		XRSettings.enabled = false;
	}

	public void XRon() {
		XRSettings.enabled = true;
	}
	.
	.
	.
}
```

冒頭の「**using UnityEngine.XR**」でXR設定にアクセスできるようになり、「**XRSettings.enabled = true/false**」でXRsettingsを丸ごと有効化/無効化できます。
僕の場合は、void Start 内でXRsettingsを切ることでゲームが始まった直後はスマートフォン画面で文字入力やタッチパネル操作ができるようにし、VRモードにしたいタイミングで**関数 XRon()** を呼び出しています。

# **最後に**
以上になります。苦戦した割には、できた時には仕組みは意外と簡単でした（笑）

結構シンプルに書いてしまったと思うので、抜けがあったり質問があったりしたらコメントをくださるとありがたいです。

# **参考**
- [[Unity]GearVRアプリでシーン別にVRモードとそうでない時を切り替える](https://teratail.com/questions/51167)
- [VRモードとノーマルモードの切り替え / naochangblog](http://naochang.me/?p=730)
TensorFlow学習環境メモ

# はじめに
ThesorFlowが動作する環境を構築した時のメモです。

# 動作環境
* Windows10 64-bit Pro
* Intel Corei7-6500U 2.50GhZ
* Intel HD Graphics 520
* [Anaconda 5.0.1(201712)](https://www.anaconda.com/download/#_windows)

# インストール方法
1. スタートメニュー「Anaconda > Anaconda Navigator」を起動する
1. Anaconda仮想環境から「TensorFlow」パッケージをインストールする
![ts01.png](https://qiita-image-store.s3.amazonaws.com/0/13507/14e0d856-a877-1511-9de7-965730c5c76a.png)
1. thensorFlowパッケージインストール

    ```slack
    > pip install --ignore-installed --upgrade tensorflow
    ```

1. jupyter notebook インストール & 起動する。

    ![ts02.png](https://qiita-image-store.s3.amazonaws.com/0/13507/b2354b7b-7b29-ae4d-4faf-78d6d93bb1fd.png)

1. jupyter notebool 上でサンプルコードを実行する。

[thensorflow installマニュアルより](https://www.tensorflow.org/install/install_windows)

 ```python:sample.pl
 import tensorflow as tf
 hello = tf.constant('Hello, TensorFlow!')
 sess = tf.Session()
 print(sess.run(hello))
 ```
![ts03.png](https://qiita-image-store.s3.amazonaws.com/0/13507/e00b0d9b-218a-e2a2-fc8d-a7d9e88fbb8e.png)

# ”MNIST For ML Beginner” を実行する。

[thensorflow スタートアップより](https://www.tensorflow.org/get_started/mnist/beginners)

# メモ

### tensorflowバージョン確認

``` cmd
> python -c 'import tensorflow as tf; print(tf.__version__)'
```
rmarkdownからdocxファイルをknitする際にテーブルをきれいに生成する

Rmarkdownで書類を作成する際に一番困るのがdocxファイルに変換するとき。すべてpdfで扱えれば一番いいのだが、どうしてもワードが必要なときにしょっちゅう出くわす。rmarkdownでknit to wordとする際にkableのテーブルが出力されないので、画像としてきれいに一旦保存して、それを埋め戻すことにする。

なお今回はRstudio Cloudにmagickパッケージがインストールできなかったのでベタ打ちのみ。すべてRstudioのRmdファイル上でKnit to wordボタンを実行。

##ライブラリの読み込み
```{r library}
library(knitr)
library(kableExtra)
library(magick)

```


##テストデータのインポート
```{r import data}

dt <- mtcars[1:5, 1:4]
##https://github.com/haozhu233/kableExtra
```

## kableにてテーブルを作成
###Latex
```{r LaTeX Table 1}
#from an official example
path <-  kable(dt, format = "latex", booktabs = T, caption = "Demo Table") %>%
  kable_styling(latex_options = c("striped", "hold_position"),
                full_width = F) %>%
  add_header_above(c(" ", "Group 1" = 2, "Group 2[note]" = 2)) %>%
  add_footnote(c("table footnote")) %>% 
  kable_as_image(keep_pdf = T)
    
  include_graphics(path[1])
```

<img width="1440" alt="Untitled.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/224794/d7e87637-9dff-e300-6fe2-db49b0a8f5e2.jpeg">
Bibtexで小文字になっちゃう問題

bibltex で title が小文字になる場合の対処法

```bibtex
@misc{foo,
title = {{Abc BcD}},  # とりあえず{}を二重でかければ大丈夫
}

```


一括変換

```sh
ruby -i -pe '$_.gsub!(/{/, "{{").gsub!(/}/, "}}") if $_.match(/title\s*=\s*/) && $_.scan(/{/).count == 1' ファイル名
```

エディタの置換でもいい
tsvファイルからMarkdownテーブルフォーマットを作成するperlスクリプト

## tsvファイルを読み込んで、Markdownのテーブルフォーマットにエクスポートするスクリプト

### 実行方法

```bash
$perl make_mdtable.pl inputfile.tsv > output.md
```
### 備考
- Markdownのテーブル列の形式には、左詰、中央揃え、右詰がありますが、下記スクリプトでは全ての列が左詰になっています。

### 開発目的

最近何でもマークダウンで書いていますが、tableフォーマットを手書きするのが面倒になってきたことと、perlの練習のために作成してみました。


### スクリプト

```perl:make_mdtable.pl

#!/usr/bin/perl

use strict;
use warnings;
use utf8;

my $rec_id =0;

while (my $line =<>){
	chomp($line);

	#レコードの数をカウント
	$rec_id ++;

	my @F = split/\t/,$line,-1;

	# フィールドの数をカウント
	my $cnt =@F;

	my $ic =0;
	print "|";
	while($ic < $cnt){
		print "$F[$ic]|";
		$ic++;
	}
	
	print "\n";
	if($rec_id ==1){
		$ic=0;
		while( $ic < $cnt){
			print "|:----------";
			$ic++;
		}
		print "|\n";
	}
}

```

### 開発環境

- macOS Sierra
- perl 5, version 18, subversion 2 (v5.18.2)
tensorflow r1.4 で Error: No module named 'tensorflow.contrib.quantize' となる時の対処法

モジュールが無いと言われる時の、確認方法と対処法。
ModuleNotFoundError: No module named 'tensorflow.contrib.quantize'

参考：[【Python】インストールしたはずのMuduleが「No module named '***'」になったときの解決策](https://qiita.com/KoronHM/items/2f4d6716a8218676fcfa)


# モジュールのありかを確認する

finderか何かで確認すると、
おそらくtensorflow/tensorflow/contrib/quantize
とあると思うが、実はそれ、pythonが見に行ってる場所と違うらしい。

`$ python`
でpythonのコマンドラインに入って

```:python
>>>import tensorflow
>>>print(tensorflow.__file__)
```
と一行ずつ打つと
`/usr/lib/python3.2/site-packages/tensorflow/__init__.py`
こんな感じで返ってくる。

移動すると
`$ cd usr/lib/python3.2/site-packages/tensorflow/contrib`
quantizeないじゃん！！！！！

#モジュールの場所を移動

というわけで、
tensorflow/tensorflow/contrib/quantize
から
usr/lib/python3.2/site-packages/tensorflow/contrib/ココ
にコピペで移動させる。

`usr/lib/python3.2/site-packages/tensorflow/contrib/quantize`
となればOK。
UnityでSQLiteを使用する for iOS


SQLiteUnityKit
https://github.com/Busta117/SQLiteUnityKit

# プロジェクトに配置

Unity - マニュアル:特殊なフォルダー名
https://docs.unity3d.com/jp/530/Manual/SpecialFolders.html

ライブラリは Plugins フォルダ配下に設置します。

```
Assets
	Plugins
		iOS
			libsqlite3.so
```

スクリプトを配置します。

```
Assets
	Scripts
		DataTable.cs
		SqliteDatabase.cs		
```

SQLite のデータベースファイルはコピーして使用されるように StreamingAssets 配下に設置します。

```
Assets
	StreamingAssets
		test.db
```

Application.persistentDataPath で取得されるパスにコピーされます。
コピーされたファイルに対してクエリが適用されます。

> /Users/{ACCOUNT}/Library/Application Support/DefaultCompany/{PROJECT}

# クエリの実行

## データベースの読み込み

```
SqliteDatabase db = new SqliteDatabase ("test.db");
```

## データ登録（または削除）

.ExecuteNonQuery() を使用します。

```
string query1 = "INSETR INTO TEST_MST VALUES (1, 'name')";
db.ExecuteNonQuery(query1);
```

## データ取得

.ExecuteQuery() を使用します。

```
string query2 = "SELECT * FROM TEST_MST";
DataTable dataTable = db.ExecuteQuery(query2);

foreach(DataRow row in dataTable.Rows){
	int id = (int)row["id"];
	string name = (string)row["name"];
	Debug.Log ("id= " + id + ", name=" + name);
}
```

# マルチバイト問題

英語圏で作成されたライブラリのためマルチバイトに対応しておらず、クエリにマルチバイト文字が含まれるとクエリエラーが発生します。

Prepare メソッド内でクエリ文字数を処理している箇所を修正します。

```:SqliteDatabase.cs
// Query の文字数をマルチバイトを考慮して取得する
int length = System.Text.Encoding.GetEncoding("UTF-8").GetByteCount(query);
// query.Length を置換する
if (sqlite3_prepare_v2 (_connection, query, length, out stmHandle, IntPtr.Zero) != SQLITE_OK) {
```

# StreamingAssets コピー置換仕様

```:SqliteDatabase.cs
if (!System.IO.File.Exists (pathDB) || (System.IO.File.GetLastWriteTimeUtc(sourcePath) > System.IO.File.GetLastWriteTimeUtc(pathDB))) {
```

ファイルが存在しない、または **タイムスタンプが古い場合にコピー置換される仕様** になっているため、マスタを更新したアプリアップデートを行うと上書きされます。

そのため、データベースにマスタ以外のユーザデータを作成・更新などしている実装を行う場合は適宜対応が必要になります。

要注意点です。

- タイムスタンプの比較条件を消す
- フラグを渡して true のときのみコピーする
- ユーザデータのバックアップを取ってからコピーしユーザデータを入れ直す
- ユーザデータの DB を分けてそのファイルは置換しないようにする

など対応します。
（だいたい）ゼロから始めるＧＧＪの記録　Part1:参加申し込み前後編 

#はじめに
中の人はゲーム開発経験ゼロ、ということになっているレベル１のスライムのはずです。そういう設定でお願いします[※1]。
そんな自分が一発念起[※2]してＧＧＪに参加しようと思ったので、今日までにやったことをまとめます。

※1 少なくともオーバーフローでレベル１に戻ったわけではないです（
※2 なぜか変換できない（ヒント：いちねんほっき）

#きっかけ
元々生来のゲーム好きだったのですが、それが高じてゲーム作成者の方と飲む機会を幾度となく頂いておりまして、そんな中大先輩様から「もう１０年位このメンバーで飲んでいるのだから、そろそろ自分でゲーム作れるよね？」とか「おまえがゲーム作れないのは作ってないだけなんだよ、ヤレ＾＾」とかだいたいそういう感じの大変ありがたい煽りを頂きまして、「いや本当は作りたいんだけど今○○が足りないんだよなぁ（○○は時間とか技術とかエンジン理解度とかそういうの）」という自分への言い訳をやめて本気で向き合う事にしようと思ったりしたなど。

…そういう人脈とモチベーション源があるんで一応完全にゼロではないですが、まだ頼ってはいないのでたぶん大丈夫です、たぶん。

#具体的に考えてみた
まぁ上記のようなやり取りがあったのが昨年晩秋の[デジゲー博](http://digigame-expo.org/)～新年会位だったので、実際に行動に移すにあたってどう動けばよいかをちゃんと考えたのが一月の連休（６～８）でして。

##デジゲー博で宣伝されてた"GGJ"を思い出した
デジゲー博で広告訂正
そういえば初冬位にだらだら情報収集している時に見かけた[初心者向けゲームジャム攻略法](https://www.slideshare.net/hima_zinn/ss-57421119)に「メタル大発生スペシャルだから経験値が荒稼ぎできるぞ！」的なことが書いてあったのをすらいむ的[※3]に思い出したので、とりあえず参加してみようと思った。
…が、正直情報が足りなすぎる。

※3 メタルスライムの例えがなかったら確実に忘却していたはず。すらいむでよかった。

##Tokyo Indiesがちょうど開催された
そんな連休明け、ふとTimelineを見たら「本日（1/9）は新年一回目のTokyo Indies」ってツイートが流れてきたので、これは恐らく参加予定者が居るだろうし、あわよくばチームに拾ってくれる人が居るかもという発想で行ってみる事に。
TL上でのリツイート源でもあったデジゲー博主催の[@dnasoftwares](https://twitter.com/dnasoftwares)さんを頼り、GGJに参加しそうな人からお話を伺うことが出来まして、「君のようなタイプなら八王子会場が良いのではないか」とのご助言をいただいたため、その場で参加申し込みをするなどしました。

##申し込みだけで上達するなら今頃ｒｙ
参加を決めただけでそもそも何ができるの、って話なので、スキルシートに「得意なことはないよ！」という旨をまとめるためだけに（）久々にgithubの自己紹介を更新しました[(github | miihon-ani / self-intro-miihon-ani)](https://github.com/miihon-ani/self-intro-miihon-ani/blob/master/indie-game.md)。嘘は書いていない…はずです。

###ドキュメントを漁る
流石に徒手空拳で行くつもりもないので、とりあえず以下を精読。

- [初心者向けゲームジャム攻略法](https://www.slideshare.net/hima_zinn/ss-57421119)　…さっき出た奴
- [楽しくて病みつきになるゲームジャムのススメ](https://www.slideshare.net/pigeon6/ss-13910436)
- [Unity道場](https://www.slideshare.net/UnityTechnologiesJapan/clipboards/unity)　
 - [【Unity道場】初心者のためのゲームジャムの心得](https://www.slideshare.net/UnityTechnologiesJapan/unity-79075262)
 - [【Unity道場】初心者には初心者の戦い方がある！スキルがなくても付け焼き刃で戦う小手先テクニック](https://www.slideshare.net/UnityTechnologiesJapan/ss-79075215)
- [Qiitaで"ggj"って入れてみた](https://qiita.com/search?q=ggj)　…少々ノイズはありますが記事作成時で20件。他にも"gamejam"とか思い思いにあるので適当に掘り下げる。

###同じ会場で参加する人のリストをみて、Twitterでフォロー
自分はは八王子会場なので参加者リストにアカウントが載っている人がいました（[[申込者リスト]1月26日 Global Game Jam 2018 東京工科大学会場](http://kokucheese.com/event/subscriptions/499350/)）。
アカウントを書いている人は多くないですが、その中から何人かをフォローしておきました。もしくはリストを作っておくのもいいかもしれません（誰かが作っていたら便乗っていう手もあるのかしら）。

##そして事前準備へ
上記文章を読んでいれば、ある程度の環境を整えておくことが重要になるとわかるので、とりあえずPCをセットアップ。ラップトップが古いMacBookProしか無い…けどまぁ何とかなるといいな。

実際はこれからやるので、Part2へつづく。はず。
Spectre 脆弱性について その２

## ３つのバリアント

Project Zero が報告したサイドチャネル攻撃による特権メモリーの漏洩に関する脆弱性では、以下の３つの変種が指摘されている。

* Variant 1: bounds check bypass (CVE-2017-5753)

* Variant 2: branch target injection (CVE-2017-5715)

* Variant 3: rogue data cache load (CVE-2017-5754)


Variant 1 については、

Spectre 脆弱性について
https://qiita.com/noumia/items/303e890fb50730bd5115

で解説している。


Variant 3 は、いわゆる Meltdown 脆弱性であり

Meltdown 脆弱性と緩和策について
https://qiita.com/noumia/items/a4a53e2325dfea820658

で解説している。


## 投機的実行における分岐先のインジェクション

Variant 2 では、分岐命令の投機的実行において、悪意ある攻撃者による分岐先予測の制御の可能性が指摘されている。

分岐命令の投機的実行では、フラグによる分岐の可否の予測に加えて、分岐先の予測が行われている。

これは、間接分岐命令においては、分岐先アドレスの確定に時間がかかる場合があり、また、命令のフェッチがパイプライン上で最初に行われる処理であるので、分岐先アドレスを可能な限り速やかに入手する必要があるためである。

分岐先予測を行うプロセッサーでは、BTB (Branch Target Buffer) が実装されており、命令実行の履歴に基づいて分岐先アドレスの予測を行っている。

さて、ターゲットプロセス上に、攻撃者の意図する副作用を起こすコード片 (元 paper では、gadget と呼ばれている) がマッピングされているとする。

現在の実用システムのプログラムでは、数 MB に及ぶ共用ライブラリーのコードがリンクされており、このようなコード片を見出すことは、必ずしも困難でないとされている。

BTB は、プロセッサー上の資源なので、プロセス間で共有されており、BTB 予想が命令実行の履歴に依存すると仮定するならば、攻撃者の制御するプロセスで誘導したいアドレスへの分岐を繰り返す等の手法で、予測アドレスがコントロール可能となる。

攻撃者は、ターゲットプロセス上の特定の間接分岐命令を目標として、意図した命令群の投機的実行の強制を試みることができ、サイドチャネルによる情報漏洩につながるものと指摘されている。
Post Processing Stackと輪郭シェーダー併用で輪郭を光らせる

[Post Processing Stack](https://assetstore.unity.com/packages/essentials/post-processing-stack-83912)と輪郭シェーダー併用で輪郭を光らせてみます

![スクリーンショット 2018-01-16 17.45.46.png](https://qiita-image-store.s3.amazonaws.com/0/59911/1a218edd-6c20-723e-9253-4ac199c62a41.png)

まずカメラにアタッチする輪郭シェーダーおよびスクリプトを用意します。

シェーダーのColor指定をHDRにするには　 ```[HDR]``` Attributeをつけ、
スクリプト側のInspectorでHDR Colorを変更したい場合は例えば
```[ColorUsage(true, true, 0f, 5f, 0.2f, 2f)]```
のように[ColorUsageAttribute](https://docs.unity3d.com/ScriptReference/ColorUsageAttribute.html)を指定します。

```ScreenDepth.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace MyDepthDemo{
	[ExecuteInEditMode]
	public class ScreenDepth : MonoBehaviour {
		[SerializeField] Material m_DepthRenderMat;
		void OnRenderImage(RenderTexture src, RenderTexture dest)
		{
			Graphics.Blit (src, dest,m_DepthRenderMat);
		}
	}
}
```

```ScreenEdgeEmitShader.shader
Shader "Custom/ScreenEdgeEmitShader" {
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
		[HDR] _Color ("Emission Color", Color) = (0,0,0)
        _EdgeWidth ("Edge Width", Range(0, 10)) = 1
    	_Sensitivity ("Depth Sensitivity", Range(0, 10)) = 1
    }
    CGINCLUDE
    #include "UnityCG.cginc"
    sampler2D _MainTex;
    sampler2D_float _CameraDepthTexture;
    float4 _Color;
    float _EdgeWidth;
    float _Sensitivity;

    struct v2f {
        float2 uv : TEXCOORD0;
    };

	float edgeCheck(float2 i_uv){
		float2 txSize = 1/_ScreenParams.xy*_EdgeWidth;
		float2 base_uv = i_uv - txSize*0.5;
	    float2 uv0 = base_uv;
	    float2 uv1 = base_uv + txSize.xy;
	    float2 uv2 = base_uv + float2(txSize.x, 0);
	    float2 uv3 = base_uv + float2(0, txSize.y);

    	// Convert to linear depth values.
    	float z0 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv0));
    	float z1 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv1));
    	float z2 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv2));
    	float z3 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv3));

    	// Roberts cross operator
    	float zg1 = z1 - z0;
    	float zg2 = z3 - z2;
		return saturate(sqrt(zg1 * zg1 + zg2 * zg2)*_Sensitivity);
	}

    fixed4 frag (v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
    {
        float z0 = edgeCheck(screenPos.xy/(_ScreenParams.xy));
        fixed4 c = tex2D (_MainTex, i.uv);
		c.rgb += z0*_Color.rgb;
        return c;
    }
    ENDCG

    SubShader
    {
		Tags { "RenderType"="Opaque" }
		LOD 100
        ZTest Always Cull Off ZWrite Off
        Pass
        {
            CGPROGRAM
			#pragma vertex vert_img
            #pragma fragment frag
            #pragma target 3.0
            ENDCG
        }
    }
}
```
上記シェーダーを適用したマテリアルを作成し、スクリプトとともにカメラにアタッチします。

![スクリーンショット 2018-01-16 17.53.42.png](https://qiita-image-store.s3.amazonaws.com/0/59911/e5908b69-55aa-98f3-fbeb-1c14d5dc107f.png)



カメラのAllowHDRにチェックを入れ、アタッチする場所はPostProsessingBehaviourより上にします。

エッジが出るものは全て光ってしまうので(Unlitや半透明は光りません)使い所は難しそうですが、カメラの向きに合わせてColorを変化させてあげればエモいシーンに使えるかも？

同様の手法で、スクリーン全体ではなくモデル単体にエッジを出す方法は[こちら](https://qiita.com/ELIXIR/items/73a728fbe93b0ba046e7)です。
【備忘録】Sketchでフキダシを作成する

![sketch.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c5c759dd-e6dc-b875-1e94-ae7ff8f22259.png)

# 1. フキダシをつける図形を作成する

![hukidashi1.png](https://qiita-image-store.s3.amazonaws.com/0/141934/74ff139f-4e33-ddb3-ef93-3c3de352b5d7.png)

# 2. Vectorでフキダシグチを作成する

![hukidashi2.png](https://qiita-image-store.s3.amazonaws.com/0/141934/3d1f5b54-7808-a0d4-3121-2438a219308a.png)
![hukidashi3-3.png](https://qiita-image-store.s3.amazonaws.com/0/141934/b88056ea-ef99-397c-3556-7bffe079dbea.png)
![hukidashi4.png](https://qiita-image-store.s3.amazonaws.com/0/141934/85119a9e-eae7-e229-2edd-3225bbe3a787.png)

# 3. 図形とVectorを結合する

![hukidashi5.png](https://qiita-image-store.s3.amazonaws.com/0/141934/4cc0c790-e798-a0c2-809c-a7545c0c1f08.png)
![hukidashi6.png](https://qiita-image-store.s3.amazonaws.com/0/141934/f1af5b2f-084d-e588-f17b-efe680d8ad90.png)
concrete5 ver.8ではIPログインブロック解除のしかたが違う

concrete5はデフォルト設定だと、何回かログインに失敗するとIPアドレスがブラックリストに追加されてログインできなくなります。まぁデフォルトだと10分待てば解除されるようになってるみたいですが、オレは………オレは今なんだよ！というときもありますね。

「concrete5 IP ブロックされた」とかで検索すると解除方法が出てくるんですが、大体5.7以下向けの方法で、ver.8以降だと違う方法が必要になります。

自分がやってみたら解除できたぞって方法で、公式に書いてあるわけじゃないっぽいので、自己責任で。

# 5.8以降の方法
- データベースから「LoginControlIpRanges」テーブルを見つける
- その中の自分のIPが書いてあるレコードを削除

以上です。これでログインできるようになるはず。僕は3つぐらいレコードが出てきて、めんどくさいのでごっそり消しましたが、特に問題ありませんでした。
PHPの配列をjsで配列として扱う

#PHPの配列をjsで配列として扱う

php側で json_encode でjsonデータを作成して表示処理に渡す。

表示側でphpタグでJSON.parse にphpタグで先程のjsonデータを表示する。
　※js側ではテキストデータなのでクォート「''」で囲む


```php:php
$json = json_encode(['4'=>'19:00','5'=>'19:30','6'=>'20:00']);
include('js');
```


```js:js
const times = JSON.parse('<?php echo $json; ?>')
$.each(times, function(k, v){
   console.log(k+'=>'+v) 
})
```
Sublime Text3 > Bug > サイドバーの選択とタブで開くファイルのずれ | 対処

```txt:動作環境
Windows 7 Pro (32bit)
Sublime Text 3 Build 3143
   - ConvertToUTF8インストール済
```

Shift-JISの多量のソースファイルを閲覧している。

- 1. Ctrl + 0
    - サイドバーにフォーカスが移る
- 2. :arrow_down: 
    - 次のファイルがタブにて開かれる
- (3. ファイルのエンコーディングを問われる場合)
    - エンコーディングを選択して、手順1に戻る
- 手順2に戻る

上記の処理をしている過程にて、サイドバーの選択とタブで開くファイルのずれが発生する。

手順3のエンコーディング選択での:arrow_down:キーの入力がサイドバーの現在位置に加わっているのかもしれない。

ずれは必ず発生するというわけではない。条件は未消化。

### 対処

Close All Filesでいったんすべてのタブを閉じる。
再度、上から順番にタブを開いていき、「エンコーディング未確認のすべてのファイル」に対して、エンコーディングを確定すれば、ずれは発生しなくなるだろう。
[PHP]インクルード処理系関数の違いを簡単にまとめてみる

#関数の種類
include();
require();
include_once();
require_once();

#includeとrequireの違い
includeはエラーが出ても処理を続行
requireはエラーが出たら処理止める

include_once();とrequire_once();はそれぞれ読み込みを一度しか行わない。
ansible2.4での動的タスク導入方法

ansible2.4以降スクリプト（playbook, role, task）を再利用する方法がinclude一択から
import*とinclude*に分かれました。
# import*とinclude*の違い
[ドキュメント](https://docs.ansible.com/ansible/2.4/playbooks_reuse_includes.html)を訳すると
- import*文（import_task<font color="DeepPink">s</font>, import_role, import_playbook）はスクリプトが実行される前にパースされます。
- include*文はスクリプトの実行時でパースされ、したがって動的に変数を渡せます。

# 動的タスクincludeする時の問題
今まではinclude文しか使えません。ansible2.4対応で動的にタスクをincludeするとエラーが発生しました。例えばimportantという名のroleがあり、playbook.ymlの中このroleをincludeしています。このroleの中動的にタスクをincludeしてあります。
### before:

```yaml:roles/important/tasks/main.yml
...
- include: other_tasks.yml
    var1: password
...
```

### after_ver1:
include*文をそのまま代入します

```yaml:roles/important/tasks/main.yml
...
- include_tasks: other_tasks.yml
    var1: password
...
```
変更したあと

```
ansible-playbook playbook.yml
```

を実行すると

```
fatal: [myhost.com]: FAILED! => {"reason": "Unable to retrieve file contents\nCould not find or access '/working/dir/other_tasks.yml'"}
```
エラーが出ます。理由はincludeする時ansibleがplaybookのあるdirでother_tasks.ymlを探しています。でもこのymlはrole/importance/task/にあるので、見つからずエラーで終了しました。直すとすると
### after_ver2
```yaml:roles/important/tasks/main.yml
...
- include_role:
    name: importance
    tasks_from: other_tasks.yml 
  vars:
    var1: password
...
```
解説：まず動的にroleをincludeし、実行するタスクが入ってるymlをtasks_fromで指定します。無事role/importance/task/のdirでother_tasks.ymlを見つけました！
Chromeで画面レイアウトの確認

# モバイル・パソコンの表示を確認したい！
レスポンシブWebページ、HTTPヘッダーでHTMLを切り分けているなど、状況は様々ですが、画面のレイアウトを確認したいときってよくありますよね。特に、iPhoneやタブレットのモバイル端末からのWeb閲覧が増加しているので、両方に対応できる[Bootstrap](https://getbootstrap.com/)を使ったレスポンシブデザインは多いのではないでしょうか。
いざ、Webに公開したページでも、モバイル端末からだとボタンが重なっていたり、パソコンからだと余白だらけだと、デザインとしてイマイチですよね。なので、事前に確認しておこう！というのが今回の記事です。

Chromeの機能で簡単に出来たのでメモ書き程度に

# レイアウトの確認
今回はMac上でChromeを使用した例で説明します。画像と違う点があるかもしれません。

## 表示方法
1. 右クリック「検証をクリック」
 ![スクリーンショット 2018-01-16 17.17.19.png](https://qiita-image-store.s3.amazonaws.com/0/96755/2050713c-a92e-750a-f45e-d44ba1b59b81.png)


2. 「スマホ」みたいなマークをクリック
もしくはショートカットキー（Command + Shift + M）
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/96755/de2d001a-9f49-7d7c-ee6b-f3458444c63d.png)


3. スマホの端末の選択（iPhoneやNexus）や画面の回転などの操作ができる
![選択.png](https://qiita-image-store.s3.amazonaws.com/0/96755/08113c5e-983d-0042-42a1-fb4e203879ff.png)

## モバイル画面の利便性
モバイル画面のモードでは、通信ヘッダもモバイル端末のものになるので、HTMLの切り替えが行われているかも確認できる。1枚のHTMLだけであれば、あまり関係ないことかもしれないけど・・・
Node.jsでjpgの画像破損を判定する

jpgの末尾が破損するという現象に出くわし、それを判定する必要があった。

jpgのバイナリのEOIは `0xFF` `0xD9` なので、それをチェックすれば良い。

```is_broken_jpg.js
"use strict";

module.exports = (buf) => {
  return !(
    buf[buf.length - 1] === 0xD9 &&
    buf[buf.length - 2] === 0xFF
  );
};
```
Sublime Text3 > 手順 > 指定の名前のファイルをサイドバーで選択した状態にする

```txt:動作環境
Windows 7 Pro (32bit)
Sublime Text 3 Build 3143
```

### 希望動作

指定の名前のファイルをサイドバーで選択した状態にする。

### 手順

参考: [How to quickly find a file in the project by filename?](https://forum.sublimetext.com/t/how-to-quickly-find-a-file-in-the-project-by-filename/4572)
>  but the solutions I get are for locating files in projects or GoTo Anything.
>
>Edit: Nevermind, I found it. Right click and Reveal in Sidebar or map a key binding to it.

1. Ctrl + P
    - >> GoTo Anythingが開く
2. ファイル名を入力
3. Enterを入力してファイルを開く
4. ファイル内で右クリック > Reveal in Side Bar
    - >> サイドバーにてファイルが選択された状態になる

[Ctrl + 0を入力してサイドバーに移動](https://qiita.com/7of9/items/0664936715d664d960a0)すれば同じフォルダにあるファイルの閲覧を速くできるだろう。
(サイドバー上で移動中に対象ファイルがタブで開いていくのは使いにくい）。

自分が馴染みない(N >> 100)のファイルと対峙するにはエディタの機能をうまく使わないと。

@ 青春漂流 by 立花隆さん
宮崎学(動物カメラマン)さんのエピソード

> カンムリワシなどは、これまでその巣を見た人が一人もいないくらい、その生態は謎に包まれていた。
...
> 「くる日もくる日も、とにかく高い木の上に登って、カンムリワシの行動を観察しつづけるわけです。毎日毎日、１日に１０時間くらい木の上に登っていて、双眼鏡片手にひたすら観察をつづけるんです」
Sublime Text3 > ショートカットキー > サイドバーとグリッド間の移動 > Ctrl + [0-4]

```txt:動作環境
Windows 7 Pro (32bit)
Sublime Text 3 Build 3143
   - View > Layout > Grid:4 で設定

```

サイドバーとグリッド間の移動はCtrlと[[0-4]](https://www.debuggex.com/r/7LVBX6NcWQ0LruPQ
)の組合せで移動できるようだ。

- Ctrl+0: サイドバーへ移動
- Ctrl+1: Grid1へ移動
- Ctrl+2: Grid2へ移動
- Ctrl+3: Grid3へ移動
- Ctrl+4: Grid4へ移動

サイドバーへの移動については下記の記事で知っていたが、グリッド間の移動は先ほど知った。関連して覚えることができる。

- [Sublimetext | サイドバーをキーボードで操作する](https://qiita.com/YumaInaura/items/721941811fd4f7adee71)
Slackの絵文字が見にくかったのでChrome拡張の作り方を勉強した

# はじまり
[エンジニアを褒めるネコ](https://note.mu/kobaka7/n/n456624959588) の画像をSlackで絵文字に登録してみたのですが、ちょっと小さくて見にくい・・・

![slack-emoji-default.png](https://qiita-image-store.s3.amazonaws.com/0/118352/853a3e53-7e09-0a79-a0cf-27c641c9da97.png)

せや！絵文字大きくしたろ！！（似非関西弁）

ということでSlackの絵文字を大きく表示するChrome拡張を作ってみました。


# Chrome拡張の作り方
拡張機能というのは結局zipファイルです。
中には `manifest.json` という色々情報を記載するファイルと、機能を実現するためのスクリプトやCSSや画像などが入ります。

今回は絵文字を大きくしたいわけですが、そのために必要なものはCSSファイル1つだけ。
Chrome上で拡張機能のアイコンとなる画像ファイルも用意して、これで一式。

`manifest.json` には拡張機能の情報を書きます。こんな感じ。
[公式の解説](https://developer.chrome.com/extensions/manifest)

```json
{
  "name": "Slack-emoji-enlarger",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "enlarge emoji on Slack",
  "icons": {
    "16": "images/icon16.png",
    "128": "images/icon128.png"
  },
  "permissions": [
    "tabs",
    "http://*/*",
    "https://*/*"
  ],
  "content_scripts": [
    {
      "matches": [
        "https://*.slack.com/messages/*"
      ],
      "css": [
        "styles.css"
      ],
      "run_at": "document_end"
    }
  ]
}
```

つまり `https://*.slack.com/messages/*` なURLのときは最後に `styles.css` を読み込んでね！ということが書いてあります。

ディレクトリ構造は[こうなります](https://github.com/asny23/slack-emoji-enlarger)。

```text
slack-emoji-enlarger
 |- manifest.json
 |- styles.css
 |- images
     |- icon16.png
     |- icon128.png
```

あとはこれをブラウザで読み込めば([ここ](https://support.google.com/chrome/a/answer/2714278?hl=ja)のステップ2)このとおり。

![slack-emoji-2x.png](https://qiita-image-store.s3.amazonaws.com/0/118352/5c184294-3b28-6808-3596-e4de5bbb4a5b.png)

# これから
Chrome拡張なのでChromium系ブラウザでしか意味ないのがつらいですが、絵文字関係のその他の機能も入れていきたいですね。
Appium for Windows の覚え書き

Appium desktop の inspector 機能はどうも Windows では使えないらしい。

# Appium for Windows を使う
* [ここ](https://bitbucket.org/appium/appium.app/downloads/)からzipをDLしてインストール
* appium-adb.js にバグがあるので [ここ](http://www.testingtools.co/appium/error-command-failed-adb-exe-s-emulator-5554-shell-ps-uiautomator)を参考にスクリプトを修正する

# インスペクタの使用
* 右上にスタートボタンがあるのでそれを押してサーバをスタートさせる
* その横の虫眼鏡ボタンをクリックしインスペクタのウィンドウを出す
* refreshボタンを押すとアプリをインストールし始め、そのうちスクリーンショットと画面要素のツリーが出て来る。

# TIPS
* ANDROID_HOME が設定されていないと出る
    * 一度コンピュータを再起動しないと認識しないらしい。
* 2回めの起動が失敗する
    * Appiumはインスペクトを始める時に以下の2つのソフトをインストールしようとする。2回め以降の起動でも入れようとしてくるので、このアプリは手動とかadbコマンドとかで消す必要がある。
        * io.appium.settings
        * io.appium.unlock
* しばらく操作しないと勝手に切断する
    * 自動切断のタイムアウトが60秒に設定してある。しょうがない。テストコードとかからやる時は
 `desiredCapabilities.setCapability("newCommandTimeout", 10000);` とかやればいいらしい。
* `INSTALL_FAILED_NO_MATCHING_ABIS` と出る場合
    * ABI (Application Binary Interface)がx86だと対応しないアプリがあるらしい。それ以外のABIを持つ端末で適当に試してみる。が、こいつはクッソ遅い。あびゃー。
VMware > ネットワーク未接続状態で共有フォルダに到達する

```txt:動作環境
VMware Workstation 12 Pro v12.5.9
Windows 7 Pro (32bit)
Windows 8.1 Pro (64bit)
```

VMwareの共有フォルダ機能を使おうとしていた。
状況は下記の通り。

- ネットワーク接続していないゲストOS
- ホストOS上にフォルダを作成
- ゲストOSのオプションにて共有フォルダを追加
    - 名前: VMshareDir_180116
    - ホストパス: [ホストOS上に作成したフォルダへのパス]

設定はしたのだが、ゲストOSにおいてそのフォルダへの辿り方が分からなかった。

ネットワーク接続がある場合は、エクスプローラーにて下記の場所に見つかる。

```
ネットワーク > vmware-host > Shared Folders > VMshareDir_180116
```

ネットワーク接続がない場合は、エクスプローラーでネットワークを開くと以下のメッセージが表示される。

> このコンピューターはネットワークに接続していません。接続するにはクリックしてください...
>
> このフォルダは空です。

どうするか。

エクスプローラーのアドレスバーに以下の文字列を代入することで、ネットワーク未接続でもフォルダに到達することができた。

```
\\vmware-host\Shared Folders
```

### 備考

「ネットワーク接続」形態をホストオンリーやカスタムなどで接続すればたどりつけるかもしれないが、その設定を追加して元の設定に戻すよりも上記の方が早い?


### link

- [vmware > 共有フォルダ > ファイルの時刻がずれる](https://qiita.com/7of9/items/2c5b85cee40187fde3bf)
    - 共有フォルダ使用時の留意点として